1

我想我无法理解 TBN 的概念,他们将其用于凹凸贴图、法线贴图等。但他们不能只使用模型视图矩阵从纹素中提取法线吗?我需要对 TBN 矩阵的解释,我真的无法理解使用原因。

4

1 回答 1

3

您使用的每个点和矢量都在某个参考系中定义,但它可以从一个转换到另一个。

您从纹理贴图中读取的法线位于“切线空间”中。这实际上不是强制性的,例如,您也可以在世界空间中定义它们。但是想想看,如果你旋转你的模型,法线会发生什么?切线空间随模型旋转,这意味着法线也会旋转(即使您对网格进行变形/蒙皮)。否则,您需要为每个可能的旋转提供不同的法线。
这就是为什么使用切线空间实际上是必要的(无论如何,这是选择)。

现在,问题是,你的光和眼睛可能不是在切线空间中定义的,而是在世界空间中定义的。例如半角矢量等也是如此。
如果它们都在同一个坐标系中,您只能以有意义的方式计算它们。TBN 允许您从一种转换到另一种。

仅顶点法线是不够的(但法线和 T 或 B 将是,另一个可以使用叉积计算),因为您只能使用单个向量定义方向,而不是“螺丝”。因此,如果没有至少一个矢量,您的法线就没有定义,它们可以以各种可能的方式围绕您的顶点法线旋转,每个方向都同样有效或无效。

当您需要获取多个纹素(例如采样高度贴图,而不是法线贴图)时,会出现类似的情况。当然,你有一个插值的 UV 坐标。因此,对哪个纹素进行采样是明确定义的。
但是现在您还想对 4x4 四边形中的其他 3 个纹素进行采样。或者,也许你想做 raymarching。您将在哪个方向对下一个纹素进行采样?你不知道,因为你可以以任何你喜欢的方式围绕法线旋转 UV 坐标系。每次轮换都同样有效或无效。
TBN 解决了​​这个问题,因为 N 指向上方(“远离纹理图像”),并且 T 和 B 指向与 U 和 V 相同的方向。

于 2013-06-13T08:18:10.080 回答