解决 3DGS 被单层水材质遮挡
Single Layer Water Support
概述
Unreal Engine 的 Single Layer Water(单层水) 通过深度缓冲实现折射、焦散、水下雾化。其核心依赖是场景深度——只有写入了有效深度的像素才能参与水面的折射和吸收计算。
为什么需要单独兼容
插件通过 View Extension 机制渲染 3DGS 并写入深度,时机在 BasePass 之后。而单层水在默认流程下会在 BasePass 之前就复制一份深度缓冲供后续合成使用,此时 3DGS 还没有渲染,副本里自然没有它的深度。
| 配置 | 深度缓冲复制时机 | 副本是否包含 3DGS |
|---|---|---|
| 默认(关闭) | BasePass 之前 | 不包含 |
开启 SingleLayerWater Support | BasePass 之后 | 包含 |
默认流程 开启支持后
复制深度缓冲 ← 无 3DGS BasePass
│ │
▼ ▼
BasePass 3DGS 写入深度
│ │
▼ ▼
3DGS 写入深度 复制深度缓冲 ← 含 3DGS
│ │
▼ ▼
单层水合成 ← 读不到 3DGS 单层水合成 ← 正确读到 3DGS
副本里没有 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 阴影质量
- 如果项目中不使用单层水,保持默认关闭即可