1.CPU
过多的drawCall 使用批处理技术来减少drawCall数目
复杂的脚本或者物理模拟
2.GPU
顶点处理 减少顶点数 优化几何体 使用Lod技术 使用遮挡剔除技术
过多的顶点
过多的逐顶点计算
片元处理
过多的片元
过多的逐片计算
优化方案;
减少需要处理的片元数目
控制绘制顺序
警惕透明问题
减少以实时的关照
4.带宽
使用了尺寸很大且未压缩的纹理
分辨率过高的帧缓存
优化方案:
减少纹理大小
利用分辨率缩放
动态批处理:
多pass回中断批处理
批处理注意事项:
尽可能用静态批处理,但随时要小心内存的消耗,并且经过静态批处理的物体不可以再被移动
如果无法静态,要动态批处理的话,小心上面提到的各种限制,列
静态批处理更占用内存空间
对于游戏里面的金币可以使用动态批处理
对于游戏里的动画,不能使用静态批处理
批处理需要把多个模型变换到世界空间再合并他们,如果shader中存在不一些基于模型空间下的坐标运算,那么往往会得到错误的结果
一个解决方案是使用DisableBatching标签来强制使用shader材质
16.5 减少需要处理的的片元数目减少overdraw
减低GPU瓶颈
overdraw指的是一个像素被绘制了多次
为了避免overdraw,重要的优化策略是控制绘制顺序
深度测试的原因,我们可以保证物体都是从前往后绘制的,就可以最大限度减少overdraw,因为在后面绘制的物体无法通过深度测试,因此不会再进行后面的渲染处理
渲染数目小于2500的对象被认为是不透明物体,绘制顺序是从前往后而其他的是从后往前的,意味着我们尽可能的把物体队列设置为不透明物体,尽量避免使用半透明队列
减少实时光照和阴影