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

แบบจำลองการสะท้อนแบบฟ็อง (Phong reflecion model) เป็นแบบจำลองการฉายแสงและการให้แสงเงา เพื่อสร้างภาพบนจุดบนพื้นผิวที่ได้ออกแบบไว้ในทางคอมพิวเตอร์กราฟิกส์สามมิติ
แบบจำลองนี้ได้รับการพัฒนาโดยบู่ย เตื่อง ฟ็อง ชาวเวียดนาม โดยได้ตีพิมพ์ในวิทยานิพนธ์ของเขาในปี 1973 ภายใต้ชื่อ ""การให้แสงสำหรับรูปภาพที่สร้างจากคอมพิวเตอร์" " ("Illumination for Computer-Generated Images") นอกจากนี้ บทความนี้ยังกล่าวถึงวิธีการคำนวณการประมาณค่าในช่วงสำหรับแต่ละพิกเซลจากแบบจำลองพื้นผิวโพลีกอน เทคนิคการประมาณค่าในช่วงนี้เรียกว่าการให้แสงเงาแบบฟ็อง
ภาพรวม.
แบบจำลองการสะท้อนแบบฟ็องช่วยให้สามารถจัดการสมการการเร็นเดอร์ทั่วไปได้ง่ายขึ้น ในการกำหนดแสงและเงาในแต่ละจุดบนผิว แบบจำลองนี้มีข้อได้เปรียบดังนี้
ก่อนอื่น สำหรับแต่ละแหล่งกำเนิดแสงภายในฉาก ให้ส่วนประกอบการสะท้อนแสงจัดจ้าเป็น <math>i_s</math> และส่วนประกอบการสะท้อนแสงพร่าเป็น <math>i_d</math> โดยปกติแต่ละค่าจะเป็นค่า RGB นอกจากนี้ยังให้แสงแวล้อมเป็น <math>i_a</math> ซึ่งอาจคำนวณเป็นผลรวมของผลกระทบจากแหล่งกำเนิดแสงทั้งหมด
ถัดมา สำหรับแต่ละวัสดุบนพื้นผิวให้กำหนดสิ่งต่อไปนี้:
 <math>k_s</math> : ค่าสัมประสิทธิ์การสะท้อนแสงจัดจ้า
 <math>k_d</math> : ค่าสัมประสิทธิ์การสะท้อนแสงพร่า (การสะท้อนแบบลัมแบร์ท)
 <math>k_a</math> : ค่าสัมประสิทธิ์การสะท้อนแสงโดยรอบ
 <math>\alpha</math>: ค่าคงที่ความมันวาวของวัสดุ 
ค่าความมันวาว (shininess) <math>\alpha</math> ในที่นี้เป็นตัวกำหนดความสม่ำเสมอของแสงที่สะท้อนจากจุดที่หนึ่ง ๆ ยิ่งเป็นพื้นผิวที่เรียบลื่นก็จะยิ่งมีค่ามาก นอกจากนี้ค่าคงที่นี้ยิ่งมากส่วนสว่างจัดจ้าก็จะยิ่งเล็กและแรงขึ้นเท่านั้น
นอกจากนี้ เรายังอาจนิยามแสงของกลุ่มแหล่งกำเนิดแสงทั้งหมด ให้เวกเตอร์ทิศทางจากจุดบนพื้นผิววัตถุไปยังแหล่งกำเนิดแสงแต่ละแหล่งเป็น <math>L</math> และให้เวกเตอร์แนวฉาก ณ จุดหนึ่งบนพื้นผิวนี้เป็น <math>N</math> ทิศทางที่แสงสะท้อนอย่างสมบูรณ์ ณ จุดนั้นบนพื้นผิวเป็น <math>R</math> และ และทิศทางไปยังมุมสังเกตการณ์ (เช่น กล้องเสมือนจริง) คือ <math>V</math>
ความเข้มของเงาหรือแสงในแต่ละจุดบนพื้นผิว <math>I_p</math> สามารถคำนวณโดยใช้สมการต่อไปนี้:
 <math>I_p = k_a i_a + \sum_\mathrm{lights} (k_d (L \cdot N) i_d + k_s (R \cdot V)^{\alpha}i_s)</math>
พจน์แสงพร่าทิศไม่ได้ขึ้นกับมุมสังเกตการณ์ <math>V</math> เนื่องจากพจน์แสงพร่ามีค่าเท่ากันสำหรับในทุกทิศทางจากจุดนั้น ซึ่งรวมถึงทิศทางการมองด้วย ในทางกลับกัน พจน์แสงจัดจ้าจะมีค่ามากเป็นพิเศษในกรณีที่เวกเตอร์สะท้อน <math>R</math> กับเวกเตอร์มุมมอง <math>V</math> นั้นใกล้กันมากเท่านั้น เพราะค่าโคไซน์ของมุมระหว่าง <math>R</math> และ <math>V</math> ภายในผลคูณจุดของเวกเตอร์ทั้งสองนี้ได้รับผลจากเลขยกกำลังโดย <math>\alpha</math> หาก <math>\alpha</math> มีค่ามาก การแสดงออกจะเกือบเหมือนกระจกเงา และพื้นที่ส่วนสว่างจัดจ้าที่สะท้อนออกมาจะเล็กมาก นั่นเป็นเพราะเนื่องจากหากทิศทางของมุมที่มองเบี่ยงเบนไปจากเวกเตอร์การสะท้อน ค่าโคไซน์จะน้อยกว่า 1 และจะเข้าใกล้ 0 เมื่อยกกำลังด้วยค่ามาก
เมื่อแสดงสีด้วยค่า RGB โดยทั่วไปสูตรนี้จะคำนวณแยกกันสำหรับแต่ละองค์ประกอบ R, G, B
การสะท้อนแบบฟ็องเป็นแบบจำลองเชิงประจักษ์ โดยอิงจากการสังเกตอย่างไม่เป็นทางการมากกว่าคำอธิบายทางกายภาพของปฏิสัมพันธ์ของแสง ฟ็องได้สังเกตเห็นว่าพื้นผิวที่มีความมันเงาสูงจะมีส่วนสว่างที่สว่างกว่าและความสว่างลดลงเร็ว ในขณะที่พื้นผิวที่มีความมันวาวน้อยกว่าจะมีส่วนสว่างที่สว่างกว่าและความสว่างจะค่อย ๆ ลดลง
ภาพด้านล่างนี้แสดงโดยแยกส่วนประกอบต่าง ๆ ในแบบจำลองการสะท้อนแบบฟ็องให้เห็นภาพชัด
สีของ การสะท้อนแสงโดยรอบ (ambient) และ การสะท้อนแสงพร่า (diffuse) จะเหมือนกัน ให้ระวังว่า พจน์ของการสะท้อนแสงโดยรอบนั้นคงที่ตลอด ในขณะที่พจน์ของการสะท้อนแสงพร่ามีค่าแตกต่างกันไปตามมุมที่พื้นผิวหัน ส่วน การสะท้อนแสงจัดจ้า (specular) จะเป็นสีขาวและสะท้อนแสงส่วนใหญ่ที่ตกกระทบพื้นผิว แต่จะส่องสว่างแค่ในบริเวณที่แคบมาก
ข้อดีและข้อเสีย.
การเรนเดอร์ตามเวลาจริงโดยใช้ API กราฟิก เช่น OpenGL และ Direct3D มักจะใช้แบบจำลองการส่องสว่างเฉพาะที่เนื่องจากข้อจำกัด เช่น ความเร็วในการวาด แต่แบบจำลองการสะท้อนของฟ็องมีความเรียบง่ายในการคำนวณ และผลาญทรัพยากรน้อย จึงถูกใช้งานเป็นมาตรฐานสำหรับตัวให้แสงเงาแบบที่ให้ค่าคงท่ซึ่งทำงานด้วยซอฟต์แวร์ (CPU) หรือฮาร์ดแวร์ (GPU) (จนถึง OpenGL 2.1 และ Direct3D 9) แม้หลังจากที่ประสิทธิภาพของฮาร์ดแวร์เพิ่มสูงขึ้น และตัวให้แสงเงาแบบที่ตั้งโปรแกรมได้ถูกใช้ทั่วไปแล้ว บางครั้งแบบจำลองการสะท้อนของฟ็องก็ยังถูกนำมาใช้เนื่องจากความเบาในการคำนวณของมัน สำหรับใน OpenGL 3.1 และ Direct3D 10 นั้นได้เลิกใช้ฟังก์ชันแบบตายตัวแล้ว และใช้ตัวให้แสงเงาแบบที่ตั้งโปรแกรมได้เพื่อใช้แบบจำลองการสะท้อนแบบฟ็อง
อย่างไรก็ตาม เนื่องจากเป็นแบบจำลองการประมาณที่เรียบง่ายและหยาบมาก จึงไม่สามารถจำลองปรากฏการณ์โกลบอลอิลลูมิเนชัน ที่เกิดจากแสงสะท้อนกระจายที่ซับซ้อนและแสงโดยรอบ เช่น การกระเจิงใต้พื้นผิวและการบดบังแสงโดยรอบ
การประมาณค่าในช่วงแบบฟ็อง.
นอกจากแบบจำลองการสะท้อนซึ่งคำนวณสีที่จุดต่าง ๆ บนพื้นผิวแล้ว ฟ็องยังได้พัฒนาวิธีการประมาณค่าในช่วงสำหรับการคำนวณสีแต่ละพิกเซลในโพลีกอน แบบจำลองการสะท้อนและการประมาณค่าในช่วงในลักษณะนี้บางครั้งรวมกันด้วยคำว่า การให้แสงเงาแบบฟ็อง