birmaga.ru
добавить свой файл

1
Тени

Тени дают важную информацию о соотношениях между объектами. Особенно в Cel анимации они выполняют важную функцию привязки объектов в сцене. Они не производят впечатления символов плавающих над местностью , показывающих где ноги персонажа соприкасаются с землей. Кроме того, тени помогают создать определенную атмосферу. В 3D компьютерной графике есть три принципиально разных подхода генерации тени : трассировка лучей, объемная тень и катры теней.


Трассировка лучей находит тени в процессе трассировки пути света через пиксели в плоскости изображения и расчета цвета объекта видимого в нем. Некоторые алгоритмы освещенности и отражающих или полупрозрачных материалов могут требовать больше лучей чтобы вновь быть использованными в сцене. Этот метод является слишком дорогим (в вычислительном плане) для интерактивных приложений и используется главным образом в высококачественной визуализации в автономном режиме. Объемные тени характеризуются геометрическим описанием 3д формы области окклюдированный от источника света. Объемная тень делит виртуальный мир на области – которые в тени и которые нет. Основным преимуществом тень объемных теней является их точность до пикселя. Тем не менее, необходимое создание теневой геометрии часто страдает от проблем надежности и может быть дорогостоящей в зависимости от сложности сцены. Кроме того, должна быть выполнена предварительная обработка , когда источники света или объекты движутся, Создание объемных теней лучше всего подходит для статичных сцен. Емкость карт теней, с другой стороны, не зависят от сложности сцены, и они очень хорошо подходят для динамичных, в режиме реального времени и интерактивных приложений. Кроме того, теневые карты позволяют использовать любой класс геометрических примитивы без каких-либо дополнительных мер предосторожности и не требуют использования дополнительного буфера трафарета (stencil buffer). Таким образом, отображение теней было реализовано в виде
значений выбора и описано в следующем разделе.

Отображение теней

Для понимания карт теней, давайте начнем с замечания, что точка находится в тени если она не видна с позиции источника света. Тени следовательно создаются при помощи проверки : виден ли пиксель с позиции источника света в сравнении с глубиной изображения вида источника света(light source's view).Эта техника была впервые описана Лансом Вильямсом в 1978 году. Алгоритм действует следующим образом: сцена сначала визуализируется с позиции источника света ( один раз для каждого источника света) с включенной проверкой глубины, и буфер глубины сохраняет текстуру ( желательно в графическую память).Для точечного источника света видом должна быть перспектива проекции , она должна быть так широка ,как угол желаемого эффекта ( это будет что то вроде квадратного прожектора). Для направленного света

(например, что от Солнца),должна быть использована орфографическая проекция. Для того, чтобы включать все объекты, в этой реализации усеченный конус построен из ограничивающей рамки сцены. Конечно, все преобразования, которые происходят в окончательной визуализации также должны быть применены. Для этого необходимо вспомнить модель части

видовой матрицы (modelview matrix). Потому что только информация о глубине является актуальной. Обновление буфера цветов, освещения, сглаженных теней, текстуры расчетов и GL нормализации, которые создадут все нормали единичной длинны после трансформации должны быть отключены для этой визуализации, для того что бы сохранить время рисования. В результате карта глубины должна быть обновлена каждый раз при изменении в свете либо объектах в сцене. Но карта глубины может быть использована вторично если двигалась только камера просмотра. Когда изображение визуализируется с позиции камеры вторично (in a second pass ), каждая видимая точка преобразуется в световую системы координат и глубина сравнения выполняется с соответствующей теневой пиксельной картой чтобы решить какая точка скрыта по отношению к источнику света. Изменение системы координат осуществляется путем умножения матриц. Во-первых, проекцией света и матрицы камеры умножаются на матрицу текстуры карты теней. Это позволит производить набор однородных координат, которые нужно разделить что бы они стали нормализованными координатами устройства. Каждый компонент которого ( x,y,z) находиться в пределах -1 до 1. OpenGL требует дополнительного масштаба и оказывает влияние на карту в интервале значений от 0 до 1, которые больше похожи ( обычны) на координаты просмотра текстур. Это масштабирование может быть сделано до перспективного деления и легко осуществляется равномерным переводом и масштабированием текстуры матрицы 0:5 перед принятием проекции света и матриц камеры. Наконец, при визуализации с позиции камеры , обратная матрица камеры умножается на матрицы текстур всех карт тени. После того, светло-пространственные координаты находят, значения X и Y обычно соответствуют расположению в глубине карты текстуры и значение Z соответствует связанной с ней глубине которые могут сейчас быть проверены на карте глубины. Если значение Z превышает то значение которое хранится в карте глубины в соответствии с ( X Y) координатами. Объект считается за закрытым (окклюзионным) объектом и должен быть помечен как неверный ( неудачный ), чтобы быть закрашенным в тень при рисовании. В противном случае он должен быть нарисован освещенным. Современные графическое аппаратное обеспечение предлагает предопределенные функции называемые shadow2DProj которые выполняют этот тест в шейдерах. Вопреки альтернативе GL ARB тени , такой подход нуждается только в одном проходе для проверки и рисования освещенных и затемненных областей. Чтобы использовать эту функцию, карта тени должна быть привязана к sampler2DShadow. Как и в любом методе, основанном на дискретном буфере, карты теней, как правило, страдают от проблем наложения. Поэтому, как правило размер карты тени должен быть как минимум в два раза больше ширины экрана(из соображений производительности, всегда используйте мощность двух методов).

Улучшенное отображение тени
Как уже упоминалось в предыдущем разделе, отображение теней страдает от недостатка который вызывает различные типы сглаживания из-за конечной и регулярной структуры Z-буфера. Эти ошибки могут быть отнесенными к глобальным ошибкам , чей эффект легко предсказуем во всех частях сцены, или локальным которые появляются лишь на частях сцены. Локальные ошибки более сложные для определения и следовательно сложнее контрмеры в режиме реального времени. Проекционное сглаживание является локальной ошибки, происходящее на полигоне почти параллельно направлению света. Эти поверхности являются очень редкими, поскольку маленькая область поверхности видна с точки расположения источника света. Иерархические карты тени и нерегулярный Z-барьер могут решить эту проблему, но эти методы не являются конкурентоспособными с точки зрения скорости методов реального времени, поскольку они требуют подробного анализа геометрии сцены. Поэтому перспективное сглаживание все еще считается открытой проблемой для режима реального времени или интерактивных приложений. Перспективное сглаживание, напротив, представляет собой глобальную ошибку, вызванную тем, что стандартное отображение теней не включает перспективную информацию. Такой объект хранится с фиксированным разрешением в карте тени. Эта ошибка особенно выделяется в сценах с широким диапазоном глубин, где близким теням необходимо высокое разрешение, а для далеких теней будет достаточно низкого разрешения. Простым решением является раздел конуса вида на подмножества и визуализация каждого подмножества со свое собственной картой теней. Однако такой подход является более емким с точки зрения процессорных ресурсов и ресурсов памяти , чем другие решения, но лучше всего подходит для направленного источника света. Кроме того, различия качества теней могут быть видны на границы двух карт теней с разными разрешениями. Другая идея перераспределяет разрешение карты теней лучше.

Перспективные карты тени генерируются в нормализованном пространстве координат устройства, т е после преобразования перспективы. Перспективные карты тени пытаются удалить перспективное сглаживание подвергая карту тени такому же перспективному преобразованию как и наблюдатель. Однако размышления в этом пост – перспективном пространстве не очень интуитивны и осуществляются вполне участвующие специальные обстоятельства: источники света преобразованные в пост- перспективном пространстве часто меняют свой тип (от точечного к направленному и наоборот или из нормального в инвертированный источник света). Отображение в пост перспективном пространстве имеет свои особенности (singularity), которые вызывают проблемы с вычислениями тени или противоположные особенности (singularity). Чтобы включить тени вычисленные позади камеры, то в этих случаях точка расположения(view point) камеры должна фактически переместиться назад, уменьшая качество тени. Кроме того, качество тени очень зависит от места наблюдения (view-dependent).

Пространственно световые перспективные карты теней (Light Space Perspective Shadow Maps ) улучшают перспективные карты теней и смягчают присущие им проблемы. Начнем с замечания , что пока перспективные трансформации являются действительным инструментом для деформации карты теней , тогда нет причин для того что бы привязывать это перспективные трансформации к конусу вида как в перспективных картах теней. На самом деле, может быть использовано любое перспективное преобразование. Действительные параметры для перспективного преобразования находятся в световом пространстве (light space), которые позволяют трактовать все источники света как направленные и не меняють направления источников света. К сожалению, при движении камеры результат применения пространственно световых перспективных карт теней неудовлетворительный (result in swimming artifacts – плавающие остатки). Кроме того, качество теней еще от места наблюдения (view-dependent).

Трапецеидальные карты теней это техника которая приближает конус вида (eye's frustum) к видимости из источника света с трапецией на основе карты теней(as seen from the light with a trapezoid to warp onto a shadow map). Этот подход является эффективным и хорошо масштабируется для больших сцен, как только восемь углов конуса наблюдения плюс центры близкой и дольней плоскости, больше чем сцена(rather than the scene) , нуждаются в вычислении хорошей трапецеидальной аппроксимации. Результат трапециевидной аппроксимации приводит к непрерывному изменению формы и размера трапеции от фрейма к фрейму , с целью контроля за переходом в разрешении карты теней. Таким образом, рассматривается также наследственная проблема мерцающих теней что происходит в пространственно световых перспективных картах теней , когда качество карты теней существенно меняется от кадра к кадру при движении глаз или света. Тем не менее, трапециевидные карты теней являются лишь приблизительными и не дают оптимальных результатов для всех конфигураций. Поскольку не существует оптимального решения для отображения теней и так как перспективные наложения являются наиболее заметными в крупномасштабных средах (in large-scale environments), которые не являются предметными областями обработки, было принято решение придерживаться стандартных карт теней.

Третим типом ошибок наложения является само затенение (self- shadowing) , так же называемый Z – файтингом (z-fighting) , которые возникают в процессе преобразования регулярных ( правильных) инервалов пикселей из точки наблюдения (eye) в световое пространтво. В световом пространстве эти преобразованные пиксели могут попасть между правильными примерными значениями обеспечивыемые картой теней . Вместе с конечной точностью значения глубины, это может привести к неправильному затенению полигонами самих себя, в результате чего получим неправильное отображение. Самозатенение это локальные эффект , так как он зависит от ориентации полигона по отношению к направлению света.

Wang и Molnar предложить методику, которая называется дву глубинное отображение теней (Second-Depth Shadow Mapping) , которая визуализирует только задние поверхности карты теней , опираясь на тот факт что проблемы сглаживания не могут появиться рядом с заднеми поверхностями так как они не освещены в любом случае. По очевидным причинам, этот метод работает только для замкнутых поверхностей. Метод удаляет наиболее самозатененные артефакты( явления самозатенения) на земле, но и во всех других случаях качество похоже смещение в градиентном масштабе (quality is similar to slope-scale biasing) описанном далее. Другим распространенным подходом является использование постоянного смещения сдвигая значения глубины в карте тени на определенную сумму, чтобы избежать Z-файтинга. Проблема в том, что значение соответствующего смещения зависит от сцены. Полигонам с большим градиентом глубины (large depth slope). те полигоны почти параллельные направлению света нуждаються в большем смещении, а полигоны с нулевой глубиной градиента не нуждаются в смещении. Кроме того, большое смещение может привести к явно неправильной тени. Таким образом постоянное смещение используется только в сочетании с градиентным масштабным смещением (to slope-scale biasing), как например, предоставляемое полигону смещение интерфейсом OpenGL, который учитывает глубину градиента. Даже тогда, это занимает много ручной настройки для каждой сцены, чтобы найти правильные параметры, и для больших сцен это часто оказывается невозможным. Поэтому автоматическая техника желательней. Техника которая была окончательно реализована называется Двойные карты теней (Dual Shadow Maps), она описана в следующем разделе.


Двойные карты теней

Понятие двойных карт теней было введено Weiskopf и Ertl в 2003 году. Они улучшили методику, которая называлась средне точечная карта теней или медианная (Midpoint Shadow Maps) созданная Woo, она будет описана далее. Медианная карта теней работает путем визуализации двух карт теней для каждого источника света. Первая карта тени визуализируется как обычно , возможно с отбором задних поверхностей из соображений производительности и содержит первый слой глубины, как видно из источника света. Вторая карта тени визуализируется с отбором передних поверхностей и содержит второй слой глубины. Эти две глубины могут быть объединены для получения надежного смещения используя формулу

znew = z1 + (z2+2z1)/2 (1)

Где z1 это ближайшие поверхности, z2 это поверхность подальше , и znew это значение глубины вновь созданных комбинированных карт теней. Этот метод работает для замкнутых и не замкнутых объектах. Предполагая твердый объект , результат это виртуальная поверхность которая проходит через середину объекта.



Рисунок : Медианная карта теней (Midpoint shadow map).

С верху расположен направленный источник света. Виртуальная поверхность (пунктирная линия) между двумя ближайшими слоями испытуемого полигонального объекта (сплошная линия) служит теневой картой.

Хотя такой подход устраняет большинство артефактов ( искажений) две главных проблематичных конфигурации остаются


Рисунок 2: а) «Само незатенение» (Self-unshadowing) б) самозатенение (Self-shadowing)

На рисунке 2 а) фрагмент отмеченый черной точкой может стать ошибочно обестенен(unshadowing) , так как медианная карта тени находиться сразу справа за черной точкой. В этом случае конечный выбор карты глубины в комбинации с дальней второй ближайшей поверхности генерирует неправильную глубину.( In this case, the finite sampling of the shadow map in combination with a far-away second closest surface generates incorrect depth values). Рисунок 2 б) иллюстрирует проблемы в регионах, прилегающих к линиям силуэта. Если точка силуэта находится дальше от источника света, чем соседние части меридианной карты теней, точка силуэта может самозатенится.для облегчения случая а) мы обсуждали постоянное смещение(constant bias) в предыдущем разделе, которое может быть использовано вместо срединной точки. Проблема этого подхода заключается, чтобы найти соответствующее значение для смещения в целях выполнения двух противоречащих требований: если значение слишком мало произойдет сомозатенение. Если значение слишком велико, объекты которые близки к их закрывающим (occluder) будут неправильно освещены(Рисунок 3).


Рисунок 3

Таким образом, мы изменили формулу (1) следующим образом получить формулу для двойной карты теней:

znew = z1 + min( (z2 - z1)/2 , offset) (2)



Теперь, смещение используется когда второй слой глубины слишком далеко, что вызвало проблемы в случае (а), но когда «то что отбрасывает тень» (shadow caster) и приемник тени находятся очень близко, серединная точка продуманна(the midpoint is considered), так что смещение может быть выбрано достаточно большим, чтобы избежать Z-файтинга. Тем не менее, проблема (б) в гранях силуэта остается, здесь первый и второй слой очень близки друг к другу и смещение не вступит в силу. Это может быть решено путем отбора ( отсечения) задних поверхностей. Таким образом поверхность со второй глубиной (second-depth surface) это фактически лицевая поверхность объекта за поврхностью первой глубины(или дальняя плоскость отсечения). (so the second-depth surface is actually the front face of an object behind the first-depth surface (or the far clipping plane)). Теперь это возможно т к необоснованно далекие вторые глубины теперь ограничены смещением. Для получения второго слоя глубины , вместо отсечения (culling) передних поверхностей, сцена визуализируется с отсечением задних граней в течении генерации второй карты тени.( instead of using front-face culling, the scene is rendered with back-face culling during the generation of the second shadow map as well). В ходе этого процесса, пиксельный шейдер отвергает все фрагменты чья глубина равна либо находиться в допустимых пределах значений глубины в первой карте теней. После создания объединенной карты тени с помощью формулы (2), работа алгоритма описана выше. Хотя двойные карты теней удвоят стоимость создания карты теней , они сразу дают хороший визуальный результат, не требующий больших знаний в настройке параметров.

11. Вывод. 


Несмотря на заявленные цели НФР и представленные шаги в направлении их реализации, художники и иллюстраторы будут и далее создавать рукотворные графические работы, применяя для этого имеющиеся у них творческие способности. Человек на своем месте будет по-прежнему оставаться одним из законодателей мод в области графики, создавать стили, которые станут служить образцами для подражания при написании программ рендеринга, будет и впредь заниматься рисованием и живописью как способом наблюдения за окружающим миром и добиваться результатов, достойных того, чтобы поставить на них свою подпись.