Создание занавесок
Многие 3D художники, вероятно, сталкивались в своей работе с
созданием интерьеров. И очень часто у них возникает вопрос о реалистичном
освещении. Проблему эту каждый решает по-своему… О методах освещения было
сказано довольно много, я же хочу поделиться опытом по созданию
реалистичного освещения интерьера при помощи VRay. Представьте сцену,
когда дневной свет, проходящий через занавески и шторы, рассеивается и
создает мягкое освещение комнаты. Если полистать журналы, то можно найти
множество таких примеров, когда кажется, что занавеска светится…
В
этом уроке вы узнаете (если раньше не знали J) о том как:
·создать реалистичную занавеску и шторы при помощи Reactor
Cloth
·использовать глобальное освещение
·создать
материал занавески и шторы, чтобы добиться требуемого эффекта.
·как пользоваться VRay (версия 1.09)
Урок написан так,
чтобы поняли даже начинающие 3Dшники, так что прошу Гуру 3D особо меня не
критиковать. Вы итак, надеюсь, сами все знаете…
Что вам для этого надо? 3DS MAX 4, 5 или 6, с
установленным Havok Reactor и VRay. Итак, давайте начнем!
Для начала
создадим вашу комнату. Обычно при моделировании я ставлю метры
(Customise/Units Setup/Display Unit -> meters). Пусть это будет коробка
(размеры по вкусу J) с координатами (0;0;0). Назовем её Стены. Далее
сделаем другую коробку поменьше, чтобы она оказалась внутри Стен. Далее
вырезаем из Стен вторую коробку при помощи Boolean. Сделаем еще одну
коробку 2.5 х 2 х 1.8м для окна и вырежем её из Стен. Комната готова!
Теперь займемся освещением. Создадим Target Direct Light по имени
Sun и направим его в проем окна. Координаты Sun = (13,3,9), Sun.target =
(0;0;0). Включим тени для Sun и выберем VRayShadow. В свитке
VRayShadowParams включим AreaShadows - этот флажок отвечает за создание
размытых теней как в реальном мире. Установим параметры как на рисунке.
USize означает, что размер источника 0.5 метра (можно и больше). Если, как
в данном случае, выбран тип источника теней Sphere, то VSize и WSize не
используются. Subdivs отвечает за качество теней. На данный момент
оставим все как есть.
На самом деле выбор размера источника - за вами, он зависит
от того, то вы хотите получить – четкие тени безоблачного дня или
бесформенные тени дня пасмурного. Конечно же нужно будет подобрать и
соответствующее освещение. Но как определиться с размерами? В реальном
мире расстояние от Солнца до Земли – L=150 млн. км, диаметр Солнца – D=1.4
млн. км. Следовательно (вспомним геометрию), угловые размеры Солнца –
?=2*Arctg(1.4/(2*150))=0.53? (если принять D/2 – за противолежащий катет,
а L – за прилежащий, то ?/2=Arctg(D/2L) J). Ну а если вы люди сугубо
творческие и вас пугает лишь один вид всяких-там формул, есть способ
попроще – приняв глаз за центр окружности, L – за радиус, а D – за кусочек
дуги, мы можем легко найти угол ? (в радианах) разделив D на L. Чтобы
перевести радианы в градусы – умножим результат на 57.3? (столько градусов
в одном радиане). Т.е ?=57.3?*1.4/150 = 0.53?- примерно полградуса. Теперь
осталось рассчитать размер источника для нашего случая – в свитке General
Parameters для Sun указывается расстояние от источника до цели
(Sun.target) – 16.09 м. Это L, нам надо найти D, тогда
D=L*0.53?/57.3?=0.148 м. Источник такого размера будет давать довольно
четкие тени. Итак, задавшись нужным угловым размером источника света, мы
теперь можем легко рассчитать его линейные размеры.
Далее, нам
надо создать материал для стен и рамы. Сделаем материал VRayMtl, цвет RGB
(216,216,216). Назовем материал Walls и присвоим его раме со стенами.
Зададим голубой цвет фона (Rendering/Environment/Background Color или
нажмем 8) RGB (0,192,255). Желательно использовать в сценах материал
VRayMtl во избежание проблем с просчетом освещения, кроме того, карта
фотонов (photon map) просчитывается только с VRayMtl.
|
Затем жмем F10 - вызываем окно рендеринга. По умолчанию 3d Max
использует свой Scanline движок, мы же заменим его на VRay. Для
этого в свитке Current Renderers нажмем кнопку Assign и выберем в
списке VRay. Если у вас 6-й Макс, то надо открыть список Assign
Renderer. |
|
Теперь включим глобальное освещение GI. Для тех, кто не знает
что это такое - GI (Global Illumination) - алгоритм расчета
освещения, основанный на реальных физических явлениях
Распространения света. Свет от источника, падающий на объекты,
отражается от них, при этом часть света поглощается, а отраженный
рассеянный свет освещает другие предметы и т.д. В результате
картинка выглядит очень реалистично. Перейдите в свиток Indirect
Illumination (GI) и включите флажок On. Посмотрите на рисунок. Вы
должны установить у себя те же параметры для Image Sampler, GI,
Environment. Они определяют настройки GI и рендеринга. Более
подробно об использовании VRay можно прочитать в библиотеке сайта
Darc.ru. Там же вы найдете руководство по VRay на русском языке. |
|
Ну что ж, настало время посмотреть. Нажимаем кнопку Render и
ждем... Вот результат! Что же, по-моему, немного темновато. Для того
чтобы сделать картинку ярче можно пойти множеством путей:
увеличивать яркость первичных лучей (First bounce); вторичных лучей
(Secondary bounce) и т.д. Но в данном случае лучше добавить
вспомогательный источник света. |
Многие 3D художники, вероятно, сталкивались в своей работе с созданием
интерьеров. И очень часто у них возникает вопрос о реалистичном освещении.
Проблему эту каждый решает по-своему… О методах освещения было сказано
довольно много, я же хочу поделиться опытом по созданию реалистичного
освещения интерьера при помощи VRay.
Для этого создадим источник света типа VRayLight. Параметры – как
на рисунке. Установите галочку Invisible – для того, чтобы скрыть источник
при рендеринге. Включенный параметр Store with irradiance map означает,
что свет от этого источника будет сохранен в irradiance map (карте
освещения) и дополнительного просчета теней не будет (часто ускоряет
рендеринг J). Разместим источник как на скриншоте – ВНУТРИ, возле окна.
Сделаем источник немного больше окна. Нажимаем F9 и ждем…
Результат! (Для оживления картинки я добавил в
сцену Chamfer Box и назначил ему материал VRayMtl с небольшим отражением)
Следующие шаги будут зависеть от того, какую
версию 3d Макса вы используете. Дело в том, что используемый в 6-м Максе
Reactor 2 немного отличается от 1-й версси в 5-ом Максе. В частности,
отличие заключается в способе применения модификатора Cloth и выделения
вершин. Я приведу пример создания ткани в 6-м Максе. Если вы работаете в
4-м или 5-м Максе, то вам нужно выбирать вершины при помощи MeshSelect, а
уже потом применять нужный модификатор – Cloth, AttachToRB и тд. Всё
остальное выполняется так же, как и в 6–м Максе.
|
|
Для начала создадим Nurbs-плоскость для будущей шторы.
Очень важно, чтобы внешняя часть плоскости была направлена к
источнику света для получения нужного эффекта. |
Теперь объясню, зачем нам нужна Nurbs плоскость.
Во-первых, её просто создать. Во-вторых, она имеет встроенные
UV-координаты. В третьих, что самое важное, она позволяет управлять
триангуляцией (разбиением на полигоны) поверхности. Существует
несколько способов триангуляции, нам же, для лучшей симуляции ткани,
нужна поверхность с нерегулярно расположенными полигонами. Для этого
перейдём в панель Modify и выберем свиток Surface Approximation.
Установите метод Spatial и значение Edge = 0.12. В Advanced
Parameters установите стиль Delaunay. Параметр Edge определяет длину
ребер треугольников, на которые подразделяется наша плоскость. Затем
просто применяем модификатор rector Cloth. Вот, что должно
получиться.
|
|
|
Затем, выделяем Штору, переходим в панель Modify и переключаемся
в режим Subobjects, выбрав Vertex. Нам нужно выбрать те вершины, за
которые будет подвешена Штора. Выделим несколько нужных вершин и в
свитке Constraints кликнем Fix Vertices.
Этим несложным
действием мы зафиксировали вершины, а в маленьком окошке появилась
надпись Constraint to World (привязка к миру). После этого не
спешите снимать выделение с выбранных вершин, здесь есть маленький
нюанс: скриншоты сделаны сразу после фиксации вершин и видно, что
выделены как вершины, так и Constraint to World. Если сейчас снять
выделения с вершин, ткнув где-нибудь мышкой в окне, то привязка к
миру останется, но она не будет содержать ни одной точки, что в
дальнейшем, при симуляции, приведет к ошибкам. Вместо этого надо
кликнуть в пустом поле окошка, в котором находится Constraint to
World, сняв выделение с Constraint to World. Выбранные вершины
станут желтыми. Все дело в том, что мы, выбрав привязку,
переключаемся в режим выбора точек, на которые воздействует эта
привязка. Если снять выделение с активной привязки, мы можем
выбирать точки, для создания новой привязки. Надеюсь, я все объяснил
понятно… Еще кое-что - я обычно отключаю у объектов режим отсечения
невидимых граней (Backface Cull), т.к. это мешает при моделинге –
полигоны видны только с одной стороны. Для отключения этой опции
нужно в свойствах объекта (rightclick -> properties) скинуть
флажок Backface Cull. |
|
Осталось настроить свойства ткани для Шторы.
Установим следующие параметры:
Mass=0.5
kg;
Friction(трение)=0.5;
Relative Density(плотность
относительно воды)=0.3;
Air Resistance(сопротивление
воздуха)=0.1.
Force Model -> Simple Force Model:
Stiffness(жесткость ткани)=0.03;
Damping(затухание
колебаний)=0.3.
Если Stiffness=1, то ткань изгибаться
не будет. Это может оказаться полезным при создании листов металла и
т.д. В поле Fold Stiffness(жесткость на изгиб) -> None. Это ускорит процесс расчета. Обязательно установим Avoid Self-Intersections - для того, чтобы ткань не
пересекалась сама с собой. Остальные параметры оставим без
изменений.
|
|
|
Несмотря на то, что мы применили модификатор Cloth,
Reactor еще не знает, что нужно просчитывать динамику ткани – нам
необходимо добавить в сцену Cloth Collection. А для симуляции
твердых тел надо добавить RBCollection. Для этого в панели
инструментов перейдем к меню Helpers/Reactor. Кликнем мышкой на
RBCollection (Rigid Body Collection), затем кликнем мышкой в любой
точке вьюпорта за пределами комнаты. Мы увидим значок RBCollection.
Выделим его и перейдем в панель Modify. В свитке RBCollection
properties нажмем Add, чтобы добавить объекты. В появившемся окне
выберем «Стены» (и пол, если вы его сделали отдельно и др. твердые
тела). Нажмем Select.
Точно так же создадим Cloth Collection и
добавим туда Штору. |
|
|
Наш следующий шаг – настройка параметров Reactor’а. Давайте
приступим к делу!
Перейдем к закладке Tools на панели
инструментов. Если у вас нет копки reactor, то вам придется её
сделать. Для этого нажмите на выделенную на рисунке кнопку. Появится
окно Configure Button Sets. Увеличим значение Total Buttons на 1. В
списке кнопок добавилась новая вакансия! Затем просто перетащите из
списка Utilites утилиту reactor на пустующую кнопку. Нажмите ОК. |
|
Двигаемся дальше. Сама утилита Reactor содержит
несколько свитков. Мы поменяем некоторые параметры и запустим
просчет динамики.
В свитке World устанавливаем значение и
направление силы тяжести. Пусть в нашем случае она действует
вертикально и равна силе тяжести Земли. g = -9.81 м/с/c. Установим
это значение. Знак - показывает на то, что сила тяжести направлена
вниз.
В свитке Preview&Animation установим те же параметры,
что и на рисунке. Анимация будет длится 101 кадр. Параметр
substeps/key = 12 по умолчанию равен 10, он отвечает за точность
просчета динамики. Но во время симуляции у меня возникали глюки с
тканью – я увеличил значение substeps/key до 12 и глюки кончились.
Теперь выделим «Стены» и перейдем в свиток Properties. В поле
Simulation Geometry необходимо установить Concave->Use Mesh, т.к.
«Стены» невыпуклый (Convex) объект. Если через любую точку объекта
провести плоскость и все точки лежат по одну сторону от этой
плоскости или на ней, то объект – выпуклый, иначе – вогнутый.
Выпуклые - шар и кубик, а невыпуклые (впуклые J) – бублик и стакан.
Если у вас вогнутый объект, а в параметрах он указан как выпуклый,
то симуляция пройдет с ошибками.
Установите Col. Tolerance =
0.03 m, а World Scale = 1 m in MAX. Collision Tolerance определяет
точность просчета столкновений объектов, это расстояние на котором
объекты взаимодействуют друг с другом. World Scale отвечает за
масштабирование объектов при расчете динамики. Так как наши объекты
сделаны в реальном масштабе, то здесь мы установили
1. |
Теперь нам остаётся лишь включить Update Viewport, нажать кнопку Create
Animation и смотреть за процессом просчета динамики. Если вы всё сделали
правильно (как я), то никаких предупреждающих сообщений вы не увидите, но
ведь закон подлости на то и существует!)
Вот какие сообщения вы можете
увидеть:
Gravity strength seems too high - Сила тяжести очень большая!
Вы либо неправильно задали силу тяжести Gravity, либо масштаб сцены World
Scale.
Tolerance extremely low. Check its value and the World Scale.
Слишком маленькое значение Collision Tolerance или неправильный масштаб
сцены World Scale.
There are interpenetrations - У вас где то
пересекаются объекты, для корректного расчета динамики этого не должно
быть. Если же у вас все прошло гладко, то мы увидим покадровую анимацию
динамики ткани. Сам процесс не займет много времени, даже на старых
компьютерах. Пару минут. Максимум.
А если у вас пошло что-то не так и
вы хотите удалить результаты симуляции ткани, то нужно выбрать ткань,
перейти в Modify->Properties и нажать кнопку Clear KeyFrames. Ключи
анимации исчезнут и ткань примет первоначальный вид!
У вас могут
возникнуть проблемы с динамикой – объекты могут вести себя очень странно –
проходить друг сквозь друга, разлетаться на куски и т.д. Эту проблему
можно решить увеличив значение substeps/key.
Следующий шаг –
создание подвязки для занавески, которая немного «подтянет» Штору.
Перейдет в вид сверху и создадим сплайн, похожий на фиолетовый сплайн
в скриншотах. Назовем его «подвязка». Аналогично, создадим 2 сплайна,
подобно 2-м зеленым сплайнам. Эти 2 сплайна, line1 и line2, будут
вспомогательными кривыми при анимации подвязки.
Теперь сделаем из
«подвязки» узкую полоску ткани.
|
Для этого, выбрав сплайн, кликнем правой кнопкой в
любом окне, в сплывающем меню в свитке Transform выберем Convert
to->Nurbs. Затем идем в Modify, выделяем сплайн и в панельке
инструментов щелкаем на Create Extrude Surface (обведено). Задайте
высоту 0.05 метра. Мы получили узкую полоску ткани! Затем в Surface
Approximation -> Spatial -> (Edge = 0.12) -> Advanced
Parameters -> Delaunay. Далее применяем reactor Cloth с теми же
параметрами, только массу поставим 0.1 кг и включим параметр
Constrain Deformation = 10 %, для того, чтобы ограничить предел
растяжения до 10 %. Иначе подвязка очень сильно растянется и не
подтянет штору. |
|
Возле краев сделаем 2 маленьких кубика, к которым
позже прикрепим концы подвязки. Каждый конец к своему кубику. Теперь
попытаемся заставить двигаться кубики по сплайнам. Выделим первый
кубик и перейдем в панель Motion на панели инструментов. В свитке
Assign Controller выделим Position и нажмем кнопочку с вопросиком. В
появившемся списке выбираем Path Constraint. Затем в свитке Path
Parameters нажмем Add Path и укажем на нужный сплайн (line1 или
line2). Все то же самое проделаем со вторым кубиком. В итоге мы
заставим двигаться кубики по сплайнам. Но это еще не все. Выделим
1-й кубик. Затем выделив в Track Bar ключи анимации кубиков, которые
находятся в 100 кадре и сдвинем их на 50-й кадр. Тоже самое сделаем
со 2-м кубиком. Можно посмотреть результат, запустив анимацию.
Получится, что кубики проходят вдоль своих направляющих сплайнов за
50 кадров, а не за 100. |
Настала пора прицепить подвязку к кубикам. Выделив
подвязку, выбираем вершины на одном из концов, затем, не снимая
выделения, в свитке Constraints жмём Attach to Rigid Body. Выше
свитка Constraints откроется свиток привязки Attach to Rigid Body,
нам нужно нажать на кнопочку None и выбрать нужный кубик (лучшее в
проекции сверху – оттуда виднее J). Аналогично, выделяем вершины
другого конца (не забыв снять выделение с активной привязки) и
привязываем их к другому кубику. Осталось добавить кубики в
RBCollection, а подвязку – в Cloth Collection. Так как мы уже
анимировали кубики и нам ни к чему просчитывать их динамику
Reactor’ом, то надо исключить их их симуляции. Для этого в панели
Reactor в свитке Properties включим у обоих кубиков флажок Unyelding
(неподатливый). |
|
Нам осталось только
запустить симуляцию заново. Если никаких проблем не будет, то все займет
минут 5… После окончания расчета можно погонять анимацию любуясь своим
творением!
Отмотаем ползунок таймера в самый конец (клавиша end).
Если присмотреться к нашей модели шторы, то можно отметить некоторую
угловатость и остроту изгибов. Чтобы их сгладить применим к ткани
модификатор HSDS. В Advanced Subdivisions выберем High. Теперь углы и
изгибы сгладились и проблем больше нет!
Остается сделать занавеску – перейм в вид
сверху, сделаем сплайн, придадим ему немного кривую форму и применим
Extrude.
Все! С моделированием окончено!
|
Итак, на данный момент мы имеем модели комнаты, Штор и
Занавески, остается создать материал для ткани и добиться того
эффекта, ради которого мы всю эту кашу и заварили.
Откроем
Material Editor, выберем пустой слот и назначим ему VRayMtl
материал. Назовем его оригинально - Штора. Задайте Diffuse = RGB
(255;128;128), а для Fog Color установите белый цвет. Цвет Refract =
RGB (33;33;33). Остальные параметры как на рисунке. Коэффициент
преломления IOR=1, т.к. шторы свет не преломляют! Fog multiplier =
10. Теперь скопируем материал Штора в соседний слот и назовем
копию Занавеска. Установите белый цвет для Diffuse и Fog Color и
серый для Refract RGB (64;64;64). Для Refract цвет означает степень
прозрачности, черный - непрозрачный, белый - полностью прозрачный.
Сделаем последний материал для подвязки бежевого цвета. Назначим
материалы объектам. |
Теперь все готово.
Осталось только запустить рендеринг! И вот что получилось:
Для финального рендеринга я установил в VRay:
Image Sampler(Antialiasing) флажок на Adaptive Subdivision – края объектов
будут сглажены и без «лесенки».
Ну вот и всё! Теперь вы сами сможете
создать любой тряпичный объект - гобелен, накидку для дивана, кресла,
кровати и разбросать по комнате одежду…
|