Mein Raytracer unterstützt eine Vielzahl von Objekten. Um sie zu schneiden, verwende ich die Standardtechnik, Strahlen in Objekträume umzuwandeln. Das funktioniert fantastisch, bis ich Bewegungsunschärfe hinzufüge.
Ich modelliere Bewegungsunschärfe als eine Folge von Transformationen (um die Diskussion zu vereinfachen, sagen wir genau zwei) anstelle von einer. Mein Ansatz ist es, die inverse Transformation des Strahls an beiden Keyframes vorzunehmen und die Positionen / Richtungen zu verändern.
Dies scheint bei Übersetzungen in Ordnung zu sein, bricht jedoch bei Rotationen zusammen. Hier sind beispielsweise zwei Dreiecke, die um 30 und 90 Grad gedreht werden:
(4 Samples, MN-Rekonstruktion, die roten Samples stammen aus der Nähe der beiden Keyframes)
An den Ecken würde ich erwarten, dass die lerpierten Samples auf einer geraden Linie zwischen den beiden Eckpunkten liegen. Stattdessen wölben sie sich nach außen. Das ist falsch. In interessanteren Szenen mit interessanteren Transformationen werden verschiedene Fehlermodi verursacht. ZB hier ist ein Propeller, der eine 45 Umdrehung durchmacht:
(100 Proben, Normalen visualisiert)
Einige Probleme sind auf das Brechen des BVH zurückzuführen (es wird davon ausgegangen, dass die Extrema von Objekten an Schlüsselbildern liegen), aber selbst ein Brute-Force-Rendering ist falsch.
Ich kann all dies beheben, indem ich nur Vorwärtstransformationen durchführe (transformiere Objekt, nicht den Strahl), aber dies funktioniert nur für Objekte, bei denen dies möglich ist (wirklich nur Dreiecke).
Wie kann ich meinen Raytracer dazu bringen, lineare Annäherungen an die Transformation (insbesondere Rotation) zu erzeugen, indem ich Strahlen und keine Objekte transformiere?