73.性能优化-GPU-增强渲染性能-LOD
73.1 知识点
LOD 的作用
LOD(Level of Detail,细节层次),核心目的是减少远处物体的几何复杂度(顶点、三角形数量),降低 GPU 顶点处理压力,让场景在视觉上几乎无损的前提下提升性能。
具体好处:
- 提升性能:远处的物体在屏幕上只占很少像素,用高模浪费算力。LOD 可以替换成低模,GPU 处理更轻松。
- 节省显存和带宽:高模 → 低模 → Billboard,加载和显存压力逐步减轻。
- 兼顾画质与性能:近处依旧保留高质量,远处用简化版本,玩家几乎察觉不到。
简单来说,LOD 的主要作用就是动态平衡画质和性能。
LOD 的使用
Unity 提供了 LOD Group 组件来管理 LOD。
使用步骤:
- 准备好模型:美术输出同一物体的多个精度版本(比如 LOD0、LOD1、LOD2),或者使用
Mesh Simplification(网格简化算法)工具自动生成。 - 创建空物体并添加
LOD Group组件:将多个精度版本模型作为其子对象,在LOD Group组件中对不同精度进行设置关联。
比如创建一个空物体,里面放胶囊体、球和立方体,代表多精度版本。给空物体添加 LOD Group 组件,并在组件的不同精度中分别关联这三个对象。拉近拉远 Scene 摄像机可以看到效果。注意碰撞体最好挂载到空物体上,具体 LOD 对象最好不要挂载碰撞体。



LOD 参数讲解

Fade Mode
控制 LOD 切换时是否做过渡。

None(无过渡):直接切换,没有过渡效果。性能最好,因为不需要额外渲染。缺点是可能出现”跳变”感,尤其是当物体在切换点来回抖动时。
Cross Fade(渐变过渡):Unity 会在切换区间内同时渲染两个 LOD 的模型,旧 LOD 逐渐透明,新 LOD 逐渐显现,最终实现一个”淡入淡出”的效果。过渡平滑,几乎察觉不到 LOD 切换。但在过渡阶段要同时渲染两个模型,会给 GPU 带来负担。
Speed Tree(植被系统):专门为 Unity 的 SpeedTree 植被系统设计的渐变模式。逐步混合顶点、枝叶信息,在切换过程中树木的枝叶会更自然地过渡,不会出现”透明闪烁”。针对树木、植被表现更好,但只能用于 SpeedTree 资源,无法用于普通 Mesh。
勾选 Animate Cross-fading 后,会让淡入淡出的过程随着时间平滑播放动画,而不是仅仅基于相机位置的阈值,过渡更快速。
Fade Transition Width 是渐变切换的过渡区间宽度。值越大,过渡区间越宽,淡入淡出的时间/距离越长,看起来更平滑;值越小,过渡区间越窄,几乎是瞬间切换。
拖动条

上面的百分比(100%、60%、30%、10%)表示屏幕占比阈值,一般是基于物体的包围盒在屏幕上投影的高度,去和屏幕总高度做比值。比如当物体在屏幕上大小 < 30% 时,从 LOD1 切换到 LOD2。拖动它可以查看切换效果。
LOD Bias

表示当前项目里启用了 Quality Settings → LOD Bias(LOD 偏移)。值越大,切换到低 LOD 的时机越远(即更久保留高模)。
Recalculate Bounds 和 Recalculate Lightmap Scale

- Recalculate Bounds:重新计算 LOD 的包围盒。LOD 切换基于物体在屏幕上的包围盒大小,模型缩放后需要点击重新计算。
- Recalculate Lightmap Scale:重新计算光照贴图缩放参数。
Object Size

物体在计算 LOD 时的参考大小(默认自动算出)。
LOD 各阶段信息

各个阶段的 LOD 使用的网格渲染器信息:
- Transition:表示当物体在屏幕上占比大于多少百分比时使用该层级。
- Set to Camera:根据当前相机位置,计算出的 LOD 切换距离。
- Renderers:指定这一层级使用的
MeshRenderer。 - 三角形数量信息:表示当前网格有多少个三角形。
73.2 知识点代码
Lesson73_性能优化_GPU_增强渲染性能_LOD.cs
public class Lesson73_性能优化_GPU_增强渲染性能_LOD
{
#region 知识点一 LOD的作用
//LOD(Level of Detail,细节层次)
//核心目的:
//减少远处物体的几何复杂度(顶点、三角形数量),降低 GPU 顶点处理压力
//让场景在视觉上几乎无损的前提下提升性能
//具体好处:
//1.提升性能
// 远处的物体在屏幕上只占很少像素,用高模浪费算力
// LOD 可以替换成低模,GPU 处理更轻松
//2.节省显存和带宽
// 高模 → 低模 → Billboard,加载和显存压力逐步减轻
//3.兼顾画质与性能
// 近处依旧保留高质量,远处用简化版本,玩家几乎察觉不到
//说人话
//LOD的主要作用就是动态平衡画质和性能
#endregion
#region 知识点二 LOD的使用
//Unity提供了 LOD Group 组件来管理LOD
//使用步骤:
//1.准备好模型
// 美术输出同一物体的多个精度版本(比如 LOD0、LOD1、LOD2)
// 或者使用 Mesh Simplification(网格简化算法) 工具 自动生成
//2.创建一个空物体,添加LOD Group组件,将多个精度版本模型作为其子对象
// 对LOD Group组件进行设置关联
#endregion
#region 知识点三 LOD参数讲解
//Fade Mode:控制 LOD 切换时是否做过渡
//None(无过渡):
// 直接切换,没有过渡效果
// 性能最好,因为不需要额外渲染
// 缺点是可能出现"跳变"感,尤其是当物体在切换点来回抖动时
//Cross Fade(渐变过渡):
// Unity 会在切换区间内同时渲染两个 LOD 的模型
// 旧 LOD 逐渐透明,新 LOD 逐渐显现
// 最终实现一个"淡入淡出"的效果
// 过渡平滑,几乎察觉不到 LOD 切换
// 在过渡阶段要同时渲染两个模型,会给GPU带来负担
//Speed Tree(植被系统):
// 专门为 Unity 的 SpeedTree 植被系统设计的渐变模式
// 逐步混合顶点、枝叶信息,在切换过程中树木的枝叶会更自然地过渡
// 不会出现"透明闪烁"
// 针对树木、植被表现更好
// 只能用于 SpeedTree 资源,无法用于普通 Mesh
//Animate Cross-fading:
// 会让淡入淡出的过程随着时间平滑播放动画
// 而不是仅仅基于相机位置的阈值
// 勾选后过渡更快速
//Fade Transition Width:
// 渐变切换的过渡区间宽度
// 值越大,过渡区间越宽,淡入淡出的时间/距离越长,看起来更平滑
// 值越小,过渡区间越窄,几乎是瞬间切换
//拖动条:
// 上面的百分比(100%、60%、30%、10%)表示屏幕占比阈值
// 一般是基于物体的包围盒在屏幕上投影的高度,去和屏幕总高度做比值
// 比如当物体在屏幕上大小 < 30% 时,从 LOD1 切换到 LOD2
// 拖动它可以查看切换效果
//LOD Bias:
// 表示当前项目里启用了 Quality Settings → LOD Bias(LOD 偏移)
// 值越大,切换到低 LOD 的时机越远(即更久保留高模)
//Recalculate Bounds:重新计算 LOD 的包围盒
// LOD 切换基于物体在屏幕上的包围盒大小,模型缩放后需要点击重新计算
//Recalculate Lightmap Scale:重新计算光照贴图缩放参数
//Object Size:物体在计算 LOD 时的参考大小(默认自动算出)
//LOD 各阶段信息:
// Transition:表示当物体在屏幕上占比大于多少百分比时使用该层级
// Set to Camera:根据当前相机位置,计算出的 LOD 切换距离
// Renderers:指定这一层级使用的 MeshRenderer
// 三角形数量信息:表示当前网格有多少个三角形
#endregion
}
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com