将超过 4 通道的数据传递给 OpenGL 或 Vulkan
Pass more than 4-channel data to OpenGL or Vulkan
我想将以下值作为纹理传递给片段着色器:
- 基础 R
- 基础 G
- 基地 B
- Material 切换 (metal/dielectric)
- 正常 x
- 正常 y
- 正常 z
- IOR(仅针对电介质)
- 粗糙度
这是很多东西。看起来这需要 OpenGL 中的三种不同纹理。问题:
- 是否有任何 OpenGL 扩展可以将其作为一个纹理传递?
- 据我对 Vulkan 的了解,GPU 内存更容易访问。这是否意味着您可以使用通用纹理格式?
即使在 Vulkan 中,纹理的通道也不能超过四个。但是,在 OpenGL 和 Vulkan 中,您都可以使用 32 位通道纹理,并使用类似 packUnorm
( https://www.khronos.org/registry/OpenGL-Refpages/gl4/html/packUnorm.xhtml ) 的东西。但它只适用于整数纹理,你必须自己执行过滤
另一种方法是使用类似 SSBO 或 TBO 的方法。但是我不明白使用3个纹理是什么问题。
我想将以下值作为纹理传递给片段着色器:
- 基础 R
- 基础 G
- 基地 B
- Material 切换 (metal/dielectric)
- 正常 x
- 正常 y
- 正常 z
- IOR(仅针对电介质)
- 粗糙度
这是很多东西。看起来这需要 OpenGL 中的三种不同纹理。问题:
- 是否有任何 OpenGL 扩展可以将其作为一个纹理传递?
- 据我对 Vulkan 的了解,GPU 内存更容易访问。这是否意味着您可以使用通用纹理格式?
即使在 Vulkan 中,纹理的通道也不能超过四个。但是,在 OpenGL 和 Vulkan 中,您都可以使用 32 位通道纹理,并使用类似 packUnorm
( https://www.khronos.org/registry/OpenGL-Refpages/gl4/html/packUnorm.xhtml ) 的东西。但它只适用于整数纹理,你必须自己执行过滤
另一种方法是使用类似 SSBO 或 TBO 的方法。但是我不明白使用3个纹理是什么问题。