欢迎光临散文网 会员登陆 & 注册

Unity-LOD 组

2021-10-21 01:45 作者:unity_某某师_高锦锦  | 我要投稿

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

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 网格游戏对象的包围体。

  • 通过单击 Recalculate Lightmap Scale,可根据对 LOD 级别边界进行的更改,在所有 LOD 网格渲染器上更新 Scale in Lightmap 属性。


LOD 组选择条

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

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

LOD 组选择条

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

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

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

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

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

Lod Bias 警告


预览 LOD 过渡

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

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

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

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

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


LOD 网格的渲染器

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

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 级别之间的交叉淡化

Unity 通常通过屏幕空间抖动或透明度来实现交叉淡化。对于上一个 LOD 级别,不会发生交叉淡化:当前级别只是淡出。

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

1.从下拉菜单中选择 Fade Mode,然后选择 Cross Fade

![Fade Mode 下拉菜单](../uploads/Main/LODGroup-transitions.png) **注意:**如果树资源是使用 [SpeedTree](https://store.speedtree.com/unity/) 制作的,请选择 **Speed Tree** 模式。有关更多信息,请参阅[使用 SpeedTree 模型](#SpeedTreeModels)。

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

有关更多信息,请参阅[自定义过渡区](#width)值。


自定义过渡区

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

Animate Cross-fading(按时间)

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

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

Fade Transition Width(按位置)

使用 Fade Transition Width 属性来定义每个 LOD 级别上的过渡区:

1.禁用 Animate Cross-fading 选项。

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

**Fade Transition Width** 属性显示在 **LOD 组**选择条之下。 ![显示 Fade Transition Width 属性](../uploads/Main/LODGroup-width.png)

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


使用 SpeedTree 模型

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

SpeedTree 模型的 Fade Mode 设置为 Speed Tree

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

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

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_PERCENTAGE 或 LOD_FADE_CROSSFADE 关键字。

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

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


Unity-LOD 组的评论 (共 条)

分享到微博请遵守国家法律