Apa itu Probe Harmonik & Cahaya?

14

Apa itu Probe Harmonik & Cahaya ? Seberapa bermanfaatkah mereka dalam grafik komputer? Apa yang sebenarnya mereka lakukan? Saya pernah mendengar kata harmonik bola & Probe Ringan di mana-mana, dari presentasi siggraph hingga posting blog.

Baru-baru ini Matt Pettineo memposting seri blog 6 bagian pada mereka tetapi saya masih tidak mengerti apa itu.

Apakah ini cara lain untuk meningkatkan pencahayaan sekitar?

Arjan Singh
sumber

Jawaban:

11

Dasar-dasar Harmonik Bulat

Spherical Harmonics adalah cara untuk merepresentasikan fungsi 2D pada permukaan bola. Alih-alih domain spasial (seperti cubemap), SH didefinisikan dalam domain frekuensi dengan beberapa properti menarik dan operasi yang relevan dengan pencahayaan yang dapat dilakukan secara efisien. Dengan meningkatnya "urutan" SH, Anda dapat mewakili frekuensi (detail) fungsi yang lebih tinggi seperti yang diilustrasikan dalam gambar di bawah ini ( adalah urutan SH). Dengan menskalakan dan menjumlahkan "fungsi dasar" di bawah ini, Anda dapat mewakili segala jenis fungsi 2D pada lingkup hingga frekuensi yang ditentukan oleh fungsi. Fungsi dasar didefinisikan dengan " polinomial Legendre terkait ", tetapi biasanya Anda tidak perlu membuatnya sendiri tetapi dapat menggunakan derivasi yang ada untuk harmonik bola sungguhan . lmasukkan deskripsi gambar di sini

Salah satu operasi yang dapat dilakukan secara efisien di SH disebut " konvolusi ", yang berarti mengintegrasikan produk dari dua fungsi 2D bola di bola. Ini adalah operasi yang umum dalam perhitungan pencahayaan, mis. Salah satu fungsi bisa menjadi pencahayaan insiden Anda dan satu fungsi BRDF. Ketika direpresentasikan sebagai SH, operasi ini hanyalah produk titik dari dua vektor koefisien SH.

Operasi lain yang menarik adalah kemampuan untuk melakukan penyaringan low-pass yang efisien. Karena SH diwakili dalam domain frekuensi, ini hanyalah masalah penskalaan atau nolkan beberapa koefisien SH. Beberapa operasi lain di sisi lain bisa sulit untuk dilakukan di SH dibandingkan dengan domain spasial, misalnya jika Anda ingin memutar fungsi direpresentasikan sebagai SH, itu bisa menjadi cukup mahal untuk SH pesanan yang lebih tinggi. Jadi itu sangat tergantung pada masalah apakah itu cocok untuk dilakukan di SH atau tidak.

SH umumnya digunakan untuk mewakili hanya fungsi frekuensi rendah (yaitu fungsi yang berubah dengan lancar) karena frekuensi yang lebih tinggi memerlukan peningkatan jumlah penyimpanan (koefisien SH) dan pemrosesan. Inilah sebabnya mengapa Anda tidak melihat SH digunakan misalnya untuk mengganti pantulan specular pada permukaan mengkilap. Ada juga Zonal Spherical Harmonics , yang dapat digunakan untuk mengurangi penyimpanan & komputasi untuk fungsi 2D yang simetris secara rotasi tentang sumbu-z, dengan hanya menyimpan elemen diagonal dari matriks koefisien SH. Juga Hemispherical Harmonics dapat digunakan jika Anda hanya perlu berurusan dengan fungsi hemispherical (juga umum dalam pencahayaan) dengan keuntungan dapat mewakili frekuensi yang sama seperti SH dengan koefisien yang lebih sedikit.

Satu operasi yang juga perlu Anda lakukan adalah "proyeksi SH" untuk mengubah data domain spasial menjadi SH. Anda dapat melakukan operasi ini dengan melakukan konvolusi data domain spasial dengan fungsi berbasis SH. Properti SH yang menarik adalah bahwa tidak seperti representasi domain spasial, SH tidak menderita aliasing, jadi Anda tidak memiliki artefak aliasing bahkan ketika memproyeksikan ke SH dengan pesanan sangat rendah.

Probe ringan

Sekarang setelah Anda memahami operasi dasar dan properti SH, kami dapat memikirkan cara menerapkannya pada GI. Probe cahaya merekam berapa banyak cahaya yang datang dari setiap arah ke titik di mana probe berada. Ini adalah fungsi 2D pada bola dan dapat direpresentasikan sebagai SH (atau 3 fungsi SH untuk merah, hijau dan biru). Bergantung pada jumlah detail pencahayaan yang ingin kita enkode ke dalam probe, kita dapat memilih urutan SH.

Untuk probe cahaya yang hanya digunakan untuk pencahayaan difus Lambertian, SH dengan orde rendah cukup karena konvolusi dilakukan dengan cosine-lobe, yang dapat direpresentasikan dengan orde-2 SH (9 koefisien). Koefisien SH untuk probe cahaya dapat dihasilkan hanya dengan merender cubemap pada titik probe dan kemudian memproyeksikannya ke SH.

Saat merender geometri, beberapa probe cahaya terdekat diambil dan hasilnya diinterpolasi untuk mendapatkan fungsi pencahayaan insiden di suatu titik di ruang angkasa. Hal ini dapat dilakukan misalnya dengan menginterpolasi koefisien SH dari probe terdekat secara langsung dan kemudian melakukan konvolusi dengan pixel normal cosine lobe yang berorientasi pada domain SH.

JarkkoL
sumber
Apa manfaat menggunakan metode ini dibandingkan dengan Pencahayaan berbasis Gambar yang lebih sederhana?
Arjan Singh
Anda dapat memiliki pencahayaan frekuensi rendah kualitas yang lebih baik dengan penyimpanan yang sama dan persyaratan kinerja daripada katakanlah menggunakan cubemaps.
JarkkoL
16

Harmonik bola

Jika Anda tahu apa itu transformasi Fourier, Anda sudah hampir tahu apa itu harmonik bola: mereka hanya transformasi Fourier tetapi pada bola bukannya basis linear. Yaitu, sementara transformasi Fourier adalah cara berbeda untuk mewakili fungsi , harmonik bola adalah hal yang analog dengan fungsi kutub .f ( θ , ϕ )f(x)f(θ,ϕ)

Jika Anda tidak tahu apa itu transformasi Fourier, Anda perlu tahu sebelum Anda dapat memahami harmonik bola. Transformasi Fourier memungkinkan Anda menghadirkan sinyal sebagai serangkaian gelombang sinus dan kosinus, masing-masing dengan frekuensi dua kali lipat dari yang terakhir. Artinya, Anda dapat mewakili sinyal sebagai rata-rata, ditambah gelombang sinus yang panjang gelombangnya sama dengan panjang sinyal, ditambah gelombang sinus dua kali panjang gelombang itu, dan seterusnya. Karena transformasi Fourier membuat Anda sesuai dengan panjang gelombang ini, Anda hanya perlu merekam amplitudo masing-masing.

Kami biasanya menggunakan transformasi Fourier untuk mewakili gambar, yang hanya merupakan sinyal digital 2D. Ini berguna karena Anda dapat membuang beberapa gelombang sinus (atau mengurangi presisi yang digunakan untuk menyimpan amplitudo mereka) tanpa secara signifikan mengubah seperti apa gambar itu bagi mata manusia. OTOH, membuang piksel mengubah banyak gambar.

Dalam sinyal sampel seperti gambar, jika Anda menggunakan jumlah gelombang sinus yang sama dengan sampel (piksel) dalam gambar asli, Anda dapat merekonstruksi gambar dengan tepat, jadi setelah Anda mulai membuang frekuensi apa pun, Anda membuat gambar mengambil lebih sedikit penyimpanan.

Harmonik bola seperti transformasi Fourier, tetapi alih-alih gelombang sinus, mereka menggunakan fungsi bola, jadi alih-alih fungsi linear (seperti gambar), mereka dapat mewakili fungsi yang didefinisikan pada bola (seperti peta lingkungan).

Probe cahaya

Seperti halnya gambar standar merekam semua cahaya yang mencapai titik tertentu melalui bidang gambar, probe cahaya merekam semua cahaya yang mencapai titik tertentu dari segala arah. Mereka pertama kali keluar dari efek film. Jika Anda ingin menambahkan objek yang dihasilkan komputer ke adegan dunia nyata, Anda harus dapat menerangi objek sintetis dengan pencahayaan dunia nyata. Untuk melakukan itu, Anda perlu tahu cahaya apa yang mencapai titik di adegan di mana objek sintetis akan berada. (NB Meskipun saya mengatakan "pencahayaan", Anda sedang merekam gambar dari semua cahaya, sehingga dapat digunakan untuk refleksi juga.)

Karena Anda tidak dapat memiliki kamera dengan lensa bola yang merekam semua cahaya yang mencapai satu titik dari semua arah, Anda merekam ini dengan mengambil foto normal dari cermin bulat, dan kemudian memproyeksikan ulang gambar ke bola.

Di luar efek film, lebih umum menggunakan probe cahaya yang dihasilkan dari adegan buatan. Bayangkan Anda memiliki beberapa algoritma mahal untuk menghitung penerangan global (GI) dalam sebuah adegan, dan Anda juga memiliki beberapa objek yang lebih kecil bergerak dalam adegan ini (seperti tingkat permainan dengan pemain di dalamnya). Anda tidak dapat menjalankan keseluruhan algoritma GI setiap kali objek bergerak, jadi Anda menjalankannya sekali dengan adegan statis, dan menyimpan probe cahaya yang diambil di berbagai titik di level. Kemudian Anda bisa mendapatkan perkiraan yang baik untuk GI dengan menyalakan pemain dengan probe cahaya mana pun yang paling dekat dengannya.

Menggunakannya bersama

Secara umum Anda ingin menyaring sisi tajam dalam pencahayaan global Anda, jadi Anda ingin cara untuk mewakili mereka yang ringkas dan mudah memungkinkan Anda membuang frekuensi tinggi. Itulah yang benar-benar bagus dalam harmonik bola! Itu sebabnya Anda akan sering mendengar dua istilah ini digunakan bersama.

Anda menghitung probe cahaya dengan algoritma GI mahal Anda - biasanya di alat desain level, atau mungkin sekali per detik (bukan sekali per frame) jika Anda ingin menyertakan objek dinamis Anda. Anda menyimpan yang murah dengan harmonik bola - 16 pelampung cukup untuk penerangan berkualitas tinggi, tetapi bukan pantulan. Kemudian untuk setiap objek dinamis yang ingin Anda nyalakan, Anda memilih probe cahaya terdekat (atau menyatukan beberapa objek secara linear) dan menggunakannya sebagai input seragam atau konstan ke shader Anda. Ini juga biasa untuk menggunakan harmonik bola untuk mewakili data oklusi ambien, dan itu sangat murah untuk berbelit-belit dengan probe cahaya, meskipun ada beberapa kompleksitas di sekitar memutar fungsi harmonik bola.

Dan Hulme
sumber
Jawaban yang bagus ini benar-benar menjelaskan semuanya! Jadi pada dasarnya Probe Cahaya adalah cara mudah untuk menghitung pencahayaan pada karakter bergerak yang mencegah kita menghitung ulang GI untuk seluruh adegan. Di sisi lain, harmonik bola digunakan untuk menyaring frekuensi tinggi. (Koreksi saya jika saya salah, saya hanya mencoba melihat apakah saya memiliki pemahaman yang benar).
Arjan Singh
"Jika Anda menggunakan jumlah gelombang sinus yang sama dengan sampel (piksel) pada gambar asli, Anda dapat merekonstruksi gambar dengan tepat", sebenarnya tidak benar. Misalnya gelombang persegi memerlukan jumlah frekuensi yang tidak terbatas untuk representasi yang tepat
JarkkoL
@ JarkkoL Tentu, gelombang persegi benar. Tetapi jika Anda telah memutuskannya dengan pengambilan sampel, maka Anda hanya perlu jumlah frekuensi yang sama untuk membuat kesalahan lebih kecil dari kesalahan pengambilan sampel. Ini adalah hasil praktis dari teorema Nyquist (frekuensi hadir tertinggi dalam sinyal sampel adalah setengah laju sampel).
Dan Hulme
Ah ya, tentu saja itu benar. Saya kira Anda perlu setengah dari frekuensi tetapi hasil domain frekuensi yang kompleks (vs nyata). Atau gunakan DCT & domain nyata dengan frekuensi DFT dua kali lipat.
JarkkoL
5

Harmonik bola

Katakanlah Anda memiliki beberapa data dalam sebuah array tetapi Anda ingin merepresentasikan data itu dengan jumlah byte yang lebih sedikit.

Salah satu cara untuk melakukan itu bisa dengan mengekspresikan data sebagai fungsi, bukan nilai mentah.

Anda bisa menggambarkannya sebagai fungsi linear: y=ax+b

Maka alih-alih menyimpan array nilai Anda, Anda bisa menyimpan hanya dan .bab

Masalahnya adalah, persamaan linear mungkin merupakan perkiraan yang buruk untuk data Anda.

Anda bisa mencoba kuadratik sebagai gantinya: y=ax2+bx+c

Sekarang alih-alih menyimpan dan , Anda menyimpan , dan .b a b cababc

Kami telah meningkatkan penyimpanan memori dan juga kompleksitas komputasi untuk menyimpan dan mengambil data Anda, dibandingkan dengan persamaan linear, tetapi ini adalah perkiraan yang lebih baik untuk array data Anda. Kita juga bisa membawanya ke fungsi kubik atau lebih tinggi. Meningkatkan urutan meningkatkan penyimpanan, perhitungan dan akurasi.

Harmonik bola adalah cara membuat fungsi yang didefinisikan pada bola bukannya seperti yang saya bicarakan di atas.f(x)

Sama seperti pada contoh di atas, Anda dapat menggunakan fungsi harmonik bola orde rendah untuk membuat sesuatu dengan penyimpanan lebih rendah, dan komputasi lebih rendah untuk menghitung data, tetapi juga akurasi lebih rendah.

Di sisi lain, Anda dapat meningkatkan urutan dan mendapatkan perkiraan yang lebih baik untuk data asli Anda, tetapi dengan biaya lebih banyak ruang penyimpanan yang dibutuhkan, dan lebih banyak perhitungan yang diperlukan untuk menghitung suatu titik data.

Secara ekstrim, Anda dapat menggunakan sebanyak mungkin istilah harmonik bola seperti yang Anda punya sampel dalam array Anda, dan kemudian Anda dapat merekonstruksi array asli Anda dengan tepat, tetapi Anda menghabiskan banyak perhitungan melakukan hal itu, dan Anda menggunakan ruang penyimpanan yang sama banyaknya saat Anda mulai.

Karena itu, dalam praktiknya, fungsi harmonik bola tidak menawarkan banyak manfaat jika Anda perlu merepresentasikan detail halus - seperti pantulan tajam pada sebuah bola - tetapi bisa murah untuk data yang tidak memiliki detail halus (data yang tidak memiliki banyak konten frekuensi tinggi). Mereka juga berguna untuk melakukan perhitungan domain frekuensi seperti analisis spektral atau konvolusi.

Salah satu data seperti itu mereka pandai menyimpan adalah "radiasi" yang merupakan jumlah cahaya yang mengenai suatu titik dari arah lain. Itu cenderung terlihat agak buram, yang berarti hanya memiliki konten frekuensi rendah, dan merupakan kandidat yang baik untuk disimpan dalam fungsi harmonik bola.

Saya akan meninggalkan penjelasan probe cahaya kepada orang lain: hal

Alan Wolfe
sumber
Mengapa memilih bawah? : P
Alan Wolfe
Itu tidak benar bahwa harmonik bola tidak pandai mewakili detail halus. Seperti transformasi Fourier, mereka dapat merekonstruksi sinyal asli dengan tepat jika Anda mempertahankan semua frekuensinya. Hanya saja mereka membuatnya mudah untuk menghemat ruang dengan membuang frekuensi tinggi jika Anda tidak membutuhkannya.
Dan Hulme
Dan maaf, saya pikir setelah memberikan suara itu, sulit untuk melakukan downvote untuk satu klaim yang meragukan dalam jawaban yang membantu, tetapi suara saya terkunci pada saat saya memiliki pikiran kedua.
Dan Hulme
Ah. Ya itu mungkin, dengan cara yang sama bahwa itu mungkin untuk mewakili set data apa pun dengan polinomial, tetapi dalam praktiknya, keduanya adalah pilihan yang buruk karena harus cocok dengan banyak titik data. Dengan polinomial, Anda memerlukan istilah N dari fungsi urutan N agar benar-benar pas dengan titik data N misalnya, yang membuatnya menjadi pilihan yang lebih buruk daripada hanya sebuah array karena itu perhitungan, bukan pencarian, untuk mendapatkan data menunjukkan. Demikian pula, dalam istilah praktis, harmonik bola adalah pilihan yang buruk untuk data bola dengan konten frekuensi tinggi yang ingin Anda pertahankan. Itu bukan pilihan yang baik dalam situasi itu.
Alan Wolfe
Itu benar jika Anda ingin dapat merekonstruksi sampel individu, tetapi tidak semua penggunaan Fourier memerlukan itu - sama untuk tidak semua penggunaan SH. Jika Anda akan melakukan konvolusi, itu jauh lebih murah untuk melakukannya di domain frekuensi sebelum mengubah kembali ke sampel. Apakah Anda keberatan saya mengusulkan edit untuk membuat ini lebih jelas dalam jawaban Anda, setelah saya menyelesaikan jawaban saya sendiri?
Dan Hulme