Apa itu sampling penting? Setiap artikel yang saya baca tentang itu menyebutkan 'PDF' apa itu juga?
Dari apa yang saya kumpulkan, pentingnya sampling adalah teknik untuk hanya sampel area di belahan bumi yang lebih penting daripada yang lain. Jadi, idealnya, saya harus mencicipi sinar ke arah sumber cahaya untuk mengurangi kebisingan dan meningkatkan kecepatan. Juga, beberapa BRDF di sudut penggembalaan memiliki sedikit perbedaan dalam perhitungan sehingga menggunakan sampel penting untuk menghindari itu bagus?
Jika saya menerapkan sampel penting untuk Cook-Torrance BRDF, bagaimana saya bisa melakukan ini?
brdf
importance-sampling
Arjan Singh
sumber
sumber
Jawaban:
Jawaban singkat:
Importance sampling adalah metode untuk mengurangi varians dalam Integrasi Monte Carlo dengan memilih penduga yang mendekati bentuk fungsi sebenarnya.
PDF adalah singkatan untuk Probability Density Function . Apdf(x) memberikan kemungkinan sampel acak yang dihasilkan adalah x .
Jawaban panjang:
Untuk memulai, mari kita tinjau apa Integrasi Monte Carlo itu, dan seperti apa secara matematis.
Integrasi Monte Carlo adalah teknik untuk memperkirakan nilai integral. Ini biasanya digunakan ketika tidak ada solusi bentuk tertutup untuk integral. Ini terlihat seperti ini:
Dalam bahasa Inggris, ini mengatakan bahwa Anda dapat memperkirakan integral dengan rata-rata sampel acak berturut-turut dari fungsi. KetikaN menjadi besar, pendekatannya semakin dekat dan lebih dekat ke solusi. pdf(xi) merupakan fungsi kepadatan probabilitas masing-masing sampel acak.
Mari kita lakukan contoh: Hitung nilai integralI .
Mari kita gunakan Integrasi Monte Carlo:
Program python sederhana untuk menghitung ini adalah:
Jika kami menjalankan program, kami mendapatkanI=0.4986941
Menggunakan pemisahan oleh bagian, kita bisa mendapatkan solusi yang tepat:
Anda akan melihat bahwa Solusi Monte Carlo tidak sepenuhnya benar. Ini karena ini adalah perkiraan. Yang mengatakan, ketikaN pergi ke tak terhingga, estimasi harus semakin dekat dan lebih dekat ke jawaban yang benar. Sudah di N=2000 beberapa berjalan hampir identik dengan jawaban yang benar.
Catatan tentang PDF: Dalam contoh sederhana ini, kami selalu mengambil sampel acak yang seragam. Sampel acak yang seragam berarti setiap sampel memiliki probabilitas yang sama untuk dipilih. Kami sampel dalam kisaran[0,2π] jadi, pdf(x)=1/(2π−0)
Pengambilan sampel penting bekerja dengan cara pengambilan sampel yang tidak seragam. Sebagai gantinya kami mencoba untuk memilih lebih banyak sampel yang berkontribusi banyak pada hasil (penting), dan lebih sedikit sampel yang hanya berkontribusi sedikit pada hasil (kurang penting). Karena itulah namanya, pentingnya pengambilan sampel.
Salah satu contoh pengambilan sampel penting di Path Tracing adalah bagaimana memilih arah sinar setelah menyentuh permukaan. Jika permukaannya tidak spekular sempurna (mis. Cermin atau kaca), sinar yang keluar bisa di mana saja di belahan bumi.
Kita bisa secara seragam mencicipi belahan bumi untuk menghasilkan sinar baru. Namun, kita dapat mengeksploitasi fakta bahwa persamaan rendering memiliki faktor cosinus di dalamnya:
Untuk mengatasi ini, kami menggunakan sampel penting. Jika kita menghasilkan sinar berdasarkan belahan tertimbang kosinus, kita memastikan bahwa lebih banyak sinar dihasilkan jauh di atas cakrawala, dan lebih sedikit di dekat cakrawala. Ini akan menurunkan varians dan mengurangi noise.
Dalam kasus Anda, Anda menetapkan bahwa Anda akan menggunakan BRDF berbasis mikrofaset Cook-Torrance. Bentuk umum adalah:
where
The blog "A Graphic's Guy's Note" has an excellent write up on how to sample Cook-Torrance BRDFs. I will refer you to his blog post. That said, I will try to create a brief overview below:
The NDF is generally the dominant portion of the Cook-Torrance BRDF, so if we are going to importance sample, the we should sample based on the NDF.
Cook-Torrance doesn't specify a specific NDF to use; we are free to choose whichever one suits our fancy. That said, there are a few popular NDFs:
Each NDF has it's own formula, thus each must be sampled differently. I am only going to show the final sampling function for each. If you would like to see how the formula is derived, see the blog post.
GGX is defined as:
To sample the spherical coordinates angleθ , we can use the formula:
whereξ is a uniform random variable.
We assume that the NDF is isotropic, so we can sampleϕ uniformly:
Beckmann is defined as:
Which can be sampled with:
Lastly, Blinn is defined as:
Which can be sampled with:
Putting it in Practice
Let's look at a basic backwards path tracer:
IE. we bounce around the scene, accumulating color and light attenuation as we go. At each bounce, we have to choose a new direction for the ray. As mentioned above, we could uniformly sample the hemisphere to generate the new ray. However, the code is smarter; it importance samples the new direction based on the BRDF. (Note: This is the input direction, because we are a backwards path tracer)
Which could be implemented as:
After we sample the inputDirection ('wi' in the code), we use that to calculate the value of the BRDF. And then we divide by the pdf as per the Monte Carlo formula:
Where Eval() is just the BRDF function itself (Lambert, Blinn-Phong, Cook-Torrance, etc.):
sumber
wi
? I understand how to sample the spherical coordinates angle θ but for the actual direction vector how is that done?If you have a 1D functionf(x) and you want to integrate this function from say 0 to 1, one way to perform this integration is by taking N random samples in range [0, 1], evaluate f(x) for each sample and calculate the average of the samples. However, this "naive" Monte Carlo integration is said to "converge slowly", i.e. you need a large number of samples to get close to the ground truth, particularly if the function has high frequencies.
With importance sampling, instead of taking N random samples in [0, 1] range, you take more samples in the "important" regions off(x) that contribute most to the final result. However, because you bias sampling towards the important regions of the function, these samples must be weighted less to counter the bias, which is where the PDF (probability density function) comes along. PDF tells the probability of a sample at given position and is used to calculate weighted average of the samples by dividing the each sample with the PDF value at each sample position.
With Cook-Torrance importance sampling the common practice is to distribute samples based on the normal distribution function NDF. If NDF is already normalized, it can serve directly as PDF, which is convenient since it cancels the term out from the BRDF evaluation. Only thing you need to do then is to distribute sample positions based on PDF and evaluate BRDF without the NDF term, i.e.
For NDF you need to calculate Cumulative Distribution Function of the PDF to convert uniformly distributed sample position to PDF weighted sample position. For isotropic NDF this simplifies to 1D function because of the symmetry of the function. For more details about the CDF derivation you can check this old GPU Gems article.
sumber