Unity3D客户端项目优化总结之LOD

Unity3D客户端项目优化总结之LOD

2020年7月19日 0 作者 老王

1.LOD的概念

LOD的全称是Level Of Detail,多层次细节。其工作原理很简单,其实就是同一个模型按照不同精度多做几份,然后根据摄像机的远近来选择渲染哪一个模型;摄像机距离近时用精度高的模型,距离远时用精度低的模型,距离更远时直接不渲染这个模型了。和贴图的Mip Map类似,仍然是用空间换时间。

2.Unity中如何使用LOD

2.1 项目准备

温馨提示:本文的素材和项目文末有链接哟。
在3ds max中制作3个不同精度的球体,分段数分别选为200、100、25,模型如下:
不同精度球体
注意,3dmax中网格的命名和Unity中LOD的物体都建议以_LOD0,_LOD1,_LOD2为后缀。
以_LOD为后缀命名网格
然后导入到Unity,将3个模型拖拽到场景中,设置不同颜色的材质球,将scene场景的线框模式打开可观察到模型的网格。
场景准备
在实际项目中,模型优化了,相应的贴图也要缩小,具体操作参考这篇文章

2.2 Unity中使用LOD

2.2.1 基本使用

Unity中使用LOD其实很简单,就一个组件LOD Group,位于Component-->Rendering-->LOD Group。
操作步骤如下:
①创建个空物体,重命名,然后添加LOD Group组件
LOD Group足迹基本使用
②指定各LOD等级的模型
指定LOD各等级模型步骤
指定完毕后的场景如下,一定要记得将各个LOD物体归位到同一个位置。
指定完毕LOD各层次细节的场景
拖动LODGroup组件上的相机预览效果。
LODGroup效果

2.2.2 结合Statistics面板查看性能

运行场景,然后手动拖拽相机坐标轴z轴,观察实际渲染的顶点数和三角面数,测试结果如下。可以看到效果还是很明显的。
LOD执行效果

2.2.3 其他参数

①LOD Group组件其他参数
Fade Mode:各LOD之间切换的动画效果
其他参数
②Edit Quality中与LOD相关的参数
LOD Bias

  • 执行unity编辑器菜单:Edit > Project Settings > Quality,会打开Quality Setting窗口

  • 参考 : 官方文档 Quality Setting

  • LOD Bias主要控制根据物体才屏幕中的百分比来控制LOD的变化,表现用大白话描述即是:如果该值小那么,摄像机离物体距离稍微有些变化,不同细节物体即会切换,该值大,那么摄像机需要与物体有很大的距离才会切换。

  • 目的:就是控制整个场景的细节。当应用运行的平台比较好,会倾向使用较高级别的画质,这时就把离摄像机虽然很远(相对来说)的物体也让他以好的级别渲染,这样整体画质更好;反之,设备较差,那么,会希望离摄像机最近时才展示最好级别的物体对象,具体稍微远(相对来说)立马切换成稍差级别的物体。这样在整体画质级别不变的情况下,保持流畅。
    原文链接

Maximum LOD Level
使用的最高等级的模型,默认为0,若设为1,则相机的距离即使在LOD0的范围内也将使用LOD1的模型,不使用LOD0

2.3 几个注意事项

2.3.1 LOD与脚本的问题

从上面我们知道,一个挂载有LOD Group组件的物体,其下面有几个不同精度的子物体,那么问题来了,在实际项目中我们去控制该物体时,脚本应该持有哪一个物体?是LOD Group那个空物体,还是子物体?
答案是LOD Group那个空物体。
原因有二:
①是如果脚本挂载到子物体上,即使该物体没渲染,其脚本仍然在执行。比如说,我们给每个子物都挂载有一个相同的Monobehaviour脚本,即使现在只有LOD1的物体显示,但LOD0和LOD2上的脚本的update仍然在执行。也就是说LOD 控制的状态模型, 并不是我们传统意义上的“隐藏游戏物体” , 而是类似于 Layer 渲染层的概念。
②是隔得远的物体咱们其实不是很care的,所以大部分时间是在操控LOD0那个物体,所以我们只需把脚本挂载到LOD Group那个父物体上,然后去持有LOD0的子物体的组件(比如动画控制器)就行了。

2.3.2 刚体和碰撞体

刚体和碰撞体放在哪个物体上?最好还是挂载到有LOD Group的物体上。

2.3.3 何时使用LOD

摄像机与模型之间能拉开一定距离的项目, 才可以使用 LOD 组件。

大场景, 第一人称或者过肩式第三人称射击游戏, VR 类项目, 摄像机水平视野20~50 米的范围内能看到场景模型。 比如: 一款射击游戏,
30 米远的位置有一座大房子, 房子周围有一堆垃圾桶, 汽车,桌子, 椅子等等小的模型, 这些小的模型就可以使用 LOD 组件,
玩家角色在30 米远的位置看, 只需要看到一个最简模的汽车就够了。 上帝视角观看场景的游戏就不适合使用 LOD 组件,
因为摄像机和模型之间的距离几乎是不变的。

3 参考文章

项目放在这儿了,提取码: opsp。