是否有可能,如果是的话,如何在 OpenGL4.x 中的不同通道上创建和读取具有不同压缩算法的 RGBA 纹理:
没有实际意义的示例 A:
- RG通道存储以 3Dc 编码的法线贴图
- B通道存储高度值,让我们说带有一些编码的镶嵌
- 通道存储未压缩的原始 MaterialID
示例 B:
- RGB存储用 DXT1 压缩的材质参数
- A保存 MaterialID 不压缩
背景:
在第 15 页和第 18 页的基于物理的渲染 PBR (PDF)的 Frostbite 实现中,作者描述了他们如何将材质参数结构化到不同的纹理通道中。他们还提到他们避免在某些通道上进行纹理压缩,而没有详细说明他们指的是哪些通道。
第 15 页
所有基本属性(Normal、BaseColor、Smoothness、MetalMask、Reflectance)都需要可混合以支持延迟贴花。不可混合的属性(例如 MaterialId)存储在 Alpha 通道中。我们还避免了可能影响混合质量的压缩和编码机制。
第 18 页
在这种情况下,我们选择避免压缩我们的少数属性并依赖简单的线性插值 alpha 混合。