我有很多精灵要渲染,并且想从推动该领域性能的人们那里获得任何反馈。
所以我按着色器和纹理排序。并在 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,但我认为问这个问题会很有用,看看我是否只是缺乏关于应该更快的格式塔。无论哪种方式,答案都可以在以后帮助其他认真的精灵/粒子实现者。