Bagaimana efek volumetrik ditangani dalam raytracing?

10

Bagaimana efek volumetrik seperti asap, kabut, atau awan yang dihasilkan oleh raytracer? Tidak seperti benda padat, benda ini tidak memiliki permukaan yang terdefinisi dengan baik untuk menghitung persimpangan.

Menandai
sumber

Jawaban:

11

Gambaran

Munculnya volume (juga disebut media yang berpartisipasi) di alam disebabkan oleh partikel-partikel kecil, seperti debu, tetesan air atau plankton, yang tersuspensi dalam cairan di sekitarnya, seperti udara atau air. Partikel-partikel ini adalah benda padat, dan cahaya memantul atau memantul dari benda-benda ini seperti pada permukaan normal. Secara teori, media yang berpartisipasi dapat ditangani oleh pelacak sinar tradisional dengan hanya persimpangan permukaan.

Model Statistik

Tentu saja, banyaknya partikel ini membuatnya tidak layak untuk benar-benar raytrace mereka secara individual. Sebaliknya, mereka didekati dengan model statistik: Karena partikel sangat kecil, dan jarak antara partikel jauh lebih besar dari ukuran partikel, interaksi individu cahaya dengan partikel dapat dimodelkan sebagai independen secara statistik. Oleh karena itu, merupakan perkiraan yang masuk akal untuk mengganti partikel individu dengan jumlah kontinu yang menggambarkan interaksi partikel-cahaya "rata-rata" pada wilayah tertentu di ruang angkasa.

Untuk transpor cahaya volumetrik berbasis fisik, kami mengganti banyak partikel yang tak terbayangkan dengan media yang berpartisipasi terus menerus yang memiliki dua sifat: Koefisien absorpsi, dan koefisien hamburan. Koefisien-koefisien ini sangat nyaman untuk penelusuran sinar, karena memungkinkan kita menghitung probabilitas sinar berinteraksi dengan medium - yaitu, probabilitas memukul salah satu partikel - sebagai fungsi jarak.

Koefisien absorpsi dinyatakan sebagai . Katakanlah sinar keinginan cahaya untuk perjalanan t meter di dalam media yang berpartisipasi; probabilitas membuatnya melalui tidak terserap - yaitu tidak mengenai salah satu partikel dan diserap olehnya - adalah e - t σ a `. Ketika t bertambah, kita dapat melihat bahwa probabilitas ini menjadi nol, yaitu, semakin lama kita melakukan perjalanan melalui medium, semakin besar kemungkinan untuk mengenai sesuatu dan diserap. Hal yang sangat mirip berlaku untuk koefisien hamburan σ s : Probabilitas sinar tidak mengenai partikel dan tersebar adalah e - t σ sσatetσaσsetσs; yaitu, semakin lama kita melakukan perjalanan melalui media, semakin besar kemungkinan kita mengenai partikel dan tersebar ke arah yang berbeda.

Biasanya, dua kuantitas ini dilipat menjadi koefisien kepunahan tunggal, . Probabilitas bepergian t meter melalui media tanpa berinteraksi dengan itu (tidak diserap atau tersebar) kemudian e - t σ t . Di sisi lain, probabilitas berinteraksi dengan media setelah t meter adalah 1 - e - t σ t .σt=σa+σstetσtt1etσt

Rendering dengan Media yang Berpartisipasi

1etσtttσaσtσsσt

Bagaimana sinar tersebar dijelaskan oleh fungsi fase dan tergantung pada sifat partikel; fungsi fase Rayleigh menggambarkan hamburan dari partikel bola yang lebih kecil dari panjang gelombang cahaya (misalnya atmosfer kita); fungsi fase Mie menjelaskan hamburan dari partikel bola dengan ukuran yang sama dari panjang gelombang (misalnya tetesan air); dalam grafik, biasanya fungsi fase Henyey-Greenstein digunakan, awalnya diterapkan pada hamburan dari debu antarbintang.

tMaxtt<tMaxttMax, ray berhasil melewati tanpa cedera dan berinteraksi dengan permukaan seperti biasa.

Pandangan

Posting ini hanya pengantar kecil untuk rendering dengan media yang berpartisipasi; antara lain, saya benar-benar mengabaikan berbagai koefisien spasial (yang Anda perlukan untuk awan, asap, dll.). Catatan Steve Marschner adalah sumber yang bagus, jika Anda tertarik. Secara umum, media yang berpartisipasi sangat sulit untuk dirender secara efisien, dan Anda bisa menjadi jauh lebih canggih daripada yang saya jelaskan di sini; ada Pemetaan Foton Volumetrik , Foton Balok , pendekatan Difusi , Pengambilan Sampel Gabungan Penting dan banyak lagi. Ada juga karya menarik di media granular yang menjelaskan apa yang harus dilakukan ketika model statistik rusak, yaitu interaksi partikel tidak lagi independen secara statistik.

Benedikt Bitterli
sumber
4

Salah satu cara untuk melakukannya - yang sebenarnya bukan solusi "pergi ke", tetapi dapat bekerja dengan baik, adalah menemukan jarak yang ditempuh sinar melalui volume dan menggunakan integrasi beberapa fungsi kerapatan untuk menghitung berapa banyak "barang" yang memukul.

Berikut ini tautan dengan contoh implementasi: http://blog.demofox.org/2014/06/22/analytic-fog-density/

Alan Wolfe
sumber
3

Tergantung pada volume yang efektif.

Efek volume seragam yang tidak termasuk melakukan hamburan dapat disimulasikan dengan hanya menghitung sinar masuk dan jarak keluar sinar.

Kalau tidak, Anda perlu melakukan integrasi jalur ray, juga dikenal sebagai ray marching. Untuk menghindari perlu menembakkan sinar sekunder, raymarching sering digabungkan dengan semacam cache, seperti peta kedalaman, peta mendalam, peta batu bata atau awan voxel untuk bayangan cahaya, dll. Dengan cara ini Anda tidak perlu perlu berbaris di seluruh adegan. Caching serupa sering dilakukan untuk tekstur prosedural volume.

Dimungkinkan juga untuk mengubah tekstur ke permukaan primitif seperti kotak, bola atau bidang yang memiliki beberapa tekstur bermata lunak yang sesuai. Anda kemudian dapat menggunakan teknik rendering normal untuk menyelesaikan efek volumetrik. Masalah dengan ini adalah bahwa Anda biasanya membutuhkan banyak primitif. Selain itu bentuk primitif dapat terlihat sebagai pengambilan sampel terlalu seragam.

joojaa
sumber
Hanya ingin mencatat bahwa Anda dapat melakukan integrasi sebenarnya dari jalur ray secara analitis juga, Anda tidak harus menggunakan Ray berbaris jika itu tidak diinginkan.
Alan Wolfe
@AlanWolfe itulah yang Anda lakukan dalam kasus seragam, namun jika mediumnya berpartisipasi dengan geometri maka Anda perlu melakukan sesuatu yang lebih bagus. Lagi pula saya tidak mengklaim ini semua metode.
joojaa
Yang pasti, cukup tambahkan jawaban Anda. Ketika Anda mengatakan case seragam tidak yakin apa yang Anda maksud persis tetapi untuk kasus kabut, itu tidak harus kepadatan yang seragam, hanya beberapa fungsi kepadatan yang dapat Anda integrasikan. Itukah yang kamu maksud dengan kasus seragam?
Alan Wolfe