Продолжение
.................................................
Выключаем расчет GI у VRay и начинаем экспериментировать с настройками интенсивности, выполняя рендеры только с прямым освещением и регулируя Multiplier у ИС. Для данной сцены я остановился на следующих значениях: для Target Direct - 3, для VRayLight - 5 и белый Color для обоих (255, 255, 255). При настройке интенсивности света также с самого начала использовался экспоненциальный контроль экспозиции из VRay: Color mapping, тип - HSV Exponential, Dark Multiplier =1.6, Bright multiplier =1, Affect background off.
рис. 04. Так выглядит сцена с настроенным прямым освещением.
Экспоненциальный контроль хорош тем, что позволяет убирать засветы в сильно освещенных местах. В этой сцене я хочу воспроизвести ощущение достаточно яркого солнечного дня, в результате получается засвет в области крыши при приемлемой освещенности остальной сцены. Проблему помогает решить экспоненциальный контроль освещения. Вообще, необходимость в контроле засветов/затемнений вызвана тем, что современные рендеры рассчитывают физически корректные значения интенсивностей, которые далеко не всегда укладываются в "прокрустово ложе" стандартной модели RGB.
рис. 05. Параметры группы Color mapping помогают управлять экспозицией освещения.
Всего имеется три типа контроля: Linear multiply (линейный), Exponential (экспоненциальный), HSV exponential (экспоненциальный с сохранением насыщенности цвета). Различие между Exponential и HSV exponential состоит в насыщенности тонов после корректировки, при использовании Exponential изображение получается более "сдержанным", блеклым. На последующих этапах, после расчета фотонных карт и irradiance map, возможно, потребуется дополнительно подкорректировать освещение. Это вполне можно выполнить таким же образом и без пересчета карт.
Настройка фотонных карт
Для расчета освещенности выбран метод irradiance map + photon map. Сделано это в силу следующих причин: фотонная карта обеспечивает корректный и быстрый результат, карта освещенности (irradiance map) также обеспечивает скорость и при должной настройке - качество рендера. Преимущества такого метода достаточно подробно обсуждались в первой части.
Начнем с настройки фотонных карт. Прежде всего, на закладке VRay: Indirect Illumination выставляем следующие параметры:
рис.06. Настраиваем фотонную карту
Сейчас для первичного отскока выбран метод Global photon map с целью отладки фотонной карты. Позже, когда фотонная карта будет готова, я буду использовать Irradiance map.
Значение Secondary bounces>Multiplier установлено в максимальном значении = 1, по причине большого размера сцены и наличия труднодоступных участков для фотонов. По этой же причине значение глубины трассировки фотонов, Bounces, установлено в 20 против 10 по умолчанию.
Отключены Refractive GI caustics и Reflective GI caustics, поскольку я не планирую рассчитывать каустик-эффекты от отраженного диффузного освещения.
Самое главное, что нужно теперь определить - это количество излучаемых источниками света фотонов (subdivs). Оно должно быть достаточно большим, чтобы обеспечить требуемое качество изображения и достаточно малым, чтобы обеспечить максимальную для данных конкретных условий скорость расчета. В идеале, чем выше плотность фотонной карты, тем меньше радиус сбора (Search distance - далее SD) фотонов и тем качественнее фотонная карта. На практике же приходится учитывать временной фактор расчетов и ограничения операционной системы на память (1.5 Гб минус память на геометрию и материалы, помните?). Поэтому, разумный выбор SD и подгонка плотности фотонной карты под него - главная стратегия на этом этапе.
Критерием для выбора подходящего значения SD является анализ самой сцены. Если, например, в сцене присутствует важный хорошо видимый объект, передача светотени которого будет определяющей, выбор SD стоит привязывать к нему - SD должен быть таким, чтобы обеспечить точность передачи тени возле этого объекта. Если важного объекта нет, SD может быть выбран, исходя из размеров сцены и используемых единиц измерения (SD измеряется в установленных для сцены единицах). Поскольку в нашей сцене важных объектов нет, я предположил, что SD в пределах 50-150 миллиметров будет приемлемым, и остановился на прикидочном значении SD=100. Выбор SD позволяет сразу же определить и Max. density (разрешение фотонной карты, или ее "сжатие", далее - MD), так как между ними существует связь. Очевидно, что SD не может быть меньше MD, поскольку тогда в пределах SD не окажется ни одного фотона. Разработчики рекомендуют соотношение между SD и MD в пределах 2-6, то есть SD=MD*2…6, которым мы и воспользуемся. Обойтись вообще без MD, то бишь использовать для него нулевое значение (фотонную карту полного разрешения) не удастся, поскольку нам нужно излучить довольно большое количество фотонов, а ограничения на оперативную память не позволят этого сделать. Выбираем MD =100/6=15, в отношении величины MD всегда нужно стремиться к наименьшим из возможных значениям. Теперь рассчитаем четыре фотонных карты с разными значениями subdivs для источников света: для 3000, 5000, 7000 и 8000 subdivs на каждый. Каждую фотонную карту обязательно сохраняем в отдельный файл.
рис.07 Параметры фотонной карты
Параметры фотонной карты остаются неизменными, меняются лишь значения subdivs для источников света. Перед расчетом можно еще отключить генерацию caustic photons у источников света и у объектов (поскольку расчет каустик-эффектов от прямого освещения в этой сцене также не планируется) и убедиться в свойствах объектов, что для них установлены Generate GI/Receive GI.
рис. phot_map#3. Так выглядит фотонная карта для 3000 subdivs плюс прямое освещение.
Статистика фотонной карты:
subdivs 3000 3000 (первый и второй источники света - Target Direct и VRayLight, наше Солнце и Небо
;
излучено максимум: 18 000 000 фотонов;
сохранено в картах фотонов: 5 635 989;
потребовался объем памяти 516.4 мб;
размер файла на диске 315.6 мб.
рис. phot_map#5. Так выглядит фотонная карта для 5000 subdivs.
Статистика фотонной карты:
subdivs 5000 5000;
излучено максимум: 50 000 000 фотонов;
сохранено в картах фотонов 7 788 992;
потребовался объем памяти 714.1 мб;
размер файла на диске 436.1 мб.
рис. phot_map#7. Так выглядит фотонная карта для 7000 subdivs.
Статистика фотонной карты:
subdivs 7000 7000;
излучено максимум: 98 000 000 фотонов;
сохранено в картах фотонов 9 023 203
потребовался объем памяти 827.7 мб
размер файла на диске 505.2 мб.
рис. phot_map#8. Так выглядит фотонная карта для 8000 subdivs.
Статистика фотонной карты:
subdivs 8000 8000;
излучено максимум: 128 000 000 фотонов;
сохранено в картах фотонов 9 486 395;
потребовался объем памяти 869.8 мб;
- размер файла на диске 531.2 мб.
Легко увидеть, что наиболее качественная фотонная карта получена для 128 миллионов фотонов (рис. phot_map#8). Поскольку она рассчитана за вполне приемлемое время и требует не так много места на диске для хранения (попробовал бы я это сказать года три назад
, ее и выбираю для дальнейшей работы. Вообще говоря, если бы я хотел ограничиться только видом из данной камеры, вполне можно было попробовать использовать самую первую фотонную карту с 3000 subdivs. Но я хочу еще посмотреть, что "творится" на балконах, а там плотность фотонной карты будет самой низкой во всей сцене и 3000 subdivs может оказаться недостаточно для качественного рендера.
Теперь выставляем загрузку фотонной карты из файла, в котором она была сохранена, и продолжим "игру" с настройками фотонной карты. В частности, попробуем менять SD, поскольку это не потребует пересчета фотонной карты.
рис. sd-10. SD=10мм. Радиус очень хорош сам по себе, поскольку обеспечивает высокую детализацию. К сожалению, при таком радиусе и с текущей плотностью фотонов получается очень шумная фотонная карта, малопригодная для использования.
рис. sd-1000. SD=1 метр. Шума почти нет, но получено это за счет сильного размывания деталей светотени из-за слишком большого радиуса. Изображение выглядит плоским, неинтересным. Да и время расчета увеличилось почти в 30 раз из-за того, что в расчете освещенности обрабатывается большее количество фотонов.
рис. sd-90. После некоторых дополнительных экспериментов с радиусом сбора, я решил остановится на значении SD=90 мм. Данная фотонная карта имеет приемлемый шум и радиус сбора, способный достаточно точно передать детали освещения, а стыки и углы получаются ровными, без заметных разрывов. Время расчета фотонной карты тоже вполне приемлемо.
На этом настройку фотонной карты можно было бы и завершить. Но я предлагаю потратить немного дополнительного времени и задействовать еще один механизм, способный обеспечить дополнительное качество фотонной карты.
До сих пор количество собираемых фотонов Max. photons было установлено в 0 для того, чтобы ничто не мешало настроить радиус сбора. Давайте укажем значение Max. photons таким, чтобы оно соответствовало количеству собираемых фотонов в пределах нашего SD для наименее плотных областей фотонной карты. Идея в том, чтобы в областях карты с высокой плотностью фотонов освещенность точек рассчитывалась при помощи Max. photons. При этом радиус сбора будет меньше установленного в настройках SD, и будет меняться в зависимости от плотности карты, доходя до установленного значения SD в областях с самой низкой плотностью. Таким образом, мы достигаем сразу двух целей: радиус сбора будет меняться по всей фотонной карте и шумовые пятна потеряют свою регулярность. А за счет уменьшения реального радиуса сбора повысится детализация светотени, особенно в средних тонах.
Как найти Max. photons? Начинаем постепенно повышать с 0 его значение с некоторым шагом (допустим, в 10 фотонов) и каждый раз рендерим изображение. Когда изображение в тех областях, где фотонная карта наименее плотна (темные и труднодоступные для освещения участки) перестанет меняться при увеличении Max. photons, текущее значение Max. photons и следует взять. Остается только сожалеть об отсутствии "штатных" средств оценки плотности фотонной карты в произвольной выбранной точке сцены.
рис. mp-10. Фотонная карта для Max. photons = 10. Сильный шум, продолжаем увеличивать количество собираемых фотонов.
рис. mp50. Продолжая постепенно увеличивать Max. photons, я остановился на значении в 50 фотонов. После рубежа в 100 фотонов изображение вообще перестает меняться - во всех областях сцены достигается предел, установленный SD. Обратите внимание, что шумовые пятна стали теперь менее регулярными и не так явно выражены, как на рис. sd-90. Почернения на стыках и углах также почти полностью исчезли - срабатывает Convex hull area estimate.
Хорошая настройка фотонной карты - ключ к успешному и быстрому рендеру. Вот теперь перейдем к следующему этапу - настройке irradiance map.
Настройка Irradiance map
Снова переходим на закладку VRay: Indirect illumination и в качестве метода расчета первого диффузного отскока выбираем irradiance map. Для настроек irradiance map я выбрал Irradiance map preset>High, затем там же - Custom. Это позволяет редактировать настройки High.
рис. 08. Настройки расчета первого отскока методом irradiance map
Пороговые значения для цвета, нормалей, расстояния и количества сэмплов subdivs оставлены теми же, что были в preset High. Количество subdivs в 50 сэмплов означает, что для расчета диффузной освещенности каждой точки будет использовано до 2500 лучей, чего вполне достаточно для большинства случаев. Вообще же, "рабочий" диапазон subdivs лежит в пределах 30-120 сэмплов и может быть еще увеличен при наличии шума в изображении.
При наличии шума также настоятельно рекомендуется проанализировать его возможную причину, поскольку уменьшение соответствующего порогового значения может привести к решению проблемы без увеличения subdivs. Значения Min. rate и Max. rate также оставлены довольно высокими, поскольку для настройки используется изображение низкого разрешения (640х480). Для наблюдения за процессом расстановки точек можно включить Show calc. phase.
Теперь перейдем к настройкам самой карты на закладке VRay: Advanced irradiance map parameters.
рис. 09. Настройка irradiance map
Выполнить настройку параметров самой карты довольно просто. Выбираем Interpolation type: Least squares fit. Еще может быть только один вариант - Delone triangulation, который не размывает интерполируемую освещенность, в отличие от всех остальных типов и может быть использован для изображений, к которым предъявляются повышенные требования к четкости. Наша сцена вполне обычна, поэтому оставлен Least squares fit. Sample lookup (способ выбора рассчитанных точек для интерполяции) - Precalc'd overlapping, лучший из имеющихся, оставляем. Устанавливаем Randomize samples, что должно подавлять муар и другие проявления алиасинга. Check sample visibility стоит включать только при наличии проблем в сцене, связанных с проникновением света через поверхности. В текущей сцене таких проблем нет, значит, не включаем.
Calc. pass interpolation samples определяет количество рассчитанных значений освещенности для интерполяции освещенности нерасчетной точки. Чем выше это значение, тем ровнее градиент и больше размывание оттенков. Рекомендуемый рабочий диапазон для этого параметра 12-25, оставляем 15. Назначаем сохранение фотонной карты в файл, это может пригодиться для последующей коррекции при помощи Color map (экспоненциального контроля освещенности) и настройки антиалиасинга. Теперь все готово и можно нажимать кнопку "Render"!
Я рассчитал два изображения для двух настроек фотонных карт - для Search distance=90, Max. photons=0 и для Search distance=90, Max. photons=50 (то, что мы считали на рис. sd90 и на рис. mp50). Вот что получилось (разрешение и настройки AA пока не менялись).
рис. irr-1. Изображение, полученное методом irradiance map+ фотонная карта с Search distance=90, Max. photons=0. 640х480, без АА.
рис. irr-2. Изображение полученное методом irradiance map+ фотонная карта с Search distance=90, Max. photons=50. 640х480, без АА.
Мне лично больше нравится последнее изображение, и именно для него я просчитаю окончательный рендер. Вот он. Я только немного подкорректировал цвет, изменив Dark Multiplier с 1.6 до 1.4, и настроил AA:
рис.10. Настройки АА для финального рендера.
Поскольку сглаживание AA является дополнительным и независимым проходом по отношению к проходам расчета точек irradiance map, для настройки AA использовалась сохраненная в файл карта, как и для настройки Color map. Из фильтров AA общего назначения наиболее качественными являются Catmull-Rom и Mitchell-Netravali. Наиболее простой - Area. Эти фильтры определяют влияние пикселей изображения друг на друга и являются результатом исследований теории антиалиасинга. Другие фильтры этой группы предназначены для различных специальных случаев, описание которых можно найти в руководстве к VRay. Перед рендером я изменил разрешение изображения на 1024х768 и уменьшил значения Min. rate до -4, а Max. rate до -1. Поскольку количество точек изображения увеличилось, качество irradiance map не должно пострадать. Итак:
рис. cam-1. Финальный рендер, вид из первой камеры.