- Xin lỗi vì bài viết dài, nhưng tôi thích làm theo cách đó vì " Quỷ dữ nằm trong chi tiết. " :)
Tôi đang viết một công cụ kiểm tra đường đi từ vết xước và nó đang hoạt động tốt cho các bề mặt khuếch tán hoàn hảo (Lambertian) ( nghĩa là thử nghiệm lò cho thấy - ít nhất là về mặt trực quan - rằng đó là bảo tồn năng lượng và kết xuất hình ảnh phù hợp với những gì được tạo ra với trình kết xuất Mitsuba cho cùng thông số). Bây giờ tôi đang triển khai hỗ trợ cho thuật ngữ cụ thể của mô hình microfacet Cook-Torrance ban đầu, để hiển thị một số bề mặt kim loại. Tuy nhiên, dường như BRDF này đang phản ánh nhiều năng lượng hơn mức nhận được. Xem hình ảnh ví dụ dưới đây:
Ảnh trên: Hình tham chiếu Mitsuba (giả sử là chính xác): Truy tìm đường đi với lấy mẫu ánh sáng trực tiếp, lấy mẫu bán cầu quan trọng, đường dẫn tối đa = 5, 32 spp phân tầng, bộ lọc hộp, độ nhám bề mặt = 0,2, RGB.
Hình ảnh trên: Hình ảnh hiển thị thực tế: Truy tìm đường dẫn ngây thơ, lấy mẫu bán cầu đồng nhất, đường dẫn tối đa chiều dài = 5, 4096 spp phân tầng, bộ lọc hộp, độ nhám bề mặt = 0,2, RGB. Mặc dù có một số khác biệt về cài đặt kết xuất, rõ ràng hình ảnh được hiển thị sẽ không hội tụ đến tham chiếu được hiển thị trước đó.
Tôi có xu hướng nghĩ rằng đó không phải là một vấn đề triển khai, mà là một vấn đề liên quan đến việc sử dụng đúng mô hình Cook-Torrance trong khung phương trình kết xuất. Dưới đây tôi giải thích cách tôi đánh giá BRDF đầu cơ và tôi muốn biết liệu tôi có làm đúng hay không và nếu không thì tại sao.
Trước khi đi sâu vào các chi tiết khó chịu, hãy lưu ý rằng trình kết xuất khá đơn giản: 1) chỉ thực hiện thuật toán theo dõi đường dẫn ngây thơ - không lấy mẫu ánh sáng trực tiếp, không theo dõi đường đi hai chiều, không MLT; 2) tất cả các mẫu đều đồng nhất trên bán cầu phía trên điểm giao nhau - hoàn toàn không lấy mẫu quan trọng, không cho các bề mặt khuếch tán; 3) đường tia có độ dài tối đa cố định là 5 - không có roulette Nga; 4) độ rạng rỡ / độ phản xạ được thông báo qua các bộ dữ liệu RGB - không hiển thị quang phổ.
Mô hình nấu microfacet nấu ăn
Bây giờ tôi sẽ cố gắng xây dựng đường dẫn mà tôi đã theo dõi để thực hiện biểu thức đánh giá BRDF cụ thể. Mọi thứ bắt đầu với phương trình kết xuất trong đó là điểm giao nhau ở bề mặt, là vectơ xem, là vectơ ánh sáng, là sự tỏa sáng đi dọc theo , là sự cố rạng rỡ trên dọc theo và .p w o
Tích phân trên ( nghĩa là thuật ngữ phản xạ của phương trình kết xuất) có thể được xấp xỉ bằng công cụ ước tính Monte Carlo sau đây trong đó là hàm mật độ xác suất (PDF) mô tả phân phối lấy mẫu vectơ . pwk
Để kết xuất thực tế, BRDF và PDF phải được chỉ định. Trong trường hợp thuật ngữ cụ thể của mô hình Cook-Torrance, tôi đang sử dụng BRDF trong đó Trong các phương trình trên, D=1
Nó là bắt buộc để sử dụng lấy mẫu quan trọng trong trường hợp hiển thị các bề mặt đầu cơ trơn. Tuy nhiên, tôi chỉ tạo mô hình cho các bề mặt gồ ghề hợp lý ( ), do đó, tôi đã quyết định giữ mẫu với thống nhất trong một thời gian (với chi phí thời gian kết xuất lâu hơn). Trong trường hợp này, PDF là Bằng cách thay thế PDF thống nhất và Cook-Torrance BRDF vào công cụ ước tính Monte Carlo (lưu ý rằng là được thay thế bởi , biến ngẫu nhiên), tôi nhận được
Vì vậy, đó là biểu thức mà tôi đang đánh giá khi một tia chạm vào bề mặt hình dạng có độ phản xạ được mô tả bởi Cook-Torrance BRDF. Đó là biểu hiện dường như đang phản ánh nhiều năng lượng hơn mức nhận được. Tôi gần như chắc chắn rằng có điều gì đó không ổn với nó (hoặc trong quá trình phái sinh), nhưng tôi không thể phát hiện ra điều đó.
Thật thú vị, nếu tôi nhân biểu thức trên với , tôi sẽ nhận được kết quả trông chính xác. Tuy nhiên, tôi đã từ chối làm điều đó bởi vì tôi không thể biện minh cho toán học.
Bất kỳ trợ giúp đều rất đáng hoan nghênh! Cảm ơn bạn!
CẬP NHẬT
Như @wolle đã chỉ ra bên dưới, bài viết này trình bày một công thức mới phù hợp hơn với theo dõi đường dẫn, trong đó hàm phân phối bình thường (NDF) bao gồm yếu tố và BRDF bao gồm yếu tố. Do đó, và vào các phương trình trên phương trình kết xuất, tôi đã kết thúc với
CẬP NHẬT 2
Như PeteUK đã chỉ ra , quyền tác giả của công thức Fresnel được trình bày trong văn bản gốc của câu hỏi của tôi đã bị gán sai cho Cook và Torrance. Công thức Fresnel được sử dụng ở trên thực sự được gọi là phép tính gần đúng của Schlick và được đặt theo tên của Barshe Schlick. Các văn bản gốc của câu hỏi đã được sửa đổi cho phù hợp.