普通映射问题



我正在OpenGL应用程序中实现切线空间法线映射,我有几个问题。

1) 我知道,自然地,TBN矩阵并不总是正交的,因为纹理坐标可能有偏斜。我知道你可以使用格拉姆-施密特过程来重新正交它。我的问题是-格拉姆-施密特过程是否引入了可见的人工制品?使用纯未修改的法线/切线/双切线,我会获得最佳的视觉质量吗?

2) 我注意到,在许多教程中,他们在切线空间而不是视图空间中进行照明计算。为什么会这样?我计划使用延迟渲染器,所以我的法线必须保存到缓冲区中,保存时它们应该在视图空间中,这是正确的吗?如果在计算中使用视图空间而不是切线空间,我会错过什么?如果我使用视图空间,我需要TBN矩阵的逆吗?

3) 在片段着色器中,切线和双切线是否必须重新规范化?在乘以传入(规范化)凹凸贴图法线之后,是否必须重新规范化?正交性(见问题1)会影响这一点吗?哪些向量需要或不需要在片段着色器中重新规范化?

格拉姆-施密特过程是否引入了可见的伪影?

这取决于期望的结果。但通常的答案是肯定的,因为法线贴图向量在切线空间中。如果纹理坐标定义了非正交基,正交化切线空间将使法线贴图计算偏斜。

我注意到,在许多教程中,他们在切线空间而不是视图空间中进行照明计算。为什么会这样?

在视图空间中进行法线映射将需要将每个法线映射texel转换到视图空间中。这比在顶点着色器中将照明向量转换为切线空间并让重心插值阶段(效率高得多)发挥作用更昂贵。

在片段着色器中,切线和双切线是否必须重新规范化?

没有。应在变换各个矢量(法线贴图、光源方向和视点)之后,但在进行照明计算之前,对其进行规格化。

相关内容

  • 没有找到相关文章

最新更新