Мой raytracer поддерживает самые разные объекты. Чтобы пересечь их, я использую стандартную технику преобразования лучей в объект-пространство. Это работает фантастически, пока я не добавлю размытие в движении.
Я моделирую размытие движения как последовательность преобразований (чтобы упростить обсуждение, скажем, ровно два) вместо одного. Мой подход заключается в том, чтобы взять обратное преобразование луча в обоих ключевых кадрах и зафиксировать позиции / направления.
Это, кажется, работает хорошо для переводов, но это не работает для вращений. Например, здесь два треугольника подвергаются поворотам на 30 и 90 градусов:
(4 образца, реконструкция MN, красные образцы получены около двух ключевых кадров)
В углах, я ожидал бы, что образцы lerped будут лежать на прямой линии между двумя вершинами. Вместо этого они выпирают наружу. Это не правильно. В более интересных сценах с более интересными трансформациями это вызывает множество режимов отказа. Например, вот пропеллер, вращающийся на 45 градусов:
(100 образцов, нормали визуализированы)
Некоторые проблемы возникают из-за взлома BVH (он предполагает, что экстремумы объектов лежат на ключевых кадрах), но даже грубый рендеринг некорректен.
Я могу исправить все это, выполнив только прямое преобразование (преобразование объекта, а не луча), но это работает только для объектов, где это возможно (на самом деле только треугольники).
Как я могу заставить мой raytracer производить линейные приближения к преобразованию (особенно вращению) путем преобразования лучей, а не объектов?
источник
Я не думаю, что у вас получится ужасно далеко, с AFAICS, одним линейным приближением к довольно нелинейной интерполяции, но, возможно, эта статья / презентация Грибеля и др. О размытости при растеризации может помочь.
источник