Tôi đang sử dụng www.scratchapixel.com trong số các tài nguyên khác để giúp tôi tìm hiểu cách triển khai trình kết xuất. Tôi đang xem đoạn mã sau từ trang này nơi một gói photon di chuyển qua vật liệu đang được xem xét. Đối với mỗi gói photon, trọng lượng được khởi tạo là . là xác suất hấp thụ.
Phần khó hiểu với tôi là khi bị trừ khỏi . Tôi có thể thấy điều này sẽ có ý nghĩa khi gói có trọng lượng đầy đủ là vì là tỷ lệ photon không được hấp thụ. Ví dụ, nếu xác suất hấp thụ là thì và vẫn còn số photon. Tôi không thể thấy điều này có ý nghĩa như thế nào trong các lần lặp lại tiếp theo. Ví dụ, ở lần lặp hai, nên một nửa số photon được hấp thụ trên lần lặp này, không phải là một phần ba.w 1 1 - d w 33 % w = 1 - 0,33 = 0,67 67 % w = 0,67 - 0,33 = 0,34
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
}
}
}