Mental ray 3.3 для 3ds max

Часть 1. Метод фотонных карт. Final Gathering


В первой части обзора рассматриваются основные методы, используемые mental ray при расчете освещения трехмерных сцен с учетом многократных переотражений света между объектами (Global Illumination) – метод фотонных карт (Photon map) и Final Gathering, а также некоторые новшества, появившиеся в mental ray версии 3.3 и имеющие непосредственное отношение к рассматриваемым методам.

Общий алгоритм расчетов с использованием GI

Общий алгоритм расчета освещения с использованием Global Illumination в mental ray может быть разделен на два больших этапа – light pass и view pass.

На первом этапе, light pass, происходит испускание фотонов от источников освещения, трассировка их столкновений с поверхностями объектов и создание фотонных карт для последующего использования. На втором этапе, view pass, выполняется испускание лучей из камеры через плоскость изображения в сцену, учитываются настройки антиалиасинга и производится отслеживание пересечений и переотражений этих лучей на заданную глубину для всех поверхностей трехмерных объектов в сцене. Для точек пересечений рассчитывается прямое освещение, затенение, отражения и преломления прозрачными поверхностями и учет диффузного освещения от других объектов при помощи созданных ранее фотонных карт и/или методом Монте-Карло. Метод Монте-Карло в mental ray получил специальное название – Final Gathering (FG), или "окончательный сбор". Рассчитанные освещенности и тени комбинируются и формируют финальное изображение – рендер трехмерной сцены.

Рассмотрим каждый из этапов более детально.

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

Фотонные карты

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

Расчет освещения с использованием фотонных карт состоит из следующих этапов:

1. Испускание фотонов

В соответствии с типом источника света (omni, spot, directional или area) определяются начальные направления испускания лучей. Каждому лучу присваивается определенное значение энергии, задаваемое в настройках источника. Именно благодаря последнему обстоятельству, лучи света и называют "фотонами". Другими словами, "фотоны" компьютерной графики не имеют ничего общего с фотонами из физики, а лишь отражают факт, что в GI "лучи света" обладают энергией. С другой стороны, фотоны, как и всякий геометрический луч, не имеют диаметра или радиуса, но имеют длину.

2. Трассировка фотонов

После испускания фотона источником, его траектория отслеживается до первого пересечения с поверхностью. В точке пересечения учитываются свойства материала, присвоенного трехмерному объекту. В частности, диффузные свойства и свойства отражения и преломления по коэффициентам, заданным в настройках материала. Дальнейшая судьба фотона определяется методом "Русской рулетки" с учетом свойств материала в месте столкновения – фотон может быть поглощен и на этом его путь заканчивается, диффузно отражен, отражен зеркально или преломлен прозрачной поверхностью.

Одним из важных требований mr, предъявляемых к материалам, является принцип физической корректности. Его суть состоит в том, что сумма коэффициентов диффузного и зеркального отражения и коэффициента преломления не должна превышать единицу. Только при выполнении этого условия "Русская рулетка" обеспечивает корректное рассеяние фотонов при взаимодействии с поверхностью.

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

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

3. Создание фотонной карты

В результате отслеживания столкновений фотонов получается фотонная карта, содержащая записи о столкновениях. Каждая запись имеет размер в 18 байт: 12 байт для хранения трехмерных координат столкновения, 4 байта для значения энергии фотона, 1 байт для направления падения фотона и 1 байт для хранения флагов и указателей, связывающих записи между собой.

"Сырая" фотонная карта, которая получается непосредственно после завершения трассировки фотонов, содержит записи в совершенно беспорядочном виде – в том порядке, как отслеживались фотоны, и представляет собой полный хаос. Для того, чтобы фотонную карту можно было эффективно использовать в дальнейших расчетах, записи в ней упорядочивают определенным образом. А именно, так, чтобы записи о соседних по координатам столкновений фотонах, располагались рядом. Тогда запись о каждом фотоне содержит указатели на записи о двух других столкновениях фотонов, самых близких к ней. Такая структура записей называется базой данных kdtree типа и позволяет эффективно осуществлять поиск фотонов, ближайших к данному в пределах заданного радиуса поиска.

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

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

4. Использование фотонной карты при рендеринге

На этапе рендеринга (второй этап – view pass) фотонная карта используется для учета вторичных переотражений света между объектами сцены. Возможны два способа такого учета – прямое освещение и вклад от фотонов, либо прямое освещение и комбинация вклада фотонов с Final Gathering.

В первом случае учет вклада фотонов выполняется расчетом освещения по заданному числу фотонов вблизи точки и/или радиусу сбора фотонов в соответствии с настройками рендера (параметр Maximum Num. Photons per Sample группы настроек Global Illuminations в 3 ds max). Такой способ дает физически корректный результат, но из-за ограничения на память не позволяет получать "гладкий" рендер для малых радиусов сбора фотонов. Кроме того, имеются трудности с "черными углами", обусловленные особенностями сбора фотонов вблизи границ и углов объектов.

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

Настройка фотонных карт

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

  • энергия фотонов;
  • количество фотонов, участвующих в оценке освещения – параметр Maximum Num. Photons per Sample;
  • радиус сбора фотонов вблизи точки – параметр Maximum Sampling radius;
  • общее количество фотонов фотонных карт (плотность фотонных карт) – Average GI Photons per Light в настройках рендера или количество фотонов в свойствах источников света.





Параметры настройки фотонных карт в mental ray для 3ds max, закладка Indirect Illumination

Существует основополагающая формула, используемая для оценки освещения в произвольной точке поверхности по заданному количеству фотонов:



Оценка освещения точки поверхности по заданному количеству фотонов

здесь

  • N – количество участвующих в оценке освещения фотонов;
  • Ei – энергии фотонов;
  • f – BRDF поверхности;
  • r – радиус сбора фотонов;
  • nv, ni – углы между направлениями расчета освещения и падения фотонов.

Из этой формулы следует несколько важных свойств.

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

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

2) N = (плотность фотонной карты в точке x) х pi х r ^2,
где

  • N – количество фотонов, собираемых для оценки освещения в точке x;
  • pi – число пи = 3.14;
  • r – радиус сбора фотонов

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

Из правила (2) вытекает ряд важных свойств, которые являются основными в практике настроек:

3а) увеличение плотности фотонной карты в n раз (или, что то же самое, увеличение размера фотонной карты в n раз) позволяет собирать в n раз больше фотонов при том же радиусе сбора или уменьшить радиус сбора того же количества фотонов в корень квадратный из n раз;

Пример:
Если при данной плотности фотонной карты вблизи точки собирается 100 фотонов в пределах площадки радиусом в 10 см, то увеличение размера фотонной карты в 4 раза позволяет:

  • либо собирать 400 фотонов на той же площадке радиусом в 10 см;
  • либо собирать 100 фотонов с площадки вдвое меньшего радиуса (5 см)

3б) если плотность фотонной карты неизменна, то увеличение/уменьшение радиуса сбора в n раз приводит к увеличению/уменьшению количества собираемых фотонов в n^2 раз.
Пример:
Если плотность фотонной карты такова, что 100 фотонов собирается с площадки радиусом 10 см, то увеличение радиуса сбора в два раза приведет к увеличению сбора фотонов в ее пределах в 4 раза, то есть в пределах площадки радиусом 20 см будет собрано 400 фотонов, а в пределах радиуса в 5 см – только 25 фотонов.

3в) если требуется увеличить/уменьшить число собираемых фотонов в n раз, то для этого необходимо:

  • либо увеличить/уменьшить плотность фотонной карты в n раз
  • либо увеличить/уменьшить радиус сбора фотонов в корень квадратный из n раз

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

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

В качестве примера рассмотрим свойства фотонной карты небольшой плотности для конкретной сцены. Установим в настройках, чтобы фотонная карта содержала 50 тысяч фотонов на источник света (их в сцене два), и будем исследовать при каком радиусе можно собрать 200 фотонов. Я устанавливаю начальное значение радиуса сбора в 1 см (что заведомо меньше, чем необходимо) и буду увеличивать радиус сбора, пока изображение не перестанет меняться. Значение радиуса, при котором изменения перестанут происходить и будет приблизительным фактическим радиусом сбора 200 фотонов. Чтобы не пересчитывать фотонную карту при каждом изменении радиуса, при первом просчете фотонная карта сохраняется в файл. В качестве ориентира можно использовать рендер с большим радиусом сбора:



Рендер с большим радиусом - 4 метра

Теперь устанавливаем маленький радиус и постепенно увеличивая его, находим минимальное значение, при котором рендер перестает меняться (становится идентичен рендеру с большим радиусом).



Начинаем с радиусом в 1 см и постепенно увеличиваем его

Найденное значение радиуса составляет приблизительно 44 см:



При радиусе сбора в 44 см рендер практически перестает меняться и становится идентичен рендеру с радиусом сбора 4 метра

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



Диагностический рендер, показывающий распределение плотности фотонов в сцене

Это так называемая false-color диаграмма, где каждому цвету (температуре) соответствует определенное значение плотности. Красный цвет – самая высокая плотность, синий – самая низкая, зеленый – промежуточная средняя плотность.

Теперь можно воспользоваться правилами (2) и (3а – 3в) для интерполяции фотонных свойств сцены. Например, если нужно чтобы 400 фотонов собиралось для оценки освещения точек трехмерной сцены с площадки радиусом не более 10 см, потребуется фотонная карта в 39 раз большего размера, чем текущая (50 000 фотонов), т.е. фотонная карта в 2 миллиона фотонов.



Рендер с фотонной картой в 2 миллиона фотонов, радиусом сбора 10 см и числом собираемых фотонов = 400

Хотя mental ray и позволяет не указывать в настройках радиус собираемых фотонов, его явное указание имеет целый ряд преимуществ. Во-первых, знание фактического радиуса сбора позволяет ориентироваться в точности вторичного освещения. Чем больше радиус сбора, тем больше размытость вторичных теней. Если радиус сбора фотонов превышает 10 см, тени вряд ли можно считать правильными.

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

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

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

Интерфейс настройки фотонных карт в mr 3.3 для 3ds max

В 3ds max 7 настроечные параметры фотонных карт собраны на закладке Indirect Illumination диалогового окна Render:



Окно настроек фотонных карт

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

  • Enable – разрешает или запрещает расчет фотонных карт для GI
  • Maximum Num. Photons per Sample – количество фотонов, собираемых вблизи каждой точки для оценки ее освещенности по формуле (1)
  • Maximum Sampling Radius – радиус сбора фотонов для оценки освещения точки поверхности. Радиус сбора фотонов может быть рассчитан автоматически, в этом случае радиус сбора составляет 1/10 радиуса всей сцены. Такой радиус сбора вряд ли это можно считать оптимальным в подавляющем большинстве случаев

Maximum Num. Photons per Sample и Maximum Sampling Radius работают по принципу конкуренции – если одно из условий выполняется раньше, второе игнорируется.

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

  • Enable – разрешает или запрещает расчет фотонных карт для каустики
  • Maximum Num. Photons per Sample – количество фотонов, собираемых вблизи каждой точки для оценки ее каустик-освещенности
  • Maximum Sampling Radius – максимальный радиус сбора каустик-фотонов
  • Filter – фильтр, регулирующий четкость каустики. В mr 3.3 появился новый фильтр в дополнение к коническому – Gauss
  • Opaque Shadow when Caustics are Enabled – еще одна новинка, позволяет включать или отключать прозрачность теней для типа mental ray Shadow Map при расчете каустики. В предыдущих версиях mr расчет каустики делал такие тени непрозрачными без вариантов

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



Настройка глубины трассировки для фотонов

Группа Trace Depth (или глубина трассировки фотонов) управляет максимальным количеством и типом столкновений, которые могут испытать фотоны GI и Caustic типа с поверхностями вдоль траектории распространения, и, в конечном итоге, длину траектории фотона. Max Reflections – максимальное число отражений фотона всех типов (т. е. диффузных и зеркальных), Max. Refractions – максимальное число преломлений фотонов прозрачными поверхностями, также в контексте типа фотонной карты – диффузных преломлений для GI и преломлений на идеальные углы для Caustic PM. Max. Depth – суммарное число рассеяний фотона, как отражений так и преломлений. Максимальное число рассеяний фотона не может превышать этой величины, поэтому, если сумма значений Max. Reflections и Max. Refractions больше Max. Depth, тип рассеяния для каждого фотона будет довольно случаен, если в сцене присутствуют как отражающие, так и прозрачные поверхности.

Группа Light Properties также несколько изменила свой вид и свойства, что вызвано нововведениями mr 3.3. Прежде всего, из общих свойств источников света исчезла настройка энергии фотонов. Теперь энергия фотонов должна настраиваться для каждого источника индивидуально. Точнее, для фотометрических источников энергия по умолчанию рассчитывается автоматически, а для всех остальных типов источников света энергию нужно настраивать вручную и индивидуально.

Другое нововведение – максимальное количество излученных источником фотонов подстраивается под заданную величину интенсивности источника. Если интенсивность выше, количество излученных фотонов больше и наоборот. Поэтому, в настройках света рассматриваемой панели говорится об Average, т.е. усредненном числе фотонов для каждого источника. Точное число излученных фотонов определяется с учетом как величины Average GI (Caustic) Photons per Light, так и с учетом интенсивности прямого света, заданное в настройках источника света.

Не следует также забывать и о той особенности mr, что указанное в настройках Average GI (Caustic) Photons per Light количество фотонов определяет число сохраненных в карте фотонов, а не число излученных источником фотонов. Истинное число излученных источником фотонов «подстраивается» так, чтобы в фотонной карте было сохранено указанное число фотонов с учетом заданной глубины трассировки. Истинное число излученных источником фотонов, а также, фактическое число сохраненных в картах фотонов можно узнать только из лога mental ray (информационное окно Rendering>mental ray message window).

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

Продолжая разговор о новшествах mr 3.3 и 3ds max 7 следует также отметить следующие из них:

  • улучшен расчет GI для стандартных материалов, он стал более аккуратен и основывается на цвете, свойствах отражения, прозрачности и tranclucency материала;
  • переработан Logarithmic Exposure Control (логарифмический контроль экспозиции освещения) и Pseudo Color Exposure Control, они теперь полностью совместимы с mr;
  • вывод рендера в файл типа HDRI также переработан и улучшен, данные файла теперь являются физически полностью корректными величинами и даже могут быть использованы для анализа величин освещения. Это радует, поскольку HDRI-вывод представляет реальную и корректную альтернативу управления экспозицией освещения при помощи Logarithmic Exposure Control – выводим рендер в HDRI формате и правим динамический диапазон освещения в HDRIShop.



Расчет GI только с фотонной картой. Размер карты около 25 миллионов фотонов, для оценки освещенности точек используется 11000 фотонов, собираемых с площадки радиусом не более 30 см. Размер фотонной карты максимален для расчета освещенности данной сцены под Windows XP

Final Gathering

Метод фотонных карт хотя и позволяет рассчитывать освещение физически корректно, очень редко может быть использован самостоятельно. Вызвано это тем, что для получения гладкого рендера требуется сохранить огромное число фотонов в карте, что далеко не всегда возможно из-за ограничений на память. Кроме того, расчет при помощи фотонных карт порождает нежелательный визуальный эффект, известный как «потемнение углов». Поэтому на практике для расчета вторичной освещенности трехмерной сцены в подавляющем большинстве случаев используется сочетание метода фотонных карт и метода Final Gathering (FG).

Final Gathering в переводе означает нечто вроде "окончательного сбора", что достаточно точно соответствует сути метода и его месту в арсенале средств расчета. Математически FG представляет собой не что иное, как метод Монте-Карло, используемый для численного интегрирования уравнений освещенности.

FG позволяет точно посчитать освещение практически для любых условий, но требует для расчетов гораздо больше времени, чем метод фотонных карт и, к тому же, его использование довольно затруднительно для просчета такого эффекта, как каустика или для многократных диффузных переотражений. Поэтому, в mental ray FG используется как "финишное" средство для расчета наиболее значимых по вкладу вторичных переотражений – первого отскока переотражений света поверхностями объектов.

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

FG обладает двумя важными особенностями.

Во-первых, расчет освещения методом FG выполняется не для всех видимых в камеру точек поверхностей, а только для некоторых, так называемых FG-точек, выбранных по определенному правилу. Для остальных точек освещение не рассчитывается, а интерполируется по рассчитанным освещенностям ближайших FG-точек. В этом смысле FG является просто способом ускорить расчет освещения методом Монте-Карло.

Во-вторых, Final Gathering рассчитывает не все диффузные вторичные отражения, а только первый отскок – когда свет однократно отразившись от какой-либо поверхности попадает в точку, видимую из камеры. Вторичные диффузные отражения света со второго отскока и выше FG не учитывает (не рассчитывает). FG может рассчитывать зеркальные отражения и преломления на произвольную, задаваемую в настройках рендера, глубину, если материал поверхности обладает ненулевыми свойствами зеркального отражения и преломления. Таким образом, если материал поверхности является чисто диффузным, FG должен использовать фотонную карту.

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

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

Таким образом, для расчета вторичного освещения комбинированным способом «фотонная карта + FG» требуется настроить как параметры фотонных карт, так и параметры FG.

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

В самом общем виде алгоритм расчетов FG включает следующие этапы.

1. Построение Grid сетки в растровом пространстве изображения

Все типы поверхностей в сцене (полигонального, NURBS и других типов) преобразуются к представлению треугольниками. Это так называемая триангуляция или тесселяция. Тип используемой триангуляции для FG – Grid, относительно равномерная сетка треугольников, то есть все треугольники вдоль одной изолинии поверхности имеют приблизительно одинаковый размер. Особенность Grid - триангуляции в том, что она выполняется с учетом изолиний поверхности и если в каком-то месте поверхности требуется более детальная сетка высокой плотности, то вставляется целая полоса треугольников нужного размера от края до края поверхности вдоль изолиний.

Результат этой стадии можно увидеть в логе mental ray (Rendering>mental ray message window) сразу после записей «computing final gather points», нечто вроде:

RCFG 0.2 info : depth #finalgather points RCFG 0.2 info : 0 3846 RCFG 0.2 info : ray type number RCFG 0.2 info : eye 12700

Для сцены с одним простым объектом легко можно заметить, что количество FG-точек и eye-лучей на этой стадии зависит от геометрии сцены, а не от разрешения изображения (которое в данном случае составляло 640x480 пикселей при фиксированном значении aa 1 луч на каждый пиксел).

2. Предварительная стадия расчета FG

Среди видимых в камеру вершин треугольных сеток всех поверхностей, построенных на предыдущем этапе, производится отбор тех из них, вторичная освещенность которых будет рассчитываться методом Монте-Карло. Так, если посмотреть на листинг лога mental ray message window, приведенный чуть выше, можно увидеть, что среди всех точек пересечения eye-лучей в количестве 12 700 было отобрано только 3 846 FG-точек.

Правило отбора точек состоит в следующем. Для каждой новой точки выполняется поиск "подходящих" ближайших точек, освещенность которых уже рассчитана методом Монте-Карло. Если такие точки есть, освещенность данной точки не вычисляется, а интерполируется. Если нет ни одной "подходящей" точки, освещенность данной точки рассчитывается методом Монте-Карло.

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

Сам механизм интерполяции освещения носит название irradiance gradient (градиент освещения) и предложен Gregory J. Ward etc. в статье "A ray tracing solution for diffuse interreflection" в 1998, а впоследствии усовершенствован им же в сотрудничестве с Paul S. Heckbert в статье "Irradiance Gradient".

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

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

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

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

Интересно то, что информация о сэмплирующих FG-лучах, используемых для расчета интегралов освещения методом Монте-Карло, может быть успешно использована и для расчета обоих типов градиентов освещения. В самом деле, каждый сэмплирующий луч характеризуется координатами пересечения с другой поверхностью, величиной освещения в точке пересечения и углом относительно нормали в точке поверхности, откуда он был испущен. Учитывая, что для FG - расчета одной точки используется до нескольких тысяч лучей, понятно что этой информации вполне достаточно, чтобы оценить изменение освещения в сцене для каждой FG - точки. Я не буду описывать сам механизм таких расчетов, поскольку он довольно специализирован и не связан непосредственно с обсуждаемой темой, а тем, кто интересуется данным вопросом, рекомендую обратиться к вышеуказанным статьям.

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

Очевидно, что у различных FG - точек радиусы влияния будут разными и зависит это от особенностей геометрии конкретной сцены.

Результатом предварительной стадии FG - расчетов является набор выбранных точек, освещенность которых рассчитана методом Монте-Карло. В идеале, такого набора вполне достаточно, чтобы интерполировать освещение в любой точке поверхности, видимой в камеру, с заданной величиной ошибки. Координаты FG - точек, их рассчитанная освещенность и величины градиентов освещения сохраняются в базу данных того же типа, что и фотонная карта (kd-tree) для последующего использования (интерполяции) при рендере. Расчет освещения FG - точек выполняется с учетом величины accuracy (Final Gather Samples в 3ds max), задаваемой в настройках FG. Величина accuracy определяет максимальное количество сэмплирующих лучей для расчета освещения методом Монте-Карло. Точки, полученные на этом этапе на диагностическом рендере в 3ds max 7 отображаются как точки зеленого цвета.

3. Рендеринг

На этом этапе выполняется испускание лучей из камеры и трассирование их до первого пересечения с поверхностью. В точке пересечения выполняется расчет прямого освещения точки, зеркальных относительно камеры преломлений и отражений (рейтресинг) и расчет вторичного освещения методом FG + фотонные карты. При этом вторичная освещенность большинства точек не рассчитывается, а интерполируется по рассчитанным на предыдущей стадии FG - точкам. Здесь в игру вступают такие настроечные параметры FG - расчета, как Final Gather Radius и Min. Radius.

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

Таким образом, увеличение Radius может приводить к повышению качества расчетов за счет увеличения количества участвующих в интерполяции FG-точек, но лишь до определенной степени. После некоторого предельного значения Radius качество интерполяции остается практически неизменным. По умолчанию, в mental ray величина Radius принята приблизительно как 1/10 величины радиуса сферы, охватывающей всю сцену.

С другой стороны, стремление разработчиков упростить рабочий интерфейс mental ray привело к тому, что Radius имеет и второе, не менее важное, назначение – его величина имеет самое прямое отношение к изменению плотности FG-точек. Чем больше Radius, тем меньше плотность FG - точек и наоборот.

Mental ray учитывает величину Radius на предварительной стадии, когда происходит отбор FG-точек. Если радиус излишне мал, он пытается увеличить плотность FG - точек так, чтобы в его пределах для любой видимой точки поверхности всегда оказалось хотя бы несколько FG-точек для интерполяции.

Таким образом, настраивая Radius, мы вынуждены балансировать между двумя противоположными возможностями. Увеличение Radius повышает качество интерполяции, но уменьшает плотность FG-точек. Уменьшение Radius повышает плотность FG-точек, но уменьшает количество точек, участвующих в интерполяции.

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

Есть сведения, что в следующей версии mental ray 3.4 функции параметра Radius будут разделены при помощи введения двух новых независимых настроечных параметров.

Min. radius принудительно заставляет mental ray использовать все FG - точки, которые попадают в его пределы. Регулируя Min. Radius можно до некоторой степени управлять сглаживанием освещения.

Хотя на предварительном этапе проводится серьезная работа по отбору и расчету FG-точек, далеко не все видимые в камеру точки поверхностей трехмерных объектов могут быть интерполированы по ним на этапе рендеринга. Все точки, которые рассчитываются методом Монте-Карло на этапе рендера, на диагностическом рендере показываются красным цветом. Основная причина возникновения такой ситуации – близость некоторых точек к границе объекта: если точка попадает достаточно близко к границе объекта, для нее может не найтись FG- точек для интерполяции, поскольку зона поиска "обрезается" границей поверхности.

Таким образом, настройка FG-расчета сводится, в основном, к настройке величин Samples и Radius. При этом рекомендуется использовать диагностический рендер для анализа распределения FG-точек. Правильная величина параметра Radius должна давать адаптивную картину распределения FG-точек – их плотность должна быть выше в тех местах сцены, где освещение меняется быстрее, а "красные" FG-точки должны быть преимущественно вблизи краев объектов.



Диагностический рендер FG-расчета. Радиус 10см, FG Samples 1000

Настройка величины accuracy (Final Gather Samples) определяет отсутствие «шума» на рендере. «Гладкое» его значение зависит от плотности фотонной карты и радиуса сбора фотонов, а также от величины FG Radius – чем он меньше, тем больше FG Samples потребуется для достижения гладкости рендера. Изменение Final Gather Samples также оказывает влияние на плотность FG-точек – чем выше количество Samples, тем выше плотность FG-точек.

Хочу особо подчеркнуть, что если фотонная карта настроена неправильно, то есть является излишне «пятнистой», то получить гладкий рендер даже сильным накручиванием accuracy, скорее всего, не удастся.

Интерфейс настройки расчета FG в mr 3.3


Интерфейс настройки параметров FG-расчета
Samples
количество лучей, или FG- лучей, используемых для расчета интеграла непрямого освещения точки.
Radius
параметр определяет радиус поиска FG-точек для интерполяции освещения данной точки поверхности и плотность FG-точек.
Min. Radius
при попадании FG-точки в пределы этого радиуса, она обязательно будет использована для интерполяции, вне зависимости от величины ошибки.
Radii in Pixels
новая настройка, позволяет устанавливать размер Radius в пикселях. Когда эта функция отключена, Radius измеряется в мировых единицах (world units – метры, сантиметры и т.д.). Возможность установки величины Radius в пикселях удобна в том отношении, что позволяет наглядно представить размер области поиска FG-точек для интерполяции. С другой стороны, установка величины радиуса в пикселах позволяет добиться изменения детализации с изменением расстояния: для близких к камере объектов радиус будет меньше в мировых единицах, чем для более удаленных объектов при одном и том же значении радиуса в пикселах.
Filter
новая возможность, позволяет усреднять значения освещенностей соседних FG-лучей, что приводит к сглаживанию рендера. Практическую значимость имеют величины от 0 до 4. Значение 0 отключает фильтрацию, при Filter=1 усредняется 9 соседних FG-лучей, при 2 – 25 лучей, 3 – 49 и при 4 – 81 луч.
Trace Depth
недиффузные преломления и отражения для FG-лучей в количестве, устанавливаемом Max. Reflections, Max. Refractions и Max. Depth = Max. Reflections + Max. Refractions.
Use Falloff (Limits Ray Distance)
средство оптимизации FG-расчетов, позволяет исключить из расчетов те FG-лучи, длина которых меньше или превышает величины, заданные в Start и Stop соответственно. Использование Use Falloff наиболее предпочтительно для расчета освещения открытых сцен или больших по размерам интерьеров, почти бесполезна для небольших интерьеров (жилых помещений и т. д.).

Оптимизация расчета

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

Второй способ относится к оптимизации расчетов FG, использующих GI фотонные карты. Суть его состоит в том, чтобы выполнить оценку освещения по фотонам в соответствии c настройками фотонной карты (количеством фотонов для оценки освещения, заданным в Maximum Num. Photons per Sample) и сохранить эти расчеты вместе с фотонной картой для последующего использования. Расчет выполняется по координатам фотонов, поскольку координаты рассчитываемых точек на этом этапе еще неизвестны. Во время рендера для каждой точки подбирается ближайший подходящий фотон и используется рассчитанное для него освещение. Таким образом, выигрыш в скорости должен получаться за счет того, что при каждом обращении к фотонной карте расчет освещения не выполняется, а берется его готовое значение из файла. Учитывая, что при FG расчетах количество лучей (и значит, количество обращений к фотонной карте) для каждой FG-точки может составлять до несколько тысяч, становится понятно, почему расчет с сохраненными расчетами освещения выполняется быстрее. Те, кто знаком с vRay, уловят аналогию с опцией convert to irradiance map в настройках фотонных карт этой программы.

На практике такая оптимизация достигается включением опции fast lookup в настройках расчета FG. При этом расчет фотонных карт несколько замедляется (незначительно), а объем фотонной карты увеличивается на 20% - 30%, поскольку сохранение рассчитанных освещенностей требует дополнительных 5 байт для каждой записи о фотонах в карте.

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



Расчет фотонная карта + FG

В следующей части обзора будут рассмотрены ambient occlusion, запекание текстур и новый шейдер SSS (subsurface scattering).

До встречи.

Дополнительно

Нашли ошибку на сайте? Выделите текст и нажмите Shift+Enter

Код для блога бета

Выделите HTML-код в поле, скопируйте его в буфер и вставьте в свой блог.