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

Jam*_*shy 5 compression opengl textures dxt pbr

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

示例A没有实际意义:

  1. RG通道存储以3Dc编码的法线贴图
  2. B通道存储高度值,让我们说一些编码的tesselation
  3. 信道存储未经压缩的原始MaterialID

例B:

  1. RGB存储使用DXT1压缩的材料参数
  2. A保存MaterialID而不压缩

背景:

在第15页和第18页的Frostbite实施基于物理的渲染PBR(PDF)中,作者描述了他们如何将材料参数构建到不同的纹理通道中.他们还提到他们避免在某些频道上进行纹理压缩,而不是详细说明它们所指的那些频道.

第15页

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

第18页

我们选择避免​​对我们的一些属性进行压缩,并在这种情况下依赖简单的线性插值alpha混合.

Jam*_*shy 1

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

正如 Nicol Bolas 所建议的,Frostbite PBR 实施避免了由于混合而产生的压缩。