Tôi sẽ cung cấp câu trả lời đơn giản / ngây thơ / vũ phu cho câu hỏi này, nó không hoạt động, và cho kết quả chính xác.
Tuy nhiên, có những câu trả lời tốt hơn, làm cho kết xuất hội tụ nhanh hơn với ít mẫu hơn, nhưng sử dụng toán học nâng cao hơn. Tôi hy vọng người khác sẽ cung cấp một câu trả lời dọc theo những dòng đó.
Câu trả lời đơn giản là đây: Đèn khu vực chỉ là hình học có giá trị phát xạ.
Để thêm hỗ trợ cho các giá trị phát xạ cho theo dõi đường dẫn là khá dễ dàng may mắn.
Như bạn đã biết, lượng ánh sáng hướng tới một pixel là lượng ánh sáng rời khỏi bề mặt mà một tia xuống pixel đó sẽ giao nhau.
Điều đó được tính toán một cách đệ quy bằng cách xem lượng ánh sáng chiếu vào điểm đó, tích hợp BRDF, nhân với cosin và tất cả nhạc jazz đó.
Ánh sáng phát xạ chỉ được thêm vào kết quả đó. Vì vậy, bất cứ điều gì bạn có bây giờ là "ánh sáng đi ra" từ một bề mặt, chỉ cần thêm vào đó là màu phát ra của bề mặt đó. (Bạn cũng có thể tùy ý làm một cái gì đó tương tự như ánh xạ kết cấu và có các giá trị phát xạ khác nhau trên đối tượng, có thể dựa trên kết cấu).
Đó là tất cả để có nó, nó rất đơn giản và dễ dàng.
Trong phương trình kết xuất bên dưới, đại diện cho thuật ngữ phát xạ (đó là những gì e đại diện cho, phát xạ) và phần còn lại của phương trình là ánh sáng được tích hợp trên bán cầu. Bạn có thể thấy rằng bạn chỉ cần thêm phát xạ vào kết quả mà bạn trả về dưới dạng ánh sáng đi ra từ một điểm ( ) để áp dụng ánh sáng phát xạ đó.Le(ωo)Lo(ωo)
Lo(ωo) = =Le(ωo) +∫Ωf(ωTôi,ωo)LTôi(ωTôi) (ωTôi⋅ n ) dωTôi
Bạn có thể đọc thêm về một trình theo dõi đường dẫn đơn giản với đèn khu vực tại liên kết này, cũng đã nhận xét mã nguồn C ++.
http://blog.demofox.org/2016/09/21/path-tracing-getting-started-with-diffuse-and-emissive/