- ขออภัยสำหรับการโพสต์ที่ยาวนาน แต่ฉันชอบที่จะทำอย่างนั้นเพราะ " ปีศาจอยู่ในรายละเอียด " :)
ฉันกำลังเขียนตัวติดตามเส้นทางจากรอยขีดข่วนและมันทำงานได้ดีสำหรับพื้นผิวที่กระจายอย่างสมบูรณ์ (Lambertian) ( เช่นการทดสอบการบ่งชี้ของเตาเผา - อย่างน้อยก็มองเห็นได้ - ว่าเป็นการอนุรักษ์พลังงานและภาพที่แสดงนั้นตรงกับที่สร้างด้วย Mitsuba renderer พารามิเตอร์) ตอนนี้ฉันกำลังใช้การสนับสนุนคำศัพท์เฉพาะของรุ่น microfacet Cook-Torrance ดั้งเดิมเพื่อแสดงพื้นผิวโลหะบางอย่าง อย่างไรก็ตามดูเหมือนว่า BRDF นี้จะสะท้อนพลังงานมากกว่าที่ได้รับ ดูภาพตัวอย่างด้านล่าง:
ภาพด้านบน: ภาพอ้างอิงมิตซูบะ (สันนิษฐานว่าถูกต้อง) ภาพ: การติดตามเส้นทางด้วยการสุ่มตัวอย่างแสงโดยตรงการสุ่มตัวอย่างซีกโลกที่สำคัญความยาวเส้นทางสูงสุด = 5, 32 เอสพีพีที่จัดแบ่งชั้นกรองกล่องพื้นผิวขรุขระ = 0.2, RGB
ภาพด้านบน: ภาพที่แสดงจริง: กำลังดุร้ายไร้เดียงสาการติดตามเส้นทาง, การสุ่มตัวอย่างซีกโลกสม่ำเสมอ, ความยาวพา ธ สูงสุด = 5, 4096 stratified spp, กล่องกรอง, ความหยาบผิว = 0.2, RGB แม้จะมีความแตกต่างบางประการเกี่ยวกับการตั้งค่าการเรนเดอร์ แต่ก็เป็นที่ชัดเจนว่าภาพที่เรนเดอร์จะไม่รวมเข้ากับการอ้างอิงที่แสดงก่อนหน้านี้
ฉันมักจะคิดว่ามันไม่ใช่ปัญหาการใช้งาน แต่เป็นปัญหาเกี่ยวกับการใช้โมเดล Cook-Torrance ที่เหมาะสมภายในกรอบการแสดงผลสมการ ด้านล่างฉันอธิบายว่าฉันประเมิน BRDF specular ได้อย่างไรและฉันต้องการทราบว่าฉันกำลังทำอย่างถูกต้องหรือไม่และเพราะเหตุใด
ก่อนที่จะเข้าไปในรายละเอียด nitty-gritty ให้สังเกตว่า renderer นั้นค่อนข้างง่าย: 1) ใช้เฉพาะขั้นตอนวิธีการติดตามเส้นทางกำลังแบบเดรัจฉาน - ไม่มีการสุ่มตัวอย่างแสงโดยตรงไม่มีการติดตามเส้นทางแบบสองทิศทางไม่มี MLT; 2) การสุ่มตัวอย่างทั้งหมดนั้นเหมือนกันในซีกโลกเหนือจุดตัด - ไม่มีการสุ่มตัวอย่างที่สำคัญเลย 3) เส้นทางรังสีมีความยาวสูงสุดคงที่ 5 - ไม่มีรูเล็ตรัสเซีย; 4) ความกระจ่าง / การสะท้อนจะแจ้งผ่าน RGB tuples - ไม่มีการเรนเดอร์สเปกตรัม
รูปแบบ microfacet Cook Torrance
ตอนนี้ฉันจะพยายามสร้างเส้นทางที่ฉันทำตามเพื่อใช้นิพจน์การประเมินผลแบบ BRDF แบบ specular ทุกอย่างเริ่มต้นด้วยสมการแสดงผล ที่Pเป็นจุดแยกที่พื้นผิว , W oเป็นเวกเตอร์การรับชมที่กว้างฉัน
อินทิกรัลด้านบน ( คือระยะการสะท้อนของสมการเรนเดอร์) สามารถประมาณได้ด้วยตัวประมาณค่ามอนติคาร์โลต่อไปนี้ โดยที่pคือฟังก์ชันความหนาแน่นของความน่าจะเป็น (PDF) ที่อธิบายการแจกแจงของเวกเตอร์สุ่มตัวอย่างwk
สำหรับการเรนเดอร์จริงต้องระบุ BRDF และ PDF ในกรณีของคำศัพท์เฉพาะของโมเดล Cook-Torrance ฉันใช้ BRDF f r ( w i , w o )ต่อไปนี้ = D F G โดยที่ D=1
นั่นคือนิพจน์ที่ฉันกำลังประเมินเมื่อรังสีกระทบพื้นผิวแบบ specular ซึ่งมีการสะท้อนแสงโดย Cook-Torrance BRDF นั่นคือการแสดงออกที่ดูเหมือนว่าจะสะท้อนพลังงานมากกว่าที่ได้รับ ฉันเกือบจะแน่ใจว่ามีบางอย่างผิดปกติกับมัน (หรือในกระบวนการที่มา) แต่ฉันไม่สามารถมองเห็นมัน
ความช่วยเหลือใด ๆ ยินดีมาก! ขอขอบคุณ!
UPDATE
อัพเดท 2
ดังที่PeteUKชี้ให้เห็นการเขียนสูตร Fresnel ที่นำเสนอในข้อความต้นฉบับของคำถามของฉันนั้นมาจาก Cook และ Torrance อย่างผิด ๆ สูตร Fresnel ที่ใช้ด้านบนนั้นเป็นที่รู้จักกันในชื่อจริงของการประมาณของ Schlickและตั้งชื่อตาม Christophe Schlick ข้อความต้นฉบับของคำถามถูกแก้ไขตามนั้น