В этом уроке мы исследуем карты фотонов и эффективные методы их использования.
Карты фотонов это техника для рассчета глобального освещения. Однако в отличие от карт овещения, которые начинают трассировать лучи от камеры, карты фотонов трасируют лучи от светильников в сцене. Два приближения не исключают друг-друга и на самом деле для лучшего результат карты фотонов и карты освещения используются вместе.
Карты фотонов имеют много параметров, которые делают возможным множество интересных результатов; Здесь мы не будем обсуждать все возможности но только укажем установки которые надежно работают в большинстве случаев.
Для всех наших экспериментов мы стартуем со следующими установками для карты фотонов (заметим что могут быть различия от установок по умолчанию):
Convert to irradiance map - выключено
Auto search distance - выключено
Max photons - ноль
Convex hull area estimate - выключено
Store direct light - включено
Retrace threshold - ноль
Параметры, которые были в действительности использованы:
Max density (Максимальная плотность) - это определяет разрешение (пространственные детали) карты фотонов. Информация освщения из карты фотонов аккумулируется в нескольких точках на поверхности объектов сцены. Этот параметр определяет расстояние (в мировых единицах) между этими точками. Меньшее значение приведет к тому, что точки будут теснее друг к другу и их будет больше. Болшее значение приведет к тому, что выборки света будут дальше друг от другаи их будет больше. Очевидно, что этот параметр зависит от масштаба Вашей сцены. Изменение этого параметра требует пересчета карты фотонов т.к. используется при ее расчете.
Search distance (Расстояние поиска) - это определяет как освещение будет реконструироваться из точек поверхности, описанных выше. Вы можете представлять себе это как размытие карты фотонов. Он больше чем Max density, но точное значение зависит от того какое размытие вы хотите получить в Вашей карте. Значение в 2-5 раз большее значения Max density хорошо работает. Изменение этого параметра не требует персчета карты фотонов т.к. используется только в течение визуализации.
Добавочные параметры, которые будут иметь значение поумолчанию, но которые могут быть изменены Вами при необходимости:
Bounces (Отскоки) - это управляет числом отскоков света; Вы можете установить его в то значение, которое хотите; больше отскоков значит медленный расчет карты фотонов. Мы оставили его в 10, но Вы можете настроить по желанию.
Multiplier (Множитель) - это множитель для карты фотонов; мы оставили его в 1.0, но Вы можете настроить его по желанию.
Мы ограничились использованием только двух параметров карты фотонов - Max density, и Search distance. Этого достаточно для управления картой фотонов. Кроме этих параметров качество карты фотонов зависит от числа фотонов излучаемых светильниками. Большее количествл фотонов означает гладкость и большуб аккуратность карты. Число излучаемых фотонов управляется для каждого светильника в диалоге Light settings (Установки светильника), доступном из свитка VRay System.
Мы продемонстрируем эфффект этих двух параметров на простой сцене бокса Корнеля.
Вы можете загрузить сцену отсюда (для 3dsmax 5). Она включает очень простые установки закрытой сцены с разными цветами стен и светильником spot. Стены имеют материал VRay назначенный им, т.к. сейчас фотонные карты работают только с материалами VRay.
Заметим, что spot светильник имеет обратноквадратичный спад интенсивности и действительно высокий множитель. Это из-за того что реальные светильники имеют такой спад, а у карты фотонов этот спад по умолчанию.
Вот что Вы получите, если сразу визуализируете этот файл.

Тепрь включите GI и установите карту фотонов для первичного и вторичного отскоков. Выключите параметр Auto search расстояния, установите Max photons в 0, Retrace threshold в 0.0, и Max density в 10.0:
Если Вы визуализируете сейчас, Вы получите этот результат:

Немного темно, но это может быть скорректировано увеличением Secondary bounces multiplier (Множителем второго отскока) (в свитке Непрямое освещение) на 1.0. Если Вы визуализируете снова, Вы получите:

Это визуализируется довольно быстро, и это довольно хорошее приближение освещения сцены. Очевидно, это далеко от качественного изображения, но мы получим его постепенно.
Теперь переходим в диалог Визуализатора, и в свиток VRay System, нажмите кнопку Light settings. В открывшемся диалоге выделите светильник light и установите параметр Diffuse subdivs в 500. Это управляет числом излучаемых светильником фотонов (не напрямую - настоящее число фотонов квадрат этого числа, в нашем случае - 250000). Закроем диалог установок светильника и визуализируем снова:

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

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

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

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

Сцена бокса Корнеля очень легкая сцена для алгоритма глобального освещения, т.к. в ней очень мало преград (объектов отбрасывающих тени и останавливающих свет). Далее мы рассмотрим более трудный пример: сцену портика Sponza Atrium.
Теперь мы покажем как использовать карту фотонов в более сложной сцене - Sponza Atrium, которая моделирована Marko Dabrovic (http://www.rna.hr). Вы можете загрузить начальную сцену отсюда. Если Вы визуализируете сцену сразу, она будет выглядеть так:

Заметим, что карты фотонов не работают с небесным светом. Это из-за того, что фотонам нужна реальная поверхность для излучения. Т.о. карты фотонов не применимы для внешних сцен. Однако в сценах, где небесный свет приходит через маленькие отверствия подобные окнам, Вы можете "стимулировать" свет расположением VRay светильников в эти отверствия. В случае Sponza сцены, мы поставили VRay светильник на верхушку здания, которое является единственным местом, откуда приходит небесный свет.
Теперь включим глобальное освещение и выберем Photon map как первичный и вторичный метод рассчета отскоков. Установите Multiplier вторичного отскока в 1.0. Далее перйдите в свиток Global photon map и выключите параметр Auto search distance, установив Retrace threshold в 0.0 и установите Max photons в 0:
Далее мыдолжны определить хорошее значение для Max density. Из этого мы будем выбирать значение для Search distance.
Хорошее значение Max density зависит от масштаба сцены и желательности детализации карты фотонов. В сцене есть 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 диалог ивизуализируйте. Трассировка фотонв теиерь идет дольше, но результат лучше:

Все еще нам нужно больше фотонов для хорошей карты, так установим Diffuse subdivs для солнца (светильник target direct) в 2000 (что значит 4,000,000 фотонов) и Diffuse subdivs для VRay светильника в 2500 (что значит 6,250,000 фотонов). Закроем диалог Light settings и визуализируем. Трассировка карты фотонов теперь занимает очень много времени (несколько минут), но результат значительно лучше:

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

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

Заметим, что карта фотонов видонезависима. Мы можем визуализировать разные виды без пересчета карты фотонов (карты освещения нуждается в пересчете):

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

Шум из-за того что свет более трудно получить в закрытых областях сцены. Один из путей уменьшить зашумленность карты фотонов - излучить еще больше фотонов. ВОт карта с 6000 subdivs (36,000,000 фотонов) для солнца и 5000 subdivs (25,000,000 фотонов) для протяженного светильника:

Здесь то же изображение, но с картой освещения в качестве движка первого отскока:

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

Еще один путь разделаться с артефактами увеличить значение Retrace threshold от его значения по умолчанию 2.0. Это заставит VRay рассчитывать GI напрямую для вторичного отскока вблизи углов, вместо использования карт фотонов. Это значит что карта освещения будет медленне для расчетаЮ но углы будут лучше. Следующее изображение было визуализировано с Search distance 0.1 и Retrace threshold 2.0:
