Meu raytracer suporta uma ampla variedade de objetos. Para interceptá-los, eu uso a técnica padrão de transformar raios em espaço-objeto. Isso funciona de maneira fantástica até eu adicionar motion blur.
Eu modelo motion blur como uma sequência de transformações (para simplificar a discussão, digamos exatamente duas) em vez de uma. Minha abordagem é pegar a transformação inversa do raio nos dois quadros-chave e ler as posições / direções.
Isso parece funcionar bem para traduções, mas é interrompido por rotações. Por exemplo, aqui estão dois triângulos submetidos a rotações de 30 e 90 graus:
(4 amostras, reconstrução MN, as amostras vermelhas vieram perto dos dois quadros-chave)
Nos cantos, eu esperaria que as amostras cortadas se encontrassem em uma linha reta entre os dois vértices. Em vez disso, eles incham para fora. Isto está errado. Em cenas mais interessantes com transformações mais interessantes, causa uma variedade de modos de falha. Por exemplo, aqui está uma hélice em rotação de 45:
(100 amostras, normais visualizadas)
Alguns problemas são causados pela quebra do BVH (assume que os extremos dos objetos estão nos quadros-chave), mas mesmo uma renderização de força bruta está incorreta.
Eu posso consertar tudo isso apenas transformando para frente (transformar objeto, não o raio), mas isso só funciona para objetos onde isso é possível (apenas triângulos, na verdade).
Como posso fazer meu raytracer produzir aproximações lineares à transformação (especialmente rotação) transformando raios, não objetos?