การสุ่มตัวอย่างซีกโลกถ่วงน้ำหนักยังคงต้องใช้ NdotL เมื่อคำนวณการมีส่วนร่วมสำหรับแสงทางอ้อมหรือไม่?


12

เมื่อแปลงจากการสุ่มตัวอย่างซีกโลกเท่ากันเพื่อการสุ่มตัวอย่างซีกโลกถ่วงน้ำหนักโคไซน์ฉันสับสนโดยคำสั่งในบทความ

ผลงานทางอ้อมในปัจจุบันของฉันถูกคำนวณดังนี้:

Vec3 RayDir = UniformGenerator.Next()
Color3 indirectDiffuse = Normal.dot(RayDir) * castRay(Origin, RayDir)

จุดผลิตภัณฑ์เป็น cos (θ)

แต่ในบทความนี้เกี่ยวกับการสุ่มตัวอย่างที่ดีกว่า ( http://www.rorydriscoll.com/2009/01/07/better-sampling/ ) ผู้เขียนแนะนำว่า PDF คือ (cos (θ) / pi) และไม่มีหลักฐานของ การคำนวณ N dot L

คำถามของฉันคือ - นั่นหมายความว่าฉันไม่จำเป็นต้องทำการ dot dotDirection ปกติอีกต่อไปเพราะมันรวมอยู่ใน PDF หรือนอกเหนือจาก pdf หรือไม่

คำตอบ:


12

คุณต้องคูณด้วยเทอมโคไซน์เสมอ (ซึ่งเป็นส่วนหนึ่งของสมการเรนเดอร์) แต่เมื่อคุณทำกระจายทางอ้อมโดยใช้ ray ติดตามและบูรณาการจึง Monte-Carol (ซึ่งเป็นเทคนิคที่พบมากที่สุดในกรณีนี้) คุณจะต้องแบ่งส่วนร่วมของแต่ละตัวอย่างโดยคุณPDF นี่เป็นตัวอย่างที่ดี

โปรดทราบว่าในการอ้างอิงดังกล่าวหาก PDF มีเงื่อนไขที่คุณพบในสมการเรนเดอร์คุณสามารถเพิ่มประสิทธิภาพโค้ดได้หากต้องการโดยการยกเลิกข้อกำหนดเหล่านี้

อย่าลืมว่า BRDF ของพื้นผิวแบบกระจายคือρ / πโดยที่ρหมายถึง albedo พื้นผิว ดังนั้นเราต้องหารผลลัพธ์ด้วยπ แม้ว่าในกรณีขององค์ประกอบกระจายทางอ้อมอย่าลืมว่าเราควรแบ่งผลลัพธ์ของ castRay ด้วย PDF ของตัวแปรสุ่มซึ่งดังที่เราแสดงไว้ก่อนหน้าในบทนี้คือ 1 / (2 () การแบ่งทางอ้อมการแจกแจงโดย 1 / (2π) ผิดเหมือนกับการคูณค่านี้ด้วย2π และเนื่องจากอัลเบโดหารด้วยπเราจึงสามารถทำให้รหัสง่ายขึ้น ...

คุณมีสถานการณ์ที่คล้ายกัน หากคุณดู PDF สำหรับการสุ่มตัวอย่างโคไซน์คุณจะทราบว่าสามารถยกเลิกข้อกำหนดได้ ซึ่งไม่ได้หมายความว่าพวกเขาไม่จำเป็นอย่างยิ่ง พวกเขาเป็นพวกเขาเพียงแค่ยกเลิกซึ่งกันและกันซึ่งช่วยให้การปรับรหัสเล็กน้อย คุณอยู่ในการเพิ่มประสิทธิภาพขนาดเล็กที่นี่ ... ซึ่งอาจสร้างความสับสนหากคุณพยายามเรียนรู้ทฤษฎีโดยเพียงแค่ดูโค้ดที่ปรับให้เหมาะสม

(cos(θ)...)PDF=(cos(θ)...)cos(θ)π=...


1
ขอบคุณ! นั่นทำให้รู้สึก ฉันรู้ว่ามันจำเป็น แต่ฉันไม่ได้ตระหนักว่าเป็นการเพิ่มประสิทธิภาพ
Steven

5
เพียงเพื่อให้แน่ใจว่าสิ่งนี้มีความชัดเจน .. ไม่เพียง แต่การเพิ่มประสิทธิภาพแบบซีกโลกถ่วงน้ำหนักเพราะใช้คำสั่งน้อยลง แต่ยังเป็นการเพิ่มประสิทธิภาพเพราะมันมาบรรจบกันอย่างรวดเร็วยิ่งขึ้น ใช้ตัวอย่างน้อยลงเพื่อให้ได้ผลลัพธ์ที่ดีขึ้น นี่คือรูปแบบของการสุ่มตัวอย่างที่สำคัญ
Alan Wolfe

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