Затенение относится к изображению восприятия глубины в 3D-моделях (в области 3D-компьютерной графики ) или иллюстрациях (в изобразительном искусстве ) путем изменения уровня темноты . [1] Затенение пытается аппроксимировать локальное поведение света на поверхности объекта и его не следует путать с методами добавления теней, такими как теневое отображение или теневые объемы , которые подпадают под глобальное поведение света.
Затенение традиционно используется в рисовании для изображения диапазона темноты путем нанесения носителя более плотно или с более темным оттенком для более темных областей, и менее плотно или с более светлым оттенком для более светлых областей. Световые узоры, такие как объекты, имеющие светлые и затененные области, помогают при создании иллюзии глубины на бумаге. [2] [3]
Существуют различные техники штриховки, включая перекрестную штриховку , когда перпендикулярные линии различной близости рисуются в виде сетки, чтобы затенить область. Чем ближе линии друг к другу, тем темнее кажется область. Аналогично, чем дальше друг от друга линии, тем светлее кажется область.
Пудровая растушевка — это метод наброска штриховки. В этом стиле для рисования рисунка используются растушевочный порошок и бумажные растушевки . (Они также цветные.) Растушевочный порошок гладкий и не имеет блестящих частиц. Бумага, которую вы будете использовать, должна иметь мелкие зерна, чтобы порошок оставался на бумаге.
В компьютерной графике затенение относится к процессу изменения цвета объекта/поверхности/полигона в трехмерной сцене на основе таких факторов, как (но не ограничиваясь) угол наклона поверхности к источникам света, ее расстояние от источников света, ее угол наклона к камере и свойства материала (например, функция распределения двунаправленной отражательной способности ) для создания фотореалистичного эффекта.
Затенение выполняется в процессе рендеринга программой, называемой шейдером .
Затенение изменяет цвета граней в 3D-модели в зависимости от угла наклона поверхности к источнику или источникам света.
На первом изображении ниже грани коробки визуализированы, но все одного цвета. Здесь также визуализированы линии краёв, что делает изображение более заметным.
Второе изображение — это та же модель, отрисованная без краевых линий. Трудно сказать, где заканчивается одна грань коробки и начинается другая.
На третьем изображении включено затенение, что делает изображение более реалистичным и позволяет легче различить, где какое лицо.
Когда шейдер вычисляет результирующий цвет, он использует модель освещения для определения количества света, отраженного в определенных точках поверхности. Различные модели освещения можно комбинировать с различными методами затенения — в то время как освещение говорит, сколько света отражается, затенение определяет, как эта информация используется для вычисления конечного результата. Например, он может вычислять освещение только в определенных точках и использовать интерполяцию для заполнения оставшейся части. Шейдер также может решать, сколько источников света следует учитывать и т. д.
Источник окружающего света представляет собой всенаправленный источник света с фиксированной интенсивностью и фиксированным цветом, который одинаково влияет на все объекты в сцене (является вездесущим). Во время рендеринга все объекты в сцене освещаются с указанной интенсивностью и цветом. Этот тип источника света в основном используется для предоставления сцене базового вида различных объектов в ней. Это самый простой тип освещения для реализации, и он моделирует, как свет может рассеиваться или отражаться много раз, тем самым создавая равномерный эффект.
Окружающее освещение можно комбинировать с окклюзией окружающего света , чтобы представить, насколько открыта каждая точка сцены, влияя на количество окружающего света, которое она может отражать. Это создает рассеянное, ненаправленное освещение по всей сцене, не отбрасывая четких теней, но с затемненными закрытыми и защищенными областями. Результат обычно визуально похож на пасмурный день.
Свет исходит из одной точки и распространяется во всех направлениях.
Моделирует прожектор : свет исходит из одной точки и распространяется конусом .
Свет исходит из небольшой области на одной плоскости . (Более реалистичная модель, чем точечный источник света.)
Направленный источник света освещает все объекты одинаково с заданного направления , как площадной свет бесконечного размера и бесконечного расстояния от сцены; есть затенение, но не может быть никакого спада с расстоянием. Это как солнце .
Теоретически, две параллельные поверхности освещаются практически одинаково от удаленного не заблокированного источника света, например, солнца. Эффект спада расстояния создает изображения, которые имеют больше теней и поэтому будут реалистичными для близких источников света.
На левом изображении не используется спад расстояния. Обратите внимание, что цвета на передних гранях двух коробок абсолютно одинаковы. Может показаться, что есть небольшая разница там, где две грани напрямую перекрываются, но это оптическая иллюзия, вызванная вертикальным краем ниже, где встречаются две грани.
На правом изображении используется эффект спада с расстоянием. Обратите внимание, что передняя поверхность ближнего ящика ярче передней поверхности заднего ящика. Кроме того, пол становится то светлее, то темнее по мере удаления.
Уменьшение расстояния можно рассчитать несколькими способами:
Во время затенения нормаль поверхности часто требуется для расчета освещения. Нормали могут быть предварительно вычислены и сохранены для каждой вершины модели.
Здесь освещение оценивается только один раз для каждого полигона (обычно для первой вершины в полигоне, но иногда для центроида для треугольных сеток) на основе нормали поверхности полигона и предположения, что все полигоны плоские. Вычисленный цвет используется для всего полигона, делая углы острыми. Обычно это используется, когда более продвинутые методы затенения слишком затратны в вычислительном отношении. Зеркальные блики плохо визуализируются при плоском затенении: если в репрезентативной вершине оказывается большой зеркальный компонент, эта яркость равномерно рисуется по всей грани. Если зеркальный блик не попадает на репрезентативную точку, он полностью пропускается. Следовательно, компонент зеркального отражения обычно не включается в вычисление плоского затенения.
В отличие от плоской заливки, где цвета меняются прерывисто на границах полигонов, при плавной заливке цвет меняется от пикселя к пикселю, что приводит к плавному переходу цвета между двумя соседними полигонами. Обычно значения сначала вычисляются в вершинах, а для вычисления значений пикселей между вершинами полигонов используется билинейная интерполяция . Типы плавной заливки включают заливку по Гуро [4] и заливку по Фонгу [5] .
Проблемы:
Затенение Фонга похоже на затенение Гуро, за исключением того, что вместо интерполяции интенсивности света нормали интерполируются между вершинами, а освещение оценивается попиксельно. Таким образом, зеркальные блики вычисляются гораздо точнее, чем в модели затенения Гуро.
Отложенное затенение — это метод затенения, при котором вычисление затенения откладывается на более поздний этап путем рендеринга в два прохода, что потенциально повышает производительность, не отбрасывая дорогостоящие затененные пиксели. Первый проход захватывает только параметры поверхности (такие как глубина, нормали и параметры материала), второй выполняет фактическое затенение и вычисляет окончательные цвета. [6] [7] [8] : 884
Оба метода затенения Гуро и Фонга могут быть реализованы с использованием билинейной интерполяции . Бишоп и Ваймер [9] предложили использовать разложение в ряд Тейлора полученного выражения с применением модели освещения и билинейной интерполяции нормалей. Следовательно, была использована интерполяция полиномов второй степени . Этот тип биквадратной интерполяции был далее разработан Баррерой и др. [10] , где один полином второго порядка использовался для интерполяции диффузного света модели отражения Фонга , а другой полином второго порядка использовался для зеркального света.
Сферическая линейная интерполяция ( Slerp ) использовалась Куиджем и Блейком [11] для вычисления как нормали по полигону, так и вектора в направлении к источнику света. Похожий подход был предложен Хастом [12] , который использует кватернионную интерполяцию нормалей с тем преимуществом, что нормаль всегда будет иметь единичную длину, и вычислительно сложная нормализация избегается.
В компьютерном зрении некоторые методы 3D-реконструкции основаны на затенении или форме-из-затенения . На основе затенения изображения трехмерная модель может быть реконструирована из одной фотографии. [13]