Porsche — Underwater road
3d award

Проблемы визуализации глобального освещения

 diablo_ 388.03587.2 19 января 2006 в 00:00

Автор: Андрей Адинец adi_@mail.ru

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

1 Введение
2 Теоретические основы
2.1 Освещение
2.2 Визуализация
2.3 Постановка задачи
3 Проблемы
3.1 Вторичное диффузное освещение
3.2 Трассировка фотонов
3.3 Использование пространственной когерентности
3.4 Использование временной когерентности
3.5 Прогрессивное улучшение
3.6 Регулировка качество/скорость
3.7 Использование аппаратных ресурсов
3.8 Сложность сцены
4 Заключение

1 Введение

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

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

С другой стороны, существуют приложения, где физически точные изображение требуется получать интерактивно и/или в реальном времени. Интерактивность означает взаимодействие пользователя со сценой, режим реального времени - частоту обновления 15 - 20 кадров в секунду. Интерактивность также предполагает быстрое обновление картинки, но там требования не такие жесткие, как в режиме реального времени, кроме того, они формулируются не слишком четко, например, интерактивным считается и 2 кадра в секунду, и один кадр в 2 секунды.

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

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

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

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

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

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

2 Теоретические основы

2.1 Освещение

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

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

Отражения (когда освещаемый предмет - зеркальный)

Глянцевые отражения (когда освещаемый предмет - глянцевая поверхность, то есть, размыто-зеркальная)

Каустики (когда предмет, от которого отразился свет, освещающий данный предмет - зеркальный); пример каустика - солнечный зайчик

Вторичное диффузное освещение (когда предмет, от которого отразился свет, освещающий данный предмет - диффузный, то есть одинаково по всем направлениям рассеивает падающий на него свет)

Деление это на самом деле не искусственно. Для разных видов вторичного освещения нужны разные алгоритмы визуализации.

Примеры различных эффектов глобального освещения

2.2 Визуализация

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

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

Трассировка лучей, как описана выше, также называется трассировкой лучей методом Монте-Карло.

Пример хода лучей при трассировке

2.3 Постановка задачи

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

Входные данные задачи:

Граничное представление геометрии объектов сцены (например, полигональное представление)

Оптические свойства поверхностей сцены

Параметры источников света

Взаимодействие пользователя со сценой (движения объектов, изменение оптических свойств поверхностей сцены, изменение параметров источника света)

Выходные данные задачи:

Изображение сцены (генерируемое интерактивно)

Ограничения:

Интерактивность

Не слишком сложная сцена (то есть, не слишком сложные эффекты освещения)

Невзаимодействующая среда (нет пыли, дыма и т.п.)

Отсутствие волновых эффектов (нет радуги или разложения света в спектр)

Основным ограничением, естественно, является интерактивность. Остальные ограничения продиктованы требованием интерактивности и отсутствием в настоящее время необходимых вычислительных ресурсов. В будущем они наверняка будут сняты.

3 Проблемы

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

Первичное освещение от точечного источника (то есть источника, размерами которого можно пренебречь - который мал) рассчитывается легко. Оно требует трассировки только одного луча для его расчета. Кроме того, существуют методы генерации теней на видеокарте, которые позволяют рассчитывать первичное освещение от одного точечного источника.

Сложнее рассчитывать первичное освещение от площадного источника. Его уже не посчитаешь трассировкой одного луча. Тут требуется несколько лучей. То есть, мы приближаем площадной источник множеством точечных источников.

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

Далее, от кадра к кадру сцена меняется не очень сильно. Тогда встает логичный вопрос: а зачем все пересчитывать каждый кадр? Может быть, удастся использовать значения освещенности на предыдущем кадре для расчета освещенности в текущем кадре? Кроме того, не сильно меняются значения освещенности между соседними пикселями, и это тоже хочется как-то использовать. Это называется проблемой использования временной (между кадрами) и пространственной (внутри кадра) когерентности (когерентность - небольшое изменение соседних значений, непрерывность). Различные подходы к ее решению будут обсуждаться далее.

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

Также возникают проблемы прогрессивного улучшения и регулировки качество/скорость. Если система не может сразу визуализировать глобальное освещение с требуемой точностью, то она должна визуализировать его так, как она может. А когда пользователь прекратит взаимодействие со сценой - начать повышать качество картинки. Это называется прогрессивным улучшением. Оно реализуется относительно просто, если есть схема приоритетов. И есть понятие регулировки качество/скорость. От задачи к задаче требования могут меняться. В одних задачах требуется высокое качество картинки, но можно пожертвовать скоростью. В других, наоборот, требуется скорость, однако можно пожертвовать качеством. Для работы системы при разных предъявляемых к ней требованиях и требуется регулировка.

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

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

Итак, основные проблемы описаны, переходим к подходам к их решению

3.1 Вторичное диффузное освещение

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

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

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

3.2 Трассировка фотонов

Быстрая излучательность позволяет интерактивно визуализировать вторичное диффузное освещение. Однако она не позволяет реализовать такие эффекты, как каустики. Для этого используют трассировку фотонов.

Работает алгоритм следующим образом. Из случайно выбранного источника света в случайном направлении испускается фотон. Каждый фотон обладает энергией, которая есть энергия источника света, деленная на число выпускаемых с него фотонов. Фотоны распространяются по сцене. Если фотон попадает на некоторую отражающую поверхность (идеальное зеркало), то он отражается в соответствии с законом отражения (если он попадает на преломляющую поверхность, то происходит отражение или преломление - с некоторыми вероятностями). Если он попадает на поверхность, не являющуюся идеально зеркальной или преломляющей (прозрачной), то факт его попадания записывается в фотонную карту - специальную структуру данных для хранения фотонов. Далее фотон может либо поглотиться с вероятностью, зависящей от оптических свойств поверхности, либо продолжить свой путь в случайном направлении. В любом случае, рано или поздно пути всех фотонов оборвутся. Получили некоторую структуру данных - распределение фотонов в сцене. Для определения значения освещенности при трассировке лучей суммируется энергия ближайших фотонов (и делится на площадь). Причем берется либо фиксированное количество ближайших фотонов ("k ближайших соседей"), либо берутся все фотоны внутри круга фиксированного радиуса. Процесс нахождения освещенности по распределению фотонов в сцене называется фильтрацией фотонной карты.

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

3.3 Использование пространственной когерентности

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

Присваивание пикселам наборов виртуальных точечных источников при использовании мозаичной выборки

3.4 Использование временной когерентности

Где используется вместе с методом быстрой излучательности. Рассмотрим мозаичную выборку размера 3*3. Это значит, что у нас всего будет 9 наборов виртуальных точечных источников, причем пикселам они назначаются следующим образом: пикселу (0,0) назначается набор 1, пикселу (0,1) - набор 2, пикселу (0, 2) - набор 3, (1, 0) - 4, ..., пикселу (2, 2) - набор 9, далее распространяем периодически такое заполнение на весь экран (см. рисунок 2). Первоначальное значение освещенности для каждого пиксела считается только с учетом его набора. Далее для каждого из соседей пиксела определяется, лежит ли он с данным пикселом на одной поверхности или нет. Для этого сравниваются значения глубины (расстояния от наблюдателя до пересечения луча с поверхностью сцены) и нормали (перпендикуляры к поверхности). После этого окончательная освещенность на данном пикселе считается как среднее его собственной освещенности и освещенностей всех пикселов, лежащих с ним на одной поверхности. К сожалению, это размывает границы четких теней. Но в этом нет ничего страшного. Зато этот прием смягчает артефакты метода быстрой излучательности и позволяет увеличить эффективное количество виртуальных источников света почти в 9 раз. Что приводит к видимому увеличению качества картинки.

3.5 Прогрессивное улучшение

Проблема прогрессивного обновления также имеет большое значение. К примеру, рассмотрим архитектурное приложение. Подвинули источник света. Через некоторое время мы получим новые значения освещенности в сцене. Но хочется, чтобы источник подвинулся сразу (если мы двигаем не источник, а какой-то объект, то нам тоже не хочется долго ждать перед тем, как мы увидим, что он изменил свое положение). Кроме того, хочется сразу получить приблизительную картину освещения в сцене, а через некоторое время - получить реальную картину освещения в сцене.

Для решения этой проблемы применяется прогрессивное улучшение. Оно очень тесно связано с проблемой приоритетов и проблемой использования временной когерентности. Рассмотрим реализацию прогрессивного обновления при помощи восстановления по разреженной выборке .

Пример прогрессивного улучшения. Слева - исходная картинка, сейчас переместят источник света. Посередине - картинка через 3 секунды после перемещения источника, тени не очень четкие, но общее представление об освещении уже есть. Справа - картинка высокого качества через 10 секунд после перемещения источника

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

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

3.6 Регулировка качество/скорость

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

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

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

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

3.7 Использование аппаратных ресурсов

Мощности компьютеров постоянно растут, поэтому встает вопрос: как их использовать? Если просто увеличилась тактовая частота процессора, то здесь никаких проблем не возникает. А вот если стал доступен кластер машин или появился новый графический процессор, то вопрос "Как это использовать?" становится актуальным.

Как использовать кластер - в общем-то понятно. Хорошо известно, что трассировка лучей есть легко распараллеливаемый алгоритм - применяем его на кластере. Но, применяя обычную трассировку лучей методом Монте-Карло на кластере, интерактивности не добиться. Требуется применить либо быструю излучательность, либо трассировку фотонов, либо все сразу. Второе отпадает сразу - распределенная трассировка фотонов передает слишком много данных по сети, что резко замедляет работу системы.

И то, и другое сразу было применено - первой стадии эволюции алгоритма быстрого глобального освещения. Там использовалась быстрая излучательность для расчета вторичного диффузного освещения и трассировка фотонов (небольшого их числа) - для расчета каустиков. Использовалась модель клиент-сервер и мозаичная выборка. Каждый клиент должен был сам рассчитывать небольшой набор фотонов, чтобы не загружалась сеть. Поскольку клиент не мог рассчитать все 9 наборов фотонов (это заняло бы слишком много времени), он рассчитывал только освещенность для пикселов, соответствующих одному его набору (если пикселов из этого набора больше не было, то он рассчитывал новый набор фотонов и получал пикселы из другого набора; однако это очень плохо сказывалось на производительности системы). Это требовало выполнения сглаживания разрывов на сервере, что создавало дополнительную нагрузку на сервер и сильно загружало сеть (требовалось передавать по сети еще значения глубин и нормалей пикселов). Выходило так, что производительность системы упиралась в производительность сервера и передачу данных по сети, что приводило к тому, что она не была масштабируемой (масштабируемость означает линейный рост производительности с ростом числа компьютеров). Поэтому в следующей версии системы, [www.cgm.graphicon.ru:8080/issue4/Paper1_adinetc/index.html#Bend#Bend], ее создатели вынуждены были отказаться от трассировки фотонов (и от каустиков). Это привело к тому, что клиент мог теперь рассчитать полные 9 набор виртуальных точечных источников (поскольку это требует трассировки всего лишь пары сотен лучей на все 9 наборов, это мелочи по сравнению с возможными затратами на трассировку фотонов, когда на один набор требовалось несколько тысяч лучей) и выполнять у себя расчеты, связанные со сглаживанием разрывов. Это улучшило масштабируемость системы и повысило ее производительность.

Как видим, даже использование кластера - кажущаяся простой задача - оказывается нетривиальным. Однако еще более интересной является проблема использования графического акселератора. Как правило, в большинстве систем интерактивного глобального освещения, работающих на одном ПК, графический процессор используется только для отрисовки сцены с текстурами, задающими глобальное освещение. Hапример, графический процессор также используется для отображения первичного освещения. Основная же нагрузка ложится на центральный процессор. Интересно бы рассмотреть алгоритмы, которые бы производили именно расчет глобального освещения или, по крайней мере, его часть, на графическом процессоре. Например, можно реализовать быструю излучательность поверх алгоритма расчета теней на графическом процессоре, а для суммирования использовать буфер-аккумулятор (именно так ее и предложил реализовать автор метода в [www.cgm.graphicon.ru:8080/issue4/Paper1_adinetc/index.html#keller#keller]). Кроме того, рассматривалась возможность осуществления трассировки лучей на графическом процессоре. Сейчас последние модели графических процессоров поддерживают все требуемые инструкции, включая условные операторы, так что трассировка лучей на них становится возможной. Можно рассмотреть трассировку фотонов на графическом процессоре. Интересно рассмотреть представление оптических свойств поверхностей сцены при помощи пиксельных шейдеров (программ, выполняющихся на графическом процессоре, получающих на вход координаты точки на поверхности, имеющих доступ к текстурам и производящим в соответствии с этим закраску пиксела). Есть работы по созданию или симуляции отдельных эффектов глобального освещения на графическом процессоре. Но пока еще нет системы интерактивной визуализации глобального освещения, которая бы довольно интенсивно использовала графический процессор.

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

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

3.8 Сложность сцены

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

Использование трассировки лучей подразумевает использование некоторой структуры иерархического разбиения сцены, например, дерева двоичного разбиения (BSP-дерева), трехмерной сетки или иерархии ограничивающих объемов. Рассмотрим это на примере дерева двоичного разбиения. Строится оно следующим образом. Пространство делится плоскостью на 2 полупространства, после чего для объектов сцены определяется, в каком полупространстве они находятся. После этого каждое из полупространств делится уже своей плоскостью и так далее. Образуется некоторое дерево. Оно значительно ускоряет трассировку лучей по сравнению с простейшим методом "пересечь каждый объект с каждым лучом". Этот метод обеспечивает логарифмическую сложность алгоритма по количеству многоугольников в сцене (то есть, при увеличении количества многоугольников с 1000 до 1000000 частота кадров падает всего в два раза). Что позволяет, например, использовать трассировку лучей для визуализации деревьев с тремя миллионами листьев без значительной потери скорости. Таким образом, для трассировки лучей большая геометрическая сложность сцены - не проблема. Относительно логарифмической сложности трассировки лучей и прочих ее достоинств.

Пример того, как при помощи трассировки лучей рассчитывается глобальное освещение для сцены, содержащей дерево из 1.5 миллионов треугольников. Скорость - 4 - 6 кадров в секунду (не сильно уменьшается по сравнению со сценами с меньшим числом треугольников) на кластере их 24 двухпроцессорных машин.

С методами, использующими графический ускоритель, дело обстоит не так хорошо. Нет, трассировка одного фотона по-прежнему имеет логарифмическую сложность. Проблема в том, что выводится на экран все это при помощи графического ускорителя, и сложность этого вывода линейна по числу полигонов, то есть, если количество полигонов возрастет в 1000 раз, то скорость упадет в 1000 раз. На графический ускоритель требуется отправлять каждый многоугольник в сцене, вне зависимости от того, видим ли он или накрыт десятью другими и не виден. Есть алгоритмы, определяющие множество видимых многоугольников, но они либо требуют очень большого препроцессинга (предвычислений), либо потребляют очень много ресурсов процессора сами по себе. Поэтому в системах, использующих графический ускоритель, обычно визуализируются сцены с небольшим количеством многоугольников (обычно 20000 - 30000).

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

Здесь будет рассмотрена некоторая проблема, безусловно относящаяся к фотометрической сложности сцены, а именно - проблема определения эффективного набора источников. Она состоит в следующем. Рассмотрим некоторую сложную сцену (например, семиэтажное здание, состоящее из 50 миллионов полигонов и имеющее 23 тысячи источников света, разбросанных по всему зданию). Очевидно, что на освещенность в той части сцены, которую мы видим (обычно это одна комната в этом здании), влияют не все источники, а лишь малая их часть (обычно 5-10). И именно из них необходимо испускать фотоны или рассчитывать виртуальные точечные источники, так как только они влияют на освещение того, что мы видим. Встает вопрос: а как выделить эти 5-10 источников из всех 23 тысяч? И как соответствующее множество источников постоянно обновлять? В этом и заключается проблема определения эффективного множества источников.

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

Как можно видеть, обе проблемы - геометрическая и фотометрическая сложность сцены - довольно интересны.

4 Заключение

Итак, пора подводить итог. В интерактивной визуализации глобального освещения существует много проблем. Наиболее актуальными являются проблемы использования временной и пространственной когерентности (и связанные с ними - проблема приоритетов, проблема прогрессивного обновления и проблема регулировки качество/скорость) и проблема наиболее полного использования имеющихся в наличии ресурсов (главным образом - графических процессоров - они наиболее доступны). Далее по актуальности идет проблема визуализации различных эффектов глобального освещения. Основные алгоритмы уже разработаны, так что здесь скорее речь идет о модификации их с учетом требований интерактивности. Наконец, проблемы визуализации сложных сцен и проблема сложности сцены - как геометрической, так и фотометрической - неизменно стоит. И она тоже является актуальной.

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

Примеры интерактивной визуализации глобального освещения при помощи метода быстрого глобального освещения. Справа: конференц-зал, 280 тысяч треугольников, 20 кадров в секунду на кластере из 22 двухпроцессорных машин. Слева: комната, 20 тысяч треугольников, освещение почти исключительно вторичное, от вращающегося глобуса (так различные области глобуса имеют различные цвета, то вторичное освещение в этой сцене изменяется очень быстро), 4.5 кадров в секунду на кластере из 24 двухпроцессорных машин. На примере этих двух сцен видно, что основное влияние на скорость оказывает фотометрическая сложность сцены.

Примеры интерактивной визуализации при помощи выборочной трассировки фотонов. Слева: сцена "комната", 4 источника, 12400 треугольников, 8 кадров в секунду. Справа: сцена "дом", 2 источника, 377900 треугольников, 1.1 кадр в секунду, преобладает вторичное освещение. Реальная частота обновления освещения в несколько раз меньше частоты кадров (прогрессивное улучшение).

Комментарии (Всего: 2)

Online|Offline Даниил 6.0 -0.1 20 августа 2007 в 17:07 #0

Аватар Даниил
это не урок, а какая то теория, выписана из книги,..короче не понятно как ставить освещения настройки и.т.д. -5 из 5

Online|Offline vrednuga_04 0.0 0.0 26 марта 2009 в 14:32 #0

Аватар vrednuga_04
Что бы оставить комментарий вам необходимо войти или зарегистрироваться!

Советуем почитать

Алхимия

Подробный урок по созданию занавесок для окон.

Комментарии 1 Рейтинг 1 Просмотры 13 710 Автор: diablo_ 19 января 2006 в 00:00

Моделирование головы. Часть 2

Урок, в котором Вам будут показаны и рассказаны основы моделирования человеческой головы. Часть 2

Комментарии 1 Рейтинг 0 Просмотры 34 076 Автор: diablo_ 20 мая 2006 в 00:00

Урок по моделированию Hayabusa в Максе - Robby Lam

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

Комментарии 6 Рейтинг 3 Просмотры 101 915 Автор: seaman 12 октября 2006 в 00:00

Освещение и визуализация интерьера в MentalRay

Привет и добро пожаловать в мой урок. Меня зовут Nabil Chequieq, я из Марокко, и в этом уроке вы узнаете, как осветить и настроить некоторые материалы, которые дадут хороший результат за малое время рендеринга.

Комментарии 8 Рейтинг 1 Просмотры 16 197 Автор: venik 8 мая 2013 в 11:59

Моделирование тела персонажа. Часть 1

Урок – статья по принципам моделирования тела персонажа. Которая может применяться как для мультфильмов, так и для игр.

Комментарии 6 Рейтинг 0 Просмотры 60 700 Автор: diablo_ 15 апреля 2006 в 00:00

3D моделиприслатьещё

Форумещё

Конкурсы CGWarsещё

CG Art XXV
28.11.2016 — 07.12.2016 Комментарии8 Просмотров3 1

Блогиещё

Популярные урокиещё

Реклама

3dmir.ru - Вся компьютерная графика
      www.megastock.ru