Il mio raytracer supporta un'ampia varietà di oggetti. Per intersecarli, uso la tecnica standard di trasformazione dei raggi in spazio-oggetto. Funziona in modo fantastico fino a quando non aggiungo motion blur.
Ho modellato il motion blur come una sequenza di trasformazioni (per semplificare la discussione, diciamo esattamente due) invece di una. Il mio approccio è prendere la trasformazione inversa del raggio in entrambi i fotogrammi chiave e modificare le posizioni / direzioni.
Questo sembra funzionare bene per le traduzioni, ma si rompe per le rotazioni. Ad esempio qui ci sono due triangoli sottoposti a rotazioni di 30 e 90 gradi:
(4 campioni, ricostruzione MN, i campioni rossi sono arrivati vicino ai due fotogrammi chiave)
Agli angoli, mi aspetto che i campioni deformati si trovino su una linea retta tra i due vertici. Invece, si gonfiano verso l'esterno. Questo è sbagliato. In scene più interessanti con trasformazioni più interessanti, provoca una varietà di modalità di fallimento. Ad esempio, ecco un'elica che subisce una rotazione di 45:
(100 campioni, normali visualizzati)
Alcuni problemi sono dovuti alla rottura del BVH (presuppone che gli estremi degli oggetti si trovino sui fotogrammi chiave), ma anche un rendering con forza bruta non è corretto.
Posso risolvere tutto ciò facendo solo trasformazioni in avanti (trasforma oggetto, non il raggio), ma funziona solo per oggetti dove è possibile (solo triangoli, davvero).
Come posso fare in modo che il mio raytracer produca approssimazioni lineari alla trasformazione (in particolare la rotazione) trasformando i raggi, non gli oggetti?