Transformasi Sinar ke Ruang Objek untuk Motion Blur

12

Raytracer saya mendukung berbagai objek. Untuk memotongnya, saya menggunakan teknik standar mengubah sinar menjadi ruang-objek. Ini bekerja dengan luar biasa sampai saya menambahkan gerakan kabur.

Saya memodelkan blur sebagai urutan transformasi (untuk menyederhanakan diskusi, katakanlah tepat dua), bukan satu. Pendekatan saya adalah mengambil transformasi invers dari sinar di kedua keyframe dan lerp posisi / arah.

Ini sepertinya berfungsi dengan baik untuk terjemahan, tetapi itu rusak untuk rotasi. Misalnya, ada dua segitiga yang mengalami rotasi 30 dan 90 derajat:

rotasi1
(4 sampel, rekonstruksi MN, sampel merah berasal dari dekat dua keyframe)

Di sudut-sudut, saya berharap sampel yang telah dililitkan terletak pada garis lurus antara kedua simpul. Sebaliknya, mereka menonjol keluar. Ini salah. Dalam adegan yang lebih menarik dengan transformasi yang lebih menarik, itu menyebabkan berbagai mode kegagalan. Misalnya inilah baling-baling yang mengalami rotasi 45:

rotasi 2
(100 sampel, normals divisualisasikan)

Beberapa masalah disebabkan oleh pemecahan BVH (mengasumsikan ekstrem objek terletak pada keyframe), tetapi bahkan brute force membuat tidak benar.

Saya dapat memperbaiki semua ini dengan melakukan transformasi ke depan saja (mengubah objek, bukan ray), tetapi ini hanya bekerja untuk objek di mana itu mungkin (hanya segitiga, sebenarnya).


Bagaimana saya bisa membuat raytracer saya menghasilkan perkiraan linear untuk transformasi (terutama rotasi) dengan mengubah sinar, bukan objek?

Imallett
sumber

Jawaban:

7

Menerapkan posisi ray / arah antara keyframe harus sama dengan melilitkan matriks terbalik antara keyframe dan mentransformasikannya dengan matriks lerped. Masalahnya adalah, jika keyframe memiliki rotasi yang berbeda, matriks yang bertil secara umum akan menjadi sesuatu yang "aneh", dengan geser, skala tidak seragam, dll.

Saya tidak akan terkejut jika beberapa persimpangan dan rutinitas naungan Anda tidak berfungsi dengan baik dalam sistem koordinat yang terdistorsi, kecuali Anda telah menguji dan mengeraskannya secara khusus terhadap kasing seperti itu. (Misalnya, mengambil produk titik dari dua unit vektor tidak memberikan jawaban yang sama dalam sistem koordinat yang dicukur seperti pada yang ortonormal.)

Ini hanya dugaan, tetapi ini mungkin bekerja lebih baik jika Anda memilih metode interpolasi di mana terjemahan, rotasi, dan skala (jika ada) diler secara terpisah (menggunakan angka empat untuk bagian rotasi) dan digabungkan kembali.

Nathan Reed
sumber
Apakah Anda yakin memfilter objek yang ditransformasikan ke depan sama dengan melilitkan sinar yang ditransformasikan ke belakang? Sebagai contoh, saya dapat menormalkan ulang sinar setelah lerp (dan skala jarak hit yang sesuai). Ini tidak mengubah hasilnya.
imallett
@imallett Menerapkan sinar harus sama dengan melilitkan matriks terbalik, tetapi tidak perlu melilitkan matriks maju atau melilitkan objek (karena inversi bukan operasi linier). Dan saya tidak berpikir renormalisasi sinar setelah lerp memperbaiki semuanya - Anda masih bisa berada dalam sistem koordinat yang dicukur dan tidak berseragam yang dapat mengacaukan matematika dalam rutinitas persimpangan Anda dan sejenisnya.
Nathan Reed
[Lihat edit; gambar yang lebih baik] Setidaknya, saya pikir renormalisasi harus menyingkirkan masalah dengan persimpangan - tapi itulah yang saya pikirkan; mem-ray-kan bukan mem-flash objek. Dalam jawaban Anda, Anda menyarankan lerping [terbalik?] TRS dan kemudian menggabungkan kembali. Apakah ini cara penyaji produksi melakukannya?
imallett
3

Saya tidak berpikir Anda akan terlalu jauh dengan, AFAICS, pendekatan linear tunggal untuk interpolasi yang agak non-linear, tapi mungkin makalah ini / presentasi oleh Gribel et al tentang blur dalam rasterisasi mungkin membantu.

Simon F
sumber
Saya memecahnya menjadi perkiraan linier, yang cukup khas. Seseorang dapat menangani transformasi yang lebih kompleks dengan beberapa langkah seperti itu. Masalah saya bukan pada membuat transformasi nonlinear, tetapi dalam membuat pendekatan linier untuk memperbaikinya.
Imallett