3 poin oleh GN⁺ 2024-04-16 | 1 komentar | Bagikan ke WhatsApp
  • Ray tracing spektral adalah metode yang menangani hingga panjang gelombang dan fase, bukan sinar yang hanya membawa nilai RGB, untuk menghasilkan spectral power distribution (SPD) per piksel
  • Ray tracing biasa melakukan penelusuran balik dari kamera ke arah sumber cahaya demi performa, dan menyederhanakan sinar seperti partikel yang memiliki vektor RGB
  • Mata manusia membentuk warna dari respons tiga jenis sel kerucut yang peka terhadap panjang gelombang pendek, menengah, dan panjang; warna yang sama bisa berasal dari SPD yang berbeda
  • Pada adegan seperti dispersi atau interferensi film tipis, ketika panjang gelombang memengaruhi lintasan dan warna cahaya, pendekatan RGB saja bisa tidak memadai
  • Ray tracer spektral tanpa dependensi yang dibuat dengan JavaScript dan GLSL digunakan sebagai alat untuk menciptakan warna dan gerakan yang tidak realistis dalam seni komputer yang sengaja mengubah hukum cahaya

Kamera yang dibuat dengan kode dan ray tracing

  • Dalam seni komputer, adegan dan kamera sama-sama dibuat dengan kode, lalu hasil rendering diubah menjadi array nilai RGB
  • Ray tracing memantulkan sinar di antara objek virtual, memodelkan jalur cahaya yang melewati kamera dan sumber cahaya yang disimulasikan
  • Karena alasan performa, ia tidak menelusuri perpindahan cahaya nyata apa adanya, melainkan memakai berbagai penyederhanaan
    • Sebagian besar sinar dari sumber cahaya tidak mencapai kamera, sehingga penelusuran tidak dimulai dari sumber cahaya, tetapi dilakukan mundur dari sudut pandang kamera
    • Penelusuran mundur ini masuk akal secara fisika dengan asumsi T-symmetry, yaitu bahwa hukum transmisi cahaya simetris terhadap arah waktu
  • Penyederhanaan yang lebih besar adalah memperlakukan sinar bukan sebagai gelombang, melainkan seperti partikel yang memiliki vektor warna RGB
    • Ini mengabaikan sifat gelombang cahaya, tetapi pada banyak adegan menghasilkan hasil yang tampak masuk akal secara fisika
    • Pendekatan ini dimungkinkan oleh fakta bahwa mata manusia memiliki tiga jenis sel pendeteksi warna yang peka terhadap panjang gelombang pendek, menengah, dan panjang

Mata merespons spektrum, bukan RGB

  • Cahaya di dunia nyata biasanya bukan satu panjang gelombang tunggal, melainkan tersusun dari spectral power distribution (SPD), campuran berbagai panjang gelombang
  • Satu warna yang dilihat manusia dapat memiliki banyak SPD yang bersesuaian, dan fenomena ini disebut metamerism
    • Misalnya, kuning dapat terlihat dari satu panjang gelombang di sekitar 580 nm
    • Pada perangkat yang hanya menggunakan RGB, seperti monitor komputer, kuning juga direproduksi dengan kombinasi cahaya merah dan hijau
  • Ada juga warna non-spektral seperti magenta yang tidak dapat dibuat dengan satu panjang gelombang
    • Magenta tidak berada pada satu posisi tunggal di spektrum
    • Dibutuhkan kombinasi panjang gelombang rendah dan tinggi, yaitu cahaya biru dan merah
  • Proses mengubah SPD menjadi warna dapat ditangani secara matematis
    • Ada penghubung kuantitatif antara fisika, fisiologi, dan pengalaman warna yang subjektif
    • Penghubung ini tercakup dalam CIE 1931 color spaces yang dibuat pada 1931
  • Jika ingin mengimplementasikannya sendiri, Anda dapat merujuk ke bab tentang warna dalam Physically Based Rendering

Adegan ketika panjang gelombang mengubah hasil

  • Dalam ray tracing, tidak selalu perlu mempertimbangkan seluruh spektrum atau panjang gelombang tiap sinar
  • Namun pada beberapa adegan, sifat gelombang cahaya secara langsung memengaruhi lintasannya, dan pada akhirnya mengubah warna yang terlihat
  • Contoh utamanya adalah dispersi
    • Lintasan rambat cahaya membelok secara berbeda tergantung panjang gelombangnya
    • Fenomena ketika prisma memisahkan cahaya putih menjadi frekuensi penyusunnya termasuk dalam hal ini
  • Contoh lain adalah thin film interference
    • Ini menjelaskan pola seperti pelangi yang terlihat pada gelembung sabun
    • Cahaya yang dipantulkan dari lapisan atas dan bawah batas sabun mengalami interferensi konstruktif dan destruktif
    • Proses ini bukan memisahkan spektrum menjadi panjang gelombang tunggal, melainkan memperbesar atau mengurangi kontribusi sebagian spektrum
    • Hasilnya, warna non-spektral seperti sian, teal, magenta, dan cokelat sering terbentuk

Apa yang ditangani ray tracing spektral

  • Ray tracing spektral adalah ray tracing yang mempertimbangkan sifat gelombang cahaya
  • Alih-alih menghitung dunia hanya dengan warna RGB, ia menghasilkan spectral power distribution untuk tiap piksel dalam adegan
  • Dengan menggunakan panjang gelombang dan fase sinar, ia memperkirakan warna dengan lebih baik pada situasi ketika informasi ini penting
  • Ini sangat berguna ketika panjang gelombang dan fase mengubah warna akhir, seperti pada dispersi atau interferensi film tipis

Pemanfaatan dalam seni komputer

  • Dalam karya terbaru, digunakan pendekatan yang sengaja melanggar hukum pergerakan cahaya dan membuat kamera untuk semesta yang sedikit berbeda dari kenyataan dengan kode
  • Sambil menangani kekayaan seluruh spektrum cahaya, aturan transmisi cahaya dapat diubah dengan cara yang tidak realistis
  • Keluaran yang dipublikasikan dibuat dengan ray tracer spektral JavaScript dan GLSL tanpa dependensi yang ditulis tangan
  • Contoh karyanya meliputi:
    • Light Doesn't Bend That Way #1, 2023
      • Dibuat dengan menjadikan sudut pantul sebagai fungsi dari panjang gelombang
      • Proses ini tampak seolah hanya menghasilkan warna spektral
    • Untitled, 2023
      • Karya yang masih dalam proses untuk seri FULL_SPECTRUM, dan dipamerkan di Tokyo pada 2023
    • Untitled, 2023
      • Tersedia sebagai Video 3
      • Proses membuat karya bergerak dalam sistem ini diperlakukan sebagai hal yang sangat penting
    • Untitled, 2024

1 komentar

 
GN⁺ 2024-04-16
Komentar Hacker News
  • Jika ingin mencoba membuatnya sendiri, ebook gratis Ray Tracing Gems II 1 membahas ray tracing GPU real-time berbasis API terbaru dan akselerasi hardware, dan juga memiliki bab tentang spectral rendering
    Khususnya bab 42, “Efficient spectral rendering on the GPU for predictive rendering”, relevan dengan topik ini

    1 https://www.realtimerendering.com/raytracinggems/rtg2/

    • Untuk pengenalan yang sangat cepat, Ray Tracing in One Weekend 1 juga direkomendasikan, dan jika setelah itu ingin mendalaminya, Physically Based Rendering [2] sangat bagus

      1 https://raytracing.github.io/

      [2] https://pbrt.org/

    • Saya tidak punya waktu untuk benar-benar mengutak-atik ray tracing, tetapi setelah melihat sekilas bagian awal bukunya, alias sampling terasa sebagai teknik yang sangat elegan dan bagus
      Teknik ini berguna dalam konteks yang jauh lebih luas daripada grafika, jadi rasanya saya berharap mengetahuinya lebih awal

  • Ada beberapa contoh spectral ray tracer
    Mitsuba adalah renderer riset open source dengan banyak fitur keren seperti differentiable rendering https://www.mitsuba-renderer.org/
    Maxwell memiliki dua mode spectral dengan tingkat akurasi berbeda, dan pendekatan yang lebih kompleks sering digunakan di bidang optik https://maxwellrender.com/
    Manuka milik Wētā FX adalah renderer spectral dan telah digunakan dalam beberapa film panjang https://dl.acm.org/doi/10.1145/3182161 dan https://www.wetafx.co.nz/research-and-tech/technology/manuka

  • Menurut saya, spectral rendering adalah contoh bagus bahwa ray tracing itu sendiri bukan tujuan akhir rendering, melainkan lebih dekat ke titik awal
    Kadang ada kesan bahwa masalah rendering sudah terselesaikan dengan real-time ray tracing, tetapi menurut saya itu jauh dari kenyataan
    Setahu saya, sebagian besar sistem spectral rendering tidak menangani interferensi thin-film atau efek lain yang berbasis gelombang, jadi area itu juga merupakan frontier lain
    Realitas punya detail yang sangat mengejutkan banyaknya

    • Semakin rendering mendekati prinsip fisika yang mendasarinya, game engine akan makin menjadi semacam mesin simulasi dunia
      Berbagai komponen engine yang saat ini biasanya dipisahkan bisa jadi akan bertemu pada titik yang sama, misalnya perbedaan antara lapisan fisika dan lapisan rendering bisa berkurang
      Saya penasaran apakah arus seperti ini sudah bisa diamati sampai tingkat tertentu sekarang
      Setelah kemampuan komputasi bertambah beberapa orde lagi, abstraksi yang kita pakai saat ini mungkin akan terlihat sebagai bentuk yang lahir dari keterbatasan teknis masa lalu, seperti saat melihat teknologi mutakhir 30 tahun lalu

    • Ini seperti fraktal: semakin dekat dilihat, semakin banyak detail yang ternyata memengaruhi apa yang kita lihat
      Kita sedikit demi sedikit mendekati rendering yang 100% akurat secara fisik, tetapi mungkin tidak akan pernah benar-benar mencapai 100% dan akan terus menambahkan persentase kecil demi persentase kecil

    • Selain ungkapan bahwa realitas punya detail yang sangat mengejutkan banyaknya, ada juga polarisasi cahaya1, yang walaupun hanya sedikit implementasinya, dapat menghasilkan efek yang cukup mencolok pada adegan tertentu

  • Ada LuxRender sebagai engine spectral ray tracing yang sangat bagus: https://luxcorerender.org/
    Namun, ini berdasarkan versi lama, dan renderer LuxCore terbaru tidak memiliki dukungan spectral penuh
    Selain efek yang disebutkan di sini, spectral rendering juga punya lebih banyak keunggulan
    Jika diimplementasikan dengan pendekatan light tracing, warna, spektrum, dan intensitas sumber cahaya bisa diubah nanti, dan pada banyak adegan pencahayaan tidak langsung juga menjadi jauh lebih akurat

  • Jika ingin bermain-main dengan implementasi ray tracing, menulisnya sendiri ternyata cukup mudah
    Ada buku gratis yang bagus(https://raytracing.github.io/books/RayTracingInOneWeekend.ht...), dan kalau sedikit paham Unity, tutorial berbasis GPU(https://medium.com/@jcowles/gpu-ray-tracing-in-one-weekend-3...) juga bagus
    Versi Unity punya GUI yang memudahkan pratinjau adegan dan pergerakan kamera, jadi lebih nyaman untuk diutak-atik
    Jika tidak ingin menulis dari nol, ada banyak implementasi yang berbasis materi seperti ini, tetapi tetap sangat layak untuk mencobanya sendiri
    Saya pernah bermain dengan implementasi dasar sambil membuat sinar bergerak seperti partikel, sehingga lintasannya bisa dibelokkan menuju objek atau sebaliknya, atau membuatnya mengingat sudut pantulan terakhir untuk dipakai saat tabrakan material berikutnya
    Sebagian besar hasilnya kurang bagus, tetapi saya jadi punya intuisi tentang apa yang sedang saya lihat, dan sedikit menggerakkan kamera juga sangat membantu
    Sebagai proyek pemrograman hobi kecil, ini benar-benar menyenangkan
    Hanya saja, ketika berpotongan dengan objek, saya mengatur panjang maksimum sinar menjadi kecil, lalu dari titik itu menembakkan beberapa sinar ke sekitarnya dan menerapkan sesuatu yang mirip persamaan gravitasi pada tiap tumbukan
    Tentu saja lambat dan hanya pendekatan, tetapi mudah, dan bahkan bisa membuat hal seperti objek lubang hitam yang membelokkan cahaya dalam adegan

    • Saat menulis ray tracer pertama saya, itu tidak memakan waktu sampai akhir pekan penuh, dan hanya sekitar empat halaman kode C yang ditulis dalam semalam

      http://canonical.org/~kragen/sw/aspmisc/my-very-first-raytra...

      Setelah itu saya membuat ray tracer dalam Clojure dan Lua, serta ray marcher dalam JavaScript, dan semuanya bisa sangat kecil dan sederhana
      Tadi malam saya melihat Spongy karya mentor/TBC https://www.pouet.net/prod.php?which=53871, yaitu ray tracer animasi fraktal berkabut yang terdiri dari 65 instruksi bahasa mesin dan file eksekusi MS-DOS-nya berukuran 128 byte
      Karena gambar ray tracing memang sangat keren, orang mudah merasa kewalahan dan mengira algoritme serta struktur data untuk membuatnya pasti sangat sulit, tetapi jika Anda sudah memahami vektor 3 dimensi, sebenarnya cukup sederhana
      SDF ray marching terasa lebih sederhana lagi daripada ray tracer tradisional gaya Whitted, karena ia menggantikan sebagian besar matematika rumit untuk menyelesaikan perpotongan tepat dengan geometri adegan menjadi algoritme pendekatan berurutan yang sangat sederhana
      Ray tracer yang sangat kecil seperti Spongy atau bootsector raytracer karya Oscar Toledo G. https://github.com/nanochess/RayTracer justru sering lebih sulit dipahami daripada implementasi yang sedikit lebih besar
      Untuk membuatnya sekecil itu dibutuhkan banyak trik, dan trik-trik itu lebih sulit dipahami daripada kode yang sederhana

  • Kalau ingin sampai tuntas, kita perlu melacak bukan hanya panjang gelombang tiap sinar, tetapi juga polarisasi dan fasenya
    Kasus ketika sifat-sifat ini benar-benar memengaruhi persepsi manusia memang jarang, seperti pada lapisan tipis atau kisi difraksi, tetapi itu memang ada

  • Terlihat keindahan dari matematika dan fisika yang benar-benar bekerja
    Saya penasaran apakah beberapa penyesuaian yang dimasukkan demi keindahan juga bisa berguna untuk metode visualisasi lain
    Ini juga mengingatkan saya pada masa menyalin kode dari buku untuk membuat musik polifonik di Apple II
    Saat dijalankan, jelas ada yang salah, tetapi alih-alih noise kasar, yang keluar justru pola bunyi yang aneh tapi indah, dan kesalahan kebetulan itu cukup memikat

  • Sepertinya kita bisa membuat gambar yang jauh melampaui 3 kanal, seperti citra hiperspektral
    Saya pernah melihatnya untuk menekankan spektrum agar lebih mudah mengajarkan warna kepada anak-anak
    Misalnya, saat mouse diarahkan ke sebuah piksel di gambar1, spektrumnya ditampilkan sehingga hubungan antara warna dan spektrum menjadi lebih kuat
    Namun citra hiperspektral itu langka, dan secara tradisional kamera[2] mahal
    Kalau begitu, bagaimana dengan citra hiperspektral sintetis?
    Renderer browser beresolusi sangat rendah mungkin cukup cepat untuk dipakai bereksperimen secara interaktif dengan pencahayaan dan material
    Selain itu, tampaknya kita juga bisa mengimplementasikan sudut pandang penglihatan dengan gangguan persepsi warna, manusia yang “bisa melihat UV setelah lensa kataraknya diangkat”, mamalia primata non-dikromatik (tikus/anjing), dan zebrafish tetrakromatik

    1 http://www.ok.sc.e.titech.ac.jp/res/MSI/MSIdata31.html
    [2] Kamera multispketral murah yang menggunakan pencahayaan narrowband dengan multiplex waktu: https://ubicomplab.cs.washington.edu/publications/hypercam/

    • Dengan menggunakan pelacakan cahaya, ini bisa diimplementasikan secara efisien
      Nilai akhir gambar adalah nilai hasil transformasi kontribusi tiap sumber cahaya, dan karena spektrum sumber cahayanya diketahui, kita juga bisa memiliki spektrum tiap piksel
      Namun, begitu menemui dispersi yang berarti atau efek lapisan tipis, kita harus melakukan sampling panjang gelombang untuk tiap lintasan, sehingga pendekatannya menjadi lebih aproksimatif
  • Saya sempat berpikir untuk mengimplementasikan refraksi pada distributed ray tracer saya
    Ini pendekatan stokastik, bukan pendekatan paralel https://en.m.wikipedia.org/wiki/Distributed_ray_tracing
    Sepertinya cukup dengan melakukan sampling frekuensi secara acak, menghitung warnanya, lalu menggunakannya untuk menyesuaikan warna sinar
    Untuk mengoreksi agar warna refraksi murni yang menjadi 1/3 dari kecerahan, hasilnya harus dikalikan 3

    • Istilah “distributed ray tracing” tampaknya lebih merupakan ungkapan dari masa peralihan ketika Whitted ray tracing berevolusi menjadi path tracing modern
      Kalau tidak salah, istilah itu berasal dari salah satu makalah SIGGRAPH oleh Rob Cook
      Sebagai konsep yang lebih umum dan terpadu, sebaiknya beralih ke path tracing, dan saat mencari atau meneliti juga lebih mudah menemukan tip dan teknik
      Saat menggabungkan spectral rendering dan refraksi, memang benar bahwa distribusi harus di-sampling untuk memilih frekuensi
      Secara umum ini bisa rumit, jadi lebih baik membangunnya secara bertahap
      Refleksi juga serupa, tetapi dalam kedua kasus, penggunaan material yang bergantung pada frekuensi tetap merupakan pilihan
      Bahkan jika memakai material yang disederhanakan, masih ada alasan untuk tetap menggunakan pendekatan spektral