本文从降低计算或设计分辨率来分如何提升性能, 仅提供一些可参考的思路。
本文链接 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优化之降低计算分辨率