Mój raytracer obsługuje wiele różnych obiektów. Aby je przeciąć, używam standardowej techniki przekształcania promieni w przestrzeń przedmiotową. Działa to fantastycznie, dopóki nie dodam rozmycia ruchu.
Modeluję rozmycie ruchu jako sekwencję transformacji (aby uprościć dyskusję, powiedzmy dokładnie dwie) zamiast jednej. Moje podejście polega na pobraniu odwrotnej transformacji promienia w obu klatkach kluczowych i określeniu pozycji / kierunków.
Wydaje się, że działa to dobrze w przypadku tłumaczeń, ale rozkłada się w przypadku rotacji. Np. Tutaj są dwa trójkąty przechodzące obroty o 30 i 90 stopni:
(4 próbki, rekonstrukcja MN, próbki czerwone pochodziły z dwóch klatek kluczowych)
W rogach spodziewałbym się, że zaszyte próbki będą leżeć na linii prostej między dwoma wierzchołkami. Zamiast tego wybrzuszają się na zewnątrz. To jest źle. W ciekawszych scenach z ciekawszymi transformacjami powoduje to różne tryby awarii. Np. Oto śmigło przechodzące o 45 obrotów:
(100 próbek, wizualizowane normalne)
Niektóre problemy wynikają z pęknięcia BVH (zakłada, że ekstrema obiektów leży w klatkach kluczowych), ale nawet renderowanie z użyciem siły jest niepoprawne.
Mogę to wszystko naprawić, wykonując tylko transformacje do przodu (transformuj obiekt, a nie promień), ale działa to tylko w przypadku obiektów, w których jest to możliwe (tak naprawdę tylko trójkąty).
Jak sprawić, by mój raytracer generował liniowe aproksymacje do transformacji (zwłaszcza rotacji) poprzez transformację promieni, a nie obiektów?
źródło
Nie sądzę, żebyś za daleko zaszedł, AFAICS, pojedyncze liniowe przybliżenie do raczej nieliniowej interpolacji, ale być może ten artykuł / prezentacja Gribela i innych na temat rozmycia w ruchu w rasteryzacji może pomóc.
źródło