- Eksperimen yang mendorong motion blur hingga “batas logis” ini mendefinisikan ulang blur dengan cara mengurangi perbedaan antara motion smear pada penglihatan manusia dan pemutaran di layar, lalu menerapkannya pada animasi prosedural real-time
- Dalam pemandangan alami, sel kerucut retina mengintegrasikan rangsangan cahaya secara temporal sehingga muncul blur pada tahap reseptor, tetapi pada layar ber-frame rate rendah, video tanpa blur terlihat seperti frame yang bertumpuk alih-alih smear alami
- Motion blur tradisional merata-ratakan rentang waktu satu frame sehingga lebih mendekati pemandangan alami, tetapi pada objek cepat diskontinuitas bisa tetap tersisa, sehingga shutter function yang menurunkan bobot di awal dan akhir menghasilkan hasil yang lebih alami
- Implementasi shader real-time ini menghindari multisampling dan analytical ray tracing, lalu merepresentasikan objek bergerak sebagai fungsi kepadatan dalam koordinat yang mencakup waktu, kemudian merender nilai integral waktunya dengan volume ray casting
- “Torusphere Accelerator” final menerapkan blur pada bola yang bergerak mengorbit dan torus yang berputar hingga secara praktis mencapai kecepatan tak terbatas, dan karena tidak ada “normal yang di-motion blur”, normal permukaan ditangani dengan interpolasi terpisah
Perbedaan antara gerakan di pemandangan alami dan pemutaran di layar
- Motion blur pada awalnya adalah artefak film yang muncul karena subjek bergerak saat shutter kamera terbuka, tetapi menjadi berguna karena membuat video secara perseptual lebih mirip dengan pemandangan alami
- Dalam 3D dan animasi, “mensimulasikan kamera” dan “terlihat alami” tidak selalu merupakan tujuan yang sama
- Untuk melihat motion blur yang alami, diperlukan empat pertanyaan
- Bagaimana gerakan pada pemandangan alami dipersepsikan
- Bagaimana pemandangan yang diputar di layar dipersepsikan
- Apa perbedaan persepsi antara kedua kasus tersebut
- Bagaimana motion blur video dapat mengurangi perbedaan itu
Integrasi temporal sel kerucut dan motion smear
- Dalam lingkungan terang, pemrosesan awal penglihatan manusia ditangani oleh sel kerucut, dan phototransduction tidak terjadi secara instan
- Keterlambatan rangsangan cahaya dapat dimodelkan sebagai cara yang menghaluskan rangsangan ke arah waktu
- Contoh sel kerucut ikan mas dari Howlett et al. (2017) menunjukkan jumlah foton yang masuk ke fotoreseptor, fungsi pembobotan, dan hasilnya berupa “effective stimulus”
- Dengan menggabungkan bentuk fungsi pembobotan ini dan waktu respons sel kerucut manusia yang diketahui, kita bisa mensimulasikan gambar yang dipersepsikan dari pemandangan masukan
- Hasilnya, bahkan dalam pemandangan alami sudah ada blur alami pada tingkat fotoreseptor, yaitu motion smear
- Simulasi contoh mengasumsikan pengamat menatap titik tetap tanpa melacak objek dengan mata
Peran motion blur tradisional pada video layar
- Saat melihat layar dengan jumlah frame per detik yang terbatas, gambar perseptual dari video tanpa motion blur tampak seperti frame yang saling menumpuk, bukan motion smear yang diharapkan
- Video yang diberi motion blur tidak lagi membuat setiap frame menunjukkan satu momen, melainkan merata-ratakan semua momen dalam rentang waktu yang dicakup frame itu
- Ini mirip dengan video yang dibuat menggunakan kamera dengan shutter terbuka selama durasi satu frame
- Gambar perseptual dari pendekatan ini menjadi jauh lebih mirip dengan kasus pemandangan alami
Mengurangi diskontinuitas dengan shutter function
- Bahkan pada motion blur tradisional, pada kecepatan objek tertentu masih bisa tersisa artefak diskontinuitas dalam motion smear
- Shutter function tidak merata-ratakan seluruh interval frame secara seragam, tetapi memberi bobot lebih rendah pada awal dan akhir frame, serta bobot lebih tinggi pada momen tengah
- Namanya berasal dari analogi efisiensi shutter pada kamera diafragma, tetapi di sini tujuannya bukan simulasi kamera, melainkan memilih fungsi yang mengurangi perbedaan persepsi antara layar dan pemandangan alami
- Masalah ini sangat mirip dengan pembuatan window function dalam pemrosesan sinyal, dan window function yang populer memberi hasil yang baik
- Berdasarkan uji subjektif, shutter function menjadi berguna ketika jarak yang ditempuh objek dalam satu frame sebanding dengan lebar objek itu sendiri
- Pada kecepatan rendah kebutuhannya tidak terlalu besar, tetapi pada objek yang bergerak cepat hasilnya terlihat lebih alami dan frame diam juga tampak lebih halus
- Pendekatan ini bukan simulasi kamera yang lazim, dan rentang waktu frame berurutan bisa saling tumpang tindih
- Simulasi kamera umum tidak memiliki tumpang tindih waktu antar-frame, dan sering kali membuang momen di antara frame
Membuat “motion blur tak terbatas” dengan shader real-time
- Animasi yang dituju menggabungkan bola yang bergerak mengorbit dan torus yang berputar, dan keduanya diberi motion blur hingga secara praktis mencapai kecepatan tak terbatas
- Untuk membuat hasil akhir dapat diinteraksikan, implementasinya dibuat sebagai shader real-time
- Multisampling adalah pendekatan yang merender adegan pada beberapa titik waktu di setiap frame
- Semakin tinggi kecepatan objek, jumlah sampel yang dibutuhkan meningkat secara proporsional
- Ini tidak cocok untuk animasi “kecepatan tak terbatas”
- Analytical ray tracing motion blur juga bisa menjadi alternatif
- Pada mesh ada pendekatan yang mengubah segitiga menjadi prisma
- Pendekatan analitis murni juga dimungkinkan, tetapi di sini bisa menjadi cara yang lebih berat
- Kedua pendekatan tersebut tetap memerlukan multisampling untuk penanganan material
- Implementasi yang dipilih adalah pendekatan yang nyaris seperti hack dan bisa disebut “integrated volume motion blur”
- Objek bergerak direpresentasikan sebagai fungsi yang menerima koordinat termasuk waktu, lalu mengembalikan kepadatan bernilai 1 di dalam objek dan 0 di luar
- Dengan mengintegralkan fungsi kepadatan ini terhadap waktu, diperoleh kepadatan yang sudah di-motion blur untuk rentang waktu arbitrer
- Hasilnya dirender dengan volume ray casting
- Ini bukan pendekatan yang akurat seperti fotografi, tetapi mampu menangani lintasan yang sangat panjang dengan performa real-time
Kepadatan motion blur untuk bola yang bergerak mengorbit
- Bola yang bergerak mengorbit dapat direduksi menjadi masalah lingkaran yang bergerak mengorbit dalam penampang 2D
- Pusat lingkaran berada pada jarak R dari titik asal, dan jari-jari lingkaran dinyatakan sebagai a
- Dalam koordinat polar, jika sudut permukaan θ untuk jari-jari tertentu r diketahui, maka dapat dihitung saat titik itu masuk ke dalam objek dan saat keluar darinya
- Jika objek bergerak mengorbit dengan kecepatan v, hal ini dinyatakan dengan mengurangkan suku waktu vt pada koordinat sudut
- Panjang irisan antara interval waktu keberadaan objek I pada suatu titik ruang dan interval waktu frame saat ini F menjadi kepadatan yang sudah di-motion blur
- Jika shutter function s diterapkan, maka kepadatan diperoleh dengan mengalikan kepadatan dengan s(t) lalu mengintegralkannya, dan jika ada antiturunan S dari s, maka dapat dihitung dalam bentuk
S(max I) - S(min I) - Shutter function berbasis sinus yang dipakai dalam animasi memiliki nilai integral 1, dan dirancang agar meskipun saling tumpang tindih pada sumbu waktu, jumlahnya pada sembarang momen selalu 1
Torus yang berputar dan spiric section
- Torus yang berputar juga diproses dengan prosedur yang sama seperti bola
- Penampang vertikal 2D dari torus adalah spiric section, atau Spiric of Perseus
- Jika minor radius torus dinyatakan sebagai a, major radius sebagai b, dan penampang diambil pada posisi tertentu c, maka area dalam torus dapat dinyatakan dengan persamaan koordinat polar
- Dengan menyelesaikan sudut permukaan θ, diperoleh dua kasus, positif dan negatif, lalu area di antara kedua batas itu digunakan sebagai kepadatan dari solid torus
- Setelah itu, langkah berikutnya sama seperti pada bola yang bergerak mengorbit: menghitung interval waktu dan menerapkan integral shutter function
Torusphere Accelerator final
- Adegan final menggabungkan bola dan torus, lalu dirender dengan volume ray casting standar
- Surface normals memerlukan penanganan tambahan
- Karena tidak ada konsep “normal permukaan yang di-motion blur”, implementasinya mencampurkan normal untuk digunakan
- Animasi live mendukung interaksi dasar dengan mouse dan sentuhan
- Karena mungkin tidak bekerja dengan baik di semua perangkat, halaman tersebut juga menyediakan video yang sudah dirender sebelumnya di bagian atas
- Shader final juga dapat dilihat di Shadertoy
Isu lanjutan dari diskusi HN
- Dalam diskusi Hacker News, muncul pandangan bahwa kualitas motion blur adalah pilihan artistik
- Pentingnya transformasi ruang warna juga ikut dibahas
- Perkembangan historis motion blur dalam VFX film juga didiskusikan
- Film CG awal Jurassic Park disebut sebagai contoh penggunaan box shutter function yang secara fisik tidak mungkin
- Motion blur dalam game tetap menjadi topik yang kontroversial
1 komentar
Komentar Hacker News
Kompromi saat merender atau merekam motion blur pada refresh rate layar yang terbatas adalah bahwa penonton dapat mengikuti objek yang bergerak di layar dengan matanya
Di dunia nyata, jika itu dilakukan, objeknya menjadi tajam. Jadi, blur harus diterapkan dengan melacak gerakan mata dan menyesuaikannya dengan gerakan relatif, atau motion blur harus dihilangkan sama sekali pada refresh rate tak terbatas. Keduanya belum praktis dengan teknologi saat ini, jadi hasilnya pasti akan terasa agak janggal di suatu sisi. Sutradara atau game designer yang baik akan memperkirakan bagaimana mata penonton bergerak lalu memilih shutter speed atau blur rendering yang sesuai
Jika konten hasil rendering tidak bisa berbicara dalam bahasa visual yang sama, berarti ada satu alat yang hilang, terlepas dari refresh rate. Tentu ada batas tertentu juga, jadi kalau perbedaannya masih terlihat jelas pada 400Hz, itu akan cukup mengejutkan
Hal menarik dari konten yang dirender adalah bahwa ini bisa diperluas lebih jauh. Misalnya, kita bisa bermain-main dengan konsep yang kita kira sudah dipahami, seperti shutter angle yang melebihi durasi satu frame
Metode ini menurunkan kecerahan layar maksimum dan memerlukan frame rate minimum agar flicker bisa dihindari, tetapi mengurangi persistence blur, yaitu blur pelacakan mata yang tidak ada di dunia nyata. Tepatnya, untuk menghilangkan blur pelacakan sepenuhnya, setiap frame harus ditampilkan hanya dalam waktu yang sangat singkat hingga mendekati nol, jadi itu tidak realistis. Meski begitu, headset VR memang menggunakan pendekatan kilatan/strobe seperti ini
Inilah juga alasan layar CRT dan plasma memiliki kejernihan gerak yang jauh lebih baik daripada LCD atau OLED. Yang pertama menampilkan tiap frame sebagai kilatan singkat, sedangkan yang kedua memakai metode sample-and-hold, yaitu mempertahankan frame yang sama selama seluruh durasi frame. Misalnya, pada 60Hz frame dipertahankan selama 1/60 detik. Karena itu, 60FPS pada CRT bisa terlihat lebih mulus daripada 120FPS pada OLED
Dalam game, ada juga cara menambahkan banyak frame dengan teknik reprojection. Ini dapat mendekati pergerakan kamera nyata tanpa harus merender banyak frame mahal di engine. Ini juga sudah dipakai di VR, meski belum sampai frame rate yang sangat tinggi. Penjelasan yang baik ada di artikel ini:
https://blurbusters.com/frame-generation-essentials-interpol...
Disebutkan bahwa sekitar 1000FPS dengan reprojection cukup realistis, jadi masalah blur pelacakan mungkin bisa diatasi tanpa menurunkan kecerahan layar
Ini bisa diterapkan melalui output pemindaian CRT/OLED, biasanya dengan metode rolling, atau melalui backlight strobing pada LCD, umumnya dengan metode full-frame. Namun, jika tiap frame ditampilkan singkat pada 24Hz, flicker menjadi sangat mengganggu sehingga proyektor film dulu menampilkan frame film 2~3 kali. Pada 50Hz, hasilnya nyaris masih bisa ditoleransi, sehingga beberapa TV CRT Eropa melakukan frame doubling dari video 50Hz menjadi 100Hz, tetapi akibatnya objek bergerak kadang terlihat ganda. Untuk gerakan yang mulus secara optimal dan kelelahan mata minimal, idealnya dibutuhkan setidaknya 70~75Hz, tetapi itu membuat video yang direkam pada 60FPS sulit ditampilkan tanpa judder atau tearing
Bertolak belakang dengan harapan bahwa ini akan membuat media visual terasa lebih realistis, di game justru terasa membuat video game tampak seperti tiruan murahan dari film yang diedit berlebihan
Ini masuk akal untuk gerakan yang sangat cepat, lewat sangat dekat, atau terutama gerakan yang bukan dari sudut pandang diri sendiri. Tapi terlalu sering disalahgunakan pada situasi seperti “karakter berputar cepat”
Saat kita menolehkan kepala atau mata dengan cepat, kita tidak melihat gambar yang buram, melainkan melihat gambar baru, dan otak membuang data di antaranya. Coba lihat satu mata di cermin lalu pindahkan fokus ke mata yang lain. Apakah mata atau wajahnya terlihat buram?
Saat game menambahkan blur ketika sudut pandang digerakkan, yang terjadi hanya tampilan baru jadi lebih lambat muncul. Mengganggu dan tidak realistis
Tes yang lebih baik adalah melihat jari atau tangan sambil mengayunkannya sangat cepat. Anda akan melihat motion blur saat jari bergerak. Dalam beberapa kasus, bahkan “frame” individual tampak sebagai jejak. Misalnya, lampu belakang mobil modern sebenarnya tidak menyala terus, melainkan berkedip sangat cepat dengan PWM. Karena itu, jika Anda menggerakkan mata sambil melihat lampu belakang di malam hari, yang terlihat bukan gambar buram melainkan rangkaian titik. Setelah tahu trik ini, Anda bisa membedakan lampu analog dan PWM dari apakah tampilannya buram atau berupa titik-titik terputus
Tetapi ketika berada di dalam mobil atau terbang di udara dalam game, gambar bisa terdistorsi saat melirik. Yang diharapkan adalah blur yang terasa tertarik seiring percepatan, dan efek seperti ini bisa membuat adegan cepat jauh lebih menarik. Masalahnya, motion blur hampir selalu diimplementasikan dengan buruk di mana-mana
Tiga dosa terbesar adalah membuat objek blur terlalu jauh, membuat blur pada hal yang seharusnya tidak di-blur, dan membuat blur pada seluruh adegan. Yang ketiga pada akhirnya kembali ke yang kedua, jadi mungkin sebenarnya hanya ada dua dosa. Yang paling penting adalah motion blur harus halus. Motion blur yang benar bukan membuat game tampak kabur, melainkan lebih realistis dan lebih mulus
Jika sebuah objek bergerak 50 piksel di antara frame, lebar blur tidak boleh melebihi 50 piksel. Bahkan untuk hasil yang lebih samar, kemungkinan sekitar 25 piksel lebih tepat. Namun entah kenapa, game balap sering memberi radial blur tebal ke seluruh adegan saat melaju kencang, dan menurut saya itu merusak adegannya
Demikian juga, objek yang tidak bergerak relatif terhadap kamera seharusnya tidak memiliki motion blur. Banyak game salah di sini. Mereka memburamkan adegan lewat post-processing saat kamera berputar. Itu masuk akal jika adegannya sepenuhnya statis, dan dari sisi biaya komputasi juga sangat efisien. Tetapi jika kamera berputar untuk mengikuti suatu objek, objek yang sedang diikuti seharusnya tidak buram. Dalam game balap, jika mobil di samping melaju dengan kecepatan yang sama dengan saya, mobil itu seharusnya tidak di-blur
Cara pasti untuk mendapatkan motion blur yang benar adalah merender beberapa frame penuh secara berurutan lalu mencampurnya, tetapi dibutuhkan sangat banyak sampel agar hasilnya enak dilihat. Jika tidak, saat sesuatu seperti garis vertikal melintas di layar, yang terlihat bukan blur halus melainkan rangkaian pita vertikal
Mungkin yang terbaik adalah pendekatan hibrida. Setiap objek di adegan dirender terpisah, lalu blur post-processing per objek diterapkan sesuai arah geraknya relatif terhadap kamera. Hanya saja, penanganan urutan Z bisa menjadi masalah besar
Saat sesekali bisa bermain di 120FPS, meskipun proyektornya sayangnya terkunci di 60Hz, saya lebih memilih bermain tanpa motion blur
Ringkasan yang bagus ada di [1]
Menariknya, sampai makalah klasik tentang pemodelan efisiensi shutter [2] terbit pada 2005, semua renderer yang dipakai untuk produksi VFX menggunakan box shutter. Artinya shutter terbuka seketika, tetap terbuka selama waktu yang ditentukan, lalu tertutup seketika
Jika melihat adegan motion blur yang ekstrem di film seperti “Jurassic Park” atau “The Mask”, itu adalah PhotoRealistic RenderMan dengan box shutter
Kasus pertama implementasi parameterisasi dari [2] secara 1:1 di lapangan dilakukan di [3] pada tahun yang sama saat makalah itu terbit, dan tidak berubah sampai sekarang. Karya pertama yang memakainya adalah “Charlotte's Web”, dan hanya diterapkan pada karakter laba-laba yang dibuat Rising Sun Pictures menggunakan [3]
Pixar juga menambahkannya beberapa tahun kemudian, tetapi di [4] mereka mendorongnya agak berlebihan. Sekarang kebanyakan renderer offline memiliki fitur ini dan menyebutnya kurva shutter
[1] O. Navarro et al.: Motion Blur Rendering: State of the Art (https://citeseerx.ist.psu.edu/doc_view/pid/fc23fb525cafa8fe6...)
[2] Stephenson, Ian: Improving Motion Blur: Shutter Efficiency and Temporal Sampling (https://staffprofiles.bournemouth.ac.uk/display/journal-arti...)
[3] https://www.3delight.com/, khususnya lihat https://nsi.readthedocs.io/en/latest/nodes.html
[4] https://renderman.pixar.com/resources/RenderMan_20/cameramod...
Demo tersebut tampaknya dihitung di ruang sRGB. Artinya memakai nilai kecerahan nonlinier, jadi kemungkinan besar di situlah asal sebagian besar alasan blur-nya terasa tidak alami
Untuk mensimulasikan fenomena fisik, pemrosesan seharusnya dilakukan dengan nilai kecerahan linier dan baru dikonversi ke sRGB di tahap akhir
Kalau efek nonlinier dari persepsi visual manusia sepenuhnya meniadakan hal ini, mungkin lain ceritanya, tetapi kalau begitu setidaknya hal itu perlu disebutkan
Akan kucek lagi, dan kalau memang benar akan kuperbarui ilustrasi interaktif dan isi artikelnya. Shader utama “torusphere” tampaknya aman karena motion blur-nya memang tidak realistis dan sudah disetel manual, tetapi beberapa ilustrasi interaktif di bagian awal menerapkan teorinya secara langsung, jadi kritik ini memang berlaku di sana. Meski begitu, menurutku ini tetap tidak membatalkan gagasan inti artikel secara keseluruhan
Demo torus-nya benar-benar keren. Menarik melihat bagaimana frame rate tinggi mengubah persepsi blur
Aku memakai display 240Hz, dan di gambar 5 aku tidak melihat lingkaran-lingkaran terpisah sampai sekitar 12rad/s. Bahkan pada 40rad/s pun aku tidak bisa merasakan perbedaan antara opsi shutter tradisional dan shutter sinus saat sedang bergerak
Hanya dari kelancaran gerakan mouse dan latensi rendah saja, aku sangat merekomendasikan 240Hz. Kembali ke pointer mouse 60Hz itu benar-benar, benar-benar berat
Beberapa orang memang benar-benar tidak terlalu peduli. Aku juga kurang paham perdebatan tentang input lag atau perang suci terminal emulator. Aku tidak bisa merasakan bedanya bekerja di framebuffer console dengan bekerja lewat ssh yang ditambah latensi 50ms
Aku bisa melihat perbedaan game 30FPS dan 60FPS, tetapi hanya kalau memang kuperhatikan. Selama nilainya stabil dan tidak naik turun di antara keduanya, aku tidak terlalu peduli
Hanya saja, antarmuka dengan transisi yang lebih halus memang memberi rasa lebih stabil, dan aku jadi penasaran apakah refresh rate tinggi bisa memengaruhi kondisi mental seiring waktu
Jika torus dan bola di belakangnya dibuat oleh motion blur, bukankah seharusnya mereka sebagian transparan? Rasanya aneh karena terlihat seperti pada suatu titik mereka kembali menjadi buram penuh
Itulah sebabnya judulnya motion blur all the way down
Namun, cahaya yang dipancarkan benda bergerak seharusnya lebih rendah daripada benda diam. Jadi semakin panjang jaraknya, benda itu seharusnya makin gelap
Ini adalah upaya untuk mensimulasikan sistem visual manusia, bukan sekadar mensimulasikan kamera film. Arah ini terasa berguna
Ini adalah selangkah lebih dekat ke kenyataan, alih-alih hanya meniru teknologi usang. Motion blur berbasis shutter pun mungkin suatu hari akan lenyap seperti cetak sepia, film hitam-putih 16FPS, atau roda berbentuk elips yang muncul karena shutter mekanis
Merekonstruksi realitas bukanlah tujuannya. Itu tidak bisa dicapai
Sepertinya tulisan ini ikut naik karena ambient.garden baru saja muncul di halaman depan. Setelah kubaca ulang, rasanya ini sebenarnya seharusnya menjadi dua artikel
Aku masih suka bagian awalnya. Bagian itu menggali dengan baik apa itu motion blur dan secara teori seharusnya seperti apa. Bagian belakangnya adalah penjelasan yang agak kalut dan sangat dipadatkan tentang cara kerja shader untuk animasi “torusphere” berbasis motion blur tertentu. Setidaknya buatku, bagian itu terutama berguna karena mencegah kodenya menjadi sepenuhnya mustahil dipahami pada saat ini. Kalau dipikir-pikir lagi, peralihan antara dua bagian itu terasa seperti melompat ke danau yang membeku. Maaf soal itu
Syukurlah ternyata itu bukan semata karena segelas anggur yang baru kuminum
Aku pernah beberapa kali bermain-main dengan motion blur sebagai fungsi proyeksi dari ekstrusi 4 dimensi, tetapi dalam konteks nyatanya—video dan tekstur—pendekatan itu jadi tidak praktis dibanding hardware sampling dengan cache. Meski begitu, setelah melihat tulisan ini aku jadi berpikir, “bagaimana kalau kucoba sekali lagi saja”
Demo perbandingan real-time-nya luar biasa. Saat mengikutinya sampai titik itu, secara intelektual aku merasa “sudah paham”, tetapi ketika bisa benar-benar menyalakan dan mematikan motion blur, perbedaannya jadi sangat jelas
Setelah melihat motion blur all the way down, entah kenapa aku jadi memikirkan teori string, atom, sampai bagaimana alam semesta terbentuk
Tentu saja, semakin didalami semuanya justru makin aneh