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

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

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

1. Егоров А.Н. Пилотируемые полеты в космос. // Сб. тез. -Звездный городок: РИО РГНИИЦПК им. Ю.А. Гагарина, 2005. -353 с.

2. Решетников В.Н., Торгашев М.А., Хураськин И.А. Система создания и просмотра мультимедийных инструкций. // Программные продукты и системы. - 2007, № 2.

3. Моше Мошкович. Виртуальные студии. Техника и технологии. - Жуковский: Изд-во «ЭРА», 2001. - 215 с.

РЕАЛИЗАЦИЯ ТЕНЕЙ ДЛЯ ВСЕНАПРАВЛЕННЫХ ИСТОЧНИКОВ СВЕТА

В РЕАЛЬНОМ РЕЖИМЕ ВРЕМЕНИ

А.В. Мальцев; М.В. Михайлюк, д.ф.-ж.н.

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

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

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

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

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

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

Цх,у) = 2 - 2

лучами, параллельными оси Ъ, на плоскость квадратной текстурной карты М II ХУ с длиной стороны,

равной двум, и центром на оси Ъ

LVCS

4У ГР

O

X

Z-

4Ъ-

Р"

Z

M

Рис. 1

(рис. 1). Текстура М называется параболической картой. Параболоид (1) выбран таким образом, что его фокус находится в точке 0=(0,0,0), то есть в начале системы координат. Поэтому, исходя из свойств параболоида, все падающие на него из полупространства Ъ+ лучи, сходящиеся в фокальной точке, отражаются в одном и том же направлении

=(0,0,1). Следовательно, для любой точки РеЪ+

можно найти ее отображение Р" на карте М, испустив луч РО. Это означает, что одна параболическая карта М полностью отображает полупространство Ъ+. Для отображения Ъ- можно воспользоваться параболоидом -Г(х,у) с направляющим вектором отражения ^ =(0,0,-1) или инвертировать пространство относительно плоскости ХУ и применить параболоид (1). Совокупность параболических карт для Ъ+ и Ъ- называется двойной параболической картой окружающей среды.

Пусть Р' - точка пересечения поверхности параболоида (1) с лучом Р0, выходящим из произвольной точки РеЪ+ (рис. 1). Основная задача заключается в нахождении для точки Р ее отображения в текстурной карте М, то есть координат Р"х, Р"у проекции точки Р' на плоскость М. Так как проецирование осуществляется лучами, параллельными оси Ъ, координаты Р"х, Р"у точки Р" на текстуре М будут совпадать с координатами Р'х, Р'у точки Р'.

Определим два касательных вектора Тх, Ту к поверхности параболоида (1) в точке Р'=(х,у Г(х,у)):

Т ^ = Г 1,0, ] = (1,0, -х), '

т=*p:

y Эу

0,1,

df

Эу

= (0,1, -у).

т и т

Вычислив векторное произведение „

получим нормаль к поверхности параболоида (1) в точке Р':

N = [Тх XТу] =

С другой стороны, сумма единичного вектора V направления из начала системы координат в точку Р и вектора отражения ^ даст вектор N (рис. 1),

сонаправленный с нормалью N, но отличающийся от нее длиной:

N' = V + d0 = (Vx,Vy,V +1),

где V :

1

VPx2 + Py2 + P

(P ,P P).

V x' y, z'

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

Vx

V

NN = = ( ,

N' V +1 V +1

,1).

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

P'' = P'

P", = P',

P„

Vz + 1

Pz +/pX + Py + PZ

V

P

V+1

Pz +^x2 + Py2 + Pz2

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

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

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

Mlv =

1

00 00

—Ly

—Lz

1

где Lx, Ly, Lz - координаты источника света в системе WCS. Плоскость XY системы LVCS делит все

пространство, окружающее источник света, на два полупространства. Назовем их Z+ и Z- (рис. 1). Для каждого из полупространств необходимо построить свою параболическую теневую карту. Рассмотрим, как это можно сделать с помощью шейдеров, на примере полупространства Z+.

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

Plvcs=Mlv*Mm*Pocs ,

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

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

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

Если было установлено, что точка P принадлежит рассматриваемому полупространству, необходимо найти по формуле (4) ее образ P"=(P"x,P"y) на плоскости параболической карты. Также требуется вычислить длину отрезка OP, то есть расстояние

R= ^Px2 + Py2 + Pz2 от точки P до начала координат O

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

R' =

R — z„

Найденную для точки Р тройку значений (Р"х, Р"у, К') подадим на выход вершинного шейдера, а в фрагментном шейдере для каждого визуализируемого фрагмента рассчитаем значение КЕ по формуле (6) и установим его в качестве глубины. Как уже было сказано, все точки полупространства, лежащие на луче ОР (рис. 1), будут ассоциироваться с одной и той же точкой на параболоиде, а значит, с одним и тем же текселем в теневой карте. Поэтому с помощью стандартного теста глубины при визуализации карты в этот тексель будет записано наименьшее из всех существующих значений КЕ, то есть расстояние до точки, находящейся ближе всего к источнику освещения по направлению ОР.

+ zbias .

— z

Итак, рассмотрен случай генерации параболической теневой карты для полупространства 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 системы

ЬУС8 источника света, то есть длину отрезка ОР. Также необходимо определить, какую из двух текстур, входящих в состав двойной параболической карты, использовать для рассматриваемой точки.

Вычислим координаты (х,у^) точки Р в системе ЬУС8 источника света по формуле (5). Тогда

К=Л/х77у7+г7 .

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

Выбор одной из двух параболических карт (Ъ+ или Ъ-) осуществляется путем сравнения значения вычисленной выше координаты z точки РьуСв с нулем. Если z<0, то точка Р^с8 находится в полупространстве Ъ- и используется текстура Ъ-, и, наоборот, если z>0, то задействована текстура Ъ+. Отметим, что в отличие от случая генерации теневой карты здесь требуется разделение полупространств Ъ+ и Ъ- именно плоскостью ХУ, то есть без учета каких-либо погрешностей.

Особенность реализации теней от полусферических источников заключается в том, что при определении, какому из полупространств (Ъ+ или Ъ-) системы ЬУС8 принадлежит рассматриваемая точка Р, не делается выбор параболической карты, так как она является единственной для такого типа источников и строится либо для Ъ+, либо для Ъ-. Вместо этого необходимо выяснить, освещается ли вообще то полупространство, в котором находится точка, или нет. Если источник, например, светит в Ъ+, а точка расположена в Ъ-, не имеет смысла проводить дальнейшие расчеты.

Если было установлено, что точка РЬУСвеЪ-, требуется умножить ее координату z на коэффициент -1, чтобы производить дальнейший расчет аналогично случаю Рьу^е Ъ+. Далее по формуле (4) находим координаты (Р"х,Р"у) отображения точки Рьу№ Числа Р"х и Р"у фактически являются текстурными координатами для выбранной параболической теневой карты. Однако их значения лежат в отрезке [-1,1], поэтому надо преобразовать Р"х и Р"у к отрезку [0,1]: э=0.5*Р"х+0.5, 1=0.5*Р"у+0.5.

Для определения освещенности точки Р по паре координат ^,1) из теневой карты выбирается записанное в ней значение расстояния (глубины) Ктар до точки, ближайшей к источнику освещения по лучу ОР, и сравнивается со значением К'. При этом возможны два варианта:

• Ктар<К', что соответствует ситуации, когда точка Р закрыта от попадания в нее прямых лучей из источника участком поверхности какого-то объекта в сцене, то есть точка Р находится в тени;

• Ктар = К' (К' и Ктар приблизительно эквивалентны), то есть в теневой карте записана с некоторой погрешностью глубина самой точки Р, а следовательно, Р освещается источником.

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

описанная в [4] расширенная модель расчета освещенности:

I = kAIA + (1 - sh) • kDID max(0, L«N) +

+sh • sc + shade • kSIS max(0, H«N)S, sh=density*shade,

где кА, kD, kS - коэффициенты отражения материалом, соответственно, рассеянной, диффузной и зеркальной компонент освещения; IA, ID, IS - интенсив-

ности этих компонент, попадающие в точку P; N -нормаль к поверхности в P; L - единичный вектор из P на источник света; H=(L+V)/IIL+VII - нормализованный средний вектор между L и единичным направлением из P на наблюдателя, степень s (действительное число от 0 до 128) характеризует резкость бликов (чем выше s, тем блик меньше и резче); sc -цвет тени; density - коэффициент плотности тени (действительное число от 0 до 1); shade - параметр, определяющий наличие или отсутствие тени в точке расчета.

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

shade =

1 если Rmap < R',

0, если Rmap = R'.

На рисунке 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.

НЕКОТОРЫЕ РЕЗУЛЬТАТЫ ИМИТАЦИОННОГО МОДЕЛИРОВАНИЯ МУЛЬТИСЕРВИСНЫХ БОРТОВЫХ ЦИФРОВЫХ ПЛАТФОРМ

СТАНДАРТА DVB-RCS

А.А. Генов, д.т.н.

Практически все действующие в России в настоящее время космические аппараты (КА) созданы по принципу прямой ретрансляции с частным (FDMA) разделением каналов. Несмотря на простоту построения, такие КА имеют ряд существенных недостатков [5]: несанкционированный доступ к ресурсам КА, высокая стоимость центральных земных станций (ЗС) (HUB), невозможность организации прямой связи абонентских ЗС друг с другом.

Основными потребителями ресурса таких КА являются, как правило, крупные корпоративные пользователи, имеющие собственные дорогостоящие центральные ЗС и развитую сеть абонентских станций. Мелкие коммерческие структуры и частные пользователи могут получить доступ к ресурсу таких КА только как подписчики крупных корпоративных пользователей. Стандарт DVB-RCS в сетях спутни-

ковой связи с прямой ретрансляцией реализуется наземной программно-аппаратной платформой DVB-RCS в составе центральных ЗС (HUB) [8,9].

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

Мультисервисные бортовые цифровые платформы (МБЦП) позволяют реализовать стандарт DVB-RCS, разместив программно-аппаратную платформу DVB-RCS на борту КА. Ресурс КА с МЦБП становится доступным любому зарегистрированному в сети DVB-RCS пользователю [6,7], исключается пиратский доступ к КА, существенно повышается бюджет радиолиний, снижаются требования к энергетическим параметрам ЗС, обеспечивается возможность прямой связи абонентских ЗС друг с другом.