Search Keywords: photon, photon mapping

 

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

Что такое фотонное преобразование?

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

 

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

 

 

Начальные настройки

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

 

Convert to irradiance map - выключено

Auto search distance - выключено

Max photons - ноль

Convex hull area estimate - выключено

Store direct light - включено

Retrace threshold - ноль

 

Мы будем использовать только следующие параметры:

 

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

 

Search distance - Расстояние поиска - этот параметр определяет как освещенность будет реконструирована из точек на поверхностях, описанных выше. Вы можете думать о нем как о размытии фотонной карты. Он должен быть больше, чем Max density, но точное значение зависит от того на сколько сильно вы хотите размыть фотонную карту. Хорошо работают значения, превышающие параметр Max density в 2-5 раз. Изменение этого параметра не требует повторного вычисления фотонной карты, поскольку оно используется только на этапе визуализации.

 

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

 

Bounces - Отскоки - этот параметр управляет числом отскоков (отражений) света. Вы можете установить любое значение, которое захотите. Больше отскоков означают более медленное вычисление фотонной карты. Мы будем оставлять это значение равным 10, но вы можете отрегулировать его так, как вы хотите.

 

Multiplier - Множитель - это множитель для фотонной карты. Мы будем оставлять это значение равным 1.0, но вы можете отрегулировать его так, как вам нужно.

 

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

Простой пример - Cornell box

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

 

Начальную сцену можно загрузить отсюда (для 3dsmax 5). Она включает в себя очень простое закрытое пространство, образованное разноцветными стенами, и точечный источник света. Стенам присвоены материалы V-Ray, поскольку фотонное преобразование работает только с материалами V-Ray.

 

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

 

Вот что вы получите, если сразу визуализируете сцену:

 

 

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

 

 

Если вы визуализируете сцену, то получите такой результат:

 

 

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

 

 

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

 

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

 

 

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

 

 

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

 

 

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

 

 

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

 

 

Сцена Cornell box - это очень простая сцена для алгоритма непрямого освещения, поскольку в ней очень немного препятствий (объекты отбрасывают тени и останавливают свет). Далее мы посмотрим более сложный пример: сцена Sponza Atrium.

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

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

 

 

Обратите внимание, что фотонное преобразование не работает со светом от неба (skylight). Это происходит потому, что фотонам нужна реальная поверхность, которая из испускает. Следовательно фотонное преобразование не подходит для экстерьерных сцен. Однако в сценах, где небо видно через небольшие отверстия типа окон, вы можете "пригласить" свет внутрь, поместив источники света V-Ray в эти отверстия. В случае сцены Sponza Atrium мы поместили источник света V-Ray на верх здания, туда, откуда приходит свет от неба.

 

Теперь включите GI и установите фотонную карту (Photon map) для первичных (Primary bounces) и вторичных отскоков (Secondary bounces). Для вторичных отскоков установите Multiplier равным 1.0. Теперь перейдите в свиток Global photon map и выключите Auto search distance, установите Retrace threshold равным 0.0 и Max photons равным 0.

 

Далее мы должны определить хорошее значение для Max density. Исходя из него, мы выберем значение для Search distance.

 

Хорошее значение для Max density зависит от масштаба сцены и желательной детальности фотонной карты. В сцене есть вспомогательный объект (helper) Tape, замеряющий расстояние между двумя колоннами. Его длина почти 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 и визуализируйте сцену. Трассировка фотонов теперь занимает больше времени, но результат лучше:

 

 

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

 

 

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

 

 

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

 

 

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

 

 

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

 

 

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

 

 

Это та же фотонная карта, но с использованием карты освещенности для расчета первичных отскоков:

 

 

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

 

 

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

 


Хостинг от uCoz