Создание водопада в Blender и анимирование воды посредством смещения текстуры и карты нормалей в Unity3D

Данная статья посвящена созданию водопада в Blender’е и анимации движения воды или любой другой жидкости, например, радиоактивной зеленой жижи, посредством смещения текстуры в игровом движке Unity3D версии 5.

Первая  часть статьи содержит создание 3D модели водопада, на материал которой в Unity3D будет наложена текстура воды, и простой каменной кладки. Вторая часть статьи содержит собственно оживление созданной воды посредством смещения диффузной карты и карты нормалей воды.

Не забывайте сохранять результаты своих трудов, особенно в Blender’е.

Горячие клавиши (сочетание клавиш) действуют только для того окна, в котором они были нажаты, в частности, в окнах 3D вида или окне редактирования UV/Изображения.

В качестве бонуса к текстовой статье по созданию водопада я записал 30-минутный ролик по созданию альтернативной модели водопада и его анимации в Unity 3D. В этом видео показаны все приемы, описанные в данной статье (и даже немного больше), так что вы в реальном времени можете понаблюдать процесс создания и использования 3D модели, скачать которую вы можете по ссылке: Скачать файл с альтернативной 3D моделью водопада из видео (1097 downloads) .

 

Создаем болванку “водопада”.

Запустите 3D-редактор Blender. Я предпочитаю иметь перед собой 4 окна 3D-вида: вид модели сверху (левое верхнее окно), вид спереди (левое нижнее окно), вид справа (правое нижнее окно) и перспектива пользовательская или ортогональная (правое верхнее окно). По умолчанию Blender открывается  с одним окном. Для того чтобы быстро разделить текущее окно на четыре описанных выше окна с соответствующими видами, достаточно нажать сочетание клавиш Ctrl+Alt+Q.

На рисунке изображено разбиение стандартного окна 3D-вида на четыре окна.
На рисунке изображено разбиение стандартного окна 3D-вида на четыре окна.

Все 3D-объекты в Blender’е создаются в месте расположения 3D-курсора (красно-белая окружность, вписанная в белую окружность). Чтобы облегчить навигацию по сцене в Blender’е и избежать проблем с размещением водопада на сцене в Unity после импорта, давайте  создадим заготовку для нашего водопада в центре сцены в Blender’е. Новые объекты в Blender’е создаются в позиции 3D-курсора, значит нам нужно поместить 3D-курсор в центр сцены в Blender’е. Чтобы установить 3D-курсор в центр сцены, поместите курсор мыши поверх одного из окон 3D-вида и нажмите комбинацию клавиш Shift+S. В открывшемся меню выберите ‘Cursor to Center’.

На рисунке показано меню, в котором можно помимо всего прочего, установить 3D курсор в центр сцены.
На рисунке показано меню, в котором можно помимо всего прочего, установить 3D курсор в центр сцены.

Создайте UV-сферу, для чего нажмите комбинацию клавиш Shift+A, и выберите “Mesh” в открывшемся меню Добавления объектов на сцену (“Add”), после чего выберите UV-сферу (UV Sphere) в выпадающем списке мешей.

На рисунке показано меню Добавления объекта на сцену (Add), в подменю Меш (Mesh) которого для создания выбрана uv-сфера.
На рисунке показано меню Добавления объекта на сцену (Add), в подменю Меш (Mesh) которого для создания выбрана uv-сфера.

Установите сфере следующие параметры:

— количество сегментов (Segments) = 32,

— количество колец (Rings) = 16,

— радиусом/размером (Size) =  1 юнит (unit).

Чтобы открыть меню параметров создаваемого/только что созданного 3D-объекта нажмите клавишу ‘T’ в результате чего  в левой части окна откроется панель инструментов. Выставьте в нем указанные выше параметры для сферы.  Также панель инструментов можно открыть, если нажать Левой Кнопкой Мыши (ЛКМ) на плюсик в верхнем левом углу окна 3D-вида. Если хотите открыть панель инструментов и сразу задать ее ширину, щелкните на плюсик Левой Кнопкой Мыши и не отпуская кнопку переместите мышь вправо для задания ширины панели.

Обратите снимание, что изменить параметры созданного объекта можно лишь до того, как будет совершено какое-либо другое действие в Blender’е, т.е. создание нового 3D-объекта, выделение другого 3D-объекта, перемещение этого или любого другого 3D-объекта, применение модификаторов, переход в режим редактирования меша и т.д. Исключением являются действия, связанные с навигацией в окнах Blender’а, изменением положения 3D-курсора, сменой вида или типа 3D-окна и малой частью других действий.

Изменить параметры только что созданного объекта также можно путем вызова меню через клавишу ‘F6’.

На рисунке показана сфера, созданная в 3D-виде сверху. Левую часть окна 3D-вида занимает панель инструментов, в нижней части которой показана вкладка Add UV Sphere, в которой можно выставить параметры только что созданного 3D-объекта. В правой части рисунка показано меню изменения параметров созданного объекта, вызываемого по нажатию клавиши ‘F6’, которое дублирует описанное выше меню (расположенное на левой боковой панели) и в котором также можно изменить параметры 3D-объекта, такие как: его размеры, позицию и угол, на который должен быть повернут созданный объект, а также ряд специфических параметров, которые могут включать, например, для сферы - количество сегментов и колец, радиус сферы/большого круга (большой окружности), для конуса – количество вершин его основания, радиус основания и радиус окружности, образованной секущей плоскостью, его высоту и т.д.
На рисунке показана сфера, созданная в 3D-виде сверху. Левую часть окна 3D-вида занимает панель инструментов, в нижней части которой показана вкладка Add UV Sphere, в которой можно выставить параметры только что созданного 3D-объекта. В правой части рисунка показано меню изменения параметров созданного объекта, вызываемого по нажатию клавиши ‘F6’, которое дублирует описанное выше меню (расположенное на левой боковой панели) и в котором также можно изменить параметры 3D-объекта, такие как: его размеры, позицию и угол, на который должен быть повернут созданный объект, а также ряд специфических параметров, которые могут включать, например, для сферы — количество сегментов и колец, радиус сферы/большого круга (большой окружности), для конуса – количество вершин его основания, радиус основания и радиус окружности, образованной секущей плоскостью, его высоту и т.д.

К слову о юнитах или внутренней системе измерения в Blender’е. У меня в настройках Blender’а выставлено равенство одного юнита (внутренней единицы измерения приложения, в данном случае Blender’а) одному метру, что очень удобно для экспорта моделей в Unity3D. Размер одного unit’а в Blender’е задает размер одной ячейки сетки. Но здесь есть свой нюанс шаг сетки (но не unit’а) меняется при приближении или удалении  модели.

Также имейте в виду, что смена величины unit’а (за исключением смены со значения по умолчанию “None” на метрическую “Metric”  с масштабом “Scale”, равным “1”) пропорционально меняет размеры всех объектов, расположенных на сцене. Если, например, высота вашего водопада равнялась двум метрам, то при установке значения для “Scale” равным трем, то высота вашего водопада будет равняться 6 метрам.

На рисунке показано окно/меню Свойств (Properties), в котором во вкладке Сцены (Scene), изображенной в виде иконки со сферой и цилиндром и источником света, нужно выбрать свиток “Units”, затем выбрать метрическую систему измерения “Metric” и масштаб “Scale”, равным 1. При таких настройках одна единица Blender’а (unit) будет равна одному метру. После выставления указанных параметров под обозначением типа проекции и вида (справа, слева, сверху, пользовательский и т.д.)  в каждом окне 3D-вида будет показан размер одного шага сетки в Blender’е: 10 метров, метры, 10 сантиметров (что вы можете заметить на рисунке ниже), сантиметры и т.д., в зависимости от приближения.

На рисунке показано окно/меню Свойств (Properties), в котором во вкладке Сцены (Scene), изображенной в виде иконки со сферой и цилиндром и источником света, нужно выбрать свиток “Units”, затем выбрать метрическую систему измерения “Metric” и масштаб “Scale”, равным 1. При таких настройках одна единица Blender’а (unit) будет равна одному метру. После выставления указанных параметров под обозначением типа проекции и вида (справа, слева, сверху, пользовательский и т.д.)  в каждом окне 3D-вида будет показан размер одного шага сетки в Blender’е: 10 метров, метры, 10 сантиметров (что вы можете заметить на рисунке ниже), сантиметры и т.д., в зависимости от приближения.

После того как вы создадите сферу, зайдите в режим редактирования меша, нажав клавишу ‘Tab’. Затем в ортогональной проекции вида справа выберите все вершины сферы, нажав кнопку ‘A’. Нажмите кнопку ‘B’, чтобы воспользоваться инструментом прямоугольного выделения, и, удерживая Правую Кнопку Мыши обведите вершины сферы, которые хотите исключить из выделения.

На рисунке в ортогональной проекции вида справа в режиме редактирования меша показана сфера со всеми выделенными вершинами  и рамка инструмента прямоугольного выделения/отмены выделения, помещенная вокруг вершин, которые будут исключены из выбора, как только будет отпущена Правая  Кнопка Мыши (ПКМ) . Аналогом Правой кнопки Мыши в данном случае может выступать Левая Кнопка Мыши (ЛКМ), но с зажатой клавишей ‘Shift’.
На рисунке в ортогональной проекции вида справа в режиме редактирования меша показана сфера со всеми выделенными вершинами  и рамка инструмента прямоугольного выделения/отмены выделения, помещенная вокруг вершин, которые будут исключены из выбора, как только будет отпущена Правая  Кнопка Мыши (ПКМ) . Аналогом Правой кнопки Мыши в данном случае может выступать Левая Кнопка Мыши (ЛКМ), но с зажатой клавишей ‘Shift’.

Удалите оставшиеся выделенные вершины, нажав клавишу ‘Del’ или ‘X’, и в открывшемся меню Удаления (Delete) выберите Вершины (Vertices).

На рисунке показаны выделенные для удаления вершины и меню удаления этих самых вершин, вызываемое по нажатию клавиши ‘X’ или ‘Del’.

На рисунке показаны выделенные для удаления вершины и меню удаления этих самых вершин, вызываемое по нажатию клавиши ‘X’ или ‘Del’.

Если объект в режиме редактирования меша отображается в режиме ребер или поверхностей, необходимо перейти в режим вершин, поскольку в режиме ребер выбрано будет больше ребер и вершин, чем требуется в данный момент. Меню, в котором вы можете сменить режим выбора частей меша, открывается по нажатию сочетания клавиш Ctrl+Tab.

На рисунке: слева показан меш в режиме редактирования поверхностей/полигонов меша и меню выбора режима редактирования меша (Ctrl+Tab) с выбранным пунктом отображения меша в режиме редактирования/выбора вершин; в центре показан меш в режиме редактирования ребер; справа на рисунке показан меш в режиме редактирования вершин.
На рисунке: слева показан меш в режиме редактирования поверхностей/полигонов меша и меню выбора режима редактирования меша (Ctrl+Tab) с выбранным пунктом отображения меша в режиме редактирования/выбора вершин; в центре показан меш в режиме редактирования ребер; справа на рисунке показан меш в режиме редактирования вершин.

Стоит отметить, что в Blender’е реализована возможность комбинировать режимы редактирования меша: режим редактирования вершин можно комбинировать с режимом редактирования ребер, режим редактирования ребер — с режимом редактирования полигонов, режим редактирования полигонов – с режимом редактирования вершин и комбинированный режим редактирования полигонов, вершин и ребер. Последний – очень удобен, кстати, поскольку выделение вершины приводит к выделению вершины, полигона – к выделению полигона и и ребра – соответственно, к выделению ребра, причем редактирование больше смещено в сторону работы с полигонами, так, например, выделение с использованием клавиши ‘Alt’ приводит к выделению

Теперь выберите нижнюю дугу получившегося объекта, образованную вершинами. Чтобы выделить дугу, а не одну вершину, нажмите и удерживайте клавишу ‘Alt’, подведите курсор к одному из ребер дуги, которую нужно выделить,  и нажмите Правую Кнопку Мыши. Вершины и ребра выделенной дуги окрасятся желтым цветом.

На рисунке показаны выделенные ребра и вершины, которые далее будут выдавлены/экструдированы для задания высоты водопада.
На рисунке показаны выделенные ребра и вершины, которые далее будут выдавлены/экструдированы для задания высоты водопада.

Если у вас выделились дополнительные ребра, как на рисунке ниже, то, удерживая клавишу Alt, щелкните Правой Кнопкой Мыши по нижним ребрам/нижней дуге еще раз.

На рисунке показаны ошибочно выделенные дополнительные ребра (слева) и выделение только необходимых нам ребер после повторного клика Правой Кнопкой Мыши с зажатой клавишей Alt по нижним ребрам/дуге меша. Если при выделенных нижних ребрах/нижней дуге четвертинке сферы щелкнуть Правой Кнопкой Мыши, то опять выделятся ненужные нам ребра – так Blender предлагает варианты выделения.
На рисунке показаны ошибочно выделенные дополнительные ребра (слева) и выделение только необходимых нам ребер после повторного клика Правой Кнопкой Мыши с зажатой клавишей Alt по нижним ребрам/дуге меша. Если при выделенных нижних ребрах/нижней дуге четвертинке сферы щелкнуть Правой Кнопкой Мыши, то опять выделятся ненужные нам ребра – так Blender предлагает варианты выделения.

Нажмите клавишу ‘E’, чтобы воспользоваться инструментом выдавливания (экструдирования/Extrude). Зажмите клавишу Ctrl  и переместите мышь вниз на расстояние, равное высоте вашего водопада. Как только желаемая высота водопада будет достигнута (например, равная двум метрам), нажмите Левую Кнопку Мыши, чтобы подтвердить сделанные вами изменения.

На рисунке слева показаны выдавливание ребер для задания высоты водопада. Справа на рисунке показано повторное выдавливание ребер для формирования разлива водопада, что описано ниже.
На рисунке слева показаны выдавливание ребер для задания высоты водопада. Справа на рисунке показано повторное выдавливание ребер для формирования разлива водопада, что описано ниже.

Упомянутое выше зажатие клавиши ‘Ctrl’ позволяет перемещать объекты и составные части меша с заданным шагом сетки (Snap), который, к слову сказать, зависит от степени приближения к 3D-модели и, естественно, размеров самой модели.

Стоит отметить, что находясь в режиме выдавливания (т.е. после того, как вы нажмете клавишу ‘E’ и до того, как подтвердите свои действия ЛКМ), вы можете ограничить перемещение составных частей меша (в данном случае — вершин) одной или двумя осями, нажав соответствующую ей клавишу. Так, нажав клавишу ‘X’, вы ограничите перемещение вершин по оси икс (x), а если, к примеру, нажмете клавишу ‘Y’, а затем клавишу ‘Z’, то вы ограничите перемещение вершин осями игрек (y) и зед (z), соответственно, т.е. исключите перемещение вершин по оси икс (x).

Выберите (если уже успели отменить выбор) еще раз самую нижнюю кромку водопада, которую только что выдавливали и выдавите ее еще раз чуть ниже (изображение справа на предыдущем рисунке).

В Blender’е, применение инструментов, таких как вращение и масштабирование частей объекта, например,  в режиме редактирования меша, может быть выполнено относительно pivot center, в роли которого в Blender’е может выступать 3D-курсор, активный элемент и т.д., т.е. все пункты вертикального меню “Pivot center for rotation/scaling”, открывающегося по нажатию на иконке, расположенной в панели под окном 3D-вида.

На рисунке показаны варианты модифицирования объекта относительно 3D-курсора  (3D cursor) и Активного элемента (Active Element). В верхнем ряду показано вращение меша: слева показан меш до вращения с выбранным 3D-курсоров в качестве pivot center; в центре – повернутый меш относительно 3D-курсора; справа – повернутый меш вокруг Активного элемента, выбранного в качестве pivot center. В нижнем ряду показано масштабирования меша, как и на верхнем рисунке – вокруг 3D-курсора и Активного элемента. Зеленым обведен элемент выбора pivot center панели Header с изображенным на нем типом pivot center, в данном случае – 3D-курсор. Фиолетовой рамкой обведена иконка, соответствующая Активному элементу, выбранному в качестве pivot center.
На рисунке показаны варианты модифицирования объекта относительно 3D-курсора  (3D cursor) и Активного элемента (Active Element). В верхнем ряду показано вращение меша: слева показан меш до вращения с выбранным 3D-курсоров в качестве pivot center; в центре – повернутый меш относительно 3D-курсора; справа – повернутый меш вокруг Активного элемента, выбранного в качестве pivot center. В нижнем ряду показано масштабирования меша, как и на верхнем рисунке – вокруг 3D-курсора и Активного элемента. Зеленым обведен элемент выбора pivot center панели Header с изображенным на нем типом pivot center, в данном случае – 3D-курсор. Фиолетовой рамкой обведена иконка, соответствующая Активному элементу, выбранному в качестве pivot center.

Белая окружность, которую вы можете видеть вокруг 3D-курсора или в другом месте 3D-пространства (в зависимости от того, что выбрано в качестве pivot center), указывает на pivot center для вращения/масштабирования элементов меша. По своей функциональности pivot center для вращения/масштабирования схож с Origin объекта (оранжевая точка). Origin объекта является точкой отсчета в 3D-пространстве, например, для игровых движков (именно в эту точку устанавливается 3D-модель в Unity3D, относительно нее производится вращение и т.д.). Также Origin объекта является центром применения модификаторов в Blender’е, таких как зеркалирование (Mirror), Массив (Array) и других.

Обратите внимание, что посмотреть, за что отвечает тот или иной элемент панели (в данном случае в роли такого элемента выступает иконка выбора pivot center для масштабирования/вращения), можно просто поместив курсор мыши поверх него. Открыть меню, соответствующее элементу панели, можно, щелкнув не нем Левой Кнопкой Мыши (см. рисунок выше, на котором зеленым и фиолетовым обведена иконка смены pivot center для вращения и масштабирования). Откройте меню “Pivot center for rotation/scaling” и выберите 3D-курсор, которому соответствует стилизованная иконка прицела, чтобы использовать 3D-курсор в качестве pivot center.

На рисунке показано меню выбора pivot center с выделенным пунктом меню, соответствующим выбору 3D-курсора в качестве pivot center для вращения/масштабирования.
На рисунке показано меню выбора pivot center с выделенным пунктом меню, соответствующим выбору 3D-курсора в качестве pivot center для вращения/масштабирования.

Теперь, необходимо выставить 3D-курсор в точку, относительно которой будет происходить масштабирование. В виде справа или слева в окне 3D-вида выберите сразу две крайние вершины, например, прямоугольным выделением (клавиша ‘B’). Вы можете выбрать две самые нижние крайние вершины в виде спереди, сзади, сверху, снизу или в пользовательском виде окна 3D-вида. Чтобы сменить вид в окне 3D-вида, нажмите на дополнительной цифровой клавиатуре клавиши ‘1’, ‘3’ или ‘7’ или сочетание клавиш Ctrl+1, Ctrl+3 или Ctrl+7.

Нажмите сочетание клавиш Shift+S и выберите “Cursor to Selected” в открывшемся меню “Snap”, чтобы установить 3D-курсор в позицию выбранных вершин.

На рисунке показан пример последовательности выбора вершин меша и выставление 3D-курсора в позицию выбранных вершин.
На рисунке показан пример последовательности выбора вершин меша и выставление 3D-курсора в позицию выбранных вершин.

Стоит отметить, что в том случае, если вы выберете одну вершину, то 3D-курсор будет установлен в позицию выбранной вершины. Если вы выберете несколько вершин, то 3D-курсор будет установлен в координаты геометрического центра этих двух вершин, так например, если выбрать две соседние вершины одного ребра (выбрав тем самым ребро, расположенное между ними), то 3D-курсор будет установлен в центр выбранного ребра. В нашем случае, 3D-курсор будет установлен в середину воображаемого ребра между двумя выбранными вершинами.

На рисунке показаны варианты установки 3D-курсора в зависимости от выбранных вершин: слева показан 3D-курсор установленный в единственную выбранную вершину; в середине показана позиция курсора, установленного сразу для двух одновременно выбранных вершин; справа – в для трех выбранных вершин.
На рисунке показаны варианты установки 3D-курсора в зависимости от выбранных вершин: слева показан 3D-курсор установленный в единственную выбранную вершину; в середине показана позиция курсора, установленного сразу для двух одновременно выбранных вершин; справа – в для трех выбранных вершин.

Итак, выберем 3D-курсор в качестве pivot center для перемещения/вращения и выставим 3D-курсор в усредненные координаты двух выбранных крайних вершин нашего меша, как показано на рисунке ниже.

На рисунке показаны окна 3D-вида выбранных крайних точек меша в 3-х проекциях (сверху, спереди, справа) и свободной просмотре 3D-модели (пользовательской перспективе).
На рисунке показаны окна 3D-вида выбранных крайних точек меша в 3-х проекциях (сверху, спереди, справа) и свободной просмотре 3D-модели (пользовательской перспективе).

Итак, давайте придадим сплюснутую форму нашему водопаду. Установите 3D-курсор в одну из крайних точек 3D-модели, как вы это делали выше и как показано на предыдущем рисунке. Масштабировать 3D-модель мы будем все также относительно 3D-курсора. Для того чтобы начать масштабировать модель, выберите все вершины меша (весь меш целиком), нажав клавишу ‘A’ (или путем выделения прямоугольной рамкой, или любым другим известным вам способом, включая выделение окружностью, вызываемого по нажатию клавиши ‘C’), и в виде спереди нажмите клавишу ‘S’, чтобы активировать масштабирование.  Теперь нажмите клавишу ‘X’,  чтобы ограничить масштабирование осью икс, и переместите мышь по направлению к 3D-курсору, чтобы сплющить модель. Закончите масштабирование, нажав Левую Кнопку Мыши, чтобы подтвердить устраивающую вас толщину меша потока воды. Обратите внимание, что при масштабировании вы, также как и при выдавливании, можете зажать клавишу ‘Ctrl’, чтобы масштабировать модель с предустановленным шагом.

На рисунке показано масштабирование меша водопада по оси X.
На рисунке показано масштабирование меша водопада по оси X.

Теперь давайте придадим форму потоку воды, стекающему по земле. Выберите нижнюю кромку водопада (Alt+ПКМ) в режиме редактирования вершин меша. Теперь активируйте инструмент масштабирования, нажав клавишу ‘S’, и переместите мышь по направлению от 3D-курсора, чтобы расширить полукруг. Нажмите Левую Кнопку Мыши, чтобы зафиксировать перемещенные вершины,  придав тем самым форму разлившейся воды.

На рисунке показана выделенная дуга после применения инструмента Масштабирование относительно 3D-курсора. Как видно на рисунке, масштабирование выбранной дуги (составляющих ее вершин и ребер) осуществляется вдоль положительного направления оси X (поскольку в отрицательной области не находится ни одной вершины) и вдоль положительной и отрицательного направления оси Y (поскольку слева и справа от 3D-курсора лежит свой, в данном случае одинаковый, набор вершин).
На рисунке показана выделенная дуга после применения инструмента Масштабирование относительно 3D-курсора. Как видно на рисунке, масштабирование выбранной дуги (составляющих ее вершин и ребер) осуществляется вдоль положительного направления оси X (поскольку в отрицательной области не находится ни одной вершины) и вдоль положительной и отрицательного направления оси Y (поскольку слева и справа от 3D-курсора лежит свой, в данном случае одинаковый, набор вершин).

Теперь войдите в режим масштабирования (‘S’), ограничьте масштабирование по оси ‘X’ и переместите курсор мыши, чтобы немного растянуть “разлив” воды по оси X, как показано на рисунке ниже.

На рисунке показан результат масштабирования дуги “разлива” в направлении оси икс относительно 3D-курсора.
На рисунке показан результат масштабирования дуги “разлива” в направлении оси икс относительно 3D-курсора.

Теперь выдавите и отмасштабируйте еще пару дуг, чтобы увеличить “разлив”, символизирующий форму растекающейся воды, пока не будете удовлетворены результатом (выдавливайте дугу вертикально вниз, используйте масштабирование относительно 3D-курсора по оси икс или по оси игрек, либо сразу по двум осям).

На рисунке показан пример водопада с “растекающейся” водой.
На рисунке показан пример водопада с “растекающейся” водой.

Теперь необходимо создать край “разлива” (бортик), который поможет скрыть возможные артефакты при размещении 3D-модели в Unity, особенно связанные с тем, что “разлив” нашего водопада достаточно тонок и через него может просвечиваться модель, расположенная под ним, например, ландшафт с его неровностями.

Выберите последнюю выдавленную и отмасштабированную дугу. Теперь выдавите ее вертикально вниз (нажмите клавишу ‘E’, затем клавишу ‘Z’ и переместите мышь вниз на желаемую высоту бортика и нажмите Левую Кнопку Мыши).

На рисунке показан край разлива водопада, созданный путем выдавливания вершин 3D-модели водопада (потока воды, если хотите).
На рисунке показан край разлива водопада, созданный путем выдавливания вершин 3D-модели водопада (потока воды, если хотите).

Созданный бортик позволит чуть выше поднять модель над ландшафтом, в свою очередь, позволив избежать просвечивания модели с определенных ракурсов, о которых, например, сказано в статье «Артефакты при импорте 3D моделей в игровые движки из 3D редакторов на примере Unity и Blender’а«. Также данный “обрыв” водопада может быть использован для создания каменного бортика вокруг разлива воды, не позволяющего воде “разлиться”. Этот бортик мы создадим чуть ниже путем копирования части меша водопада и преобразования его в отдельный 3D-объект, но об этом чуть ниже – после придания приплюснутой формы водопаду и созданию для него uv-развертки.

Если ваша 3D-модель все еще не сглажена и “вся в полигонах”, как на картинке ниже, то стоит сгладить ее поверхность, чтобы она выглядела как надо и радовала глаз. Хотя, сглаживание можно настроить и в самом игровом движке (даже в зависимости от угла между соседними полигонами), все же лучше подготовить модель полностью в 3D-редакторе перед ее экспортом/импортом.

На рисунке показана 3D-модель с несглаженными полигонами в режиме объекта (слева) и в режиме редактирования меша (справа).
На рисунке показана 3D-модель с несглаженными полигонами в режиме объекта (слева) и в режиме редактирования меша (справа).

Для того чтобы сделать модель сглаженной, необходимо, находясь в режиме редактирования меша, выбрать весь меш (клавиша ‘A’), затем открыть боковую панель инструментов (клавиша ‘T’ или смотрите выше) и выбрать в боковых вкладках вкладку “Shading” (слева от зеленой рамки на рисунке ниже), в которой выбрать кнопку “Smooth”.

На рисунке показан результат после применения сглаживания к полигонам 3D-модели.
На рисунке показан результат после применения сглаживания к полигонам 3D-модели.

Если для данной модели создать uv-развертку и экспортировать ее для дальнейшего импорта в игровые движки, то после импорта модели, например, в Unity3D, после ее размещения на сцене мы увидим, что она провалилась в пол.

На рисунке: слева показана модель, Origin которого располагается в центре 3D-модели водопада, а справа – Origin располагается на одной линии с самыми нижними вершинами модели.
На рисунке: слева показана модель, Origin которого располагается в центре 3D-модели водопада, а справа – Origin располагается на одной линии с самыми нижними вершинами модели.

Почему такое произошло? Все дело в расположении Origin. Как вы можете заметить, на рисунке ниже (и на всех предыдущих) Origin нашей 3D-модели выставлен в центр сцены, и располагается где-то посередине водопада. Конечно, можно поднять в Unity3D модель вручную, поменяв ее координаты по оси Y, но это отнимает время и силы, особенно при большом количестве моделей. Гораздо проще поднять модель в графическом редакторе. Сделать это можно путем перемещения вершин 3D-модели в режиме редактирования меша.

Чтобы переместить вершины 3D-модели водопада:

—  выберите ее при помощи Правой Кнопки Мыши;

— перейдите в режим редактирования вершин меша (клавиша ‘Tab’);

— выберите все вершины модели (клавиша ‘A’);

— нажмите клавишу ‘G’, отвечающую за инструмент перемещения элементов 3D-модели (мешей/вершин/ребер/плоскостей);

— нажмите клавишу ‘Z’, чтобы ограничить перемещение составных элементов осью зед;

— переместите мышь вверх, чтобы нижняя кромка модели водопада совпала с линией, проходящей через Origin.

На рисунке показан вид справа 3D-модели, меш которой поднят вверх, так чтобы его нижние ребра совпали с Origin.
На рисунке показан вид справа 3D-модели, меш которой поднят вверх, так чтобы его нижние ребра совпали с Origin.

Также, можно не перемещать 3D-модель, а выставить ее Origin на одну линию, например, с самой нижней вершиной или ребрами 3D-модели. Чтобы это сделать перейдите в режим редактирования вершин меша, выберите две крайние вершины 3D-модели водопада, как вы это делали выше, и выставьте 3D-курсор в воображаемую точку между ними (Shift+S->Cursor to Selected), находящейся в их геометрическом центре.  Теперь выйдите из режима редактирования меша (‘Tab’) и нажмите сочетание клавиш Shift+Ctrl+Alt +C и в выпадающем меню выберите “Origin to 3D Cursor”.

На рисунке показано меню установки Origin в геометрический центр модели (Geometry to Origin), в позицию 3D-курсора (Origin to 3D Cursor) и в позицию с координатами центра масс. Самым же верхним пунктом идет перемещение геометрического центра 3D-модели, вместе с самой 3D-моделью, в координаты Origin (Geometry to Origin).

На рисунке показано меню установки Origin в геометрический центр модели (Geometry to Origin),  в позицию 3D-курсора (Origin to 3D Cursor) и в позицию с координатами центра масс. Самым же верхним пунктом идет перемещение геометрического центра 3D-модели, вместе с самой 3D-моделью, в координаты Origin (Geometry to Origin).

Не самая удобная комбинация клавиш, не правда ли? Но и выставлять Origin объекта приходится не так часто. Однако существует еще один способ выставить Origin в позицию курсора: находясь в режиме объекта  (выйдите из режима редактирования меша, нажав клавишу ‘Tab’), выберите в меню, расположенном под окном 3D-вида, пункт “Object”, после чего в выпадающем меню выберите вкладку “Transform” и в подменю которого выберите “Origin to 3D Cursor”, чтобы выставить Origin своей 3D-модели в позицию 3D-курсора.

На рисунке изображено меню выставления Origin в позицию 3D-курсора.
На рисунке изображено меню выставления Origin в позицию 3D-курсора.

В процессе моделирования мне было удобно создавать 3D-модель так, чтобы ее “перед” был направлен в сторону положительной оси x (икс), в то время как для того, чтобы избежать мытарств с настройкой осей при экспорте из Blender’а и выправления осей при импорте в Unity3D, достаточно сориентировать 3D-модель “передом” в направлении оси игрек “y”. Для того чтобы развернуть 3D-модель в нужную сторону:

— установите 3D-курсор в ее Origin (выберите Правой Кнопкой Мыши 3D-модель в режиме объекта, затем нажмите сочетание клавиш Shift+S и в выпадающем списке выберите “Cursor to Selected”);

— нажмите клавишу R, чтобы активировать инструмент вращения модели и разверните свою модель, и, предварительно зажав клавишу Ctrl для поворота с шагом, перемещайте мышь вокруг Origin против часовой стрелки (или по часовой, в зависимости от того, в какую сторону вы ходите повернуть модель);

— подтвердите поворот модели по достижении требуемого угла ее поворота в 90 градусов против часовой стрелки (отображается как -90 в меню под окном 3D-вида, например, проекции сверху).

Если у вас не получается точно развернуть модель, например, на 90 градусов против часовой стрелки, то откройте левую боковую панель (клавиша ‘T’), в нижней части которой в меню последней операции, в данном случае операции Вращения, в текстовом поле “Angle” можете ввести требуемый угол поворота. В нашем случае нам достаточно ввести “-90” (без кавычек) и нажать Enter или щелкнуть Левой Кнопкой Мыши в окне 3D-вида, чтобы модель развернулась так, как нам надо.

На рисунке показана правильно ориентированная модель для экспорта из Blender’а и последующего импорта в Unity3D.
На рисунке показана правильно ориентированная модель для экспорта из Blender’а и последующего импорта в Unity3D.

Если вы хотите, чтобы размеры и ориентация объекта, созданного в Blender’е, соответствовали размерам и ориентации объекта, импортированного в Unity3D, параметр Масштаб (Scale) по всем осям должен равняться “1”, а параметры Поворот/Вращение (Rotation) должны быть нулевыми. Если параметры вашей 3D-модели отличаются от указанных выше параметров, вы можете применить текущие масштабирование/размер и поворот объекта без изменения его реальных параметров, но с выставлением значений для Scale и Rotation в значения по умолчанию (Scale 1,1,1, Rotation 0,0,0), если выберете объект и нажмете сочетание клавиш Ctrl+A, после чего в открывшемся меню выберете “Rotation & Scale”.

На рисунке: слева показаны параметры 3D-модели, один из параметров которой (поворот вокруг оси Z отличен от нуля); справа  показано меню Применения с выбранным пунктом применения Вращения и Масштабирования (Rotate and Scale) и обнуленные параметры для поворота вследствие применения Вращения и масштабирования.
На рисунке: слева показаны параметры 3D-модели, один из параметров которой (поворот вокруг оси Z отличен от нуля); справа  показано меню Применения с выбранным пунктом применения Вращения и Масштабирования (Rotate and Scale) и обнуленные параметры для поворота вследствие применения Вращения и масштабирования.

Помимо проблемы с “неправильным” положением опорной точки 3D-модели, существуют проблемы связанные с масштабированием и вращением объекта путем применения соответствующих инструментов масштабирования (горячая клавиша — ‘S’) и вращения (горячая клавиша вращения ‘R’). Чтобы модель после импорта в Unity3D имела нулевые значения  для угла поворота и единичные для масштаба и отображалась именно так, как вы задумали, необходимо проверить настройки масштабирования и поворота в 3D-редакторе. Чтобы это сделать, в меню/окне Свойств (Properties), откройте вкладку Объект (Object) и посмотрите, какой масштаб выставлен для вашего объекта.

На картинке показано окно Свойств (Properties) объекта с открытой вкладкой Преобразований (Transform), где вы можете изменить параметры расположения, масштабирования и поворота объекта.
На картинке показано окно Свойств (Properties) объекта с открытой вкладкой Преобразований (Transform), где вы можете изменить параметры расположения, масштабирования и поворота объекта.

Также для правильного экспорта 3D-модели из Blender’а (до версии 2.75 включительно) с целью ее импортирования в Unity3D необходимо повернуть модель вокруг оси X на -90 (минус 90) градусов (последовательность горячих клавиш: ‘R’, ‘X’, -90, Enter). Применить Вращение и масштабирование, как было описано выше (Ctrl+’A’ и выбрать “Rotation & Scale” в выпадающем меню “Apply”), после чего повернуть модель обратно вокруг оси икс на 90 градусов (последовательность горячих клавиш: ‘R’, ‘X’, 90, Enter).

Модель воды, изливающейся, к примеру, из какой-нибудь трубы или отверстия в стене, почти готова. Следующим шагом идет добавление 3D модели материала. Выберите модель воды и во вкладке Material/Материал (круг, разделенный на четыре части) в окне Свойств/Properties создайте для нее материал. Вы можете не создавать материал для модели, тогда в Unity для нее будет создан материал по умолчанию.

Теперь следует создать для нее uv-развертку. Созданную в будущем развертку можно увидеть в окне UV/Image Editor, открыть которое вы можете, если ткнете Левой Кнопкой Мыши в иконку Текущего типа редактора для данной области (Current Editor type for this area), в меню, расположенном под окном 3D-вида.

На рисунке изображено меню выбора отображения окна Редактирования UV-развертки/Изображения (UV/Image Editor) на месте окна 3D-вида.
На рисунке изображено меню выбора отображения окна Редактирования UV-развертки/Изображения (UV/Image Editor) на месте окна 3D-вида.

Чтобы создать развертку 3D-модели, поместите курсор поверх вашей модели в любом окне 3D-вида и нажмите клавишу ‘U’, чтобы открыть меню “UV Mapping“ . Выберите в данном меню пункт “Unwrap”, и в окне UV/Image Editor вы увидите созданную развертку своего водопада.

Альтернативно вы можете создать uv-развертку, если переместите курсор в окно UV/Image Editor’а и нажмете клавишу ‘E’, или в меню UVs под окном UV/Image Editor выберете пункт “Unwrap”.

Поскольку данная модель достаточно проста, то для нее нет необходимости создавать швы, разбивая uv-развертку на острова. Сориентируйте развертку приблизительно так, как показано на рисунке. В окне редактора uv-развертки действуют почти все те же инструменты, что и в окнах 3D-редактора, например, клавиша ‘G’ также отвечает за перемещение выбранных вершин, а кнопка  ‘R’ – за их поворот.

На рисунке: слева показана uv-развертка сразу после ее создания; справа – после вращения, перемещения и масштабирования. Не забывайте оставлять отступ от краев области, выделенной под развертку.
На рисунке: слева показана uv-развертка сразу после ее создания; справа – после вращения, перемещения и масштабирования. Не забывайте оставлять отступ от краев области, выделенной под развертку.

Закрепите (на сленге — ”запиньте”, от английского слова pin) uv-развертку, нажав клавишу ‘P’, или выбрав “Pin” в меню UV.

Теперь, чтобы задать размер для текстуры, которая будет использоваться с данной моделью, а также для возможности совмещения развертки с текстурой в графическом редакторе (Photoshop, GIMP и т.д.) необходимо создать новое изображение (New image) для текстуры, выбрав Левой Кнопкой Мыши иконку “New”, расположенную под окном редактирования развертки. В открывшемся меню введите название будущей развертки (например, waterfalldiffuse) и выставьте высоту и ширину будущего изображения равными 1024, после чего нажмите “Ok”.

На рисунке: слева изображено окно UV/Image Editor’а до создания нового изображения для uv-развертки; справа показано то же окно после создания uv-развертки.
На рисунке: слева изображено окно UV/Image Editor’а до создания нового изображения для uv-развертки; справа показано то же окно после создания uv-развертки.

Нажмите клавишу ‘A’ и затем клавишу  ‘.’/’Del’ на дополнительной цифровой клавиатуре, чтобы отцентрировать вид вашей uv-развертки по центру окна редактирования развертки или воспользуйтесь колесиком мыши, чтобы отдалить или приблизить uv-развертку для комфортной работы с ней. Стоит отметить, что клавиша “точка”/’Del’ на дополнительной цифровой клавиатуре работает и в любом другом окне 3D-вида, позволяя посмотреть/приблизить выбранные объекты (модель, меш, вершину, группу вершин, ребра, полигоны и т.д.) и отцентрировать их в окне 3D-вида.

На рисунке изображено окно редактирования uv-развертки/изображения до применения “View selected” (слева) и после применения приближения (справа).
На рисунке изображено окно редактирования uv-развертки/изображения до применения “View selected” (слева) и после применения приближения (справа).

Вы также можете выровнять uv-развертку, чтобы достичь более правдоподобного течения жидкости.

На рисунке показана альтернативная uv-развертка 3D модели потока воды. Выравнивание вершин нижней части вершин водопада выполнена относительно 2D курсора (меню выбора 2D курсора в качестве Rotation/Scaling Pivot выделено фиолетовым цветом) при помощи инструмента масштабирования с предварительной установкой 2D курсора в точку (выделяем вершину, жмем комбинацию клавиш Shift+S - > Cursor to Selected), относительно которой будет производиться выравнивание (клавиша ‘S’ и затем клавиша ‘Y’ или ‘X’ и только потом клавиша ‘0’/ноль и Левая Кнопка Мыши для подтверждения). Все также, как было показано ранее с 3D курсором. Отличие здесь состоит в том, что на uv-развертке ось y расположена вертикально, а ось x – горизонтально. Не забудьте после изменения uv-развертки запинить ее и пересоздать для модели водопада uv-развертку, чтобы координаты вершин в 3D пространстве совпали с координатами на uv-развертке.
На рисунке показана альтернативная uv-развертка 3D модели потока воды. Выравнивание вершин нижней части вершин водопада выполнена относительно 2D курсора (меню выбора 2D курсора в качестве Rotation/Scaling Pivot выделено фиолетовым цветом) при помощи инструмента масштабирования с предварительной установкой 2D курсора в точку (выделяем вершину, жмем комбинацию клавиш Shift+S — > Cursor to Selected), относительно которой будет производиться выравнивание (клавиша ‘S’ и затем клавиша ‘Y’ или ‘X’ и только потом клавиша ‘0’/ноль и Левая Кнопка Мыши для подтверждения). Все также, как было показано ранее с 3D курсором. Отличие здесь состоит в том, что на uv-развертке ось y расположена вертикально, а ось x – горизонтально. Не забудьте после изменения uv-развертки запинить ее и пересоздать для модели водопада uv-развертку, чтобы координаты вершин в 3D пространстве совпали с координатами на uv-развертке.

Теперь давайте экспортируем созданную uv-развертку в файл для редактора изображений. Выберите расположенный под окном редактирования развертки пункт меню UVs и в открывшемся меню выберите “Export UV Layout“, после чего в диалоге сохранения файла введите название файла для uv-развертки, например, “waterfalluv.png” и выберите папку, в которую хотите ее сохранить.

На рисунке показан процесс сохранения uv-развертки в Blender'е.
На рисунке показан процесс сохранения uv-развертки в Blender’е.

Теперь осталось лишь экспортировать нашу модель в FBX-файл, чтобы ее можно было использовать в редакторе Unity3D. Чтобы экспортировать вашу 3D-модель, выберите в Главном меню “File”, затем “Export”и желаемый формат, в данном случае FBX (.fbx). В диалоговом окне сохранения файла выберите настройки и имя будущего файла и папку, в которую хотите сохранить файл с экспортированной 3D-моделью.

На рисунке: слева показано выпадающее меню “File” с выбранной вкладкой “Export” и выбранных fbx-форматом в качестве формата для экспорта вашей модели; справа показано меню Экспорта модели, в котором зеленым выделены основные параметры для правильного экспорта на примере экспорта 3D-модели в Unity3D: ось -Z для “переда” 3D-модели, ось Y для указания направления вертикальной оси. Также зеленым отмечена вкладка “Mesh”, выбор которой с отменой выбора всех остальных вкладок обеспечит экспорт в файл только моделей, расположенных на вашей сцене. Обратите внимание, что в этом случае будут экспортированы все модели, находящиеся на вашей сцене. Вы можете экспортировать лишь выделенные модели, если поставите галочку напротив соответствующего пункта, расположенного под версией fbx-формата и масштабом экспортированной модели.
На рисунке: слева показано выпадающее меню “File” с выбранной вкладкой “Export” и выбранных fbx-форматом в качестве формата для экспорта вашей модели; справа показано меню Экспорта модели, в котором зеленым выделены основные параметры для правильного экспорта на примере экспорта 3D-модели в Unity3D: ось -Z для “переда” 3D-модели, ось Y для указания направления вертикальной оси. Также зеленым отмечена вкладка “Mesh”, выбор которой с отменой выбора всех остальных вкладок обеспечит экспорт в файл только моделей, расположенных на вашей сцене. Обратите внимание, что в этом случае будут экспортированы все модели, находящиеся на вашей сцене. Вы можете экспортировать лишь выделенные модели, если поставите галочку напротив соответствующего пункта, расположенного под версией fbx-формата и масштабом экспортированной модели.

Дополнительную информацию про экспорт/импорт 3D-моделей и их форматы, включая нативные форматы 3D-редакторов, поддерживаемые игровым движком Unity3D, вы можете посмотреть на рисунке ниже, а также прочитать все в той же вышеупомянутой статье про кривой импорт моделей в игровые движки и исправление нормалей модели, а также на официальной странице Unity3D, посвященной данному вопросу “Импортирование объектов из Blender”.

По сути, модель для визуализации падающей воды готова, так что следующую часть статьи, в которой описывается процесс создания каменного бортика вокруг водопада из части его полигонов, вы можете, если хотите,  пропустить, и перейти сразу к третьей части статьи, в которой будет описан импорт модели в игровой движок Unity3D, а также собственно процесс анимирования воды.

Создаем бортик для воды, чтобы она не «разливалась» вокруг.

Для того чтобы создать бортик вокруг водопада, выберите Правой Кнопкой Мыши только что созданный водопад и перейдите в режим редактирования меша (‘Tab’). Выберите в режиме редактирования меша все вершины (клавиша ‘A’), нажмите сочетание клавиш Shift+D, чтобы продублировать выбранные вершины (включая ребра и поверхности/полигоны), после чего нажмите клавишу ‘Esc’, чтобы после создания дубликата оставить его вершины на прежнем месте. Теперь, не снимая выделения с продублированных вершин, нажмите клавишу ‘P’ и выберите вкладку “Selection” в выпадающем меню “Separate”, чтобы преобразовать выбранные вершины в отдельный 3D-объект/3D-модель.

Выйдите из режима редактирования меша и в режиме объекта щелкните Правой Кнопкой Мыши в месте предполагаемого нахождения только что созданного объекта, чтобы выделить его, после чего перейдите в режим редактирования его меша.

На рисунке показан процесс создания нового 3D-объекта – каменного бортика для водопада из части модели водопада через создание дубликатов выделенных частей меша (вершин/полигонов в данном случае) и выделение их в самостоятельную 3D-модель.
На рисунке показан процесс создания нового 3D-объекта – каменного бортика для водопада из части модели водопада через создание дубликатов выделенных частей меша (вершин/полигонов в данном случае) и выделение их в самостоятельную 3D-модель.

Для того чтобы придать объем нашим выделенным плоскостям с целью создать каменный бортик, воспользуемся модификатором Solidify, который придает объем/толщину выбранным элементам, в данном случае полигонам.

На рисунке показан выбранный модификатор “Solidify” в меню Модификаторов/Modifiers.
На рисунке показан выбранный модификатор “Solidify” в меню Модификаторов/Modifiers.

В параметрах модификатора изменяем значение Смещения/Offset на “1”, увеличиваем толщину/Thickness до 50 см (или 0.5 в юнитах, если вы не выставляли метрическую системы, как было описано выше). Если ничего похожего на то, что изображено на рисунке ниже, у вас не вышло, то измените значение смещения на отрицательное: “-1”. Параметр толщины должен меняться в зависимости от размера модели.

На рисунке изображен процесс придания толщины поверхности посредством использования модификатора Solidify
На рисунке изображен процесс придания толщины поверхности посредством использования модификатора Solidify.

Если ваша 3D-модель выглядит как на рисунке ниже, обратитесь к такому параметру модификатора, как Flip Normals (Вывернуть нормали/Инвертировать нормали/Флип нормалей) и в зависимости от того, стоит рядом с данным параметром галочка или нет, соответственно снимите ее или поставьте. Данный параметр позволяет обратить на 180 градусов направление нормалей. Затененная поверхность моделей зачастую сигнализирует о том, что нормали полигонов такой модели направлены внутрь нее (вывернуты внутрь 3D-модели). Модели с направленными внутрь нормалями отображаются с артефактами. Более подробно о нормалях и артефактах, связанных с их направлением можно прочитать на этом сайте все в той же статье «Артефакты при импорте 3D моделей в игровые движки из 3D редакторов на примере Unity и Blender’а”.

На рисунке показана модель бортика с вывернутыми внутрь 3D-модели нормалями полигонов. Такая модель будет неправильно отображаться в игровых движках. Часть модели станет прозрачной, ее передняя поверхность, зато будет видна внутренняя поверхность задней части модели.
На рисунке показана модель бортика с вывернутыми внутрь 3D-модели нормалями полигонов. Такая модель будет неправильно отображаться в игровых движках. Часть модели станет прозрачной, ее передняя поверхность, зато будет видна внутренняя поверхность задней части модели.

После того как вы убедитесь, что нормали модели вывернуты наружу, можете применить модификатор “Solidify”. Применение модификаторов в Blender’е возможно лишь в режиме объекта, но никак не в режиме редактирования меша. Выйдите из режима редактирования меша (клавиша ‘Tab’) и нажмите кнопку “Apply”, чтобы применить модификатор.

На рисунке показан результат после применения модификатора Solidify: слева - в режиме объекта, а справа – в режиме редактирования меша.
На рисунке показан результат после применения модификатора Solidify: слева — в режиме объекта, а справа – в режиме редактирования меша.

Теперь давайте изменим высоту бортика, чтобы вода не “выливалась” за его пределы. В фонтанах же вода циркулирует по замкнутому контуру. Перейдите в режим выбора поверхностей (Alt+Tab и выберите “Face” в меню режима выбора меша). Выберите верхние полигоны бортика (Правая Кнопка Мыши, Shift+ПКМ), нажмите клавишу ‘G’, чтобы активировать инструмент перемещения, затем клавишу ‘Z’, чтобы ограничить перемещение по оси зед, и переместите мышь, чтобы немного увеличить высоту бортика.

На рисунке показан процесс изменения высоты бортика фонтана. Слева направо: меню режима выбора меша с выбранным пунктом Поверхность/Face, выбранные верхние полигоны бортика, перемещенные по оси z выделенные полигоны бортика.
На рисунке показан процесс изменения высоты бортика фонтана. Слева направо: меню режима выбора меша с выбранным пунктом Поверхность/Face, выбранные верхние полигоны бортика, перемещенные по оси z выделенные полигоны бортика.

Давайте теперь немного изменим форму бортика, добавив немного выступающих камней.

На рисунке показан цикл выдавливания выбранных полигонов с последующим изменением положения части их вершин вниз с целью придания индивидуальности составляющим каменный бортик камням. Также показан процесс превращения части полигонов 3D-модели в сглаженные, а части – в несглаженные, т.е. плоские/Flat, причем сглаженными оставлены лишь боковые поверхности бортика (третье и четвертое изображения).
На рисунке показан цикл выдавливания выбранных полигонов с последующим изменением положения части их вершин вниз с целью придания индивидуальности составляющим каменный бортик камням. Также показан процесс превращения части полигонов 3D-модели в сглаженные, а части – в несглаженные, т.е. плоские/Flat, причем сглаженными оставлены лишь боковые поверхности бортика (третье и четвертое изображения).

Как мы все знаем, в реальной жизни одинаковые камни встречаются крайне редко. Давайте придадим камням нашего бортика индивидуальности, для чего выберем полигоны в режиме редактирования полигонов меша (ПКМ и Shift+ПКП), как показано на первом изображении представленного выше рисунка (или как вам больше нравится). Нажмите клавишу ‘E’, а затем клавишу ‘Z’, после чего переместите мышь, чтобы выдавить выбранные полигоны по оси зед, и нажмите Левую Кнопку Мыши, чтобы подтвердить удовлетворяющую вас высоту. Один из вариантов того, что у вас должно получиться, показан на втором изображении рисунка выше.

Теперь давайте придадим нашим камням еще больше индивидуальности: выберите парные вершины верхней поверхности бортика, как показано на рисунке ниже.

На рисунке показаны выбранные пАрные вершины верхней поверхности каменного бортика.
На рисунке показаны выбранные пАрные вершины верхней поверхности каменного бортика.

Теперь нажмите клавишу ‘G’, чтобы активировать инструмент перемещения, затем нажмите клавишу ‘Z’, ограничив тем самым перемещение выбранных вершин по оси z, и переместите мышь, чтобы переместить выбранные вершины чуть ниже. Подтвердите желаемое расположение перемещенных вершин путем нажатия Левой Кнопки Мыши.

 На рисунке показаны вершины 3D модели, перемещенные чуть ниже относительно их первоначальных координат.
На рисунке показаны вершины 3D модели, перемещенные чуть ниже относительно их первоначальных координат.

Также подобное перемещение возможно (не во всех случаях, а лишь в частных, где существуют ребра, по которым могут быть перемещены выбранные вершины) путем применения инструмента Vertex Slide? Вызываемое для выбранных вершин по двойному нажатию клавиши ‘G’.

Как можно было видеть на одном из рисунков выше, часть модели для использования в игровых движках желательно сгладить путем затенения методом Гуро (плавное затенение,  Gouraud Shading , Smooth shading), а часть – постоянным затенением (Flat Shading, Flat).

Перейдите в режим редактирования поверхностей меша (нажмите комбинацию клавиш Alt+Tab и в выпадающем меню “Mesh Selected Mode” выберите “Face”) и затем, удерживая клавишу Alt щелкните Правой Кнопкой Мыши на одном из ребер вертикальной поверхности бортика, чтобы выбрать ее полигоны, как показано на рисунке ниже (левая часть рисунка). В левой панели инструментов окна 3D вида (открывается по нажатию клавиши ‘Tab’) во вкладке Shading/UV выберите “Flat”, чтобы сделать выбранные полигоны “плоскими” с ярко выраженными ребрами на их границах (в правой части рисунка ниже).

На рисунке показан процесс смены режима затенения части полигонов бортика водопада с Smooth Shading (выделено зеленым) на Flat (выделено оранжевым).
На рисунке показан процесс смены режима затенения части полигонов бортика водопада с Smooth Shading (выделено зеленым) на Flat (выделено оранжевым).

Вот и все, осталось лишь добавить нашей модели бортика материал (как было описано выше) и сделать для нашего бортика UV-развертку, как мы уже это делали выше для потока воды…

На рисунке показана маркировка ребер 3D модели в качестве швов.
На рисунке показана маркировка ребер 3D модели в качестве швов.

 

На рисунке показана uv-развертка, которая была сделана для маркированных ребер в качестве швов, как показано на рисунке выше.
На рисунке показана uv-развертка, которая была сделана для маркированных ребер в качестве швов, как показано на рисунке выше.

… и сохранить вашу 3D модель.

Когда на сцене была одна 3D модель, то она одна и содержалась в экспортируемом файле. Если же вы выполните экспорт сейчас, то получите две экспортированные 3D модели в одном файле.

В принципе, в этом нет ничего страшного, за исключением сбившегося центра каждого импортированного 3D объекта, если вы перенесете их на сцену. В любом случае из каждой импортированной 3D модели вы сможете сделать отдельный префаб и использовать их по своему усмотрению, если вынесете их из под одного автоматически создаваемого объекта пустыгки, являющегося родителем для ваших двух моделей. Кроме того, достаточно будет выставить координаты объектов на сцене в ноль и можно смело делать из ваших объектов префаб. А можно сделать префаб сразу из двух объектов, здесь единого решения нет, делайте, как вам будет удобней управляться с ними в дальнейшем.

Но что же делать, если я хочу экспортировать из Blender’а лишь одну 3D модель, а у меня их 2,3,5 и т.д. (например, вы создали интерьер кухни в 3D, а хотите экспортировать лишь один стул из красного дерева )? Неужели мне нужно будет удалить все объекты со сцены кроме своего 3D стула или стола? Или нужно сохранять каждый объект в отдельный файл? Но сколько времени это займет… Разработчики Blender позаботились обо всем за нас. Blender позволяет экспортировать не только все объекты сцены, но и лишь выбранные. Для этого достаточно в настройках экспорта поставить галочку напротив соответствующего параметра экспорта.

На рисунке показаны параметры экспорта модели в Blender’е в формате FBX.Вы можете выбрать для экспорта лишь меши выбранных объектов, масштаб, направление осей, включить в файл экспорта анимацию и т.д. и т.п. Зеленым отмечены параметры для экспорта лишь меша выбранного объекта.

На рисунке показаны параметры экспорта модели в Blender’е в формате FBX.Вы можете выбрать для экспорта лишь меши выбранных объектов, масштаб, направление осей, включить в файл экспорта анимацию и т.д. и т.п. Зеленым отмечены параметры для экспорта  лишь меша выбранного объекта.

Импорт моделей в Unity3D и анимация воды.

Теперь давайте импортируем наши модели в Unity 3D. Одним из способов импорта 3D моделей в Unity 3D является обычное перетаскивание файла FBX в

На рисунке показаны импортированные 3D модели в Unity3D. Желто-синим обведены 3D модели водопада с бортиком, экспортированные за один раз в файл. Как вы можете заметить, для этих двух моделей (waterfall и curb) была создана пустышка waterfall_complete. Также на рисунке показаны экспортированные в отдельные файлы модели бортика (waterfall_curb) и модель потока воды (waterfall_waterflow). Стрелками показано, куда необходимо перетащить диффузную карту и карту нормалей на примере модели waterfall. Бесполезно назначить текстуру пустышке, у нее просто нет материала. Труба, из которой вытекает жидкость, создана при помощи стандартных цилиндров, доступных в Unity во вкладке 3D Object меню GameObject, расположенному в верхней части экрана.
На рисунке показаны импортированные 3D модели в Unity3D. Желто-синим обведены 3D модели водопада с бортиком, экспортированные за один раз в файл. Как вы можете заметить, для этих двух моделей (waterfall и curb) была создана пустышка waterfall_complete. Также на рисунке показаны экспортированные в отдельные файлы модели бортика (waterfall_curb) и модель потока воды (waterfall_waterflow). Стрелками показано, куда необходимо перетащить диффузную карту и карту нормалей на примере модели waterfall. Бесполезно назначить текстуру пустышке, у нее просто нет материала. Труба, из которой вытекает жидкость, создана при помощи стандартных цилиндров, доступных в Unity во вкладке 3D Object меню GameObject, расположенному в верхней части экрана.

Параметр напротив Normal Map позволяет задать силу воздействия данной карты нормали – ее шероховатость/выпуклость.

Если при перетаскивании текстуры на модель waterfall_waterflow, на бортике отображается тот же материал, создайте в папке Material (или любой другой папке) новый отдельный материал для бортика (щелкните в одной из подпапок папки/вкладки  Assets Правой Кнопкой Мыши и выберите вкладку Create, а в ней Material). Введите имя материала, и перетащите его на модель waterfall во вкладке Иерархии (Hierarchy).

На рисунке показан процесс создания нового материала в одной из подпапок папки ассетов.
На рисунке показан процесс создания нового материала в одной из подпапок папки ассетов.

Карта нормалей взята из набора Yughues Free Cobble Materials.

На рисунке показан ассет Yughues Free Cobble Materials в хранилище ассетов Unity3D.com и, собственно, использованная в данном примере карта нормалей.

На рисунке показан ассет Yughues Free Cobble Materials в хранилище ассетов Unity3D.com и, собственно, использованная в данном примере карта нормалей.

Теперь давайте анимируем наш поток жидкости. Создайте C# скрипт, как вы создавали материал выше, только теперь вместо материала выберите вкладку C# Script. Введите имя скрипта “WaterfallTextures”. Откройте этот скрипт в редакторе, например, Monodevelop или MS Visual Studio. Выделите всте строки в открывшемся скрипте и замените их на следующие:

 

 

public class WaterfallTextures: MonoBehaviour – название класса, в данном случае, WaterfallTextures, должно совпадать с именем скрипта, в противном случае вы увидите предупреждение “The referenced script on this Behaviour is missing!”, либо “Can’t add script component ‘…’ because the script class cannot be found. Make sure that there are no compile errors and that the file name and class name match.”, либо “…error CS0101: The namespace ’global::’ already contains a definition for  ‘WaterfallTextures’” (пространство имен ‘global::’ уже содержит объявление для ‘WaterfallTextures’).

public float scrollSpeed = 0.5f; – объявляем переменную типа scrollSpeed float, которая будет определять скорость потока нашей воды (скорость смещения текстуры).

public Renderer rend; – объявляем переменную с именем rend типа Renderer;

rend = GetComponent<Renderer>(); — переменная “rend” инициализируется (задаем значение переменной)  значением компонента 3D модели “Renderer”. Во вкладке Inspector он называется “Mesh Renderer” (видно на рисунке выше) и если его нет или он будет отключен, то вы получите ошибку “MissingComponentException: There is no ‘Renderer’ attached to the «waterfalllow» game object, but a script is trying to access it. You probably need to add a Renderer to the game object «waterfalllow». Or your script needs to check if the component is attached before using it.”, либо 3D модель не будет отображаться. Назначение компонента Renderer в методе Start есть ни что иное как кеширование данного компонента для оптимизации, чтобы не нагружать систему частыми обращениями к компоненту Renderer, например в методе Update, который, в свою очередь, выполняется каждый кадр. Метод Start, в отличие от метода Update, выполняется лишь раз до обновления первого кадра после включения скрипта, т.е. до первого вызова метода Update(). Если же скрипт включен при старте игры, то данный метод (Start) будет вызван до начала игры.

float offset = Time.time * scrollSpeed; — объявление переменной offset и ее вычисление. Переменная offset является величиной, на которую будет смещена текстура по одной или двум осям uv-развертки. Time.time – время в секундах, прошедшее с момента запуска игры – время на начало текущего кадра, так что offset растет с ростом Time.time.

rend.material.SetTextureOffset(«_MainTex», new Vector2(0, offset)); — позволяет установить смещение текстуры материала компонента Renderer. Первый параметр _MainTex определяет тип смещаемой текстуры, в данном случае, основной диффузной текстуры. Второй параметр представляет собой параметр типа Vector2 и отвечает собственно за смещение текстуры по одной из осей x или y или по обеим сразу. В данном примере мы смещаем диффузную текстуру (а заодно и карту нормалей) по вертикальной оси y на значение переменной offset. По оси икс, смещение остается равным нулю.

Обратите внимание, что значение переменной offset следует иногда обнулять, поскольку по достижения значения в несколько миллионов (~ 7-8 миллионов) текстура перестает смещаться, так что игрок, например, запустивший и оставивший игру на несколько часов или дней, вернется к “замерзшему“ водопаду или переполнение по достижению значения 3,402823466E+38 переменной offset (или 1,175494351 E – 38, если вы постоянно отнимаете некую величину от значения offset с целью обратить поток жидкости в другую сторону) и, соответственно, ошибке “Floating-point constant is outside the range of type `float’”.

Вы также можете добавить вторичную карту нормалей в Secondary Maps, перетащив ту же или какую-нибудь еще карту нормалей в соответствующий слот Normal Map. И добавив строку “rend.material.SetTextureOffset(«_DetailAlbedoMap», new Vector2(0, offset*0.5f));” после строки “rend.material.SetTextureOffset(«_MainTex», new Vector2(0, offset));”. Данная строка, в зависимости от того, на какую величину вы умножаете offset. В данном примере, мы замедлили скорость вторичной карты нормалей, но если поставим значение больше единицы, то сможем ускорить смещение вторичной карты нормали. _DetailAlbedoMap в добавленной строке указывает на вторичную диффузную текстуру.

waterfall. Анимированная вода в Unity3D. Водопад.

Можете добавить еще одну, вторичную, текстуру. Она также будет перемещаться добавленной строкой скрипта со скоростью вторичной карты нормалей.

Таким способом можно имитировать несколько слоев воды, движущихся с различной скоростью, поскольку у дна скорость слоя жидкости ниже, чем у слоя, расположенного ближе к поверхности, например, реки.

Скачать файл 3D модели водопада из статьи (1067 downloads)

 

Автор: Максим Голдобин (aka MANMANA)

goldmaxval@gmail.com

4 Comment

  1. Andrejus says: Ответить

    Отлично

    1. Maxim Goldobin says: Ответить

      Спасибо!
      В скором времени планируется продолжение с частицами!

  2. Andrejus says: Ответить

    Здорово. Ждемс

  3. bulg says: Ответить

    A Lot of undeserving people are trying to get in. Im sure its the same people that talk shit about Nintendo and would never release any game on a Nintendo console.

Добавить комментарий