地形渲染技术搜集
一、CDLOD 算法
1.1 概述
CDLOD(Continuous Distance-dependent Level Of Detail)是由 Filip Strugar 在 2010 年提出的一种连续地形 LOD 算法,广泛应用于开放世界游戏和实时地形渲染领域。其核心思想是根据摄像机距离动态调整地形网格的细节层级,并通过顶点插值实现各 LOD 层级之间的无缝过渡。
1.2 实现原理
1.2.1 数据结构:四叉树分割
CDLOD 将地形划分为层级四叉树(Quadtree):
- 每个节点对应一块地形区域
- 叶节点为最高细节层(LOD 0),根节点为最低细节层
- 每一层的网格分辨率减半,覆盖面积翻倍
根节点(低细节,覆盖全地图)
├── 子节点(中等细节)
│ ├── 子节点(高细节)
│ │ └── 叶节点(最高细节,LOD 0)
│ └── ...
└── ...
1.2.2 LOD 选择:距离判断
渲染时,从四叉树根节点开始递归:
- 若当前节点与摄像机的距离 小于该层级的 LOD 范围阈值,则继续向下展开子节点
- 若距离 超出阈值,则停止展开,使用当前层级节点渲染
每个 LOD 层级有一个对应的球形(或椭球形)影响范围,用于判断是否需要细分。
1.2.3 关键技术:Morphing(顶点形变)
CDLOD 最核心的创新是连续过渡(Morphing):
- 在两个相邻 LOD 层级的交界区域,顶点位置会根据距离在两个分辨率之间线性插值
morphValue = clamp((dist - morphStart) / (morphEnd - morphStart), 0, 1)- 顶点在 GPU Shader 中实时计算偏移,消除了传统 LOD 的「跳变」问题(Popping Artifact)
1.2.4 渲染流程
1. CPU:遍历四叉树,基于摄像机位置选出当前帧需要渲染的节点列表
2. CPU:计算每个节点的 morphValue 并传入 GPU
3. GPU Vertex Shader:根据 morphValue 对顶点进行插值偏移
4. GPU:采样高度图(Heightmap)获取真实高度
5. GPU:进行法线计算、纹理混合等着色
1.2.5 网格规格
- 所有 LOD 层级共用同一套网格模板(如 64×64 的方形网格块)
- 通过 Scale + Offset 变换映射到世界空间对应区域
- 极大减少了 CPU/GPU 的数据传输开销
1.2.6 Mesh 最小精度(最粗糙层级)
CDLOD 的 LOD 层级数量是有限且预先确定的,因此 Mesh 的粗糙程度不能无限增加,存在一个明确的最低精度上限:
- 四叉树的层级数(
LOD Levels)在初始化时固定,例如设置为 8 层,则最远处使用第 8 层(根节点层)渲染 - 根节点层的单个节点覆盖整张地图,但其网格分辨率仍然是同一套模板(如 64×64),只是 Scale 极大
- 因此最粗糙层级的三角面尺寸 = 地图总尺寸 / 网格模板分辨率,例如 16km 地图 / 64 格 = 每格 250m
- 当摄像机距离超出最高层级的 LOD 范围阈值后,地形不会继续细分也不会继续合并,直接以根节点层渲染
实践中的处理方式:
| 情况 | 处理策略 |
|---|---|
| 摄像机极远(如飞行高度 > 10km) | 根节点层渲染,面数极少,但地形仍可见 |
| 超出可视距离 | 通常配合 Far Clip 或 Fog 裁剪,不渲染极远地形 |
| 需要更多粗糙层级 | 增加四叉树层数,但会增加遍历开销 |
| 超大地图(>100km²) | 需要额外的宏观 LOD 策略(如 Impostor 或 Billboard) |
结论: CDLOD 的 Mesh 粗糙程度受四叉树层级数限制,不能无限变粗糙。最粗糙层级由
地图尺寸 / (2^LOD层数 × 网格模板分辨率)决定,超出最远 LOD 范围后地形以固定最低精度渲染,通常配合远裁剪面或雾效隐藏。
1.2.7 通过增加 LOD 层数实现持续精度下降
可行性分析
在 16km×16km 的大地图上,确实可以通过增加四叉树层数,使 Mesh 精度随视距拉远而持续下降,从而避免远景以固定精度渲染带来的性能浪费。
以网格模板分辨率 64×64 为例,不同层数下最粗糙层级的三角面尺寸如下:
| LOD 层数 | 根节点覆盖范围 | 最粗糙三角面尺寸 | 根节点三角面总数 | 备注 |
|---|---|---|---|---|
| 6 | 16km × 16km | 250m / 格 | ~8k 面 | 常见配置,远景精度偏高 |
| 8 | 16km × 16km | 1000m / 格 | ~8k 面 | 远景更粗糙,性能更优 |
| 10 | 16km × 16km | 4000m / 格 | ~8k 面 | 极远景极粗糙,适合飞行视角 |
注意:无论层数多少,根节点层的三角面总数不变(仍是 64×64 的模板),变化的只是每个三角面覆盖的世界空间尺寸。增加层数本质上是拉长了 LOD 梯度曲线,让精度下降过程分布在更大的距离范围内。
副作用分析
增加 LOD 层数并非没有代价,主要存在以下副作用:
| 副作用类型 | 具体表现 | 缓解方式 |
|---|---|---|
| CPU 遍历开销增加 | 四叉树层数每增加 1 层,节点总数翻 4 倍,每帧的树遍历时间线性增长 | 配合视锥裁剪(Frustum Culling)和距离早退(Early-Out),跳过不可见节点 |
| Morphing 过渡区间变窄 | 层数增多后,相邻 LOD 层级的距离阈值间隔变小,Morphing 过渡区间压缩,LOD 切换更频繁,可能引入轻微抖动 | 适当调大 Morph 比例参数(如 morphStart 占 LOD 范围的 30%~50%) |
| 高层级节点精度过低 | 层数过多时,中间层级的三角面尺寸可能已超过地形起伏的特征频率,导致中距离地形出现明显的"台阶感"或高频细节丢失 | 结合法线贴图(Normal Map)在着色阶段补偿几何细节;或限制最大层数,配合 Far Clip 裁剪 |
| Heightmap 采样精度损失 | 高层级节点的顶点间距极大,Heightmap 采样点稀疏,地形轮廓失真(山峰被"削平"、山谷被"填平") | 为高层级节点单独生成低分辨率 Heightmap(预滤波版本),避免直接对高分辨率 Heightmap 稀疏采样 |
| 内存占用小幅增加 | 四叉树节点元数据(包围盒、LOD 阈值等)随层数增加而增加,但通常可忽略不计 | 一般无需特殊处理 |
实践建议
- 推荐层数范围: 对于 16km×16km 的地图,8~10 层通常是合理上限。超过 10 层后,CPU 遍历开销和 Morphing 抖动问题会变得明显
- 配合 Far Clip: 即使增加了层数,仍建议设置合理的远裁剪距离(如 8~12km),超出范围的地形由雾效遮挡,避免极远处的极粗糙网格产生视觉异常
- 预滤波 Heightmap: 为每个 LOD 层级预生成对应分辨率的 Heightmap Mip,是解决高层级采样失真的最佳实践
- 与贴图 LOD 同步: 增加几何 LOD 层数时,需同步调整贴图的 Mipmap 切换距离,避免出现”几何很粗糙但贴图仍高清”的不协调感
结论: 通过增加 CDLOD 层数,完全可以实现随视距拉远而持续下降的 Mesh 精度,这是解决大地图远景性能浪费的有效手段。主要副作用集中在 CPU 遍历开销增加、Morphing 过渡区间压缩和高层级 Heightmap 采样失真三个方面,均有对应的工程缓解方案。
1.3 优势分析
| 优势 | 说明 |
|---|---|
| 无缝 LOD 过渡 | Morphing 技术消除了 LOD 切换的跳变,视觉连续性极好 |
| 实现简洁 | 核心逻辑只需四叉树遍历 + Shader 插值,代码量少 |
| GPU 友好 | 所有节点共用同一网格模板,Draw Call 可合并,Instancing 友好 |
| 内存占用低 | 只需一张 Heightmap,不需要预先生成多套网格 |
| 可扩展性强 | 易于与纹理混合、法线贴图、洞穴等扩展功能结合 |
| 开放世界适配 | 天然支持超大地图(如 16km × 16km 以上) |
1.4 劣势分析
| 劣势 | 说明 |
|---|---|
| 几何表现力有限 | 基于 Heightmap,无法表达悬崖、拱桥、洞穴等非高度场结构 |
| 顶点密度均匀 | 平坦区域和复杂区域使用相同密度,存在浪费 |
| Morphing 有伪影风险 | 设置不当会在 LOD 边界出现轻微抖动 |
| CPU 遍历开销 | 大型地图四叉树遍历有一定 CPU 成本,需要优化裁剪 |
| 不支持物理精确网格碰撞 | 物理碰撞仍需额外的碰撞网格或 Heightfield |
| 美术控制精度低 | 美术难以对单个多边形级别进行精细调整 |
二、UE5 Mesh Terrain 方案
注: UE5.8 截至本文档编写时尚未正式发布,以下内容基于 UE5 Nanite Landscape、Virtual Heightfield Mesh 及 Epic 官方路线图中 Mesh Terrain 相关功能要点进行整理,具体细节以官方最终发布为准。
2.1 概述
UE5 的 Mesh Terrain 方案是 Epic 在传统 Landscape 系统基础上,结合 Nanite 虚拟几何、Virtual Shadow Maps、World Partition 等新技术,推出的次世代地形解决方案。其核心目标是突破传统 Heightmap 地形的几何限制,支持用任意三角网格表达地形,并借助 Nanite 实现自动 LOD 与像素级细节。
2.2 UE5 两种地形方案概览
UE5 中存在两条主要的地形技术路线,它们在架构上有本质区别:
| 方案 | 核心技术 | 几何来源 | 适用场景 |
|---|---|---|---|
| Landscape Nanite | 传统 Landscape + Nanite 渲染 | Heightmap(高度场) | 大规模开放世界,保留编辑器刷笔工作流 |
| Mesh Terrain(任意网格) | 纯 Nanite Mesh | 任意三角网格(DCC 导入) | 复杂地貌(洞穴/悬崖),影视级精度 |
以下分别对两种方案进行详细分析。
2.3 Landscape Nanite 方案详解
2.3.1 基本架构
Landscape Nanite 是在传统 Landscape 系统上叠加 Nanite 渲染路径的方案,保留了 Heightmap 数据结构和编辑器工作流,同时获得 Nanite 的渲染优势。
2.3.2 Mesh LOD:镜头拉远时的几何细节变化
Landscape Nanite 的几何 LOD 由 Nanite 的 Cluster 层级结构(Hierarchical Cluster DAG) 在 GPU 上实时驱动:
- Landscape 的 Heightmap 数据在启用 Nanite 后,会被预处理为 Nanite 的 Cluster 层级结构(类似 BVH)
- 渲染时,GPU 根据每个 Cluster 在屏幕上的像素覆盖率(Projected Error)决定使用哪一层级的 Cluster
- 当摄像机拉远时,远处地形的 Cluster 自动切换到更粗糙的层级,近处保持高精度
- 整个过程完全在 GPU 上完成,CPU 不参与 LOD 选择计算
- 理论上支持从像素级精度到极低面数的连续过渡,没有固定的 LOD 层数上限(由 Nanite 预处理时的简化链决定)
与 CDLOD 的关键区别: CDLOD 的 LOD 层数在 CPU 侧预先固定,有最粗糙层级上限;Nanite 的简化链在预处理时生成,GPU 实时选择,理论上可以简化到极少面数(但受限于预处理时的简化质量)。
2.3.3 贴图 LOD:镜头拉远时的纹理细节变化
Landscape Nanite 的贴图 LOD 与几何 LOD 相互独立,通过以下机制实现:
① 传统 Mipmap(基础层)
- 地形材质中的各类贴图(Albedo、Normal、Roughness 等)使用标准 Mipmap 链
- GPU 根据屏幕空间 UV 导数(
ddx/ddy)自动选择合适的 Mip 层级 - 远处地形自动采样低分辨率 Mip,近处采样高分辨率 Mip
② Virtual Texture(推荐方案)
- UE5 地形支持 Runtime Virtual Texture(RVT),将地形材质混合结果烘焙到虚拟纹理页表中
- 虚拟纹理按需加载(Streaming),只有摄像机附近的高分辨率页面才会驻留显存
- 远处地形使用低分辨率虚拟纹理页,近处使用高分辨率页,实现纹理的流式 LOD
- 支持超高分辨率地形纹理(理论上无上限),显存占用由流式系统动态管理
③ Landscape Layer Blend
- 地形材质的 Layer 混合权重图(Weightmap)本身也有 Mipmap
- 远处地形的材质混合会使用低分辨率权重图,细节层次自然降低
2.3.4 LOD 变化单位:Component 级别的局部 LOD
Landscape 的 LOD 变化不是整张地图一起变化,而是以 Component 为基本单位进行局部 LOD 管理:
- Landscape 被划分为若干 Component(默认每个 Component 为 63×63 或 127×127 个顶点)
- 每个 Component 独立计算与摄像机的距离,独立决定自身的 LOD 层级
- 启用 Nanite 后,Nanite 的 Cluster 层级结构也是以 Component 为边界进行组织的
- 配合 World Partition,整个大世界地图被进一步划分为 Cell,只有摄像机周围的 Cell 内的 Component 才会被加载和渲染
LOD 变化粒度示意:
整张地图(World Partition Cell 管理)
└── Cell(流式加载单位,如 256m × 256m)
└── Landscape Component(LOD 决策单位,如 63×63 顶点)
└── Nanite Cluster(GPU 渲染单位,自动细分)
2.3.5 相邻地块接缝处理
由于相邻 Component 可能处于不同 LOD 层级,边界处会出现顶点不对齐的「T 形交叉」问题(T-Junction),UE5 Landscape 通过以下机制解决:
① LOD Bias 限制(传统 Landscape)
- UE5 Landscape 强制要求相邻 Component 的 LOD 差值不超过 1 级(
MaxLODBias = 1) - 通过在 LOD 选择阶段对相邻 Component 的 LOD 进行约束,避免过大的 LOD 跳变
② Skirt(裙边)技术
- 每个 Component 在边缘生成一圈向下延伸的「裙边」三角形
- 裙边覆盖相邻 Component 因 LOD 不同而产生的缝隙,从视觉上消除接缝
- 这是 UE5 Landscape 的默认接缝处理方式
③ Nanite 模式下的接缝
- 启用 Nanite 后,Nanite 的 Cluster 边界处理由引擎内部保证连续性
- Nanite 在预处理时会在 Component 边界生成共享顶点或退化三角形,避免视觉裂缝
- 但由于 Nanite 的 Cluster 是独立简化的,极端情况下仍可能出现微小缝隙,通常通过 Skirt 兜底
2.3.6 Nanite 基础上的 HLOD 逻辑
这是一个常见的疑问:既然 Nanite 已经自动管理 LOD,还需要 HLOD 吗?
答案:在 Landscape Nanite 场景下,HLOD 的角色发生了变化,但并未完全消失:
| 层面 | Nanite 的作用 | HLOD 的作用 |
|---|---|---|
| 几何 LOD | Nanite 自动处理,无需手动 HLOD Mesh | 对于非 Nanite 资产(植被、建筑),仍需 HLOD |
| 流式加载 | Nanite Cluster 按需流式加载 | World Partition HLOD 负责超远距离的代理网格 |
| 超远距离渲染 | Nanite 简化链有下限,极远处面数仍有一定量 | HLOD Actor 提供极简代理,进一步降低远景开销 |
| 阴影 | Nanite 支持 Virtual Shadow Maps,自动管理阴影 LOD | 远景阴影可由 HLOD 代理承担,减少 VSM 压力 |
World Partition HLOD 系统(UE5 特有):
- UE5 的 World Partition 内置了 HLOD Layer 机制
- 对于超出 Nanite 流式加载范围的极远区域,World Partition 会自动生成 HLOD Actor(简化代理网格)
- HLOD Actor 可以是 Nanite 化的(Nanite HLOD),也可以是传统静态网格
- 对于 Landscape 本身,极远处的 Component 卸载后,由 HLOD 代理维持视觉连续性
结论: Nanite 解决了「渲染时的几何 LOD」问题,但 HLOD 解决的是「流式加载边界的视觉连续性」和「非 Nanite 资产的远景管理」问题。两者在 UE5 大世界场景中互补而非替代。
2.4 Mesh Terrain(任意网格)方案详解
2.4.0 深度问题解析
① Nanite 加持下的 LOD 触发粒度
Nanite 的 LOD 决策单位是 Cluster,而非 Component。
Nanite 将整个 Mesh 预处理为一棵 Hierarchical Cluster DAG(有向无环图),每个 Cluster 约包含 128 个三角面。渲染时,GPU 对每个 Cluster 独立评估其在屏幕上的投影误差(Projected Error),决定使用 DAG 中哪一层级的 Cluster 来渲染。
| 概念 | 在 Nanite 中的角色 | LOD 决策参与方式 | 备注 |
|---|---|---|---|
| Cluster (~128 tri) |
Nanite 的最小渲染单元,GPU 逐 Cluster 评估屏幕误差 | ✅ 直接参与 LOD 决策,是真正的 LOD 粒度 | 完全在 GPU 上完成,CPU 不感知 |
| Component (63×63 顶点) |
数据组织单位,Nanite Cluster 以 Component 为边界进行预处理和流式加载 | ⚠️ 不再是 LOD 决策单位,但仍是流式加载的基本单元 | Component 内部的 Cluster 可以处于不同 LOD 层级 |
| World Partition Cell | 流式加载的宏观单元,控制哪些 Component 被加载进内存 | ❌ 不参与 LOD 决策,只控制加载/卸载 | Cell 卸载后由 HLOD Actor 代理 |
关键特性:
- 同一个 Component 内,靠近摄像机的 Cluster 可以使用高精度层级,远离摄像机的 Cluster 同时使用低精度层级,精度变化是连续且亚 Component 级别的
- 不存在传统意义上的「LOD 层数上限」——Nanite DAG 的简化链在预处理时生成,理论上可以简化到极少面数
- 相邻 Component 之间的 Cluster 边界由 Nanite 内部保证连续性,不再需要 Skirt 裙边技术(Nanite 模式下 Skirt 仍作为兜底保留)
与 CDLOD 的本质区别: CDLOD 的 LOD 粒度是 Component(四叉树节点),CPU 每帧遍历决策;Nanite 的 LOD 粒度是 Cluster(~128 tri),GPU 每帧并行决策。前者是「节点级 LOD」,后者是「三角面级 LOD」。
② 是否支持基于 Landscape 编辑后转为 Mesh Terrain
两条路径,性质不同。 「为 Landscape 启用 Nanite」与「转为 Mesh Terrain」是两件不同的事,需要明确区分:
模式 A:Landscape 启用 Nanite(仍是 Landscape,非 Mesh Terrain)
这是为传统 Landscape 叠加 Nanite 渲染路径,本质上仍是 Landscape 系统,不是 Mesh Terrain:
- 在 Landscape Actor 的属性面板中勾选
Enable Nanite即可启用 - Heightmap 数据结构不变,Landscape 的刷笔雕刻、Layer Blend、材质系统全部保留
- 引擎在后台自动将 Heightmap 转换为 Nanite Cluster 结构用于渲染,但数据源仍是高度场
- 每次编辑 Heightmap 后,Nanite 数据会自动重新生成(有一定的重建开销)
- 限制: 仍然是高度场,无法表达洞穴/悬崖等非高度场结构;这不是 Mesh Terrain
模式 B:Landscape 导出为静态 Mesh(真正转为 Mesh Terrain)
适用于需要任意拓扑的场景:
- 通过
Landscape → Export to Static Mesh将 Heightmap 烘焙为静态三角网格 - 导出的 Mesh 可在 DCC 工具(Houdini/ZBrush)中进一步雕刻,添加洞穴、悬崖等结构
- 修改完成后重新导入并启用 Nanite
- 代价: 失去 Landscape 的实时刷笔编辑能力,后续修改需要重新走 DCC → 导入流程
| 对比维度 | Landscape + Nanite(模式 A) | 导出 Mesh + Nanite(模式 B) | 推荐场景 |
|---|---|---|---|
| 实时编辑 | ✅ 保留刷笔雕刻 | ❌ 需重新导入 | 迭代频繁的地形选模式 A |
| 几何自由度 | ⚠️ 仅高度场 | ✅ 任意拓扑 | 需要洞穴/悬崖选模式 B |
| 材质系统 | ✅ Layer Blend 完整保留 | ⚠️ 需重新设置材质 | — |
| Nanite 重建开销 | ⚠️ 每次编辑后自动重建 | ⚠️ 导入时一次性重建 | — |
| World Partition 支持 | ✅ 原生支持 | ✅ 需手动分块 | — |
实践建议: 大多数项目采用「模式 A 为主 + 模式 B 局部补充」的混合策略——主体地形用 Landscape + Nanite(模式 A)保持可编辑性,特殊地貌(洞穴入口、悬崖峭壁)用独立的 Nanite Mesh(模式 B)覆盖叠加。严格来说,只有模式 B 才是真正意义上的「Mesh Terrain」。
③ 材质与贴图方案:Weight Blend 是否仍是主流
Weight Blend 仍然保留,但 Nanite Landscape 引入了新的材质方案,两者可共存。
传统方案(仍然有效):
- Layer Weight Blend:美术在 Landscape 上刷权重图(Weightmap),材质节点根据权重混合各层贴图(草地、岩石、泥土等)
- 权重图本身有 Mipmap,远处自动使用低分辨率权重图
- 这套工作流在 Nanite Landscape 中完全保留,无需修改
新方案(UE5 推荐):
| 方案 | 原理与优势 | 适用场景 |
|---|---|---|
| Runtime Virtual Texture(RVT) | 将 Layer Blend 的混合结果实时烘焙到虚拟纹理页表中,后续渲染直接采样 RVT,避免每帧重复执行复杂的 Layer Blend 计算;支持地形与静态物体(岩石、建筑)的材质融合(Blend with World) | 材质层数多、混合逻辑复杂的大型地形;需要地形与场景物体材质融合的场景 |
| Substrate 材质系统(UE5.4+) | 替代传统 PBR 材质节点,支持物理精确的分层材质(如湿润岩石 = 干燥岩石层 + 水膜层),每层有独立的 BSDF 参数;与 Nanite + Lumen 深度集成,光照计算更准确 | 追求影视级材质表现的高端项目;需要复杂物理材质分层的场景 |
| PCG + 材质参数化 | 通过 PCG(过程化内容生成)系统根据坡度、高度、曲率等地形属性自动驱动材质参数,实现程序化的材质分布(如陡坡自动变为岩石材质) | 超大地图、程序化生成地形;减少美术手工刷权重图的工作量 |
| 传统 Layer Weight Blend | 美术手工刷权重图,直观可控,工作流成熟;在 Nanite Landscape 中完全兼容 | 中小型地形;需要精细手工控制材质分布的场景 |
结论: Weight Blend 并未被废弃,而是作为基础层保留。新方案(RVT、Substrate、PCG)是在其之上的性能优化和表现力增强,实际项目中通常组合使用:Weight Blend 定义基础分布 → RVT 缓存混合结果 → Substrate 提升材质物理精度。
④ 实际制作与测试表现(官方及社区反馈)
已知的公开信息(请注意以下数据的来源与可信度说明):
- 《黑神话:悟空》(2024):公开报道显示该项目大量使用了 UE5 的 Nanite 技术,但官方并未单独披露 Nanite Landscape 的具体性能数据;游戏在 PS5/PC 上的整体帧率表现是多项技术综合作用的结果,不能单独归因于 Nanite Landscape
- Epic 内部演示(Valley of the Ancient 等):Epic 在 GDC/State of Unreal 演讲中展示过 Nanite 整体方案的性能优势(如极低 Draw Call),但针对 Nanite Landscape 单独的量化数据(如「1~2ms」「降低 40%~60% Draw Call」)笔者未能找到可靠的一手来源,此处不予引用,以免误导
- Fortnite Chapter 4+:Epic 公开表示 Fortnite 已使用 UE5 技术栈,但具体的「GPU 帧时间降低 30%」等数据未见官方公开披露,不予引用
社区与第三方反馈(综合 UE 论坛、GDC 演讲内容、开发者分享,以定性描述为主):
| 维度 | 正面反馈 | 已知问题 / 注意事项 |
|---|---|---|
| 渲染性能 | Draw Call 极低(Nanite 合并渲染),GPU 利用率高;远景地形自动简化,无需手动调 LOD 参数 | Nanite 本身有约 0.5~1ms 的固定 GPU 开销(Visibility Buffer Pass),在极简场景下反而不如传统方案;移动端完全不支持 |
| 视觉效果 | 近景细节极高,LOD 过渡几乎无感知;与 Lumen 结合后光影效果显著优于传统方案 | Nanite 不支持 Tessellation(曲面细分),无法在运行时动态增加几何细节;极远景在 Nanite 简化链末端仍可能出现轻微失真 |
| 编辑工作流 | Landscape + Nanite 模式保留了完整的刷笔工作流,美术迁移成本低;PCG 集成大幅减少手工刷权重图的工作量 | 每次编辑 Heightmap 后 Nanite 需要重建(大地图重建耗时可达数分钟);编辑器内 Nanite 预览与最终效果有时存在差异 |
| 内存 / 显存 | World Partition 流式加载有效控制内存峰值;Virtual Texture 按需加载减少显存压力 | Nanite Cluster 数据本身占用额外显存(约为原始 Mesh 的 1.5~2 倍);Virtual Texture 页表管理在显存紧张时可能引发卡顿 |
| 稳定性 | UE5.3+ 后 Nanite Landscape 已趋于稳定,主要 Bug 已修复 | UE5.1/5.2 阶段存在较多 Nanite Landscape 的渲染 Bug(接缝、阴影异常等),建议使用 UE5.3 及以上版本 |
综合评价:
Nanite Landscape 在高端平台(PC/次世代主机)上已有商业项目落地,整体方向被业界认可。由于缺乏公开的精确性能基准数据,上表中的描述以定性为主。主要挑战集中在编辑器重建开销和显存管理两个方面,以及对硬件的较高要求。对于目标平台包含移动端或低端 PC 的项目,仍需谨慎评估。
2.4.1 Nanite 驱动的自动 LOD
- 地形网格导入 Nanite 后,无需手动设置 LOD 层级
- Nanite 的 Cluster 层级结构(BVH)在 GPU 上实时根据屏幕像素覆盖率决定渲染细节
- 理论上可支持数以亿计的三角面,运行时自动简化到屏幕需要的量级
2.4.2 任意拓扑支持
- 不再局限于高度场(Heightmap)
- 支持悬崖、拱桥、洞穴、隧道等任意三维地形结构
- 美术可在 Houdini、ZBrush、Maya 等 DCC 工具中自由雕刻后导入
2.4.3 Virtual Heightfield Mesh(VHM)集成
- 对于传统高度场地形,UE5 提供 Virtual Heightfield Mesh 组件
- 支持在运行时动态更新高度数据(如实时地形变形)
- 与 Nanite 结合,可在保持高精度的同时实现高效渲染
2.4.4 World Partition 流式加载
- 地形数据通过 World Partition 系统进行分块管理
- 只加载摄像机周围的 Cell,大幅降低内存占用
- 支持超大开放世界地图(Epic 内部测试达到数十平方公里)
2.4.5 Landscape Nanite 化
- 传统 Landscape Actor 已支持启用 Nanite 渲染
- 保留原有的 Layer Blend、Material 工作流
- 与 PCG(过程化内容生成)系统深度集成,支持程序化地形生成与植被散布
2.4.6 物理与碰撞
- Mesh Terrain 支持直接使用复杂碰撞网格,物理精度更高
- 配合 Chaos 物理引擎,支持实时地形破坏与动态变形
2.4.7 材质与着色
- 支持 Substrate 材质系统(UE5.4+),更真实的分层材质混合
- 支持 Virtual Texture(虚拟纹理)应用于地形,纹理分辨率可达超高级别
- 支持与 Lumen 全局光照系统无缝集成,地形接受/产生动态 GI
2.5 优势分析
| 优势 | 说明 |
|---|---|
| 任意几何形态 | 彻底打破高度场限制,支持洞穴、悬崖等复杂地貌 |
| 自动 LOD | Nanite 自动管理,美术无需手动处理 LOD |
| 美术友好 | DCC 工具直接导入,美术控制精度极高 |
| 超高几何细节 | Nanite 支持亿级三角面,地形细节接近影视级 |
| 动态 GI 支持 | Lumen 提供全动态全局光照,地形光影效果真实 |
| 流式大世界 | World Partition 支持超大规模开放世界 |
| 物理精准 | 复杂碰撞网格,支持实时破坏与变形 |
2.6 劣势分析
| 劣势 | 说明 |
|---|---|
| 硬件要求高 | Nanite 依赖现代 GPU(DX12/Vulkan),不支持移动端和低端平台 |
| 内存/显存占用大 | 高精度 Mesh + Virtual Texture 对显存压力大 |
| 工作流复杂 | 需要 DCC 工具配合,美术管线比传统 Heightmap 复杂 |
| 实时编辑受限 | Nanite Mesh 不支持像传统 Landscape 一样实时刷刷笔雕刻(需重新导入) |
| 引擎绑定 | 深度依赖 UE5 生态,迁移成本高 |
| 迭代成本 | 大型地形网格的导入、烘焙、流式分块处理耗时较长 |
三、效果与性能对比
3.1 视觉效果对比
| 对比维度 | CDLOD | UE5 Mesh Terrain |
|---|---|---|
| 几何复杂度 | ⭐⭐⭐ 受限于 Heightmap,仅支持高度场 | ⭐⭐⭐⭐⭐ 任意拓扑,支持洞穴/悬崖 |
| LOD 过渡质量 | ⭐⭐⭐⭐ Morphing 平滑,但细节层级有限 | ⭐⭐⭐⭐⭐ Nanite 像素级自适应,几乎无感知 |
| 近景细节 | ⭐⭐⭐ 受网格分辨率限制 | ⭐⭐⭐⭐⭐ 亿级三角面,影视级细节 |
| 光影表现 | ⭐⭐⭐ 依赖预烘焙或基础动态光 | ⭐⭐⭐⭐⭐ Lumen 全动态 GI,光影真实 |
| 材质表现 | ⭐⭐⭐ 标准纹理混合 | ⭐⭐⭐⭐⭐ Substrate + Virtual Texture |
| 地形破坏/变形 | ⭐⭐ 需要额外实现 | ⭐⭐⭐⭐ Chaos 物理支持,较易实现 |
结论: 视觉效果方面,UE5 Mesh Terrain 全面领先,尤其在复杂地貌、近景细节和光影质量上优势显著。
3.2 性能对比
| 对比维度 | CDLOD | UE5 Mesh Terrain |
|---|---|---|
| 目标平台 | ✅ 全平台(PC/主机/移动) | ⚠️ 主要为高端 PC/次世代主机 |
| GPU 消耗 | 低~中(可精确控制面数) | 中~高(Nanite 本身有固定开销) |
| CPU 消耗 | 中(四叉树遍历) | 低(LOD 计算在 GPU 完成) |
| 显存占用 | 低(只需 Heightmap) | 高(Nanite Cluster + Virtual Texture) |
| Draw Call | 低(Instancing 友好) | 极低(Nanite 合并渲染) |
| 流式加载效率 | 中(需自行实现) | 高(World Partition 内置支持) |
| 移动端适配 | ✅ 支持 | ❌ 不支持 |
| 低端硬件 | ✅ 可裁剪至极低配置 | ❌ 有硬件下限要求 |
结论: 性能方面,CDLOD 在跨平台和低端硬件场景下优势明显,可精确控制渲染预算;UE5 Mesh Terrain 在高端硬件上借助 Nanite 实现了极低的 Draw Call 和自动化的 LOD 管理,但对硬件有较高要求。
3.3 综合适用场景对比
| 场景 | 推荐方案 | 理由 |
|---|---|---|
| 跨平台游戏(含移动端) | CDLOD | 轻量、可控、兼容性强 |
| 高端 PC/次世代主机 AAA 大作 | UE5 Mesh Terrain | 效果天花板,自动化程度高 |
| 超大开放世界(>10km²) | UE5 Mesh Terrain | World Partition 流式支持更完善 |
| 有洞穴/悬崖等复杂地貌需求 | UE5 Mesh Terrain | Heightmap 无法满足 |
| 自研引擎 / 非 UE 项目 | CDLOD | 算法独立,可移植性强 |
| 快速原型 / 独立游戏 | CDLOD | 实现简单,资源消耗低 |
| 实时地形变形/破坏 | UE5 Mesh Terrain | Chaos 集成更成熟 |
四、RDR2 地形制作与渲染方案
注: 以下内容基于 Rockstar Games《荒野大镖客:救赎 2》(Red Dead Redemption 2,2018)的公开技术分享及社区逆向分析整理,部分细节为推断性描述,仅供参考。
4.1 概述
RDR2 的地形采用全模型化(Mesh-based)方式制作,而非传统的 Heightmap 高度场方案。整个地形由美术团队在 DCC 工具中直接建模绘制,崖壁、道路、河床等特殊地貌作为独立资产制作后,在最终阶段与地形主体合并,不占用额外的 Draw Call。地形按 Tile 进行空间切分,并配合 4 级 LOD 系统实现从近景到远景的渐进式精度管理。
4.2 几何 LOD 系统
4.2.1 Tile 切分与减面策略
地形以 Tile 为基本单位进行空间划分:
- 每个 Tile 在初始建模阶段具有相同的顶点密度(统一的初始网格规格)
- 后续通过减面算法(Mesh Decimation)对各 Tile 进行差异化处理,根据地形起伏复杂度自动或手动控制减面程度,避免平坦区域的顶点浪费
- 崖壁、道路等特殊地貌资产在制作完成后合并(Merge)进对应 Tile 的地形 Mesh,最终以单一 Draw Call 渲染,不产生额外渲染开销
4.2.2 四级 LOD 规格
RDR2 地形共设计 4 个 LOD 层级(LOD0 ~ LOD3),各层级在 Mesh 覆盖范围、贴图分辨率和材质方案上均有明显差异:
| 属性 | LOD3(最远) | LOD2 | LOD1 | LOD0(最近) | 备注 |
|---|---|---|---|---|---|
| Tile Mesh 覆盖范围 | 512×512 M | 128×128 M | 64×64 M | 5×5 M | LOD0 覆盖范围最小,顶点密度最高 |
| Basecolor UV 面积 | — | 256×256 px | 256×256 px | tiling 层 ≈ 1024×1024 px | LOD0 使用 tiling 纹理,UV 密度最高 |
| Basecolor / Normal | 512×512 | 1024×1024 | 512×512 | tiling 层 1024 共 4 层 基础 bake 层 2048 |
LOD0 分 tiling 层与 bake 底层两套 |
| Mask1 / Mask2 | 256×256 | 512×512 | 256×256 | tiling 层 512 共 4 层 | Mask 用于材质混合权重控制 |
| 材质类型 | 简单材质 | 简单材质 | 简单材质 | 崖壁材质 + 地形材质 | LOD0 区分崖壁与地形两套材质 |
| 纹理像素密度 | 1 pixel/M | 4 pixel/M | 16 pixel/M | 128 pixel/M (<256 pixel/M) |
像素密度随 LOD 级别递增 |
4.3 材质系统
RDR2 地形采用两套差异化的材质方案,以平衡近景表现力与远景渲染效率:
4.3.1 LOD0 材质:Weight Blend 多层混合
LOD0 是玩家近距离可见的最高精度层级,采用 Weight Blend(权重混合) 算法实现精细的材质过渡:
- 共包含 4 层材质混合(如草地、泥土、岩石、沙砾等),通过 Mask 贴图控制各层权重
- 地形材质与崖壁材质分开处理:
- 地形材质:使用 tiling 纹理(4 套 tiling 层,每套 1024×1024)叠加基础 bake 底层(2048×2048),tiling 层提供高频细节,bake 层提供低频色彩变化
- 崖壁材质:崖壁部分单独 bake,生成专属的崖壁贴图(2048×2048 UV 展开),通过 Vertexcolor 区分有崖壁区域与无崖壁区域,实现崖壁与地面的材质过渡
- Mask1/Mask2 贴图(tiling 层 512 共 4 层)存储各材质层的混合权重
LOD1 崖壁处理细节:
LOD1 层级对崖壁进行了单独的 bake 处理,具体流程如下:
崖壁的 UV 展开采用 2048×2048 的高分辨率贴图,以保证崖壁岩石纹理的清晰度;地形整体 bake 图为 256×256,用于远景的低精度表示。
4.3.2 LOD1 ~ LOD3 材质:合并简单材质
对于 LOD1 及更远的层级,材质方案大幅简化:
- 将所有材质层合并烘焙为一套单一材质(简单材质),直接采样 bake 好的 Basecolor/Normal/Mask 贴图
- 不再进行实时的多层 Weight Blend 计算,显著降低 Shader 复杂度和 GPU 开销
- 各 LOD 层级的贴图分辨率随距离递减(LOD1: 512×512 → LOD2: 1024×1024 → LOD3: 512×512),LOD2 分辨率略高于 LOD1 是因为其覆盖范围更大(128m vs 64m),需要维持相近的像素密度
4.4 特殊地貌合并策略
RDR2 的一个重要工程决策是将崖壁、道路等特殊地貌资产合并进地形 Tile:
| 地貌类型 | 制作方式 | 合并时机 | 渲染开销 |
|---|---|---|---|
| 崖壁 | 独立建模,单独 bake 贴图 | 最终合并进对应 Tile Mesh | 不增加 Draw Call |
| 道路 | 独立建模,路面材质单独处理 | 最终合并进对应 Tile Mesh | 不增加 Draw Call |
| 河床 | 独立建模 | 最终合并进对应 Tile Mesh | 不增加 Draw Call |
这种合并策略的核心优势在于:无论地形细节多复杂,每个 Tile 始终只产生一个 Draw Call,极大降低了 CPU 端的渲染提交开销,对于 RDR2 这类超大开放世界尤为关键。
4.5 优势分析
| 优势 | 说明 |
|---|---|
| 几何表现力强 | 全模型化方案,崖壁、道路等复杂地貌直接建模,无高度场限制 |
| Draw Call 极低 | 特殊地貌合并进 Tile,每个 Tile 单一 Draw Call |
| 近景材质精度高 | LOD0 采用 tiling + bake 双层方案,兼顾高频细节与低频色彩 |
| 远景渲染高效 | LOD1~3 使用合并简单材质,Shader 复杂度低 |
| 崖壁处理精细 | 崖壁单独 bake + Vertexcolor 混合,过渡自然 |
| 可控性强 | 美术全程手工控制,减面策略灵活,适合 AAA 品质要求 |
4.6 劣势分析
| 劣势 | 说明 |
|---|---|
| 制作成本极高 | 全模型化地形需要大量美术人力,不适合快速迭代 |
| 修改代价大 | 地形修改需重新建模、减面、bake,流程繁琐 |
| 工具链依赖重 | 需要完整的 DCC 工具链(建模、减面、UV 展开、bake)支持 |
| 不支持实时编辑 | 无法像 Heightmap 方案一样在引擎内实时刷笔修改地形 |
| LOD 接缝处理复杂 | 不同 LOD Tile 之间的接缝需要额外处理,防止视觉裂缝 |
| 内存占用较高 | 多套 LOD Mesh + 多分辨率贴图,资产总量大 |
五、总结
-
CDLOD 是一种经典、高效、跨平台的地形 LOD 算法,以其简洁的实现和出色的 LOD 过渡质量著称,适合对性能预算敏感、需要跨平台支持的项目。其核心局限在于 Heightmap 的几何表达能力上限。
-
UE5 Mesh Terrain 代表了次世代地形渲染的方向,借助 Nanite、Lumen、World Partition 等技术栈,在视觉效果和几何自由度上达到了新的高度,但代价是更高的硬件门槛和更复杂的工作流。
-
RDR2 Mesh Terrain 代表了传统 AAA 手工制作流水线的极致——全模型化地形 + 多级 LOD + 差异化材质方案,以极高的制作成本换取了无与伦比的视觉表现和渲染效率。其「特殊地貌合并进 Tile」的策略和「近景 Weight Blend + 远景合并材质」的分级方案,对大型开放世界项目具有重要的参考价值。
三种方案并非互斥——现代 AAA 项目往往综合借鉴多种方案的思路:以 Heightmap 方案(CDLOD 或 UE5 Landscape)为主体保持可编辑性,以手工 Mesh 补充复杂地貌,以分级材质策略控制渲染开销。
文档生成时间:2025年
参考资料:Filip Strugar《Continuous Distance-Dependent Level of Detail for Rendering Heightmaps (CDLOD)》2010;Epic Games UE5 官方文档;GDC 2021/2022 Nanite 技术演讲;RDR2 地形技术公开分享及社区分析