Opengl es 对于opengl(webgl),png或jpeg是最合适的文件格式吗?

Opengl es 对于opengl(webgl),png或jpeg是最合适的文件格式吗?,opengl-es,format,webgl,image-formats,Opengl Es,Format,Webgl,Image Formats,在opengl(更具体地说是webgl)上,对于纹理,建议jpeg和png之间的哪种格式在运行时渲染时更有效?我知道jpeg可以比PNG小,但解码可能会更昂贵,或者其他。解码jpeg的速度非常快,您需要使用数千(或者如果您在移动设备上,可能是数百)高分辨率jpeg才能看到性能上的显著提高。 由于您的平台是web,我建议您使用JPEG格式,这取决于您使用的纹理类型,它将是所有浏览器支持的最大尺寸/质量效率的格式(webp是一种很好但不受良好支持的替代格式) 如果你的纹理更像图形或卡通,这意味着它们

在opengl(更具体地说是webgl)上,对于纹理,建议jpeg和png之间的哪种格式在运行时渲染时更有效?我知道jpeg可以比PNG小,但解码可能会更昂贵,或者其他。

解码jpeg的速度非常快,您需要使用数千(或者如果您在移动设备上,可能是数百)高分辨率jpeg才能看到性能上的显著提高。 由于您的平台是web,我建议您使用JPEG格式,这取决于您使用的纹理类型,它将是所有浏览器支持的最大尺寸/质量效率的格式(webp是一种很好但不受良好支持的替代格式)

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


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

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

建议jpeg和png之间的哪种格式在运行时渲染时更有效


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

每种格式都有不同的用途

JPEG:小,有损。仅RGB

PNG:无损,4通道(RGBA)

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

尽管PNG有多种用途

  • 您希望在RGB颜色的顶部有一个alpha通道

    当前只能使用PNG执行此操作

  • 你需要无损压缩

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

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

    虽然您可以使用JPEG完成其中一些操作,但JPEG是为人类查看的图像而设计的。这意味着它的压缩是专门针对人眼能看到和看不见的东西设计的。例如,JPEG对颜色的压缩大于对亮度的压缩。我猜它也比绿色更能压缩红色。因此,JPEG通常不擅长压缩非可视数据

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

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


    一个例子是

    这两种方法不能完全互换。PNG是无损的,JPEG不是。OpenGL在纹理格式上是完全透明的。这只是加载图片的问题。