Руководство по Yaf-Ray :: Метод Фотонных Карт (Photon Map)
CekuhnenTutorial R1.3 - 15 Sep 2007
Автор: Clanek Tomase Toegela (TomTNT)
Перевод: cyberdime
Метод Фотонных Карт (Photon Map)
Вычисления методом Фотонных Карт полностью отличается от методов РТ и МС. Фотонные карты фактически игнорируют проблему огромного количества лучей трассировки, свойственную методам РТ/МС и работают только со вторичными лучами, которые далее не разветвляются. Метод работает следующим образом: от источника света (источники любого типа, но не небосвод!) испускаются направленные частицы (фотоны) с определённой световой энергией. Попадая на поверхность какого-либо объекта фотоны оставляют здесь часть энергии -некое «энергетическое пятно». Энергия «пятна» рассчитывается по законам BRDF . Фотоны продолжают отскакивать от одного объекта к другому (по законам моделирующим реальные объекты) до тех пор, пока энергия фотонов не станет равной 0. Этот процесс фактически повторяет то, что происходит со светом в реальности. Световая энергия излучается источником света (солнцем) и лучи оставляют часть энергии на объектах. Таким образом формируется структура «энергетических пятен» - пятнистая текстура для всех объектов сцены – фотонная карта. Эта текстура даёт объектам характер источников света, так как составляется из фотонов ими излучаемыми. Пятна текстуры содержат некоторую информацию об источниках света: их расположение, энергетическое значение, направление падения фотонов на поверхность и т. д. Вся эта информация весьма требовательна к ресурсам оперативной памяти и может получиться, что само вычисление «съест» до 1 ГБ оперативы. Такая прожорливость диктуется также тем, что фотонная карта вычисляется для всей сцены целиком, а не только для текущего вида.
То есть теоретически, если мы сохраним фотонную карту, а затем загрузим снова, то при перемещении камеры не придётся её пересчитывать заново. К сожалению ни в Блендере ни в Yafray нет никаких опций для сохранения/загрузки фотонных карт. После вычисления карты рендерер работает как обычно, но только учитывая просчитанную карту. Такой рендер был бы возможен также только с вычислением Z-буфера. Разрешение здесь не оказывает такого решающего влияния на результат, как при методике РТ/МС.
Использование чистого метода Фотонных Карт
Фотонные карты в чистом виде обычно не используются для общего освещения, а только для специальных эффектов, типа Каустики. Свет, генерируемый фотонными картами, обычно очень смазанный и пятнистый, а коррекция пятен отнимает много вычислительных ресурсов. Но Фотонные карты – отличная основа для других методов, таких как ранее рассмотренные РТ и Кэш. Одно из преимуществ – быстрое вычисление самой карты. Недостаток – необходимость применения в сцене источников света, генерирующих фотоны. Чаще это точечные источники света или плоскостные (Area). Небосвод не может служить источником света. Это означает, что методом Фотонных карт довольно сложно хорошо осветить сложные экстерьерные сцены. Именно поэтому Фотонные карты используются преимущественно при интерьерной визуализации, где внешний свет от небосвода можно смоделировать плоскостным источником света (типа Area light) с размерами, равными габаритам оконного проёма.
Использование чистого метода фотонных карт для эффектов Каустики
Возможно, самым большим плюсом метода Фотонных Карт является реализация эффектов Каустики. Из-за достаточной степени реализма мог быть достигнут этот эффект. Картинка ниже иллюстрирует основы эффекта Каустики. Если вы проходили физику в школе, то сумеете понять - фактически это основы оптики: луч света, проходя через разные среды с различной оптической плотностью меняет направление на каждой границе при переходе из одной среды в другую. При этом форма объекта влияет на изменение направления луча.
Рис.1 Геометрия среды отклоняет лучи параллельно, не концентрируя их
Рис. 2 Форма объекта вызывает различные углы отклонения лучей внутри объекта и концентрацию их на небольшом участке. Это и называется эффектом Каустики (это просто иллюстрация).
Теперь рассмотрим Каустику непосредственно. Если посмотреть на картинки ниже, то видно, что для вычисления эффекта Каустики методом РТ/МС требуется гигантское количество лучей, чтобы эффект стал виден. Ситуация показана схематически на 1-й картинке. По схеме только один луч из группы проходит через стакан с водой и значит эффект каустики правильно вычислить невозможно.
Остальные лучи отскакивают к стенам или уходят в окружающую среду. Данные картинки считались в Maxwell Render, который использует метод РРТ. РРТ означает Progressive РТ. И отличается от метода чистого РТ только тем, что вычисления продолжаются бесконечно, каждое последующее вычисление лучей использует результаты предыдущего и затем добавляется к сцене. Шум затем сглаживается, но число лучей не становится больше. Каждый раз вычисляется только один отскок
луча, но каждый раз под разным углом (в соответствии с BRDF-характеристиками).Метод РРТ Maxwell не так важен для этой статьи, но показательно, что даже при 4-х часовом рендеринге, при котором картинка выглядит почти чистой, а эффект Каустики всё ещё не проявился. Это – из-за низкой вероятности прохождения лучей через стакан. Чем дольше вы вычисляете (рендерите) тем более точный эффект получаете. Посмотрите на среднюю картинку. Это та же самая сцена, но вычислялась она примерно 20 часов. У меня нет столько времени, поэтому я заимствовал результаты у Tomas An.
Фактически вычисление методами РТ, МС и РРТ характеризует следующее: диффузный свет обычно прозрачный, но для проявления эффекта Каустики методом трассировки необходимо либо очень большое время визуализации (РРТ), либо нереально большое количество лучей (РТ/МС). Практически можно сделать это используя только метод РРТ. Последний, и действительно эффективый метод для реализации Каустики – Фотоны. Поскольку они идут прямо от источника света, возможно вычислить эффект каустики с высоким качеством и за короткое время. Ситуация показана на последней картинке. Фотоны испускаются на всю сцену и
действуют по законам физики. Здесь нет места для случайной вероятности. Только простая симуляция. Единственным случайным фактором может быть только то, что фотоны действительно проходящие через стакан, не остановятся где-нибудь на стене. Но мы не будем думать об этом, используя Блендер, поскольку у нас нет выбора. Здесь я хотел бы сказать ещё о некоторых вещах.
Например, в том же VRay можно разделить вычисление эффекта каустики от остальных вычислений освещённости. Можно сэкономить время рендеринга, вычисляя освещённость сцены методом МС и используя Фотонные карты только для Каустики. Направить фотоны только на стакан и не просчитывать их для остальной сцены, где их воздействие всё-равно бы не проявилось. Последнее изображение построено в VRay с помощью комбинации Фотонов для каустики и метода РРТ для остального. Вычисление непосредственно каустики заняло только 10 минут. Вместо 20 часов рендеринга иными методами, но с похожим качеством.
Maxwell – PPT. 4 часа рендеринга. Эффект каустики практически незаметен
Maxwell – PPT. Прибл. 20 часов рендеринга. Теперь эффект каустики виден. Автор - Tomas An
VRay - PPT + Фотоны для Каустики. 1 час рендеринга:
Использование чистого метода Фотонных карт – предисловие к демонстрации.
Как я уже упоминал выше, голый метод Фотонных карт, без комбинации с другими методами в компьютерной графике практически не используется. Однако мы всё же попробуем осветить сцену только фотонами. Проблема в том, что фотоны производят очень пятнистое освещение, которое нам не очень-то подходит. Мы можем уменьшить количество пятен или размыть их, чтобы сделать освещение более чистым. В основе фотоны управляются 3-мя параметрами: общее количество фотонов, радиус «пятна» и степень размытия «пятен». Следующее описание метода – скорее подготовка к использованию комбинаций метода Фотонных карт с методом РТ или Кэша.
Чистый метод Фотонных Карт.
Метод Фотонных Карт активируется кнопкой Photons всё в той же закладке Yafray GI панели рендеринга. Чтобы строить непосредственно только фотонную карту следует также активировать кнопку Tune Photons.
Как я уже упоминал, в сцене необходимы источники света - генераторы фотонов. Я подготовил тестовую сцену:
http://blender3d.cz/others/tnt/data/testscene.zip. Это сцена интерьера. Она проста, но вполне подойдёт для наших тестов. Практически все фотоны, излучаемые плоскостными источниками (Area) будут вычислены и видимы в этом простом интерьере. Если бы мы взяли другой тип интерьерной сцены, например просторный собор с концентрацией на определённой детали (к примеру алтарь) было бы незачем считать фотонную карту на весь объём помещения. Для таких случаев этот метод не подходит, так как в поле зрения попадёт только незначительная часть вычисляемых фотонов, а большинство из них останется вне поля зрения камеры. Однако с другой стороны это было бы хорошо для анимации.
Photons - активирует рендеринг методом Фотонных карт;
Tune Photons - используется для настройки фотонов. То есть при активации будет рендериться только сама фотонная карта;
Count - общее количество фотонов, излучаемое всеми вместе источниками света в сцене;
Radius - характеризует размер фотонных «пятен» на объекте. Размер в абсолютном масштабе сцены. Этим параметром можно размыть пятна карты, но для этого лучше сначала воспользоваться параметром MixCount;
MixCount - не до конца понятно назначение этого параметра. Я думаю, что он размывает края отдельных пятен или смешивает пятна вместе, что позволяет сгладить фотонную карту. Но в этом случае нулевое значение данного параметра должно делать пятна идеально чёткими, как в других рендерерах. В Yafray, напротив, пятна размыты всегда, хотя с нулевым значением - в меньшей степени, чем с более высокими. Этот праметр связан с Radius: чем больше значение Radius и выше MixCount, тем больше размытие карты;
Count
Малые значения Count вызывают на фотонной карте шум - почти чёрные промежутки между пятнами, где практически не видна текстура:
С увеличением количества фотонов шум постепенно уменьшается:
Очень большое количество фотонов, тем не менее не приводит к полному исчезновению шума, но зато существенно замедляет рендеринг. Фотоны довольно «дорогие» в смысле соотношения качества/времени рендеринга:
Radius
Radius и сам по себе имеет влияние на шум в текстуре фотонной карты. Но слишком не полагайтесь на него: лучше в комбинации с MixCount, который виден лучше с большим значением Radius. Размытие малого количества фотонов, конечно возможно с использованием только параметра Radius.
Больший радиус – больше размытие. Заметьте, что с Radius=1.0 наблюдается светлая полоса в углу. Это из-за фотонов, просачивающихся снаружи. С радиусом 0.5 будет лучше:
Черезмерно преувеличенное значение Radius. Такой способ возможен в некоторых случаях для использования чистого метода Фотонных Карт. Слегка напоминает метод радиосити без усовершенствования. Снова заметны ошибки освещения в углах, где можно обнаружить светлые пятна. Для большей информации по проблеме распределения света в углах см:
Риски, ловушки и подсказки для метода Фотонных карт:
MixCount
При низком значении MixCount пятна фотонов – очень резкие:
Увеличиваем значение MixCount – более размытый результат:
Максимальное значение MixCount – результат почти такой же как предыдущий: