一句话定义:LOD(Level of Detail,细节层次)是给同一个物体预先准备几个精度不同的版本,运行时按它离镜头多远、在屏幕上占多大,挑一个“够用就行”的版本来绘制。
展开讲:3D 场景里最贵的开销通常是三角形数量和随之而来的绘制调用。一个角色高模可能几十万面,但当它在画面里只有几十个像素高时,这些面几乎全被浪费。LOD 的做法是离线生成一条“精度阶梯”:LOD0 是原始高模,往后每一级减面、简化材质、合并部件,最末几级可能只是一个贴了图的方块,甚至一块始终朝向镜头的公告板(billboard)。运行时按距离或屏幕占比选级。
打个比方:地图 App。看全国时只标省会和主干道;放大到一个街区,才把便利店和红绿灯画出来。你不会在全国视图里加载每一条小巷——那不是“更准确”,只是更慢。LOD 也不是偷工减料,而是把算力花在观众真正看得见的地方。同一思路用在贴图上叫 mipmap:远处用低分辨率贴图,减少闪烁。
和相邻概念的区别:减面(mesh decimation)是“怎么造出低模”的手段,LOD 是“分级加何时切换”的整套机制;遮挡剔除(occlusion culling)是整件东西根本不画,LOD 是画得糙一点;mipmap 是同一思想在纹理上的版本。近些年一些引擎用连续的几何簇层级替代离散的 LOD 切换,让过渡更平滑,但“按需降精度”这个原则没变。
切换阈值与“跳模”:切换点一般由屏幕空间误差(screen-space error)或距离阈值决定。参数没调好,最典型的症状就是跳模(popping):物体走着走着突然“换脸”——轮廓猛地变圆或变棱,细节凭空冒出或消失,观众一眼就看出破绽。常见原因有:相邻两级差别太大(阶梯太粗);阈值恰好卡在观众常停留的距离上;没加迟滞(hysteresis),物体在阈值附近来回抖、反复换级;各级的轮廓(silhouette)、法线、材质对不齐。缓解办法是加密阶梯、用交叉淡入淡出(cross-fade)过渡、给切换加缓冲区间。
对从业者的意义:做 3D 生成和资产管线的人,模型“生成出来好看”只是一半,交付前还得检查这条 LOD 链:
| 检查项 | 看什么 |
|---|---|
| 层级齐全 | 从高模到最低级的阶梯是否完整,最低级够不够省 |
| 轮廓一致 | 各级剪影是否走样,近处会不会露出低模的棱角 |
| 材质对齐 | UV、法线、贴图在各级是否对得上,有没有突变 |
| 切换距离 | 阈值是否符合实际场景(手机、PC、XR 差别很大) |
| 跳模 | 实机绕场走一圈,看有没有明显“换脸” |
| 预算 | 每级面数与绘制调用,目标平台撑不撑得住 |
具体工具的默认参数和平台限制,以官方文档为准。普通人感受到的是:手游不烫手、VR 不晕、地图转起来不卡——这些体验背后,很多都是“该粗的地方粗了”。
