**แบบจำลองการสะท้อนแบบฟ็อง** (Phong reflecion model) เป็นแบบจำลองการฉายแสงและการให้แสงเงา เพื่อสร้างภาพบนจุดบนพื้นผิวที่ได้ออกแบบไว้ในทางคอมพิวเตอร์กราฟิกส์สามมิติ

แบบจำลองนี้ได้รับการพัฒนาโดยบู่ย เตื่อง ฟ็อง ชาวเวียดนาม โดยได้ตีพิมพ์ในวิทยานิพนธ์ของเขาในปี 1973 ภายใต้ชื่อ "*การให้แสงสำหรับรูปภาพที่สร้างจากคอมพิวเตอร์* "(*Illumination for Computer-Generated Images*) นอกจากนี้ บทความนี้ยังกล่าวถึงวิธีการคำนวณการประมาณค่าในช่วงสำหรับแต่ละพิกเซลจากแบบจำลองพื้นผิวโพลีกอน เทคนิคการประมาณค่าในช่วงนี้เรียกว่าการให้แสงเงาแบบฟ็อง

ภาพรวม
------

แบบจำลองการสะท้อนแบบฟ็องช่วยให้สามารถจัดการสมการการเร็นเดอร์ทั่วไปได้ง่ายขึ้น ในการกำหนดแสงและเงาในแต่ละจุดบนผิว แบบจำลองนี้มีข้อได้เปรียบดังนี้

1. แบบจำลองนี้เป็นแบบจำลองสะท้อนเฉพาะที่ นั่นคือ ไม่จำเป็นต้องคำนวณการสะท้อนกลับทุติยภูมิแบบที่ทำในเรย์เทรสซิง อย่างในเรดิโอซิตี และเพื่อชดเชยการลดทอนของแสงที่สะท้อน จึงได้ได้มีการเพิ่มพจน์แสงโดยรอบ (ambient) ภายนอกไปด้วยตอนเร็นเดอร์
2. การสะท้อนจากพื้นผิวแบ่งออกเป็นสามประเภท: การสะท้อนแสงจัดจ้า, การสะท้อนแสงพร่า และ การสะท้อนแสงโดยรอบ (ambient reflection)

ก่อนอื่น สำหรับแต่ละแหล่งกำเนิดแสงภายในฉาก ให้ส่วนประกอบการสะท้อนแสงจัดจ้าเป็น {\displaystyle i\_{s}} และส่วนประกอบการสะท้อนแสงพร่าเป็น {\displaystyle i\_{d}} โดยปกติแต่ละค่าจะเป็นค่า RGB นอกจากนี้ยังให้แสงแวล้อมเป็น {\displaystyle i\_{a}} ซึ่งอาจคำนวณเป็นผลรวมของผลกระทบจากแหล่งกำเนิดแสงทั้งหมด

ถัดมา สำหรับแต่ละ**วัสดุ**บนพื้นผิวให้กำหนดสิ่งต่อไปนี้:

{\displaystyle k\_{s}} : ค่าสัมประสิทธิ์การสะท้อนแสงจัดจ้า
{\displaystyle k\_{d}} : ค่าสัมประสิทธิ์การสะท้อนแสงพร่า (การสะท้อนแบบลัมแบร์ท)
{\displaystyle k\_{a}} : ค่าสัมประสิทธิ์การสะท้อนแสงโดยรอบ
\alpha : ค่าคงที่ความมันวาวของวัสดุ
ค่าความมันวาว (shininess) \alpha  ในที่นี้เป็นตัวกำหนดความสม่ำเสมอของแสงที่สะท้อนจากจุดที่หนึ่ง ๆ ยิ่งเป็นพื้นผิวที่เรียบลื่นก็จะยิ่งมีค่ามาก นอกจากนี้ค่าคงที่นี้ยิ่งมากส่วนสว่างจัดจ้าก็จะยิ่งเล็กและแรงขึ้นเท่านั้น

นอกจากนี้ เรายังอาจนิยามแสงของกลุ่มแหล่งกำเนิดแสงทั้งหมด ให้เวกเตอร์ทิศทางจากจุดบนพื้นผิววัตถุไปยังแหล่งกำเนิดแสงแต่ละแหล่งเป็น {\displaystyle L} และให้เวกเตอร์แนวฉาก ณ จุดหนึ่งบนพื้นผิวนี้เป็น {\displaystyle N} ทิศทางที่แสงสะท้อนอย่างสมบูรณ์ ณ จุดนั้นบนพื้นผิวเป็น {\displaystyle R} และ และทิศทางไปยังมุมสังเกตการณ์ (เช่นกล้องเสมือนจริง) คือ {\displaystyle V}

ความเข้มของเงาหรือแสงในแต่ละจุดบนพื้นผิว {\displaystyle I\_{p}} สามารถคำนวณโดยใช้สมการต่อไปนี้:

{\displaystyle I\_{p}=k\_{a}i\_{a}+\sum \_{\mathrm {lights} }(k\_{d}(L\cdot N)i\_{d}+k\_{s}(R\cdot V)^{\alpha }i\_{s}).}
พจน์แสงพร่าทิศไม่ได้ขึ้นกับมุมสังเกตการณ์ {\displaystyle V} เนื่องจากพจน์แสงพร่ามีค่าเท่ากันสำหรับในทุกทิศทางจากจุดนั้น ซึ่งรวมถึงทิศทางการมองด้วย ในทางกลับกัน พจน์แสงจัดจ้าจะมีค่ามากเป็นพิเศษในกรณีที่เวกเตอร์สะท้อน {\displaystyle R} กับเวกเตอร์มุมมอง {\displaystyle V} นั้นใกล้กันมากเท่านั้น เพราะค่าโคไซน์ของมุมระหว่าง {\displaystyle R} และ {\displaystyle V} ภายในผลคูณจุดของเวกเตอร์ทั้งสองนี้ได้รับผลจากเลขยกกำลังโดย \alpha  หาก \alpha  มีค่ามาก การแสดงออกจะเกือบเหมือนกระจกเงา และพื้นที่ส่วนสว่างจัดจ้าที่สะท้อนออกมาจะเล็กมาก นั่นเป็นเพราะเนื่องจากหากทิศทางของมุมที่มองเบี่ยงเบนไปจากเวกเตอร์การสะท้อน ค่าโคไซน์จะน้อยกว่า 1 และจะเข้าใกล้ 0 เมื่อยกกำลังด้วยค่ามาก

เมื่อแสดงสีด้วยค่า RGB โดยทั่วไปสูตรนี้จะคำนวณแยกกันสำหรับแต่ละองค์ประกอบ R, G, B

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

ภาพด้านล่างนี้แสดงโดยแยกส่วนประกอบต่าง ๆ ในแบบจำลองการสะท้อนแบบฟ็องให้เห็นภาพชัด

Phong方程式を説明した絵図

สีของ**การสะท้อนแสงโดยรอบ** (ambient) และ **การสะท้อนแสงพร่า** (diffuse) จะเหมือนกัน ให้ระวังว่า พจน์ของการสะท้อนแสงโดยรอบนั้นคงที่ตลอด ในขณะที่พจน์ของการสะท้อนแสงพร่ามีค่าแตกต่างกันไปตามมุมที่พื้นผิวหัน ส่วน **การสะท้อนแสงจัดจ้า** (specular) จะเป็นสีขาวและสะท้อนแสงส่วนใหญ่ที่ตกกระทบพื้นผิว แต่จะส่องสว่างแค่ในบริเวณที่แคบมาก

ข้อดีและข้อเสีย
---------------

การเรนเดอร์ตามเวลาจริงโดยใช้ API กราฟิก เช่น OpenGL และ Direct3D มักจะใช้แบบจำลองการส่องสว่างเฉพาะที่เนื่องจากข้อจำกัด เช่น ความเร็วในการวาด แต่แบบจำลองการสะท้อนของฟ็องมีความเรียบง่ายในการคำนวณ และผลาญทรัพยากรน้อย จึงถูกใช้งานเป็นมาตรฐานสำหรับตัวให้แสงเงาแบบที่ให้ค่าคงท่ซึ่งทำงานด้วยซอฟต์แวร์ (CPU) หรือฮาร์ดแวร์ (GPU) (จนถึง OpenGL 2.1 และ Direct3D 9) แม้หลังจากที่ประสิทธิภาพของฮาร์ดแวร์เพิ่มสูงขึ้น และตัวให้แสงเงาแบบที่ตั้งโปรแกรมได้ถูกใช้ทั่วไปแล้ว บางครั้งแบบจำลองการสะท้อนของฟ็องก็ยังถูกนำมาใช้เนื่องจากความเบาในการคำนวณของมัน สำหรับใน OpenGL 3.1 และ Direct3D 10 นั้นได้เลิกใช้ฟังก์ชันแบบตายตัวแล้ว และใช้ตัวให้แสงเงาแบบที่ตั้งโปรแกรมได้เพื่อใช้แบบจำลองการสะท้อนแบบฟ็อง

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

การประมาณค่าในช่วงแบบฟ็อง
-------------------------

ดูบทความหลักที่: การให้แสงเงาแบบฟ็อง
นอกจากแบบจำลองการสะท้อนซึ่งคำนวณสีที่จุดต่าง ๆ บนพื้นผิวแล้ว ฟ็องยังได้พัฒนาวิธีการประมาณค่าในช่วงสำหรับการคำนวณสีแต่ละพิกเซลในโพลีกอน แบบจำลองการสะท้อนและการประมาณค่าในช่วงในลักษณะนี้บางครั้งรวมกันด้วยคำว่า การให้แสงเงาแบบฟ็อง

อ้างอิง
-------

1. ↑  Bui Tuong Phong, Illumination for computer generated pictures, Communications of ACM 18 (1975), no. 6, 311–317.
2. ↑  University of Utah School of Computing,