С версии 2.2 UNIGINE позволяет визуализировать реалистичную воду со сложным поведением и поддержкой двустороннего взаимодействия с твердыми телами, а так же создавать различные типы водных бассейнов: океаны, моря, озера. По состоянию на версию 2.15.1 на крупных водоемах можно создавать волны, используя слои волн, пресеты по шкале Бофорта или вручную, и обеспечивать плавные переходы между различными состояниями поверхности. При этом на дальнем расстоянии отсутствует видимый тайлинг.
Вода в UNIGINE реализована в виде 2 типов объектов: Global Water и Water Mesh. Global Water представляет собой бесконечно растянутую сетку с автоматической тесселяцией, что позволяет создавать бескрайний океан. Однако Global Water поддерживает лишь один уровень воды, так что для создания горных озер, рек или других водоемов с перепадом высот следует использовать объект Water Mesh.
![Океан, созданный с помощью Global Water Океан, созданный с помощью Global Water](https://habrastorage.org/getpro/habr/upload_files/437/38a/e9f/43738ae9f1f6386db1b8f215371ed8db.jpeg)
![Озеро, созданное с помощью Water Mesh Озеро, созданное с помощью Water Mesh](https://habrastorage.org/getpro/habr/upload_files/7e0/98d/89a/7e098d89a614da741b9ad076dc48a818.png)
Поверхность воды поддерживает отражения в экранном пространстве и эффект преломления световых лучей (каустики), что делает ее по-настоящему фотореалистичной. Также имеется процедурная генерация пены.
Кроме того, объект Global Water имеет поддержку подводного режима, что дает возможность опускать камеру ниже ватерлинии с бесшовным переходом как в реальном мире (можно даже остановить камеру на середине и увидеть саму ватерлинию).
![](https://habrastorage.org/getpro/habr/upload_files/00d/e7f/110/00de7f1106e443dc8cbb56eda6fbe65d.png)
Реалистичная симуляция волн в реальном времени основана на быстрой модели Герстнера, когда все высоты вычисляются математически. Каждый параметр настраивается через API, благодаря чему можно применять результаты расчетов с использованием различных гидродинамических моделей. Такой уровень контроля открывает широкий спектр возможностей для симуляторов, позволяя моделировать практически любое состояние водной поверхности и погоды на море в режиме реального времени. Для оптимизации производительности доступны гибкие настройки качества.
Для тех же, кто просто хочет, чтобы море выглядело правдоподобно и достаточно реалистично, без необходимости настраивать множество ползунков и полей со списком, есть режим автоматической генерации волн с пресетами по шкале Бофорта (от спокойного — 0, до урагана — 12).
![](https://habrastorage.org/getpro/habr/upload_files/20b/340/63d/20b34063d8d1658faf21e6461f93961e.png)
Для имитации расходящихся волн от твердых тел и кильватерного следа во время движения судов используется объект Field Height. Он позволяет модифицировать текущую карту высот поверхности Global Water, посредством наложения на нее своей собственной. Так можно определить зоны для изменения высот под бортом судов или корпусом других плавучих объектов. Внутри отмеченной зоны карта высот постепенно изменяется от центра зоны.
Любой водоем имеет берега и прибрежная полоса тоже должна выглядеть естественно. В реальном мире волны набегают на берег и затем отходят. Такое поведение волн можно смоделировать и в UNIGINE, задав с помощью объекта Field Shoreline зоны прилива и отлива возле берегов. Причем, земля, песок, камни и все остальное на берегу будет оставаться мокрым после набегания волны.
В UNIGINE SDK версии 2.15 появился точный контроль над спектром волн через API. Генерация волн теперь гибко настраивается в реальном времени: от направления движения и амплитуды до формообразующих факторов. Кроме того, стало возможным создавать и контролировать целые группы волн (от маленьких до больших). Максимальное количество моделируемых волн — 256, но для оптимальной производительности рекомендуется использовать не более 100.
Также в UNIGINE реализовано обнаружение пересечений с поверхностью воды (intersection detection). Этот алгоритм можно использовать, например, для имитации всплеска в точке соприкосновения снаряда с поверхностью воды, а также для правильной расстановки судов, учитывая видимость и высоту бортов над водой. В версии SDK 2.15 обнаружение пересечений стало работать до 10 раз быстрее и появилась дополнительная гибкость в настройке производительности, а также была значительно улучшена процедурная пена.
Мы планируем и дальше улучшать систему визуализации воды в будущих версиях UNIGINE. Ведутся работы по усовершенствованию рендеринга для увеличения производительности и качества отрисовки. Также ожидаются улучшения по локальным водоемам (создаваемым с помощью объекта Water Mesh) вроде рек или озер.