
Когда речь заходит о воде в компьютерной графике, чтобы создать «настоящую» воду и подводные пространства, воду нужно симулить. Такие симуляции называются по-разному: 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 или дословно «перемещение вершин».

Сетка грида с демонстрацией волн. «Wave Race N64». (Нинтендо)
Анимация грида с помощью 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 поверхность для деформации.
Взаимодействие предмета с картой.
Red Dead Redemtion 2. (Rockstar Games)
Похожий метод использовался в фильме «Водный мир» режиссёра Кевина Рейнольдса и в фильме «Титаник» Джеймса Кэмерона.


«Водный мир» (реж. Кевин Рейнольдс)
«Титаник» (реж. Джеймс Кэмерон)
В некоторых сценах «Жизнь Пи» вода создавалась с помощью трекинга движения и анимированной поверхности.
«Жизнь Пи» (реж. Энг Ли)
ТЕХНИЧЕСКАЯ ЧАСТЬ
Displacement
Для экспериментальной части я решила показать сцену взаимодействия объекта с поверхностью воды в Houdini, не используя при этом Flip симуляцию. В качестве объекта я взяла корабль с сайта Sketchfab и создала простую анимацию его пути по гриду.
— Kelvin wakes deformer.
Kelvin wakes или Клин Кельвина — это математический термин, обозначающий «форму стационарного волнового возмущения в виде клина, возникающую за движущимся по поверхности воды судном.» (Большая Российская Энциклопедия, 2023)
Метод с деформацией вертексов стал основной ноды Kelvin wakes deformer. Она была создана SideFX целеноправленно для имитации волн от коллизии геометрии с водной поверхностью, где считывается информация от движущейся геометрии и передаётся на грид, деформируя точки.
Демонстрация ноды Kelvin_wakes_deformer.
Основные настройки Kelvin Wake Deformer: Falloffs и Spectrum
— Ocean spectrum.
Нода Ocean Spectrum используется в паре с нодой Ocean Evaluate. Она берёт грид и создаёт объёмы, деформируя вертексы, эти объемы содержат информацию, моделирующую влияние ветра или приливных сил на волны.


Kelvin Wake Deformer вместе с Ocean Spectrum.
Ocean Evaluate и Ocean Spectrum.
После анимации волн в первый вход ноды Kelvin_wakes_deformer подключается грид, а во второй вход предмет для коллизии, в данном случае лодка.
Для регулировки визуализации клина перед Kelvin_wakes_deformer использовалась нода Attribadjustvector, где умножалось значение скоростей точек для большей волнистости.
Настройки Ocean Spectrum.
Настройки вектора скорости.
Рендеры.
Таким образом без использования флип симуляции возможно сделать довольно убедительную поверхность воды с коллизией объекта в Houdini за счёт деформации вертексов и шейдера.