73.LOD

73.性能优化-GPU-增强渲染性能-LOD


73.1 知识点

LOD 的作用

LOD(Level of Detail,细节层次),核心目的是减少远处物体的几何复杂度(顶点、三角形数量),降低 GPU 顶点处理压力,让场景在视觉上几乎无损的前提下提升性能。

具体好处:

  1. 提升性能:远处的物体在屏幕上只占很少像素,用高模浪费算力。LOD 可以替换成低模,GPU 处理更轻松。
  2. 节省显存和带宽:高模 → 低模 → Billboard,加载和显存压力逐步减轻。
  3. 兼顾画质与性能:近处依旧保留高质量,远处用简化版本,玩家几乎察觉不到。

简单来说,LOD 的主要作用就是动态平衡画质和性能。

LOD 的使用

Unity 提供了 LOD Group 组件来管理 LOD。

使用步骤:

  1. 准备好模型:美术输出同一物体的多个精度版本(比如 LOD0、LOD1、LOD2),或者使用 Mesh Simplification(网格简化算法)工具自动生成。
  2. 创建空物体并添加 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

×

喜欢就点赞,疼爱就打赏