我的raytracer支持各种各样的对象。为了使它们相交,我使用了将光线转换为对象空间的标准技术。在我添加运动模糊之前,这非常有效。
我将运动模糊建模为一系列转换(为简化讨论,确切地说是两个)而不是一个。我的方法是在两个关键帧处进行射线的逆变换,并控制位置/方向。
对于翻译来说,这似乎工作正常,但对于旋转来说,它却失败了。例如,这是两个分别旋转30度和90度的三角形:
在拐角处,我希望弯曲的样本位于两个顶点之间的直线上。相反,它们向外凸出。错了 在具有更多有趣转换的更有趣场景中,它会导致多种故障模式。例如,这是螺旋桨旋转45度:
某些问题是由于BVH断裂(假定对象的极值位于关键帧处)造成的,但是即使是强行渲染也不正确。
我只能通过执行正向变换(变换对象,而不是光线)来解决所有问题,但这仅适用于可能的对象(实际上只有三角形)。
如何使我的光线跟踪器通过变换光线而不是对象来产生线性近似值来进行变换(尤其是旋转)?