5

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

没有实际意义的示例 A:

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

示例 B:

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

背景:

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

第 15 页

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

第 18 页

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

4

1 回答 1

1

没有 OpenGL 或硬件支持在不同通道上读取具有不同压缩率的纹理。当然,可以创建一个预通道,将这种手工制作的纹理拆分为单独的纹理,然后分别解压缩这些纹理。

正如 Nicol Bolas 建议的那样,Frostbite PBR 实现避免了由于混合而导致的压缩。

于 2016-09-22T06:07:48.020 回答