Демоверсии
Новости
Arnold
13 Января 2021

Обзор новых возможностей Arnold Renderer 6.1 и MtoA 4.1. Часть 1

 

Автор: Дмитрий Чехлов

Ядро визуализации Arnold Renderer уже давно зарекомендовало себя в индустрии и пользуется большой популярностью среди CG-художников. За счет слияния с компанией Autodesk у SolidAngle появилась возможность расширить клиентскую базу и портфолио своих продуктов, включая интеграцию Arnold в обширную линейку продуктов Autodesk для направлений Media & Entertainment и CAD.

В конце октября было выпущено обновление ядра системы визуализации Arnold Renderer и модулей расширения для пакетов Maya, 3ds Max, Cinema 4D, Houdini и Katana. В этой статье я познакомлю вас с новыми возможностями Arnold 6.1 и плагина MtoA 4.1.0, доступных для загрузки на сайте Arnold Renderer

Новое в Arnold 6.1

Последняя версия ядра визуализации и SDK Arnold включает в себя совершенно новый фреймворк постобработки изображений (imagers), поддержку вложенных диэлектриков (nested dielectric), значительно улучшенную прогрессивную и адаптивную выборку, загрузку текстурных карт в память GPU по требованию, а также множество других усовершенствований и исправлений.

Улучшения

Автоматическое переопределение путей к файлам

Значения string-параметров теперь можно автоматически изменять в зависимости от ОС, в которой работает Arnold. Например, это полезно, когда рабочие станции художников работают под Windows, а серверы на ферме рендеринга – под Linux. Конфигурация выполняется с помощью файла JSON, который содержит строки для поиска и замены для каждой ОС. Этот файл конфигурации можно определить с помощью переменной среды ARNOLD_PATHMAP. Приведу пример:

{

                "windows":

                {

               "this_path/": "some/other_path/windows/"

                },

                 

                "mac":

                {

                "this_path/": "some/other_path/mac/"

                },

                 

                "linux":

                {

                "this_path/": "some/other_path/linux/"

                }

}

Элемент управления rim light в шейдере Toon

В шейдер Toon был добавлен новый float-параметр rim_light_tint, позволяющий подкрашивать цвет края освещения, используя базовый цвет поверхности.

 Autodesk Arnold

Влияние параметра rim light tint на эффект затенения шейдером aiToon

На рисунке приведен пример визуализации модели с различными значениями параметра rim_light_tint. На иллюстрации A данное значение равно 0.0, на иллюстрации B – 0.5, а на иллюстрации C параметру rim_light_tint задано значение 1.0. В качестве цвета оттенка задан белый.

Imagers (фреймворк постобработки изображений)

Разработчики Arnold Renderer представили совершенно новый фреймворк для применения эффектов постобработки к визуализируемому изображению. К таким эффектам относятся коррекция цвета, коррекция тонов и виньетирование. Новый тип узлов постобработки, называемых imagers, что можно перевести как генераторы образов или изображений, работают с пикселями перед драйвером вывода изображения (output driver). Изображения могут быть связаны. Первоначальный набор генераторов изображений состоит из:

      • Imager_exposure
      • Imager_color_correct
      • Imager_lens_effects
      • Imager_white_balance
        • Imager_tonemap

Генераторы изображений работают как в пакетном, так и в интерактивном контекстах.

 Autodesk Arnold

Autodesk Maya 2020.2 и Arnold Renderer 6.1 с настройками фреймворка Arnold Imagers

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

Nested Dielectrics (вложенные диэлектрики)

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

 Autodesk Arnold

Пример распределения приоритетов для визуализации прозрачных материалов пересекающихся поверхностей (ист. документация Arnold Renderer). Стакану, воде и льду присвоен своей идентификатор приоритета

Приоритет – это просто целое число (по умолчанию 0), которое можно увеличивать или уменьшать по мере необходимости для определения диэлектрической среды в областях перекрытия. Если приоритеты уравновешены, то среды эффективно смешиваются в области перекрытия. На случай если вам нужно вернуться в старый режим, который вычисляет преломления неправильно, эффект можно отключить глобально, с помощью параметра options.dielectric_priorities.

Улучшенная прогрессивная и адаптивная выборка

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

Повышена производительность в Windows

Теперь в системах под управлением операционной системы Windows Arnold Renderer работает в среднем на 7-8% быстрее.

Оптимизация режима IPR

Режим интерактивной фотореалистичной визуализации (IPR) получил улучшения и оптимизацию как в ядре Arnold CPU, так и в Arnold GPU, особенно при перемещении камеры в сцене, содержащей множество узлов (от тысяч до миллионов граней, объектов, источников света, шейдеров и т. д.). Например, сцена с 24433 образцами геометрии и простым затенением увеличилась с 8 до 14 кадров в секунду на CPU и примерно с 3 до 20 кадров в секунду на GPU.

Повышена производительность Toon в ОС Windows

Contour_filter, используемый для визуализации эффекта Toon, теперь быстрее и лучше масштабируется, особенно на системах под управлением ОС Windows, с увеличением производительности до трех раз на CPU AMD Threadripper 2 и до четырех на процессорах AMD Threadripper 3.

Префикс Toon AOV

Шейдер toon получил новый необязательный префикс aov_prefix, который будет добавлен к именам AOV. Например, если aov_prefix – toon_, то диффузный канал AOV toon будет записан в toon_diffuse. Это можно использовать, когда вам нужно получить доступ как к значениям AOV toon, так и к значениям ядра LPE.

В Adaptive Subdivisions улучшено формирование мягких складок/загибов (soft creases)

Нормали мягких складок или загибов точнее следуют геометрии для небольших итераций.

Начальное значение AA включено в метаданные EXR

Теперь значение выборки AA теперь также записывается в метаданные файла OpenEXR.

Улучшение поддержки формата передачи данных MaterialX

Теперь поддерживаются узлы материалов (material nodes), а узлы шейдеров (shader nodes) и выходы графов узлов (node graph) могут быть подключены к входам узлов материалов. Определения узлов, реализованные в виде графов узлов, могут содержать как собственные шейдеры Arnold, так и шейдеры стандартной библиотеки MaterialX. Это полезно для создания многоразовых и переносимых групп материалов и определений, например, используя standard_surface с шаблонами MaterialX. Переменная среда ARNOLD_MATERIALX_NODE_DEFINITIONS теперь может указывать на каталоги и загружать определения нескольких узлов.

Улучшенное ядро Arnold GPU

Шейдеры для Global AOV

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

Первоначальная поддержка атрибутов в OSL

Теперь вы можете получать пользовательские данные (user data), привязанные к объектам, с помощью функции getattribute или с помощью атрибута параметра lockgeom. Эта первоначальная реализация все еще имеет некоторые ограничения по сравнению с реализацией в CPU-версии. Доступные для запроса атрибуты в настоящее время ограничены теми, которые привязаны к текущим заменяемым объектам и атрибутам активной камеры визуализации. Запрос параметров узла также пока не поддерживается.

Первоначальная поддержка трассировки в OSL

Вместе с функцией getmessage для получения информации о любом пересекаемом объекте, для трассировки лучей в шейдерах OSL теперь вы можете использовать функцию трассировки (trace function). Эта первоначальная реализация имеет ограничение, заключающееся в том, что вы еще не можете запрашивать параметры для пересекаемого объекта.

Улучшенная загрузка текстур по запросу

Ядро Arnold GPU теперь может частично загружать текстуры, что приводит к значительной экономии памяти графического процессора при использовании tiled- и mipmap-текстур, например, текстур в формате *.tx. В типичной сцене объем памяти, необходимой для текстур, может быть уменьшен до 5 раз. Для этой функции требуется последняя версия драйвера графического процессора.

Autodesk Arnold

Пиковое использование памяти графического ускорителя в зависимости от версии Arnold Renderer (5.4, 6.0.1, 6.0.2 и 6.1

Отмечу, что для Arnold 6.1 и использования функции sparse texture необходимо обновить драйвер графического ускорителя до одной из последних версий (450.XX и выше).

Первоначальная поддержка функции Light Linking

В версии 6.1 добавлена первоначальная поддержка функции Light Linking. В настоящее время существует ограничение – Light Linking не поддерживается для объемов (volumes).

Поддержка групп Light AOV

Ядро Arnold GPU поддерживает добавление групп Light AOV в LPE (light path expressions).

Увеличенная производительность компиляции OSL JIT

Была оптимизирована и увеличена производительность компиляции OSL JIT, что означает меньшее время, требуемое для получения первого пикселя, и увеличение производительности в интерактивном режиме при использовании шейдеров OSL. Во время тестирования повышение производительности было в среднем в 6,3 раза.

Улучшенная поддержка минимальной ширины пикселей и выборки мелких деталей

Для ядра Arnold GPU улучшена совместимость минимальной ширины пикселя с CPU-версией ядра, а также при выборке мелких деталей на поверхностях с нулевой шероховатостью.

Частичный вывод GPU IPR

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

Изменение расположения кэша OptiX

Каталог кэша Optix имел форму arnold- <ARNOLD_VERSION> _driver- <DRIVER_VERSION>. Теперь это просто arnold. Это означает, что для всех версий драйвера и Arnold будет использоваться один и тот же кэш. Обновление до новой версии, скорее всего, вызовет длительное предварительное заполнение JIT/кеша, но уменьшит использование диска, поскольку старые версии не будут занимать дисковое пространство.

Новые возможности в поддержке формата данных USD

Формы источников света

Процедуры теперь поддерживают UsdLuxShapingAPI, позволяя использовать точечные источники света и источники света типа IES.

UsdTransform2d

Делегирование процесса визуализации теперь поддерживает шейдер предварительного просмотра UsdTransform2d.

Назначение материалов для каждой грани

Делегирование процесса визуализации теперь поддерживает назначение материалов каждой грани объекта.

Статистика визуализации

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

Схема для персонализированных процедур

Схемы теперь включают ArnoldCustomProcedural для описания персонализированных процедур.

Обновления схем

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

Родительская Область

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

ST для координат текстуры

Координаты текстуры теперь записываются как primvars:st, чтобы соответствовать условиям формата USD.

Нововведения в API

AtParamValueMap

Новая функция AtParamValueMapClone() с применением новых функций API AiParamValueMapSetArray() и AiParamValueMapGetArray() может быть использована совместно с поддержкой значений массива.

Query total progress (Запрос общего прогресса)

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

float progress = 0;

AiRenderGetHintFlt(AtString("total_progress"), progress);

Преобразования в AiProceduralViewport

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

Несовместимые изменения

Правильные преломления с вложенными диэлектриками

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

mix_shader add для прозрачности

Ранее режим add в mix_shader также добавлял перекрытие прозрачности. Это означало, что эффекты, такие как минимальная ширина пикселя, будут учитываться дважды, что приводит к исчезновению объектов. Теперь добавляется только перекрытие непрозрачных областей, пока проходит максимальное перекрытие прозрачности. Старое поведение все еще можно использовать, установив для add_transparency значение true.

Пропуски обновления узла

Чтобы улучшить производительность режима IPR, реализован пропуск обновления узла в каждом кадре, если считаем, что узел не изменился с момента предыдущего кадра. Если внутренняя эвристика для обнаружения изменений в узлах неверна, и должен был быть вызван node_update, узлу, который необходимо обновить, вы можете задать метаданные force_update:

node_parameters

{

  AiMetaDataSetBool(nentry, nullptr, "force_update", true); // depends on camera node

  // ...

}

Таким образом Arnold всегда будет запускать node_update при каждом проходе визуализации. На данный момент это нужно только для узлов, которые обращаются к options.camera в их node_update. Если у вас нет доступа к исходному коду шейдера, вы можете глобально отключить эту оптимизацию, установив для параметра options.enable_fast_ipr значение false.

Мы рассмотрели основные изменения и новые возможности ядра системы визуализации Arnold Renderer, реализованные в версии 6.1. Данные изменения, в первую очередь, доступны в standalone версии Arnold Renderer, и при работе с Arnold SDK. Для пользователей прикладных приложений, таких как Autodesk Maya, SideFX Houdini, Autodesk 3ds Max и других, разработчики выпустили обновление модулей расширения и трансляторов сцен в формат представления сцены Arnold (*.ass). В следующей части поговорим об изменениях в модуле MtoA 4.1.0. До встречи!

поделиться
Для сбора статистики по работе PointCGI, мы cобираем данные о пользователях. Используя PointCGI, вы соглашаетесь с нашей политикой обработки персональных данных, включая технологию cookie.