Search Keywords: photon, photon mapping

 

В этом уроке мы рассмотрим photon mapping в V-Ray и эффективные способы его использования.

Что такое photon mapping?

Photon mapping это техника расчета освещения. В отличие от irradiance map, которая начинает прослеживание лучей от camera, photon mapping трассирует лучи от источников света. Два подхода не являются взаимно исключающими, и конечно могут быть использованы совместно для получения лучшего результата.

Photon map имеет много параметров которые ведут к различным результатам; здесь мы не рассматриваем все возможности, но только обсудим настройки которые работают хорошо в основных случаях.

Initial settings

Для всех экспериментов, мы будем начинать со следующих настроек для photon map (они отличаются от настроек по умолчанию):

Convert to irradiance map - off
Auto search distance - off
Max photons - zero
Convex hull area estimate - off
Store direct light - on
Retrace threshold - zero

Параметры, которые мы действительно будем использовать это:

Max density - определяет разрешение (
this defines the resolution (пространственную детализацию) photon map. Информация об освещении из photon map собирается в большом количестве точек на поверхности объектов сцены. Этот параметр определяет расстояние (в единицах сцены) между этими точками. Меньшее значение означает, что эти точки будут ближе друг к другу и их будет больше. Большее значение означает, что сэмплы освещения будут дальше друг от друга и их будет меньше. Конечно, этот параметр зависит от масштаба сцены. Изменение этого параметра требует пересчета photon map всей сцены.

Search distance - определяет как освещение будет реконструироваться из точек поверхности описанных выше. Вы можете думать как о сглаживании photon map. Это значение должно быть больше чем Max density, но конкретное значение зависит от того насколько размытым должно быть (может быть) решение photon map. Значение в 2-5 раз больше Max density работает хорошо. Изменение этого параметра не требует пересчета photon map т.к. оно используется только в процессе рендера (шейдинга).

Дополнительные параметры, которые остаются со значениями по умолчанию, но могут быть изменены при необходимости это:

Bounces - число отскоков света; вы можете установить его в любое значение; больше отскоков означает более медленный просчет photon map. Мы оставим его равным 10, но вы можете настроить его, так как хотите.

Multiplier - множитель photon map; мы оставим его равным 1.0, но вы можете его настроить если необходимо.

Таким образом, мы ограничили параметры, которые нам нужно настраивать до двух - Max density, и Search distance. Этого достаточно для управления photon map. Вместе с этими настройками, качество photon map зависит от числа фотонов испускаемых источниками света. Больше фотонов означают более точный и менее шумный результат. Число фотонов настраивается отдельно для каждого источника света в диалоге Light settings, доступного в V-Ray секции System.

A simple example - the Cornel box

Мы продемонстрируем работу этих двух параметров на простом примере как Cornell box.

Вы можете скачать начальную сцену здесь here (для 3dsmax 5). Она включает очень простую сцену закрытого пространства со стенками разного цвета и spot light. Стенкам назначен материал V-Ray, так как в настоящее время photon mapping работает только с такими материалами.

Заметьте, что spot light имеет обратный квадрат затухания и довольно большой множитель яркости. Это близко соответствует свету в реальности, и photon mapping просчитывает затухание света по обратному квадрату по умолчанию.

Вот что мы получим, если сделаем рендер прямо сейчас.

 

 

Теперь включите GI и установите photon map для первичного и вторичного отскоков. Отключите Auto search dist, установите Max photons в 0, Retrace threshold в 0.0, и Max density в 10.0:

 

 

Если сделать рендер мы получим такой результат:

 

 

Немного темнее, но это может быть откорректировано увеличением Secondary bounces multiplier (в Indirect illumination секции) в 1.0. Если сделать рендер теперь, вы должны получить такой результат:

 

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

Теперь перейдите в диалог рендера, секцию V-Ray System, нажмите кнопку Light settings. В диалоге, который откроется, выберите нужный источник света (если их несколько) и установите Diffuse subdivs параметр в 500. Это количество диффузных фотонов, которые испускаются источником света (не точно, но фактическое количество фотонов это квадрат этого числа, в данном случае - 250,000). Закройте диалог Light settings dialog и сделайте рендер:

 

 

Трассировка фотонов теперь идет дольше, но вы можете заметить, что шум отдельных сэмплов уменьшился, хотя картинка все пятнистая. Мы можем уменьшить пятнистость увеличением параметра Search distance. Установите его в 40 и опять сделайте рендер:

 

 

Результат намного менее шумный, хотя очень размытый. Так же обратите внимание на темные углы. Темных углов не легко избежать с текущей настройкой photon map, но эффект может быть значительно уменьшен. Теперь установите Max density в 5.0 и Search distance в 10.0:

 

 

Эффект темных углов намного уменьшен, но изображение опять шумное и пятнистое. Для уменьшения шума, придется увеличить Diffuse subdivs для источника света до 1500:

 

Шум отдельных сэмплов теперь уменьшен. Теперь мы можем увеличить Search distance опять для сглаживания результата, но мы сделаем кое-что другое - мы используем irradiance map для получения сглаженного результата. В Indirect illumination секции, установите First diffuse bounce метод в Irradiance map и выберите High irradiance map пресет. Если теперь вы сделаете рендер, вы получите это:

 

 

Использованная сцена очень проста для алгоритма глобального освещения, так как здесь очень мало объектов создающих препятствия для распространения фотонов. Дальше мы посмотрим на более сложный пример: Sponza Atrium Scene.

Более сложный пример: the Sponza Atrium

Теперь мы посмотрим, как использовать mapping в более сложной сцене, Sponza Atrium, смоделированной Marko Dabrovic (http://www.rna.hr/). Вы можете скачать эту сцену отсюда here. Если вы сделаете рендер прямо сейчас, сцена будет выглядеть вот так:

 

 

Здесь не видно глобального освещения, так как photon mapping не работает со skylight. Потому, что фотоны могут излучаться или источниками света или реальной поверхностью. Поэтому, photon mapping не подходит для наружных сцен. Хотя в сценах, где рассеянный свет проходит через небольшие "отверстия" как окна, вы можете "пригласить" его, разместив V-Ray lights в этих отверстиях. В случае Sponza Atrium, мы должны разместить V-Ray light над крышей здания, из которого проходит свет в атриум.

 

Теперь включите GI и выберите Photon map для первичного и вторичного диффузных отскоков. Установите множитель вторичного отскока Multiplier в 1.0. Теперь перейдите в Global photon map секцию и выключите Auto search distance, установите Retrace threshold в 0.0 и установите Max photons в 0:

 

Теперь мы должны определить правильное значение для Max density. От этого будет зависеть значение Search distance.

Подходящее значение Max density зависите от масштаба сцены и желательной детализации photon map. В сцене есть измерительная лента(tape helper), измеряющая расстояние между колоннами. Это расстояние равно почти 6 единиц (юнитов). Поэтому правильное значение будет, скажем, одна десятая этого расстояния. Установите Max density параметр в 0.6 и Search distance в два раза больше, 1.2 и сделайте рендер. Вы должны получить подобный результат:

 

 

Результат довольно размытый, поэтому нам нужно явно меньшее значение для Max density и Search distance. После некоторого экспериментирования, мы находим, что 0.05 для Max density и 0.1 для Search distance обеспечивают следующий результат:

 

 

Конечно это очень шумный результат, но делали, тем не менее, должны быть достаточно проработаны (это зависит от размера пятен). Здесь много темных областей и темных пятен потому, что у нас не достаточно фотонов испускаемых источником света. Для устранения этого, перейдите в секцию System и нажмите кнопку Light settings. Выберите оба источника в сцене и установите Diffuse subdivs в 500 (что означает, 500 x 500 = 250,000 фотонов от каждого источника света). Закройте Light settings диалог и сделайте рендер. Трассировка фотонов теперь идет дольше, но результат получается лучше:

 

 

Но все еще фотонов недостаточно для качественной photon map, поэтому установите Diffuse subdivs для солнца (направленный источник света) в 2000 (что будет означать 4,000,000 фотонов) и Diffuse subdivs для V-Ray light в 2500 (что означает 6,250,000 фотонов). Закройте Light settings диалог и сделайте рендер. Трассировка фотонов теперь занимает достаточно много времени (несколько минут), но результат намного лучше:

 

 

Для сбережения времени последующих рендеров, вы можете сохранить photon map на диск: перейдите в Global photon map секцию и нажмите кнопку Save to file. Выберите любое имя файла для photon map и сохраните его. Теперь установите режим photon map Mode в From file и используйте Browse кнопку для выбора сохраненного файла, с уже просчитанной photon map. Теперь мы можем немного поиграть с параметром Search distance для сглаживания photon map еще немного. Установите Search distance в 0.4 и сделайте рендер:

 

 

Результат намного лучше, но эффект темных граней и углов очень хорошо виден. Поэтому, вместо того чтобы использовать только photon map для GI, мы используем irradiance map для сглаживания результата GI. Верните в Search distance значение в 0.1 и установите первый диффузный отскок в Irradiance map. Включите опцию Show calc. phase, выберите High irradiance map пресет и сделайте рендер:

 

Помните, что photon map не зависит от положения камеры. Мы можем сделать, сколько хотим рендеров с других точек без пересчета photon map (irradiance map должна быть пересчитана для другой точки рендера):

 

 

В последнем изображении вы можете видеть артефакты (пятна) в углах, где встречаются две поверхности. Это происходит потому, что photon map слишком шумная в этих областях, что переходит и на irradiance map тоже. Вот как выглядит photon map с этой точки:

 

Шум появляется потому, что свету труднее попасть в зоны, заслоненные от света (чем темнее том больше шума). Один из способов уменьшить шум photon map в том, чтобы еще увеличить число фотонов. Ниже показана photon map с 6000 сабдивами (36,000,000 фотонов) для "солнца" и 5000 сабдивами (25,000,000 фотонов) для area light:

 

Вот рендер с теми же настройками, но включенной irradiance map для первого диффузного отскока:

 

 

Конечно, чем больше фотонов, тем больше время трассировки фотонов. Другой способ уменьшить артефакты состоит в увеличении Search distance, что сгладит photon map немного больше; однако это сделает эффект темных граней и углов более заметным. Это изображение было получено с Search distance в 0.2; при этом использована уже просчитанная photon map:

 

 

Еще один способ разобраться с артефактами состоит в увеличении Retrace threshold значения до его значения по умолчанию 2.0. Это заставит V-Ray рассчитать GI, используя direct QMS для вторичных отскоков вблизи углов, вместо использования photon map. Это означает, что irradiance map будет дольше рассчитываться, но углы будут выглядеть лучше. Следующий результат был получен с Search distance 0.1 и Retrace threshold 2.0:

 

Hosted by uCoz