С самого зарождения трехмерной компьютерной графики одной из основных целей было создание фотореалистичных изображений. Однако долгое время компьютеры не были достаточно мощными для этого, а существующие алгоритмы были слишком медленными. Задачи трехмерной компьютерной графики, которые решались в это время, включали в себя алгоритмы удаления невидимых граней и простейшей закраски.
Первым шагом на пути к фотореалистичной графике можно считать изобретение (и реализацию) Уиттедом (Whitted) в 1980 году алгоритма трассировки лучей. Он еще не позволял создавать полностью фотореалистичные изображения. Но это был первый алгоритм, который правильно рассчитывал отражения. Кроме того, он правильно считал первичное освещение (то есть, освещение светом, выпущенным непосредственно из источников) и тени. Этот основан на законах геометрической оптики: законе прямолинейного распространения света, принципе обратимости (именно этот принцип позволяет моделировать распространение света не в прямом направлении - от источника света, а в обратном - из глаза наблюдателя), законе отражения и законе преломления.
После этого началась эпоха развития алгоритмов расчета глобального освещения. В 1984 году был предложен алгоритм излучательности, который давал правильное диффузное освещение любого порядка (то есть, с любым количеством отражений). Это был метод конечных элементов, то есть метод, основанный на разбиении сцены на треугольники, расчете коэффициентов переноса для каждой пары треугольников и распространении энергии по сцене от источников света в соответствии с этими коэффициентами переноса. Этому методу присущ тот недостаток, что он не мог рассчитывать отражения. Кроме того, неадаптивное разбиение сцены на треугольники не позволяет приспосабливаться к локальным особенностям освещения.
Далее в синтезе фотореалистичных изображений применялись методы Монте-Карло. Они представляют собой расширение метода трассировки лучей. Если в трассировке лучей цвет пикселя определяется только при помощи значений цвета поверхности и прямого освещения, а цвет пикселя, соответствующей зеркальной поверхности - при помощи отраженного луча, то в трассировке лучей Монте-Карло выпускаются дополнительные лучи для вторичного освещения. При этом из точки пересечения первичного луча со сценой могут выпускаться не только лучи, но и пути (последовательности лучей, в которых точка пересечения предыдущего луча со сценой - начало следующего луча). Решение о том, продолжать ли путь или его оборвать, принимается при помощи случайного испытания (русская рулетка) или на основании возможного вклада луча в освещение видимой точки). При этом Методы Монте-Карло позволяют учесть вторичную освещенность. Кроме того, они позволяют использовать площадные источники света, производить устранение ступенчатости и т. д.
Методы Монте-Карло могут выпускать лучи как из глаза наблюдателя, так и из источника света. В первом случае говорят об обратной трассировке лучей. Во втором случае говорят о трассировке фотонов (или прямой трассировке лучей). Однако имеются разногласия, какую трассировку лучей называть прямой, а какую - обратной. Иногда эти термины употребляют в значениях, противоположных вышеприведенным.
Увеличение мощности компьютеров привело к возникновению проблемы синтеза фотореалистичных изображений в реальном времени и интерактивного синтеза фотореалистичных изображений. В обоих случаях предполагается, что сцена изменяется (она, вообще говоря, не статична) и что сцена изменяется интерактивно, то есть, что траектории движения объектов не просчитаны заранее, а определяются действиями пользователя в процессе взаимодействия с системой. Если говорят о реальном времени, то требуется генерация изображений с частотой кадров не менее 10 кадров в секунду. Для современных компьютеров (кроме самых мощных многопроцессорных машин с разделяемой памятью) даже при очень мягких условиях это недостижимо. В случае же интерактивного синтеза такого жесткого ограничения на частоту кадров нет - интерактивным считается и два кадра в секунду, и один кадр в две секунды. Однако обязательное условие интерактивности - возможность интерактивного изменения сцены и относительно быстрое отображение результатов (хотя бы приближенных).
Интерактивный синтез фотореалистичных изображений можно осуществлять при помощи разных алгоритмов. Можно использовать излучательность. Однако ее использование связано с большими затратами, поэтому на практике излучательность в подобных системах используется редко. Обычно используется алгоритм, который основан на трассировке лучей Монте-Карло. При этом трассировка лучей может применяться и как алгоритм вычисления глобального освещения (вычисление приближенных значений освещенности), и как алгоритм собственно построения изображения. Однако применение трассировки лучей для построения собственно изображения не является обязательным. Можно значения освещенности считать при помощи трассировки, а окончательную картинку строить при помощи растеризации. Можно попытаться все этапы алгоритма выполнить на графическом ускорителе. Можно создать гибридный алгоритм, который часть расчетов будет выполнять при помощи трассировки, а часть - при помощи растеризации на графическом ускорителе. Например, в работе [1] для расчета вторичного освещения применялась трассировка фотонов, а для расчета первичного освещения от точечных источников использовался метод теневых объемов на графическом ускорителе. В работе [2] в вершинах треугольников значения освещенности рассчитывались при помощи трассировки лучей Монте-Карло, а изображение строилось на графическом ускорителе, при этом освещенность интерполировалась внутри треугольника. А в работе [3] трассировка фотонов (вместе с построением изображения) полностью реализована на графическом ускорителе. Поскольку мощность графических процессоров растет довольно быстро, привлекательны алгоритмы, которые переносят часть вычислений на графический процессор. Однако обсуждение использования графического процессора не является темой настоящей статьи.
Теперь сделаем некоторые замечания. Фотореалистичным изображением будем считать то изображение, которое похоже на фотографию (которое трудно отличить от фотографии). При этом требуемая степень похожести зависит от задачи: для интерактивного синтеза изображений допустима меньшая степень похожести (точность можно пожертвовать ради скорости), чем для статического. Термины <физически аккуратное изображение>, <изображение с глобальным освещением> будем считать синонимами термину <фотореалистичное изображение>. В этом смысле физическая аккуратность означает следование физическим законам распространения света при генерации изображения. А глобальное освещение - противоположность локальному освещению. Если при локальном освещении учитывается только положение видимой точки, ее цвет и положение источников света в пространстве, а положение других объектов не учитывается, то при глобальном освещении учитывается и геометрия сцены, и вторичное освещение (освещение светом, отраженным от поверхностей сцены).
В задаче будет предполагаться, что задана геометрия сцены в виде ее граничного представления (например, в виде набора треугольников, возможно, с дополнительной структурой). Предполагается, что в среде не будет объемных объектов (тумана, дыма и т.п.). Предполагается также, что при синтезе изображений не учитываются волновые эффекты (то есть, интерференция, дифракция, дисперсия); не будет радуг в мыльных пузырях и т.п. Цвет задается в виде красной, синей и зеленой компонент. Оптические свойства поверхностей задаются при помощи ДФОС (используются разные способы ее задания). Понятие ДФОС и его расшифровка будут даны ниже в данной статье. За более подробным объяснением обращайтесь сюда: http://cgm.graphicon.ru/issue3/brdf_intro/index.html. Кроме того, заданы параметры источников света. Матрицы положения объектов сцены изменяются интерактивно в процессе взаимодействия пользователя со сценой. Задачей является интерактивная генерация изображения с глобальным освещением.
Требуется интерактивно генерировать физически аккуратные изображения при заданных ограничениях на входные данные. Раз изображения должны быть физически аккуратными, то их надо генерировать в соответствии с физическими законами распространения света. Сначала необходимо ввести основные физические величины, используемые в оптике. Потом - записать уравнение распространения света.
Энергией излучения называется энергия, переносимая световым потоком. Обозначение: E, W. Единицы измерения - Дж (джоуль).
Мощностью излучения называется энергия, генерируемая (излучаемая, проходящая через определенное сечение, поглощаемая) в единицу времени. Обозначение: P. Единицы измерения - Вт (ватт). Также называется потоком.
![]()
Интенсивностью излучения называется энергия, которая переносится световой волной через единицу площади, перпендикулярную направлению распространения света, за единицу времени. Обозначение: I. Единицы измерения: Вт/м2.
![]()
Где
энергия, переносимая светом за время
через площадку
, расположенную ортогонально к направлению распространения
света.
Аналогично может быть определена интенсивность излучения, интенсивность поглощения и т.д.
Силой света называется мощность, излучаемая точечным источником света (источником света, размерами которого в условиях данной задачи можно пренебречь) в единичный телесный угол. Обозначение: J. Единицы измерения: Вт/ср (ватт на стерадиан).
![]()
Где
- малый телесный угол,
- поток, излучаемый в этот телесный угол
Сила света обычно определяется для определенного направления.
Яркостью (освещенностью) называется сила света, излучаемая с (соответственно, поглощаемая) единичной площадкой, расположенной ортогонально направлению распространения света. Обозначение: L. Единица измерения - Вт/(м2 ּср).
![]()
![]()
Где
- угол между направлением луча и нормалью к поверхности
- малая площадка, расположенная ортогонально направлению
распространения света
- сила света, которую дает площадка ![]()
- малый телесный угол (обычно - в заданном направлении)
- малая площадка - элемент поверхности (не обязательно
расположена ортогонально направлению распространения света)
Яркость (освещенность) определяется для данной точки и для данного направления, поэтому обычно пишут:
, где
- точка, в которой определяется значение освещенности
- направление, в котором определяется значение освещенности.
ДФОС(Двунаправленная функция отражающей способности) показывает зависимость между освещенностью в данной точке в данном направлении падения луча и яркостью в данной точке в данном направлении отражения луча. Она определяется так, чтобы в отсутствие собственного излучения поверхности выполнялось соотношение:
![]()
![]()
Где
- направление падения
- угол между направлением падения и нормалью к поверхности
- ДФОС
- освещенность точки в направлении падения
- вклад, даваемый освещенностью в данном направлении падения
в данной точке в яркость в данном направлении излучения в данной точке.
ДФОС обозначается fr(x, ω. ω'). Она представляет собой коэффициент, с которым освещенность по одному направлению дает вклад в яркость по другому направлению для одной и той же точки. Она может зависеть от длины волны, от времени, от физических свойств поверхности, от поляризации и т. д. В силу сделанных выше ограничений на входные данные задачи считается, что ДФОС может зависеть от цветового канала и от времени. Все уравнения, записываемые в дальнейшем, записываются для одного момента времени и для одного цветового канала. Чтобы не перегружать запись, момент времени и цветовой канал опускаются.
Однако заметим, что в большинстве алгоритмов выпускается один луч на все цветовые каналы, а не по лучу на каждый канал.
Пользуясь введенными выше величинами, можно записать уравнение переноса световой энергии (уравнение распространения света)
![]()
Где
- полусфера направлений
- яркость собственного излучения поверхности
Поскольку предполагается, что пространство между поверхностями сцены заполнено вакуумом и не поглощает и не рассеивает свет, то освещенность в данном направлении в данной точке есть исходящая яркость в точке, которая видна в данном направлении падения из данной точки. Учитывая это, можно записать:
![]()
Где функция
дает первую точку, которая видна из точки
в направлении
. Такая функция может быть, например, реализована при помощи
трассировки лучей.
Или, если интегрировать не по
полусфере направлений, а по поверхности всей сцены (где
- поверхность всей сцены):
![]()
Где
- функция видимости. Она равна единице, если из одной точки
можно увидеть другую, и 0 в противном случае.
Кроме того, можно переписать уравнение так, чтобы в интеграле стоял не элемент телесного угла, а элемент площади сцены. В этом случае уравнение примет вид:

где
- угол между нормалью к поверхности в точке
и исходящим направлением в этой же точке
- элемент площади поверхности сцены в точке ![]()
Часто при записи уравнения распространения света используют операторную запись. Интеграл в правой части формул (любой из них) обозначают как
![]()
Полученный при этом оператор T называют оператором переноса световой энергии (или просто оператором переноса). Уравнение распространения света тогда можно записать в виде (x и ω опущены)
![]()
Это и есть уравнение распространения света в операторной форме. Аналитически оно обычно не решается (хотя для простейших случаев это можно сделать). Это понятно, так как определенные в уравнении (в ядре интегрирования) функции обычно не заданы аналитически. Например, функция видимости или функция нахождения первой точки на пути луча из данной точки в данном направлении определяются геометрией сцены. А она обычно задана кусучно-линейно (полигонально) или еще каким-либо образом, и очень редко - аналитически. Поэтому для решения задачи синтеза изображений применяются численные методы.
Обратим теперь внимание на оператор переноса. Его норма меньше единицы (поскольку световая энергия поглощается поверхностью сцены). Поэтому можно применить следующий итерационный процесс для нахождения приближения к решению данного уравнения:

Данный процесс можно записать в виде ряда (который сойдется, так как норма оператора переноса меньше 1, а значит, член ряда будет убывать быстрее члена геометрической прогрессии со знаменателем, меньшим 1):

Поясним смысл выделенных слагаемых.
Слагаемое
отвечает за свет, излучаемый той поверхностью, которую мы
видим. Слагаемое
отвечает за первичное
освещение, то есть освещение светом, который был выпущен непосредственно из
источников (и отразился только от этой поверхности, прежде чем попасть в глаз
наблюдателя). Оставшаяся бесконечная сумма отвечает за вторичное освещение
(освещение светом, отразившимся от других поверхностей). При этом k - порядок вторичного
освещения (свет отразился от какой-то поверхности k раз, прежде чем попасть в
глаз наблюдателя). Мы считаем, что вычисление первичного освещения - задача
довольно простая (это так в случае только точечных источников; если есть
площадные источники, то она становится несколько сложнее). Вычислять же
вторичное освещение намного сложнее. Это и понятно: ведь в первичное освещение
вклад дают только определенные точки сцены (в случае точечных источников
света), либо ограниченный набор поверхностей сцены (в случае площадных
источников света). Во вторичное же освещение вклад дают все поверхности сцены,
и область интегрирования становится значительно больше.
Как было ясно из вышеприведенных уравнений, синтез изображений связан с вычислением большого количества интегралов. Аналитически их вычислить невозможно, так как подынтегральные функции не заданы аналитически. Следовательно, требуется применять методы численного интегрирования.
Однако применение квадратурных формул не является эффективным. Скорость сходимости у них зависит от размерности пространства, и быстро падает с увеличением размерности области интегрирования. А размерности интегралов в компьютерной графике довольно высоки (для первичного освещения - 2, для вторичного освещения светом, однократно отразившимся от поверхности сцены - 4 и т.д.). Поэтому требуются другие методы. Такими методами являются методы Монте-Карло и квази-Монте-Карло.
Поясним, как внешне выглядит работа методов Монте-Карло. Из видимой поверхности выпускаются лучи. При их трассировке образуются пути, по которым может распространяться свет. В каждой точке пересечения пути с поверхностью происходит расчет первичного освещения. Потом это значение используется для вычисления вклада во вторичное освещение точки, из которой был выпущен путь. Далее решается, продолжать путь или нет. Для этого может использоваться просто случайная величина, или же можно прекращать путь, когда вклад во вторичное освещение основания пути становится очень малым.
Теперь немного опишем математику метода Монте-Карло. Требуется вычислить интеграл. Для его вычисления он представляется как математическое ожидание некоторой случайной величины. Рассмотрим пример. Пусть мы считаем интеграл по единичному n-мерному кубу от функции f(x). Тогда интеграл, который мы считаем, есть
![]()
Пусть имеется случайная величина
, равномерно распределенная по области интегрирования. Тогда
![]()
Если мы возьмем случайную величину с плотностью 1, то получим

Для первичного освещения (в случае,
если есть не только точечные, но и площадные источники света) в случае
равномерного распределения вектора
имеем:

Такую же формулу можно записать и для вторичного освещения при k=2 (в предположении, что первичное освещение мы можем посчитать явно):
![]()
Однако обычно плотность вероятности
выбирают так, что
в ней учитывается. Именно, рассмотрим двумерный случайный
вектор
, равномерно распределенный внутри единичного квадрата
. Тогда, если задать случайное направление формулой
,
то случайное направление будет распределено по сфере с плотностью вероятности
![]()
и соответствующие формулы численного интегрирования запишутся так:

И так далее. Можно выписать формулы для трассировки Монте-Карло с использованием путей. Можно выбирать направление не как значение равномерно распределенной случайной величины, а как значение случайной величины, плотность распределения которой пропорциональна ДФОС. Можно применять алгоритмы выбора случайных направлений, которые подстраиваются под условия освещения. Обо всем этом можно прочитать в соответствующих статьях.
При использовании методов квази-Монте-Карло формулы не меняются. Просто случайный выбор направления заменяется на квазислучайный. Используется одна из квазислучайных (детерминистических) последовательностей. Это позволяет увеличить скорость сходимости.
Методам Монте-Карло и квази-Монте-Карло присущ тот недостаток, что они являются слишком медленными. Например, для того, чтобы получить более-менее нормальное значение первичного освещения для точечных источников, требуется приблизительно N=400. Для расчета вторичного освещения требуется N=1600. И это - на один-единственный пиксель! Естественно, при таких параметрах речи об интерактивности быть не может.
Если в методе Монте-Карло использовать небольшую выборку (например, на расчет вторичного освещения потратить только 30 лучей), то возникнет шум, вызванный случайной природой метода.
Для интерактивного синтеза изображений требования на качество (по сравнению со статичными изображениями) можно уменьшить. То есть, лучей для вычисления первичного освещения от площадных источников и вторичного освещения будет выпускаться меньше. Но все равно их будет много. Плохо то, что для каждого пикселя вторичное освещение считается отдельно. То есть, выпускаются лучи, получаем определенные точки. В них мы считаем первичное освещение, после чего используем его для расчета вторичного освещения для данного пикселя. И все. Вычисленные значения первичного освещения забываются. Они заново не используются. Естественно, возникает желание использовать их заново. Ведь вычислив таким образом первичное освещение (или, может быть, вторичное) в некоторых точках, можно вычислять вторичное освещение для всех видимых пикселей, используя эти значения. Естественно, это приведет к тому, что приближение станет хуже (особенно если учесть, что таких точек, в которых мы можем вычислить значение освещенности, очень мало). Однако мы получим достаточно быстрый способ посчитать вторичное освещение (пусть даже приблизительно) и, главное - в картинке не будет шума, который возникал в методах Монте-Карло.
Приведенная идея использовалась для создания метода быстрой излучательности.
Идея быстрой излучательности состоит в аппроксимации вторичного освещения (и первичного освещения от площадных источников света) при помощи первичного освещения от виртуальных точечных источников света. Более точно, если имеется N точечных источника света (и виртуальных, и настоящих), то
![]()
Где
- яркость точечного
источника света n в направлении точки, в которой вычисляется яркость,
- функция видимости: виден ли из данной точки источник света
с номером n (1)
или нет (0). Вычисление этой формулы можно производить как при помощи
трассировки лучей, так и при помощи использования видеокарты. Основная проблема
состоит в том, как сгенерировать N точечных источников света.
Идея быстрой излучательности принадлежит Келлеру, который впервые описал ее в своей статье в 1997 году [5] Там же он предложил и алгоритм генерации виртуальных точечных источников света. Он рассматривал случай чисто диффузной сцены (то есть сцены, все поверхности которой являются чисто диффузными). Диффузными поверхностями называются такие поверхности которые равномерно рассеивают падающий свет во все направления.
Он заметил, что в практических
сценах отражающая способность поверхностей
мало меняется по сцене. Кроме того, норму оператора переноса
можно хорошо аппроксимировать средней отражающей способностью
.
Был
предложен следующий алгоритм генерации виртуальных точечных источников света.
Изначально выбирается M частиц (точек на источниках света). Каждой частице приписывается определенная
энергия. Они становятся виртуальными точечными источниками. Далее
частиц <стартуют> с источников. В точках их пересечения со
сценой и образуются виртуальные точечные источники. Потом
частиц отправляются дальше и т.д. Всего будет создано не
более
точечных источников.
Зная необходимое количество точечных источников и среднюю отражающую
способность сцены, можно определить M при помощи данной формулы.
Заметим, что для физической корректности совсем не обязательно, чтобы
было средней отражающей способностью сцены. Достаточно, чтобы
оно лежало в интервале [0, 1) (если последнее не будет выполнено, то частицы
будут не поглощаться, а размножаться, и метод никогда не закончит работу).
Какими
теперь выбрать параметры источников света (имеется в виду яркость источников)?
Для этого воспользуемся несколько переписанным уравнением распространения света
и распишем
(начнем, как обычно, с более простого случая первичного
освещения):


:

- площадь всех поверхностных источников света в сцене.
Выпишем теперь соответствующие этим
интегралам формулы численного интегрирования с использованием метода
квази-Монте-Карло, используемые в алгоритме быстрой излучательности. Отдельно
выпишем формулу для первичного освещения. Заметим, что квазислучайные векторы
получаются по следующей формуле:
![]()
![]()
где x и y - квазислучайные числа в интервале [0, 1). Если x и y - равномерно
распределенные случайные числа на [0, 1), то плотность распределения
на сфере направлений равна
![]()
Таким образом, для первичного освещения можно записать:

Для вторичного же освещения все запишется следующим образом:

На основании этих формул легко
может быть вычислена яркость виртуальных точечных источников. Действительно,
если считать, что функция видимости, ДФОС видимой точки, косинус угла падения
для видимой точки (а также косинус угла отражения точки
, где расположен виртуальный точечный источник) и расстояние
до виртуального источника света вычисляются для каждой точки отдельно в
процессе трассировки лучей или на графическом процессоре, то для первичного
освещения яркость виртуального точечного источника запишется следующим образом:
![]()
![]()
Алгоритм, предложенный Келлером,
рассчитан прежде всего на реализацию на графическом процессоре. Для
суммирования значений освещенности использовался буфер-аккумулятор [6]. Вычисления производились следующим
образом. Сначала рассматривались только те частицы, которые остаются на
источнике света и никуда не стартуют. Считалась освещенность от них (с
коэффициентом 1/N изображения суммировались в буфере-аккумуляторе; использовался
один из алгоритмов расчета теней на графическом ускорителе, например, теневые
карты). Частицам присваивалась энергия, равная
Затем рассматривались
частицы, которые пролетят только один сегмент пути. Сначала от них считалась
первичная освещенность (так же, как и для частиц, которые не стартуют). Потом
они стартовали с источников и оседали на сцене. Значения энергии частицы
умножалось на коэффициент переноса
. Опять они использовались для освещения сцены. Поскольку
изображения в буфере-аккумуляторе накапливались с коэффициентом 1/N, а частиц, пролетевших
первый сегмент,
, то для компенсации
энергия частицы (которая превращается в освещенность источника) умножалась на
. После этого рассчитывались траектории, виртуальные точечные
источники света и освещение сцены для частиц, пролетающих путь из двух
сегментов и т.д.
В статье была рассмотрена постановка задач и некоторые подходы к решению проблемы интерактивной визуализации глобального освещения в реальном времени. Использование методов квази-Монте-Карло позволяет оптимизировать вычисление интеграла освещенности и добиться значительного ускорения расчета освещенности. Однако при данном развитии пока невозможно добиться интерактивности на широком классе сцен. Представителем другого перспективного направления является семейство методов быстрой излучательности. Эти методы нацелены на использование мощностей современных аппаратных ускорителей трехмерной графики.
Однако наука не стоит на месте и можно надеяться на появление новых методов, еще более приближающих нас к заветному рубежу - корректному расчету глобального освещения в реальном времени.

Рис. 2. Конференц-зал изображение конференц-зала, рассчитанное при помощи быстрой излучательности. Использовалось 128 частиц (количество источников света примерно в два раза больше).


Рис. 3. Пример сцены, рассчитанной при помощи быстрой излучательности, построенной на трассировке лучей на кластере ЭВМ. Сцена освещается преимущественно вторичным освещением, которое постоянно меняет свой цвет за счет вращения глобуса. Сцена считалась с частотой 4.6 кадров в секунду на кластере из 24 машин (48 процессоров).
Комментарии
Отправить комментарий