Unity【LOD Group】- 关于性能优化中LOD的使用与总结

简介: Unity【LOD Group】- 关于性能优化中LOD的使用与总结

LOD是性能优化中常考虑的一项内容,本文分为以下部分介绍LOD的相关内容:

目录

一、什么是LOD

二、LOD如何使用

三、使用LOD的弊端

四、使用LOD的注意事项


一、什么是LOD:

LOD技术(level of detail)被称作多层次细节,它的原理是模型物体在场景中根据距离相机的远近来显示不同细节程度的模型,距离渐近时,显示细节程度较高的模型,距离渐远时,显示细节程度较低的模型,从而节省性能的开销。

二、LOD如何使用:

Unity中通过LOD Group组件来实现LOD,如图所示的集装箱模型,我们准备了四个不同细节程度的Mesh网格:

image.gif

image.gif

新建一个空物体,添加LOD Group组件,默认是分为3个层次,最后的Culled层是指的剔除层,不会渲染任何模型:

image.gif

这里我们需要四个层次,通过选中一个层次右键/Insert Before插入一个:

image.gif

通过Add来添加不同层次要渲染的Mesh网格:

image.gif

添加完成后在场景中进行预览:

image.gif

除了在Inspector检视面板设置LOD外,在代码中也可以进行设置,LOD Group类中提供了SetLODs函数:

//
// 摘要:
//     Set the LODs for the LOD group. This will remove any existing LODs configured
//     on the LODGroup.
//
// 参数:
//   lods:
//     The LODs to use for this group.
[MethodImpl(MethodImplOptions.InternalCall)]
[FreeFunction("SetLODs_Binding", HasExplicitThis = true)]
public extern void SetLODs(LOD[] lods);

image.gif

测试代码:

using UnityEngine;
public class LODExample : MonoBehaviour
{
    private void Start()
    {
        LODGroup group = gameObject.AddComponent<LODGroup>();
        LOD[] lods = new LOD[4];
        for (int i = 0; i < lods.Length; i++)
        {
            lods[i] = new LOD(1 - (i + 1) * .2f, new Renderer[] { transform.GetChild(i).GetComponent<Renderer>() });
        }
        group.SetLODs(lods);
        group.RecalculateBounds();
    }
}

image.gif

三、使用LOD的弊端

弊端也是显而易见的,首先是增加建模同事的工作量,要准备不同细节程度的模型,当然有很多自动减面的插件,例如资源商店中的Mesh Simplify插件,但是程序减面多多少少会破坏模型的原有外观,最理想的情况还是建模人员手动减面。另外,大量的模型文件不但会增加包体的大小,而且在运行时会大量增加内存消耗,因此对于LOD有一句空间换取时间的评价,当然最终是否采用LOD技术要根据具体情况而定,性能优化无非是CPU、GPU与内存之间的取舍。

image.gif

image.gif

四、使用LOD的注意事项:

只有最高层次细节的模型才会参与静态光照的烘焙,如图所示,当集装箱物体上的LOD0过渡到LOD1时会变黑,因为LOD1没有参与静态光照烘焙。

image.gif

如果我们希望细节程度较低的模型看起来也正常,需要在周围放置Light Probe Group 即光照探针,以获取烘焙过程中的间接光照。

具体可以参考官方文档:https://docs.unity.cn/2017.2/Documentation/Manual/LODForBakedGI.html

目录
相关文章
|
图形学
unity之Layout Group居中显示
unity实现Layout Group居中显示
unity之Layout Group居中显示
|
存储 设计模式 缓存
Unity面试题——Unity性能优化
Unity面试题——Unity性能优化
327 0
|
测试技术 开发工具 Android开发
|
atlas C# 图形学
Unity3D性能优化-图集制作插件TexturePacker中文教程
本文提供全流程,中文翻译。Chinar Unity图集制作插件-TexturePacker图文教程 学习如何使用 TexturePacker 为 Unity 制作图集 为新手节省宝贵的时间,避免采坑! 简单说就是:将大量的小图,合并到一张大图上,可以有效的降低 Drawcall 1.
6085 0
|
图形学
Unity 优化之 动画系统性能优化方案【2017年版】
首先感谢UWA的公开课讲解,本文中的内容主要采集于UWA2017的公开课公开课中的优化点对于项目的帮助是不容小觑的~ 去年整理的直接上传了,都是相关视频的PPT的截图 ...
1113 0
|
图形学
unity ugui Toggle Group详解(Chinar出品、简单易懂)
UGUI Toggle Group用法教程 本文提供全流程,中文翻译。 Chinar 坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 —— 高分辨率用户请根据需求调整网页缩放比例) Chi...
3185 0