【发布时间】:2016-09-26 22:16:03
【问题描述】:
我们将 PIXI.js 用于内部使用 WebGL 进行渲染的游戏。时不时地,我会偶然发现避免 NPOT 纹理(https://developer.mozilla.org/en-US/docs/Web/API/WebGL_API/Tutorial/Using_textures_in_WebGL#Non_power-of-two_textures、https://github.com/pixijs/pixi.js/blob/master/src/core/textures/BaseTexture.js#L116)的二次幂和可能的性能优势。令人困惑的是,也有人提到它不再有影响(OpenGL - Power Of Two Textures)。随着 webgl 和浏览器的发展速度如此之快,很难判断这些信息中哪一个是准确的。
具体来说,我想知道填充图像以创建 POT 纹理的开销(更长的下载时间、增加的内存使用量)是否值得性能优势(如果它们确实存在的话)。我找不到任何比较 POT 和 NPOT 纹理的比较或性能基准,遗憾的是我真的不知道如何自己创建一个。
有没有人有这方面的经验或一些最新的数字?有没有衡量 webgl 性能的好方法?
【问题讨论】:
-
不了解性能,但 NPOT 纹理的主要问题是不支持 mipmapping 和重复。 POT(通常)允许在许多计算中进行优化。我也有一种感觉,GPU 可能会在内部将纹理填充到方形 POT 纹理(基于我所做的无关测试),但我不是 100% 对此。
-
如果任何现代 GPU 在 pot 和 npot 之间的性能差异,我真的会感到惊讶。我所说的现代是指过去 6 年多来的任何东西,包括手机。但我只是凭直觉。如果您想知道,您必须跨大量 GPU 进行测试。
-
@WacławJasper “我也感觉到 GPU 可能会在内部将纹理填充到方形 POT 纹理” 想象一下创建 RGBA8 16384 by 8193 纹理,将其填充到 POT 将导致约 1 GB 的内存使用量而不是约 536 MB,抓住您选择的 gpu 分析器并亲自查看。 Afaik 如果应用了填充,它总是在应用程序端完成,以在旧 GPU 上“填充”NPOT 纹理。
-
至于问题,我没有进行任何性能基准测试,但 afaik NPOT 纹理本身不应该变慢,但是根据场景,没有 mipmap 的渲染可能会慢很多。如果您发现需要将纹理优化为 POT,那么您可能希望在客户端上执行此操作以节省网络流量。
标签: performance webgl gpu pixi.js