1.控制渲染的顺序
overdraw 指的是同一像素被绘制了多次。为了最大限度地避免overdraw,一个重要的优化策略就是控制渲染的顺序。由于Z-深度测试的存在,如果我们可以保证物体都是从前往后渲染的,那么就可以很大程度上减少overdraw。这时因为,在后面绘制的物体由于无法通过深度测试,因此就不会进行后面的渲染处理。
在Unity中,渲染队列数目小于2500的对象都被认为是不透明的物体(如“Background”,“Geometry”,“AlphaTest”),这些物体是从前往后绘制的,而使用其他的队列(如“Transparent”,“Overlay”)的物体则是从后往前绘制的。这意味着,我们可以尽可能地把物体的队列设置为不透明物体的渲染队列,而尽量避免使用半透明队列。
2.注意GUI中的透明对象
对于半透对象来说,由于它们没有开启深度写入,因此,如果要得到正确的渲染效果,就必须从后往前渲染。这意味着,半透明物体几乎一定会造成overdraw。对于GUI对象来说,它们大多数被设置成了半透明的,如果屏幕中GUI占据的比例太多,而主摄像机又没有进行调整而投影整个屏幕,那么GUI就会造成大量overdraw。
对于GUI的这种情况,我们可以尽量减少窗口中GUI所占的面积。如果实在无能为力,我们可以把GUI的绘制和三维场景中的绘制交给不同的摄像机,而其中负责三维场景的摄像机的视角范围不要和GUI的相互重叠。
在移动平台上,透明度测试也会影响游戏性能。虽然透明度测试没有关闭深度写入,但由于它的实现使用了disc