HLOD

自动关联目录:HLOD

官方依据:World Partition(其中 HLOD 相关条目)与 World Partition - Hierarchical Level of Detail。HLOD 是 World Partition 紧密配合的四个特性之一。

1. 定位

HLOD(Hierarchical Level of Detail)用"合并后的代理网格"替代远处的一批真实物体:远处不再逐个绘制原始 Actor,而是画一个预先生成的简化替身。

一句话定位:HLOD 换掉的是 draw call 与三角形,换来的是包体、内存和构建时间。它是远景性能的主要手段,但不是免费的。

2. 结构

World Partition 网格单元
   ├─ 近距离 → 加载真实 Actor
   └─ 远距离 → 卸载真实 Actor,显示该区域的 HLOD 代理
概念说明
HLOD Layer定义如何生成代理(合并策略、简化率、材质处理方式)
HLOD Cell一个 HLOD 单元,通常覆盖若干个 WP 网格单元
生成离线构建,产出 Actor
流式HLOD 自己也是按距离流式的

3. 生成

方式说明
编辑器Build 菜单 → World Partition 分组 → Build HLODs
命令行WorldPartitionHLODsBuilder commandlet
配合流式源World Partition Streaming Source 组件上有 Target HLOD Layer 选项

大世界不必整体加载即可生成 HLOD——这是 World Partition Builder Commandlets 框架(UWorldPartitionBuilderCommandlet / UWorldPartitionBuilder)存在的理由。

4. 参数与控制台变量

CVar / 设置作用
wp.Runtime.HLOD 0不带 HLOD 显示世界——对比排查第一命令
HLOD Layer 的生成设置合并范围、简化率、材质烘焙方式
Target HLOD Layer(流式源组件)指定该源影响的 HLOD 层
构建相关 commandlet 参数见官方 commandlet 文档

5. 代价与权衡

设计收益代价什么时候不该用
HLOD 代理远景 draw call 与三角形大幅下降包体增大(多一份网格)、内存增大、构建时间小场景不需要
更高的简化率更省远景形变明显、切换时"跳"有辨识度的地标不该简化太多
合并范围更大draw call 更少无法按小粒度流式;一旦显示就是一大块需要细粒度剔除时不宜
材质烘焙代理只需一个材质,很便宜远处光照/材质变化丢失需要远景动态光照时要评估(与 Lumen 配合)
多 HLOD 层不同距离不同精度复杂度与包体上升简单场景一层即可

6. 踩坑与排查

坑现象怎么验证
远景掉帧HLOD 没生成或没生效wp.Runtime.HLOD 0 对比;检查是否 Build 过
远景"跳变"HLOD 与真实物体切换时突变调过渡距离与简化率
包体变大HLOD 网格占了体积权衡简化率与合并范围
构建极慢大世界全量生成用 Builder commandlet 增量/批量
远景光照不对材质烘焙丢了动态信息检查 HLOD Layer 的材质处理方式
HLOD 没随距离出现流式配置问题检查 HLOD 层与流式源的 Target HLOD Layer
修改了世界但 HLOD 没更新忘了重建改动后必须重新 Build HLODs
远处物体消失HLOD 缺失但真实 Actor 已卸载确认 HLOD 覆盖了该区域

7. 排查顺序

1. 远景慢?→ wp.Runtime.HLOD 0 对比,确认是否真的生效
2. 没生效?→ 是否 Build 过;HLOD 层配置
3. 跳变?→ 过渡距离与简化率
4. 包体/内存?→ 简化率与合并范围
5. 光照不对?→ HLOD Layer 的材质处理

参考