当计算光线与被转换物体的交叉时,大多数射线追踪器会对每条射线进行逆变换,并计算与非变换对象的交集。应用正向变换,将物体放置在一个平面的世界空间,难道不是更快更有效吗?因为你只需要计算一次变换?
发布于 2015-08-12 14:27:25
大多数射线追踪器两者都有!
你有没有见过射线-三角形交叉测试,其中的三角形被转换,使一个顶点在原点,三角形是平坦的一个轴?这将简化测试,但是将逆变换存储到光线中需要比三角形本身更大的空间。所以你可以说,几乎所有的射线三角形测试都将正向变换应用于对象。
然而,在大多数情况下,你要绘制一个由许多三角形组成的网格,而“大多数射线追踪器”并不是通过物体的变换矩阵来转换网格中的每个顶点,而是将光线反变换成物体空间。这并不一定是一个很好的理由--在某些情况下,预处理网格并将每个顶点放置在世界空间中肯定会更有表现力。
然后说你在做动画工作室规模的路径跟踪。现在,您的场景几何图形可能并不完全适合RAM在一次。预转换所有顶点/控制点不再是性能上的胜利,因为(a)每个实例都需要对象的一个副本,(b)每次将对象读入RAM时都需要转换它。当数据绑定时,每个射线的两个矩阵乘数的代价是微不足道的。
浮点精度也是一个潜在的原因:当你有一个离原点很远的物体时,你会从浮点位置得到更多的误差,如果你对目标进行预变换,你会在不同的方向对每个顶点应用这个误差,而如果你逆变换光线,你会从光线的不精确位置得到一个固定的误差量,但是你的顶点之间的误差相对较小。
虽然我怀疑“为什么大多数射线射线逆向转换射线”的真正答案是,大多数带有公共源代码的射线追踪器实现了广泛的几何原语,无论是为了教育目的,还是作为概念的证明,实现一个廉价的射线逆变换比N个正向变换更容易。(另外,正如前面提到的,如果对象在规范空间中,则一些交集算法要简单得多。)
发布于 2015-08-12 00:44:23
大多数射线相交算法可以大大简化,如果你可以假设你交叉的形状是在原点,未旋转和单位大小。也有一些例外(比如球,它们具有旋转对称性)。但是更一般的算法在数学上通常会在计算交集之前基本上把形状和光线转换成原点。考虑到这一点,简单地变换光线,使交集总是发生在物体空间中,就会更简单、更一致。
https://computergraphics.stackexchange.com/questions/212
复制相似问题