基于HISM与LOD材质切换的水体渲染优化方案
HISM 水体 LOD 材质切换优化方案
1. 背景
水体通常使用半透明材质平面来呈现,但会带来严重的 Overdraw 问题。
本方案的目标是:利用 StaticMesh LOD 材质切换机制,实现靠近相机时使用透明材质、远离相机时使用不透明材质的自动过渡,从而在视觉上保持水体连续性的同时,使用 HISM(Hierarchical Instanced Static Mesh)降低 Drawcall 开销。
2. 技术方案概述
- 单 HISM Actor:将所有水面面片作为一个 Actor 下的 HISM 组件实例,批量渲染。
- StaticMesh LOD 材质切换:利用 StaticMesh 自身 LOD0 / LOD1 的材质差异,由引擎按实例到相机的距离自动选择 LOD。
- 程序化生成:提供 Spline 与 Plane 两种生成模式,参数化控制水面规模、密度与位置。
2.1 技术要点
| 技术要点 | 说明 |
|---|---|
| 单 HISM Actor | 生成一个普通 Actor,附加单个 HierarchicalInstancedStaticMeshComponent,设置 Actor Tag 为 Plane_HISM_Track。 |
| HISM 实例添加 | 把计算出的所有 Transform 逐个 AddInstance 到同一个 HISM 组件,最后统一 ForceUpdate 重建 KD-Tree。 |
| StaticMesh LOD 材质切换 | 只设置 Static Mesh,不覆盖材质;LOD 选择完全由引擎按实例到相机距离自动完成。 |
| 程序化生成 — Spline | SPLINE 模式主函数:采样样条线、动态计算网格范围、按宽度裁剪后生成 HISM 实例。 |
| 程序化生成 — Spline ORIENTED | SPLINE 模式下的 ORIENTED 分块:沿路径生成定向矩形大分块,弯道自动加密。 |
| 程序化生成 — 曲率自适应 | ORIENTED 分块的曲率自适应划分逻辑。 |
| 程序化生成 — Plane | PLANE 模式主函数:按 FLAT_GRID_X × FLAT_GRID_Y 生成矩形平面阵列。 |
3. 性能优化与验证
Shader 复杂度
在相同场景、相同相机位置下进行对比:
-
对照组:单个大 Plane,整体使用透明水材质

-
实验组:多个小面片实例组成的 HISM Plane,依赖 LOD 材质切换

Drawcall 数量
优化后仅需 2 个 drawcall:半透明与不透明各一个 drawcall。

4. 美术效果
新方案
近景为透明材质,远景为不透明材质。为凸显随距离 LOD 切换材质的功能,远景材质换成了差异较大的材质。

实际场景中的效果:

远景

中景

近景

旧方案
远景

中景

近景
