我正在尝试将纹理转换/压缩为DDS格式,并使用原始PNG进行DXT压缩。我在Mac上,所以我正在使用Graphic Converter(虽然我也尝试过其他工具)。但无论我使用哪种DXT级别(DXT1-5),文件大小都与原始PNG大致相同。
答案 0 :(得分:7)
PNG是一种无损压缩格式,基于zlib和一些专用过滤器。 它将保证重现与原始图像完全相同的图像。
因此,PNG压缩比为变量。 在复杂的图像上,压缩会很差。 在全黑图像上,压缩将非常好。
相比之下,DXT压缩具有固定压缩比。 DXT1的比率为8:1,DXT5的比率为4:1(假设32位RGBA输入)。 DXT5的优势是更好的alpha通道(透明度)。如果你不需要它,不要使用它,这只是浪费带宽。
正如您所猜测的那样,权衡是 DXT质量将是可变的。 DXT质量仅仅被认为是“足够好”,但它远非完美。在图像的复杂部分,会出现一些可见的人工制品/扭曲。在简单的部件上,再现几乎与原始一样。
PNG的工作方式是将整个图像压缩为单字节流。 DXT压缩的工作方式是将图像切割成4x4像素的小块,并将它们独立压缩到固定的压缩比。
这使得基本上不同的属性:DXT纹理应该由GPU硬件直接解码。这非常快,几乎是免费的。这有助于将纹理切割成小块:没有必要解码整个纹理以推动单个像素=>只需解码相应的4x4块。此属性是解码过程的关键。
相比之下,PNG解码整个图像,因此通过查找超出直接4x4邻域的相关性,有更多的空间来改善压缩。但权衡的是,不可能只检索一小块像素:这是整个图像,或者什么都没有。
如您所见,选择一种或另一种压缩方法不是压缩比问题。出于存储目的,选择PNG,尤其是因为它是无损。为了实时快速显示大量纹理(3D游戏的典型场景),DXT是唯一可行的方法。
答案 1 :(得分:1)
DDS / DXT纹理不能保证比PNG小。它取决于纹理的内容及其大小。纯色PNG或大多数纯色(如动画片的png)会压缩非常小,因为照片通常不能很好地压缩。 DXT的压缩周期为4比1或6比1,具体取决于它是DXT1还是DXT3还是DXT5