LOD 组 (LOD Group) 组件管理游戏对象的细节级别 (LOD)。
LOD 级别之间的过渡的控件
LOD 组选择条,用于在 LOD 级别之间切换以及预览 LOD 渲染
关于 LOD Bias 质量设置的信息。如果 Lod Bias 属性设置为 1 以外的任何值,将显示此消息。
所选 LOD 级别的 Fade Transition Width 设置。仅在禁用 Animate Cross-fading 属性(即,选择按宽度而不是按时间来设置过渡区)的情况下,才显示该属性。
为所选 LOD 级别设置的网格渲染器 (Renderers)
此外,该组件底部有两个按钮:
LOD 组选择条将不同的 LOD 级别表示为彩色框。
每个 LOD 级别框中显示的百分比表示激活该级别的阈值。该阈值基于游戏对象的屏幕空间高度与屏幕总高度之比。例如,如果 LOD 1 的阈值设置为 50%,则当摄像机回拉得足够远,使得游戏对象的高度占视图的一半时,LOD 1 就会激活。
LOD 预览的播放头。可以来回拖动摄像机图标来测试 LOD 级别及其过渡。在播放头的底部,可以看到当前的百分比。
若要选择某个级别,请单击该级别框。对于所选的每个 LOD 级别,可以选择要使用的渲染器或自定义过渡区。
若要在选择条中添加和删除 LOD 级别,右键单击 LOD 级别框,然后从上下文菜单选择 Insert Before 或 Delete。
级别调整控件。若要更改 LOD 级别的百分比值,请拖动 LOD 级别框边界的左边框。
注意:如果 Lod Bias 属性未设置为 1,摄像机位置可能不匹配每个 LOD 级别过渡到下一级别的实际位置。在此情况下,选择条下方会显示一条警告消息。
在 LOD 组选择条上移动摄像机图标时,Scene 视图将显示 LOD 级别之间的过渡预览。摄像机图标充当播放头,可用于来回拖动以控制沿 LOD 组选择条预览的准确位置。预览会显示摄像机将在每个 LOD 级别渲染的内容。
LOD 预览播放头使沿 LOD 组选择条的准确位置显示为百分比(从左侧的 100% 到右侧的 0%)。该百分比表示游戏对象的屏幕空间高度与屏幕总高度之比。
在级别中移动时,Scene 视图显示树资源的包围盒,而覆盖层指示哪个 LOD 处于激活状态:
在 LOD 组选择条上选择 LOD 级别框时,将显示 Renderers 面板。
“Renderers”(渲染器)实际上是为此 LOD 级别保存网格的游戏对象。通常,这是具有 LODGroup 组件的游戏对象的子项。
若要为当前的 LOD 级别设置渲染器网格,请单击 Add 框,然后从对象选择器中选择该 LOD 级别的游戏对象。
可以为渲染器选择任何游戏对象,但是如果选择的游戏对象还不是子项,Unity 会提示您将其作为 LODGroup 游戏对象的子项。
LOD 级别之间的平滑过渡可以改善玩家的游戏体验。摄像机移近或移远时,您不希望玩家发现当前的 LOD 级别与下一个级别之间存在明显的切换痕迹(有时称为突现 (popping))。
平滑的过渡发生在过渡区内;在此区域中,Unity 分别渲染当前和下一个 LOD 级别,然后使两个级别一起交叉淡化。
交叉淡化 (Cross-fading) 是用于同时渲染两个级别的方法,其中,当前 LOD 级别的权重为 1 至 0,下一个 LOD 级别的权重为 0 至 1:
Unity 通常通过屏幕空间抖动或透明度来实现交叉淡化。对于上一个 LOD 级别,不会发生交叉淡化:当前级别只是淡出。
要在 LOD 级别上设置平滑过渡,请执行以下操作:
从下拉菜单中选择 Fade Mode,然后选择 Cross Fade:
注意:如果树资源是使用 SpeedTree 制作的,请选择 Speed Tree 模式。有关更多信息,请参阅使用 SpeedTree 模型。
默认情况下已启用 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 级别上的过渡区:
禁用 Animate Cross-fading 选项。
单击要设置的特定 LOD 级别框。
Fade Transition Width 属性显示在 LOD 组选择条之下。
设置 Fade Transition Width 属性,将交叉淡化过渡区的宽度定义为当前 LOD 级别整个长度的一个比例(0.0 与 1.0 之间)。例如,指定更小的值可延迟进行混合并创建更快的过渡。
SpeedTree 几何体存储每个顶点的下一个 LOD 位置。然后,每个顶点都知道如何在当前 LOD 位置与下一个 LOD 位置之间进行插值。Unity 导入在 SpeedTree 中创建的模型时,自动将这些模型设置为 Speed Tree 模式。
Unity 只需渲染当前 LOD 几何体并提供 0 到 1 之间的值,从而指示每个顶点逐渐移动到下一个 LOD 位置。在过渡结束时,当前 LOD 和下一个 LOD 的几何体完美匹配。
两个 LOD 级别之间的混合从 0 开始,到 1 结束。沿该区域的任何点都是混合因子 (blend factor),表示当前 LOD 级别与下一个 LOD 级别之间的权重:
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 命名约定的信息,请参阅细节级别。
Did you find this page useful? Please give it a rating:
Thanks for rating this page!
What kind of problem would you like to report?
Thanks for letting us know! This page has been marked for review based on your feedback.
If you have time, you can provide more information to help us fix the problem faster.
Provide more information
You've told us this page needs code samples. If you'd like to help us further, you could provide a code sample, or tell us about what kind of code sample you'd like to see:
You've told us there are code samples on this page which don't work. If you know how to fix it, or have something better we could use instead, please let us know:
You've told us there is information missing from this page. Please tell us more about what's missing:
You've told us there is incorrect information on this page. If you know what we should change to make it correct, please tell us:
You've told us this page has unclear or confusing information. Please tell us more about what you found unclear or confusing, or let us know how we could make it clearer:
You've told us there is a spelling or grammar error on this page. Please tell us what's wrong:
You've told us this page has a problem. Please tell us more about what's wrong:
Thank you for helping to make the Unity documentation better!
Your feedback has been submitted as a ticket for our documentation team to review.
We are not able to reply to every ticket submitted.