Version: 2022.3
网格的细节级别 (LOD)
导入 LOD 网格

LOD 组

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

LOD Group Inspector
LOD Group Inspector

A LOD 级别之间的过渡的控件

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

C 关于 LOD Bias 质量设置的信息。如果 Lod Bias 属性设置为 1 以外的任何值,将显示此消息。

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

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

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

  • 添加新的 LOD 级别后,单击 Recalculate Bounds 将重新计算所有 LOD 网格游戏对象的包围体。
  • Click Recalculate Lightmap Scale to update the Scale in Lightmap property on all LOD Mesh Renderers, based on the changes you made to the LOD level boundaries.

LOD 组选择条

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

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

LOD 组选择条
LOD 组选择条

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

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

C 若要在选择条中添加和删除 LOD 级别,右键单击 LOD 级别框,然后从上下文菜单选择 Insert BeforeDelete

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

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

Lod Bias 警告
Lod Bias 警告

预览 LOD 过渡

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

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

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

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

覆盖层显示激活状态的 LOD 级别
覆盖层显示激活状态的 LOD 级别

Note: Unity only displays the LOD label when a single GameObject is selected. It is not displayed when multiple GameObjects are selected.

LOD 网格的渲染器

LOD 组选择条上选择 LOD 级别框时,将显示 Renderers 面板。

Renderers 面板上显示了 LOD 3 的公告牌渲染器 (Billboard Renderer)
Renderers 面板上显示了 LOD 3 的公告牌渲染器 (Billboard Renderer)

“Renderers”(渲染器)实际上是为此 LOD 级别保存网格的游戏对象。通常,这是具有 LODGroup 组件的游戏对象的子项。

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

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

LOD 级别之间的过渡

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

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

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

当前与下一个 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(按时间)
Animate Cross-fading(按时间)

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

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

Fade Transition Width(按位置)
Fade Transition Width(按位置)

使用 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 模型的 Fade Mode 设置为 Speed Tree
SpeedTree 模型的 Fade Mode 设置为 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 级别都具有网格渲染器 (Mesh Renderer) 的情况。过渡到公告牌 LOD 级别或完全淡出时,Unity 执行交叉淡化 (Cross Fade) 式混合。

着色器代码中的混合因子

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

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

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

有关 LOD 命名约定的信息,请参阅细节级别



  • 2018–02–08 页面已发布

LODGroup

网格的细节级别 (LOD)
导入 LOD 网格