Có phải lấy mẫu bán cầu có trọng số cosine vẫn cần NdotL khi tính toán đóng góp cho ánh sáng gián tiếp?


12

Khi chuyển đổi từ lấy mẫu bán cầu đồng nhất sang lấy mẫu bán cầu có trọng số cosin tôi bối rối bởi một tuyên bố trong một bài báo.

Đóng góp gián tiếp hiện tại của tôi được tính như sau:

Vec3 RayDir = UniformGenerator.Next()
Color3 indirectDiffuse = Normal.dot(RayDir) * castRay(Origin, RayDir)

Trong đó sản phẩm chấm là cos (θ)

Nhưng trong bài viết này về lấy mẫu tốt hơn ( http://www.rorydriscoll.com/2009/01/07/better-sampling/ ), tác giả đề xuất PDF là (cos (θ) / pi), và không có bằng chứng về phép tính N chấm L.

Câu hỏi của tôi là - điều đó có nghĩa là tôi không còn cần phải thực hiện dotDirection chấm bình thường bởi vì nó được bao gồm trong PDF, hoặc nó có ngoài pdf không?

Câu trả lời:


12

Bạn luôn cần nhân với số hạng cosin thực sự (đó là một phần của phương trình kết xuất). Mặc dù khi bạn khuếch tán gián tiếp bằng cách sử dụng phương pháp dò tia và do đó tích hợp monte-carol (đây là kỹ thuật phổ biến nhất trong trường hợp này), bạn phải chia sự đóng góp của từng mẫu cho PDF của mình . Điều này cũng được kiểm tra ở đây .

Cũng lưu ý rằng trong tài liệu tham khảo được đề cập, nếu PDF có các thuật ngữ mà bạn cũng tìm thấy trong các phương trình kết xuất thì bạn có thể tối ưu hóa mã nếu bạn muốn bằng cách hủy bỏ các điều khoản này.

Đừng quên rằng BRDF của một bề mặt khuếch tán là ρ / π trong đó ρ là viết tắt của suất phản chiếu bề mặt. Vì vậy, chúng ta cần chia kết quả cho π. Mặc dù trong trường hợp thành phần khuếch tán gián tiếp, đừng quên rằng chúng ta nên chia kết quả của castRay cho PDF của biến ngẫu nhiên, như chúng ta đã thấy trước đó trong chương này là 1 / (2π). Chia gián tiếpDiffuswise 1 / (2π) mis giống như nhân giá trị này với 2π. Và vì albedo cũng được chia cho π, chúng ta có thể đơn giản hóa mã ...

Bạn có một tình huống tương tự. Nếu bạn xem PDF để lấy mẫu cosine, thì bạn sẽ nhận ra rằng các điều khoản có thể bị hủy bỏ. Điều đó không có nghĩa là chúng 'không' thực sự cần thiết. Họ là, họ chỉ hủy bỏ nhau cho phép tối ưu hóa mã một chút (và tránh một vài phân chia, nhân, vv). Bạn có nhiều hơn trong việc tối ưu hóa vi mô ở đây ... có thể gây nhầm lẫn nếu bạn cố gắng học lý thuyết bằng cách chỉ nhìn vào mã được tối ưu hóa (thường không được nhận xét đúng).

(cos(θ)...)PDF=(cos(θ)...)cos(θ)π=...


1
Cảm ơn bạn! Điều đó có ý nghĩa. Theo trực giác tôi biết nó là bắt buộc nhưng tôi không nhận ra rằng đó là một sự tối ưu hóa.
Steven

5
Chỉ để đảm bảo rằng điều này là rõ ràng .. không chỉ là bán cầu có trọng số cosin vì nó cần ít hướng dẫn hơn, nó cũng là một tối ưu hóa vì nó hội tụ nhanh hơn. Phải mất ít mẫu hơn để có kết quả tốt hơn. Đây là một hình thức lấy mẫu quan trọng.
Alan Wolfe

Chính xác - đó là mong muốn của tôi khi tôi đang cố gắng giảm số lượng mẫu để tính toán gián tiếp trong lightmapper của mình.
Steven
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.