Освещение по Фонгу¶
Освещение по Фонгу (модель отражения Фонга, модель освещения Фонга) — это эмпирическая модель локального освещения в трёхмерной компьютерной графике, разработанная вьетнамским учёным Буй Тыонгом Фонгом (Bui Tuong Phong) в 1973 году. Модель описывает, как поверхность объекта отражает свет, разделяя отражение на три составляющие: фоновое (ambient), диффузное (diffuse) и зеркальное (specular). Она позволяет создавать иллюзию гладких, блестящих поверхностей, таких как пластик, металл или керамика, и широко применяется в графических системах реального времени, включая компьютерные игры и анимацию.
¶История
Модель освещения была предложена Буй Тыонгом Фонгом в его докторской диссертации «Illumination for Computer Generated Pictures» (1973), защищённой в Университете Юты (США). Фонг стремился улучшить существовавшие на тот момент методы закрашивания, такие как плоское затенение (flat shading), которое давало резкие границы между полигонами. Его работа стала частью более широких исследований в области компьютерной графики, проводившихся в Университете Юты под руководством Айвена Сазерленда. В 1975 году Фонг опубликовал статью, в которой подробно описал модель и метод интерполяции нормалей, известный как закрашивание Фонга (Phong shading). Модель быстро стала стандартом в индустрии благодаря своей простоте и реалистичности для своего времени.
¶Основные принципы
Модель освещения по Фонгу является эмпирической, то есть она не основана на физических законах распространения света, а аппроксимирует наблюдаемое поведение поверхностей. Она предполагает, что свет от источника распространяется в виде лучей, а отражение от поверхности описывается тремя независимыми компонентами. Каждая компонента вычисляется для каждой точки поверхности (пикселя или вершины) и суммируется для получения итогового цвета.
¶Компоненты модели
Модель включает три составляющие:
- Фоновое освещение (ambient) — это постоянная, равномерная составляющая, которая имитирует рассеянный свет, отражённый от других объектов в сцене. Она не зависит от положения источника света и наблюдателя. Фоновое освещение добавляет минимальную яркость к теневым областям, предотвращая их полную черноту. Вычисляется как произведение цвета фонового света и коэффициента фонового отражения материала.
- Диффузное отражение (diffuse) — это рассеянное отражение света от матовой поверхности. Оно подчиняется закону Ламберта: интенсивность отражённого света пропорциональна косинусу угла между направлением на источник света и нормалью к поверхности. Диффузное отражение не зависит от положения наблюдателя, то есть поверхность выглядит одинаково яркой при взгляде с любого направления. Вычисляется как произведение цвета источника света, коэффициента диффузного отражения материала и косинуса угла падения.
- Зеркальное отражение (specular) — это отражение света от гладкой поверхности, создающее блики. Оно зависит от положения наблюдателя: блик виден, когда угол между направлением отражённого луча и направлением на наблюдателя мал. Фонг аппроксимировал этот эффект с помощью степени косинуса угла между отражённым лучом и вектором наблюдения. Параметр блеска (shininess) контролирует размер и резкость блика: чем выше значение, тем меньше и ярче блик. Вычисляется как произведение цвета источника света, коэффициента зеркального отражения материала и косинуса угла между отражённым лучом и вектором наблюдения, возведённого в степень блеска.
¶Математическая формула
Итоговая интенсивность света в точке вычисляется по формуле:
\[ I = I_a \cdot k_a + \sum_{i=1}^{n} \left( I_{d,i} \cdot k_d \cdot (\hat{L}_i \cdot \hat{N}) + I_{s,i} \cdot k_s \cdot (\hat{R}_i \cdot \hat{V})^\alpha \right) \]
Где:
- \(I\) — итоговая интенсивность (цвет) точки;
- \(I_a\) — интенсивность фонового света;
- \(k_a\) — коэффициент фонового отражения материала;
- \(n\) — количество источников света;
- \(I_{d,i}\) — интенсивность диффузной составляющей i-го источника;
- \(k_d\) — коэффициент диффузного отражения материала;
- \(\hat{L}_i\) — единичный вектор направления на i-й источник света;
- \(\hat{N}\) — единичный вектор нормали к поверхности;
- \(I_{s,i}\) — интенсивность зеркальной составляющей i-го источника;
- \(k_s\) — коэффициент зеркального отражения материала;
- \(\hat{R}_i\) — единичный вектор отражённого луча от i-го источника;
- \(\hat{V}\) — единичный вектор направления на наблюдателя;
- \(\alpha\) — параметр блеска (shininess).
¶Реализация в графике
Модель освещения по Фонгу реализуется двумя основными способами: попиксельное освещение (Phong shading) и повершинное освещение (Gouraud shading). В обоих случаях используется одна и та же модель отражения, но различается способ вычисления.
¶Закрашивание Фонга (Phong shading)
При закрашивании Фонга нормали к поверхности интерполируются по всей площади полигона (треугольника) на основе нормалей в его вершинах. Для каждого пикселя вычисляется своя нормаль, и затем по модели Фонга рассчитывается освещение. Этот метод даёт наиболее гладкие и реалистичные результаты, особенно на криволинейных поверхностях, но требует больших вычислительных затрат. В современных графических процессорах (GPU) закрашивание Фонга реализуется в пиксельных шейдерах.
¶Закрашивание Гуро (Gouraud shading)
При закрашивании Гуро освещение по Фонгу вычисляется только для вершин полигона, а затем полученные значения интенсивности интерполируются по площади полигона. Этот метод быстрее, но может приводить к артефактам, таким как потеря мелких бликов или появление полос Маха (видимых границ между полигонами). Он исторически использовался в ранних 3D-играх и системах с ограниченной производительностью.
¶Сравнение с другими моделями
Модель освещения по Фонгу является одной из простейших и наиболее распространённых эмпирических моделей. Она имеет ряд ограничений по сравнению с более физически корректными моделями:
- Модель Блинна-Фонга (Blinn-Phong) — модификация, в которой зеркальная составляющая вычисляется через вектор половинного угла (half-vector) между направлением на источник света и направлением на наблюдателя. Это упрощает вычисления и даёт более гладкие блики, особенно при анизотропном отражении.
- Модель Кука-Торренса (Cook-Torrance) — физически обоснованная модель, учитывающая микрорельеф поверхности, распределение микронормалей и эффект Френеля. Она даёт более реалистичные результаты, особенно для металлов и других материалов с сильным зеркальным отражением, но требует больше вычислительных ресурсов.
- Модель Ламберта (Lambertian) — учитывает только диффузное отражение и не создаёт бликов. Используется для матовых поверхностей.
Модель Фонга остаётся популярной благодаря своей простоте, скорости и достаточной реалистичности для многих приложений, особенно в реальном времени.
¶Применение
Освещение по Фонгу широко используется в:
- Компьютерные игры — для создания реалистичных материалов, таких как пластик, кожа, керамика и некоторые виды металлов. В современных играх модель Фонга часто заменяется более сложными моделями (PBR — physically based rendering), но всё ещё применяется в инди-играх и на мобильных платформах.
- Анимация и визуализация — в пакетах 3D-моделирования (например, Blender, 3ds Max, Maya) модель Фонга используется как один из базовых шейдеров для предварительного просмотра и рендеринга.
- Образовательные проекты — в учебных курсах по компьютерной графике модель Фонга является стандартным примером для изучения принципов освещения и шейдеров.
- Графические библиотеки — модель реализована в OpenGL, DirectX и Vulkan, часто в виде встроенных функций или примеров шейдеров.
¶Критика и ограничения
Несмотря на широкое распространение, модель освещения по Фонгу имеет ряд недостатков:
- Эмпиричность — модель не основана на физике, что приводит к неточностям, особенно при моделировании металлов и диэлектриков.
- Отсутствие эффекта Френеля — модель не учитывает изменение отражательной способности поверхности в зависимости от угла падения света, что важно для реалистичного изображения воды, стекла и металлов.
- Фиксированный блик — зеркальный блик всегда имеет круглую форму и не зависит от шероховатости поверхности; для анизотропных материалов (например, щётки или CD-диски) модель неприменима.
- Вычислительная сложность — для каждого пикселя требуется вычисление вектора отражённого луча, что может быть затратно на старых GPU.
¶Интересные факты
- Буй Тыонг Фонг умер в 1975 году в возрасте 32 лет от лейкемии, вскоре после публикации своей модели.
- Модель Фонга часто путают с закрашиванием Фонга (Phong shading), хотя это разные понятия: первое — это модель отражения, второе — метод интерполяции нормалей.
- В 1990-х годах модель Фонга была стандартом для всех 3D-игр, от Doom до Quake, хотя в последней использовалась её модификация — модель Блинна-Фонга.
¶Источники
- Bui Tuong Phong. «Illumination for Computer Generated Pictures». Communications of the ACM, 1975.
- Foley, J. D., van Dam, A., Feiner, S. K., Hughes, J. F. «Computer Graphics: Principles and Practice». Addison-Wesley, 1995.
- Akenine-Möller, T., Haines, E., Hoffman, N. «Real-Time Rendering». CRC Press, 2018.
- Шикин Е. В., Боресков А. В. «Компьютерная графика. Динамика, реалистические изображения». Диалог-МИФИ, 1996.
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →


