我们在各类优化建议中都会看到各类专家建议我们按照深度进行排序,由近到远绘制减少overdraw,那么深度排序到底有没有收益呢,针对这个疑问我们特进行以下测试。时间紧张可以直接看结论。

 

结论:

1. 针对不透明物件的渲染,在adreno 5xx之前的GPU上,根据深度排序是有意义的。确实可以减少overdraw;在adreno 5xx之后的GPU包括现有市面上绝大多数mali GPU和powerVR GPU,根据深度排序是没有意义的,建议根据材质排序或者根据LOD级别排序,这样能够减少overdraw。

2.不透明和半透明物件交叉渲染,在adren5xx之后的GPU上与不透明物件的渲染没有差异,在mali GPU上不透明和半透明物体交叉渲染对于性能的影响非常大。建议游戏的排序方式是不透明物体->AlphaTest物体->AlphaBlend物体,不透明物体使用材质排序,AlphaTest物体随机排序,如果使用了PreZ渲染了近处AlphaTest物件的深度。建议AlphaTest物体从近到远进行排序,或者根据Lod级别来排序,先渲染Lod0级别的植被,再渲染Lod1级别的植被。这样能够减少AlphaTest植被物体的OverDraw。

  • 不透明物体的排序

测试流程:如下图构建一个场景,里面含有两个球体。红色球体用了一个极其复杂的Fragment shader来渲染,单独渲染时帧率在5帧左右,白色球体使用一个简单的Fragment shader来渲染。测试时,摄像机正对两个球体,红色球体完全被白色球体遮挡,调整这两个球体的渲染顺序,看帧率是否有变化。

 

Mali gpu mali gpu排行_Mali gpu

测试结果:

机型

OppoA59s(MaliT860)

小米4(Adreno330)

note3(Adreno660)

从前往后排序帧率

60帧

60帧

60帧

从后往前排序帧率

60帧

5帧

60帧

 

结果分析:

MaliGPU:不透明物体的排序顺序对于Mali GPU性能没有影响,都能够达到60帧。说明不管怎么排序,Mali GPU都能把红色球体的Fragment给完全剔除掉。主要原因是从MaliT62X系列开始,Mali GPU包含了一项像素提前终止的技术(Forward Pixel Kill),在具备 FPK 功能的 GPU 中,为像素上色的线程并不是一旦启动就必定要完成。如果发现后续线程将向同一像素位置写入不透明数据,GPU可以在任何时候终止已在进行的计算。由于完成每个线程的时间都是确定的,就有一个窗口期可以用来消除管线中已存在的像素。

官网说明:https://community.arm.com/cn/b/blog/posts/mali-1298113517

Mali gpu mali gpu排行_adreno _02

通过测试结果来看,确实印证了FPK功能的存在。

Adreno GPU:通过测试数据可以看出在Adreno330 GPU上从后往前渲染时,GPU并没有剔除掉红色球体的Fragment。而在Adreno660上,有和Mali GPU相同的效果,说明Adreno6系列的GPU也存在类似Mali FPK相同的技术,在外部网站上没有搜索到Adreno类似技术的说明。对于这个问题咨询过高通那边,确认高通在Adreno5系列之后也加入了类似Mali FPK的功能LRZ。所以说对于高通GPU来说,5系列之前的GPU从前往后排序是能提升性能的,但是5系列之后,前后顺序是没有影响的。

 

  • AlphaTest对于排序影响

 

测试流程:如下图构建一个场景,在之前的场景里增加一个使用AlphaTest材质渲染的面片。分别调整AlphaTest在场景中的渲染顺序,来测试AlphaTest物体对于GPU EarlyZ和FPK功能的影响。

Mali gpu mali gpu排行_adreno _03

 

测试结果:

机型

OppoA59s(MaliT860)

小米4(Adreno330)

note3(Adreno660)

AlphaTest最后渲染

60帧

5帧

60帧

AlphaTest中间渲染

5帧

5帧

60帧

结果分析:

Mali GPU:Alpha Test物体的渲染顺序会影响FPK功能,如果放在不透明物体中间渲染,会打断FPK流程,导致红色球体的Fragment没有被剔除掉。如果放在最后渲染,FPK流程则不会被打断。

Adreno GPU:对于330型号GPU,由于没有类似FPK的功能,所以AlphaTest物体不管是在最后还是在中间渲染,红色球体的Fragment都不会被剔除掉。但是在660型号上,不管是在中间还是最后渲染,都能达到60帧,说明在高通660 GPU上AlphaTest不会打断FPK功能。在这一点上,高通GPU比Mali功能更为强大。