Создание реалистичной воды в Blender (Cycles)

По поводу создания воды в Blender’е (используя рендер Cycles) уроки есть, но, мне показалось, бывают они лишь двух видов:

0. Простые, но результат не нравится;

1. Результат нравится, но сложность урока где-то на уровне «ад и погибель» (авторы грузят леденящими кровь формулами, да ещё и показывают весь процесс не с самого начала, а с момента, когда куча сложных узлов уже создана).

Пришлось поэкспериментировать и самому создать шейдер, который меня устроил. Оным и делюсь с остальными...

Конечный результат выглядит вот так:

Часть 0: создание поверхности воды

Для начала нужно создать поверхность воды. Сделать это можно разными способами.

Способ 0: Dynamic Paint

Добавленную в сцену плоскость необходимо несколько раз подразделить (выделить всё в режиме редактирования W Subdivide). Чем больше подразделений — тем выше→→качество, но и больше нагрузка на комп.

После подразделения отправляемся во вкладку Physics (панель инструментов), жмём кнопку Dynamic Paint Add Canvas Surface Type: Waves. Водная поверхность готова.→→Теперь создаём объект, который будет создавать, собственно, волны. Для этого сойдёт любой меш. Выбираем его, опять идём в Dynamic Paint, но на этот раз вместо Canvas выбираем Brush, жмём Add Brush и больше ничего не трогаем.

Перемещаем Brush — создаём волны. Только при этом не забыть включить проигрывание анимации (Alt+A). Для наглядности сделал убогую гифку:

Способ 1: Displacement map

Потребуется обычный плейн с UV-развёрткой. Добавляем Texture Noise Texture и→подключаем его к узлу Displacement у Material Output’а. Теперь при переключении режима просмотра в «Rendered» можно наблюдать некую рябь на воде (изменять её вид можно, меняя параметры Noise Texture). Для наилучшей наглядности сделать плейну зеркальный материал (типа Glossy) и добавить карту окружения (Environment map).

Правда, такая рябь будет статичной (разве что попробовать анимировать какие-то параметры у Noise Texture, но сам не пробовал).

Способ 2: Модификатор Ocean

Суть сводится к тому, что добавленному в сцену плейну добавляется модификатор Ocean, после чего настраиваются его параметры. Подбирать параметры — по вкусу. Из наиболее значимых:

0. Repeat X/Y — если одного квадратного «океана» не хватает.

1. Resolution — чем больше — тем лучше, более-менее оптимально — 15-17.

2. Size — размер плейна (эффект не идентичен тому, что достигается при использовании кнопки S и мыши — попробуйте сами и поймёте, в чём разница).

3. Scale — высота волн.

4. Chopping — увеличение этого параметра делает гребни волн более отчётливыми.

Если хочется, чтоб этот океан был не статическим (например, при создании видеоролика),то нужно анимировать параметр Time (который по умолчанию 1.00)

Часть 1: создание материала

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

1. Difuse BSDF удаляем.

2. Вместо него ставим Mix Shader.

3. Создаём Glass BSDF и подключаем на верхний инпут Shader у Mix Shader’а. Roughness —на ноль, IOR — 1.333. Этот параметр отвечает за степень искажения объекта, на который мысмотрим через воду. Для воды он равен 1.333, для других материалов таблицы можно найтив интернете (гуглить «показатель преломления»).

4. Добавляем Transparent BSDF и подключаем на нижний инпут Shader у Mix Shader’а.

5. Добавляем узел Layer Weight, аутпут Fresnel подключаем к инпуту Fac у Mix Shader’а.

6. Между Layer Weight и Mix Shader’ом втыкаем узел RGB Curves. Как настраивать? Как больше нравится. Включите режим просмотра Rendered и играйтесь с кривыми, пока результат не начнёт нравится.

7. Теперь желательно сделать так, чтоб по мере увеличения глубины становилось темнее. Для этого добавляем Volume Absorption и подключаем к инпуту Volume у узла MaterialOutput. Цвет и Density, опять же, подбираем сами по вкусу и ситуации.

Автор: Денис Скиба aka Mapper720

04.05.2015