Устранение перекрытия 3DGS материалом однослойной воды
Single Layer Water Support
Обзор
Single Layer Water (однослойная вода) в Unreal Engine реализует преломление, каустику и подводный туман через буфер глубины. Её основная зависимость — глубина сцены: в расчёте преломления и поглощения на поверхности воды участвуют только те пиксели, которые записали корректную глубину.
Зачем нужна отдельная совместимость
Плагин рендерит 3DGS и записывает глубину через механизм View Extension, и это происходит после BasePass. В стандартном потоке однослойная вода копирует буфер глубины до BasePass для последующей композиции, а в этот момент 3DGS ещё не отрендерен, поэтому в копии его глубины естественно нет.
| Конфигурация | Момент копирования буфера глубины | Содержит ли копия 3DGS |
|---|---|---|
| По умолчанию (выключено) | До BasePass | Не содержит |
SingleLayerWater Support включено | После BasePass | Содержит |
Default flow With support enabled
Copy depth buffer ← no 3DGS BasePass
│ │
▼ ▼
BasePass 3DGS writes depth
│ │
▼ ▼
3DGS writes depth Copy depth buffer ← with 3DGS
│ │
▼ ▼
Water composite ← 3DGS missing Water composite ← 3DGS read correctly
Когда в копии нет глубины 3DGS, при расчёте преломления и поглощения поверхность воды читает сцену за 3DGS, из-за чего подводный 3DGS не участвует в преломлении, а взаимное перекрытие воды и 3DGS определяется неверно.
После включения SingleLayerWater Support плагин через r.Water.SingleLayer.DepthPrepass откладывает копирование до момента после BasePass, когда глубина 3DGS уже записана, и поверхность воды обрабатывает её корректно.
Результат без включённого SingleLayerWater Support:

Результат рендеринга без включённой поддержки однослойной воды
Плата за использование
- После включения на тенях модели появляется некоторая ступенчатость.

Ступенчатость теней, которая может появиться после включения поддержки однослойной воды
Порядок действий
1. Включите настройку
В панели LCC4Unreal редактора нажмите кнопку настроек, откройте страницу настроек плагина в настройках проекта, отметьте SingleLayerWater Support и перезапустите движок, чтобы изменение вступило в силу.

Включение SingleLayerWater Support в настройках проекта
2. Создайте материал однослойной воды
- Создайте новый материал и задайте
Shading ModelкакSingle Layer Water - Настройте цвет воды, коэффициент поглощения, рассеивание и другие параметры
- Примените материал к Mesh поверхности воды или к
WaterBodyCustom
3. Разместите поверхность воды
Разместите Actor воды в подходящем месте сцены LCC2. Высота воды определяет, какие пиксели 3DGS оказываются под водой.
4. Проверьте результат
После нормальной загрузки и рендеринга сцены LCC2:

Корректный результат рендеринга после включения поддержки однослойной воды
Замечания
- Эта настройка является глобальной и влияет на все материалы однослойной воды в проекте
- После изменения нужно перезапустить движок (CVar имеет тип ReadOnly и влияет на Shader Key)
- Плата за это — потеря части качества теней Virtual Shadow Map на пикселях воды
- Если проект не использует однослойную воду, оставьте настройку выключенной по умолчанию