การให้แสงเงาแบบฟ็อง
การให้แสงเงาแบบฟ็อง (Phong shading) หรือ การประมาณค่าในช่วงของฟ็อง (Phong interpolation)[1] เป็นเทคนิคการประมาณค่าในช่วงสำหรับการคำนวณการให้แสงเงาในคอมพิวเตอร์กราฟิกส์สามมิติ โดยกำหนดค่าสีในแต่ละพิกเซล โดยการประมาณค่าในช่วงของเวกเตอร์แนวฉากตลอดทั่วโพลีกอน
เทคนิคนี้คิดค้นโดยบู่ย เตื่อง ฟ็อง ชาวเวียดนาม ซึ่งได้ตีพิมพ์เรื่องนี้ในวิทยานิพนธ์ระดับปริญญาเอกของเขาในปี 1973[2][3] เขายังได้เสนอแบบจำลองการสะท้อนแบบฟ็องขึ้นมาพร้อมกันด้วย แบบจำลองการสะท้อนแบบฟ็องเองก็อาจใช้ร่วมกับเทคนิคการให้แสงเงาแบบอื่น ๆ เช่น การให้แสงเงาแบบกูโร ได้อีกด้วย และการให้แสงเงาแบบฟ็องก็ยังสามารถใช้ร่วมกับแบบจำลองการสะท้อนแบบอื่น ๆ ที่ไม่ใช่แบบการสะท้อนแบบฟ็อง
ภาพรวม
[แก้]![](https://upload.wikimedia.org/wikipedia/commons/thumb/8/84/Phong-shading-sample.jpg/500px-Phong-shading-sample.jpg)
การให้แสงเงาแบบฟ็องปรับปรุงมาจากการให้แสงเงาแบบกูโร โดยให้การประมาณค่าที่ดีกว่า สำหรับการให้แสงเงาของพื้นผิวเรียบลื่น การให้แสงเงาแบบฟ็องถือว่าเวกเตอร์แนวฉากแปรผันอย่างต่อเนื่อง เทคนิคการประมาณค่าในช่วงแบบฟ็องให้ผลลัพธ์ที่ดีกว่าการให้แสงเงาแบบกูโร เมื่อนำไปใช้กับแบบจำลองการสะท้อนที่มีส่วนสว่างจัดจ้าขนาดเล็ก เช่น ในแบบจำลองการสะท้อนแบบฟ็อง
ปัญหาใหญ่ของการให้แสงเงาแบบกูโร คือเมื่อส่วนสว่างจัดจ้าอยู่ตรงกลางของโพลีกอนขนาดใหญ่ เนื่องจากการให้แสงเงาแบบกูโรจะคำนวณสีของจุดยอดของโพลีกอนและทำการประมาณค่าในช่วงระหว่างจุดยอดทั้งหมด จึงมองไม่เห็นส่วนสว่างนั้น การให้แสงเงาแบบฟ็องสามารถแก้ไขปัญหาตรงนี้ได้
การให้แสงเงาแบบฟ็องนั้นแตกต่างจากการให้แสงเงาแบบกูโรตรงที่จะหาเวกเตอร์แนวฉากของพื้นผิวภายในโพลีกอนจากเวกเตอร์แนวฉากของจุดยอดโพลีกอนโดยการประมาณค่าในช่วงแบบเชิงเส้น ดังนั้นเวกเตอร์แนวฉากจะถูกกำหนดสำหรับแต่ละพิกเซลในฉาก และแบบจำลองการสะท้อนนี้จะถูกนำไปใช้กับแต่ละพิกเซลเพื่อกำหนดสีของพิกเซล การให้แสงเงาแบบฟ็องนั้นต้องใช้กำลังการคำนวณมากกว่าการให้แสงเงาแบบกูโร เนื่องจากต้องทำการคำนวณแบบจำลองการสะท้อนสำหรับแต่ละพิกเซล
ระบบประมวลผลแบบตามเวลาจริง
[แก้]Direct3D ซึ่งเป็นหนึ่งใน 3DCG API สำหรับระบบประมวลผลตามเวลาจริง มี D3DSHADE_PHONG ซึ่งเป็นหนึ่งในโหมดเงา D3DSHADEMODE ที่ฟังก์ชันการให้แสงเงาแบบตายตัว แต่ไม่เคยถูกนำมาใช้หรือสนับสนุนในการใช้งานจริง[4]
ฮาร์ดแวร์ที่รองรับตัวให้แสงเงาแบบสั่งการได้ สามารถทำการให้แสงเงาแบบฟ็องที่ดำเนินการโดยตัวให้แสงเงาแบบพิกเซล หรือตัวให้แสงเงาแบบแฟรกเมนต์
แบบจำลองการสะท้อนแบบฟ็อง
[แก้]การสะท้อนแบบฟ็องเป็นแบบจำลองเชิงประจักษ์ของการส่องสว่างเฉพาะที่ โดยการสะท้อนแบบลัมแบร์ทของพื้นผิวขรุขระ และการสะท้อนแสงจัดจ้าของพื้นผิวเรียบ จะถูกนำมาคิดรวมกันเพื่อแสดงถึงการสะท้อนของพื้นผิววัตถุ ซึ่งมาจากประสบการณ์การสังเกตอย่างไม่เป็นทางการของตัวฟ็องเองที่ว่าพื้นผิวที่เรียบจะมีส่วนสว่างจัดจ้าที่เล็กและสว่างมาก ในขณะที่พื้นผิวที่หยาบจะมีส่วนสว่างจัดจ้าที่ใหญ่และค่อย ๆ จางลง แบบจำลองการสะท้อนนี้ยังได้รวมพจน์ของแสงโดยรอบ ซึ่งอธิบายถึงแสงที่กระจัดกระจายอย่างอ่อนทั่วทั้งฉาก
![](https://upload.wikimedia.org/wikipedia/commons/thumb/6/6b/Phong_components_version_4.png/655px-Phong_components_version_4.png)
อ้างอิง
[แก้]- ↑ Watt, Alan H.; Watt, Mark (1992). Advanced Animation and Rendering Techniques: Theory and Practice. Addison-Wesley Professional. pp. 21–26. ISBN 978-0-201-54412-1.
- ↑ Bui Tuong Phong, Illumination of Computer-Generated Images, Department of Computer Science, University of Utah, UTEC-CSc-73-129, July 1973.
- ↑ University of Utah School of Computing, History
- ↑ D3DSHADEMODE enumeration (D3d9types.h) - Win32 apps | Microsoft Docs