Ray-Transformation in Objektraum für Bewegungsunschärfe


12

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:

Rotation1
(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:

Drehung 2
(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?

Antworten:


7

Das Lerpen der Strahlpositionen / -richtungen zwischen Keyframes sollte dem Lerpen der inversen Matrizen zwischen Keyframes und dem Transformieren durch die Lerp-Matrix entsprechen. Das Problem ist, wenn die Keyframes unterschiedliche Rotationen haben, dass die lerpierte Matrix im Allgemeinen etwas "Seltsames" ist, mit Scherung, ungleichmäßiger Skalierung usw.

Es würde mich nicht wundern, wenn einige Ihrer Schnitt- und Schattierungsroutinen in einem derart verzerrten Koordinatensystem nicht ordnungsgemäß funktionieren, es sei denn, Sie haben sie speziell gegen solche Fälle getestet und gehärtet. (Wenn Sie beispielsweise das Skalarprodukt zweier Einheitsvektoren nehmen, erhalten Sie in einem gescherten Koordinatensystem nicht die gleiche Antwort wie in einem orthonormalen.)

Dies ist nur eine Vermutung, aber es funktioniert möglicherweise besser, wenn Sie eine Interpolationsmethode auswählen, bei der die Verschiebung, Drehung und Skalierung (falls zutreffend) separat (unter Verwendung von Quaternionen für den Drehteil) geändert und neu kombiniert werden.


Sind Sie sicher, dass das Lerpen des vorwärts transformierten Objekts dasselbe ist wie das Lerpen des rückwärts transformierten Strahls? Zum Beispiel kann ich den Strahl nach dem Lerp renormieren (und die Trefferentfernung entsprechend skalieren). Dies ändert nichts am Ergebnis.
Imallett

@imallett Das Lerpen des Strahls sollte dem Lerpen der inversen Matrizen entsprechen, aber nicht unbedingt dem Lerpen der Forward-Matrizen oder dem Lerpen des Objekts (da Inversion keine lineare Operation ist). Und ich glaube nicht, dass Sie den Strahl wieder normalisieren, nachdem das Lerp die Dinge vollständig repariert hat - Sie können sich immer noch in einem abgescherten, ungleichmäßig skalierten Koordinatensystem befinden, das die Mathematik in Ihren Schnittroutinen und Ähnlichem durcheinander bringen kann.
Nathan Reed

[Siehe Bearbeiten; Besseres Bild] Zumindest denke ich, dass eine Renormierung Probleme mit der Kreuzung ausschließen sollte - aber das habe ich mir gedacht; Den Strahl zu lerpen ist nicht das Objekt zu lerpen. In Ihrer Antwort haben Sie vorgeschlagen, [inverse?] TRS zu lerpen und dann neu zu kombinieren. Gehen Produktionsrenderer so vor?
Imallett

3

Ich glaube nicht, dass Sie mit AFAICS, einer einzelnen linearen Annäherung an eine eher nichtlineare Interpolation, furchtbar weit kommen werden, aber vielleicht kann dieses Papier / die Präsentation von Gribel et al. Über Bewegungsunschärfe bei der Rasterisierung helfen.


Ich zerlege es in eine lineare Annäherung, die ziemlich typisch ist. Man kann komplexere Transformationen mit mehreren solchen Schritten handhaben. Mein Problem ist nicht, die Transformation nichtlinear zu machen, sondern die lineare Annäherung daran richtig zu machen.
Imallett
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.