Mi raytracer admite una amplia variedad de objetos. Para intersecarlos, utilizo la técnica estándar de transformar rayos en espacio de objetos. Esto funciona fantásticamente hasta que agregue desenfoque de movimiento.
Modelo el desenfoque de movimiento como una secuencia de transformaciones (para simplificar la discusión, digamos exactamente dos) en lugar de uno. Mi enfoque es tomar la transformación inversa del rayo en ambos fotogramas clave y mover las posiciones / direcciones.
Esto parece funcionar bien para las traducciones, pero se descompone por rotaciones. Por ejemplo, aquí hay dos triángulos que experimentan rotaciones de 30 y 90 grados:
(4 muestras, reconstrucción MN, las muestras rojas provenían de cerca de los dos fotogramas clave)
En las esquinas, esperaría que las muestras lerpedasen en una línea recta entre los dos vértices. En cambio, se hinchan hacia afuera. Esto está mal. En escenas más interesantes con transformaciones más interesantes, causa una variedad de modos de falla. Por ejemplo, aquí hay una hélice que experimenta una rotación de 45:
(100 muestras, normales visualizadas)
Algunos problemas se deben a la ruptura de BVH (se supone que los extremos de los objetos se encuentran en los fotogramas clave), pero incluso un procesamiento de fuerza bruta es incorrecto.
Puedo arreglar todo esto haciendo solo transformaciones hacia adelante (transformar objeto, no el rayo), pero esto solo funciona para objetos donde eso es posible (solo triángulos, en realidad).
¿Cómo puedo hacer que mi trazador de rayos produzca aproximaciones lineales a la transformación (especialmente la rotación) transformando rayos, no objetos?