Когда речь заходит о воде в компьютерной графике, чтобы создать "настоящую" воду и подводные пространства, воду нужно симулить. Такие симуляции называются по-разному: 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
Для экспериментальной части я создала несколько сцен с упором на разные элементы, чтобы понять, какие из них возможно сделать без использования Flip, а какие нет.
В этих сценах я буду рассматривать:
— Displacement: • Kelvin Wakes Deformer. • Ocean Spectrum.
— Коллизию.
— Пену.
Displacement
— 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, где умножалось значение скоростей точек для большей волнистости.




