优化的目的:是为了达到目标帧率,稳定运行时的帧率,同时确保目标画质。
优化是需要团队所有人一起,不是一个人能搞定的,不仅涉及美术方面,也涉及程序,技术等方面。
从项目初期开始就有明确的制作规范和明白优化方向挺重要的,如果可以的话。
CPU相关工作:Skinning,Batching,物理相关,脚本,粒子特效等;
GPU相关工作:Shader,Drawcalls,Image Effects等;
CPU和GPU是相辅相成的,不是各自独立的。如果CPU上的物理计算和运行脚本等要话很多很多的时间,那么GPU相关方面优化的再好,也不会提高帧率,反之同理。
如果GPU上Draw Call太高,那么可以在CPU相关方面做Batching优化来降低Draw Call,达到性能提升的目的。
CPU相关优化:
1:光照烘焙
使用光照贴图可以避免在游戏运行时进行实时的光照和阴影计算,提高游戏的运行性能,特别适合用于性能较弱的计算平台比如移动平台上。
使用Progressive Lightmapper(渐进式光照贴图烘焙)需要注意:
a:模型上不能有重叠的UV,可以用Generate Lightmap UVs来生成第二套UV,一套用于纹理贴图,一套用于光照贴图烘焙
b:UV之间要有足够的间距以避免“渗色”现象的发生。“渗色”的发生因为两块UV之间的间隔不足,导致一块UV上的颜色“渗透”到了相邻的UV上。
c:因为光照贴图只能烘焙静态物体,所以我们要把需要参与烘焙的物体标记为Static
2:Occlusion Culling(遮挡剔除)
使用Occluder Static 和 Occludee Static可以有效降低Draw Call的数量,在摄像机没有看到的区域,有很多没看到的GameObject会被隐藏。
3:Mesh Baker Free
这是一个很好用的工具,如果场景物件太过零散,例如我的建筑物都是通过零散的部件拼接而成,这会导致Batches数量很高,这时候就可以使用Mesh Baker来合并网格,注意不是要全部合并,而是按需合并,不然会导致无法做Occlusion Culling。
4:GPU Instancing
如果GameObject使用的是同一个网格,就算颜色不同,大小不同,都可以使用GPU Instancing来优化提高渲染性能,适用于建筑物,树林,草地和重复使用的模型。暂不支持Skinned Mesh Renderer
Unity的Batching优先级:Static Batching > GPU Instancing > Dynamic Batching
5:Texture Atlasing
记录下目前学到的CPU相关的性能优化,后续再补...
网友评论