Som*_*one 2 compression textures webgl dds-format
我正在尝试将纹理转换/压缩为DDS格式,并使用原始PNG进行DXT压缩.我在Mac上,所以我正在使用Graphic Converter(虽然我也尝试过其他工具).但无论我使用哪种DXT级别(DXT1-5),文件大小都与原始PNG大致相同.
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是唯一可行的方法.