Введение

Интерполяционный метод в компьютерной графике

Затенение Гуро (/ɡ//uː/'/r//oʊ/ gooROH), названное в честь Анри Гуро, — это метод интерполяции, используемый в компьютерной графике для создания плавного затенения поверхностей, представленных полигональными сетями. На практике затенение Гуро чаще всего применяется для достижения непрерывного освещения треугольных сеток путем вычисления освещения в вершинах каждого треугольника и линейной интерполяции полученных цветов для каждого пикселя, попадающего в треугольник. Гуро впервые опубликовал эту технику в 1971 году. Однако, благодаря расширенной аппаратной поддержке более совершенных моделей затенения, затенение Гуро в значительной степени устарело в современном рендеринге.

Описание

Затенение Гуро работает следующим образом: оценка нормали к поверхности каждой вершины в полигональной 3D-модели либо задается для каждой вершины, либо вычисляется путем усреднения нормалей поверхностей полигонов, сходящихся в этой вершине. Используя эти оценки, затем выполняются вычисления освещения на основе модели отражения, например, модели отражения Фонга, для получения значений цветовой интенсивности в вершинах. Для каждого пикселя экрана, покрытого полигональной сеткой, цветовая интенсивность может быть интерполирована на основе цветовых значений, рассчитанных в вершинах.

Сравнение с другими методами затенения

Теневая форма Гуро считается превосходящей плоскую и требует значительно меньше вычислений, чем затенение Фонга, но обычно приводит к граненому виду. В сравнении с затенением Фонга, сила и слабость затенения Гуро заключается в его интерполяции. Если сетка покрывает больше пикселей на экране, чем содержит вершин, интерполяция цветовых значений из результатов ресурсоемких вычислений освещения в вершинах менее требовательна к процессору, чем выполнение вычислений освещения для каждого пикселя, как в затенении Фонга. Однако, локализованные световые эффекты (такие как зеркальные блики, например, отблеск отраженного света на поверхности яблока) не будут отображаться корректно, и если блик находится в середине многоугольника, но не достигает его вершин, он не будет виден при рендеринге Гуро; наоборот, если блик приходится на вершину многоугольника, он будет отображаться правильно в этой вершине (поскольку именно там применяется модель освещения), но будет неестественно распространяться по всем соседним многоугольникам посредством интерполяции. Эту проблему легко заметить при рендеринге, где ожидается плавное перемещение зеркального блика по поверхности вращающейся модели. Затенение Гуро вместо этого создаст блик, который будет непрерывно появляться и исчезать на соседних участках модели, достигая максимальной интенсивности, когда предполагаемый зеркальный блик совпадает с вершиной модели. Хотя эту проблему можно решить, увеличив плотность вершин объекта, в определенный момент снижение эффективности этого подхода будет склонять к переходу на более детализированную модель затенения.

Линейная и гиперболическая интерполяция

В оригинальной работе Горо описывалась линейная цветовая интерполяция, которая используется в графических процессорах как перспективно-корректная альтернатива линейной интерполяции. Как линейные, так и гиперболические варианты интерполяции цветов от вершин к пикселям обычно называются "заливкой Горо".

Маховые диапазоны

Любая линейная интерполяция интенсивности приводит к разрывам производной, что вызывает появление полос Маха — распространенного визуального артефакта затенения Гуро.