Вода — один из самых сложных элементов для симуляции в реальном времени, объединяющий оптику, гидродинамику и геймплей.
Статья разбирает технологии рендеринга, физические модели и ключевые вехи, изменившие восприятие воды в играх за 30 лет.
Почему вода остаётся «финальным боссом» для движков
Любой художник подтвердит: вода не имеет собственного цвета или формы. Она — зеркало окружения, линза для преломления света и носитель волн одновременно. В растеризаторе это требует решения трёх задач сразу: расчёт геометрии поверхности, симуляция оптики (отражение, преломление, каустика, поглощение) и взаимодействие с объектами. До недавнего времени видеокарты не позволяли делать всё это физически корректно при 60 кадрах в секунду, поэтому разработчики прибегали к уловкам — кубическим картам окружения, пререндеренным текстурам нормалей и упрощённым шейдерам.
Сложность усугубляется масштабом. Река в локации и океан в открытом мире требуют разных подходов. Локальная вода допускает высокую детализацию и физику частиц. Глобальный океан требует бесшовного тайлинга, LOD (уровня детализации) на расстоянии километров и синхронизации состояния волн между клиентами в сетевых играх. Ошибка в фазе волны на горизонте сразу ломает иллюзию реальности.
Ключевая мысль
Реалистичная вода — это не одна текстура, а слоёная система: геометрия волн + нормали для микродеталей + скрин-спейс или рейтрейсинг отражений + волюметрика для глубины + физика взаимодействия. Сбой в любом слое виден глазу мгновенно.
Эволюция рендеринга: от спрайтов к рейтрейсингу
Эра текстур и кубических карт (1990-е — начало 2000-х)
В Quake или Unreal Tournament вода была полупрозрачной текстурой с анимированными UV-координатами. Отражения — статичные кубические карты (cubemaps), запечённые при компиляции уровня. Движение вершин шейдером давало иллюзию волн, но физика отсутствовала: предметы не тонули, а просто исчезали или лежали на невидимой плоскости. Прорывом стал Half-Life 2 (2004): вода получила преломление (refraction) через граб-текстуру экрана, отражения в реальном времени для локальной воды и шумовые нормали для детализации. Это заложило стандарт на десятилетие.
Скрин-спейс отражения (SSR) и деформация вершин
С приходом deferred-рендеринга и MSAA стало возможным рассчитывать отражения за один проход по буферу глубины и нормалей. SSR даёт точные зеркальные блики на воде без стоимости кубических карт. Но у метода фундаментальный недостаток: он не видит то, что за пределами экрана или зарыто глубиной. Артефакты на краях экрана и «провалы» в отражениях заставляли художников маскировать воду туманом или камышами.
Геометрия волн выносилась в вершинный шейдер. Стандартом стала сумма синусоид (Gerstner Waves) или спектральный метод (FFT — Fast Fourier Transform) по работам Тессендора. FFT позволяет генерировать реалистичный океанский спектр Филлипса с ветровыми волнами, сваллом и капиллярными рябями. Sea of Thieves и Assassin’s Creed IV: Black Flag доказали, что FFT на GPU работает для открытого моря при умном LOD: сетка сгущается у камеры и разрежается на горизонте.
Рейтрейсинг и путь к ground truth
Аппаратный рейтрейсинг (DXR, Vulkan RT) устранил главный недостаток SSR. Луч от камеры попадает в воду, преломляется (закон Снеллиуса), отражается от дна или объектов под водой, снова выходит в воздух и уходит в небо или на берег. Один луч заменяет каскад проходов: преломление, объёмное рассеятие, каустика на дне. Cyberpunk 2077 в режиме Psycho RT и Avatar: Frontiers of Pandora демонстрируют воду, где каустика плавно танцует на скалах в глубине 20 метров, а отражения не ломаются при повороте камеры.
Цена — производительность. Полный путь луча через объём воды требует volumetric ray marching. Современные движки (Unreal Engine 5, Snowdrop, Anvil) используют гибрид: рейтрейсинг для первого отражения/преломления +.screen-space для множественных отскоков + аналитическая каустика на дне. Это даёт 90% визуала за 30% стоимости полного патhtracing.
SSR (Screen Space Reflection)
Быстро, работает на любом железе. Артефакты на краях экрана, нет отражений задних сторон объектов. Стандарт для средних настроек.
Raytraced Reflection/Refraction
Физически корректно, видит за экраном. Требует RT-ядров. Часто используется только для первого отражения (primary hit).
Planar Reflections (Planar Probe)
Рендер сцены с зеркальной камеры. Идеально для зеркальных озер, бассейнов. Дорого: удвоение draw calls. Не работает для волноватой воды.
Физика взаимодействия: плавучесть, волны и распад
Визуал без физики — декорация. Игрок ожидает, что ящик затоплен на 60% объёма, выталкивающая сила Архимеда равна весу вытесненной жидкости, а форма волны меняется от проходящего корабля. В 2010-х это решалось через упрощённые коллайдеры: невидимый жесткий корпус под водой, применяющий силу в точку центра массы. Результат — предметы «катались» по воде как по льду, не очерпывая её.
От импульсов к частицам: SPH и FLIP
Smoothed Particle Hydrodynamics (SPH) моделирует воду как набор частиц, взаимодействующих через ядра сглаживания. Даёт красивые брызги и распад струй, но требует миллионов частиц для крупного масштаба — только для локальных эффектов (взрывы, фонтаны, дождь). FLIP (Fluid Implicit Particle) объединяет частицы и сетку: частицы несут массу и импульс, сетка решает уравнение Навье-Стокса для давления. Это стандарт для оффлайн-симуляции (Houdini), в реальном времени используется редко из-за стоимости решателя давления.
В играх применяют гибрид: вершинная волна (FFT/Gerstner) для глобальной формы + локальная симуляция частиц (Niagara в UE5, VFX Graph в Unity) для взаимодействия у игрока. Корабль в Sea of Thieves не рассчитывает давление на каждый полигон корпуса. Система сэмплирует высоту волн в точках контакта ободка, интегрирует силы Архимеда и сухого трения, а визуальные брызги рождаются частицами по порогу скорости относительного движения.
Сэмплирование высоты волн
Движок опрашивает вершинный шейдер океана в точках контакта коллайдера объекта с водой.
Расчёт выталкивающей силы
Объём погружённой части считается аналитически или воксельной аппроксимацией. Сила прикладывается к риджидбоди.
Демпфирование и сопротивление
Квадратичное сопротивление движению (drag) и линейное демпфирование вращения стабилизируют поведение.
Визуальная обратная связь
Частицы пены, брызги, шлейф (wake) и деформация сетки за кораблём спавнятся по эвристикам скорости и погружения.
Вода как геймплейный слой: выживание, ужас, исследование
Технологии бессмысленны, если вода не меняет правила игры. История геймдизайна воды — это переход от «синей стены, в которую нельзя войти» к полноценной среде обитания.
Выживание: ресурс и угроза
Subnautica, Raft, The Forest. Вода — источник питья, еды, материалов и главная граница прогресса. Глубина гейткиит контент: давинг-гёр, кислород, давление. Физика течений и температуры слоёв создаёт естественные пазлы.
Хоррор: невидимость и беспомощность
Amnesia, SOMA, Iron Lung. Мутная вода скрывает угрозу. Звук под водой искажается (фильтр низких частот), вид ограничен партикулами и объёмной пеленой. Игрок теряет опору — нет гравитации, нет привычных ориентиров.
Исследование: вертикальность миры
BioShock, Abzû, Dave the Diver. Вода позволяет тройной двигатель: плавание, дрейф, полёт (в Abzû). Вертикальный уровень дизайна раскрывается через буйancy-пузл: поднимать предметы пузырями, управлять плавучестью скафандра.
Симуляторы и гонки: физика как скилл
Wave Race 64 (легендарная физика 1996), Hydrofoil, Sea of Thieves. Чтение волн — навык. Игрок учится «серфить» по гребням, резать в Wellen, использовать обратный теchenie. Вода — не декор, а трасса с меняющейся геометрией.
Вехи технологий: игры, сдвинувшие планку
Ниже — хронология ключевых моментов, когда вода перестала быть фоном и стала субъектом инженерии.
Технические ловушки, в которые попадают разработчики
Ошибка: Игнорирование преломления при рендеринге дна
Дно рендерится так, будто воды нет — просто с альфой поверхности. Итог: камуни на дне выглядят увеличенными и сдвинутыми не туда. Исправление: рендерить дно в отдельный таргет с матрицей проекции, скорректированной по закону Снеллиуса (коэффициент преломления воды ~1.33), затем компонировать с поверхностью.
Ошибка: Статичные кубические карты для океана
На безбрежном море отражение неба и солнца должно меняться с поворотом камеры. Кубическая карта даёт «застывшее» солнце. Исправление: динамический sky probe, обновляемый каждый кадр, или аналитическое небо (Preetham/Hosek-Wilkie) в шейдере воды.
Ошибка: Отсутствие каустики в мелководье
Пляж без танцующих световых узоров на песке выглядит мёртво. Решение: проекционная каустика (caustic mapping) — анимированная текстура, проецируемая на геометрию дна по вектору солнца с учётом высоты волн. Дешево и визуально мощно.
Ошибка: Звёздное небо, отражающееся в воде днём
Художники забывают отключить звёзды в кубической карте неба для дневного цикла. В воде отражается ночь посреди дня. Исправление: разные кубические карты для дня/ночи или процедурное небо с маской солнца.
Будущее: нейронные волны и симуляция в пикселе
На горизонте — замена аналитических шейдеров на нейросети, обученные на данных CFD (Computational Fluid Dynamics). NVIDIA WaveWorks и исследовательские работы (Neural Flow Maps, Fourier Neural Operators) показывают: компактная MLP-сеть может предсказывать эволюцию поля скоростей и высот волн на следующем кадре быстрее солвера Навье-Стокса на сетке. Это откроет путь к интерактивной воде, которая «помнит» прошедший корабль часами, образуя за ним застойные зоны и турбулентность, а не сбрасывает симуляцию за экраном.
Параллельно развивается Gaussian Splatting для жидкостей. Вместо частиц или сетки — набор 3D гауссиан, несущих цвет, непрозрачность, нормаль и скорость. Рендеринг сплаттингом даёт порядок 100 FPS на миллионах капель с естественным слиянием и размытием. Первые демо (SIGGRAPH 2023/2024) выглядят как фотореалистичные замедленные съёмки брызг, но в реальном времени.
Главный вывод
Вода в играх прошла путь от декоративной плоскости до физически обоснованной среды, определяющей геймплей и визуальный язык. Следующий скачок — нейросимуляция, устраняющая компромисс между масштабом, детальностью и производительностью.
Чек-лист для оценки качества воды в движке
- Геометрия волн: есть ли дисперсия (длинные волны быстрее коротких)? Работает ли LOD на горизонте без поппинга?
- Оптика: есть ли преломление (refraction) с правильным IOR? Работают ли отражения за пределами экрана (planar probe или RT)?
- Объём: есть ли Beer-Lambert absorption (поглощение по длине волны: красное гаснет первым)? Есть ли рассеятие (single scattering) в объёме?
- Каустика: анимирована ли она на дне и на вертикальных стенах? Синхронизирована ли с фазой волн на поверхности?
- Взаимодействие: плавают ли физические объекты с правильным погружением? Есть ли брызги, пена, шлейф, мокрая поверхность у выходящих объектов?
- Звук: меняется ли акустика при погружении головы камеры? Есть ли звук течения, прибоя, капающей воды?
- Производительность: масштабируется ли качество от интегрированной графики до RTX 4090 без разрыва визуала?
Хорошая вода не замечается — она ощущается. Игрок не думает о шейдерах, он чувствует холод, вес и глубину.
Целое приключение — в одном телеграм-боте 🌍
Не нужно ничего скачивать, регистрироваться и разбираться в сложных интерфейсах. Открыли Telegram — и вы уже в текстовой ролевой игре с ИИ. Идеально на 10 минут в обеденный перерыв или на целый вечер: история подождёт и продолжится с того же места, где вы остановились.
Открыть бота 👉 https://clck.ru/3Ta8kQ
