คำถามติดแท็ก microfacet

1
การชดเชยการสูญเสียพลังงานในรุ่น BSDF ของไมโครฟอร์แมตแบบกระจาย
แบบจำลองพื้นผิวที่ใช้ไมโครฟิล์มแบบกระจัดกระจายเช่นTorrance-Sparrow BRDFดั้งเดิมหรือแบบจำลองที่ได้มาเช่นBSDF สำหรับพื้นผิวอิเล็กทริกแบบหยาบโดย Walter et al ละเลยการสะท้อนแสงระหว่าง microfacets ซึ่งส่งผลให้สูญเสียพลังงานทำให้เกิดความมืดโดยเฉพาะอย่างยิ่งเมื่อค่าความหยาบสูงขึ้น สามารถแสดงปัญหาได้อย่างง่ายดายโดยใช้การทดสอบเตาหลอม ภาพต่อไปนี้แสดงพฤติกรรมการใช้ไมโครฟิล์มนำไฟฟ้า BRDF ของฉันโดยใช้แบบจำลอง Smith และการแจกแจง GGX สำหรับพารามิเตอร์ความหยาบจาก 0.2 ถึง 1.0 (ค่าสัมประสิทธิ์ Fresnel ถูกตั้งค่าเป็น 1 ที่นี่เพื่อทำให้ปัญหาง่ายขึ้น): การทดสอบเตาเผาของอิเล็กทริกหยาบ (IoR 1.51) BSDF โดยใช้แบบจำลอง Smith และการกระจายไมโครฟิล์ม GGX สำหรับพารามิเตอร์ความหยาบตั้งแต่ 0.2 ถึง 1.0: Eric Heitz และคณะ มีเพียงแค่เมื่อเร็ว ๆ นี้นำเสนอรูปแบบหลายกระเจิงซึ่งจะช่วยแก้ปัญหาคล้ำโดยการแก้ปฏิสัมพันธ์แสงสมบูรณ์ แต่มีปัญหาประสิทธิภาพการทำงานเนื่องจากลักษณะสุ่มของกิจวัตรประจำวันการประเมินผลของมันเป็น metioned โดย Heitz ตัวเองอยู่ในฟอรั่มลักซ์เร็นเดอร์ มีวิธีการชดเชยที่เป็นที่รู้จักสำหรับการกู้คืนพลังงานที่สูญเสียไปของแบบจำลองการกระเจิงเดี่ยวหรือไม่? ไม่จำเป็นต้องถูกต้องตามร่างกาย …

1
รูปแบบที่ถูกต้องของคำศัพท์เรขาคณิต GGX
ฉันกำลังพยายามนำ BRDF ของ microfacet ไปใช้ใน raytracer ของฉัน แต่ฉันพบปัญหาบางอย่าง เอกสารและบทความจำนวนมากที่ฉันได้อ่านให้นิยามคำเรขาคณิตบางส่วนเป็นฟังก์ชันของมุมมองและเวกเตอร์ครึ่งหนึ่ง: G1 (v, h) อย่างไรก็ตามเมื่อใช้งานนี้ฉันได้รับผลลัพธ์ดังต่อไปนี้: (แถวล่างเป็นฉนวนความหยาบ 1.0 - 0.0, แถวบนสุดเป็นโลหะที่มีความหยาบ 1.0 - 0.0) มีไฮไลท์แปลก ๆ อยู่รอบ ๆ ขอบและตัดรอบ ๆ nl == 0 ฉันไม่สามารถเข้าใจได้ว่ามันมาจากไหน ฉันใช้ Unity เป็นข้อมูลอ้างอิงในการตรวจสอบการแสดงผลของฉันดังนั้นฉันจึงตรวจสอบแหล่งที่มาของ shader เพื่อดูว่าพวกเขาใช้อะไรและจากสิ่งที่ฉันสามารถบอกได้ว่าเทอมเรขาคณิตของพวกเขานั้นไม่ได้ถูกพาราเมท ดังนั้นฉันจึงลองใช้รหัสเดียวกัน แต่ใช้กับพื้นผิวมาโครปกติแทนที่จะเป็นครึ่งเวคเตอร์และได้ผลลัพธ์ดังนี้ สำหรับดวงตาที่ไม่ผ่านการฝึกฝนของฉันสิ่งนี้ดูเหมือนจะใกล้เคียงกับผลลัพธ์ที่ต้องการ แต่ฉันมีความรู้สึกว่ามันไม่ถูกต้อง? บทความที่ฉันอ่านส่วนใหญ่ใช้เวกเตอร์ครึ่งตัว แต่ไม่ใช่ทั้งหมด มีเหตุผลสำหรับความแตกต่างนี้หรือไม่? ฉันใช้รหัสต่อไปนี้เป็นคำเรขาคณิตของฉัน: float RayTracer::GeometryGGX(const Vector3& v, const Vector3& …
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.