Затенение по Гуро ( / ɡ uː ˈ r oʊ / goo- ROH ), названное в честь Анри Гуро , представляет собой метод интерполяции, используемый в компьютерной графике для создания непрерывного затенения поверхностей, представленных полигональными сетками . На практике затенение по Гуро чаще всего используется для достижения непрерывного освещения на треугольных сетках путем вычисления освещения в углах каждого треугольника и линейной интерполяции полученных цветов для каждого пикселя , покрытого треугольником. Гуро впервые опубликовал эту технику в 1971 году. [1] [2] [3] Однако улучшенная аппаратная поддержка для превосходных моделей затенения привела к тому, что затенение по Гуро в значительной степени устарело в современном рендеринге.
Затенение по Гуро работает следующим образом: оценка нормали поверхности каждой вершины в полигональной 3D-модели либо указывается для каждой вершины, либо находится путем усреднения нормалей поверхности полигонов, которые встречаются в каждой вершине. Используя эти оценки, затем выполняются вычисления освещения на основе модели отражения, например, модели отражения Фонга , для получения интенсивности цвета в вершинах. Для каждого пикселя экрана , который покрыт полигональной сеткой, интенсивность цвета затем может быть интерполирована из значений цвета, рассчитанных в вершинах.
Затенение по Гуро считается более эффективным, чем плоское затенение , и требует значительно меньше обработки, чем затенение по Фонгу , но обычно приводит к фасетному виду.
По сравнению с затенением Фонга, сила и слабость затенения Гуро заключаются в его интерполяции. Если сетка покрывает больше пикселей в пространстве экрана, чем имеет вершин, интерполяция значений цвета из выборок дорогостоящих вычислений освещения в вершинах менее требовательна к процессору, чем выполнение вычисления освещения для каждого пикселя, как в затенении Фонга. Однако сильно локализованные эффекты освещения (такие как зеркальные блики , например, отблеск отраженного света на поверхности яблока) не будут отображаться правильно, и если блик находится в середине полигона, но не распространяется на вершину полигона, он не будет виден при рендеринге Гуро; и наоборот, если блик возникает в вершине полигона, он будет отображаться правильно в этой вершине (так как именно здесь применяется модель освещения), но будет неестественно распространен по всем соседним полигонам с помощью метода интерполяции.
Проблему легко заметить в рендеринге, который должен иметь зеркальный блик, плавно перемещающийся по поверхности модели при ее вращении. Затенение по Гуро вместо этого создаст блик, непрерывно появляющийся и исчезающий на соседних участках модели, достигая пика интенсивности, когда предполагаемый зеркальный блик совмещается с вершиной модели. Хотя эту проблему можно устранить, увеличив плотность вершин в объекте, в какой-то момент уменьшающаяся отдача от этого подхода будет способствовать переходу к более подробной модели затенения.
В оригинальной статье Гуро описывалась линейная цветовая интерполяция. [1] В 1992 году Блинн опубликовал эффективный алгоритм гиперболической интерполяции [4] , который используется в графических процессорах как альтернатива линейной интерполяции с корректной перспективой. Как линейный, так и гиперболический варианты интерполяции цветов от вершин до пикселей обычно называются «затенением Гуро».
Любая линейная интерполяция интенсивности приводит к производным разрывам, которые вызывают полосы Маха — распространенный визуальный артефакт затенения Гуро.