我最近正在学习与tbn矩阵有关的东西。我已经知道如何计算此TBN矩阵,并且我们将以哪种方式将其从切线空间转换为对象/世界空间(取决于TBN的基础向量),以便能够计算它们在同一空间中的灯光。
,但我也注意到,在教授此主题的每个教程中,总有一个部分讲述如何计算TBN的倒数,以便您可以将灯转换为切线空间。
真的,这只是一个选择,但是有什么原因我们这样做吗?将正态从切线空间转换为对象/世界空间与将灯从对象/世界空间转换为切线空间之间有区别吗?我们可以获得一些性能,还是可以节省大量的内存或计算成本?我只是无法弄清楚,因为我认为它们具有相同数量的计算,因为每个顶点都有一个独特的TBN矩阵。
感谢您的帮助〜
普通映射通常出于各种原因存储在切线空间中(更好的精度,可以在多个对象之间共享地图,可以将对象进行动画等)。如果您想在世界空间中点亮,则必须使用TBN矩阵将正常的人每金素转换为世界空间。一个常见的优化是将光线转换为每个顶点的切线空间,并在三角形上插入。这样可以节省一个相对昂贵的矩阵变换,而仅能每个顶点变换。
这种优化在较旧的硬件上更受欢迎,在该硬件中,像素着色器性能和复杂性必须非常严格地管理。当您在渲染通道中只有一盏灯,就像有多个灯光一样,您必须将每个灯转变为世界空间,然后迅速饮食并燃烧插值器,这也最有意义。如今,您更有可能看到递延的渲染器,这些渲染器将所有正常的渲染器转化为世界空间,并将其写入G-buffer或向前/向前/向前加上渲染器,这些渲染器在单个通行证中施加多个灯在世界空间中有效进行照明计算。