пятница, 28 сентября 2012 г.

Unified Sampling для Mental Ray в 3ds max (Russian Edition)

Unified Sampling



Для не специалиста,  Unified Sampling это новый алгоритм сэмплирования для mental ray, который намного умнее старой Anti-Aliasing (AA) семплинговой сетки. Unified Sampling умнее потому, что он использует сэмплы только там где это нужно и когда это нужно. Это означает что в результате сократится количество сэмплов, время на расчеты которых было потрачено в пустую (особенно для таких эффектов как motion blur), уменьшится время рендеринга, и улучшится способность для воссоздания мелких деталей.


Технически говоря, Unified это Quasi-Monte Carlo (QMC) сэмплинг в котором учитывается и время, и пространство, охватываемое виртуальной камерой при рендеринге. Основываясь на QMC алгоритмах и внутренней оценке разницы значений (не только контраста цвета), которые рассчитываются между индивидуальными сэмплами и пикселями как одно целое, сэмплинг “расслаивается”, что позваляет ему находить и адаптивно сэмплировать детали в масштабе меньше чем пиксель.


Преимущества Unified Sampling



- Быстрый ray traced motion blur (размытие объекта в движении), который должен быть более сглаженный и использовать меньшее количество памяти.

- Быстрый ray traced depth of field (глубина резкости).

- Unified Sampling лучше воспроизводит мелкую геометрию и мелкие детали.

- Основа для будущих технологий рендеринга и материалов.



Unified Sampling ДОЛЖЕН использоваться по умолчанию! И вот как это делается…



Как включить Unified Sampling?



 Unified Sampling  напрямую не доступен в 3ds max, но может быть запущен при помощи String Options.



Что такое String Options?



В данный момент основным методом компании Autodesk по интеграции новых возможностей  mental ray в свои продукты является String Options. Хотя вряд ли найдется много людей, которые скажут что им нравится работать с String Options, но на самом деле не существует другого выбора, если вы хотите использовать в своих работах что-либо новое в mental ray.



String Options это своего рода инструмент для активации различных компонентов mental  ray, которые не встроены напрямую в транслятор 3ds max/mental ray . Используя String options, вы можете дать команду mental ray включить или выключить определенный компонент и какие настройки в нем использовать.



Как активировать String options?



Не смотря на то, что многие новые компоненты mental ray в составе String Options появились еще в 3ds max 2010, до сих пор пользователи 3ds max не имеют возможности напрямую использовать их. Возможно это исправят в  3ds max 2014, но пока самым лучшим способом для доступа к компонентам String Options являются макроскрипты написанные Artur Leao и Thorsten Hartmann.



Примечание: При работе с Unified Sampling и в режиме Progressive Rendering рекомендуется использовать Raytracing, а не Scanline. Это связано с тем что режим Scanline уже устарел и никто изклёвых парнейего не использует, за исключением unified rasterizer который активируется при включении Use Fast Rasterizer  (Rapid Motion Blur) (Render Setup -> Renderer ->Rendering Algorithms) и Unified Sampling.



Унифицированный контроль



В дополнении к улучшению производительности, Unified Sampling упрощает работу пользователя, унифицируя методы контроля над различными компонентами mental ray включая Progressive Rendering, Iray и даже Rasterizer. Для Unified Sampling и семплинга в режиме Progressive Rendering, по большому счету, только одно значене должно приниматься во внимание: Quality (качество) (не путать с пресетами в скрипте Thorsten Hartman).



Enable –  эта галочка включает Unified Sampling.

Min. Samples  - минимальное количество сэмплов на пиксель.

                         - Значение по умолчанию равно 1.0. Не изменяйте его. Конечно, если у                   вас нет на то особых причин.

                         - Значения меньше 1.0 приводят к неполному сэмплированию. Может быть полезным при тестовом рендеринге.

                         - Это только лимит. Для контроля качества используйте значения “Quality”.



Max. Samples  - лимит максимального возможного количества сэмплов на пиксель.

                         - Значение по умолчанию в 100 обеспечит вас широким диапозоном адаптивности для работ уровня production. В некоторых ситуациях, таких как экстремальный motion blur или глубина резкости, значение в 100 едениц может оказаться недостаточным для достижения желаемого качества. Значения 200 или 300 должны помочь уменьшить нежелательный шум. 

                         - Это только лимит. Для контроля качества используйте значения “Quality”.



Quality –  отвечает за качество изображения. Чем больше значение, тем больше время рендеринга и тем выше качество финального изображения.

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

               - Можно рассматривать Quality, как количество семплов на разницу значений (Error).

               - При увеличении значений Quality, время рендеринга увеличивается логарифмически.

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



Error Threshold / Cutoff – Лимит, для разницы значений пикселей. Если разница значений не превышает указанного порога, то Mental Ray не учитывает ее, и не сэмплирует данные участки.

                   - В основном эта функция полезна для сцен с очень высокими значениями Quality (3.0+), при которых участки даже с очень низкой разницей в значениях все равно принимаются во внимание.

                   - В основном, для контроля качества используйте значения “Quality”, и оставляйте эту функцию отключенной.

                   - Если вы все же используете ее, то используйте ее с очень низкими значениями, например 0,001.



Дополнительные Заметки



При использовании Unified Sampling, Mental Ray игнорирует определенные настройки.

- Anti-Aliasing (AA) семплинговая сетка (min sample, max sample, anti-aliasing contrast) игнорируются, так как вы используете новый алгоритм сэмплирования Unified Sampling.

- Jitter игнорируется, так как Unified Sampling и так это делает на всем изображении с помощью QMC.



В скрипте Thorsten Hartman значения Quality и Cutoff могут задаваться отдельно для каналов RGB.  В 99% ситуаций это будет излишним.



Unified Sampling примеры и практика



Unified Sampling это синтез изображений на основе QMC алгоритма (Quasi Monte Carlo).



Какую пользу это может дать в работе, и какие преимущества можно извлечь из этого?



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




Уравнение визуализации и проблемы с комплексной сценой создают многогранную проблему, которую Unified Sampling помогает решить с помощью одного параметра, называемого Quality (качество). Этот процесс происходит не только в пространстве (растровом пространстве), но и во времени (motion blur).



Так как применять настройки Quality? Какие изменения происходят при увеличении настроек Quality?



Попробуем ответить на этот вопрос на примере вот этой сцены:




Увеличение параметра Quality заставляет сэмплер сосредотачивать больше сэмплов в местах с наибольшей разницей значений. Вот теперь пришло время заглянуть в Diagnostic Framebuffers. Для начала мы уделим внимание двум слоям в окне диагностики: Error (разница значений) и Samples (сэмплы). Вы можете задействовать этот компонент так же как вы делали это раньше, включив галочку Enable и выбрав Sampling Rate в свитке Diagnostic, который находится в меню Render Setup -> Processing. С этого момента Mental Ray  создаст отдельный файл с именем diagnostic.exr в той же папке, в которую указан Render Output основного изображения (В режиме диагностики, для генерации EXR файла обязательно наличие пути Render Output).



Откроем файл Diagnostic.exr в программе imf_disp.exe, которая находится в папке  3ds max -> mentalimages (до 2012 версии) или 3ds max -> NVIDIA (версия 2013 и выше). В меню Layer выберем mr_diagnostic_buffer_error, или нажмите Alt-2.


Немного на заметку



- Разница значений разделена на каналы (RGB). Для каждого канала своя разница значений.

-Чем больше разница значений, тем выше значение пикселя.

- При наведении мышью на пиксель отображается разница значений для пикселя (внизу справа в окне программы imf_disp)



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



Что произойдет если увеличить значение Qaulity?



Если увеличить еще?


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



Теперь давайте посмотрим на слой mr_diagnostic_buffer_samples (Alt-3)



Наше изображение стало чисто белым. Это связано с тем, что формат файла *.exr и количество всех сэмплов в одной точке является целымым числом. Это значит что если минимальным количеством сэмплов для пикселя у вас является 1.0, то и значения “S” (кол-во сэмплов) будут начинаться с 1.0 (белый цвет) и до максимального лимита сэмплов, что в любом случае даст пересвет при стандартной гамме и экспозиции. Решить данную проблему можно уменьшив значение параметра Exposure до -6.0.



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



Обратите внимание на следующее:



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

- С максимальным значением сэмплов равным 100, у вас может не оказаться ни одного пикселя со значением 100, если только это не продиктовано параметром Quality (возможно параметр Quality, не считает это необходимым при текущих его значениях).

- Значения сэмплов линейные. В отличии от других методов реализации QMC сэмплинга, Unified Sampling не экспоненциальный (т.е. не растущий в геометрической прогрессии: 4, 16, 64, 128 и т. д.). Это означает большую производительность. Вместо того, чтобы увеличивать количество сэмплов с 16 до 64, возможно пикселю необходимо всего 23 сэмпла. Таким образом вы избегаете излищнего сэмплирования в больших пределах.



Какое это имеет значение для настройки сцены?



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



В этом есть дополнительный бонус: В виду того что сэмплирование в данном случае очень гибкое, вы можете быть уверены что, например, изменение в анимации от кадра к кадру будет иметь постоянный уровень качества. И даже если новый, сложный объект появится в кадре, Unified Sampling компенсирует это так, что вам не придется вносить изменения в количество сэмплов.



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



Так для чего вообще мне нужны сэмплы?



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



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



Как Unified Sampling может помочь при использовании motion blur or depth of field (DOF)?



Motion blur и depth of field (DOF) это просто проблемы связанные с шумом. Unified Sampling будет сэмплировать эти участки только в тех местах где необходимо наибольшее количество сэмплов. Что это значит? Это значит что при использовании motion blur и DOF, на вашем изображении появляются размытые участки, что в свою очередь означает, что при потере детализированости на размытых участках необходимо меньше сэмплов. Так что производительность теперь распространяется на все виды проблем и их размеры.



Теперь вы понимаете как Unified Sampling решает с большей легкостью много проблем на вашем изображении используя всего один параметр Quality.



Что насчет не стандартного подхода к производственному процессу? Есть ли возможность выжать больше из Unified Sampling при настройке сцен?



Да! На самом деле, это возможно наилучший способ использовать Unified Sampling для сложных сцен.



Обратим наше внимание на глянец (glossiness). При стандартном (старом подходе) для решения проблем glossiness, внутри шейдера мы задавали определенное количество glossy сэмплов и каждый луч испущенный из камеры (Eye Ray), заставлял шейдер испускать дополнительное количество лучей для каждого сэмпла, помогая таким образом сэмплеру сформировать глянцевые отражения. То же самое касается источников света с заданной площадью или объемом при формировании мягких теней, а также других еффектов которые могут контролироваться внутри шейдера. А теперь представьте, что лучь сталкивается с объектом и посылает 64 луча для расчета глянцевых отражений. Для пикселя с 16 сэмплами можно ожидать до 1024 лучей отражения. Эти лучи в свою очередь могут столкнуться с другими объектами и активировать шейдеры… еще до 1024 раз. Если количество переотражений у вас достаточно высоко, то можно ожидать лучевой взрыв!



А что если мы решили позволить Unified Sampling самому контролировать сэмплирование. В качестве общего контроля над кадром, Unified Sampling можно использовать на подобии “brute force”. Уменьшите значение сэмплов в шейдере до 1.

При таком повороте событий пиксель может быть бомбардирован только 400 раз! Но при этом и лучей отражения будет послано только 400, а это меньше чем 1024 всего с 16 сэмплами о которых говорилось ранее (это относится и к источникам света и их теням). Например, в этой сцене параметр Quality равен 1 и  я использовал 78 источников света у которых Shadows Samples равно 2 (все источники типа Area). У всех материалов количество reflection/refraction сэмплов равно 1. Время рендера 1200х900 составило 1 час 34 минуты!


Раньше нам приходилось использовать большее количество сэмплов в шейдерах и источниках света. В некоторых случаях это было равносильно самоубийству. Но ведь и сейчас наше изображение не выглядит хорошо (например виден шум от теней на потолке). Подумайте вот над чем: если  раньше я использовал источники света с 32 сэмплами, то пиксель с 16 сэмплами испустил бы до 512 лучей. Чтож, для этой сцены я использовал значение max samples равное 100 (100*2=200), и это значительно меньше тех 512, которые я бы получил раньше (не забывайте, сейчас я использую только 2 сэмпла теней).



Как это исправить?



Для начала увеличте параметр Quality. Так как производительность Unified Sampling значительно выросла в mental ray 3.10 (3ds max 2013), то можно просто попробовать отрендерить сцену в 3ds Max 2013 без изменения параметров, если до этого вы использовали 3ds Max 2012.



На заметку относительно Unified Sampling в mental ray 3.10



- Параметр Quality использовавшийся в предыдущих версиях тепеь будет испускать меньше Eye Rays так как теперь они не задействованы.

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

- В местах с недостаточным качеством будет создаваться более гладкий шум

- Буфер кадра больше не будет иметь артефактов

- Ребра и тонкие объекты (такие как волосы) будут иметь улучшенную резкость

- Более гладкий Motion Blur



Так же необходимо увеличить параметр max. samples. Как было указано в предыдущем примере, возможно нам необходимо 512+ лучей. Нам необходимо увеличить лимит чтобы Unified Sampling мог это учитывать.



Но теперь появилась другая проблема. При увеличении параметра Quality участки с не высоким контрастом сэмплируются без видимых на то причин (обратите внимание на темные участки). Как это исправить?



Редко используемый параметр Сutoff/Error Threshhold



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



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



Даст ли не стандартный подход к производственному процессу преимущества при использовании motion blur и depth of field?



Да, и большое в большинстве случаев



Все дело в том что теперь каждый пиксель может сэмплироваться сотни раз. Добавьте motion blur и/или depth of field и результат будет менее ресурсоемким чем раньше. Unified Sampling автомотически разбросает эти сэмплы для всех этих эффектов.



Так почему же это менее ресурсоемкое?



Те дополнительные сэмплы, которые добавляются в процессе просчета будут учитывать временное сэмплирование для motion blur и смену направления луча для depth of field. Так что теперь эти эффекты воспроизводятся с меньшими затратами. Вы уже посылаете большое количество лучей. Все для поддержания эффективности QMC. На размытых участках где сэмпл активирует шейдер, будет сгенерировано по одному сэмплу для каждого вида эффекта, тем самым снизится расчетная нагрузка на этот сэмпл на краях размытых деталей.



Теперь вы знаете как на практике использовать Unified Sampling. Надеюсь вы обнаружите что широкий разбег в минимальном/максимальном количестве сэмплов и использование параметра Quality упростят настройку сцен и сделают визуализацию быстрее.



И еще на заметку



- Использование Progressive rendering может помочь вам в настройках сцены чтобы проверить свет, материалы и т.д. обновление картинки в этом режиме происходит очень быстро. Уже через 3 минуты изображение было достаточным для того чтобы понять все ли с ним впорядке.

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

- Комбинирование функций которые по умному  сэмплируют вашу сцену ускорит время рендеринга и качество high quality визуализаций. Unified Sampling это основа, которая может быть улучшена с помощью BSDF шейдеров, Builtin-IBL, Importons, и других современных технологий настоящего и будущего.

- Производительность Unified Sampling логарифмическая как и многие brute force техники. Это означает что в процессе увеличения значений параметра Quality время визуализации увеличивается незначительно.



P.S.



 Если вы еще ни разу не сталкивались со скриптами Artur Leao и Thorsten Hartmann и не имеете ни малейшего понятия о Unified Sampling, значит вы застряли где-то в году 2010. Поэтому быстро скачиваем, устанавливаем, изучаем, наслаждаемся.



P.P.S.



Я не являюсь автором этой статьи. Я просто перевел три статьи написанных под Maya на этом сайте и адаптировал их под 3ds max. Зачем я это делаю? Я люблю Mental Ray и хочу чтобы другие пользователи у которых плохо с английским имели доступ к информации об этом рендере, его новых функциях и не сбрасывали его со счетов. Как говорится не виреем единым.



P.P.P.S.



Чтобы глобально контролировать количество Reflection/Refraction сэмплов во всех Arch&Design материалах, я написал скрипт Global Samples который можно скачать здесь или тут. Очень полезный если вам нужно адаптировать старую сцену под Unified Sampling Brute Force.




P.P.P.P.S

Одна из моих последних работ выполненых при помощи Unified Sampling:



В сцене 7 Area источников света
Я использовал следующие настройки:

Arch&Design material reflections/refractions samples = 2
Shadows samples = 4
Quality = 5
Min / Max samples = 1 / 250
Cutoff / Error Threshold = 0.005

AO отключен и не использовался в постобработке.

Время рендеринга 1200х900 = 1.47.20 (без FG/GI пассов)

Я очень часто слышу что в V-ray чуть ли мгновенно и с закрытыми глазами можно настроить сцену для визуализации (Хотя часто это просто чьи-то настройки почти на все случаи жизни). Попробуйте Unified Sampling и убедитесь что и сцены mental ray могут настраиваться при помощи 5-7 кнопок...

7 комментариев:

  1. опробовал на рабочей сцене... первое впечатление - СУПЕР! ;)
    побольше тестов разных поделаю ещё... но пока... ну прям радует ))) еще раз спасибо за материал ;)

    ОтветитьУдалить
  2. Да, на "захламленных" сценах очень и очень ловко работает. Только для себя все же нижний предел семплирования для лампочек и материалов я установил в 4, а не 2 :) Но это детали. Спасибо за перевод, теперь есть куда посылать студентов в ответ на "а с английским у мене проблемы" :))

    ОтветитьУдалить
    Ответы
    1. Надеюсь теперь у студентов проблем не возникнет, по крайней мере с Unified Sampling :)

      Удалить
  3. Hi! I can't read Russian (or the language you are writing in :) sorry), but I have a suggestion. Your script is very useful, but for really optimize for unified sampling you need to set the samples values of the LIGHTS to the lowest values too. Would you add this function to your script? Thank you!

    ОтветитьУдалить
    Ответы
    1. Hi, Unfortunately I'm not a script guru, but I understand that controls for lights samples should be present as well in the script. For now I have lack of experience in maxscript and all my tries to make it working give no results needed for now.

      Удалить