CocosCreator游戏性能优化(3):GPU优化之降低计算分辨率

本文从降低计算或设计分辨率来分如何提升性能, 仅提供一些可参考的思路。

本文链接  CocosCreator游戏性能优化(3):GPU优化之降低计算分辨率

相关链接  CocosCreator游戏性能优化(1):性能分析工具

                 CocosCreator游戏性能优化(2):合批渲染之RenderToTarget

一、降低计算分辨率

GPU的Fragment Shader即片元着色器程序在执行的时候,会并行每个像素(严格定义是光栅化后的每个片元,也即resolution)都执行一次。

此时主要的性能小号取决于两方面:

1、片元着色器程序内部逻辑的复杂度和计算量。

2、需要执行的片元数量。

现在我们从削减片元数量的角度来提升性能

假设我们的图片TextureA。应用了ShaderA。

TextureA的宽高分别是1920和1080。

此时我们的片元着色器程序执行次数calcCount = 1920*1080 = 2,073,600次。即200万次。

这在很多普通机器上是可能存在性能问题的,即便shader逻辑不复杂。

因此我们TextureA的宽高减半, 传入片元着色器程序。计算后的calcCount = 960*540= 518,400次。即50万次。

执行完shader后通过线性拉伸来使用该处理过后地textureA,如下。

TextureB = TextureA;

TextureB.scale = 2;

我们发现计算量降低为原来的1/4,而图的精度值仅降低了1/2.

因此,我们我们在对图的渲染精度要求不高或不需要的情况下,应尽可能地降低其计算分辨率,来提升性能。

通过上述分析启发,我们做游戏时,最初在决定设计分辨率的时候,应该预先考虑到这个问题。

二、降低RenderTexture分辨率

        在使用GPU渲染到纹理时,可以尽量减小目标纹理分辨率。使片元数量降低,从而降低计算量。

        离屏渲染,和目标FrameBuffer分辨率有关。如果目标纹理分辨率能够降低,那么游戏中大部分对象的分辨率都会比较低,因而会带来非常可观的性能效率提升。

        最后将RenderTexture传入节点进行scale拉伸,得到我们需要的实际显示效果。


本文链接    CocosCreator游戏性能优化(3):GPU优化之降低计算分辨率

相关链接    CocosCreator游戏性能优化(1):性能分析工具

                   CocosCreator游戏性能优化(2):合批渲染之RenderToTarget

你可能感兴趣的:(CocosCreator游戏性能优化(3):GPU优化之降低计算分辨率)