Tôi có một triển khai theo dõi đường dẫn vật liệu khuếch tán / phát xạ ngây thơ (máy ảnh pinhole) và tôi thấy nó cần một số lượng rất lớn các mẫu trên mỗi pixel để hội tụ - như có thể trong hàng triệu - và tự hỏi liệu điều đó có bình thường đối với trình theo dõi đường dẫn "ngây thơ" không thực hiện?
Dưới đây là 10.000 mẫu trên mỗi pixel:
Và đây là hình ảnh 10.000spp sử dụng các mẫu bán cầu có trọng số cosine để so sánh:
Đối với mỗi pixel tôi làm điều này:
- Chiếu tia vào khung cảnh cho pixel (bắt đầu từ mặt phẳng gần, hướng của máy ảnh đến vị trí của pixel trên mặt phẳng gần).
- Khi một đối tượng bị tấn công, tôi tính toán một hướng ngẫu nhiên thống nhất trong bán cầu được xác định bởi bình thường và tiếp tục.
- Ở mỗi cấp độ, tôi trả lại emissive + (2 * Dot (bình thường, nảyRayDir) * ColorFromBounceRay * DiffuseColor / pi)
- Nếu không có gì bị tia dội lại, tôi sẽ trả về màu đen.
- Tôi đang làm việc với 3 kênh màu điểm nổi, trong đó mục đích là 0-1 tương ứng với 0-255 trong đầu ra cuối cùng uint8 trên mỗi kênh màu.
- Tôi cho phép tối đa 5 lần nảy.
Sau khi lấy trung bình tất cả các mẫu cho pixel, tôi thực hiện việc này để chuyển đổi nó từ HDR sang LDR:
- Đối với mỗi kênh màu tôi thực hiện hiệu chỉnh gamma: channel = powf (channel, 1.0f /2.2f)
- Sau đó, tôi nhân giá trị kênh với 255, kẹp nó từ 0-255 và chuyển nó thành uint8 cho màu pixel cuối cùng.
Mã nguồn có thể được nhìn thấy ở đây trong ý chính dưới đây. Nó bao gồm windows.h cho tiêu đề bitmap, nhưng mặt khác không có tiêu đề tiêu chuẩn thuốc, và không phụ thuộc thư viện: https://gist.github.com/anonymous/0dc9f7f5abf15f8fdb9aa84ecfcf67d5