Настройка и расчет освещения в brazil r/s

Часть 2.
Практика расчета освещения

Введение

Рассмотрев в первой части назначение различных параметров brazil, перейдем к практической настройке освещения на примере конкретной сцены.



Regather: QMC + Global Photon Map

Начнем с настройки фотонных карт.

Известно, что вклад в освещенность точки от одного фотона рассчитывается как величина энергии этого фотона, поделенная на квадрат расстояния от него до рассчитываемой точки. Чем дальше фотон от точки, тем меньше его вклад. Полная освещенность точки будет определяться как сумма вкладов от всех фотонов, собираемых в пределах круга заданного радиуса вблизи точки. В расчетах также учитывается BRDF (Bidirectional Reflectance/Refractions Distribution Function), описывающая конкретные свойства материала поверхности, которой принадлежит рассчитываемая точка.

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

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

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

Правило №1:
(число собираемых фотонов) = (локальная плотность фотонной карты вблизи рассчитываемой точки) х (площадь сбора фотонов в круге некоторого радиуса).

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

Используя параметры brazil, правило №1 может быть переписано так:

Правило №2:
Photons in Estimate = (локальная плотность фотонной карты вблизи рассчитываемой точки) x pi x (Max Search Radius)^2

Параметр Photons in Estimate имеет смысл количества фотонов, собираемых для расчета освещенности точки, Max Search Radius - это радиус площадки сбора, (Max Search Radius)^2 - квадрат радиуса сбора, pi = 3.14.

Правило №2 хорошо тем, что позволяет по известным значениям двух параметров определять третий. Например, если известно значение Photons in Estimate и Max Search Radius, можно определить плотность фотонной карты, а, следовательно - ее размер. Если известна плотность фотонной карты и Photons in Estimate, можно узнать радиус сбора фотонов. Если известен радиус сбора и плотность фотонной карты, можно определить, сколько фотонов будет собрано.

А раз так, мы можем планировать параметры фотонной карты, в зависимости от поставленных перед рендером целей.

Целей таких может быть только две. Первая - получить просто "гладкий" рендер с равномерными переходами светотени, без видимых пятен. При этом точность вторичного освещения значения не имеет. Вторая - достичь точности рассчитываемой освещенности с одновременной гладкостью рендера. Эти цели позволяют определять дополнительные требования для величин Photons in Estimate и Max Search Radius, тогда плотность (размер) фотонной карты может быть спланирована при помощи вышеуказанного правила.

Итак, величина Photons in Estimate, прежде всего, влияет на точность, гладкость и время расчетов:

  • чем выше значение Photons in Estimate, тем точнее расчет освещенности, но только в том случае, если радиус сбора мал (3-10 сантиметров);
  • чем выше значение Photons in Estimate, тем более гладким будет рендер. Чем выше плотность фотонной карты, тем большее значение Photons in Estimate потребуется для достижения гладкости рендера;
  • чем выше значение Photons in Estimate, тем больше время расчетов.

На практике, конкретное значение Photons in Estimate для достижения гладкости рендера может быть получено пробным избирательным рендером "критической" части сцены, например - углов. Для фотонных карт малой плотности "гладкое" значение Photons in Estimate может лежать в пределах 100-800 фотонов, для средней плотности - 1000-1500 фотонов, для высокой плотности - 2000-2500 фотонов. На гладкость рендера большое влияние оказывают также энергии фотонов и количество их отскоков - повышение значений этих параметров приводит к увеличению значения Photons in Estimate для достижения гладкости.

Величина Max Search Radius также оказывает влияние на точность и гладкость расчетов: чем меньше Max Search Radius, тем точнее расчет (меньше размытость вторичного освещения). Уменьшение радиуса сбора, помимо повышения точности расчетов, приводит к увеличению "гладкого" значения Photons in Estimate и как следствие - к увеличению плотности фотонной карты. Это означает, что точность и, одновременно, гладкость рендера могут быть получены только на фотонных картах высокой плотности, когда размер фотонной карты составляет десятки миллионов фотонов.

Радиус сбора, позволяющий получать правильное вторичное освещение, лежит в диапазоне 3-10 сантиметров, в зависимости от наличия в сцене мелких объектов.

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

Все вышеизложенное может показаться сложным, однако на практике все очень просто. Рассмотрим вот такую сцену.




рис. 1. Экспериментальная сцена, вид из камеры в 3ds max

Сцена представляет собой закрытое помещение (длинную комнату в старинном стиле) с двумя окнами (второе окно находится слева и не видно в камеру). Освещается шестью источниками света. Два ИС - bLight Direct, имитируют освещение от солнца, Mult=5, испускают по 3000 фотонов c Power =1, спад интенсивности с расстоянием (decay) выключен, поскольку - это "солнце". Еще 2 ИС - bLight RectArea типа rectangle area, у которых включено как прямое освещение с Mult=5 000 000, так и испускание по 3000 фотонов c Power=2 для расчета непрямого освещения, спад интенсивности подчиняется обратному квадратичному закону, параметр Scale=1.2. Эти источники задвинуты внутрь помещения по границе карниза, их назначение - воспроизвести освещение от неба (skylight). Сам Skylight я не использую потому, что он не может испускать фотонов и сам по себе замедляет расчет освещенности. Еще два ИС - тоже bLight RectArea c Mult= 1 000 000, установлены снаружи, почти по внешней границе окон. У них включено только прямое освещение для подсветки оконного проема, фотоны не излучаются, спад интенсивности света также подчиняется обратному квадратичному закону (inverse square), Scale =1.

У всех источников света типа bLight RectArea задана следующая точность расчетов:




рис. 1a. Настройка точности расчета освещения bLight RectArea

Данная схема освещения не является единственно возможной (или даже лучшей), но вполне пригодна для освещения.
Единицы измерения в сцене - миллиметры. На все объекты назначен материал типа Brazil Basic Mtl с разными значениями Diffuse от почти белого до темно-серого (4 материала). Отсутствие цвета и текстур вызвано желанием как можно более отчетливо показать оттенки света и тени в сцене.
Сцену можно взять old-room.

Первое, что мы сделаем - убедимся, что отношение размера фотонной карты к количеству испущенных фотонов является постоянной величиной. Установим в свойствах источников света количество испускаемых фотонов равным 3000 (4 ИС х 3000 = 12 000 фотонов будет всего испущено). Теперь посчитаем фотонную карту. На размер фотонной карты влияет еще глубина трассировки диффузных фотонов (параметр Diffuse Depth), которую нужно выставить один раз и сохранять неизменной в течение тестов. Для ускорения расчетов использовались низкие значения antialiasing (-2 -2), рассчитывалось прямое освещение и непрямое только фотонными картами (bounces =1), Prepass Type = Map Size. Остальные параметры фотонной карты пока не существенны. Запускаем расчет и смотрим значение #Stored в Brazil: Photon Map Server.

При Diffuse Depth = 40 это отношение составляет 17, измерения проводились для количества испущенных фотонов в 12 000 (4х3000), 20 000 (4х5000), 40 000 (4х10 000) и 100 000 (4х 25 000). Величина отношения оставалась постоянной, испытывая незначительные колебания в сотых долях.

При Diffuse Depth = 10, отношение составляет 4.7, использовались те же значения испущенных фотонов.
Таким образом, определив это отношение при заданной глубине трассировки на фотонной карте низкой плотности, можно довольно точно прогнозировать размер фотонной карты при увеличении числа испущенных фотонов. Например, если увеличить число испущенных фотонов при Diffuse Depth = 40 до 500 000 (4 х 125 000), размер фотонной карты составит 17 х 500 000 = 8 500 000 фотонов. Хотите проверить? У меня ошибка прогноза не превысила 0.1 % (8489293).

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

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

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

Проделаем следующее. Установим количество испускаемых фотонов равным 3000 на каждый источник света, Diffuse Depth = 10, Photons in Estimate = 50, Max Search Radius = 2500 мм. Количество собираемых фотонов (Photons in Estimate) взято довольно малым, чтобы ускорить расчеты и быть уверенным, что 50 фотонов точно будут собраны. С этой же целью Max Search Radius установлен таким большим - 2.5 метра, чтобы не мешать сбору 50 фотонов. Мы уже говорили, что Photons in Estimate и Max Search Radius работают по принципу конкуренции - если одно из условий выполнится раньше, второе будет проигнорировано. При текущих настройках велика вероятность собрать 50 фотонов раньше, чем будет достигнут предел по радиусу сбора в 2.5 метра. Фактический радиус сбора будет гораздо меньше. Собственно, его значение мы и будем измерять.

Обязательно нужно выставить сохранение фотонной карты в файл при первом ее просчете, bounces=1 и проследить, чтобы рассчитывался как прямой свет, так и непрямое освещение (Direct Illumination Enable и Indirect Illumination Enable в Luma Server). Теперь запустим расчет. После его завершения включим загрузку фотонной карты из файла и выключим расчет прямого освещения. Теперь VFB будет отображать при расчете только фотонную карту. Вот как она выглядит сейчас при низких настройках антиалиасинга.




рис. 2. Фотонная карта, расчет прямого освещения выключен

Чтобы убедиться в том, что плотность фотонной карты и радиус сбора позволяют собирать 50 фотонов в любой точке сцены, сделаем две вещи. Во-первых, переключим Estimator в режим Analysis и выполним рендер. Отсутствие красного цвета и его оттенков однозначно говорит о том, что в каждой точке сцены собрано 50 фотонов.




рис. 3. Рендер сцены в режиме Analysis подтверждает достаточность радиуса для сбора 50 фотонов во всех точках изображения

Во-вторых, можно уменьшить радиус сбора до 2 метров и снова выполнить рендер, переключив Estimator в режим Advanced. Если вид отрендеренного изображения не изменится по отношению к рендеру с радиусом сбора 2.5 метров, это тоже является подтверждением достаточности радиуса, а также и достаточности радиуса в 2 метра для сбора 50 фотонов. Если бы это было не так, радиус пришлось бы увеличить.

В данной сцене при радиусе сбора в 2 метра изображение ничуть не изменилось. Будем продолжать постепенно уменьшать радиус сбора до тех пор, пока рендер не начнет изменяться. Этот процесс потребует некоторой внимательности, терпения и немножко опыта. Значение Max Search Radius, при котором рендер начинает изменяться нужно определить по возможности тщательнее и лучше - для разных значений Photons in Estimate, например еще и для 100 собираемых фотонов. Очень помогает контрольный рендер сцены в режиме Analysis. В нашей сцене я определил радиус сбора, при котором начинаются изменения рендера, в 317 миллиметров для 50 фотонов и 448 миллиметров для сбора 100 фотонов.

А вот и подсказка. Если достаточно точно определено первое значение радиуса, его можно использовать для предсказания другого радиуса сбора для иного количества фотонов при той же фотонной карте. Например, если сбор 50 фотонов происходит в пределах 317 миллиметров, то сбор 100 фотонов (то есть вдвое большего их числа) скорее всего, будет происходить в пределах 317 х (корень квадратный из двух) = 448 миллиметров. Если собирать 200 фотонов, то сбор, скорее всего, будет происходить в пределах 317 х (корень квадратный из 4) = 634 миллиметра и т.д.

А вот и подсказка. Если достаточно точно определено первое значение радиуса, его можно использовать для предсказания другого радиуса сбора для иного количества фотонов при той же фотонной карте. Например, если сбор 50 фотонов происходит в пределах 317 миллиметров, то сбор 100 фотонов (то есть вдвое большего их числа) скорее всего, будет происходить в пределах 317 х (корень квадратный из двух) = 448 миллиметров. Если собирать 200 фотонов, то сбор, скорее всего, будет происходить в пределах 317 х (корень квадратный из 4) = 634 миллиметра и т.д.

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

Если плотность фотонной карты увеличивается в n раз, то и величина Photons in Estimate увеличится в n раз при одном и том же радиусе.
Эти свойства напрямую следует из описанного выше правила №2, связывающего количество собираемых фотонов, плотность фотонной карты и радиус сбора.




рис. 4. Так выглядит фотонная карта при радиусе сбора в 317 миллиметров, красные пятна только начинают проявляться в некоторых местах




рис. 5. Рендер в режиме Analysis для сбора 100 фотонов при радиусе 448 мм

Итак, по измеренному фактическому наибольшему радиусу сбора определим теперь величину наименьшей плотности фотонной карты: (Photons in Estimate)/(pi* Max Search radius^2) => 50 / (3.14*317*317) = 0,000159 фотона на квадратный миллиметр или 0,0159 фотона на квадратный сантиметр или 159 фотонов на квадратный метр. Еще раз обращаю внимание, что это - минимальная плотность фотонной карты. Во многих других местах сцены плотность фотонной карты будет выше.

Также, очень полезно ознакомиться с "профилем" плотности фотонной карты - как распределена плотность фотонной карты по разным точкам поверхностей в сцене. Сделать это легко, достаточно выполнять рендер в режиме Analysis с радиусом сбора, меньшим, чем нужно для количества фотонов, заданного в Photons in Estimate. Например, для 100 фотонов можно выполнять рендер с радиусом в 300 мм. Вот что увидим.




рис. 6. Так выглядит "карта" распределения плотности фотонной карты при радиусе сбора в 300 мм.

Теперь мы уже довольно много знаем о нашей фотонной карте, пора посчитать значение Photons in Estimate, при котором будет получаться гладкий рендер. Для этого будем постепенно увеличивать Photons in Estimate, начиная с 200, и последовательно выполнять рендер выбранной части изображения. Закончим, когда будет получаться гладкий рендер. Позволю себе предположить, что такой "критической" частью изображения является угол напротив камеры, его и будем считать. Включаем Selected buckets mode, Size = 64, aa 1 3, низкое значение контраста для антиалиасинг, расчет Direct Illumination, bounce=2 (режим regather, при котором первый отскок считает QMC), view rate=25, Photons in Estimate=200, Max Search Radius = 634 мм или для большей верности, 650 мм и Estimator=Advanced. Жмем Render и выбираем в сетке buckets, накрывающие угол. Через 6 минут 20 секунд получаем следующее:




рис. 7. Угол при Photons in Estimate=200,
радиус сбора 650 мм




рис. 8. Угол при Photons in Estimate=300, радиус
сбора 780 мм, время расчета 7 минут 40 секунд




рис. 9. Угол при Photons in Estimate=100, радиус
сбора 450 мм, время расчета 4 минуты 40 секунд

При ближайшем рассмотрении оказывается, что Photons in Estimate=200 вполне достаточно для получения гладкого рендера, при этом сбор 200 фотонов выполняется с площадки радиусом не более 65 см, а в более плотных местах фотонной карты и при меньшем радиусе. Конечно же, при таком большом радиусе сбора говорить о точности вторичного освещения говорить не приходится. Повысим view rate до 30 для избавления от шума и выполним рендер всей сцены.




рис. 10. Финальный рендер изображения сцены размером 800х600 пикселей с фотонной картой низкой плотности. Время - 4 часа 50 минут на Athlon XP@3200

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

Прежде всего, для получения гладкости рендера с фотонной картой высокой плотности, следует ориентироваться на значение Photons in Estimate в 2000 фотонов. Эта величина может оказаться несколько иной для нашей сцены, тем не менее, 2000 - это хорошее начало.

Для получения точности теней радиус сбора должен лежать в диапазоне 3-10 сантиметров. Выбрав 6, мы обеспечим себе некоторый запас, если потребуется увеличить Photons in Estimate. Теперь, используя правило №2, можно спрогнозировать необходимую минимальную плотность фотонной карты, которая обеспечит сбор 2000 фотонов с площадки радиусом не более 6 сантиметров. Требуемая плотность составляет 0.177 фотонов на квадратный миллиметр, или 17.7 фотонов на квадратный сантиметр, или 176 838 фотонов на квадратный метр.

Вспомним, что для фотонной карты низкой плотности минимальная плотность составляла 159 фотонов на квадратный метр при 12 000 фотонов, испущенных от источников света. Отношение плотностей составляет 176 838/159 = 1112.2
Именно в такое количество раз нужно увеличить объем старой фотонной карты и в такое же число раз - количество фотонов, испускаемых от источников света. После элементарного перемножения, получаем число фотонов, которое должно быть испущено равным 13 346 264, или приблизительно 3 337 000 фотонов на один источник света (их у нас 4 в сцене). Прогнозируемый размер фотонной карты составит 4.7*13 346 264 = 62 727 440 фотонов. Это гораздо больше, чем может позволить операционная система Windows с ее 2-3 гигабайтами доступной для адресации памяти. Ориентироваться нужно на цифру в 30 миллионов фотонов, не более. Поэтому наиболее подходящим значением радиуса сбора будет не 6, а 9 сантиметров.

Повторив все расчеты для радиуса сбора в 9 сантиметров, получаем: минимальная плотность фотонной карты = 78 595 фотонов на квадратный метр, отношение плотностей 78 595/159 = 494.31, количество фотонов от ИС составит 5 931 700 или 1 483 000 фотонов на один ИС, прогнозируемый размер фотонной карты 5 931 700*4.7 = 27 878 990.
Подставив эти значения в настройки источников света, позволим brazil рассчитать фотонную карту. Расчет в brazil показывает, что размер фотонной карты составил 27 886 005 фотонов (756 мб.), что очень близко к прогнозу. А вот так выглядит фотонная карта в режиме Analysis, Photon in Estimate = 2000, Max Search Radius = 9 см:




рис. 11. Фотонная карта с новыми настройками в режиме Analysis.

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




рис. 12. Так выглядит фотонная карта высокой плотности в обычном (Advanced) режиме, расчет прямого освещения отключен.

Теперь осталось выяснить истинное значение Photons in Estimate, при котором достигается гладкость для такой плотности. Опять будем выполнять избирательный рендер области угла, но теперь добавим еще один bucket, из области полки с книгами, где есть покраснение. Начнем с 1500 фотонов и будем последовательно повышать это значение с шагом в 200 фотонов, если потребуется. Включаем прямое освещение, bounces=2, view rate = 27, aa = 1 2, Photons in Estimate = 1500, Max Search Radius = 90 мм, фотонная карта грузится из файла.




рис. 13. Избирательный рендеринг критических областей сцены показывает, что 1500 фотонов вполне достаточно для получения гладкости изображения (угол и часть книжной полки слева). Время рендера трех buckets составило 50 минут, всего таких buckets в сцене около 120, поэтому оценочное время всего рендера составляет 34 часа.

Как показывает пробный рендер, 1500 фотонов вполне достаточно для гладкости. Поэтому именно это значение и можно использовать для расчета финального изображения. Уменьшение Photons in Estimate с 2000 до 1500 означает, что фактический радиус сбора уменьшится. Уменьшение составляет (почему - мы уже обсуждали выше) корень квадратный из (2000/1500) = 1.155, а новый радиус равен 90/1.155 = 77.94 или приблизительно 78 миллиметров.
Теперь можно выполнить рендер, если 34 часа счета вас не пугают :).

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

Можно понизить multiplier у ИС и добавить в комнате еще один ИС с небольшой интенсивностью, прямо позади камеры так, чтобы он светил в направлении угла. Таким образом, можно будет "вытянуть" углы и убрать засвет.

Я сделаю немного по-другому. Оставлю источники света, как есть, изменю только их multiplier и увеличу количество диффузных отскоков до 40. Проделав все необходимые расчеты для фотонной карты, я получил следующее.




рис. 14. Финальный рендер с фотонной картой высокой плотности. Время расчета - 37 часов

Хочу привести еще один, несколько своеобразный способ расчета освещения, представляющий собой разновидность regather. Этот способ основывается на уникальной особенности brazil, позволяющей выполнить рендер фотонной картой, но со сглаживанием, типичным для QMC.

Для того чтобы рассчитать изображение таким способом нужно сначала просчитать фотонную карту в файл. Для примера будем использовать все ту же фотонную карту низкой плотности. Затем, нужно выставить загрузку фотонной карты из файла, включить расчет прямого освещения и режим regather (bounces=2). Но, в настройках Indirect Illumination Luma Server, отключить все типы источников света, оставив только Enable, вот так:




рис. 15

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




рис. 16. Если сравнить это изображение с изображением на рис. 10, то хорошо видно, что оно темнее - это подтверждение того, что первый отскок не был рассчитан QMC. Кроме того, время рендера составило 2 часа 57 минут, что почти на 2 часа меньше, чем с расчетом первого отскока

Можно назвать этот способ "фотонным рендером с QMC-сглаживанием", поскольку вторичное освещение здесь получено только из фотонной карты. Если использовать этот способ для финальных рендеров, нужно будет либо увеличивать интенсивность освещения, либо воспользоваться инструментами brazil:ColorExposure




рис. 17. Тот же рендер, но после обработки инструментами Color Exposure прямо в окне VFB: Exposure = 1.2, Gamma = 1.4, White Point = 1.3

То есть, учитывая скорость и качество расчетов, можно с полным основанием утверждать, что этот метод является вполне "рабочим".

Таким образом, мы полностью рассмотрели один из способов расчета изображений в brazil - regather, при котором первый диффузный отскок рассчитывается методом QMC, остальные - фотонной картой для случая малой и высокой плотности.

Расчет освещения при помощи только QMC

После фотонных карт настройка QMC-расчета кажется простой и легкой. Все, что нужно определить - это антиалиасинг (группа Image Sampling Control), Shade rate (группа Luma Server>Global Illumination), view rate (количество сэмплов для расчета первого диффузного отскока) и sec. rate (количество сэмплов для расчета более глубоких отскоков), а также - bounces (глубина трассировки сэмплов).

Общий алгоритм поиска настроек таков. Сначала, при низких значениях aa и view rate, обеспечивающих быстрый предварительный расчет, ищем приемлемую величину глубины трассировки (bounces), оценивая освещение просчитанного рендера. Увеличение числа просчитываемых отскоков увеличивает освещенность сцены и реалистичность теней. Затем выполняем избирательный рендер частей сцены, чтобы определить величину view rate, при которой не будет шума на изображении. Значение sec. rate можно принимать равным половине view rate. Выполняем финальный рендер.

Для нашей сцены я нашел следующие настройки: aa 1 3 с Low Contrast = 10, Shade Contrast -3 0 c величиной Contrast = 10, view rate = 45 и sec. rate = 20, bounces = 5, фотонные карты отключены. Настройки источников света оставлены те же, что использовались при расчете фотонных карт.

После рендеринга получаем:




рис. 18. Изображение получено расчетом освещения методом QMC

По качеству рассчитанного освещения рендер идентичен расчету с фотонной картой высокой плотности. А вот время расчета составило 17 часов, то есть, почти вдвое меньше. Вообще, движок brazil QMC достоин восхищения, мне редко приходилось встречать настолько мощную программу вычислений. Судите сами, для расчета изображения QMC в данном случае должен просчитать, в соответствии с настройками антиалиасинга и количеством сэмплов для расчета вторичных отскоков, минимум (2 х 45 х 20 х 20 х 20 х 20)/3 = 4 800 000 и максимум (8 х 45 х 20 х 20 х 20 х 20) = 57 600 000 лучей для каждого пикселя! Учитывая, что все эти лучи действительно просчитываются, поскольку в настройках рендера отсутствуют всякие следы интерполяции и отбора сэмплов, 17 часов - это очень быстро.

Таким образом, расчет сцен при помощи QMC выглядит более предпочтительным, чем расчет с фотонной картой высокой плотности - возни с настройками гораздо меньше, а расчет при одинаковом качестве выполняется быстрее.

Расчет освещения фотонными картами

Под рендером фотонными картами подразумевается расчет вторичного освещения только фотонными картами (bounces=1), плюс прямое освещение. Для достижения гладкости изображения используется размывание фотонной карты увеличением количества собираемых фотонов в Photons in Estimate и соответствующим увеличением радиуса сбора. Это самый быстрый и самый неточный способ расчета освещения в brazil.

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

Я знаю, что плотность моей фотонной карты такова, что Photons in Estimate=200 собирается в радиусе максимум 65 см. Но при таком числе фотонов рендер получается "пятнистым", так что необходимо размыть фотонную карту. Для этого вполне достаточно Photons in Estimate=1600, радиус сбора должен быть не меньше (650 мм х корень квадратный из отношения (1600/200)) = 1838.5 мм, поэтому я установил величину Max Search Radius = 2500 мм (можно меньше, но не ниже 2 метров). Фотонная карта теперь выглядит так:




рис. 19. Размытая фотонная карта, прямое освещение выключено




рис. 20. Финальный рендер с прямым освещением. Время расчета - 51 минута

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

Использование для этого метода расчета фотонной карты высокой плотности менее пригодно из-за ограничения на максимальное значение Photons in Estimate в 10 000 фотонов. Такое ограничение может не позволить достичь приемлемой степени размытия фотонной.




рис. 21. Использована фотонная карта предельной плотности. Время расчета - 1 час 26 минут. Ограничение Photons in Estimate 10 000 фотонов не позволяет достичь нужной степени размывания фотонной карты

Снова будем использовать фотонную карту малого объема, но увеличим ее плотность в 20 раз. Для этого поднимем число испускаемых источниками света фотонов с 3000 до 60 000 для каждого. Это позволит собирать на для точек поверхностей по 4000 фотонов с площадки радиусом не более 65 см. Увеличим Photons in Estimate до 7000, а Max Search Radius до 1500 мм.




рис. 22. Фотонный рендер с картой средней плотности

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

Заключение

Мы рассмотрели основные методы расчета освещения в brazil. Если говорить о приоритетах, то по соотношению время/качество, на первое место я бы поставил regather с фотонной картой низкой плотности, на второе - QMC, "фотонный рендер" - на третье. Использовать regather с фотонной картой высокой плотности не рекомендую из-за высокой стоимости расчетов, его вполне может заменить QMC. По крайней мере, в текущей версии brazil.

Пока все. Если есть вопросы - милости прошу в конференцию.

5 ноября 2004 Г.

brazil r/s. 2.

brazil r/s

2.

brazil, .



Regather: QMC + Global Photon Map

.

, , . , . , . BRDF (Bidirectional Reflectance/Refractions Distribution Function), , .

, . , . , ().

, . , , , . , : , , .

, . () , :

1:
( ) = ( ) ( ).

, . . , . , - . , ( - ), . , .

brazil, 1 :

2:
Photons in Estimate = ( ) x pi x (Max Search Radius)^2

Photons in Estimate , , Max Search Radius - , (Max Search Radius)^2 - , pi = 3.14.

2 , . , Photons in Estimate Max Search Radius, , , - . Photons in Estimate, . , , .

, , .

. - "" , . . - . Photons in Estimate Max Search Radius, () .

, Photons in Estimate, , , :

  • Photons in Estimate, , , (3-10 );
  • Photons in Estimate, . , Photons in Estimate ;
  • Photons in Estimate, .

, Photons in Estimate "" , - . "" Photons in Estimate 100-800 , - 1000-1500 , - 2000-2500 . - Photons in Estimate .

Max Search Radius : Max Search Radius, ( ). , , "" Photons in Estimate - . , , , , .

, , 3-10 , .

- , , . . , , , , . , , brazil. , .

, . .




. 1. , 3ds max

( ) ( ). . - bLight Direct, , Mult=5, 3000 c Power =1, (decay) , - "". 2 - bLight RectArea rectangle area, Mult=5 000 000, 3000 c Power=2 , , Scale=1.2. , - (skylight). Skylight , . - bLight RectArea c Mult= 1 000 000, , . , , (inverse square), Scale =1.

bLight RectArea :




. 1a. bLight RectArea

( ), .
- . Brazil Basic Mtl Diffuse - (4 ). .
old-room.

, - , . 3000 (4 3000 = 12 000 ). . ( Diffuse Depth), . antialiasing (-2 -2), (bounces =1), Prepass Type = Map Size. . #Stored Brazil: Photon Map Server.

Diffuse Depth = 40 17, 12 000 (43000), 20 000 (45000), 40 000 (410 000) 100 000 (4 25 000). , .

Diffuse Depth = 10, 4.7, .
, , . , Diffuse Depth = 40 500 000 (4 125 000), 17 500 000 = 8 500 000 . ? 0.1 % (8489293).

, , . , , , - .

, , - . .

, .

. 3000 , Diffuse Depth = 10, Photons in Estimate = 50, Max Search Radius = 2500 . (Photons in Estimate) , , 50 . Max Search Radius - 2.5 , 50 . , Photons in Estimate Max Search Radius - , . 50 , 2.5 . . , .

, bounces=1 , , (Direct Illumination Enable Indirect Illumination Enable Luma Server). . . VFB . .




. 2. ,

, 50 , . -, Estimator Analysis . , 50 .




. 3. Analysis 50

-, 2 , Estimator Advanced. 2.5 , , 2 50 . , .

2 . , . , . Max Search Radius, - Photons in Estimate, 100 . Analysis. , , 317 50 448 100 .

. , . , 50 317 , 100 ( ) , 317 ( ) = 448 . 200 , , , 317 ( 4) = 634 ..

. , . , 50 317 , 100 ( ) , 317 ( ) = 448 . 200 , , , 317 ( 4) = 634 ..

n , , n. .

n , Photons in Estimate n .
2, , .




. 4. 317 ,




. 5. Analysis 100 448

, : (Photons in Estimate)/(pi* Max Search radius^2) => 50 / (3.14*317*317) = 0,000159 0,0159 159 . , - . .

, "" - . , Analysis , , , Photons in Estimate. , 100 300 . .




. 6. "" 300 .

, Photons in Estimate, . Photons in Estimate, 200, . , . , "" , . Selected buckets mode, Size = 64, aa 1 3, , Direct Illumination, bounce=2 ( regather, QMC), view rate=25, Photons in Estimate=200, Max Search Radius = 634 , 650 Estimator=Advanced. Render buckets, . 6 20 :




. 7. Photons in Estimate=200,
650




. 8. Photons in Estimate=300,
780 , 7 40




. 9. Photons in Estimate=100,
450 , 4 40

, Photons in Estimate=200 , 200 65 , . , . view rate 30 .




. 10. 800600 . - 4 50 Athlon XP@3200

, , - , . , . , .

, , Photons in Estimate 2000 . , , 2000 - .

3-10 . 6, , Photons in Estimate. , 2, , 2000 6 . 0.177 , 17.7 , 176 838 .

, 159 12 000 , . 176 838/159 = 1112.2
- , . , , 13 346 264, 3 337 000 ( 4 ). 4.7*13 346 264 = 62 727 440 . , Windows 2-3 . 30 , . 6, 9 .

9 , : = 78 595 , 78 595/159 = 494.31, 5 931 700 1 483 000 , 5 931 700*4.7 = 27 878 990.
, brazil . brazil , 27 886 005 (756 .), . Analysis, Photon in Estimate = 2000, Max Search Radius = 9 :




. 11. Analysis.

, ! , , , 2000 . , , . , . , , , . , .




. 12. (Advanced) , .

Photons in Estimate, . , bucket, , . 1500 200 , . , bounces=2, view rate = 27, aa = 1 2, Photons in Estimate = 1500, Max Search Radius = 90 , .




. 13. , 1500 ( ). buckets 50 , buckets 120, 34 .

, 1500 . . Photons in Estimate 2000 1500 , . ( - ) (2000/1500) = 1.155, 90/1.155 = 77.94 78 .
, 34 :).

. , , , (, ). " " , - . .

multiplier , , . , "" .

-. , , multiplier 40. , .




. 14. . - 37

, , regather. brazil, , , QMC.

. . , , regather (bounces=2). , Indirect Illumination Luma Server, , Enable, :




. 15

, QMC , . ( , ):




. 16. . 10, , - , QMC. , 2 57 , 2 ,

" QMC-", . , , brazil:ColorExposure




. 17. , Color Exposure VFB: Exposure = 1.2, Gamma = 1.4, White Point = 1.3

, , , "".

, brazil - regather, QMC, - .

QMC

QMC- . , - ( Image Sampling Control), Shade rate ( Luma Server>Global Illumination), view rate ( ) sec. rate ( ), - bounces ( ).

. , aa view rate, , (bounces), . . , view rate, . sec. rate view rate. .

: aa 1 3 Low Contrast = 10, Shade Contrast -3 0 c Contrast = 10, view rate = 45 sec. rate = 20, bounces = 5, . , .

:




. 18. QMC

. 17 , , . , brazil QMC , . , QMC , , (2 45 20 20 20 20)/3 = 4 800 000 (8 45 20 20 20 20) = 57 600 000 ! , , , 17 - .

, QMC , - , .

(bounces=1), . Photons in Estimate . brazil.

. , . ( ), , .

, , Photons in Estimate=200 65 . "", . Photons in Estimate=1600, (650 (1600/200)) = 1838.5 , Max Search Radius = 2500 ( , 2 ). :




. 19. ,




. 20. . - 51

, . . , , . , , - . , " ", , .

- Photons in Estimate 10 000 . .




. 21. . - 1 26 . Photons in Estimate 10 000

, 20 . 3000 60 000 . 4000 65 . Photons in Estimate 7000, Max Search Radius 1500 .




. 22.

, , " " .

brazil. , /, regather , - QMC, " " - . regather - , QMC. , brazil.

. - .