现代 WebGL 的二次纹理性能优势

mar*_*tur 5 performance gpu webgl pixi.js

我们将 PIXI.js 用于内部使用 WebGL 进行渲染的游戏。我时不时地会遇到提到避免 NPOT 纹理的二次幂和可能的性能优势(https://developer.mozilla.org/en-US/docs/Web/API/WebGL_API/Tutorial/Using_textures_in_WebGL #Non_power-of-two_textureshttps://github.com/pixijs/pixi.js/blob/master/src/core/textures/BaseTexture.js#L116)。令人困惑的是,也有人提到它不再有什么不同(OpenGL - Power Of Two Textures)。随着 webgl 和浏览器的发展如此之快,很难判断这些信息中哪些是准确的。

具体来说,我想知道填充图像以创建 POT 纹理的开销(更长的下载时间,增加的内存使用量)是否值得性能优势(如果它们确实存在)。我找不到任何比较 POT 与 NPOT 纹理的比较或性能基准,遗憾的是我真的不知道如何自己创建一个。

有没有人有这方面的经验或一些最新的数字?有没有一种衡量 webgl 性能的好方法?

Wac*_*per 3

我认为您将得到的大多数答案是“取决于硬件/驱动程序/GPU”,“您必须自己测试”或“它不会慢很多(但需要注意的是,您必须在所有 GPU 上进行测试才能使当然)”。

与其担心将图像填充到 POT,不如使用纹理别名(精灵表)。或者要求 Pixi 背后的人来实现它。通过使用具有 POT 尺寸的纹理别名,您确实可以两全其美:最小化填充浪费,保证 POT 纹理的执行速度不会于 NPOT 纹理,减少 GL 状态变化。

我无法强调通过减少 GL 状态变化可以获得多大的改进。通过实现纹理锯齿和绘制批处理,我基本上可以根据现实环境中的需要绘制尽可能多的 2D 精灵;即以 60fps 的速度移动、旋转和调整精灵大小的约 150k(受 CPU 约束,每帧计算每个精灵的新变换)

  • 它被称为纹理**ATLAS**而不是**别名** (4认同)