细节层次
Level of Detail
细节层次 (LOD) 在物体对图像贡献变小时改用更简单的表示。LOD 系统由三部分组成:生成(简化或手工制作多个版本)、选择(按距离、投影面积等收益函数挑选)、切换(尽量减少跳变 popping)。LOD 主要减少顶点处理,也通过减少 quad 过度着色降低像素开销;进一步还可在预算约束下全局选择 LOD,实现时间关键(恒定帧率)渲染。
基本思想(19.9 节)
一辆百万三角形的车只覆盖 200 像素时,用 1000 个三角形的版本看起来几乎一样。要点:
- LOD 最好在剔除之后进行,只为视锥内物体计算选择。
- 可让程序在性能不同的设备上都达到目标帧率。
- 降低像素开销:模型三角形边长总和变小,quad 过度着色减少。
- 可与雾结合:物体完全进入不透明雾中可跳过;把远平面拉近可多剔除物体;雾中可用更低 LOD。
- 球、贝塞尔曲面、细分曲面的 LOD 是几何描述本身的一部分,由细分控制决定(见 高效曲面细分)。
- LOD 不限于几何:低 LOD 可配低分辨率纹理(省内存、改善缓存)、简化着色器、远处减少蒙皮骨骼数;远处静态物体可用公告板和替身,或用凹凸/浮雕贴图代替几何细节(缺点是轮廓失去曲率,可沿轮廓边挤出鳍片补偿)。例如毛发可从近到远依次用几何、alpha 混合折线、体积纹理"壳"、纹理贴图表示。
LOD 切换(19.9.1 节)
| 方法 | 做法 | 优点 | 缺点 |
|---|---|---|---|
| 离散几何 LOD | 多个静态网格,下一帧直接换 | 适合现代 GPU,网格常驻显存复用 | 跳变最明显;在差异几乎不可见的距离切换才可接受 |
| 混合 LOD | 短时间内在两个 LOD 间过渡 | 平滑 | 过渡期间要渲染两份 |
| Alpha LOD | 随距离增大逐渐变透明直到消失 | 完全无跳变,消失后可不再渲染 | 只有消失后才省性能;透明需排序 |
| CLOD / 几何变形 | 利用边折叠序列连续变化或插值顶点 | 平滑 | 如今实践中很少使用 |
混合 LOD 的正确做法(Giegl 与 Wimmer):把两个 LOD 都做成半透明会得到一个奇怪的半透明物体。应先把 LOD1 不透明地画入颜色与深度,再用 over 混合把 LOD2 的 alpha 从 0 增到 1 淡入;LOD2 完全不透明后成为当前 LOD,再淡出 LOD1。正在淡入淡出的 LOD 开深度测试、关深度写入,并像透明物体一样在所有不透明内容之后按序绘制。过渡区间要短。Mittring 用(可能亚像素级的)纱门透明 (screen-door) 溶解代替 alpha。Scherzer 与 Wimmer 每帧只更新其中一个 LOD,另一个借助上一帧反投影复用。SpeedTree 则让树枝逐渐缩小再移除,远处树换成 8~12 张不同视角的公告板(颜色 + 法线贴图,选最朝向观察者的一张,并裁掉透明区域)。
Alpha LOD 用于最简单的可见 LOD;超过不可见阈值后完全不送入管线。为避免排序,可像 Whatley 处理远处植被那样用噪声纹理做纱门溶解,质量不如真正的 alpha 渐隐,但无需排序和混合。
CLOD 与几何变形 (geomorph):每次边折叠减少两个三角形,其逆操作为顶点分裂。CLOD 让三角形数随选择值连续变化(100 米 1000 个、101 米 998 个),但并非每个中间模型都好看,难以用高效的三角形网格,多实例时各自需要不同三角形集,且多为串行算法,不适合 GPU(Hu 等人提出了适合 GPU 并行、且视相关的变体)。Geomorph LOD 是保留顶点对应关系的离散模型,切换时把复杂模型顶点从原位插值到简化版位置,各静态模型可预先保证质量;缺点是每个顶点都要插值、物体总显得在变化(带纹理时尤甚)。还可与纱门透明结合。GPU 的分数细分也能避免跳变。
LOD 选择(19.9.2 节)
收益函数 由当前视点与物体位置计算,也可用于挑选遮挡剔除的遮挡物。
基于距离范围:LOD0 用于 ,LOD1 用于 ……最后一级可以是空物体(太远就不画)。在场景图中表现为 LOD 节点,只下降到一个子节点。度量值在 附近抖动会导致反复切换,加入迟滞 (hysteresis): 增大和减小时使用两套错开的边界。在过渡范围内混合两个 LOD 不理想,因为物体可能长时间停留在过渡区;Mittring 改为到达过渡区时在固定时长内完成切换,最好与迟滞结合。
基于投影面积:球心 、半径 ,视点 沿单位方向 观察,近平面距离 ,投影半径估计为
像素面积为 ( 为屏幕分辨率)。这是近似:球的透视投影实际上是椭圆。常见做法是用包围盒的外接球,或包围盒的屏幕范围,但细长物体(如对角线横跨屏幕的一根意面)会被严重高估。Schmalstieg 与 Tobler 的方法:把视点变换到盒的局部坐标,判断它位于盒各面平面的哪一侧形成位掩码,查表得到轮廓顶点(看到一、二、三个面时分别为 4、6、6 个顶点),投影后计算轮廓多边形面积;最好再裁剪到视锥两侧以免估计误差过大。
其他度量:
- 同一 AABB 内大小三角形分布不同,距离和投影法会选同一 LOD;Schulz 与 Mader 用三角形尺寸 的几何平均 ,少量大三角形无法掩盖大量小三角形;离线算出后预计算首个切换距离,后续切换距离由它简单推出,从而更多地使用低 LOD。
- 预计算每个离散 LOD 的几何误差(偏离原模型的最大米数),投影到屏幕,选满足用户屏幕误差的最低 LOD。
- 重要性(墙比墙上的钟重要)、运动、焦点(体育游戏中控球角色、VR 眼动追踪的注视区域用高 LOD)、透过茂密植被的可见度、全局三角形预算、感知度量等。
- 植被:McAuley 预计算树内各簇之间的可见性,树后方被遮住的簇即使近处也用低 LOD,再远变替身;草通常近处用几何、稍远用公告板、很远只用地面纹理。
时间关键 LOD 渲染(19.9.3 节)
"硬实时"系统在固定时间(如 16 ms)内必须完成一帧。Funkhouser 与 Séquin 的预测式算法(相对于根据上一帧耗时调整的反应式算法):对视锥内物体集合 ,在
约束下最大化 , 为目标帧时间。代价函数可通过多次在不同视角下计时估计,收益函数实践中用 BV 投影面积即可。每个物体最低一级是空物体,场景太复杂时只画最重要的物体。这是 NP 完全问题,用贪心法按 从高到低渲染(同值取收益最高的 LOD),,结果至少是最优解的一半,并可利用帧间相干加速排序。
flowchart LR A["视锥内物体"] --> B["为每个 O,L 估计 Cost 与 Benefit"] B --> C["按 Benefit/Cost 降序排序"] C --> D["依次选取, 累计代价不超过帧预算 T"] D --> E["超出预算的物体取空 LOD"]
相关扩展:LOD 与替身层次结合的近似恒定时间室外渲染、增量层次 LOD 选择、层次 LOD (HLOD)(恒定帧率或误差有界)、面向移动设备的功耗预算优化。静态模型还可在相机静止时渐进累积做抗锯齿、景深、软阴影,运动时降低所有 LOD 并启用细节剔除保帧率。
GEA 的视角:LOD 链的代价与渐进网格(卷 II 11.3.6.8、11.6.8.1)
- 目标:固定细分的网格在近处会露出块状轮廓。理想情况是三角形与像素的密度保持一致,无论物体远近。LOD 链是对这个理想的近似:LOD 0 细分最高、用于近处,随距离切到 LOD 1、LOD 2……让引擎把大部分时间花在离相机最近、占像素最多的物体上(卷 II 11.3.6.8)。书中图例的三档环面分别为 5,000、450、200 个三角形。
- 水面和地形常用动态细分:网格是规则网格上的高度场,靠近相机的区域用满分辨率,越远用越少的网格点(见 地形渲染)。
- 渐进网格:只做一个高分辨率网格(相当于 LOD 0),随距离自动折叠部分边来降低细分,相当于自动生成一条半连续的 LOD 链。GEA 把虚幻引擎 5 的 Nanite 归为渐进式 LOD 系统的一个例子。
原书问题(11.3.6.8):把 Nanite 归为"渐进网格"不准确。Hoppe 的渐进网格(SIGGRAPH 1996)在运行时按顶点分裂/边折叠记录逐步增减单个顶点;Nanite 是离线把网格切成约 128 个三角形的簇、按簇组简化并建立 LOD 有向无环图,运行时按屏幕空间误差为每个区域选择离散的簇级别,不在运行时做边折叠(Karis 等,"A Deep Dive into Nanite Virtualized Geometry",SIGGRAPH 2021 Advances in Real-Time Rendering)。边折叠只出现在离线构建阶段;GEA 自己在 11.6.8 中描述的 LOD 图也与此一致,见 Nanite 虚拟化几何体。
- 生成方式:通常由资产构建管线中的减面工具自动生成,从 LOD 小心折叠边得到 LOD,尽量保留形状和轮廓,典型链长 3 到 10 级,每级有对应的距离范围;配合流送技术可以只把可见模型、甚至单个 LOD 级载入显存(卷 II 11.6.8.1,见 网格简化、资源管理器)。
- 传统 LOD 的缺点:美术要时刻关注面数、内存和 draw call 数量(与独特材质和着色器数量有关)的预算;距离范围可能要手调;LOD 太少会"跳变",太多又很快超出内存预算。
- 对大型网格,简单的 LOD 链不够用,同一网格的不同部分离相机远近差别很大,需要 LOD 树或 LOD 图,见 Nanite 虚拟化几何体 中的 GEA 部分。这与本页「LOD 切换」中 RTR4 讨论的跳变问题和连续 LOD 互相补充。
出处
- realtime_rendering_4ed.pdf 第 19 章 Acceleration Algorithms
- Game_Engine_Architecture_4th_Edtion_Volume_2_-_Jason_Gregory.pdf
- Jason Gregory《Game Engine Architecture》第 4 版(2026)卷 II 第 11 章 11.3.6.8、11.6.8.1 节