优化Unity中DC

一、静态批处理

应用在那些一开始就不动的物体上,只需要在Inspector上吧Static勾选上就可以了。不允许移动和其他处理了。Unity会在一开始运行的时候将这些Static的网格物体变换到世界空间中只合并处理一次为更大的顶点和索引缓存,对于使用相同材质的物体,Unity只需要使用一个DC就可以绘制完成了。对于使用不同材质的物体也可以提升渲染性能,尽管需要调用多个DC,但是静态批处理可以减少这些DC之间的状态切换,往往这些状态的切换是很费时的。注意:静态批处理会占用更多的内存来存储合并的几何结构,如果一些物体共享了相同的网格,那么在内存中每一个物体都会对应一个该网格的复制品。

二、动态批处理

动态批处理是Unity自动进行的,如果需要使用静态批处理就需要满足一定的条件:需要使用相同的材质、网格的顶点属性规模要小于900(顶点位置、法线、纹理坐标),也就是顶点数目不要超过300,因为Unity使用动态批处理时需要每一帧的去将这些网格合并、多Pass的Shader会中断批处理,例如在直射光的前提下加多了一个Spot Light灯光,Shader会调用额外的Pass去叠加灯光效果。

三、Enable GPU Instancing

这是最新渲染api提供的一种技术,可以在材质上勾选它打开。如果绘制1000个物体,他将一个模型的vbo(顶点缓冲)提交给一次显卡,至于1000个物体不同的位置、状态、颜色等等将他们整合成一个per instance attribute的buffer给gpu,在显卡上区别绘制,它大大减少了提交次数,这对于需要绘制大量相同模型的物体来说非常高效同时避免了合批的内存浪费。


首页 我的博客
粤ICP备17103704号