2012-04-02 74 views
1

当记住性能时,我们(不愿意)使用纹理压缩。通过压缩引入的人为因素可能或多或少是可以接受的。有什么不同的可能性,可以应用在原始图像层次上的工作周,以最小化由压缩算法引入的人为因素。在我目前的情况下,使用渐变时会看到大部分的人工制品。dxt4纹理压缩

+0

哪些工件?你在使用什么压缩机?你使用什么压缩格式来处理你的数据?你在说什么图片?您的问题太模糊,无法在此表格中回答。 – 2012-04-02 09:40:59

+0

这是你的反馈意见。以下是一些细节:我试过nvcompress和nvdxt,dxt {1..5},我试图添加链接到一些压缩的图像来显示所有的工件。 – ohmy 2012-04-02 09:52:26

回答

4

如果您愿意,DXT压缩全是关于插值或渐变的。但是,你必须很好地理解它究竟做了什么。 DXT压缩是一种折衷方案,它在相当不好的压缩下提供相当差的质量,但它提供了一些压缩,并且在硬件中实现几乎是微不足道的,并且以几乎为零的成本运行。这就是它被使用的原因。

有几种方法可以提高质量,但如果质量问题不可接受,唯一的解决方案是不使用DXT。 (此外,DXT4你在你的问题的标题都还不是​​很广泛的应用,这是DXT5预乘)

首先,请注意:

  • DXT通过编码纹理像素的4×4块的颜色存储两个5:6:5颜色并在RGB空间中沿着这条线插入。插值量化为2位,所以每个像素只能选择4个值。
  • DXT4/5中的alpha通道存储两个8位alpha值并使用3位内插器。
    • DXT2/3使用明确的每位素材4位alpha通道(即不在一些选定的8位值之间进行插值)。
    • DXT1可以佯攻一个1位的alpha通道,但这是一个排序/编码技巧,和一个不同的故事。
  • 如果不转换到另一个色彩空间(由于端点存储为5:6:5),无法在DXT中获得纯灰色。

这意味着,DXT可以在原则(或多或少)完美重现没有过于苛刻的变化很多水平,垂直或对角线1D梯度,但它是完全无法重现大多数其他模式(尽管它通常可以再现一些东西)。例如,如果您有2D渐变或旋转渐变,则没有办法(除非是巧合!)存在一对两种颜色,这将允许整个4x4块很好地内插。另外,由于插值仅量化为4种选择,绝大多数“奇数旋转”不能被编码,也不能组合多种颜色。但是,对于大多数“天然”纹理来说,这是可以接受的。

DXT压缩机通常会尝试在4x4单元格内寻找最佳配合(尽管有些压缩机会/可能会做其他操作)。即使单元格内的梯度表示良好,这也会导致梯度渐变。

什么可以做DXT是:

  • 使用不同的压缩机,并选择最好的结果。至少有3种不同的压缩机采用不同的(非蛮力)策略,给出了不同的结果。
  • 试试crunch库。在某处也有一个Windows GUI压缩器。虽然紧缩主要是为了生成较小的(zip压缩后)文件,并且它最终受到DXT块格式技术限制的约束,但它使用了一种不寻常的搜索技术,它考虑了更大的范围。它可能发生,它设法给你的梯度更好看一个或另一个。
  • 避免梯度为2D或与u/v或对角线不对齐的梯度,因为您知道无法编码这些梯度。
  • 在压缩之前将自然图像转换为非RGB色彩空间。 YCoCg和YCbCr可能是候选者,或JPEG-LS变换。人眼在各方面都不是同样敏感。有些错误不太明显。使用不同的色彩空间利用了这一点。
  • 如果您不需要alpha,则使用alpha通道作为最重要的通道,因为您知道它具有8位端点分辨率(而不是5/6)和3位内插器而不是2位。否则,使用绿色作为最重要的通道,因为它还有一个位。
  • 对于手绘纹理,您可以尝试使用5:6:5匹配的颜色,这至少会为这些颜色提供完美的点击。尽管对于“绘制”纹理(看起来像漫画),DXT通常是非常不明智的选择。
  • 对于质量没有削减的情况,不要使用DXT(是的,这听起来像一个愚蠢的建议,但它确实是...如果它不适合,不要使用它)。