На правах рекламы:
ISSN 0236-235X (P)
ISSN 2311-2735 (E)

Авторитетность издания

ВАК - К1
RSCI, ядро РИНЦ

Добавить в закладки

Следующий номер на сайте

2
Ожидается:
16 Июня 2024

Реализация теней для всенаправленных источников света в реальном режиме времени

Статья опубликована в выпуске журнала № 3 за 2008 год.
Аннотация:
Abstract:
Авторы: Мальцев А.В. (avmaltcev@mail.ru) - НИИСИ РАН, г. Москва, г. Москва, Россия, кандидат физико-математических наук, Михайлюк М.В. (mix@niisi.ras.ru) - НИИСИ РАН, г. Москва, Москва, Россия, доктор физико-математических наук
Ключевые слова: реализация, генерация, источники света, тени
Keywords: implementation, generating, ,
Количество просмотров: 12542
Версия для печати
Выпуск в формате PDF (2.59Мб)

Размер шрифта:       Шрифт:

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

В реальности, кроме направленных источников света, существуют и преобладают такие, которые испускают в окружающую среду лучи по всем направлениям. Это так называемые всенаправленные источники. Также можно выделить источники, именуемые полусферическими, свет от которых распространяется не во все пространство, а в полупространство. Так как в данных случаях нет определенного направления свечения, реализовать эффект теней, используя одну теневую карту в прежнем ее понимании, невозможно.

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

В данной статье описаны принципы и методы генерации параболических теневых карт и реализация с помощью них теней для всенаправленных и полусферических источников света в реальном режиме времени.

Параболические карты окружающей среды

Параболическую карту окружающей среды можно получить путем проецирования изображения с поверхности идеально отражающего параболоида, задаваемого функцией

, где ,      (1)

лучами, параллельными оси Z, на плоскость квадратной текстурной карты M || XY с длиной стороны, равной двум, и центром на оси Z (рис. 1). Текстура M называется параболической картой. Параболоид (1) выбран таким образом, что его фокус находится в точке O=(0,0,0), то есть в начале системы координат. Поэтому, исходя из свойств параболоида, все падающие на него из полупространства Z+ лучи, сходящиеся в фокальной точке, отражаются в одном и том же направлении =(0,0,1). Следовательно, для любой точки PÎZ+ можно найти ее отображение P² на карте M, испустив луч PO. Это означает, что одна параболическая карта M полностью отображает полупространство Z+. Для отображения Z– можно воспользоваться параболоидом –f(x,y) с направляющим вектором отражения =(0,0,-1) или инвертировать пространство относительно плоскости XY и применить параболоид (1). Совокупность параболических карт для Z+ и Z– называется двойной параболической картой окружающей среды.

Пусть P¢ – точка пересечения поверхности параболоида (1) с лучом PO, выходящим из произвольной точки PÎZ+ (рис. 1). Основная задача заключается в нахождении для точки P ее отображения в текстурной карте М, то есть координат P²x, P²y проекции точки P¢ на плоскость M. Так как проецирование осуществляется лучами, параллельными оси Z, координаты P²x, P²y точки P² на текстуре M будут совпадать с координатами P¢x, P¢y точки P¢.

Определим два касательных вектора  к поверхности параболоида (1) в точке P¢=(x,y, f(x,y)):

Вычислив векторное произведение  и , получим нормаль к поверхности параболоида (1) в точке P¢:

.             (2)

С другой стороны, сумма единичного вектора направления из начала системы координат в точку P и вектора отражения  даст вектор  (рис. 1), сонаправленный с нормалью , но отличающийся от нее длиной:

,

где

Следовательно, нормаль  в точке P¢ можно получить, поделив вектор  на его z-координату:

.                           (3)

Сравнивая формулы (2) и (3), получим:

   (4)

Отметим, что точка P¢ на параболоиде (как и точка P² на текстурной карте М) соответствует любой точке полупространства Z+, лежащей на луче OP¢.

Генерация параболических карт теней для источников света

Рассмотрим подробнее процесс генерации двойной параболической карты для всенаправленного источника света. Пусть LVCS – его система координат. В общем случае в качестве LVCS можно принять любую правостороннюю ортонормированную систему координат с центром в точке размещения источника. Однако для упрощения вычислений удобнее выбрать LVCS так, чтобы оси координат были сонаправлены с осями мировой системы WCS. Тогда матрица перехода из WCS в LVCS будет иметь вид:

,

где Lx, Ly, Lz – координаты источника света в системе WCS. Плоскость XY системы LVCS делит все пространство, окружающее источник света, на два полупространства. Назовем их Z+ и Z– (рис. 1). Для каждого из полупространств необходимо построить свою параболическую теневую карту. Рассмотрим, как это можно сделать с помощью шейдеров, на примере полупространства Z+.

Пусть P – некая точка с координатами, представленными в локальной системе OCS объекта, которому принадлежит эта точка. Найдем ее координаты в системе LVCS:

PLVCS=MLV*MM*POCS ,                                        (5)

где MLV – матрица перехода из мировой системы WCS в LVCS; MM – модельная матрица, осуществляющая преобразование из локальной системы координат OCS в мировую WCS.

Для устранения ошибочных затенений при создании параболической карты необходимо отсечь от обработки точки, не принадлежащие рассматриваемому полупространству Z+. Тогда условием отбраковки точки P будет PLVCS,z<0.

При практической реализации данного метода из-за погрешностей вычислений производится неточная отбраковка точек вблизи плоскости XY. Для устранения этого недостатка сдвинем границу отбраковки на некоторую малую величину D>0, то есть запишем условие отбраковки точки в виде PLVCS,z+D<0.

Если было установлено, что точка P принадлежит рассматриваемому полупространству, необходимо найти по формуле (4) ее образ P²=(P²x,P²y) на плоскости параболической карты. Также требуется вычислить длину отрезка OP, то есть расстояние R= от точки P до начала координат O системы LVCS, в котором находится фокус пара- болоида (1). Фактически R определяет глубину точки относительно источника по направлению OP (рис. 1). Это значение должно быть сохранено в параболической теневой карте, но прежде его надо преобразовать к интервалу [0,1]. Введем для источника максимальное zfar и минимальное znear расстояния отбрасывания тени, при этом zfar>znear>0, а также некоторую малую поправку глубины zbias, устраняющую артефакты при дальнейшем использовании генерируемой карты. Тогда

.                                       (6)

Найденную для точки P тройку значений (P²x, P²y, R¢) подадим на выход вершинного шейдера, а в фрагментном шейдере для каждого визуализируемого фрагмента рассчитаем значение Rf по формуле (6) и установим его в качестве глубины. Как уже было сказано, все точки полупространства, лежащие на луче OP (рис. 1), будут ассоциироваться с одной и той же точкой на параболоиде, а значит, с одним и тем же текселем в теневой карте. Поэтому с помощью стандартного теста глубины при визуализации карты в этот тексель будет записано наименьшее из всех существующих значений Rf, то есть расстояние до точки, находящейся ближе всего к источнику освещения по направлению OP.

Итак, рассмотрен случай генерации параболической теневой карты для полупространства Z+. Карту для полупространства Z– можно построить практически аналогично. Для этого нужно умножить на –1 координату z точки P после проведения теста отбраковки. Такое умножение на коэффициент –1 переносит все точки полупространства Z– в полупространство Z+ и, наоборот, все точки из Z+ в Z–, то есть инвертирует пространство относительно плоскости XY системы координат LVCS, что сводит построение параболической теневой карты для полупространства Z– к уже рассмотренному выше алгоритму.

Отметим, что построение теневой карты для полусферического источника света является частным случаем рассмотренной выше схемы, так как требуется генерация параболической текстуры только для одного из полупространств – Z+ или Z–, в зависимости от системы координат LVCS. Однако выбор системы LVCS усложняется тем, что освещаемое источником полупространство должно полностью совпасть с одним из полупространств, Z+ или Z–, что, скорее всего, не произойдет при выборе в качестве LVCS системы координат, оси которой сонаправлены с осями мировой системы WCS. В этом случае нужно выбрать систему LVCS так, чтобы ее центр находился в точке размещения источника света, плоскость XY была параллельна основанию источника, а ось Z была направлена в освещаемое полупространство. Матрица MLV будет иметь более сложный вид, чем рассмотренная выше, но формула (5) сохранится.

Для генерации теневой карты и визуализации сцены в реальном режиме времени целесообразно применение так называемого прямого рендеринга в текстуру с использованием современных программно-аппаратных средств, а именно технологии FBO (framebuffer objects). FBO – это расширение OpenGL, которое обеспечивает простой интерфейс для отрисовки в контексты, отличные от буферов GL, предоставленных оконной системой. Framebuffer objects является одним из современных средств рендеринга и имеет преимущества по сравнению с более старой технологией использования пиксельных буферов (P-buffers) [4].

Реализация теней от полусферических и всенаправленных источников света

Для применения сгенерированной теневой карты при расчете освещенности от всенаправленного (или полусферического) источника света необходимо во фрагментном шейдере реализовать специальный тест глубины пикселей относительно источника света. Рассмотрим его суть на простом примере со всенаправленным источником.

Пусть имеется точка P, принадлежащая поверхности некоторого объекта виртуальной сцены, и пусть известны ее координаты в объектной системе координат (OCS). Для проведения теста глубины необходимо найти образ P²=(P²x,P²y) этой точки на плоскости параболической теневой карты и расстояние R между P и началом координат O системы LVCS источника света, то есть длину отрезка OP. Также необходимо определить, какую из двух текстур, входящих в состав двойной параболической карты, использовать для рассматриваемой точки.

Вычислим координаты (x,y,z) точки P в системе LVCS источника света по формуле (5). Тогда R=.

Так как в теневой карте все записанные расстояния имеют значения от 0 до 1, необходимо преобразовать R к отрезку [0,1] по формуле (6), получая R¢. При этом, если параметр zbias уже был учтен при построении карты, в данном случае целесообразно задать его равным 0.

Выбор одной из двух параболических карт (Z+ или Z–) осуществляется путем сравнения значения вычисленной выше координаты z точки PLVCS с нулем. Если z<0, то точка PLVCS находится в полупространстве Z– и используется текстура Z–, и, наоборот, если z³0, то задействована текстура Z+. Отметим, что в отличие от случая генерации теневой карты здесь требуется разделение полупространств Z+ и Z– именно плоскостью XY, то есть без учета каких-либо погрешностей.

Особенность реализации теней от полусферических источников заключается в том, что при определении, какому из полупространств (Z+ или Z–) системы LVCS принадлежит рассматриваемая точка P, не делается выбор параболической карты, так как она является единственной для такого типа источников и строится либо для Z+, либо для Z–. Вместо этого необходимо выяснить, освещается ли вообще то полупространство, в котором находится точка, или нет. Если источник, например, светит в Z+, а точка расположена в Z–, не имеет смысла проводить дальнейшие расчеты.

Если было установлено, что точка PLVCSÎZ–, требуется умножить ее координату z на коэффициент –1, чтобы производить дальнейший расчет аналогично случаю PLVCSÎZ+. Далее по формуле (4) находим координаты (P²x,P²y) отображения точки PLVCS. Числа P²x и P²y фактически являются текстурными координатами для выбранной параболической теневой карты. Однако их значения лежат в отрезке [–1,1], поэтому надо преобразовать P²x и P²y к отрезку [0,1]: s=0.5*P²x+0.5, t=0.5*P²y+0.5.

Для определения освещенности точки P по паре координат (s,t) из теневой карты выбирается записанное в ней значение расстояния (глубины) Rmap до точки, ближайшей к источнику освещения по лучу OP, и сравнивается со значением R¢. При этом возможны два варианта:

·     Rmap

·     RmapR¢ (R¢ и Rmap приблизительно эквивалентны), то есть в теневой карте записана с некоторой погрешностью глубина самой точки P, а следовательно, P освещается источником.

При попиксельном вычислении освещенности в каждой точке P каждого объекта сцены используется описанная в [4] расширенная модель расчета освещенности:

Подпись: Рис. 2

sh=density*shade,

где kА, kD, kS – коэффициенты отражения материалом, соответственно, рассеянной, диффузной и зеркальной компонент освещения; IA, ID, IS – интенсивности этих компонент, попадающие в точку P; N – нормаль к поверхности в P; L – единичный вектор из P на источник света; H=(L+V)/||L+V|| – нормализованный средний вектор между L и единичным направлением из P на наблюдателя, степень s (действительное число от 0 до 128) характеризует резкость бликов (чем выше s, тем блик меньше и резче); sc – цвет тени; density – коэффициент плотности тени (действительное число от 0 до 1); shade – параметр, определяющий наличие или отсутствие тени в точке расчета.

Параметр shade будет определяться следующим образом:

На рисунке 2 представлено применение вышеописанных алгоритмов на примере сцены со всенаправленным источником света, расположенным в центре комнаты.

Список литературы

1.    1. Mark J. Kilgard. Shadow mapping with today’s opengl hardware. Technical report, CEDEC, 2001.

2.    Brabec S., Annen T., and Seidel H.-P. 2002. Shadow mapping for hemispherical and omnidirectional light sources. In Computer Graphics International (CGI).

3.    Mark J. Kilgard. View Independent Environment Mapping with Dual Paraboliod Maps.

4.    Мальцев А.В., Михайлюк М.В. Реализация теней для направленных источников света в 3D сценах в реальном режиме времени. // Информационно-измерительные и управляющие системы. – 2008. – № 2.

 


Постоянный адрес статьи:
http://swsys.ru/index.php?page=article&id=1574
Версия для печати
Выпуск в формате PDF (2.59Мб)
Статья опубликована в выпуске журнала № 3 за 2008 год.
Статья находится в категориях: Моделирование
Статья относится к отраслям: Вычисления

Возможно, Вас заинтересуют следующие статьи схожих тематик: