中EN
概念页

细节层次

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 节)

收益函数 rr 由当前视点与物体位置计算,也可用于挑选遮挡剔除的遮挡物。

基于距离范围:LOD0 用于 [0,r1)[0, r_1),LOD1 用于 [r1,r2)[r_1, r_2)……最后一级可以是空物体(太远就不画)。在场景图中表现为 LOD 节点,只下降到一个子节点。度量值在 rir_i 附近抖动会导致反复切换,加入迟滞 (hysteresis):rr 增大和减小时使用两套错开的边界。在过渡范围内混合两个 LOD 不理想,因为物体可能长时间停留在过渡区;Mittring 改为到达过渡区时在固定时长内完成切换,最好与迟滞结合。

基于投影面积:球心 c\mathbf{c}、半径 rr,视点 v\mathbf{v} 沿单位方向 d\mathbf{d} 观察,近平面距离 nn,投影半径估计为

p=nrd⋅(v−c)p=\frac{nr}{\mathbf{d}\cdot(\mathbf{v}-\mathbf{c})}

像素面积为 πp2wh\pi p^2 wh(w×hw\times h 为屏幕分辨率)。这是近似:球的透视投影实际上是椭圆。常见做法是用包围盒的外接球,或包围盒的屏幕范围,但细长物体(如对角线横跨屏幕的一根意面)会被严重高估。Schmalstieg 与 Tobler 的方法:把视点变换到盒的局部坐标,判断它位于盒各面平面的哪一侧形成位掩码,查表得到轮廓顶点(看到一、二、三个面时分别为 4、6、6 个顶点),投影后计算轮廓多边形面积;最好再裁剪到视锥两侧以免估计误差过大。

其他度量:

  • 同一 AABB 内大小三角形分布不同,距离和投影法会选同一 LOD;Schulz 与 Mader 用三角形尺寸 tit_i 的几何平均 g=t0t1⋯tn−1ng=\sqrt[n]{t_0t_1\cdots t_{n-1}},少量大三角形无法掩盖大量小三角形;离线算出后预计算首个切换距离,后续切换距离由它简单推出,从而更多地使用低 LOD。
  • 预计算每个离散 LOD 的几何误差(偏离原模型的最大米数),投影到屏幕,选满足用户屏幕误差的最低 LOD。
  • 重要性(墙比墙上的钟重要)、运动、焦点(体育游戏中控球角色、VR 眼动追踪的注视区域用高 LOD)、透过茂密植被的可见度、全局三角形预算、感知度量等。
  • 植被:McAuley 预计算树内各簇之间的可见性,树后方被遮住的簇即使近处也用低 LOD,再远变替身;草通常近处用几何、稍远用公告板、很远只用地面纹理。

时间关键 LOD 渲染(19.9.3 节)

"硬实时"系统在固定时间(如 16 ms)内必须完成一帧。Funkhouser 与 Séquin 的预测式算法(相对于根据上一帧耗时调整的反应式算法):对视锥内物体集合 SS,在

∑SCost(O,L)≤T\sum_{S}\mathrm{Cost}(O,L)\le T

约束下最大化 ∑SBenefit(O,L)\sum_{S}\mathrm{Benefit}(O,L),TT 为目标帧时间。代价函数可通过多次在不同视角下计时估计,收益函数实践中用 BV 投影面积即可。每个物体最低一级是空物体,场景太复杂时只画最重要的物体。这是 NP 完全问题,用贪心法按 Benefit/Cost\mathrm{Benefit}/\mathrm{Cost} 从高到低渲染(同值取收益最高的 LOD),O(nlog⁡n)O(n\log n),结果至少是最优解的一半,并可利用帧间相干加速排序。

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 虚拟化几何体。

  • 生成方式:通常由资产构建管线中的减面工具自动生成,从 LODnn 小心折叠边得到 LOD(n+1)(n+1),尽量保留形状和轮廓,典型链长 3 到 10 级,每级有对应的距离范围;配合流送技术可以只把可见模型、甚至单个 LOD 级载入显存(卷 II 11.6.8.1,见 网格简化、资源管理器)。
  • 传统 LOD 的缺点:美术要时刻关注面数、内存和 draw call 数量(与独特材质和着色器数量有关)的预算;距离范围可能要手调;LOD 太少会"跳变",太多又很快超出内存预算。
  • 对大型网格,简单的 LOD 链不够用,同一网格的不同部分离相机远近差别很大,需要 LOD 树或 LOD 图,见 Nanite 虚拟化几何体 中的 GEA 部分。这与本页「LOD 切换」中 RTR4 讨论的跳变问题和连续 LOD 互相补充。
  1. realtime_rendering_4ed.pdf 第 19 章 Acceleration Algorithms
  2. Game_Engine_Architecture_4th_Edtion_Volume_2_-_Jason_Gregory.pdf
  3. Jason Gregory《Game Engine Architecture》第 4 版(2026)卷 II 第 11 章 11.3.6.8、11.6.8.1 节

相关页面

图形学网格简化Mesh Simplification网格简化(数据缩减、抽取 decimation)在尽量保持外观的前提下减少三角形数,使应用能在低端机器上伸缩。核心操作是可逆的边折叠,用代价函数(典型是 Garland–Heckbert 的二次误差度量 QEM)排序;它产生的渐进网格可用于连续 LOD 与渐进传输,但自动化并非万能。图形学剔除技术Culling Techniques剔除 (culling) 是在渲染前尽快去掉对最终图像没有贡献的部分。本页讲几何类剔除:背面剔除(含成簇背面剔除与法线锥)、视锥剔除(层次化、平面掩码)、室内场景的入口剔除,以及牺牲质量换速度的细节剔除和小三角形剔除。更复杂的遮挡剔除见 遮挡剔除。图形学遮挡剔除Occlusion Culling遮挡剔除尽早剔除被其他物体挡住的物体,避免它们在 z-buffer 中被光栅化、深度比较甚至着色。本页覆盖遮挡剔除的分类与通用框架、GPU 遮挡查询、层次 Z 缓冲 (HZB) 及其在现代引擎中的简化变体(含两遍法、软件光栅化遮挡),以及在 CPU/GPU 上按物体—簇—三角形多粒度组合剔除并用间接绘制提交的剔除系统。图形学替身与深度精灵Impostors & Depth Sprites替身 (impostor) 是把复杂物体从当前视点渲染成纹理、贴在视点朝向公告板上的表示,可在多个实例或多帧间复用以摊薄生成成本。公告板云用少量相交的镂空平面近似网格;深度精灵在纹理中加入每像素深度偏移,能与周围几何正确穿插;浮雕纹理、浮雕替身和几何图像进一步模糊了图像与网格的界线(RTR4 13.6.4、13.6.5、13.7 节)。图形学公告板Billboarding公告板是根据视线方向调整朝向的带纹理矩形。配合 alpha 纹理和动画,它能表现草、烟、火、雾、爆炸、能量护盾、尾迹、云等没有光滑实体表面的现象。各类公告板的区别只在于固定哪个向量(法线或上方向);软粒子、球形公告板解决与实体相交和穿过近平面的问题,轴向公告板用于树木、激光等柱对称物体(RTR4 13.6–13.6.3 节)。图形学高效曲面细分Efficient Tessellation实时渲染曲面需要把它细分成三角网格。与其在 CPU 上细分后传大量三角形,不如把曲面描述送到 GPU,由硬件细分管线(外壳着色器 → 细分器 → 域着色器)展开。本页讲分数细分因子、按曲率/屏幕尺寸/轮廓决定细分率的自适应细分、避免裂缝与跳变的方法,以及 Catmull-Clark 曲面的快速 GPU 渲染(近似面片、OpenSubdiv 特征自适应细分、自适应四叉树)。图形学毛发渲染Hair & Fur Rendering毛发由角质层、皮质、髓质三层构成,可看作用曲线离散化的体积。几何上用沿引导曲线挤出的四边形条带并配合 alpha/顺序无关透明;着色用 BSDF(R、TT、TRT 分量),再加体积自阴影与多次散射近似;动物短毛可用壳与鳍或几何着色器挤出(RTR4 14.7 节)。图形学透明渲染与 Alpha 混合Transparency & Alpha Blending本页讲最简单的"视角相关"透明:半透明物体只衰减其后方物体的颜色。z-buffer 每像素只存一个表面,所以透明物体通常要从后往前用 over 运算符混合;顺序无关透明 (OIT) 方法用多遍渲染、逐像素链表或近似公式避免排序,各有内存、性能或准确性代价。预乘 alpha 让过滤、混合和合成更正确高效。图形学地形渲染Terrain Rendering地形渲染(游戏、Google Earth、开源大世界引擎 Cesium 等)要在巨大高度场上按距离分配细节,同时控制内存、绘制调用和 LOD 之间的裂缝与跳变。主流 GPU 友好方案有:类似纹理 clipmap 的几何 clipmap、按瓦片复用顶点缓冲只换索引缓冲的分块方案、基于四叉树和屏幕空间误差的 chunked LOD、预存所有过渡索引缓冲的受限四叉树,以及 GPU 细分和压缩等补充手段。任何方案都可叠加分形噪声以在拉近时提供细节,许多系统也在加载时程序化生成地形。图形学实时渲染Real-Time Rendering实时渲染是在计算机上快速生成图像、并让图像随用户输入即时变化的技术。RTR4 认为它由三个要素共同定义:交互性、三维空间感,以及图形加速硬件 (GPU)。游戏开发 · UE5MassEntity 数据导向框架MassEntity FrameworkMassEntity 是 UE5 面向玩法的数据导向 (Data-Oriented) 计算框架,属于实体-组件-系统 (Entity Component System, ECS) 一类设计:实体 (Entity) 只是一个 ID 加上一组片段 (Fragment) 数据,相同组成的实体归入同一原型 (Archetype) 并按内存块 (Chunk) 连续存放,无状态的处理器 (Processor) 通过实体查询 (EntityQuery) 批量处理片段。它适合成千上万个同质对象(人群、交通),MassGameplay 插件在其上提供表现、生成、LOD、复制、StateTree 等功能。游戏开发 · UE5世界分区World Partition世界分区 (World Partition) 是 UE5 的自动数据管理与基于距离的关卡流送 (Level Streaming) 系统:整个世界存为一个持久关卡,按可配置的运行时网格划分为单元格 (Cell),由流送源 (Streaming Source,默认是玩家控制器) 按距离加载/卸载。它配合一 Actor 一文件 (One File Per Actor, OFPA) 支持多人协作编辑,用数据层 (Data Layers) 按玩法状态切换内容,用分层细节层次 (Hierarchical Level of Detail, HLOD) 在远处以代理网格显示未加载的单元格。游戏开发 · UE5资产管理与异步加载Asset Management & Async LoadingUE 资产默认按引用自动加载:硬引用 (Hard Reference) 会让被引用资产随引用者一起加载,不加控制就可能在启动时加载全部内容。软引用 (Soft Reference,TSoftObjectPtr/FSoftObjectPath) 只存路径,配合流式管理器 (Streamable Manager) 异步按需加载;资产管理器 (Asset Manager) 进一步把内容划分为主资产 (Primary Asset) 和次资产 (Secondary Asset),用资产包 (Asset Bundle) 管理加载、卸载、烘焙分块与内存审计。游戏开发 · UE5Nanite 虚拟化几何体Nanite Virtualized GeometryNanite 是 UE5 的虚拟化几何体 (Virtualized Geometry) 系统:导入时把网格切成分层的三角形簇 (Cluster),渲染时按相机视角逐簇选择细节层次并无缝拼接,按需从磁盘流送,并在绕过传统绘制调用 (Draw Call) 的独立通道中渲染,使帧预算不再受多边形数、绘制调用和网格内存约束。游戏开发 · UE5虚拟阴影贴图Virtual Shadow Maps虚拟阴影贴图 (Virtual Shadow Maps, VSM) 是 UE5 默认的阴影方法:概念上就是分辨率极高(虚拟 16k×16k)的阴影贴图,切成 128×128 的页 (Page),只为屏幕上需要着色的像素分配和渲染页,并跨帧缓存;方向光用 clipmap 覆盖大范围,软阴影由阴影贴图光线追踪 (Shadow Map Ray Tracing, SMRT) 生成。它为 Nanite 设计,与 Nanite 一起使用时最高效。图形学空间数据结构Spatial Data Structures空间数据结构把几何体按 n 维空间组织起来,通常是层次化的树,使"几何体是否重叠"一类查询从 O(n) 降到大约 O(\log n)。常见类型有包围体层次 (BVH)、BSP 树(轴对齐的 k-d 树与多边形对齐两种)、四叉树/八叉树(含松散八叉树),以及更偏向组织模型关系的场景图。它们是剔除、光线求交、碰撞检测等加速算法的基础。综合帧时间预算与渲染性能Frame Budget & Rendering Performance本页把 wiki 中分散在 RTR4 第 18~23 章的性能知识串成一条线:一帧的时间预算由最慢的管线阶段决定,先用毫秒帧时间度量并定位瓶颈,再按瓶颈所在位置——CPU/驱动、几何、像素、带宽/内存——选用对应手段;最后从 GPU 硬件机制(占用率、HiZ/early-z、压缩、分块架构)理解这些手段为何有效。各结论的细节与出处见所链接的概念页。图形学大场景渲染与虚拟纹理Large Scenes & Virtual Texturing当场景数据远大于内存(如主机只有 8 GB,而游戏世界有数百 GB)时,需要按需把数据流送进内存。本页讲三类技术:虚拟纹理(把巨大的 mipmap 链切成瓦片,只让可见瓦片驻留在显存,通过页表/间接纹理寻址)、纹理转码(磁盘上用高压缩比的可变码率格式,加载时转成 GPU 块压缩格式),以及按平面瓦片组织资产的通用流送。这些方法几乎总是与剔除和 LOD 配合使用;地形部分见 地形渲染。综合角色渲染Character Rendering角色是游戏中最受关注、技术最集中的资产。本页按"动起来 → 表面细节 → 材质着色 → 特殊材质(皮肤、毛发、布料)→ 光照与阴影 → 性能"的顺序,把 wiki 中相关概念页串成一套角色渲染方案的地图。每一层只给出要点与取舍,细节见链接页。游戏开发 · UE5水体系统Water SystemUE5 的 Water 插件用样条 (Spline) 定义海洋、湖泊、河流和自定义水体,它们会自动通过 Landscape 笔刷在地形上挖出河床和湖底。所有水体共用由 Water Zone 生成的同一套瓦片网格,因此相互衔接无缝。网格 LOD 每帧遍历四叉树生成,相邻 LOD 之间平滑变形过渡,远处用一块远景网格填补到地平线。游戏开发 · UE5地形系统LandscapeUE5 的 Landscape 把地形切成大小相同的正方形组件 (Component),组件是渲染、可见性计算和碰撞的基本单位;每个组件可以再分成 1 个或 2×2 个分段 (Section),分段是 LOD 计算的基本单位。分段的顶点数必须是 2 的幂(最大 256×256),这样不同 LOD 可以存进高度纹理的 mipmap。地形材质用 Landscape Layer Blend 节点按权重图混合多个图层。游戏开发 · UE5MetaHuman 数字人MetaHumanMetaHuman 是 Epic 的一套完整框架,用来创建、驱动和使用带完整绑定、照片级的数字人。从 UE 5.6 起,MetaHuman Creator 完全集成进引擎(双击 MetaHuman Character 资产打开),可以把角色组装 (Assembly) 成针对不同目标环境优化的资产。在引擎层面,最需要关心的是 LOD:MetaHuman 由多个 LOD 数量不同的组件组成,由 LODSync 组件统一切换;毛发是 Groom 资产,可以在发丝、发片、网格三种几何之间按 LOD 切换。图形学硬件光线追踪管线Hardware Ray Tracing Pipeline高端 GPU 提供硬件加速的光线追踪,它像 GPU 中独立于光栅管线和计算管线的另一条管线,但能与它们协调同步。场景几何要先组织成两层加速结构(TLAS 实例层与 BLAS 几何层),光线发射后由 any-hit、closest-hit、miss 等着色器处理结果。由于还不够快,GPU 光追通常与光栅化结合成混合渲染:先光栅化 G-buffer,再对镜面、反射和间接光发射光线。游戏开发资源管理器Resource Manager游戏由网格、材质、纹理、着色器、动画、音频、关卡布局、碰撞与物理参数等大量资源(也叫资产、媒体)构成。内存有限,所以引擎要保证每个资源在内存中只有一份(五个网格共用一张纹理时只载入一份)。每个引擎都有某种资源管理器:有的是统一集中的子系统,有的散布在多年间由不同人写的各个子系统中,但职责和要解决的问题是一样的。本页讲运行时部分:职责、文件组织与归档、文件格式、资源 GUID、资源注册表、生命周期(引用计数)和资源的内存管理;交叉引用与加载后初始化见 资源交叉引用与加载后初始化,离线工具链见 资产管线与工具链。游戏开发游戏世界与游戏对象Game World & Game Objects游戏由玩法 (gameplay) 而不是技术定义;游戏机制 (game mechanics) 是支配游戏中各实体交互的规则,以及目标、成败标准、玩家能力、非玩家实体和整体流程(GEA 引用的论文称实现玩法的软件系统为游戏的 G 因子)。大多数游戏世界由静态元素和动态元素组成,划分为若干世界块,并由高层游戏流程组织玩家目标;动态元素通常实现为游戏对象 (GO),引擎提供的建模设施称为游戏对象模型,且分为工具侧和运行时两套(GEA4 卷 II 16、16.1–16.2)。游戏开发 · UE5网络复制与 RPCNetwork Replication & RPCUE 采用服务器权威 (Server-Authoritative) 的客户端-服务器模型:游戏真正在服务器上进行,服务器把状态复制 (Replication) 给客户端,客户端通过远程过程调用 (Remote Procedure Call, RPC) 向服务器请求操作。开发者需要显式声明哪些 Actor、属性、函数要走网络,并借助所有权、网络角色、相关性、优先级控制“发给谁、发多少”。UE 5.8 提供通用复制系统、Replication Graph 和实验性的 Iris 三套复制系统。游戏美术断边贴花:从 Fallout 3 到 Cyberpunk POMBroken Edge DecalsGAT 1 与 85:低模断边用贴花/包裹几何补细节;Cyberpunk 2077: Phantom Liberty 进一步用重叠破损网格 + POM 贴花消交线并打碎轮廓。85 明确是 1 的延伸。

被这些页面引用1 篇

输入关键词开始搜索

滚轮或双指缩放 · 拖动平移 · 双击放大 / 还原