Mã roulette Nga này có đúng không?


8

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ụ.w1dw

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,34dww11dw33%w=10.33=0.6767%w=0.670.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 
        } 
    } 
} 

Câu trả lời:


4

Tôi nghĩ bạn đúng và phép trừ là một sai lầm. Mã nên được nhân lên một phần của các photon không được hấp thụ vào trọng lượng. Cái gì đó như:

float fraction_absorbed = sigma_a / sigma_t;
absorption += w * fraction_absorbed;
w *= (1.0f - fraction_absorbed);

Điều này làm cho absorptiontổng phần photon được hấp thụ cho đến nay và wphần còn lại của photon.


2
Là một phụ lục: Câu trả lời cho câu hỏi khác này có một số mã mẫu cho roulette Nga. computergraphics.stackexchange.com/questions/2316/ từ
RichieSams
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.