一、明晰概念
LOD:多细节层次,是最常用的游戏优化技术。通过精度不同建模,在镜头离该物体近的时候使用精度高的建模展示细节,在镜头离得远的时候放上精度较低的建模来加快整体场景的渲染速度。即根据摄像机与物体距离,Unity会自动切换模型,从而达到性能优化的目的。
优缺点:
高效率优化GPU,但是因为同一套模型需要准备多个(高中低)模型,所以内存占用会增多,相当于用内存换取减轻GPU性能负担,提高GPU效率,从而达到一个高效率的渲染效果。
二、实战应用
1、快速学会基础配置。
1.1
严格设定命名规则
,为了统一管理资源和识别使用,模型名称高中低:_LOD0、_LOD1、_LOD2,Culled(模型在场景消失),数字序号最低,复杂程度越高。
1.2
设置层次细节组
,定义一个空对象,添加LODGroup组件。
1.3
拖拽不同精度的模型在LODGroup组件对应级别上
(高精度:LOD0(相机最近显示)、中精度:LOD1、低精度:LOD2)

2、Project Settings中与LOD组件相关参数。

LOD Bias
:LOD的偏移值,预先设置的【LOD百分⽐】 / Lod Bias = 当前LOD的百分⽐,当设置⼀个最⾼效果,如果Lod Bias数值越⼤时,那么【LOD百分⽐】越⼩,此时兼容的物体越远,这时细节不变。在真实的环境中这样理解,在⾼配置机器上,设置了⾼画质,并设置对应的Lod Bias⾮常⼤,那么物体的细节就不会根据摄像机距离进⾏变化,反之设置低配置时,Lod Bias设置越⼩,那么细节变化就会⾮常明显。
Maximum LOD Level
:最大LOD级别,表示游戏中使用的最高LOD级别。在该级别以上的模型不会被使用,并且在编译时忽略。(这将节省存储空间和内存空间)。
3、学会在Unity Shader中设置LOD。
Shader会有一个LOD值,每个SubShader有一个LOD值,当SubShader的LOD值小于此Shader的LOD值时,SubShader才能工作。默认情况下一个Shader允许的LOD层级是无限大的,也就是只要硬件支持的Shader就可以工作。并且也可以利用Shader的细节表现提升游戏的性能。
(1)Shader的LOD可以使用Shader.maximumLOD来控制单独的Shader,也可以使Shader.globalMaximumLOD控制全局所有的Shader。
(2)在SubShader中可以使用LOD命令指定不同的LOD属性,所以可以通过代码动态修改某一个Shader的LOD(注意:当游戏运行修改Shader LOD,结束游戏后保存Shader在LOD中,所以我们在游戏修改就是引用实际的Shader 资源,并且当Shader代码被修改重新编译,LOD值也会被重置)
ShaderLad为子着色器指定LOD值:
https://docs.unity3d.com/cn/current/Manual/SL-ShaderLOD.html

4、参数 Fade Mode(淡化模式)

三、LOD 优化策略
我们都知道一套好的LOD系统需要美术在资源上做大量的资源分级工作,同时需要程序搭建完善的LOD框架和辅助工具,每增加一个功能模块都需要把LOD考虑进来。并且在一般情况,我们还需要根据手机机型的不同采用不同的渲染LOD。如安卓系统低端机上使用更为简单的材质,从而来降低低端设备的GPU压力。
基础LOD使用原则:
1、高精度复杂物体(面数高、顶点数高)需应用LOD。
2、远景物件适用。
3、大面积重复的物体适用。
确定项目的LOD分档,细节模块分级:

四、三方资源优秀分享
1、按需制作LOD(自动生成LOD插件:Poly Few、Mantis LOD Editor、Ultimate LOD System MT)
2、自动生成LOD插件 AutoLod:
https://assetstore.unity.com/packages/tools/utilities/autolod-impostors-199759
3、自动生成LOD插件(Github):
https://github.com/manaporkun/Automatic-LOD-Generator
4、自动减面工具:
https://github.com/huailiang/lod
5、草、树(地形)Lod生成:
https://github.com/Tiggilyboo/UnityQuadTreePlanet
6、在Unity3D中加载Max3D文件:
https://github.com/ProjSEED/Unity-3mx