跳转至

法线贴图压缩

双通道保存

Normal Map 保存的是 TBN 空间下的归一化法线,z 分量是大于 0 的(接近 1),所以可以只保存 x 和 y 分量。1

z 分量用下面的公式就能算出:

\[ z = \sqrt{1 - x^2 - y^2} \]
1
2
3
// x、y 分别存在 r、g 通道
float3 normalTBN = float3(normalMap.rg, 0);
normalTBN.z = sqrt(1 - dot(normalTBN.xy, normalTBN.xy));

球极投影

双通道保存是以精度为代价的。主要是 gpu 插值的原因。

TODO