2

我正在尝试使用原始 PNG 的 DXT 压缩将我的纹理转换/压缩为 DDS 格式。我在 Mac 上,所以我使用的是图形转换器(尽管我也尝试过其他工具)。但无论我使用哪种 DXT 级别 (DXT1-5),文件大小都与原始 PNG 大致相同。

4

2 回答 2

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 邻域之外的相关性来改进压缩。但权衡是不可能只检索一小块像素:这是整个图像或什么都没有。

As you can see, selecting one or the other compression method is not a matter of compression ratio. For storage purpose, choose PNG, not least because it is lossless. For fast displaying of lot of textures in real time (typical scenario for 3D games), DXT is the only way to go.

于 2012-10-18T15:12:00.200 回答
1

DDS/DXT 纹理不保证小于 PNG。这取决于纹理的内容及其大小。纯色 PNG 或大多数纯色(如卡通的 png)会压缩得非常小,而照片通常不会很好地压缩。其中 DXT 是 4 比 1 或 6 比 1 压缩周期,具体取决于它是 DXT1 还是 DXT3 还是 DXT5

于 2012-10-13T00:41:56.587 回答