Sto usando www.scratchapixel.com tra le altre risorse per aiutarmi a imparare come implementare un renderer. Sto guardando il seguente codice da questa pagina in cui viene preso in considerazione un pacchetto di fotoni che si muovono attraverso un materiale. Per ogni pacchetto di fotoni, il peso è inizializzato a . è la probabilità di assorbimento.
La parte confusa per me è quando viene sottratto da . Vedo che questo avrebbe senso quando il pacchetto avesse il peso di perché è la proporzione non assorbita dei fotoni. Ad esempio, se la probabilità di assorbimento è poi e dei fotoni rimangono. Non riesco a vedere come questo abbia senso nelle iterazioni successive. Ad esempio, sull'iterazione due, così metà dei fotoni sono assorbiti da questa iterazione, non un terzo.
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
}
}
}