Введение
Алгоритм затенения в компьютерной графике Модель отражения БлиннФонг, также называемая модифицированной моделью отражения Фонг, является модификацией, разработанной Джимом Блинном для модели отражения Фонг. BlinnPhong - модель затенения, используемая в фиксированном функциональном трубопроводе OpenGL и Direct3D (до Direct3D 10 и OpenGL 3.1) и выполняется на каждой вершине, когда она проходит по графическому трубопроводу; значения пикселей между вершинами интерполируются затенением Gouraud по умолчанию, а не более дорогостоящим Phong затенением.
The Blinn–Phong reflection model, also called the modified Phong reflection model, is a modification developed by Jim Blinn to the Phong reflection model. Blinn–Phong is a shading model used in OpenGL and Direct3D's fixed function pipeline (before Direct3D 10 and OpenGL 3.1), and is carried out on each vertex as it passes down the graphics pipeline; pixel values between vertices are interpolated by Gouraud shading by default, rather than the more computationally expensive Phong shading.
Эффективность
Blinn Phong будет быстрее Phong в том случае, когда зритель и свет рассматриваются как очень отдаленные, например, приближающиеся или на бесконечности. Это относится к направленным огням и орфографическим/изометрическим камерам. В этом случае вектор полупути не зависит от положения и кривизны поверхности просто потому, что вектор полупути зависит от направления к положению зрителя и направления к положению света, которые индивидуально сходятся на этом удаленном расстоянии, поэтому вектор полупути может считаться постоянным в этом случае. Поэтому можно рассчитать один раз для каждого света, а затем использовать для всего кадра, или даже, пока свет и точка зрения остаются в одном и том же относительном положении. То же самое не относится к методу Фонга по использованию вектора отражения, который зависит от кривизны поверхности и должен быть пересчитан для каждого пикселя изображения (или для каждой вершины модели в случае освещения вершин). В 3D-сцены с перспективными камерами, эта оптимизация невозможна.
Образец кода языка затенения OpenGL
Этот образец в OpenGL Shading Language состоит из двух файлов кода, или шейдеров. Первый из них - так называемый шейдер вершин и реализует шейдинг Phong, который используется для интерполяции поверхностного нормала между вершинами. Второй теневой модуль - это так называемый фрагментный теневой модуль, который использует модель теневого модуля BlinnPhong для определения диффузного и спекулярного света от точечного источника света.