Демистификация V-Ray DMC сэмплера

В этом уроке я сделаю упор на том, чтобы дать вам техническую базу по DMC сэмплеру, но прежде, чем лезть в технические дебри DMC мы пройдёмся по альтернативному сэмплеру встроенному в Vray, Adaptive subdivision.

Я не упоминаю Fixed сэмплер, поскольку он достаточно прост и прямолинеен, и если вы не знаете, как он работает, это можно легко понять из полученных далее знаний. Сэмплинг Adaptive Subdivision используется практически в каждом biased рендер движке, присутствующем на рынке. Это достаточно старая технология и неплохо показывает себя в большинстве ситуаций. Он даст вам хорошо сглаженную картинку, и идеально подходит для рендеринга статичных изображений, но в сравнении с DMC сэмплером он часто пересэмплирует изображение, например, в тех местах, где можно было бы обойтись меньшим количеством сэмплов.

Как я уже сказал, subdivision сэмплер можно найти в любом современном biased рендер движке, но мне кажется некоторые из них, глядя на успехи Vray идёт тем же путем и предлагают аналогичные DMC алгоритмы сэмплинга.

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

Процесс сэмплинга: адаптивный сэмплинг

Общим для всех biased движков является то, что все они адаптивные. Что это значит?

Читайте также:  Как открыть файл CDR - лучшие онлайн-сервисы, приложения и конвертеры

Давайте упростим ситуацию и возьмём площадь разрешением 3х3 пикселя для следующих примеров. Когда вы кликаете “рендер”, Vray, или другой рендер, просчитает 9 начальных сэмплов, то есть один сэмпл на каждый пиксель… Допустим, что на данный момент сэмпл располагается в центре пикселя.

Демистификация V-Ray DMC сэмплера

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

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

Вектор обычно исходит из точки камеры, и он летит вглубь сцены, пока не столкнётся с чем-нибудь.

Точка, в которой этот луч сталкивается с чем-то (с объектом) это точка пересечения и после столкновения рендер начинает просчитывать всю информацию о цвете объекта в данной конкретной точке пространства (его отражения, преломления, какого он цвета, как он реагирует на свет, он в тени или на свету и т.п.) и возвращает собранную информацию Vray, говоря ему «Такой то цвет лежит за этим пикселем, и именно в этот цвет ты должен его окрасить».

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

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

Демистификация V-Ray DMC сэмплера

Та же процедура применяется для каждого пикселя нашей решётки из 9 пикселей, и тогда вы получаете свою картинку.

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

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

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

Это называется адаптивный сэмплинг, так как количество лучей изменяется адаптивно в соответствии со сложностью изображения… так в местах сильного контраста между пикселями будет больше сэмплов, например, рендер выпустит 25 лучей в один пиксель и получит усреднённый результат, в то время как места с постоянным цветом или пустые пространства будут получать лишь 1 сэмпл, чтобы не тратить время на пересэмплирование этих пикселей.

Демистификация V-Ray DMC сэмплера
После начального сэмплинга рендер вернет цвет этих пикселей
Демистификация V-Ray DMC сэмплера
Рендер добавит сэмплов в нужные пиксели основываясь на разнице в цвете регулируемой порогом (threshold) и цвет пикселей будет обновлён

Следующие несколько изображений показывают преимущества адаптивности.

Первый пример сделан с 1 сэмплом на пиксель, во втором fixed со 100 сэмплами, в третьем адаптивный сэмплинг с минимальным значением 1 и максимальным 100.

Демистификация V-Ray DMC сэмплера
Fixed сэмплинг
1 сэмпл на пиксель
Время рендера: 1,9 сек
Демистификация V-Ray DMC сэмплера
Fixed сэмплинг
100 сэмплов на пиксель
Время рендера: 2 мин 55 сек
Демистификация V-Ray DMC сэмплера
Адаптивный семплинг
Минимум 1, максимум 100 сэмплов
Время рендера: 1 мин 1 сек

Итак, DMC и Adaptive subdivision объединяет то, что оба они адаптивные, но работают по разному.

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

Subdivision сэмплер

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

Демистификация V-Ray DMC сэмплера
Subdivision сэмплер располагает начальные сэмплы на углах пикселей

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

Для каждого пикселя используются и сравниваются сэмплы которые располагаются по его углам.

Если разница в цвете сильнее чем величина порога «threshold» (см. следующее изображение) устанавливаемого в настройках сэмплера, то Vray разделяет пиксель еще один раз, чтобы получить больше сэмплов внутри этого пикселя.

Демистификация V-Ray DMC сэмплера
Vray проверяет разницу в цвете между сэмплами пикселя, и если она выше чем Clr thresh, то он добавляет сэмплов внутри пикселя. В противном случае он завершает сэмплирование и возвращает финальный цвет пикселя.
Демистификация V-Ray DMC сэмплера
Начальные сэмплы располагаются по углам пикселей и собирают информацию о цвете. Первый пиксель очень близок по цвету ко второму. Так как разница в цвете ниже порога указанного в настройках, рендер решает не добавлять сэмплов для этих пикселей.
Демистификация V-Ray DMC сэмплера
Разница в цвете между первым и вторым пикселем большая и выше чем цветовой порог, и это означает, что рендер добавит сэмплов к этим пикселям. Максимальное количество сэмплов определяется параметром Max rate. В нашем случае 2 означает максимум 16 дополнительных сэмплов на пиксель, плюс изначальные расположенные по углам.
Демистификация V-Ray DMC сэмплера

Этот процесс повторяется несколько раз до тех пор, пока не будет достигнут либо цветовой порог, либо максимальное количество сэмплов установленное в Max rate. Следует помнить, что значение max rate в subdivision сэмплере не представляет собой число сэмплов на пиксель, оно обозначает максимальное количество разбиений пикселя, что означает 0=1 сэмпл, 1=4, 2=16, 3=64.

Также запомните, что некоторые сэмплы принадлежат обоим соседним пикселям (сэмплы у края пикселя) так что установив значение Max Rate 2 вы получите 25 сэмплов на пиксель: 9 сэмплов лежащих внутри пикселя, плюс 16 сэмплов по его краям, которые принадлежат также и другим пикселям.

Для Max Rate 1 это всего 1 локальных сэмпл на пиксель и 8 общих с другими пикселями. Взгляните на следующую картинку для лучшего понимания.

Демистификация V-Ray DMC сэмплера
Adaptive Subdivision сэмплер
Некоторые пиксели получили больше сэмплов, некоторые меньше, всё это зависит от цветового контраста между сэмплами. В этом примере Subdivision сэмплер установлен в значения Min 0 Max 2, что означает 1 начальный сэмпл на пиксель, но так как они лежат на углах пикселей, то принадлежат также соседним пикселям, а основываясь на цветовой разнице, сэмплер может добавить 16 дополнительных сэмплов на пиксель.

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

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

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

Демистификация V-Ray DMC сэмплера
Решение о выстреливании лучей внутри пикселя основано на информации полученной с его краёв. Это специфика adaptive subdivision сэмплера и может создать проблемы в сценах со множеством мелких деталей, когда знание полной информации полученной от окружающих пикселей было бы эффективней.
Демистификация V-Ray DMC сэмплера
Adaptive subdivision сэмплер
сталкивается с большими трудностями в сцене с тонкими линиями. В этом примере вы можете видеть как испорчены линии, виной тому недостаточное сэмплирование в нужных областях, и только потому что adaptive subdivision сэмплер принимал решение базируясь на информации полученной от краёв пикселей. В этом примере я выставил Clr.Threshold 0.01, Min rate 0 что значит 1 начальный сэмпл на пиксель, и Max rate 3, что значит, что пиксель мог разбиться 3 раза, получив при этом 64 дополнительных сэмпла. 64 дополнительных сэмпла более чем достаточно для получения правильных гладких линий, но V-ray просто не счел нужным пересэмплировать исходя из информации полученной от начальных семплов.
Демистификация V-Ray DMC сэмплера
DMC сэмплер
не имеет таких проблем потому, что его решение основано на информации полученной от всех окружающих пикселей. Поэтому он способен обнаружить очень тонкие линии и пересэмплировать их эффективно и без артефактов. Также как и subdivision, DMC сэмплер был настроен на Minimum 1 и Maximum 8 сабдивов, что в данном случае означает 1 сэмпл на пиксель и до 64 дополнительных сэмплов при необходимости. Цветовой порог также был выставлен 0.01

При использовании subdivision сэмплера каждая зона изображения, нуждающаяся в пересэмплировании, например, глосси отражения, преломления, bruteforce ГИ, DOF и motion blur получит именно столько сэмплов сколько выставлено в каждом из их параметров (subdivs), всё это будет усреднено и эта информация о цвете будет сравниваться с окружающими сэмплами, после этого будет принято решение о пересэмплировании.

Это значит, что если у вас выставлено 20 сэмплов на DOF, 10 на motion blur и 100 на глосси отражения, то, вероятно, будет просчитано очень большое количество сэмплов на пиксель.

Это даст вам хороший сглаженный результат, но ценой очень долго рендера потому, что для каждого дополнительного сэмпла внутри пикселя будет взято n-ное количество дополнительных сэмплов для motion blur, DOF, глосси и т.д. даже когда вам не нужно так много вторичных лучей (отражения, преломления, тени и др.), чтобы получить хорошо сэмплированную картинку. Вот где централизированный адаптивный алгоритм такой как DMC покажет себя.

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

Но прежде чем мы перейдем к примерам DMC сэмплера давайте обратим внимание на вкладку Vray DMC Sampler и посмотрим, как его параметры влияют на рендеринг. Важно помнить, что эта вкладка используется даже, когда активирован Subdivision или Fixed сэмплер, а не только DMC.

Единственная разница в том, что при использовании Adaptive Subdivision сэмплера процесс взятия начальных сэмплов (взятие сэмплов из первичных лучей eye ray) отделён от дальнейшего сэмплирования (вторичные лучи) например, в материалах с глосси отражениями, тогда как в DMC все процессы объединены и контролируются этими параметрами (сэмплирование изображения и другие сабдивы в сцене).

Параметры DMC сэмплера

Давайте пройдемся по этим параметрам по порядку. Вы можете также посмотреть хелп по V-Ray, но надеюсь мои объяснения окажутся проще, чем написанное в хелпе. Я буду описывать случай, когда будут выпущены Х лучей глосси отражения.

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

В примере используется экстремальная ситуация для лучшего понимания, на практике изменение этих параметров скорее всего приведет к менее заметной разнице.

Adatpive amount – пример: если в материале у вас есть 100 доступных сэмплов (10 сабдивов) на глосси отражении, установка adaptive в 0.5 заставит Vray использовать 50% (50% от 100 доступных) сэмплов отражений, и после этого решать, нужно ли вам больше сэмплов и сколько.

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

Если adaptive amount выставлен в значение 0.7, то будет взято 30% от доступных 100 сэмплов, значение 0 позволит взять 100 сэмплов, а при значении 1 (полная адаптивность) будет взято количество сэмплов указанное в Min samples и после будет адаптивно пересэмплироваться, используя только то количество сэмплов, которое сгладит глосси отражение.

Параметр Min samples существует из соображений безопасности, потому что в значении adaptive 1 Vray не в состоянии принять решение о дальнейшем пересэмплировании имея только 2 изначальных сэмпла взятых с глосси отражений.

Таким образом, с Min samples вы уверены в том, что несмотря на значение Adaptive amount, минимальное количество сэмплов взятых с глосси отражений (или преломлений, теней и др.) будет равно 8, после чего начнется адаптивное пересэмплирование.

Демистификация V-Ray DMC сэмплера
Демистификация V-Ray DMC сэмплера
Adaptive amount 0
Взяты все сэмплы для каждого начального луча который соприкоснулся с материалом.
Демистификация V-Ray DMC сэмплера
Adaptive amount 0.5
Взято 50% сэмплов от значения сабдивов глосси отражений, после чего просчет глосси отражений становится адаптивным, выделяя лишь число сэмплов необходимое для сглаживания в соответствии с Noise threshold.
Демистификация V-Ray DMC сэмплера
Adaptive amount 1.0
Так как adaptive установлено в 1, активируется параметр Min samples, и это означает, что будет взято 8 сэмплов, после чего просчет глосси отражений становится адаптивным, выделяя лишь число сэмплов необходимое для сглаживания в соответствии с Noise threshold.

Вспомните изображение с объяснением рейтресинга, давайте посмотрим на этот процесс с другой точки зрения:

Демистификация V-Ray DMC сэмплера

Noise threshold – если adaptive установлен в значение 0.5 и если, скажем, у нас в сцене есть материал с глосси отражениями со 100 доступными сэмплами (10 сабдивов), Vray возьмет 50 сэмплов и после станет адптивно пересэмплировать в соответствии с этим порогом шума (Noise threshold).

Это значит, что каждый последующий дополнительный сэмпл будет сравниваться с первыми 50, и если разница между ними будет больше чем значение Noise threshold, то будет взят еще один сэмпл, и это будет продолжаться до тех пор пока разница между ними не станет меньше чем Noise threshold.

Но если разница не очень велика и ниже, чем noise threshold, то Vray прекратит сэмплирование этого пикселя и завершит просчет глосси отражений этого материала. Ниже показано три примера, демонстрирующих то, как noise threshold влияет на качество отражений.

Это очень важный параметр и для финальных изображений должен быть установлен в пределах 0.005-0.01.

Демистификация V-Ray DMC сэмплера
Демистификация V-Ray DMC сэмплера
Noise threshold 0.01
Демистификация V-Ray DMC сэмплера
Noise threshold 0.1
Демистификация V-Ray DMC сэмплера
Noise threshold 1.0

Min samples – если величина адаптивности 1 (полная адаптивность), то даже если у вас есть 100 доступных сэмплов для глосси отражений в материале, Vray возьмёт 1-2 сэмпла и сравнив их, не сможет принять правильное решение о дальнейшнем пересэмплировании.

Параметр Min samples существует, чтобы предотвращать подобный сценарий, он представляет из себя минимальное количество сэмплов взятых прежде чем адаптивность вступит в игру. Vray всегда будет брать эти 8 сэмплов для каждого глосси в сцене до того как станет адаптивным.

Демистификация V-Ray DMC сэмплера
Демистификация V-Ray DMC сэмплера
Min samples 50
Демистификация V-Ray DMC сэмплера
Min samples 8
Демистификация V-Ray DMC сэмплера
Min samples 2

Global Subdivs multiplier – это множитель для каждого значения в сцене, которое может нуждаться в пересэмплировании.

Это могут быть сабдивы теней в источнике света area, сабдивы глосси отражений или преломлений, сабдивы motion blur, DOF сабдивы и т.д. Допустим, если в материале на глосси отражении у вас 10 сабдивов и Global subdivs установлен в значение 2, сабдивов на глосси станет 20 (10х2).

Если множитель установлен в значение 0.2, то он уменьшит значение ваших 10 сабдивов до 2 (10х0.2). Увеличение множителя даст вам более сглаженный результат, ценой увеличенного времени рендера.

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

Демистификация V-Ray DMC сэмплера
Демистификация V-Ray DMC сэмплера
Global Subdivs multipliyer 10
Демистификация V-Ray DMC сэмплера
Global Subdivs multipliyer 1
Демистификация V-Ray DMC сэмплера
Global Subdivs multipliyer 0.1

Добро пожаловать в неинтуитивную страну чудес, DMC сэмплер.

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

Результат работы этого алгоритма мы видели на картинках с чайником, состоящими из тонких линий. Всё же давайте рассмотрим это с другой стороны.

Демистификация V-Ray DMC сэмплера
Adaptive subdivision сэмплер
Subdivision сэмплер при принятии решения о дополнительном сэмплировании учитывает лишь информацию полученную с краёв пикселя.
Демистификация V-Ray DMC сэмплера
DMC сэмплер
В случае с DMC сэмплером для принятия решения о пересэмплировании обрабатывается информация полученная с окружающих пикселей.

Может это и кажется несущественным, но это важно, так как именно это позволяет «увидеть» все мелкие детали сцены.

В сравнении с Subdivision сэмплером, который берет лишь информацию с краёв пикселя, DMC берёт первые сэмплы из случайных точек внутри каждого соседнего пикселя и если он принимает решение о пересэмплировании, то картинка не будет иметь упорядоченную структуру решётки как в случае с Adaptive subdivision. Сэмплы DMC располагаются случайным образом, не образуя никакого упорядоченного узора.

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

Люди обычно удивляются, почему DMC обрабатывает motion blur и DOF быстрее чем Subdivision сэмплер.

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

В техническом смысле это означает, что DMC сэмплер будет разбивать каждое значение сабдивов в сцене основываясь на максимальном числе сабдивов, установленных в параметре Max subdivs во вкладке Adaptive DMC image sampler (материалы, свет и др.).

Этого не происходит с Subdivision сэмплером, и в этом ключевая разница между ними:

Демистификация V-Ray DMC сэмплера

Давайте повторим: если, к примеру, материал Х в сцене имеет глосси отражения и вы выставите 40 сабдивов на глосси, и в источнике света который создает размытые тени будет выставлено 10 сабдивов, то установка DMC Max subdivs в значение 5 позволит взять максимум 8 сабдивов для глосси материала (40/5) и 2 сабдива для теней источника света (10/5) на каждый первичный луч.

Мы сейчас говорим о первичных лучах посланных в сцену из камеры. Но когда пиксель нуждается в нескольких первичных лучах для хорошего сэмплирования, и нам необходимо максимальное количество сабдивов DMC сэмплера, что в нашем случае равно 5 (5х5=25 сэмплов), тогда возможно Vray будет использовать все 40 сабдивов глосси отражений потому, что каждый первичный луч возьмёт 8 сабдивов (64 сэмпла), а так как максимальное количество сабдивов DMC равно 5 (25 сэмплов), 5х8 вернет те же 40 сабдивов на отражение. Сложно?

У меня ушло несколько дней, чтобы понять это, так как в хелпе об этом ничего не написано.

Демистификация V-Ray DMC сэмплера
Здесь наглядно показывается, как DMC управляет сабдивами глосси в сцене. Глосси отражение имеет 100 сабдивов. В первом случае DMC имеет 5 максимальных сабдивов на первичный луч, и зная это, он уменьшает количество сабдивов материала до 20 (100/5). В последнем случае DMC знает, что может разделить пиксель 50 раз получив при этом 2500 сэмплов, и зная это, он может брать всего 2 сэмпла на каждый первичный луч (100/50).

Теперь, когда мы выяснили как DMC разбивает каждый сабдив в сцене, мы можем перейти к адаптивности и к тому, как она управляет значениями сабдивов.

В Adaptive subdivision все было проще, ведь он никак не влиял на значения сабдивов внутри сцены.

Из-за того, каким образом DMC разбивает по всей сцене сабдивы, адаптивность играет свою роль лишь в случае низких значений Max subdivs. Если вы поставите значение 1 в DMC Max subdivs, то получите ту же ситуацию, как и с Adaptive subdivision в плане количества вторичных лучей посланных для отражений, преломлений, теней и т.д. Исходя из природы алгоритма DMC, при сильном увеличении Max subdivs, скажем, более 50, адаптивность будет оказывать всё меньшее влияние и в какой-то момент вы вправе просто забыть о ней.

Это потому, что установив DMC Max subdivs в значение 50, Vray будет делить каждое значение сабдивов в сцене на 50, что вероятно будет означать, что будет браться всего 1 сэмпл для глосси, теней, motion blur и т.д. Vray делает это потому, что он знает, что может получить 2500 сэмплов из одних только 50-ти первичных лучей и лишь за счет этого получить сглаженное изображение, даже взяв всего 1 сэмпл для глосси отражений.

Это бывает полезно в сценах где присутствует DOF, motion blur или много материалов с глосси отражениями. Vray будет брать минимальное количество вторичных сэмплов для получения хорошего результата.

В этих ситуациях следует устанавливать высокое значение DMC Max subdivs, и в случае необходимости повышать сабдивы на проблемных материалах. Обычно, когда объект размывается в движении, нет нужды просчитывать множество сэмплов отражений на этом объекте, так как в результате он всё равно будет размазан. Subdivision сэмплер этого не знает и пытается взять большое количество сэмплов для каждого луча, даже если это мало повлияет на конечный результат.

Следующий пример представляет из себя простую ситуацию, когда Adaptive subdivision сэмплер проигрывает DMC сэмплеру.

Демистификация V-Ray DMC сэмплера
3D motion blur
DMC сэмплер
Демистификация V-Ray DMC сэмплера
3D motion blur
Adaptive Subdivision сэмплер

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

Иногда в сценах со множеством деталей, источников света, motion blur и DOF необходимо ставить очень высокое значение Max subdivs, потому что значение по умолчанию 4 может сильно увеличить время рендера. Перейдем к практическим примерам.

Пример 01: Волосы

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

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

Обработав изображение за то же время, DMC выиграл у Adaptive subdivision в качестве, что можно увидеть на следующих изображениях. Я использовал параметры DMC Min-Max subdivs 1-50 и Color threshold 0.02, а для Adaptive subdivision Min 0 Max 2 Color threshold 0.5. Такое высокое значение Color threshold у Adaptive subdivision обусловлено тем, что в значениях 0.05-0.1, которые должны использоваться в анимации, Adaptive subdivision тратил на рендер около 20 минут.

Демистификация V-Ray DMC сэмплера
Демистификация V-Ray DMC сэмплера
Демистификация V-Ray DMC сэмплера
Adaptive subdivision сэмплер
Демистификация V-Ray DMC сэмплера
DMC сэмплер

Какие же настройки ставить при рендеринге волос? Я обычно ставлю DMC Min subdivs 1 или 2, и Max 50. Если у вас есть проблемы с мелкими деталями в анимации, то установка Min subdivs в значение 2 должна помочь. Color threshold должен быть достаточно низким, например 0.02 или 0.005.

Забудьте о параметрах во вкладке Settings – DMC Sampler, поскольку адаптивность по сути игнорируется, так как DMC Max subdivs установлено в 50, что разбивает почти каждое значение сабдивов до 1, что значит, что для каждого первичного луча Vray возьмёт всего 1 сэмпл для расчета размытых теней, глосси отражений и т.д.

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

Демистификация V-Ray DMC сэмплера
Min 1 Max 4
Демистификация V-Ray DMC сэмплера
Min 1 Max 10
Демистификация V-Ray DMC сэмплера
Min 1 Max 50

Как вы видите, третья картинка лучше всех. Всё выглядит гладко и я готов поспорить, что вы не получите никакого мерцания в анимации.

Когда я работал на «Blur» я обычно рендерил волосы отдельным пассом с настройками DMC Min 1 Max 50 с остальной геометрией в режиме matte (Vray Properties) и накладывал их в посте, потому что как правило нет нужды использовать DMC Max 50 на всей остальной сцене.

Пример 02: Плоские поверхности, глосси отражения

Самое смешное, что в некоторых ситуациях DMC Max subdivs 4 может выдать картинку чище, и быстрее.

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

Демистификация V-Ray DMC сэмплера
MIN 1 MAX 5
REFLECTION SUBDIV 50
Демистификация V-Ray DMC сэмплера
MIN 1 MAX 10
REFLECTION SUBDIV 50
Демистификация V-Ray DMC сэмплера
MIN 1 MAX 50
REFLECTION SUBDIV 50
Демистификация V-Ray DMC сэмплера
MIN 1 MAX 50
REFLECTION SUBDIV 100
Демистификация V-Ray DMC сэмплера
MIN 1 MAX 50
REFLECTION SUBDIV 300
Демистификация V-Ray DMC сэмплера
MIN 1 MAX 50
REFLECTION SUBDIV 1000

Давайте посмотрим что происходит с сэмплером и как изменение DMC Max от 5 до 50 влияет на количество первичных лучей посланных из камеры.

Демистификация V-Ray DMC сэмплера
MIN 1 MAX 5 REFLECTION SUBDIV 50
Демистификация V-Ray DMC сэмплера
MIN 1 MAX 10 REFLECTION SUBDIV 50
Демистификация V-Ray DMC сэмплера
MIN 1 MAX 50 REFLECTION SUBDIV 50
Демистификация V-Ray DMC сэмплера
MIN 1 MAX 50 REFLECTION SUBDIV 100
Демистификация V-Ray DMC сэмплера
MIN 1 MAX 50 REFLECTION SUBDIV 300
Демистификация V-Ray DMC сэмплера
MIN 1 MAX 50 REFLECTION SUBDIV 1000

Странно, не так ли? На первой картинке, где DMC Max установлен в 5 присутствует лишь часть сэмплов в сравнении с DMC Max 50. Вспомните что я рассказывал про то, как DMC Max разбивает каждое значение глосси в сцене.

Что ж, здесь происходит именно это. Для глосси отражений в материале я выставил 50 сабдивов, что означает, в первом случае, где DMC Max равен 5, что каждый первичный луч от камеры получит максимум 100 (10 сабдивов, 50/5) сэмплов отражений, но когда DMC Max равен 50, каждый луч получит лишь по 1 сэмплу.

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

Во второй строке используется DMC Max 50, но я менял значение сабдивов на глосси отражении пола и стен.

Вы можете видеть как изменение сабдивов нагружает сэмплер, так что в подобных ситуациях не бойтесь задирать значения Refl.subdivs до 300, поскольку после разбиения сэмплером, вы получите лишь 6 сабдивов на первичный луч, это может ускорить рендер и вы получите приемлимое качество.

Пример 03: Subpixel mapping (вкладка V-Ray: Color mapping)

Я использую subpixel mapping для рендеринга большей части моих сцен и анимаций.

Если вы рендерите статичные изображения, можете отключить эту опцию если хотите получить более реалистичный результат, но в анимации если вы используете motion blur и DOF, гораздо грамотней оставлять её включенной потому, что этим самым уменьшится время рендера, и сэмплеру понадобится гораздо меньше сэмплов чтобы сгладить DOF и motion blur.

Разница между использованием Subpixel mapping и его отключением заключается в том, что если он включен, то каждый сэмпл взятый первичным лучом будет сначала затонирован (Tone mapping – процесс преобразования широкого диапазона в узкий.

В Vray процесс назван Color mapping. Прим.переводчика) и затем усрёднен с остальными сэмплами если Vray примет решение о добавлении этих сэмплов.

Когда Subpixel mapping выключен, все полученные сэмплы сначала усредняются, и когда получен усреднённый цвет пикселя, он тонируется колормаппингом (Color mapping). Этот процесс проиллюстрирован на следующей картинке.

Демистификация V-Ray DMC сэмплера
Subpixel mapping включен
Когда Subpixel mapping включен, каждый новый взятый сэмпл сначала проходит процесс колормаппинга и далее соединяется с имеющимся цветом пикселя.
Демистификация V-Ray DMC сэмплера
Subpixel mapping выключен
Когда Subpixel mapping выключен, сначала просчитываются все сэмплы, потом объединяются и усредняются, и лишь после этого проходят процесс колормаппинга и в итоге получается цвет пикселя. Это даёт более реалистичный результат, но может привести к шуму на изображении, особенно при использовании motion blur и DOF.

На практике это выглядит следующим образом:

Демистификация V-Ray DMC сэмплера
SUBPIXEL OFF
DMC MIN 1 MAX 50
Демистификация V-Ray DMC сэмплера
SUBPIXEL ON
DMC MIN 1 MAX 50

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

Демистификация V-Ray DMC сэмплера
SUBPIXEL OFF
DMC MIN 1 MAX 1
Демистификация V-Ray DMC сэмплера
SUBPIXEL ON
DMC MIN 1 MAX 1

Лишь уменьшив значение DMC Max subdivs до 1, что значит, что глосси отражения не будут разделены на число первичных лучей (число делится на 1), мы получим точно такую же картинку, как с выключенным Subpixel mapping.

Разница в изображениях обусловлена тем, что, когда DMC Max равен 1, посылаемый первичный луч сталкивается с объектом и берет все 30 сабдивов глосси отражения. Далее все сэмплы отражений усредняются, объединяются с диффузным цветом объекта и тонируются колормаппингом.

Поскольку Vray использовал все 30 глосси сабдивов, мы сохранили яркость такой же как с выключенным Subpixel mapping. В сравнении с примером, где DMC Max равен 50, произошло уменьшение глосси сабдивов до 1 (30/50=0.6, то есть 1) на каждый первичный луч посланный на пиксель, после чего эти сэмплы были усреднены с диффузным цветом объекта и прошли процесс колормаппинга.

Так как DMC Max был равен 50, Vray послал гораздо больше первичных лучей на каждый пиксель, в то время как вторичных лучше для просчета глосси было послано гораздо меньше.

Это может быть исправлено путем увеличения сабдивов на материале который теряет свой цвет. В моем случае, если я ставлю DMC Max 50, я могу увеличить количество сабдивов на глосси отражениях до 500, что значит (помните ту таблицу?), что Vray возьмёт лишь 10 сабдивов на отражения. Это сделает отражения столь же яркими как с выключенным Subpixel mapping, но у вас будут все преимущества, которые даёт его включение.

Пример 04: 10+ Area источников света в сцене

В сценах с множеством источников света Area использование DMC может заметно помочь, особенно если вы используете motion blur и DOF. Следующие два изображения продемонстрируют вам это. Я использую 100 источников света Area и вы можете видеть как DMC превосходит Adaptive subdivision сэмплер.

Количества шума на обоих картинках одинаково, некоторые места на DMC чище, некоторые шумнее чем у Subdivision сэмплера, но учтите что я использовал 50 Max subdivs для DMC, что достаточно много.

Имейте также ввиду, что включение Use light cache for glossy rays может сильно помочь в сценах со множеством источников света.

Демистификация V-Ray DMC сэмплера
Adaptive subdivision сэмплер
MIN 0 MAX 2
CLR THRESHOLD 0.05
Демистификация V-Ray DMC сэмплера
DMC сэмплер
MIN 1 MAX 50
CLR THRESHOLD 0.02

Пример 05: Качество ГИ Irradiance map контролируется настройками DMC

Один важный момент, мерцание и шумы световой карты Irradiance Map тоже контролируются DMC сэмплером через параметры во вкладке Settings.

Демистификация V-Ray DMC сэмплера
ADAPTIVE AMOUNT 1
NOISE THRESHOLD 0.01
MIN SAMPLES 8
Демистификация V-Ray DMC сэмплера
ADAPTIVE AMOUNT 0.5
NOISE THRESHOLD 0.01
MIN SAMPLES 8
Демистификация V-Ray DMC сэмплера
ADAPTIVE AMOUNT 1
NOISE THRESHOLD 0.01
MIN SAMPLES 128

Проблемы чаще всего начинаются, когда Adaptive равен 1 и, я думаю, IR map просто не берёт так много начальных сэмплов ГИ. В итоге она не в состоянии эффективно определить, где нужны дополнительные сэмплы, а где нет. Это может быть решено уменьшением величины Adaptive ниже 1, и на втором изображении вы можете видеть как значение 0.5 повлияло на качество ГИ, или путём увеличения Min samples до высокого значения вроде 128 (последнее изображение).

Заключение

Я искренне надеюсь, что всё написанное мной достаточно просто для понимания, несмотря на некоторую путаницу.

Я встречал людей, которых единый алгоритм DMC сэмплера ставил в тупик и они возвращались к Adaptive subdivision просто потому, что он более предсказуем. Но поверьте, однажды разобравшись с DMC сэмплером, вы захотите и дальше мыслить в этом направлении потому, что вы получаете полный контроль над сэмплером вашего рендер движка и возможность получать рендеры быстрее и чище. Удачных рендеров!

Рейтинг
( Пока оценок нет )
Блог о программировании, продвижении и дизайне.
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: