Контроль качества визуализации в mental ray
Урок по настройке качества визуализации в mental ray. В большинстве своем будут рассмотрены только глобальные настройки сцены. Теоретические вопросы, того или иного процесса рассматриваться будут только кратко или сокращенно.
Естественно урок не даст четкого алгоритма «Как сделать красиво и быстро» - это невозможно, каждая сцена уникальна, а вот показать в каком направлении искать, думаю, урок поможет.
В уроке будут приводиться некоторые цифровые параметры настроек – относиться к ним нужно философски – это наиболее усредненные цифры, понятие качественно и красиво везде разные.
Рассчитан урок на тех, кто пошел уже в работе над сценой стадию моделинга, шейдинга и освещения и подошел к стадии визуализации
Рассмотрены будут следующие моменты:
- Сглаживание (выборка и фильтрация изображения)
- Настройка алгоритма трассировки BSP (BSP-2)
- Алгоритм расчета тени и отступление от глобальных настроек – настройка семплирования полутени и фильтрация текстур
- Глобальное освещение
- Final Gather
Рассматриваются настройки с позиции, что мы делаем статичный рендер (используем исключительно трассировку)
Описание приведено для 3d Max 2009.
Сглаживание
Сглаживание это наверное, один из основных показателей качества при визуализации. Различные виды ступенчатых артефактов, мозаичность, муар, зернистый шум и т.д. как правило, возникают из-за неверно настроенного сглаживания. Поэтому мы с него и начнем.
Пример ступенчатого артефакта на кромках фигуры (получено путем неадаптивной выборки 1 семпл на пиксель и треугольный фильтр размером 1х1)
Процесс сглаживания происходит за счет выборки и фильтрации относительно каждого пикселя (иногда группы пикселей) изображения.
Контроль качества процесса сглаживания производиться в настройках Рендеринга («F10», закладка Renderer):
рис №1
Процесс начинается с Выборки
В mental ray реализована адаптивная и фиксированная выборка, мы пользуемся адаптивной, когда процесс получения цвета точки усложняется с появлением проблемных зон изображения, что позволяет экономить время и повышать качество выборки.
Суть адаптивной выборки в общем упрощенном варианте поясню на рисунке:
рис №2
9 квадратов, на которые разделен рисунок символизируют пиксели будущего изображения, чайник на заднем плане – элемент сцены, которую визуализируем.
Для первой точки изображения (квадрат А) происходит трассировка в направлении сцены 4 лучами, получаются четыре значения цвета, которые сравниваются между собой. Если значение составляющих цветов не превышает допустимого контраста, то выборка для данного пикселя заканчивается и берется следующий пиксель.
В квадрате «Б» один из четырех лучей должен получить цвет фигуры, который отличается от цвета фона и будет явное превышение допустимого контраста. В этом случае выборка для данной точки усложниться до 4 семплов на пиксель, после чего состоится трассировка каждого с последующей проверкой и если нужно то следующему усложнению до 16 семплов на пиксель. И так до тех пор, пока контраст, полученный в результате трассировки не будет превышать допустимый, либо достижения максимального значения выборки.
Пороговые значения контраста задаются в поле Spatial Contrast (рис №1) для каждой составляющей цвета
Минимальное значение выборки задается в поле Samples per Pixel – Minimum. Значение = 1 обозначает один семпл на пиксель. Дробные значения это недостаточная выборка (несколько пикселей на один семпл). При значения больше 1-го, пиксель сразу делиться на указанное количество семплов. Выборка начинается именно с указанного минимального значения.
Максимальное значение выборки указывается соответственно в поле Samples per Pixel – Maximum это та граничная глубина по достижению которой выборка закончиться даже если есть превышение порога контраста.
После того как выборка закончиться полученные значения отфильтровываются для каждого пикселя
Фильтрация
Фильтрация зависит от типа фильтра и его размера – размер указывается в точках от центра.
Пример работы четырех из пяти фильтров (размеры фильтра по умолчанию)
Фильтр типа Бокс – самый примитивный использует средне взвешенное значение цвета взятые согласно размеру фильтра, фильтры Митчелла и Ланчоса самые качественные (последний наиболее контрастный и наиболее медленный)
Тип фильтра и его размер устанавливается в разделе Filter (рис №1)
Дополнительные опции
Опция Jitter (пер. дрожание изображения в телевизоре) дает небольшое смещение внутри выборки, дабы трассировка происходила немного хаотичнее, что позволяет избежать «выбитых» элементов, муара. Как пример на рисунке №2 квадрат «Г» геометрически точно направленные 4 луча в углы семпла пропустят носик чайника между собой, при включении «дрожания» повыситься шанс пересечься с фигурой. На фоне массива точек это дает результат.
Опция Lock Samples – запомнить выборки, актуальна при обсчете анимации – запоминает информацию о выборках и учитывает ее в следующем кадре.
Опция Bucket Weight – размер мозаичного элемента обсчета (далее бакета) с одной стороны размер не должен влиять на качество обсчета, но есть некоторые расчеты, которые не передаются в соседние бакеты при закачивании обсчета своего. Как, например алгоритм отслеживания краев, может получиться так, что тонкий элемент сцены определится в одном бакете и не наметится в соседнем – получиться обрыв. Бороться с этим можно только увеличением размера бакета.
Опция Bucket Order – порядок следования бакетов при обсчете сцены теоретически, если путь назначает сам рендер, то это позволяет экономить память и время. Вот только необходимости к переназначению на другую схему нет (кроме эстетической). Если нужно посмотреть фрагмент сцены, но не ожидая полного рендеринга, то можно воспользоваться рендером региона.
Опция Frame Buffer Type – тип буфера. Если вы сохраняете сцену в форматы с динамическим диапазоном (exr , hdr) то оставляем 32-битный буфер. Если такие форматы не нужны то 16-битный буфер. Это позволяет экономить оперативную память. Правда есть некоторые пост-эффекты которые хотят наличие 32-битного буфера, так что это тоже надо учитывать.
Итак с назначением параметров сглаживания понятно, теперь можно поговорить о поиске приемлемых значений.
Порог контраста как правило, используется от 0,03 до 0,05 (меньшее лучше)
Минимально значение выборки думаю следует назначать равным 1 – меньше уже не эффективно изначально, а вот большее это трата времени на трассировку ровных поверхностей.
Максимальное значение – с этим сложнее и поможет нам диагностическая выборка:
Активировать диагностическую выборку можно из настроек рендера («F10») , закладка «Processing», свиток «Diagnostics»
Устанавливаем галку Enable и выбираем Sampling Rate. Жмем ренедер:
Градации серого символизируют глубину выборки - чем ярче тем глубже. Но нас интересует белый цвет – это там где выборка достигла предела и закончилась не по контрастности, а по максимальному ограничению. На краях объектов это допустимо , а вот на гладких однотонных поверхностях от белого цвета лучше избавиться, подняв количество семплов в выборке на следующую ступень. Как правило, значение 16 достаточно для многих сцен.
Из просмотров диагностического рендера легко убедиться, что высокие значения максимальной выборки, как правило, приводят только к увеличению времени просчетов поскольку на краях объектов контраст будет высоким и в этих местах всегда выполняется максимальная выборка. Как только увеличение выборки позволит убрать белый цвет на ровных поверхностях и плавных переходах цвета на текстурах, можно останавливаться с настройкой максимума. Оставшиеся проблемные места можно попытаться настроить с помощью уменьшения порогового контраста.
Фильтр лучше выбирать Митчелла, а при попытке подчеркнуть контрастность – Ланчоса.
Использовать опцию дрожания Jitter – рекомендуется всегда.
Алгоритмы трассировки
Использование алгоритма трассировки позволяет ускорить процесс рендеринга путем упорядочивания объектов сцены и на качество обсчета не влияет.
В mental ray теоретически присутствуют два алгоритма - Иерархическая сетка и BSP (двоичное разделение пространства) , BSP в свою очередь имеет вариацию BSP-2 (Large BSP). Но в связи с устареванием Иерархической сетки и отсутствием ее выбора в 3D Max 2009 , мы о ней говорить не будем (жалеть тоже)
Настройка алгоритма трассировки производиться в поле Raytrace Acceleration, закладки Renderer:
рис № 3
Алгоритм BSP работает по принципу разделения сцены на объемные контейнеры (вокселы) как и алгоритм иерархической сетки, но BSP допускает внутренне деление вокселов на вокселы нижнего порядка и так на указанную глубину Depth или пока в каждом вокселе будет меньше полигонов (листьев дерева BSP) чем указано в параметре Size.
Настраивать алгоритм BSP есть смысл, наверное, только при рендере анимации, в других случаях тратить время на диагностические рендеры и накручивание параметров невыгодно, легче подождать выигрываемые минуты рендеринга один финальный раз.
Тем не менее алгоритм имеет визуальную диагностику по глубине и размеру. Удобнее настраивать по глубине:
Рендерим сцену:
Синий и зеленый цвет это минимальная глубина, желтый близкая к пределу и красная предельная. Большое количество красного цвета на сцене будет говорить о том что BSP не хватает глубины для классификации полигонов и почти везде вокселы достигнув максимальной глубины содержат большое количество листьев, которые не мешает классифицировать еще на несколько порядков. Увеличивая глубину нужно добиться минимальных проявлений красного цвета.
Алгоритм BSP-2 полностью идентичен простому BSP, но у него есть одно очень полезное свойство, которое станет палочкой-выручалочкой любителям громадного числа полигонов. BSP-2 выгружает неиспользуемые вокселы из ОЗУ на диск и по мере надобности подгружает их, тем самым резко снижается скорость рендера, но высвобождается ОЗУ, которой часто не хватает.
Глубина трассировки
Параметры глубины трассировки находятся ниже назначения алгоритма трассировки (рис №3) поле Reflection / Refraction
Max. Reflection – это количество отражений луча трассировки, после которого трассировка заканчивается
Max. Refraction – это количество преломлений через прозрачные (полупрозрачные) поверхности, после которого трассировка заканчивается
Max. Trace Depth – сумма отражений и преломлений после которых все равно трассировка закончиться .
Данные параметры часто упускают из вида, хотя ими можно ускорять процесс предварительных рендеров и после небольшого анализа максимально повысить производительность и качество на финальном. Главное помнить что преломление в объемных предметах происходит дважды – на входе трассирующего луча и на выходе из объекта.
Тени
Спускаемся в закладке Renderer окна настроек рендера (F10) ниже до свитка «Shadows&Displacement»
Нас интересует алгоритм расчета теней:
Регулярный (simple) алгоритм является самым быстрым смысл его состоит в определении расстояния от источника света до точки трассировки и прозрачности (непрозрачности) пересекающих поверхностей, без учета их последовательности.
Сортирующий (sort) выстраивает объекты в порядке следования от источника света, делая расчеты более правильными. Как правило для правильного расчета это достаточно (активирован по умолчанию)
Сегментирующий (Segments) – дополнительно учитывает в расчетах невидимые объекты. Такие как мех, эффекты атмосферных контейнеров, объемные эффекты, более того многие архитектурно-дизайнерские материалы имеют сложные эффекты рассеивания, которые могут учитываться только этим алгоритмом. В противовес всему этому – увеличение времени визуализации.
Отвлекаясь от глобальных настроек посмотрим на качестве тени от поверхностных источников света, которая настраивается в настройках ИС:
Иногда в области полутени заметен шум, особенно когда тень скользящая и чем дальше от объекта тени, тем шум заметнее:
Избавиться от этого можно увеличив количество семплов для сглаживания тени в настройках ИС
Параметр Shadow Samples:
Фильтрация текстур
Параметр фильтрации текстур настраивается не глобально а относительно каждой текстуры в свитке настроек растровой карты:
По умолчанию установлена пирамидальная фильтрация, которая позволяет избежать шума на поверхностях текстур при обсчете анимации. Смысл ее состоит в том, что на поверхность объекта с текстурой накладывается сетка согласно виду из камеры (чем меньше угол наклона камеры - тем ячейки больше) значение цвета в ячейках сетки интерполируется и получается готовый вид текстуры для нашего вида из перспективы.
К сожалению в 3d Max не поддерживается настройка эллиптической фильтрации, которая бы нам позволила получить максимально четкое изображение. Поэтому в статичных, высоко-четких изображениях можно наблюдать потерю детальности на текстурах в зависимости от положения камеры, особенно сильно это чувствуется на использовании растровых карт для бампа (неровностей).
Поэтому если наблюдается эффект потери качества текстуры и необходимо выполнить только статичный рендер, то возможно есть смысл отключить фильтр (None) для использования просто точечной выборки при отображении текстуры (что приведет к гарантированному шуму при анимации)
Глобальное освещение (GI)
Настройка в разделе «Global Illumination» , закладки «Indirect Illumination»
рис № 4
Допустим у нас в качестве примера есть довольно непривлекательный вариант визуализации:
Использование глобального освещения больше испортило нам картину чем улучшило. Для того чтобы избавиться от данного недоразумения нужно решить по какому из двух путей пойти в зависимости от требований к GI:
- получить от глобально освещения ровный эффект, без подчеркивания мелких деталей
- получить максимально контрастный эффект с выделением мелких деталей геометрии.
В первом случае нужно увеличивать радиус семпла сбора фотонов (в простонародье радиус фотонов) Maximum Sampling Radius (рис 4) пока семплы не станут равномерно друг на друга накладываться. Такой способ себя оправдывает при нахождении на сцене источников прямого света, которые формируя тени подчеркнут всю геометрию и использования в материалах правильно настроенного шейдера (опции) Ambient-Occlusion, который подчеркнет затенение от рядом находящийся геометрии.
Во втором случае контрастный эффект получается путем уменьшения радиуса семпла и увеличения количества фотонов Average GI Photons per Light (Рис 4) , как бы рисуя свет и тень с помощью фотонов.
И в том и другом случае возникает вопрос – какой делать радиус семпла и сколько нужно фотонов? Более того придется еще настраивать параметр Maxsimum Nun Photons per Samples (рис 4) который показывает сколько фотонов нужно учитывать для расчета в семпле сбора из всех прилетевших.
Опять нас спасет диагностический рендер:
Который позволяет оценить и наполнение сцены семплами (density) и яркость эффекта (irradiance)
Произведем в режиме density
И начинаем с настройки размера площадок Maximum Sampling Radius под требуемую задачу (в первом случае до полного или даже избыточного перекрытии, а во втором подгоняем под размер самых мелких деталей сцены которые надо подчеркнуть) после чего по необходимости добавляем фотонов Average GI Photons per Light. Добиваемся плавности нанесения семплов на поверхность объектов (плавные переходы цвета)
Далее переключаемся в режим диагностики irradiance:
Сейчас нам нужно настроить оптимальное использование фотонов. На рисунке мы видим ярко выраженные красные пятнышки в хорошо освещенных областях, а по идее нам нужно опять добиться плавности эффекта. Как правило такая пятнистость возникает из-за не учета всех фотонов которые попадают на поверхности, поэтому нужно поднимать параметр Maximum Nun Photons per Samples до подобающих размеров
После чего подправить по ситуации предыдущие параметры, пока не добьемся равномерной засветки с плавным переходом (если не ограничивает геометрия) яркости.
Еще стоит заметить о параметре Maximum Nun Photons per Samples - поднимая количество фотонов для учета в семплах, мы подходим к учету всех выпущенных в сцену фотонов, что обеспечивает физически корректную модель освещения. Но бывает, что чисто из эстетических соображений нужно погасить излишне яркие места (красный цвет). В этом случае нужно найти оптимальный размер Maximum Nun Photons per Samples (уменьшая его) когда в местах падения большого количества фотонов они не будут учитываться все, и в тоже время будет хватать для учета в семплах, которые находятся в темных местах.
Окончательная сборка Final Gather (FG)
Настройка в разделе «Final Gather» , закладки «Indirect Illumination»
рис №5
Разработчики тут позаботились о нас и сразу прописали профиля работы Final Gather, сделав ползунок «FG Precision Presets»
Тем не менее можно попытаться адаптировать просчет максимально эффективно.
Основные параметры настройки это
Initial FG Point Density – плотность испускаемых из камеры лучей для получения FG точек
Rays per FG Point – количество основных лучей из FG точки
Interpolate Over Num. FG Points – это количество точек для интерполяции, для физически корректного эффекта должен захватить все точки, повышенное значение параметра результат не ухудшит ( и лишнее время не займет), а понижено приведет ( как и в случае с GI), к понижению интенсивности освещения наиболее ярких мест
В настройке плотности лучей и количества первичных лучей, как всегда поможет диагностический рендер (который надо включить в режим Final Gather).
делаем рендер
Судя по документации точки FG от лучей испускаемых из камеры должны различаться по цвету от точек первичных лучей - но...
В нашем случае точки имеющие одинаковый шаг и четко просматривающиеся на ровных поверхностях, это шаг FG точек (Initial FG Point Density).
Шаг желательно подобрать с таким расчетом чтобы заполнить освещаемые места сцены, естественно, чем плотнее тем лучше, но тратиться больше времени. Поэтому для начала не стоит превышать размера 0,4 – 0,6
Делаем рендер:
Явственно видны артефакты освещения на местах отдаленных от точек попадания непрямого света в сцену. В этом случае есть смысл увеличить количество лучей Rays per FG Point либо включить вторичное рассеивание.
Параметр Diffuse Bounces обозначает максимальное количество вторичных лучей, правда на сцене станет несколько ярче, поэтому параметр Weight (вес вторичных лучей) желательно уменьшить.
Для предыдущего рендера включен Diffuse Bounces на 5 и Weight равен 0,6:
Параметр Interpolate Over Num. FG Points можно установить в 30 или выше, как обычно предлагает программа по умолчанию
Стоит обратить внимание на фильтрацию. В настройках по-умолчанию включен стандартный режим фильтрации, но не всегда его имеет смысл использовать. Фильтрация служит для сглаживания HDR изображений которые используется на фоне сцены в качестве освещения
Если в качестве освещения используются стандартные методы (у меня mr sky) либо хорошо подготовленные изображения, то фильтр можно отключить, это уберет излишнюю контрастность и уменьшит время расчетов:
Маленькое примечание: удобно настроить качество ФГ на копии сцены с назначенным матовым серым материалом всем объектам, это не позволит учесть отражения и преломления основного луча от точки FG до контакта с поверхностью, но тем не менее, будет очень хорошо видно распространение основной массы света. После чего вернуться в оригинал сцены и выставить настройки:
Тут и закончу свою попытку объять необъятное.
Надеюсь, кто-нибудь найдет для себя что-нибудь полезное.
С Уважением КАА
kaa936@rambler.ru