การทดสอบเตาหลอมสีขาว
(lousodrome.net)- ภายใต้แสงแวดล้อมที่สม่ำเสมอ วัตถุที่สะท้อน 100% ควรแยกไม่ออกจากฉากหลัง และใช้คุณสมบัตินี้เพื่อตรวจสอบความสอดคล้องทางฟิสิกส์ของเรนเดอเรอร์ได้อย่างรวดเร็ว
- ไม่ว่าจะเป็นวัสดุด้าน กระจกเงา หรือวัสดุระหว่างสองแบบนั้น หากสะท้อนสมบูรณ์และได้รับแสงอย่างสม่ำเสมอ ก็ต้องมองเห็นเหมือนสภาพแวดล้อมจนดู ราวกับหายไป
- หิมะใหม่สามารถมีอัลเบโดได้สูงถึง 90~98% และเมื่อเจอกับอากาศครึ้มหรือหมอก อาจเกิดภาวะ whiteout ที่ทำให้แยกท้องฟ้ากับหิมะไม่ออก
- การทดสอบนี้ใช้ตรวจว่า BRDF มีการสูญเสียหรือสร้างพลังงานขึ้นมาใหม่หรือไม่ และใน สภาพแวดล้อมสีเทา พลังงานสะท้อนที่มากเกินไปจะยิ่งเห็นสว่างเด่นขึ้น ทำให้หาข้อผิดพลาดได้ง่าย
- Lambertian BRDF สีขาวล้วนมีความเรียบง่ายและการอนุรักษ์พลังงานที่ชัดเจน จึงเหมาะเป็นการตรวจพื้นฐานเพื่อเผย บั๊กในการอินทิเกรต เช่น การแจกแจงการสุ่มตัวอย่าง น้ำหนัก PDF หรือการลืมตัวคูณอย่าง π หรือ 2
ทำไมวัตถุจึงควรหายไปภายใต้แสงที่สม่ำเสมอ
- หาก วัตถุที่สะท้อน 100% ถูกส่องด้วย สภาพแวดล้อมที่สม่ำเสมอ วัตถุนั้นควรแยกไม่ออกจากฉากหลัง
- คุณสมบัตินี้ไม่ขึ้นกับว่าวัตถุนั้นเป็นวัสดุด้าน สะท้อนแบบกระจก หรือเป็นวัสดุระหว่างสองแบบนั้น
- หากวัตถุไม่ปรากฏในผลลัพธ์การเรนเดอร์ นั่นเป็นสัญญาณว่าผลลัพธ์ตรงกับสิ่งที่คาดไว้ทางคณิตศาสตร์
ตัวอย่างคล้ายกันในโลกจริง: whiteout
- หิมะใหม่สามารถมีอัลเบโดสูงได้ถึง 90~98% จนเกือบใกล้เคียงสีขาวสมบูรณ์
- เมื่อซ้อนทับกับอากาศครึ้มหรือหมอก อาจเกิดภาวะ whiteout ที่ทำให้แยกหิมะกับท้องฟ้าไม่ออก
- ในสถานการณ์นี้ ทุกทิศทางจะดูเป็นสีขาวสม่ำเสมอ ทำให้แม้แต่ความลาดชันที่อยู่ตรงหน้าก็อาจแยกด้วยตาได้ยาก
การตรวจสอบการอนุรักษ์พลังงานของ BRDF
- การทดสอบเตาหลอมสีขาวมักถูกใช้เพื่อตรวจว่า BRDF เป็นไปตาม การอนุรักษ์พลังงาน หรือไม่
- ประเด็นสำคัญคือการตรวจว่าในกระบวนการสะท้อน มีพลังงานหายไปหรือเกิดขึ้นใหม่หรือไม่
- ตัวอย่างเช่น ใช้ตรวจปัญหาที่วัสดุดูมืดลงเมื่อค่า roughness เพิ่มขึ้น หรือสถานการณ์ที่การสะท้อนหลายครั้งมีผลมากจนละเลยไม่ได้
- นอกจากสภาพแวดล้อมสีขาวแล้ว สภาพแวดล้อมสีเทา ก็มีประโยชน์เช่นกัน
- หากพลังงานสะท้อนมากเกินไป วัตถุจะดูสว่างกว่าสิ่งรอบข้างจนเห็นข้อผิดพลาดได้ชัด
วิธีใช้ตรวจการอินทิเกรตในเรนเดอเรอร์
- การทดสอบเตาหลอมสีขาวมีประสิทธิภาพไม่เพียงกับตัว BRDF เอง แต่ยังใช้ตรวจ ส่วนการอินทิเกรต ของเรนเดอเรอร์ได้ด้วย
- Lambertian BRDF ที่มีอัลเบโด 100% มีการอนุรักษ์พลังงานสมบูรณ์และติดตั้งใช้งานง่าย จึงเหมาะสำหรับเปิดเผยบั๊กในเรนเดอเรอร์
- จุดที่อาจเกิดปัญหามีได้หลายแห่ง
- การแจกแจงการสุ่มตัวอย่าง
- น้ำหนักของตัวอย่าง
- การคำนวณ PDF
- การลืมตัวคูณอย่าง π หรือ 2
- ข้อผิดพลาดเหล่านี้อาจทำให้ภาพที่ได้ยังดูสมเหตุสมผลอยู่ จึงค้นหาได้ยาก
ตัวอย่างความล้มเหลวและการใช้ดีบัก
- เมื่อเขียน path tracer หรือเวอร์ชันดัดแปลง สร้าง pre-convolved environment map หรือทดลองการแจกแจงการสุ่มตัวอย่างแบบอื่น การเริ่มจาก Lambertian BRDF สีขาวล้วนแล้วให้ผ่าน การทดสอบเตาหลอมสีขาว ก่อน เป็นวิธีที่มีประโยชน์
- เมื่อผ่านขั้นตอนนี้แล้ว จึงค่อยเชื่อถือการติดตั้งใช้งานได้ในระดับหนึ่งและไปทดสอบตัว BRDF เองต่อ
- หลังจากมีคอมเมนต์บน Hacker News ตัวอย่าง ShaderToy ได้เพิ่มแมโคร
SIMULATE_INCORRECT_INTEGRATIONเพื่อให้เห็นกรณีทดสอบที่ล้มเหลว - แมโครนี้จำลอง บั๊กการอินทิเกรตที่ไม่ถูกต้อง เช่น ลืมว่าการอินทิเกรตบนซีกทรงกลมมีค่าเท่ากับ 2π หรือไม่คำนึงถึงการแจกแจงการสุ่มตัวอย่าง
- เมื่อเปิดใช้บั๊ก ทรงกลมจะสะท้อนพลังงานได้ไม่ถูกต้องตามปริมาณที่ควรเป็น จึงมองเห็นได้บนหน้าจอ
1 ความคิดเห็น
ความคิดเห็นจาก Hacker News
ช่วงหลังได้ทำ ตัวเรนเดอร์แบบอิงฟิสิกส์ (PBR) ตามบทเรียน PBR ของ learnopengl แต่ไม่ผ่าน white furnace test
ต้องขอบคุณเรื่องนั้นที่ทำให้รู้ว่าตัวเองไม่ได้เข้าใจคณิตศาสตร์ที่นำมาใช้มากนัก และอย่างที่ผู้เขียนบอก การคูณ π หรือ 2 แบบสุ่ม ๆ ก็ไม่ได้ทำให้ผลตรงขึ้นมา
มีโมเดลที่พิจารณาการสะท้อนกันเองระหว่างไมโครแฟเซ็ตเชิงทฤษฎีซึ่งประกอบเป็นการกระจายตัวของเวกเตอร์ปกติที่กลายเป็น BRDF และถึงจะดีกว่า แต่ก็ยังไม่แน่ใจว่าแม้แต่โมเดลเหล่านั้นจะผ่านการทดสอบนี้แบบตรง ๆ หรือไม่
ในทางปฏิบัติ สิ่งที่ใช้กันแพร่หลายส่วนใหญ่มักสูญเสียพลังงาน และบางกรณีก็ใช้ ตารางค้นหา วางทับบน BRDF เพื่อชดเชยเรื่องนี้
แปลกใจที่บทความนี้ขึ้นมาอยู่ด้านบนของ HN จริง ๆ แล้วมี furnace test อยู่สองแบบ และอีกแบบคือการทดสอบที่ภายใต้เงื่อนไขการเปล่งแสง 0.5 และอัลบีโด 0.5 ผลลัพธ์ควรได้ 1.0 ยกเว้นความคลาดเคลื่อนระดับพิกเซลจากนอยส์
นานมาแล้ว เคยมีความพยายามใน https://graphics.stanford.edu/~boulos/papers/brdftog.pdf ที่ยอมแลก การอนุรักษ์พลังงาน กับความสามารถในการสร้างข้อมูลซ้ำได้ แต่ต้องแลกด้วยการละทิ้ง reciprocity
สุดท้ายก็ไม่มีใครใส่ใจกับการปรับข้อมูลวัสดุจาก BRDF โดยอัตโนมัติมากนัก และถึงจะมีคนสนใจ ก็ยังชอบ BSDF ที่สมมาตรและอนุรักษ์พลังงานได้เพียงพอมากกว่า
งานวิจัยหลังจากนั้นส่วนใหญ่ก็ปรับปรุงไปในทิศทางนั้น โดยเฉพาะเมื่อทำลายสมมาตรแล้ว เทคนิคอย่าง bidirectional path tracing จะเริ่มมีพฤติกรรมค่อนข้างแปลก
สงสัยว่าทำไมชื่อการทดสอบถึงมีคำว่า furnace อยู่ด้วย เข้าใจแนวคิดโดยรวม แต่ชื่อฟังดูค่อนข้างตั้งขึ้นมาเอง เลยอยากรู้ว่ามีที่มาหรือไม่
แนวคิดตรงนี้ก็คล้ายกัน คือวัตถุถูกขังอยู่ในโพรงที่มีสเปกตรัมการแผ่รังสีสม่ำเสมอ เพียงแต่ในกรณีนี้ไม่ใช่วัตถุดำ แต่เป็นสีขาว
พอดีไม่กี่วันก่อน YouTube แนะนำวิดีโอเกี่ยวกับหัวข้อนี้ขึ้นมา เป็นเนื้อหาของ Blender 4.0 ที่มีกำหนดปล่อย
จะมีฟังก์ชัน Multiscatter GGX ใหม่ใน BSDF โดยลงลึกกว่านี้มากและมีตัวอย่างให้ดูเยอะ
https://www.youtube.com/watch?v=v6qXbV_Q7z4
ไม่รู้ว่า ShaderToy ที่ฝังไว้เดิมควรแสดงผลอย่างไร กดเล่นแล้วรอก็ยังไม่มีอะไรเกิดขึ้นเกิน 1 นาที
ถ้ามีแค่ภาพหน้าจอของการทดสอบที่ล้มเหลวสักไม่กี่ภาพ บทความก็น่าจะดีขึ้นมาก
หลังจากนั้นทรงกลมสีแดงและสีน้ำเงินกลับมาอีก และมีสิ่งที่เหมือนการสะท้อนให้เห็นบนทรงกลมตรงกลาง แต่ทรงกลมตรงกลาง “กลืน” ไปกับพื้นหลังจนแยกได้ยากว่าเป็นทรงกลม