unity优化之项目优化策略

1.Draw Call

原理:一个模型的数据经过CPU传输到GPU,并命令GPU进行绘制,称为一个DrawCall

降低Draw Call的原理:基于DrawCall 是CPU调用底层图形接口,主要工作量就是尽量减少CPU在调用图形接口上的开销而努力。

降低Draw Call的思路:每个游戏对象尽量减少渲染的次数,多个游戏对象尽量一起渲染

降低Draw Call的主要途径:

(1):Draw Call 批处理技术(DrawCall Batching)

核心:在可见性测试之后,检查所有要绘制的对象材质,把相同材质分为一组,然后把它们组合成一个对象,这样一次Draw Call就可以处理对个对象

动态批处理:完全自动进行

静态批处理:需要指出哪些是静态的,再属性窗口中将“Static”复选框勾选

(2):使用图集(Texture Packing或者Texture Atlasing)减少材质的使用

尽量减少场景中使用的材质数量,尽量共享材质,对于仅纹理不同的材质,可以把纹理组合到一张更大的纹理中(称为图集Texture Packing 或者Texture Atlasing),然后把不会移动的物体标记为“Static”

(3):尽量减少使用反光,阴影,因为那会使物体多次渲染

(4):视锥体合理剪辑(FrustumCulling )

  视锥体合理剪辑是Unity内建的功能,一般来说,对于大型场景中的大量游戏对象进行合理的分层,对于大型建筑物使用较大裁剪距离,而对于小游戏对象可以使用较小裁剪距离,场景中的粒子系统等可以使用更小的裁剪距离

(5)遮挡剔除方法

(6)网格渲染器

  只有处于摄像机视锥体内,且添加了网格渲染器(Mesh Renderer)组件的对象才会产生渲染的开销,其他不产生,这样我们可以对暂时无需显示的游戏对象通过脚本的方式进行控制,不进行渲染,需要的时候再渲染即可

(7)减少游戏对象的缩放

  统一缩放的对象不会与非统一缩放的对象进行批处理

(8)减少多通道Shader的使用

  多通道的Shader会妨碍批处理操作:几乎Unity中所有的着色器在前向渲染中都支持多个光源,因为它们开辟多个通道,所以对批处理有影响

(9)脚本访问材质的方法

  如果需要脚本访问复用材质属性,如使用Renderer.material改变贴图,则将会造成一份材质。因此一般使用Renderer.ShaderMaterial来保证材质的共享状态

(10)尽量多使用预设

  使用预设生成的对象会自动的使用相同的网格模型和材质,因此会自动被批处理

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章