关于opengl(更具体地说是webgl)纹理,建议在jpeg和png之间格式化,以便在运行时渲染时更有效率?我知道jpeg可能比PNG小,但也许解码可能更昂贵,或者其他。
答案 0 :(得分:6)
Paul的答案在文件大小和解码方面是正确的,但它并没有真正回答你提出的问题。
建议将jpeg和png之间的格式设置为在运行时渲染时更有效吗?
由于问题在渲染过程中效率更高,因此答案会有所改变。 JPEG和PNG都作为未压缩的RGB / A数据上传到GPU,因此两者的渲染特性完全相同。我还做了一些测试,表明两者的上传速度实际上是一样的。因此,您的选择应该与渲染性能无关,而是哪种格式具有您需要的特征。 (有损/无损,alpha通道等)
答案 1 :(得分:5)
对JPEG的解码发生得非常快,你需要使用高分辨率JPEG的数千个(或者如果你在移动设备上可能有数百个)才能看到性能受到重大影响。 由于您的平台是网络,我建议使用JPEG,这取决于您拥有的纹理类型,它将是所有浏览器支持的最大尺寸/质量效率格式(webp是一个很好但不太受支持的替代方案)。
如果你的纹理更像是图形或类似卡通,意味着它们有很多清晰细腻的边缘和很多单色区域我会推荐使用PNG,硬边和细边可能会因中高JPEG压缩而变得非常脏。
PNG执行无损压缩。特别是卡通内容(意味着很少的颜色和细节与照片相比),你会得到一个类似尺寸的压缩JPEG,但视觉效果更好,在某些情况下甚至更好的压缩。
答案 2 :(得分:1)
每种格式都有不同的用途。
JPEG:小,有损。仅限RGB
PNG:无损,4通道(RGBA)
一般情况下,你应该尽可能使用JPEG,因为你可以使它们非常小。简单的颜色纹理非常适合JPEG。
PNG有多种用途
您希望在RGB颜色之上使用Alpha通道。
您目前只能使用PNG执行此操作
您需要无损压缩
如果您正在制作字体或其他非常像矢量或8位像素的艺术品,您可能想要使用PNG
您需要的不是颜色数据。例如,法线贴图,高度贴图,反射贴图,不透明贴图,光照贴图或同一贴图中的某些组合。
虽然您可以使用JPEG执行某些操作,但JPEG是专为人类查看的图像而设计的。这意味着它的压缩是专门针对人眼可以看到的以及他们看不到的东西而设计的。例如,JPEG压缩颜色比亮度更多。我猜它还压缩红色而不是绿色。因此JPEG通常不擅长压缩非可视数据
因此,在这些情况下,您可能想要使用PNG。
注意:您还可以选择使用ArrayBuffer将数据直接加载到WebGL纹理中。您可以使用XMLHttpRequest直接下载ArrayBuffers。这意味着您可以构建自己的格式或使用可能比JPEG或PNG更适合您的需要的其他格式。
一个例子是Crunch