POINT_SPRITES 或 TRIANGLES 应该用于大四边形
Should POINT_SPRITES or TRIANGLES be used for big quads
我现在很苦恼,我有一个粒子系统,它有大约 500 个没有旋转的粒子,每个粒子的大小可以大到 100 像素,我用两种不同的绘制方式进行了测试,首先通过使用点精灵,然后通过使用 4 个顶点和 6 个索引来制作四边形,我测试了两者但我在我的机器上获得了几乎相同的性能。
我读过一些 GPU 中的大点精灵实际上被转换为三角形,这很慢,所以最好从一开始就将它们绘制为三角形,但这不应该意味着您有更多数据可以推送到 GPU 吗?
每个点使用的浮点数:
- 点精灵:4(x,y,size,color)
- 三角形四边形:(16(x,y,color,textureCoords)*4)+6(index)=22
所以问题是我是否应该注意在设置菜单中放置一个选项,用户可以在其中切换这两个选项,以防他的 gpu 更擅长直接绘制三角形或点精灵?
理论上点精灵应该更快,但也有一些缺点。
您的粒子可能会很大,点精灵会在其中心坐标处被裁剪。
最好的选择是使用实例化渲染,但它在 OpenGL ES 2 中不可用。
关于点精灵和粒子系统有一个很好的答案 -
我现在很苦恼,我有一个粒子系统,它有大约 500 个没有旋转的粒子,每个粒子的大小可以大到 100 像素,我用两种不同的绘制方式进行了测试,首先通过使用点精灵,然后通过使用 4 个顶点和 6 个索引来制作四边形,我测试了两者但我在我的机器上获得了几乎相同的性能。 我读过一些 GPU 中的大点精灵实际上被转换为三角形,这很慢,所以最好从一开始就将它们绘制为三角形,但这不应该意味着您有更多数据可以推送到 GPU 吗?
每个点使用的浮点数:
- 点精灵:4(x,y,size,color)
- 三角形四边形:(16(x,y,color,textureCoords)*4)+6(index)=22
所以问题是我是否应该注意在设置菜单中放置一个选项,用户可以在其中切换这两个选项,以防他的 gpu 更擅长直接绘制三角形或点精灵?
理论上点精灵应该更快,但也有一些缺点。
您的粒子可能会很大,点精灵会在其中心坐标处被裁剪。
最好的选择是使用实例化渲染,但它在 OpenGL ES 2 中不可用。
关于点精灵和粒子系统有一个很好的答案 -