冻伤PBR:在同一纹理的不同纹理通道上压缩不同



在OpenGL4.x的单独通道上使用不同的压缩算法创建和读取RGBA纹理是可能的吗?

示例A没有真正意义:

  1. RG channels存储3Dc编码的法线贴图
  2. B通道存储高度值,例如使用编码进行镶嵌
  3. A通道存储未经压缩的raw MaterialID

B的例子:

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

背景:

在第15页和第18页的基于物理的渲染PBR (PDF)的Frostbite实现中,作者描述了他们如何将材料参数结构成不同的纹理通道。他们还提到他们避免了对一些通道进行纹理压缩,但没有详细说明他们指的是哪些通道。

第15页

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

18页

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

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

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

相关内容

  • 没有找到相关文章

最新更新