一、顶点性能
通常来讲,若是您想在iPhone 3GS或更新的设备上每帧渲染不超过40,000可见点,那么对于一些配备 MBX GPU的旧设备(好比,原始的 iPhone,如 iPhone 3g和 iPod Touch第1和第2代)来讲,你应该保证每帧的渲染顶点在10000如下。
二、光照性能
像素的动态光照将对每一个受影响的像素增长显著的计算开销,并可能致使物体会被渲染屡次。为了不这种状况的发生,您应该避免对于任何单个物体都使用多个像素光照,并尽量地使用方向光。须要注意的是像素光源是一个渲染模式(Render Mode)设置为重要(Important)的光源。像素的动态光照将对顶点变换增长显著的开销。因此,应该尽可能避免任何给定的物体被多个光源同时照亮的状况。对于静态物体,采用烘焙光照方法则是更为有效的方法。
三、角色
每一个角色尽可能使用一个Skinned Mesh Renderer,这是由于当角色仅有一个 Skinned Mesh Renderer 时, Unity 会 使用可见性裁剪和包围体更新的方法来优化角色的运动,而这种优化只有在角色仅含有一个 Skinned Mesh Renderer 时才会启动。角色的面数通常不要超过1500,骨骼数量少于30就好,角色Material数量通常1~2个为最佳。
四、静态物体
对于静态物体定点数要求少于500,UV的取值范围不要超过(0,1)区间,这对于纹理的拼合优化颇有帮助。不要在静态物体上附加Animation组件,虽然加了对结果没什么影响,可是会增长CPU开销。
五、摄像机
将远平面设置成合适的距离,远平面过大会将一些没必要要的物体加入渲染,下降效率。另外咱们能够根据不一样的物体来设置摄像机的远裁剪平面。Unity 提供了能够根据不一样的layer 来设置不一样的 view distance ,因此咱们能够实现将物体进行分层,大物体层设置的可视距离大些,而小物体层能够设置地小些,另外,一些开销比较大的实体(如粒子系统)能够设置得更小些等等。
六、DrawCall
尽量地减小 Drawcall 的数量。 IOS 设备上建议不超过 100 。减小的方法主要有以下几种: Frustum Culling , Occlusion Culling , Texture Packing 。 Frustum Culling 是 Unity 内建的,咱们须要作的就是寻求一个合适的远裁剪平面; Occlusion Culling ,遮挡剔除, Unity 内嵌了 Umbra ,一个很是好 OC 库。但 Occlusion Culling 也并非放之四海而皆准的,有时候进行 OC 反而比不进行还要慢,建议在 OC 以前先肯定本身的场景是否适合利用 OC 来优化; Texture Packing ,或者叫 Texture Atlasing ,是将同种 shader 的纹理进行拼合,根据 Unity 的 static batching 的特性来减小 draw call 。建议使用,但也有弊端,那就是必定要将场景中距离相近的实体纹理进行拼合,不然,拼合后极可能会增长每帧渲染所需的纹理大小,加大内存带宽的负担。这也就是为何会出现“ DrawCall 降了,渲染速度也变慢了”的缘由。性能
上面是摘录内容,其中每一个角色的同骨骼数量限制为何要小于30呢?优化
根源来自于GLSL中顶点蒙皮时寄存器数量的限制,GLES寄存器数量为256,每一个寄存器能够存储一个VEC4向量,如今大多数GLSL做顶点蒙皮时是用32个矩阵来存储蒙皮矩阵的,也就是说骷髅数量不能超过32spa