Gone with the waves

Материал из Blender3D.

Перейти к: навигация, поиск
Увеличить

Унесённые волнами (Gone with the waves)

Франсуа Грассар (François Grassard)

перевод: Noc-Emperor, Вадим В. Балашов

Содержание

Введение

Имитация океана является одной из тех практических задач, на которой рано или поздно пытаются поработать все художники, занимающиеся компьютерной графикой. Для этого могут быть использованы различные технологии, в зависимости от того, какое программное обеспечение вы используете. Очевидно, что лучшим подходом для создания подобного эффекта является использование жидкости, но это потребует очень много времени. В сцене морского сражения в «Пиратах Карибского моря 3» тысячи компьютеров в течение нескольких недель проводили расчёты для того, чтобы смоделировать течение воды океана.

Другим методом моделирования движения океана является использование «обычных» технологий, таких как модификаторы и ключевые кадры анимации (keyframe). Здесь описан именно этот метод. Сосредоточимся на движении волн и никакого shading (из трёх предоставленных, два blend-файла содержат простой shading). И последнее замечание. Все приведённые значения приблизительны и могут быть уточнены. Всё зависит от размера вашего океана и главное, от масштаба сцены в целом.

A) Готовим три основные текстуры :

Шаг 01:

Запустите Blender и создайте в нём новую сетку (Add >> Mesh >> Grid). Задайте параметрам X Res и Y Res значение 64 и нажмите ОК. Если Blender автоматически перейдет в режим редактирования (Edit mode), нажмите клавишу Tab чтобы вернуться в режим объектов (Object mode).
Увеличить

Шаг 02:

Поместите сетку в начало координат. Для этого нажмите Alt+R и затем Alt+G, чтобы сбросить значения перемещения и вращения. Нажмите клавишу N, чтобы появилось меню «Transform Properties» (свойства трансформации), и установите Scale X, Y, Z (масштаб по осям X, Y, Z) на 6. Нажмите F6, чтобы перейти в панель «Texture» в «Buttons Window» (окно кнопок) и нажмите кнопку «World».
Увеличить

Шаг 03:

Кликните на «Add New» чтобы создать новую текстуру. В поле «Texture Type» (тип текстуры) вместо «None» из списка выберите «Clouds» (облака). Установите значение шума «Noise Size» равное 0.5, «Noise Depth» (глубина шума) равное 6, а для «Noise Basis» (основа шума) выберите тип «Voronoi F2». Для того, чтобы потом можно было легко найти эту текстуру, измените её имя на «Turbulence> (турбулентность).

Увеличить

Шаг 04:

Щёлкните на пустой кнопке, расположенной ниже «Turbulence», снова нажмите на «Add New» (добавить новый) и выберите тип «Blend» (смешение). Выберите закладку «Color» (цвет), расположенную рядом с «Texture». Установите параметр яркости «Bright» на 2 и контрастности «Contrast» на 0.01. Вернитесь на закладку «Texture» и дайте вашей текстуре имя «White».
Увеличить

Шаг 05:

Кликните на новой пустой кнопке, снова нажмите на «Add new» (добавить новый) и выберите тип текстуры «Clouds» (облака). Установите параметры «Noise Size» на 1.0 и «Noise Depth» на 0. Дайте этой текстуре имя «Bigwave» (большая волна). Теперь у нас есть три основные текстуры для создания океана. Нажмите F9 для перехода в панель «Editing» (панель редактирования) и выберите сетку (grid).

Увеличить

B) На старт, внимание, смещаемся !!

Шаг 01:

Самое время использовать три текстуры, которые мы приготовили ранее. Для этого будем использовать один очень мощный модификатор, который есть в Blender - это «Displace» (смещение). Выберите нашу сетку (grid), нажмите на кнопку «Add modifier» (добавить модификатор) и выберите «Displace» (смещение). Этот модификатор предназначен для изменения формы мэша (mesh) в соответствии с яркостью любой текстуры. В параметрах модификатора смещения установите в поле «Texture» текстуру «Turbulence» (ссылка на текстуру, которую мы сделали раньше).

Увеличить

Шаг 02:

В параметрах модификатора смещения задайте параметру «Midlevel» (средний уровень) значение 0.35, а параметру «Strength» (сила) значение 0.125, тем самым уменьшив эффект влияния. Для того чтобы анимировать эти возвышения, нам необходимо использовать объект, который будет сообщать модификатору смещения сдвиг между текстурой и сеткой. Для этого надо создать пустышку Add >> Empty, и затем нажать Alt+G и Alt+R, чтобы поместить его в центр координат.
Увеличить

Шаг 03:

Выделите пустышку (Empty) и нажмите F9, чтобы перейти в панель редактирования «Editing». Переименуйте пустышку в «Turbulence_1». Выберите сетку и проверьте параметры модификатора смещения (Displace) в панели редактирования «Editing». Нажмите на «Normal» и переключитесь на «Z», затем нажмите на «Local» и переключитесь на «Object».
Увеличить

Шаг 04:

Режим «Object» используется для добавления сдвига в смещение (displacement) в зависимости от позиции другого объекта. В поле «Ob:> наберите «Turbulence_1», чтобы сослаться на созданную ранее пустышку (Empty). Если вы хотите проверить как работает смещение (Displacement), попытайтесь подвигать эту пустышку (Empty).
Увеличить

Шаг 05:

Выберите пустышку (Empty) и нажмите клавишу N, чтобы вызвать плавающее окно «Transform Properties». Установите ScaleX, Y и Z (масштаб по осям) в значение 6.3. Установите перемещение по осям LocX и LocY на 5 и установите значение LocZ на 0. Выберите сетку и затем кликните на кнопку «Set Smooth» (сделать гладким) в панели редактирования «Editing».
Увеличить

Шаг 06:

Создайте ещё одну пустышку (Empty), и назовите её «Turbulence_2». Поместите её в центр координат, используя Alt+R и Alt+G. Установите LocX, Y и Z в значения - 8.5 / 6 / 3, а параметры Scale по всем осям - в значение 6.5. Выберите нашу сетку, затем вернитесь в панель редактирования «Editing» и нажмите кнопку «Copy» (копировать) в «Displace» для того, чтобы создать копию этого модификатора.
Увеличить

Шаг 07:

Измените значение силы «Strength» созданной копии модификатора «Displace» на 0.25 и введите в поле «Ob:» название «Turbulence_2». Теперь два модификатора смещения «Displace» могут управляться независимо. Создайте новую пустышку (Empty) и поместите её в начало координат (Alt+R и Alt+G). Переименуйте её в «Waves» (волны), задайте параметрам LocX, Y и Z значения 9 / 9 / 2, а три значения масштаба (scale) равными 4.5.
Увеличить

Шаг 08:

Выберите сетку и снова нажмите кнопку «Copy», расположенную ниже модификатора «Displace». Теперь у нас есть три модификатора смещения «Displace», которые применены к сетке. Два из них добавляют небольшие колебания поверхности океана, а третий создаёт большие волны. В поле «Texture» задайте имя третьей текстуры «Bigwave» (большие волны), для того, чтобы сослаться на текстуру, которая была создана ранее. Установите значение «Midlevel» на 0.5, «Strength» на 0.4, а в поле «Ob:» введите «Waves», для того, чтобы сослаться на последнюю созданную пустышку (Empty).
Увеличить

Шаг 09:

Снова кликните по кнопке «Copy» внизу стека модификатора «Displace». Для параметров четвёртого «Displace» нажмите на «Z» и переключите на «Normal». Затем, нажмите на «Object» и переключите на «Local». Установите значение «Strength» равное 0.065 и введите в поле текстуры значение «White», ссылаясь на текстуру, созданную ранее. Этот четвёртый модификатор «Displace» используется для изменения высоты всех вершин в соответствии с собственными нормалями и для генерации гребней волны.
Увеличить

C) Анимация волн и добавление плавающего объекта :

Шаг 01:

Перейдите в первый кадр анимации, выделите пустышку (Empty) «Turbulence_1» и нажмите на клавиатуре клавишу I для создания нового ключевого кадра анимации со свойствами «Loc» («Loc» keyframe). Перейдите на 200 кадр, передвиньте пустышку «Turbulence_1» на -6/ -4/ 0 с помощью плавающего окна «Transform Properties». Снова нажмите I и выберите «Loc» для того, чтобы создать второй keyframe.
Увеличить

Шаг 02:

Теперь аналогично сделайте анимацию движения пустышки «Turbulence_2» (Empty) в противоположном направлении, используя два keyframe между 0 и 200 кадрами. Теперь движение двух пустышек, образующее букву «X», добавляет реалистичное волнение на поверхности моря. Теперь сделайте анимацию движения пустышки (Empty) с именем «Wave». Для того чтобы создать большие волны, она должна двигаться медленнее, чем две другие. Изменяя параметры скорости у разных пустышек, вы можете настраивать движение волн. Необходимо отметить, что по умолчанию базовым типом интерполяции у любого из анимированных объектов является Безье. Однако, в нашем случае, лучше подходит линейная интерполяция. Тип интерполяции может быть установлен в редакторе IPO Curve Editor. Для этого необходимо выделить все контрольные точки и нажать клавишу Т.
Увеличить

Шаг 03:

Теперь, когда мы создали движущийся океан, давайте добавим на его поверхность плавающий объект. Для этого воспользуемся функциями, которые предоставляет Blender. Добавьте в нашу сцену куб, нажмите Alt+R для сброса значения вращения в 0. Выделите куб, затем нажмите Shift и кликните на Grid, для того, чтобы добавить сетку к выделенным объектам.
Увеличить

Шаг 04:

Нажмите клавишу Tab, чтобы переключиться в режим Edit mode. Выберите три вершины на сетке, формирующие равносторонний треугольник. Чем больше треугольник, тем меньше волнение, которое передаётся кубу.
Увеличить

Шаг 05:

Теперь нажмите Ctrl+P, затем выберите «Make Vertex Parent» (сделать вершины родителями). Нажмите клавишу Tab, чтобы выйти из режима Edit mode. Теперь при помощи клавиши G переместите куб по поверхности таким образом, чтобы уменьшить размер пунктирной линии до 0. Как только всё будет готово, то нажмите «play» и наслаждайтесь.
Увеличить

Оптимизация для большой сцены

Увеличить

Как вы можете заметить, этот способ создания моря очень прост в настройке и даёт убедительные результаты. Модификатор смещения Displace в Blender является одним из моих любимых модификаторов, поскольку он работает очень быстро даже для моделей с тысячами полигонов (по-моему, он самый быстрый из всех когда-либо использованных мной в других пакетах трёхмерной графики, которые я использую свыше 15 лет).

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

Увеличить


В ходе работы вы можете динамически добавить или удалить разбиение (subdivision). Для этого просто добавьте модификатор Subsurf (сглаживание) наверх стека в режиме «Simple Subdiv.». Таким образом, вы можете увеличивать или уменьшать число разбиений, когда захотите. Когда вам необходимо настроить четвертый модификатор (тот, который генерирует гребни волн), просто увеличьте число уровней разбиения (subdiv number). После настройки модификатора, для нормальной работы установите прежнее значение параметра. Вы даже можете установить два различных уровня разбиения (subdiv) - один для окна с трёхмерным видом (3D view), а другой для рендеринга.

Если вы хотите протестировать последнюю SVN версию Blender с «Adaptive Subdivision» патчем, то скачайте её на graphicall.org. В ней вы можете динамически уменьшать число полигонов согласно расстоянию до камеры.

Дальние части вашего океана не будут иметь достаточного уровня разбиения для того, чтобы воспроизвести небольшие волнения на поверхности (но нам это безразлично, поскольку они расположены далеко и их не видно). Однако большие значения смещения «Big_Waves» на них всё же действуют, и число полигонов для расчёта вашим компьютером значительно уменьшится.

Так что вы можете создавать бесконечный океан без большого числа полигонов. Удачи, мальчики и девочки.

Личные инструменты