Version: Unity 6.0 (6000.0)
语言 : 中文
导入具有 LOD 设置的网格
用于低细节级别 (LOD) 的 2D 图像

LOD 组组件参考

Switch to Scripting

LOD 组 (LOD Group) 组件管理游戏对象的细节级别 (LOD)。

LOD 组检视面板
LOD 组检视面板

A 用于在 LOD 级别之间过渡的控件

B LOD 组选择条,用于在__ LOD__ 级别之间切换以及预览 LOD 渲染

C 有关细节级别偏移质量 (Lod Bias Quality) 设置的信息。如果细节级别偏移 (Lod Bias) 属性设置为 1 以外的任何值,将显示此消息。

D 所选 LOD 级别的淡化过渡宽度 (Fade Transition Width) 设置。仅在禁用动画交叉淡化 (Animate Cross-fading) 属性(即,选择按宽度而不是按时间来设置过渡区)的情况下,才显示此属性。

E 为所选 LOD 级别设置的网格渲染器 (Renderer)

此外,该组件底部有两个按钮:

  • 添加新的 LOD 级别后,单击重新计算边界 (Recalculate Bounds) 将重新计算所有 LOD 网格游戏对象的包围体。
  • 通过单击重新计算光照贴图缩放 (Recalculate Lightmap Scale),可根据对 LOD 级别边界进行的更改,在所有 LOD 网格渲染器上更新光照贴图中的缩放 (Scale in Lightmap) 属性。

LOD 组选择条

LOD 组选择条将不同的 LOD 级别表示为彩色框。

每个 LOD 级别框中显示的百分比表示激活该级别的阈值。该阈值基于游戏对象的屏幕空间高度与屏幕总高度之比。例如,如果 LOD 1 的阈值设置为 50%,则当摄像机向后拉得足够远,使得游戏对象的高度填满视图的一半时,LOD 1 将变为活动状态。

LOD 组选择条
LOD 组选择条

A LOD 预览的播放头。可以来回拖动摄像机图标来测试 LOD 级别及其过渡。在播放头的底部,可以看到当前的百分比。

B 若要选择某个级别,请单击级别框。对于所选的每个 LOD 级别,可以选择要使用的渲染器自定义过渡区

C 若要在选择条中添加和删除 LOD 级别,请右键单击 LOD 级别框,然后从上下文菜单中选择__在前面插入 (Insert Before)__ 或__删除 (Delete)__。

D 级别调整控件。若要更改 LOD 级别的百分比值,请拖动 LOD 级别框边界的左边框。

注意:如果细节级别偏移 (Lod Bias) 属性未设置为 1,摄像机位置可能不匹配每个 LOD 级别过渡到下一级别的实际位置。在此情况下,选择条下方会显示一条警告消息。

细节级别偏移警告
细节级别偏移警告

预览 LOD 过渡

在 LOD 组选择条上移动摄像机图标时,Scene 视图将显示 LOD 级别之间的过渡预览。摄像机图标充当播放头,可用于来回拖动以控制沿 LOD 组选择条预览的准确位置。预览会显示摄像机将在每个 LOD 级别渲染的内容。

控制 LOD 组选择条上的过渡预览
控制 LOD 组选择条上的过渡预览

LOD 预览播放头使沿 LOD 组选择条的准确位置显示为百分比(从左侧的 100% 到右侧的 0%)。该百分比表示游戏对象的屏幕空间高度与屏幕总高度之比。

在级别中移动时,Scene 视图显示树资源的包围盒,而覆盖层指示哪个 LOD 处于激活状态:

显示活动 LOD 级别的叠加层
显示活动 LOD 级别的叠加层

注意:Unity 仅在选择单个游戏对象时显示 LOD 标签。选择多个游戏对象时,不会显示此标签。

LOD 网格的渲染器

LOD 组选择条上选择 LOD 级别框时,将显示__渲染器 (Renderers)__ 面板。

带有公告牌渲染器的渲染器面板,适用于 LOD 3
带有公告牌渲染器的渲染器面板,适用于 LOD 3

‘Renderers’ 实际上是为此 LOD 级别保存网格的游戏对象。通常,这是具有 LOD 组组件的游戏对象的子项。

若要为当前的 LOD 级别设置渲染器网格,请单击添加 (Add) 框,然后从对象选择器中选择该 LOD 级别的游戏对象。

可以为渲染器选择任何游戏对象,但是如果选择的游戏对象还不是子项,Unity 会提示您将其作为 LOD 组游戏对象的子项。

LOD 级别之间的过渡

LOD 级别之间的平滑过渡可以改善玩家的游戏体验。摄像机移近或移远时,您不希望玩家发现当前的 LOD 级别与下一个级别之间存在明显的切换痕迹(有时称为突现 (popping))。

平滑的过渡发生在过渡区内;在此区域中,Unity 分别渲染当前和下一个 LOD 级别,然后使两个级别一起交叉淡化。

交叉淡化 (Cross-fading) 是用于同时渲染两个级别的方法,其中,当前 LOD 级别的权重为 1 至 0,下一个 LOD 级别的权重为 0 至 1:

当前 LOD 级别与下一个 LOD 级别之间的交叉淡化
当前 LOD 级别与下一个 LOD 级别之间的交叉淡化

Unity 通常通过屏幕空间抖动或透明度来实现交叉淡化。对于最后一个 LOD 级别,没有交叉淡化:当前级别只淡出。

要在 LOD 级别上设置平滑过渡,请执行以下操作:

  1. 从下拉菜单中选择淡化模式 (Fade Mode),然后选择交叉淡化 (Cross Fade)

    淡化模式 (Fade Mode) 下拉菜单
    淡化模式 (Fade Mode) 下拉菜单

    注意:如果树资源是使用 SpeedTree 制作的,请改为选择 Speed Tree 模式。如需了解更多信息,请参阅使用 SpeedTree 模型

  2. 默认情况下已启用动画交叉淡化 (Animate Cross-fading) 选项,这意味着 Unity 会执行基于时间的过渡。如果希望基于摄像机位置来定义您自己的过渡区,请禁用动画交叉淡化 (Animate Cross-fading) 选项并设置淡化过渡宽度 (Fade Transition Width) 属性。

    如需了解更多信息,请参阅自定义过渡区值。

自定义过渡区

两个 LOD 级别之间的过渡从模型的高度比值跨过下一个 LOD 阈值时开始。例如,如果 LOD 1 阈值设定为 60%,则 LOD 0 和 LOD 1 级别之间的过渡总是在模型高度一达到 60% 时就开始。此过渡持续时间很短:

动画交叉淡化(按时间)
动画交叉淡化(按时间)

此行为是按时间变化的,因此在启用动画交叉淡化 (Animate Cross-fading) 属性后,无需设置任何属性。对于每个 LOD 级别,交叉淡化的确切持续时间都是相同的。

或者,也可以在每个 LOD 级别内按位置手动定义过渡区。每个区域在下一个 LOD 级别的阈值之前开始和结束。可以定义每个 LOD 级别中用作过渡区的比例;即,设置从过渡开始到下一个级别阈值之间的距离:

淡化过渡宽度(按位置)
淡化过渡宽度(按位置)

使用淡化过渡宽度 (Fade Transition Width) 属性来定义每个 LOD 级别上的过渡区:

  1. 禁用动画交叉淡化 (Animate Cross-fading) 选项。

  2. 单击要设置的特定 LOD 级别框。

    淡化过渡宽度 (Fade Transition Width) 属性显示在 LOD 组选择条之下。

    显示淡化过渡宽度 (Fade Transition Width) 属性
    显示淡化过渡宽度 (Fade Transition Width) 属性
  3. 设置淡化过渡宽度 (Fade Transition Width) 属性,将交叉淡化过渡区的宽度定义为当前 LOD 级别整个长度的一个比例(0.0 与 1.0 之间)。例如,指定较小的值可延迟进行混合并创建更快的过渡。

使用 SpeedTree 模型

SpeedTree 几何体存储每个顶点的下一个 LOD 位置。然后,每个顶点都知道如何在当前 LOD 位置与下一个 LOD 位置之间进行插值。Unity 导入在 SpeedTree 中创建的模型时,自动将这些模型设置为 Speed Tree 模式。

SpeedTree 模型的 Speed Tree 淡化模式
SpeedTree 模型的 Speed Tree 淡化模式

Unity 只需渲染当前 LOD 几何体并提供 0 到 1 之间的值,从而指示每个顶点逐渐移动到下一个 LOD 位置。在过渡结束时,当前 LOD 和下一个 LOD 的几何体完美匹配。

两个 LOD 级别之间的混合从 0 开始,到 1 结束。沿该区域的任何点都是混合因子 (blend factor),表示当前 LOD 级别与下一个 LOD 级别之间的权重:

SpeedTree 模型的混合
SpeedTree 模型的混合

Speed Tree 模式使用混合因子来插入当前__网格 LOD 级别__与下一个网格 LOD 级别之间的顶点位置,然后在该位置渲染几何体。

注意:Speed Tree 模式仅用于两个网格 LOD 级别之间的混合:即,当前 LOD 级别和下一个 LOD 级别都有网格渲染器时。过渡到公告牌 LOD 级别或完全淡出时,Unity 执行交叉淡化 (Cross Fade) 式混合。

着色器代码中的混合因子

Unity 没有提供默认的内置技术来混合 LOD 几何体。您需要根据游戏类型和资源制作流水线实施自己的技术。

Unity 根据游戏对象的屏幕大小来计算混合因子,并在 unity_LODFade.x uniform 变量中将其传递给着色器。对于使用 LOD 淡化来渲染的游戏对象,请根据所选的淡化模式 (Fade Mode),使用 LOD_FADE_PERCENTAGELOD_FADE_CROSSFADE 关键字。

对于基于时间(动画化)的过渡,可以在全局为具有 LODGroup.crossFadeAnimationDuration 成员的每个 LOD 级别设置准确的过渡持续时间。

有关 LOD 命名约定的信息,请参阅导入具有 LOD 设置的网格

LODGroup

导入具有 LOD 设置的网格
用于低细节级别 (LOD) 的 2D 图像