冻伤PBR:在相同纹理的单独纹理通道上进行不同的压缩

时间:2016-09-20 07:02:04

标签: opengl compression textures dxt pbr

是否有可能,如果可以的话,在OpenGL4.x中的不同通道上创建和读取具有不同压缩算法的RGBA纹理:

示例A没有实际意义:

  1. RG 频道存储以3Dc
  2. 编码的法线贴图
  3. B 频道存储高度值,假设使用某些编码进行细分
  4. A 频道存储未压缩的原始MaterialID
  5. 例B:

    1. RGB 存储使用DXT1压缩的材质参数
    2. A 保存不压缩的MaterialID
    3. 背景:

      在第15页和第18页的Physically Based Rendering PBR (PDF)的Frostbite实现中,作者描述了他们如何将材质参数构建到不同的纹理通道中。他们还提到他们避免了某些频道上的纹理压缩,而没有详细说明它们所指的那些频道。

      第15页

        

      所有基本属性(Normal,BaseColor,Smoothness,MetalMask,Reflectance)都需要可混合以支持延迟贴花。像MaterialId这样的不可混合属性存储在alpha通道中。我们还避免了可能影响混合质量的压缩和编码机制。

      第18页

        

      我们选择在少数属性上避免压缩,并且在这种情况下依赖于简单的线性插值alpha混合。

1 个答案:

答案 0 :(得分:1)

没有OpenGL或硬件支持在不同通道上读取不同压缩的纹理。当然,人们可以创建一个预制过程,将这样一个手工制作的纹理分割成单独的纹理,然后分别解压缩。

正如Nicol Bolas所说,Frostbite PBR实施避免了由于混合造成的压缩。