解決 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 陰影質量
- 如果項目中不使用單層水,保持默認關閉即可