Saya menggunakan www.scratchapixel.com di antara sumber daya lain untuk membantu saya mempelajari cara menerapkan renderer. Saya melihat kode berikut dari halaman ini di mana satu paket foton bergerak melalui suatu bahan sedang dipertimbangkan. Untuk setiap paket foton, bobot diinisialisasi ke . adalah probabilitas penyerapan.
Bagian yang membingungkan bagi saya adalah ketika dikurangi dari . Saya dapat melihat ini masuk akal ketika paket memiliki berat penuh karena adalah proporsi foton yang tidak diserap. Misal jika probabilitas penyerapan adalah maka dan dari foton tetap. Saya tidak bisa melihat bagaimana ini masuk akal pada iterasi selanjutnya. Misalnya, pada iterasi dua, sehingga setengah foton diserap pada iterasi ini, bukan sepertiga.
int photons = 10000;
...
int m = 5; // there's 1 over 6 chances for the packet to be absorbed
for (int i = 0; i < nphotons; ++i) {
float w = 1; // set the weight to 1
Vec3f P(0, 0, 0);
Vec3f V(0, 0, 1);
while (1) {
...
float dw = sigma_a / sigma_t;
absorption += dw;
w -= dw;
if (w < 0.001) { // perform russian roulette if weight is small
if (drand48() < 1.0 / m) {
break; // we kill the packet
}
else
w *= m; // adjust weight
}
}
}
sumber