Dalam ray tracing / path tracing, salah satu cara paling sederhana untuk anti-alias gambar adalah dengan mengganti nilai piksel dan rata-rata hasilnya. YAITU. alih-alih memotret setiap sampel melalui bagian tengah piksel, Anda mengimbangi sampel dengan jumlah tertentu.
Dalam mencari di internet, saya menemukan dua metode yang agak berbeda untuk melakukan ini:
- Buat sampel sesuai keinginan Anda dan timbang hasilnya dengan filter
- Salah satu contohnya adalah PBRT
- Hasilkan sampel dengan distribusi yang sama dengan bentuk filter
- Dua contohnya adalah smallpt dan Benedikt Bitterli 's Tungsten Renderer
Hasilkan dan Timbang
Proses dasarnya adalah:
- Buat sampel sesuai keinginan Anda (secara acak, bertingkat, urutan perbedaan rendah, dll.)
- Offset sinar kamera menggunakan dua sampel (x dan y)
- Jadikan adegan dengan sinar
- Hitung bobot menggunakan fungsi filter dan jarak sampel mengacu pada pusat piksel. Misalnya, Filter Kotak, Filter Tenda, Filter Gaussian, dll.)
- Berikan bobot pada warna dari render
Buat dalam bentuk filter
Premis dasarnya adalah menggunakan Inverse Transform Sampling untuk membuat sampel yang didistribusikan sesuai dengan bentuk filter. Misalnya histogram dari sampel yang didistribusikan dalam bentuk Gaussian adalah:
Ini bisa dilakukan dengan tepat, atau dengan menggeser fungsi menjadi pdf / cdf diskrit. smallpt menggunakan cdf terbalik yang tepat dari filter tenda. Contoh metode binning dapat ditemukan di sini
Pertanyaan
Apa pro dan kontra dari setiap metode? Dan mengapa Anda menggunakan salah satunya? Saya dapat memikirkan beberapa hal:
Menghasilkan dan Menimbang tampaknya menjadi yang paling kuat, memungkinkan kombinasi metode pengambilan sampel apa pun dengan filter apa pun. Namun, itu mengharuskan Anda untuk melacak bobot di ImageBuffer dan kemudian melakukan penyelesaian akhir.
Menghasilkan dalam Bentuk Filter hanya dapat mendukung bentuk filter positif (mis. Tidak ada Mitchell, Catmull Rom, atau Lanczos), karena Anda tidak dapat memiliki pdf negatif. Tapi, seperti yang disebutkan di atas, lebih mudah diterapkan, karena Anda tidak perlu melacak bobot apa pun.
Meskipun, pada akhirnya, saya kira Anda bisa menganggap metode 2 sebagai penyederhanaan metode 1, karena pada dasarnya menggunakan berat Box Filter implisit.