# การให้แสงเงาแบบฟ็อง
การให้แสงเงาแบบฟ็อง (Phong shading) หรือ การประมาณค่าในช่วงของฟ็อง (Phong interpolation) เป็นเทคนิคการประมาณค่าในช่วงสำหรับการคำนวณการให้แสงเงาในคอมพิวเตอร์กราฟิกส์สามมิติ โดยกำหนดค่าสีในแต่ละพิกเซล โดยการประมาณค่าในช่วงของเวกเตอร์แนวฉากตลอดทั่วโพลีกอน

เทคนิคนี้คิดค้นโดยบู่ย เตื่อง ฟ็อง ชาวเวียดนาม ซึ่งได้ตีพิมพ์เรื่องนี้ในวิทยานิพนธ์ระดับปริญญาเอกของเขาในปี 1973Bui 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 เขายังได้เสนอแบบจำลองการสะท้อนแบบฟ็องขึ้นมาพร้อมกันด้วย แบบจำลองการสะท้อนแบบฟ็องเองก็อาจใช้ร่วมกับเทคนิคการให้แสงเงาแบบอื่น ๆ เช่น การให้แสงเงาแบบกูโร ได้อีกด้วย และการให้แสงเงาแบบฟ็องก็ยังสามารถใช้ร่วมกับแบบจำลองการสะท้อนแบบอื่น ๆ ที่ไม่ใช่แบบการสะท้อนแบบฟ็อง

 ภาพรวม 
thumb|500x500px|ตัวอย่างของการให้แสงเงาแบบฟ็อง (ขวา) เทียบกับการให้แสงเงาแบบเรียบ (ซ้าย)
การให้แสงเงาแบบฟ็องปรับปรุงมาจากการให้แสงเงาแบบกูโร โดยให้การประมาณค่าที่ดีกว่า สำหรับการให้แสงเงาของพื้นผิวเรียบลื่น การให้แสงเงาแบบฟ็องถือว่าเวกเตอร์แนวฉากแปรผันอย่างต่อเนื่อง เทคนิคการประมาณค่าในช่วงแบบฟ็องให้ผลลัพธ์ที่ดีกว่าการให้แสงเงาแบบกูโร เมื่อนำไปใช้กับแบบจำลองการสะท้อนที่มีส่วนสว่างจัดจ้าขนาดเล็ก เช่น ในแบบจำลองการสะท้อนแบบฟ็อง

ปัญหาใหญ่ของการให้แสงเงาแบบกูโร คือเมื่อส่วนสว่างจัดจ้าอยู่ตรงกลางของโพลีกอนขนาดใหญ่ เนื่องจากการให้แสงเงาแบบกูโรจะคำนวณสีของจุดยอดของโพลีกอนและทำการประมาณค่าในช่วงระหว่างจุดยอดทั้งหมด จึงมองไม่เห็นส่วนสว่างนั้น การให้แสงเงาแบบฟ็องสามารถแก้ไขปัญหาตรงนี้ได้

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

 ระบบประมวลผลแบบตามเวลาจริง 
Direct3D ซึ่งเป็นหนึ่งใน 3DCG API สำหรับระบบประมวลผลตามเวลาจริง มี D3DSHADE_PHONG ซึ่งเป็นหนึ่งในโหมดเงา D3DSHADEMODE ที่ฟังก์ชันการให้แสงเงาแบบตายตัว แต่ไม่เคยถูกนำมาใช้หรือสนับสนุนในการใช้งานจริงD3DSHADEMODE enumeration (D3d9types.h) - Win32 apps | Microsoft Docs

ฮาร์ดแวร์ที่รองรับตัวให้แสงเงาแบบสั่งการได้ สามารถทำการให้แสงเงาแบบฟ็องที่ดำเนินการโดยตัวให้แสงเงาแบบพิกเซล หรือตัวให้แสงเงาแบบแฟรกเมนต์

 แบบจำลองการสะท้อนแบบฟ็อง 

การสะท้อนแบบฟ็องเป็นแบบจำลองเชิงประจักษ์ของการส่องสว่างเฉพาะที่ โดยการสะท้อนแบบลัมแบร์ทของพื้นผิวขรุขระ และการสะท้อนแสงจัดจ้าของพื้นผิวเรียบ จะถูกนำมาคิดรวมกันเพื่อแสดงถึงการสะท้อนของพื้นผิววัตถุ ซึ่งมาจากประสบการณ์การสังเกตอย่างไม่เป็นทางการของตัวฟ็องเองที่ว่าพื้นผิวที่เรียบจะมีส่วนสว่างจัดจ้าที่เล็กและสว่างมาก ในขณะที่พื้นผิวที่หยาบจะมีส่วนสว่างจัดจ้าที่ใหญ่และค่อย ๆ จางลง แบบจำลองการสะท้อนนี้ยังได้รวมพจน์ของแสงโดยรอบ ซึ่งอธิบายถึงแสงที่กระจัดกระจายอย่างอ่อนทั่วทั้งฉาก
center|thumb|655x655px|ส่วนประกอบต่าง ๆ ในแบบจำลองการสะท้อนแบบฟ็อง ในที่นี้แสงที่ฉายมาเป็นแสงสีขาว ส่วนสีของแสงโดยรอบ (ambient) สีของการสะท้อนแสงพร่า (diffuse) มีสีน้ำเงิน และส่วนการสะท้อนแสงจัดจ้า (specular) เป็นสีขาว แสงส่วนใหญ่ที่ตกกระทบพื้นผิวจะสะท้อนออกมา แต่ส่วนสว่างจัดจ้าจะแคบมาก ความเข้มขององค์ประกอบกระจายแสงจะต่างไปตามมุมของพื้นผิว ส่วนองค์ประกอบแสงโดยรอบจะสม่ำเสมอ (ไม่ขึ้นกับมุม)