【问题标题】:for opengl (webgl) is png or jpeg the most suitable file format?对于 opengl (webgl) 是 png 还是 jpeg 最合适的文件格式?
【发布时间】:2014-10-23 00:43:51
【问题描述】:

在纹理的 opengl(更具体地说是 webgl)上,jpeg 和 png 之间的哪种格式被推荐在运行时渲染时更有效?我知道 jpeg 可能比 PNG 小,但也许解码成本更高,或者其他。

【问题讨论】:

  • 两者根本不能完全互换。 PNG 是无损的,JPEG 不是。
  • OpenGL 对纹理格式一无所知。这只是加载图片的问题。

标签: opengl-es format webgl image-formats


【解决方案1】:

解码 JPEG 的速度非常快,您需要使用数千(或数百个,如果您在移动设备上)高分辨率 JPEG 才能看到对性能的重大影响。 由于您的平台是网络,因此我会推荐 JPEG,具体取决于您拥有的纹理类型,这将是所有浏览器都支持的最尺寸/质量效率最高的格式(webp 是一个很好但支持不充分的替代方案)。

如果您的纹理更像图形或卡通,这意味着它们有很多锐利和精细的边缘以及很多单色区域,我会推荐 PNG,如果使用中高 JPEG 压缩,坚硬和精细的边缘会变得非常脏。

PNG 进行无损压缩。特别是对于类似卡通的内容(意味着与照片相比颜色和细节很少),您将获得与压缩良好的 JPEG 相似的大小,但具有更好的视觉效果,在某些情况下甚至更好的压缩。

【讨论】:

    【解决方案2】:

    Paul 的回答在文件大小和解码方面是正确的,但它并没有真正回答您提出的问题。

    jpeg 和 png 之间的哪种格式被推荐在运行时渲染时更有效?

    由于问题是在渲染过程中哪个效率更高,因此答案略有变化。 JPEG 和 PNG 都作为未压缩的 RGB/A 数据上传到 GPU,因此两者的渲染特性完全相同。我还做了一些测试,表明两者的上传速度实际上是相同的。因此,您的选择应该与渲染性能无关,而是哪种格式具有您需要的特征。 (有损/无损、alpha 通道等)

    【讨论】:

      【解决方案3】:

      每种格式都有不同的用途。

      JPEG:小,有损。仅 RGB

      PNG:无损,4 通道 (RGBA)

      一般来说,您应该尽可能使用 JPEG,因为您可以将它们做得非常小。简单的颜色纹理非常适合 JPEG。

      PNG 有多种用途

      1. 您希望在 RGB 颜色之上添加一个 Alpha 通道。

        您目前只能对 PNG 进行此操作

      2. 你需要无损压缩

        如果您正在制作字体或其他类似矢量或 8 位像素的艺术,您可能想要使用 PNG

      3. 您想要的不是颜色数据。例如法线贴图、高度贴图、反射贴图、不透明度贴图、光照贴图或同一纹理中这些的组合。

        虽然您可以使用 JPEG 完成其中一些操作,但 JPEG 是为人类查看的图像而设计的。这意味着它的压缩是专门围绕人眼可以看到的东西和他们看不到的东西而设计的。例如,JPEG 压缩颜色多于亮度。我猜它也比绿色压缩红色更多。所以JPEG一般不擅长压缩非视觉数据

        因此,在这些情况下,您可能希望使用 PNG。

      注意:您还可以选择使用 ArrayBuffer 将数据直接加载到 WebGL 纹理中。您可以使用 XMLHttpRequest 直接下载 ArrayBuffers。这意味着您可以创建自己的格式或使用比 JPEG 或 PNG 更适合您需要的其他格式。

      一个例子是Crunch

      【讨论】:

        猜你喜欢
        • 2011-04-15
        • 2011-11-05
        • 2018-05-04
        • 2012-04-12
        • 2012-02-20
        • 1970-01-01
        • 1970-01-01
        • 2014-10-15
        • 1970-01-01
        相关资源
        最近更新 更多