Unity优化前言
为什么需要大量优化?
Unity可以跨平台的一个主要原因就是:内置的mono虚拟机。
但是mono虚拟机太大,我们需要大量的优化来让程序占更少的内存,运行更加流畅。
DrawCall是什么?
CPU通过图形库接口,命令GPU进行渲染操作。
一次调用就是一次DrawCall。
1、Occlusion Culling 遮挡剔除
遮挡剔除是什么?
当游戏的场景中有大量的游戏物体时,肯定会增加渲染的负担。但是在游戏中玩家的视角是只能看一部分的,那么我们就可以只渲染的玩家视角中的物体,不渲染被遮挡的物体。
遮挡剔除的原理?
该技术的基本原理是在场景空间中创建一个遮挡区域,该遮挡区域由单元格(Cell)组成,每个单元格构成了整个场景的遮挡区域的一部分,这些单元格会把整个场景拆分成多个部分。
当摄像机能够看到该单元格时,表示该单元格中的物体会被渲染出来,而被其他单元格挡住的不被摄像机看到的单元格中的物体将不会被渲染。
遮挡剔除的简单使用
1. 对需要设置的物体面板Static属性设置为Occlusion Static。
2. Window-Occlusion->烘焙并选择摄像机
3. 这样我们的摄像机视角移动时候,就只会渲染在视角内的物体。
2、LOD 层级细节
层级细节是什么?
让物体根据玩家视野的远近渲染不同精度效果。摄像机近时渲染精细的物体,远时渲染粗糙的物体。
层级细节简单使用
1. 准备三份同物体不同精度的渲染模型。
2. 创建一个空物体添加组件LOD Group,用这三个模型赋值。
3. 拖拽相机远近,就可看出效果。
3、Lightmapping 光照贴图
光照贴图是什么?
当我们场景内大量添加灯光时,实时的灯光渲染会消耗大量性能,手机基本都带不动。光照贴图效果相当于把灯光在物体上产生的效果做成一个贴图,贴在物体上。
光照贴图简单使用
1. 把灯光设置为Baked
2. 要烘培的物体设置为Lightmap Static
3. 在全局Lighting设置中取消自动生成。点击生成。