Программирование игр, создание игрового движка, OpenGL, DirectX, физика, форум
GameDev.ru / Программирование / Статьи / Объемы распространения света для непрямого освещения в режиме реального времени. (2 стр)

Объемы распространения света для непрямого освещения в режиме реального времени. (2 стр)

Автор:

3.2. Инжекция

В дополнении к ОРС начального распределения интенсивностей, мы также создаём вспомогательную сетку с приближенной вокселизацией всех поверхностей сцены. Эта сетка используется для расчёта затенения при решении светопереноса, позволяя таким образом учитывать оттенение. Для поддержки полностью динамических сцен такого рода информацию также необходимо создавать на лету. Для этого мы повторно используем растеризированная сцена из геометрического буфера (англ. G-Buffer) вида из камеры, подразумевая использование приложением алгоритма отложенного рендеринга (англ. deferred rendering). Помимо этого, используется растеризированная сцена из ОТК текущего кадра. Заметим, что мы обычно создаём ОТК для каждого первичного источника света, от которого необходимо рассчитать непрямое освещение. Таким образом, растеризация сцены производится с нескольких сторон, что даёт довольно точное и плотное представление геометрии. При необходимости, более детальная репрезентация может быть получена с помощью нескольких проходов отслаивания глубины как для вида из источника света, так и для вида из камеры. В качестве альтернативы, также возможно использование точечной репрезентации поверхностей сцены, в духе [Ritschel et al. 2008]. Однако это влечёт дополнительный расход памяти и немалых вычислений для обновления столь сложной структуры.

Нечёткое оттенение

Каждый тексел (как ОТК, так и геометрического буфера) рассматривается как небольшой элемент поверхности с заданными позицией, ориентацией и размером. Мы моделируем затенение по аналогии с кластеризацией объектов [Sillion 1995]. Мы предполагаем, что накопленный потенциал затенения от элементов поверхностей в одной ячейке сетки представляет усреднённую вероятность затенения света через эту ячейку. Таким образом, алгоритм производит мягкие тени от непрямого освещения, но их чёткость (разрешение деталей объектов) размыта до размеров ячейки сетки.

Количество затенения от одного элемента поверхности зависит от размеров этого элемента и от косинуса угла между его нормалью и интересующим направлением распространения света. Вероятность затенения от одного элемента поверхности с площадью [cht]A_s[/cht] и нормалью [cht]\mathbf{n}_s[/cht] внутри ячейки размером [cht]s[/cht] определяется выражением [cht]B(\omega)=A_s s^{-2}\langle \mathbf{n}_s|\omega\rangle_+[/cht]. Здесь мы полагаем, что объекты сцены являются замкнутыми поверхностями. Таким образом, косинусное распределение рассматривается только на видимой полусфере. Также полусферическое косинусное распределение не вырождается в константную функцию (в отличие от косинусного распределения по полной сфере) при приближении низкочастотными СФ.

Инжекция геометрии

По аналогии с инжекцией ВИС, мы суммируем коэффициенты СФ распределений затенения от каждого элемента поверхности в геометрическую сетку (ГС). Такой процесс правомерен, если лишь одна выпуклая поверхность проходит через ячейку сетки, так как в противном случае взаимное затенение нескольких поверхностей внутри одной и той же ячейки невозможно представить как распределение в ячейке (на практике, такие локальные затенения рассчитываются с помощью метода затенения фонового освещения в пространстве изображения, описанного подробнее в секции 7). ГС является сеткой такого же разрешения, как и сетка ОРС, однако сдвинута по отношению к ОРС таким образом, что центры ячеек ГС находятся в углах ячеек ОРС. Этим достигается улучшение интерполяции затенения в процессе распространения света, т.к. распространение идёт через центры граней ячеек ОРС.

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

3.3. Схема распространения

Неотъемлемой частью сеточных методов освещения, таких как МДО, является итеративный процесс распространения света через сетку, рассчитываемый с помощью последовательных локальных операторов распространения. В этом отношении, предлагаемый метод также не является исключением, однако предложенная схема распространения света отличается от имеющихся и изложена в этой секции.

Распространение интенсивности

Входными данными для первой итерации распространения является ОРС, полученный на этапе инжекции. Входными данными для каждой последующей итерации является ОРС, полученный на предыдущей. В каждой ячейке хранится вектор коэффициентов СФ. Свет распространяется из ячейки в 6 соседних ячеек, расположенных вдоль осей координат, как показано на рисунке (в двумерном случае показано только 4 осевых направления).

Ячейка ОРС содержит распределение интенсивности по направлениям | Объемы распространения света для непрямого освещения в режиме реального времени.
Рис.1. Каждая ячейка ОРС содержит распределение интенсивности по направлениям, которое используется для распространения света из исходной ячейки в 6 (4 в [cht]2D[/cht]) соседних ячеек.

Далее будет описана схема распространения света от одной исходной ячейки к одной соседней ячейке. Распространение в остальные ячейки является аналогичным процессом. Обозначим приближение распределения интенсивности в СФ в исходной ячейке как [cht]I(\omega)\approx\sum_{l,m} c_{l,m} y_{l,m}(\omega)[/cht]. Мы рассчитываем падающий поток света на каждую грань соседней конечной ячейки. Для этих целей мы вводим функцию видимости [cht]V(\omega)[/cht] грани [cht]f[/cht] из центра исходной ячейки. [cht]V(\omega)=1[/cht], если луч из центра исходной ячейки в направлении [cht]\omega[/cht] доходит до грани [cht]f[/cht] беспрепятственно, в противном случае [cht]V(\omega)=0[/cht]. На рисунке показан расчёт [cht]V(\omega)[/cht] для верхней грани конечной ячейки.

Расчёт светового потока, падающего на видимые грани конечной ячейки | Объемы распространения света для непрямого освещения в режиме реального времени.
Рис.2. Расчёт светового потока, падающего на видимые грани конечной ячейки, для более точной передачи света по направлениям в процессе распространения.

Суммарный световой поток, падающий на грань, может быть рассчитан с помощью интегрирования [cht]V(\omega)[/cht] по телесному углу направлений [cht]\Phi_f=\int_{\Omega}I(\omega)V(\omega)d\omega[/cht]. Функции видимости граней могут быть предварительно спроецированы на базис СФ, в вектор коэффициентов СФ [cht]v_{l,m}[/cht], где [cht]V(\omega)\approx\sum_{l,m} v_{l,m} y_{l,m}(\omega)[/cht]. Свёртка распределения интенсивности с функцией видимости легко рассчитывается с помощью скалярного произведения соответствующих коэффициентов СФ [cht]c_{l,m}[/cht] и [cht]v_{l,m}[/cht]. Так называемый «вектор переноса» [cht]v_{l,m}[/cht] можно предрассчитать один раз и использовать уже готовые значения в схеме распространения. Однако сложность заключается в том, что значение интеграла, приближенное СФ, может вести к значительным ошибкам, поэтому мы предлагаем другой подход в этом случае. Вместо вектора переноса мы рассчитываем видимый телесный угол [cht]\Delta\omega_f=\int_\Omega V(\omega)d\omega[/cht] для каждой грани конечной ячейки из центра исходной ячейки, а также центральное направление [cht]\omega_c[/cht] полученного телесного угла. Таким образом, падающий на грань световой поток рассчитывается как [cht]\Delta\omega_f/(4\pi)\cdot I(\omega_c)[/cht]. Фактически, это означает, что мы принимаем усреднённую интенсивность в направлении [cht]\omega_c[/cht] за интенсивность по видимому телесному углу.

Проецирование

Результатом вышеописанного распространения является световой поток, падающий на каждую грань конечной ячейки. На этапе проецирования этот световой поток конвертируется в распределение интенсивности и накапливается в центре конечной ячейки. Для этого мы вводим новый ВИС в центре конечной ячейки, направленный на рассматриваемую грань и рассчитываем интенсивность этого источника таким образом, чтобы световой поток, проходящий через эту грань от введённого ВИС в точности соответствовал световому потоку этой грани, полученному на этапе распространения. Таким образом, световой поток [cht]\Phi_f[/cht] через грань равен полному световому потоку введённого ВИС: [cht]\Phi_f=\int_\Omega \Phi_l\langle\mathbf{n}_l,\omega\rangle_+d\omega[/cht], следовательно [cht]\Phi_l=\Phi_f/\pi[/cht]. По аналогии с этапом инжекции, мы масштабируем полученные коэффициенты СФ в соответствии со световым потоком ВИС [cht]\Phi_l[/cht]. После чего, полученные коэффициенты нового ВИС накапливаются в центре конечной ячейки для последующих итераций распространения.

Распространение производится из каждой исходной ячейки на каждую грань каждой соседней ячейки (на рис.1—3 выделено оранжевым). Предложенный процесс распространения соблюдает закон сохранения энергии, что является очевидным требованием для распространения света в вакууме. Однако множество последовательных итераций распространения и проецирования ведёт к размыванию пространственного и углового распределения света. Следует отметить, что эта проблема является типичной для всех сеточных методов. Ввиду этого мы сравниваем предложенную схему распространения с ожидаемым результатом, а так же с существующими МДО в секции 5.

Затенение

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

Учёт нечёткого затенения с помощью вспомогательной сетки | Объемы распространения света для непрямого освещения в режиме реального времени.
Рис.3. Учёт нечёткого затенения с помощью вспомогательной сетки с объёмным представлением геометрии сцены.

Итеративное распространение

После каждой итерации распространения, её результат накапливается в отдельную трёхмерную сетку: конечное распределение света в сцене является суперпозицией "следа" распространения от каждой итерации. Количество требуемых итераций зависит от разрешения сетки. Основываясь на [Geist et al. 2004], мы используем количество ячеек в наибольшем протяжении сетки для определения количества итераций. Разумеется, такое количество не удовлетворяет жёстким временным рамкам приложений реального времени, даже для сеток среднего размера. Для уменьшения количества итераций и разрешения одной сетки, мы вводим многомасштабную иерархию вложенных ОРС в секции 4, которая предоставляет такие же результаты, но за гораздо меньшее время.

Также предлагаемая итеративная схема ведёт к сильному размыванию распределения света. Однако, так как она применяется только для рассеянного непрямого освещения, результаты являются приемлемыми, даже с учётом небольшого количества СФ, используемых для приближения. Более подробное обсуждение предоставлено в секциях 5 и 7.

3.4. Освещение с ОРС

Результат, накопленный после всех итераций, является результирующим равновесным распределением света в сцене (в смысле термодинамического равновесия). Для освещения поверхностей сцены с помощью ОРС, производится выборка коэффициентов СФ из соответствующей точки в сетке с применением трилинейной (трёхмерной) интерполяции. Используя полученное распределение интенсивности, вычисляется интенсивность в направлении на поверхность (направление, противоположное нормали поверхности), по аналогии с объёмами освещённости (англ. irradiance volumes) [Greger et al. 1998, Oat 2006]. Однако хранимую интенсивность необходимо конвертировать во входящее излучение. Также, заметим, что расстояние между центром ячейки (откуда выбирается распределение интенсивности) и освещаемой точкой на поверхности не превосходит половины размера ячейки [cht]s[/cht].

Самоосвещение и диффузия (возникающие при использовании сеток низкого разрешения и приближения низкочастотными СФ) могут стать причиной видимых дефектов изображения. Для минимизации таких дефектов, мы вводим подавляющий фактор, основанный на производной интенсивности по направлению. Для точки поверхности [cht]\mathbf{x}[/cht] и нормали [cht]\mathbf{n}[/cht] мы определяем (трилинейно интерполированные) коэффициенты СФ [cht]c_{l,m}[/cht] и производную по направлению нормали поверхности [cht]\nabla_\mathbf{n} c_{l,m}[/cht] (рассчитываемую разностной схемой). Если такая производная не нулевая и скалярное произведение коэффициентов [cht]c_{l,m}[/cht] и [cht]\nabla_\mathbf{n} c_{l,m}[/cht] имеет отрицательный знак (то есть градиент распределения интенсивности противонаправлен главному направлению самой интенсивности), мы подавляем (уменьшаем) коэффициенты [cht]c_{l,m}[/cht] для расчёта освещённости. Другими словами, мы подавляем случаи, когда интенсивность неестественно затухает противонаправленно самому световому потоку. На рисунке изображены описанные конфигурации интенсивности и её производной.

Распределения интенсивности | Объемы распространения света для непрямого освещения в режиме реального времени.
Рис.4. Изображённые распределения интенсивности, как правило, являются результатом затенения между ячейками (пунктирная лилия). Мы определяем такого рода скачок интенсивности с помощью расчёта производной по направлению нормали [cht]\mathbf{n}[/cht].

4. Иерархия объемов распространения света

Освещение большой сцены требует ОРС с очень большим разрешением сетки. Вместо этого, мы используем набор вложенных сеток, которые двигаются вместе с наблюдателем, подобно методу геометрических карт отсечения (англ. Geometry Clipmaps) [Losasso and Hoppe 2004], но в трёхмерном пространстве.

Иерархия вложенных сеток ОРС и ГС | Объемы распространения света для непрямого освещения в режиме реального времени.
Рис.5. Мы используем иерархию вложенных сеток ОРС и ГС для освещения больших сцен с детальным разрешением ближе к камере и низким разрешением вдали от камеры.

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

4.1. Распространение во вложенных сетках

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

Распространение света рассчитывается для всех сеток независимо друг от друга. Заметим, что те ВИС, которые инжектируются в более детальные сетки, также инжектируются и в более разреженные (изображено в виде зелёных ячеек на рис. 5). Это обеспечивает распространение непрямого освещения от ближних объектов на расстояния, большие, чем ближняя сетка, в которой они находятся. На этапе освещения с помощью полученных ОРС для данной точки в сцене мы выбираем наиболее детальную сетку, которая всё ещё покрывает эту точку. На границе двух сеток мы создаём плавный переход к сетке следующего уровня детализации с помощью линейной интерполяции между двумя сетками (по аналогии с [Losasso and Hoppe 2004]). Заметим, что непрямое освещение от ВИС, инжектированных в более разреженную сетку (но не в более детальную), пропадает при таком переходе. Однако мы не сталкивались с заметными дефектами, вызванными таким эффектом.

4.2. Стабильность решения для динамических сцен

Для интерактивных приложений очень важно обеспечить стабильность решения при динамических изменениях в сцене, освещении и позиции наблюдателя. Главной причиной потенциально нестабильного решения является пространственная дискретизация сеток ОРС. Для предотвращения различного рода мерцаний, связанных с изменением дискретизации, мы производим дискретное движение сеток с шагом, в точности равным размеру ячейки. С помощью такого дискретного перемещения, ячейки всегда остаются на фиксированных местах в мировом пространстве, что обеспечивает стабильное распределение и инжекцию ВИС и геометрии, даже при движении сеток.

Второй причиной нестабильностей является растеризация в ОТК (для формирования набора ВИС непрямого освещения). Так как мы можем позволить избыточную выборку с больши́м количеством ВИС (несколько сотен тысяч, благодаря быстрой инжекции на ГП), мы обеспечиваем очень плотное покрытие ячеек сетки с помощью ВИС из ОТК. В отличие от других методов, таких как метод быстрой излучательности, такая избыточность позволят получать стабильные результаты даже для движущихся и сложных, детальных объектов, таких как растительность, без мерцаний.

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

Страницы: 1 2 3 4 Следующая »

6 января 2014

#global illumination, #глобальное освещение


Обновление: 8 января 2014

2001—2018 © GameDev.ru — Разработка игр