使用 WIC 将法线贴图保存为 16 位纹理

Posted

技术标签:

【中文标题】使用 WIC 将法线贴图保存为 16 位纹理【英文标题】:Save normal map as 16bit texture with WIC 【发布时间】:2011-11-26 10:26:42 【问题描述】:

我有一个艺术管道,包括以下步骤:

生成法线贴图。我只想将 X 和 Y 分量保存为无符号字节。 Z被省略,因为它是在像素着色器中重建的。

法线贴图被保存到一个中间图像文件中,然后将其馈送到 nvtt 以将其压缩为 BC5。

要保存法线贴图,我需要使用 Windows 成像组件。我应该使用哪种格式来存储中间图像?

.png 与任何可用的 16bpp 格式(GUID_WICPixelFormat16bppBGR565、555、5551、Gray、GrayFixedPoint、GrayHalf)都会失败。

.bmp 成功,例如GUID_WICPixelFormat16bppBGR565 但是nvtt无法加载它。

到目前为止,我看到的法线贴图通常是蓝色的,带有红色阴影。那些是 24bpp 图像还是 16bpp 图像?那么哪个组件被移除(G?)以及它们以什么格式传递给 nvtt?

因为以某种方式编写只有 2 个颜色通道的图像,就像它具有 3 个颜色通道一样 BGR565(或仅灰色,如果使用 16bppGray)在某种程度上是没有意义的。 BC5 是无损的,不应该弄乱图像,但是中间文件对于以后的任何手动编辑都是无用的。

【问题讨论】:

好的,朋友提出了解决方案。 BC5 需要 BGRA 格式,每种颜色 8 位。 B 和 A 应设置为 0。法线的 X 分量进入 R,Z 进入 G,省略 Y(高度)。像素着色器获取 Sample 调用结果的 [0] 中的 X 和 [1] 中的 z 分量。 【参考方案1】:

好的,一位朋友提出了解决方案。 BC5 需要 BGRA 格式,每种颜色 8 位。

B和A应设置为0。法线的X分量进入R,Z进入G,省略Y(高度)。

像素着色器获取 Sample 调用结果的 [0] 中的 X 和 [1] 中的 z。

【讨论】:

以上是关于使用 WIC 将法线贴图保存为 16 位纹理的主要内容,如果未能解决你的问题,请参考以下文章

在Unity里添加2D法线贴图 NormalMap

计算机图形学-纹理的应用,环境贴图凹凸贴图法线贴图位移贴图

计算机图形学-纹理的应用,环境贴图凹凸贴图法线贴图位移贴图

计算机图形学-纹理的应用,环境贴图凹凸贴图法线贴图位移贴图

计算机图形学(OPENGL):法线贴图

SceneKit - 将图像添加为法线贴图