我有很多精灵需要渲染,想从那些在这方面推进性能的人那里获得任何反馈。
所以我按着着色器和纹理进行分类。并将具有相同渲染设置的精灵批处理到VBO中以发送给着色器进行渲染。这些都是正常的事情。我的所有精灵都是正方形的,并且都具有相同的基本数据:中心位置(P),方向(O),缩放(S),RGB颜色(Col)和全局不透明度(Alpha)。我必须在CPU代码中更新位置和方向,(尽管大约50%的精灵在任何给定帧对之间不会改变),而缩放、颜色和不透明度几乎永远不会更改,但实际上并非从不。
我不能假设有几何着色器(我将支持它们,但在这种情况下问题是无意义的)。
我应该:
当我更新精灵位置时,在CPU上计算顶点位置。使顶点着色器成为简单的转换步骤。(优点是每帧要更新的数据量显著减少,但CPU必须执行大量三角函数运算)。
将POS数据作为附加数据复制到VBO中的4个顶点,然后使顶点位置成为简单的偏移量(-1,-1; -1,1; 1,1; 1,-1),并在着色器中执行三角函数运算。(优点是GPU执行更多计算,但每个顶点有5个额外的数据字)。
不明显哪种方法更好,因此需要对两种方法进行分析以查看发生了什么。
显然我可以选择3,但我认为询问这个问题可能有用,以便确定哪种方法更快。无论哪种方式,答案都可以帮助其他严肃的精灵/粒子实现者。