III. DfW в современной компьютерной графике
Original size 1140x1600

III. DfW в современной компьютерной графике

PROTECT STATUS: not protected

Когда речь заходит о воде в компьютерной графике, чтобы создать «настоящую» воду и подводные пространства, воду нужно симулить. Такие симуляции называются по-разному: Flip Simulation, Water Simulation, Fluid Simulation в зависимости от 3D программы.

Минус таких симуляций заключается в их комплексности: Fluid симуляции это типично симуляции, которые состоят из миллионов движущихся частиц, и все эти миллионы частиц программа должна просчитывать. Особенно заметно это сказывается на Real-Time движках, таких как Unreal Engine.

В случае, когда в сцене должна присутствовать вода, но вычислительные ресурсы ограничены, на помощь приходит историческая справка кинематографа, и воду снова попросту имитируют.

ТЕОРЕТИЧЕСКАЯ ЧАСТЬ

ИГРЫ И КИНЕМАТОГРАФ

Одной из первых игр, которая использовала текстуры вместо реальной симуляции воды с партиклами, стала игра «N64 Wave Race», выпущенная в 1996 г. студей Nintendo. На тот момент визуал и ощущение от воды в игре были потрясающими, водная гладь выглядела настолько реалистично, насколько это было возможно на консоли того времени.

«Wave Race N64» (Нинтендо)

Показательно, что при создании анимации волн в «Wave Race N64» использовались не просто анимированные карты текстур, а так называемый vertex displacement или дословно «перемещение вершин».

big
Original size 800x450

Сетка грида с демонстрацией волн. «Wave Race N64». (Нинтендо)

Original size 800x450

Анимация грида с помощью vertex displacement. «Wave Race N64». (Нинтендо)

В таких играх как «Расхитительница гробниц» 1996 г. студии Core Design хоть вода и была обычным плейном с текстурой, у студии были попытки создать симуляцию деформации изображения под водой.

Искажение подводного изображения. «Расхитительница гробниц». (Core Design)

Игра «Unreal» или «Нереальный», выпущенная в 1998 г. студиями Epic Games и Digital Extremes стала стала чуть ли не первой игрой, выполненной с помощью движка Unreal Engine 1. В глобальной перспективе метод создания флюидов без использования реальных симуляций не поменялся, а просто улучшался и дорабатывался, однако это был большой скачок вперёд с точки зрения визуальной презентациии и качества анимаций и текстур.

«Нереальный» (Epic Games и Digital Extremes)

Для экономии и упрощения часто используют linear displacement или по-другому dynamic displacement также для создания коллизии (взаимодействия) предметов с водой. Например, для того чтобы сделать симуляцию кругов на воде.

Он схож с vertex displacement, только использует не вертексы для создания анимации, а карты текстур. Этот метод использует шейдера, которые переносят информацию с текстур на 3D поверхность для деформации.

Original size 800x295

Взаимодействие предмета с картой.

Original size 800x450

Red Dead Redemtion 2. (Rockstar Games)

Похожий метод использовался в фильме «Водный мир» режиссёра Кевина Рейнольдса и в фильме «Титаник» Джеймса Кэмерона.

«Водный мир» (реж. Кевин Рейнольдс)

Original size 800x263

«Титаник» (реж. Джеймс Кэмерон)

ТЕХНИЧЕСКАЯ ЧАСТЬ

Displacement

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

В этих сценах я буду рассматривать:

— Displacement: • Kelvin Wakes Deformer. • Ocean Spectrum.

— Коллизию.

— Пену.

Displacement

— Kelvin wakes deformer.

Kelvin wakes или Клин Кельвина — это математический термин, обозначающий «форму стационарного волнового возмущения в виде клина, возникающую за движущимся по поверхности воды судном.» (Большая Российская Энциклопедия, 2023)

Метод с деформацией вертексов стал основной ноды Kelvin wakes deformer. Она была создана SideFX целеноправленно для имитации волн от коллизии геометрии с водной поверхностью, где считывается информация от движущейся геометрии и передаётся на грид, деформируя точки.

Original size 800x324

Демонстрация ноды Kelvin_wakes_deformer.

0

Основные настройки Kelvin Wake Deformer: Falloffs и Spectrum

— Ocean spectrum.

Нода Ocean Spectrum используется в паре с нодой Ocean Evaluate. Она берёт грид и создаёт объёмы, деформируя вертексы, эти объемы содержат информацию, моделирующую влияние ветра или приливных сил на волны.

Kelvin Wake Deformer вместе с Ocean Spectrum.

Original size 1199x591

Ocean Evaluate и Ocean Spectrum.

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

Для регулировки визуализации клина перед Kelvin_wakes_deformer использовалась нода Attribadjustvector, где умножалось значение скоростей точек для большей волнистости.

0

Настройки Ocean Spectrum.

Original size 1233x708
Original size 1027x380

Настройки вектора скорости.

0

Рендеры.

Коллизия

— Extract Transform.

Для отрабатывания коллизии объекта с гридом в Houdini существует нода Extracttransform. У ноды два входа, один для референсной геометрии, другой для таргетной. Нода считывает трансформации точек одной геометрии и переносит их на другую.

Для начала нужно задать простое движение объекта, это можно сделать либо обычной анимацией трансформов, либо с анимацией по курве с помощью ноды Copy-to-points.

Original size 1307x651

Сетап анимации по курве.

Далее используется уже упомянутый ранее Ocean Evaluate с анимацией грида. Он подаётся на вход Target geometry в ноду Extract transform, а нижняя часть корабля подаётся на вход Reference geometry. Далее с помощью Copy-to-points берутся таргетные точки деформированного грида, и на них переносится геометрия корабля.

Original size 1327x589
Original size 800x450

Отработка коллизии на волнах.

Original size 800x450

Рендер.

Пена

В первую очередь пена от бурного потока воды в CGI — это партиклы. К сожалению, при попытках создать пену используя текстуры и другие приёмы, она оказалась довольно неправдоподобной, поэтому самым лучшим способом для создания пены всё же является Flip.

post

Стоит учесть, что, при работе с Flip симуляцией необходимо правильно оптимизировать сцену: подготовить геометрию, удалить ненужные атрибуты и кэшировать разные этапы симуляции.

Для Flip симуляции с коллизией используются ноды Flip container, который задаёт размеры и настройки контейнера, Flip collide, куда подаётся коллизия, Flip solver, задающий симуляцию, и для компрессии перед кэшированием нода Fluid compress. Далее всё подключается к ноде Particle fluid surface для создания меша из партиклов.

Original size 800x450

Контейнер с Flip.

Original size 1059x466

Флип симуляция и кэш.

Пена создаётся на основе партиклов созданной Flip симуляции. Для пены используются ноды White water source, которая создаёт партиклы в зависимости выбросов жидкости, и White water solver для последующей симуляции.

Original size 800x450

Отработка пены.

Перед кэшированием симуляций обязательно необходимо удалять все ненужные атрибуты нодой Attribdelete.

Original size 1081x677

Создание пены и кэширование.

Original size 800x450

Демонстрация флюида с пеной.

Original size 800x450

Рендер.

Таким образом без использования Flip симуляции возможно сделать довольно убедительную поверхность воды с коллизией объекта в Houdini за счёт деформации вертексов и шейдера. Однако, нельзя создать сцену с пеной или брызгами без использования Flip.

III. DfW в современной компьютерной графике
Chapter:
1
2
3
4
5
We use cookies to improve the operation of the website and to enhance its usability. More detailed information on the use of cookies can be fo...
Show more