我正在我的 OpenGL 应用程序中实现切线空间法线映射,我有几个问题。
1)我知道,自然地,TBN 矩阵并不总是正交的,因为纹理坐标可能有倾斜。我知道您可以使用 Gramm-Schmidt 过程对其进行重新正交化。我的问题是——Gramm-Schmidt 过程是否会引入可见的伪影?通过使用纯未修改的法线/切线/双切线,我会获得最佳的视觉质量吗?
2)我注意到在很多教程中,他们在切线空间而不是视图空间中进行照明计算。为什么是这样?我打算使用延迟渲染器,所以我的法线必须保存到缓冲区中,我是否正确,因为它们在保存时应该在视图空间中?在计算中使用视图空间而不是切线空间会错过什么?如果我使用视图空间,是否需要 TBN 矩阵的逆矩阵?
3)在片段着色器中,切线和副切线是否必须重新归一化?在乘以传入(归一化)凹凸贴图法线之后,是否必须重新归一化?正交性(见问题 1)会影响这个吗?在片段着色器中哪些向量需要或不需要重新规范化?