ติดตามเส้นทาง Cook-Torrance BRDF


27

- ขออภัยสำหรับการโพสต์ที่ยาวนาน แต่ฉันชอบที่จะทำอย่างนั้นเพราะ " ปีศาจอยู่ในรายละเอียด " :)

ฉันกำลังเขียนตัวติดตามเส้นทางจากรอยขีดข่วนและมันทำงานได้ดีสำหรับพื้นผิวที่กระจายอย่างสมบูรณ์ (Lambertian) ( เช่นการทดสอบการบ่งชี้ของเตาเผา - อย่างน้อยก็มองเห็นได้ - ว่าเป็นการอนุรักษ์พลังงานและภาพที่แสดงนั้นตรงกับที่สร้างด้วย Mitsuba renderer พารามิเตอร์) ตอนนี้ฉันกำลังใช้การสนับสนุนคำศัพท์เฉพาะของรุ่น microfacet Cook-Torrance ดั้งเดิมเพื่อแสดงพื้นผิวโลหะบางอย่าง อย่างไรก็ตามดูเหมือนว่า BRDF นี้จะสะท้อนพลังงานมากกว่าที่ได้รับ ดูภาพตัวอย่างด้านล่าง:

รูปภาพอ้างอิง Mitsuba

ภาพด้านบน: ภาพอ้างอิงมิตซูบะ (สันนิษฐานว่าถูกต้อง) ภาพ: การติดตามเส้นทางด้วยการสุ่มตัวอย่างแสงโดยตรงการสุ่มตัวอย่างซีกโลกที่สำคัญความยาวเส้นทางสูงสุด = 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เป็นเวกเตอร์การรับชมที่กว้างฉัน

Lโอ(พี,Wโอ)=Lอี+ΩLผม(พี,Wผม)R(Wโอ,Wผม)cosθdω
พีWโอWผมคือเวกเตอร์อ่อน, คือรัศมีการส่งออกพร้อมw o , L ฉันคือเหตุการณ์ความกระจ่างใสเมื่อpตามw iและcos θ = nw ฉันLโอWโอLผมพีWผมcosθ=nWผมฉัน

อินทิกรัลด้านบน ( คือระยะการสะท้อนของสมการเรนเดอร์) สามารถประมาณได้ด้วยตัวประมาณค่ามอนติคาร์โลต่อไปนี้ โดยที่pคือฟังก์ชันความหนาแน่นของความน่าจะเป็น (PDF) ที่อธิบายการแจกแจงของเวกเตอร์สุ่มตัวอย่างwk

1ยังไม่มีข้อความΣk=1ยังไม่มีข้อความLผม(พี,Wk)R(Wk,Wโอ)cosθพี(Wk)
พีWk k

สำหรับการเรนเดอร์จริงต้องระบุ BRDF และ PDF ในกรณีของคำศัพท์เฉพาะของโมเดล Cook-Torrance ฉันใช้ BRDF f r ( w i , w o )ต่อไปนี้ = D F G โดยที่ D=1

R(Wผม,Wโอ)=DFGπ(nWผม)(nWโอ)
F=cspec+(1-cspec)(1-wฉันh)5G=นาที(1,2(nh)(n⋅)wo)
D=1ม.2(nชั่วโมง)4ประสบการณ์((nชั่วโมง)2-1ม.2(nชั่วโมง)2)
F=sพีอี+(1-sพีอี)(1-Wผมชั่วโมง)5
ในสมการข้างบนh=wo+wi
G=นาที(1,2(nชั่วโมง)(nWโอ)Wโอชั่วโมง,2(nชั่วโมง)(nWผม)Wโอชั่วโมง)
และcspecคือสี specular สมการทั้งหมดยกเว้นFถูกดึงออกมาจากกระดาษต้นฉบับ Fหรือที่รู้จักกันในชื่อการประมาณของ Schlick นั้นเป็นการประมาณที่มีประสิทธิภาพและแม่นยำน้อยกว่ากับเทอม Fresnel ที่แท้จริงชั่วโมง=Wโอ+Wผม|Wโอ+Wผม|sพีอีFF

ม.0.2

พี(Wk)=12π
WผมWk
1ยังไม่มีข้อความΣk=1ยังไม่มีข้อความLผม(พี,Wk)(DFGπ(nWk)(nWโอ))cosθ(12π)
π
2Lผม(พี,Wk)(DFG(nWk)(nWโอ))cosθ
cosθ=nWk
2Lผม(พี,Wk)(DFGnWโอ)

นั่นคือนิพจน์ที่ฉันกำลังประเมินเมื่อรังสีกระทบพื้นผิวแบบ specular ซึ่งมีการสะท้อนแสงโดย Cook-Torrance BRDF นั่นคือการแสดงออกที่ดูเหมือนว่าจะสะท้อนพลังงานมากกว่าที่ได้รับ ฉันเกือบจะแน่ใจว่ามีบางอย่างผิดปกติกับมัน (หรือในกระบวนการที่มา) แต่ฉันไม่สามารถมองเห็นมัน

1π

ความช่วยเหลือใด ๆ ยินดีมาก! ขอขอบคุณ!

UPDATE

D1πR14

DnอีW=1πม.2(nชั่วโมง)4ประสบการณ์((nชั่วโมง)2-1ม.2(nชั่วโมง)2)
RnอีW(Wผม,Wโอ)=DFG4(nWผม)(nWโอ)
π2Lผม(พี,Wk)(DnอีWFGnWโอ)
DR

อัพเดท 2

ดังที่PeteUKชี้ให้เห็นการเขียนสูตร Fresnel ที่นำเสนอในข้อความต้นฉบับของคำถามของฉันนั้นมาจาก Cook และ Torrance อย่างผิด ๆ สูตร Fresnel ที่ใช้ด้านบนนั้นเป็นที่รู้จักกันในชื่อจริงของการประมาณของ Schlickและตั้งชื่อตาม Christophe Schlick ข้อความต้นฉบับของคำถามถูกแก้ไขตามนั้น


ไม่แน่ใจว่าคุณยังคงเยี่ยมชมเว็บไซต์นี้อยู่หรือไม่ แต่ฉันมีคำถามเกี่ยวกับสมการ Fresnel ของคุณและโพสต์ไว้ที่นี่
PeteUK

คำตอบ:


12

1πR14

R=DFG4(nWผม)(nWโอ),
π2Lผม(พี,Wk)(DFGnWโอ).

141π=π2

1/π

1πD14R1πD

π

1πD14R

13

1π14

1π

14(nωผม)

14

หากต้องการคำอธิบายที่ดีคุณควรตรวจสอบ[Nayar, 91] , ภาคผนวก D. ต่อไปนี้เป็นภาพจากกระดาษแผ่นเดียวกัน:

dω'=dωR4cosθผม'

โจสแตมเห็นด้วยกับของนายาร์14

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.