Перетворення променів в об'єктний простір для розмиття руху


12

Мій raytracer підтримує найрізноманітніші об'єкти. Для їх перетину я використовую стандартну техніку перетворення променів у об’єкт-простір. Це працює фантастично, поки я не додаю розмиття руху.

Я моделюю розмиття руху як послідовність перетворень (щоб спростити обговорення, скажімо, точно два) замість одного. Мій підхід полягає в тому, щоб здійснити обернене перетворення променя в обох ключових кадрах і проглядати положення / напрямки.

Здається, це добре працює для перекладів, але воно руйнується для обертання. Наприклад, два трикутники, що зазнають обертання на 30 і 90 градусів:

обертання1
(4 зразки, реконструкція MN, зразки червоного кольору з’явилися поблизу двох ключових кадрів)

В кутах я б очікував, що лерпаті проби лежать на прямій лінії між двома вершинами. Натомість вони випинаються назовні. Це неправильно. У більш цікавих сценах з більш цікавими перетвореннями він спричиняє різноманітні режими відмов. Наприклад, ось гвинт, який проходить 45 обертів:

обертання 2
(100 проб, візуалізовані нормалі)

Деякі проблеми пов'язані з розривом BVH (він передбачає, що екстремальність об'єктів лежить у ключових кадрах), але навіть груба сила передачі невірна.

Я можу все це виправити, роблячи лише перетворення вперед (трансформуючи об’єкт, а не промінь), але це працює лише для об'єктів, де це можливо (насправді лише трикутники).


Як я можу змусити мій Raytracer виробляти лінійні наближення до перетворення (особливо обертання) шляхом перетворення променів, а не предметів?

Відповіді:


7

Розміщення позицій / напрямків променів між ключовими кадрами повинно бути еквівалентним лерпуванню зворотних матриць між ключовими кадрами та перетворенням за допомогою матричної лінійки. Проблема полягає в тому, що якщо ключові кадри мають різні обертання, то матриця лерпа буде взагалі чимось "дивним", із стрижкою, неоднорідною шкалою тощо.

Я не був би здивований, якщо деякі з ваших процедур перетину та затінення не працюють належним чином у такій спотвореній системі координат, якщо ви спеціально не перевірили та не затвердили їх у таких випадках. (Наприклад, взяття крапкового добутку двох одиничних векторів не дає таку саму відповідь у нарізаній системі координат, як у ортонормі.)

Це лише здогадка, але це може спрацювати краще, якщо ви виберете метод інтерполяції, де переклад, обертання та масштаб (якщо це застосовано) леперуються окремо (використовуючи кватерніони для частини обертання) та повторно поєднуються.


Ви впевнені, що лерпування прямо трансформованого об'єкта - це те саме, що лерпінг променевого трансформованого променя? Наприклад, я можу перенормувати промінь після лерпу (і відповідно масштабувати відстань попадання). Це не змінює результат.
imallett

@imallett Lerping промінь повинен бути еквівалентним lerping зворотним матрицям, але не обов'язково лерпуванню передових матриць або lerping об'єкту (оскільки інверсія не є лінійною операцією). І я не думаю, що перенормувати промінь після того, як лерп цілком виправляє речі - ви все ще можете бути в стриженій, нерівномірній масштабній системі координат, яка може накрутити математику у ваші підпрограми перетину тощо.
Натан Рід

[Див. Редагування; краща картина] Принаймні, я думаю, що перенормування повинно виключати проблеми з перетином - але це я вважав; lerping проміння не lerping об'єкт. У своїй відповіді ви запропонували лерпінг [зворотний?] TRS, а потім рекомбінацію. Це так, як це роблять виробники виробництва?
imallett

3

Я не думаю, що вам вдасться отримати дуже далеко, AFAICS, єдине лінійне наближення до досить нелінійної інтерполяції, але, можливо, цей документ / презентація Грибеля та ін про розмиття руху при растеризації може допомогти.


Я розбиваю його на лінійне наближення, що досить типово. Можна обробити більш складні перетворення за допомогою декількох таких кроків. ¶ Моя проблема полягає не в тому, щоб перетворення було нелінійним, а в правильності лінійного наближення до нього.
imallett
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.