随着场景变大,性能将成为越来越重要的考虑因素。管理此情况的方法之一是根据摄像机与对象之间的距离,使网格具有不同的细节级别。 我们将此级别称为__细节级别__(Level of Detail,缩写为 __LOD__)。
LOD 组 (LOD Group) 用于管理游戏对象的_细节级别_ (LOD)。细节级别是一种优化技术,它为对象使用多个网格;这些网格表示相同的对象,但对象在几何体中的细节递减。思路是当对象远离摄像机并且观察者不会注意到差异时显示低细节的网格。由于具有更简单几何体的网格对硬件的要求更低,因此可通过合理使用 LOD 来提高性能。
水平栏中显示了不同的 LOD 级别,且上方有摄像机图标(LOD 0、LOD 1、LOD 2 等)。LOD 栏中的百分比表示包围盒高度相对于屏幕高度的分数,达到此分数便会激活该 LOD 级别。可通过拖动分隔这些栏的竖线来更改百分比值。此外,还可在水平栏中单击右键,然后从上下文菜单中选择 Insert Before 或 __Delete__,从而添加或删除 LOD 级别。沿着水平栏的摄像机图标的位置显示当前百分比。LOD 栏中的百分比表示激活相应 LOD 级别的阈值;这些阈值等于对象的屏幕空间高度与屏幕高度的比值。请注意,如果 LOD 偏差 (Bias) 不是 1,则摄像机位置不一定是 LOD 从一个级别变换到另一个级别的实际位置。
单击选中其中一个 LOD 栏时,下方将显示 Renderers 面板。这些“渲染器”实际上是用于保持网格以表示 LOD 级别的游戏对象;通常,这将是具有 LODGroup 组件的对象的子级。如果单击 Renderers 面板中的一个空框(带有文字“Add”),对象浏览器将出现,让您为该 LOD 级别选择对象。虽然能为渲染器选择_任何_对象,但是如果该对象还不是 LODGroup 游戏对象的子级,则会询问是否要作为其子级。
从 Unity 5 开始,可为每个 LOD 级别选择 Fade 模式。淡化 (Fading) 用于“混合”两个相邻的 LOD 以实现平滑的过渡效果。但 Unity 不提供默认的内置技术来混合 LOD 几何体。您需要根据游戏类型和资源制作流水线实施自己的技术。Unity 根据对象的屏幕大小计算出“混合系数”,并将其传递给着色器。
计算混合系数有两种模式:
百分比:当对象的屏幕高度从当前 LOD 高度百分比变为下一个百分比时,混合系数从 1 变为 0。仅渲染当前 LOD 的网格。 交叉淡入淡出:您需要指定一个过渡宽度 (Transition Width) 值,在当前 LOD 的结尾定义交叉淡入淡出区域,通过此区域过渡到下一个 LOD。在过渡区域中将同时渲染两个 LOD 级别。对于当前 LOD,混合系数从 1 变为 0,而对于下一个 LOD,混合系数从 0 变为 1。
_混合系数_在着色器程序中以 unity_LODFade.x uniform
变量的形式提供。使用 LOD 淡化渲染的对象将选择关键字 LOD_FADE_PERCENTAGE
或 LOD_FADE_CROSSFADE
。
有关命名约定的更多详细信息,请参阅细节级别页面。
请查看 SpeedTree 树的示例,了解如何配置 LODGroup 以及 SpeedTree 着色器如何使用 unity_LODFade
变量。
检视面板底部有两个 Recalculate 按钮。添加新的 LOD 级别后,__Bounds__ 按钮将重新计算对象的包围体。Lightmap Scale 按钮根据已更改的 LOD 级别边界来更新光照贴图中的 Scale in Lightmap 属性。