Unity 网格的细节级别 (LOD) 学习
Unity LOD学习
文档
网格的细节级别 (LOD)
https://docs.unity.cn/cn/2020.3/Manual/LevelOfDetail.html
在项目中使用
自动设置导入
文档:
https://docs.unity.cn/cn/2020.3/Manual/importing-lod-meshes.html
可以在外部 3D 应用程序中创建具有不同细节级别的网格以便用于 Unity 的 LOD 系统。如果正确命名了这些网格,则 Unity 在导入模型时会自动为这些网格创建游戏对象并配置 LOD Group 组件。
命名规范:
ExampleMeshName_LOD0 表示第一个 LOD 级别(即细节化程度最高的版本)
ExampleMeshName_LOD1
ExampleMeshName_LOD2
然后将BoxLODGroup导入为fbx,在unity中会自动创建LODGroup
直接使用,不导入让unity自行设置
-
创建一个空物体,并添加LOD Group组件
-
设置LOD,
设置模型为LOD Group的子物体,如果不设置就没有用辣~
-
设置完成,
-
设置其他的距离
-
设置完成
界面介绍
建议之间看Unity文档:
https://docs.unity.cn/cn/2020.3/Manual/class-LODGroup.html#transitions
原理
细节级别 (LOD) 是一种减少 Unity 渲染远距离网格所需的 GPU 操作数量的技术。
当场景中的某个游戏对象距离摄像机很远时,与距离摄像机很近的游戏对象相比,可以看到的细节将会减少。但默认情况下,Unity 会使用相同数量的三角形来渲染两个远近不同距离的游戏对象。这可能会浪费 GPU 运算资源,从而影响场景中的性能。
LOD 技术允许 Unity 根据与摄像机的距离来相应减少为游戏对象渲染的三角形数量。 要使用此技术,游戏对象必须具有大量网格,这些网格的几何体的细节级别逐渐降低。
这些网格称为 LOD 级别。游戏对象离摄像机越远,Unity 渲染的 LOD 细节级别越低。此技术减轻了这些远处游戏对象给硬件带来的负担,因此可以提高渲染性能。
LOD 级别是一个网格,用于定义 Unity 为游戏对象的几何体渲染的细节级别。当游戏对象使用 LOD 时,Unity 将根据游戏对象与摄像机的距离来显示该游戏对象的相应 LOD 级别。
每个 LOD 级别都存在于单独的游戏对象中,每个游戏对象都有一个显示该 LOD 级别的 Mesh Renderer 组件。对于最低级别的细节,可以使用公告牌资源 (Billboard Asset),这种情况下 Unity 将显示公告牌资源而不是 3D 网格。Unity 根据需要显示和隐藏这些游戏对象。LOD 级别必须是相关的游戏对象的子游戏对象。
注意点
要使用此技术,游戏对象必须具有大量网格,这些网格的几何体的细节级别逐渐降低。`
当游戏对象使用 LOD 时,Unity 将根据游戏对象与摄像机的距离来显示该游戏对象的相应 LOD 级别。
LOD 级别必须是相关的游戏对象的子游戏对象。
与脚本的交互
在不显示对应LOD的时候物体上的脚本是否会运行?
现在LOD级别是3,我在LOD1级别上挂载脚本,是否可以运行?
LOD 1 的脚本会运行,且OnEnable 和OnDisable 在切换LOD的时候不会再次执行。
using UnityEngine;
public class NewBehaviourScript : MonoBehaviour
{
private void OnEnable()
{
Debug.Log("OnEnable:" + gameObject.name);
}
private void Update()
{
Debug.Log("Update:" + gameObject.activeSelf + "__" + gameObject.name);
}
private void OnDisable()
{
Debug.Log("OnDisable:" + gameObject.name);
}
}