1 poin oleh GN⁺ 2023-10-24 | 1 komentar | Bagikan ke WhatsApp
  • Dalam pencahayaan lingkungan yang seragam, objek dengan reflektansi 100% seharusnya tidak dapat dibedakan dari latar belakang, dan sifat ini dapat dipakai untuk memverifikasi konsistensi fisik renderer dengan cepat
  • Baik material matte, cermin, maupun material di antaranya, jika memantulkan secara sempurna dan disinari secara seragam, seharusnya tampak sama dengan lingkungannya sehingga terlihat seperti menghilang
  • Salju yang baru turun dapat memiliki albedo hingga 90–98%, sehingga saat bertemu cuaca mendung atau kabut dapat terjadi whiteout, ketika langit dan salju tidak lagi bisa dibedakan
  • Uji ini memeriksa apakah BRDF kehilangan atau menciptakan energi, dan dalam lingkungan abu-abu, energi pantulan yang berlebihan akan terlihat lebih terang sehingga kesalahan lebih mudah ditemukan
  • BRDF Lambertian putih murni itu sederhana dan konservasi energinya jelas, sehingga berguna sebagai pemeriksaan dasar untuk mengungkap bug integrasi seperti distribusi sampling, bobot, PDF, atau koefisien π maupun 2 yang terlewat

Mengapa objek harus menghilang dalam cahaya yang seragam

  • Jika objek dengan reflektansi 100% diterangi oleh lingkungan seragam, objek itu seharusnya tidak dapat dibedakan dari latar belakang
  • Sifat ini berlaku terlepas dari apakah objek tersebut matte, memantul seperti cermin, atau material di antaranya
  • Jika objek tidak terlihat dalam hasil rendering, itu menjadi tanda bahwa hasilnya sesuai dengan yang diharapkan secara matematis

Contoh serupa di dunia nyata: whiteout

  • Salju yang baru turun dapat memiliki albedo tinggi hingga 90–98%, sehingga hampir mendekati putih sempurna
  • Jika cuaca mendung atau kabut ikut terjadi, dapat muncul kondisi whiteout ketika salju dan langit tidak lagi bisa dibedakan
  • Pada saat itu, semua arah tampak seperti putih seragam, sehingga bahkan kemiringan tepat di depan mata pun sulit dibedakan hanya dengan penglihatan

Memeriksa konservasi energi pada BRDF

  • Uji white furnace sering digunakan untuk memeriksa apakah BRDF memenuhi konservasi energi
  • Intinya adalah memastikan bahwa energi tidak hilang atau muncul begitu saja selama proses refleksi
  • Misalnya, ini dapat digunakan untuk memeriksa masalah ketika material tampak lebih gelap saat roughness meningkat, atau situasi ketika refleksi timbal balik menjadi cukup besar untuk tidak bisa diabaikan
  • Bukan hanya lingkungan putih, lingkungan abu-abu juga berguna
    • Jika energi pantulan berlebihan, objek akan tampak lebih terang daripada sekitarnya sehingga kesalahannya terlihat

Cara memeriksa implementasi integrasi renderer

  • Selain BRDF itu sendiri, uji white furnace juga efektif untuk memeriksa bagian integrasi dari renderer
  • BRDF Lambertian dengan albedo 100% memiliki konservasi energi yang sempurna dan implementasinya sederhana, sehingga sangat cocok untuk menyingkap bug implementasi renderer
  • Titik-titik yang berpotensi menimbulkan masalah ada di banyak tempat
    • distribusi sampling
    • bobot sampel
    • perhitungan PDF
    • koefisien seperti π atau 2 yang terlewat
  • Kesalahan seperti ini bisa sulit ditemukan karena gambar hasilnya tetap dapat terlihat masuk akal

Contoh kegagalan dan pemanfaatan untuk debugging

  • Saat menulis path tracer atau variannya, membuat pre-convolved environment map, atau menguji distribusi sampling lain, pendekatan yang berguna adalah terlebih dahulu meloloskan uji white furnace dengan BRDF Lambertian putih murni
  • Setelah langkah ini lolos, implementasi dapat dipercaya sampai tingkat tertentu sebelum BRDF itu sendiri diuji
  • Setelah komentar di Hacker News, contoh ShaderToy ditambahkan dengan makro SIMULATE_INCORRECT_INTEGRATION yang memungkinkan kegagalan uji terlihat
  • Makro ini meniru bug integrasi yang salah seperti lupa bahwa integral hemisfer bernilai 2π atau tidak memperhitungkan distribusi sampling
  • Saat bug diaktifkan, bola tidak lagi memantulkan energi dalam jumlah yang benar sehingga menjadi terlihat di layar

1 komentar

 
GN⁺ 2023-10-24
Komentar Hacker News
  • Baru-baru ini saya mengimplementasikan physically based renderer (PBR) dengan mengikuti tutorial PBR dari learnopengl, tetapi tidak lolos white furnace test.
    Berkat itu saya menyadari bahwa saya tidak benar-benar memahami matematika yang saya implementasikan, dan seperti yang dikatakan penulis, hasilnya tidak bisa dibuat benar hanya dengan mengalikan π atau 2 secara sembarang.

    • Sebagian besar BRDF yang pernah saya lihat sejauh ini, seperti disebutkan dalam tulisan itu, menjadi makin gelap saat roughness meningkat.
      Ada juga model yang memperhitungkan pantulan timbal balik antar-microfacet teoretis yang membentuk distribusi normal yang menjadi BRDF, dan itu memang lebih baik, tetapi bahkan untuk model-model itu sulit memastikan apakah mereka lolos tes ini apa adanya.
      Dalam praktiknya, sebagian besar yang banyak dipakai kehilangan energi, dan ada juga yang menaruh lookup table di atas BRDF untuk mengoreksinya.
  • Menarik bahwa tulisan ini muncul di bagian atas HN. Sebenarnya ada dua furnace test, dan yang satu lagi adalah tes dengan kondisi emisi 0.5 dan albedo 0.5, yang hasilnya harus menjadi 1.0 kecuali galat piksel akibat noise.

    • Meski saya hanya tahu sangat sedikit tentang ray tracing, saya tetap bisa mengikuti tulisannya. Tulisannya jelas, menarik, dan ditulis dengan baik.
  • Dulu sekali, di https://graphics.stanford.edu/~boulos/papers/brdftog.pdf, ada upaya menukar konservasi energi dan reproduksibilitas data, dengan harga harus mengorbankan resiprositas.
    Pada akhirnya, hampir tidak ada yang terlalu peduli untuk mencocokkan data material secara otomatis dari BRDF, dan kalaupun ada minat, mereka lebih menyukai BSDF yang simetris dan cukup konservatif.
    Riset setelahnya pun kebanyakan memperbaiki arah itu, dan khususnya jika simetri dipecah, teknik seperti bidirectional path tracing menjadi cukup aneh.

  • Saya penasaran mengapa nama tes ini memakai kata furnace. Saya memahami konsep keseluruhannya, tetapi namanya terasa cukup arbitrer; saya ingin tahu apakah nama itu punya dasar tertentu.

    • Namanya berasal dari eksperimen klasik radiasi benda hitam yang menggunakan oven, kiln, atau tungku.
      Di sini pun konsepnya mirip: objek terkurung di dalam rongga yang memiliki spektrum emisi seragam. Hanya saja dalam kasus ini bukan benda hitam, melainkan putih.
    • Karena bagian dalam tungku yang panas bersinar dengan pencahayaan seragam, seperti yang disimulasikan dalam tes ini.
    • Karena tes ini melihat situasi di dalam lingkungan yang diterangi cahaya putih secara seragam, jadi lebih mirip nama bantu ingat yang memunculkan bayangan seperti tungku yang sangat panas.
  • Kebetulan beberapa hari lalu rekomendasi YouTube menampilkan video tentang topik ini, dan itu membahas isi rilis Blender 4.0 yang akan datang.
    BSDF akan mendapatkan fungsi Multiscatter GGX baru, pembahasannya jauh lebih mendalam dan menampilkan banyak contoh.
    https://www.youtube.com/watch?v=v6qXbV_Q7z4

  • Saya tidak tahu ShaderToy yang disematkan itu seharusnya terlihat seperti apa. Setelah menekan play dan menunggu, tidak ada yang terjadi selama lebih dari 1 menit.
    Rasanya tulisan ini akan jauh lebih baik kalau ada beberapa screenshot dari tes yang gagal.

    • Awalnya berwarna abu-abu, lalu kontur bola terlihat dan latar belakang fade in. Bola merah, bola biru, dan bola putih muncul di sekitar bola abu-abu/putih di tengah, lalu adegannya kembali memudar menjadi abu-abu.
      Setelah itu bola merah dan biru muncul lagi, dan tampak semacam pantulan pada bola tengah, tetapi bola tengah “melebur” dengan latar belakang sehingga sulit dikenali sebagai bola.
    • Sepertinya membutuhkan WebGL. Bisa coba periksa apakah WebGL sudah aktif di browser?