Затенение Гуро – метод интерполяции в компьютерной графике для плавного освещения полигональных моделей. Устаревший, но важный этап развития рендеринга.
Сравнивайте с английским: нажмите на абзац — оригинал откроется в окне. Кнопка EN под абзацем показывает его прямо в тексте.
Содержание
Введение
Интерполяционный метод в компьютерной графике
Interpolation method in computer graphics
Затенение Гуро (/ɡ//uː/'/r//oʊ/ gooROH), названное в честь Анри Гуро, — это метод интерполяции, используемый в компьютерной графике для создания плавного затенения поверхностей, представленных полигональными сетями. На практике затенение Гуро чаще всего применяется для достижения непрерывного освещения треугольных сеток путем вычисления освещения в вершинах каждого треугольника и линейной интерполяции полученных цветов для каждого пикселя, попадающего в треугольник. Гуро впервые опубликовал эту технику в 1971 году. Однако, благодаря расширенной аппаратной поддержке более совершенных моделей затенения, затенение Гуро в значительной степени устарело в современном рендеринге.
Gouraud shading (/ɡ//uː/'/r//oʊ/ gooROH), named after Henri Gouraud, is an interpolation method used in computer graphics to produce continuous shading of surfaces represented by polygon meshes. In practice, Gouraud shading is most often used to achieve continuous lighting on triangle meshes by computing the lighting at the corners of each triangle and linearly interpolating the resulting colours for each pixel covered by the triangle. Gouraud first published the technique in 1971. However, enhanced hardware support for superior shading models has yielded Gouraud shading largely obsolete in modern rendering.
Описание
Затенение Гуро работает следующим образом: оценка нормали к поверхности каждой вершины в полигональной 3D-модели либо задается для каждой вершины, либо вычисляется путем усреднения нормалей поверхностей полигонов, сходящихся в этой вершине. Используя эти оценки, затем выполняются вычисления освещения на основе модели отражения, например, модели отражения Фонга, для получения значений цветовой интенсивности в вершинах. Для каждого пикселя экрана, покрытого полигональной сеткой, цветовая интенсивность может быть интерполирована на основе цветовых значений, рассчитанных в вершинах.
Gouraud shading works as follows: An estimate to the surface normal of each vertex in a polygonal 3D model is either specified for each vertex or found by averaging the surface normals of the polygons that meet at each vertex. Using these estimates, lighting computations based on a reflection model, e. g. the Phong reflection model, are then performed to produce colour intensities at the vertices. For each screen pixel that is covered by the polygonal mesh, colour intensities can then be interpolated from the colour values calculated at the vertices.
Сравнение с другими методами затенения
Теневая форма Гуро считается превосходящей плоскую и требует значительно меньше вычислений, чем затенение Фонга, но обычно приводит к граненому виду. В сравнении с затенением Фонга, сила и слабость затенения Гуро заключается в его интерполяции. Если сетка покрывает больше пикселей на экране, чем содержит вершин, интерполяция цветовых значений из результатов ресурсоемких вычислений освещения в вершинах менее требовательна к процессору, чем выполнение вычислений освещения для каждого пикселя, как в затенении Фонга. Однако, локализованные световые эффекты (такие как зеркальные блики, например, отблеск отраженного света на поверхности яблока) не будут отображаться корректно, и если блик находится в середине многоугольника, но не достигает его вершин, он не будет виден при рендеринге Гуро; наоборот, если блик приходится на вершину многоугольника, он будет отображаться правильно в этой вершине (поскольку именно там применяется модель освещения), но будет неестественно распространяться по всем соседним многоугольникам посредством интерполяции. Эту проблему легко заметить при рендеринге, где ожидается плавное перемещение зеркального блика по поверхности вращающейся модели. Затенение Гуро вместо этого создаст блик, который будет непрерывно появляться и исчезать на соседних участках модели, достигая максимальной интенсивности, когда предполагаемый зеркальный блик совпадает с вершиной модели. Хотя эту проблему можно решить, увеличив плотность вершин объекта, в определенный момент снижение эффективности этого подхода будет склонять к переходу на более детализированную модель затенения.
Gouraud shading is considered superior to flat shading and requires significantly less processing than Phong shading, but usually results in a faceted look. In comparison to Phong shading, Gouraud shading's strength and weakness lies in its interpolation. If a mesh covers more pixels in screen space than it has vertices, interpolating colour values from samples of expensive lighting calculations at vertices is less processor intensive than performing the lighting calculation for each pixel as in Phong shading. However, highly localized lighting effects (such as specular highlights, e. g. the glint of reflected light on the surface of an apple) will not be rendered correctly, and if a highlight lies in the middle of a polygon, but does not spread to the polygon's vertex, it will not be apparent in a Gouraud rendering; conversely, if a highlight occurs at the vertex of a polygon, it will be rendered correctly at this vertex (as this is where the lighting model is applied), but will be spread unnaturally across all neighboring polygons via the interpolation method. The problem is easily spotted in a rendering which ought to have a specular highlight moving smoothly across the surface of a model as it rotates. Gouraud shading will instead produce a highlight continuously fading in and out across neighboring portions of the model, peaking in intensity when the intended specular highlight aligns with a vertex of the model. While this problem can be fixed by increasing the density of vertices in the object, at some point the diminishing returns of this approach will favour switching to a more detailed shading model.
Линейная и гиперболическая интерполяция
В оригинальной работе Горо описывалась линейная цветовая интерполяция, которая используется в графических процессорах как перспективно-корректная альтернатива линейной интерполяции. Как линейные, так и гиперболические варианты интерполяции цветов от вершин к пикселям обычно называются "заливкой Горо".
Gouraud's original paper described linear color interpolation. that is used in GPUs as a perspective correct alternative to linear interpolation. Both the linear and hyperbolic variants of interpolation of colors from vertices to pixels are commonly called "Gouraud shading".
Маховые диапазоны
Любая линейная интерполяция интенсивности приводит к разрывам производной, что вызывает появление полос Маха — распространенного визуального артефакта затенения Гуро.
Any linear interpolation of intensity causes derivative discontinuities which triggers Mach bands, a common visual artifact of Gouraud shading.