基于HISM与LOD材质切换的水体渲染优化方案

HISM 水体 LOD 材质切换优化方案

1. 背景

水体通常使用半透明材质平面来呈现,但会带来严重的 Overdraw 问题。

本方案的目标是:利用 StaticMesh LOD 材质切换机制,实现靠近相机时使用透明材质、远离相机时使用不透明材质的自动过渡,从而在视觉上保持水体连续性的同时,使用 HISM(Hierarchical Instanced Static Mesh)降低 Drawcall 开销。

2. 技术方案概述

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 复杂度

在相同场景、相同相机位置下进行对比:

Drawcall 数量

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

4. 美术效果

新方案

近景为透明材质,远景为不透明材质。为凸显随距离 LOD 切换材质的功能,远景材质换成了差异较大的材质。

实际场景中的效果:

远景

中景

近景

旧方案

远景

中景

近景