Закраска Гуро
Закраска Гуро (англ. Gouraud shading) — это метод интерполяции освещения в трёхмерной компьютерной графике, используемый для создания плавных цветовых переходов на поверхности полигональных моделей. Относится к классу методов закраски, применяемых в растеризации для имитации гладких поверхностей при относительно низкой вычислительной сложности. В отличие от плоской закраски, где каждый полигон имеет один цвет, закраска Гуро вычисляет освещение в вершинах полигона и затем линейно интерполирует полученные значения цвета по всей его площади.
Принцип работы
Закраска Гуро основана на аппроксимации освещения с помощью интерполяции. Процесс состоит из трёх основных этапов:
- Вычисление нормалей вершин. Для каждой вершины полигональной модели определяется усреднённая нормаль, которая представляет собой среднее арифметическое нормалей всех полигонов, сходящихся в этой вершине. Это позволяет сгладить резкие грани между гранями.
- Расчёт освещения в вершинах. Для каждой вершины с использованием её нормали и заданной модели освещения (например, модели Фонга или Ламберта) вычисляется итоговый цвет. При этом учитываются параметры источников света, материалы поверхности и положение наблюдателя.
- Интерполяция цвета по полигону. Полученные в вершинах значения цвета линейно интерполируются по всей площади треугольника (или другого полигона) с использованием барицентрических координат. Каждый пиксель внутри полигона получает цвет, являющийся взвешенной суммой цветов трёх вершин.
Математически интерполяция для треугольника с вершинами A, B, C и соответствующими цветами \(C_A, C_B, C_C\) выполняется по формуле: \(C(u,v) = C_A + u(C_B - C_A) + v(C_C - C_A)\), где \(u\) и \(v\) — барицентрические координаты точки внутри треугольника.
История
Метод был разработан французским учёным Анри Гуро (Henri Gouraud) в 1971 году в рамках его докторской диссертации в Университете Юты. Работа Гуро была направлена на преодоление ограничений плоской закраски, которая создавала заметные границы между полигонами и делала модели «фасеточными» (faceted). Предложенный им алгоритм стал одним из первых практических способов создания иллюзии гладких поверхностей в компьютерной графике.
В 1970-х годах закраска Гуро активно применялась в ранних системах компьютерного моделирования и анимации, таких как системы General Motors и Evans & Sutherland. Позднее, с развитием персональных компьютеров и игровых консолей, метод стал стандартом де-факто для трёхмерной графики реального времени вплоть до середины 1990-х годов, когда его начал вытеснять более точный, но и более ресурсоёмкий метод закраски Фонга.
Сравнение с другими методами закраски
Плоская закраска
Плоская закраска (flat shading) — простейший метод, при котором один полигон окрашивается одним цветом, вычисленным для его центра или одной из вершин. Результат выглядит грубым и угловатым. Закраска Гуро устраняет видимые границы между полигонами, создавая плавные переходы, но не может корректно отобразить блики, попадающие внутрь полигона.
Закраска Фонга
Закраска Фонга (Phong shading) — более сложный метод, в котором интерполируются не цвета, а нормали вершин, а освещение вычисляется для каждого пикселя отдельно. Это позволяет точно воспроизводить зеркальные блики и сложные эффекты освещения, но требует значительно больше вычислительных ресурсов. Закраска Гуро, в отличие от неё, может давать артефакты в виде «маха» (Mach banding) — ложных полос на границах интерполяции, особенно при резких перепадах освещения.
Преимущества и недостатки
Преимущества
- Высокая производительность. Вычисление освещения производится только для вершин, а не для каждого пикселя, что значительно снижает нагрузку на процессор и видеокарту.
- Простота реализации. Алгоритм легко реализуется как на центральном процессоре, так и на графических ускорителях.
- Плавные переходы. Устраняет видимые грани между полигонами, делая модель визуально более гладкой.
Недостатки
- Некорректное отображение бликов. Если блик от источника света попадает в центр полигона, а не на его вершины, он может быть полностью утерян, так как интерполяция не способна его воссоздать.
- Артефакты Маха. На границах между полигонами с разной яркостью могут возникать ложные полосы, воспринимаемые глазом как усиление контраста.
- Зависимость от плотности сетки. Для получения качественного результата требуется достаточно высокая детализация модели (большое количество полигонов), иначе сглаживание становится недостаточным.
Применение
Закраска Гуро широко использовалась в компьютерных играх и приложениях виртуальной реальности 1990-х — начала 2000-х годов, когда аппаратные возможности графических ускорителей были ограничены. Она применялась в таких играх, как Quake (1996), Tomb Raider (1996) и Half-Life (1998). В современных системах закраска Гуро часто используется как промежуточный этап или в ситуациях, где требуется высокая скорость рендеринга, например, в мобильных устройствах, встроенных системах или при отображении больших объёмов данных (например, в научной визуализации).
С появлением программируемых шейдеров и аппаратной поддержки закраски Фонга в современных графических процессорах (начиная с DirectX 8 и OpenGL 2.0) закраска Гуро утратила доминирующее положение, но остаётся частью графического конвейера как один из стандартных режимов закраски, доступных в API (например, в OpenGL через glShadeModel(GL_SMOOTH)).
Реализация в графических API
В классическом OpenGL закраска Гуро включается командой glShadeModel(GL_SMOOTH). В Direct3D 9 и более ранних версиях она задавалась через структуру D3DRS_SHADEMODE со значением D3DSHADE_GOURAUD. В современных шейдерных моделях (Direct3D 10/11/12, Vulkan, Metal) закраска Гуро может быть реализована программно в вершинном и фрагментном шейдерах, но чаще используется как часть фиксированного функционала, который эмулируется через шейдеры.
Интересные факты
- Анри Гуро, разработавший метод, также внёс вклад в область сжатия изображений — его имя носит формат сжатия Gouraud, используемый в некоторых старых графических форматах.
- Термин «закраска Гуро» часто путают с «закраской Фонга», однако в русскоязычной технической литературе устоялось различие: Гуро — интерполяция цвета, Фонг — интерполяция нормали.
- В ранних трёхмерных играх закраска Гуро позволяла добиться приемлемого качества изображения на процессорах без аппаратного ускорения, таких как Intel 80486 и ранние Pentium.
Источники
- Gouraud, H. (1971). Continuous Shading of Curved Surfaces. IEEE Transactions on Computers, C-20(6), 623–629.
- Foley, J. D., van Dam, A., Feiner, S. K., & Hughes, J. F. (1996). Computer Graphics: Principles and Practice (2nd ed.). Addison-Wesley.
- Watt, A. (2000). 3D Computer Graphics (3rd ed.). Addison-Wesley.
- Шикин, Е. В., Боресков, А. В. (2001). Компьютерная графика. Динамика, реалистические изображения. Диалог-МИФИ.
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →