首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有什么理由要用TBN矩阵的逆吗?

有什么理由要用TBN矩阵的逆吗?
EN

Stack Overflow用户
提问于 2014-01-22 00:07:16
回答 1查看 480关注 0票数 0

我最近在学习与TBN矩阵相关的东西。我已经知道了这个TBN矩阵是如何计算的,以及我们将如何使用它将法线从切线空间转换到对象/世界空间(取决于TBN的基向量),以便能够通过同一空间中的灯光来计算它们。

但我也注意到,几乎在教授这个主题的每个教程中,总是有一个部分讲述如何计算TBN的逆,以便您可以将灯光转换为切线空间作为一种选择。

实际上,这只是一种选择,但我们这样做有什么原因吗?将法线从切线空间转换到对象/世界空间和将灯光从对象/世界空间转换到切线空间之间有什么区别吗?我们是否可以获得一些性能,或者我们是否可以节省大量内存或计算成本?我就是搞不清楚,因为我认为它们的计算量是一样的,因为每个顶点都有自己独特的TBN矩阵。

谢谢你的帮助~

EN

回答 1

Stack Overflow用户

发布于 2014-01-22 07:45:23

由于各种原因,法线贴图通常存储在切线空间中(精度更高,可以在多个对象之间共享贴图,可以为对象设置动画,等等)。如果你想在世界空间中照明,你必须使用TBN矩阵将每像素的法线转换到世界空间中。一种常见的优化方法是将灯光转换为每个顶点的切线空间,并在三角形中对其进行插值。这节省了相对昂贵的每个像素的矩阵变换,而只执行每个顶点的变换。

这种优化在旧硬件上更受欢迎,其中像素着色器的性能和复杂性必须非常严格地管理。当渲染过程中只有一个灯光时,这也是最有意义的,因为对于多个灯光,您必须将每个灯光转换到世界空间,并且您很快就会消耗掉任何节省的空间并烧掉插值器。现在,你更有可能看到延迟渲染器将所有法线转换到世界空间,并将它们写到G缓冲区,或者向前/向前+渲染器,它在单个过程中应用多个灯光,因此在世界空间中进行照明计算通常会更高效。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21263274

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档