понедельник, 31 мая 2010 г.

Ambient Occlusion in Mental Ray


Ambient Occlusion - быстрый и простой метод симулировать эффект глобального освещения. Occlusion (окклюзия или преграда) - мера того, насколько окружающее пространство вокруг точки, занято геометрией. Определяется это за счет испускания некоторого количества пробных лучей по полусфере вокруг точки, а затем анализа расстояния до блокирующего объекта. На основе этой информации строится карта затемнения точки. При этом необходимо чтобы был включен механизм трассировки лучей - RayTracing.

Ambient Occlusion Shaders in Mental Ray


 

Работа шейдера

Существует 3 вида использования этого шейдера:
  1. Standart Occlusion. Используется как Ambient Light для шейдеров типа mib_illum_phong, где с помощью его контролируется размер (интенсивности разброса или влияния) окружающего освещения, т.е. освещения встроенного в сам шейдер (used to scale the contribution of ambient lighting). Он также может быть интегрирован в другие шейдеры на местро параметра Ambient.
  2. Reflective Occlusion. Где шейдер используется для контроля карты отражения (used to scale the contribution from a reflection map). В этом случае шейдер присоединяется к параметру окружения материала или на отражение (plugged into an environment or reflection shader slot of a material), а сама карта окружения (environment map), как файл, подключается на параметр Bright в шейдере  mib_amb_occlusion.
  3. Отдельный файл для дальнейшего совмещения (for external compositing). При этом AO шайдер применяет как основной материал, к каждому объекту в сцене.
Также он может быть использован как световой шейдер (as a light shader).



mib_amb_occlusion

В данном эксперименте я использую стандартную постановку сцены. Два DirectionLight, интенсивность второго источника света немного меньше. А также FinalFathering с параметрами рекомендованными для MentalRay. Сцену прилагаю.


Считалось все на Intel Core2Duo T7600 2.2 Ghz, 2Gb, Video GF8600(512Mb) - NoteBook

Параметры шейдера

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

Samples: 16, 32, 64, 128.

Bright - цвет объекта, в том случае если заграждающих объектов не найдено (no occluding objects are found). К этому параметру можно подключить любой другой шейдер, в этом случае АО просто добавится и затемнит объект где это необходимо.

В данном примере АО шейдер объектов и пола разные.

Dark - цвет объекта, в тех точках, вблизи которых найдены заграждающие объекты.

Spread - определяет область затенения вокруг точки, как бы разброс по полусфере размер которой определяется Max Distance. Когда значение 0.0 - разброс идет по прямой, 1.0 - разброс по конусу внутри всей полусферы.

Spread: 1,0.75,0.5,0.25,0

Max Distance - Расстояние на которое будут испускаться лучи. Если 0 (default), то будет просматриваться вся сцена. Если значение больше нуля, то только объекты находящиеся на этом расстоянии будут учитываться при просмотре являются ли они заграждающими. Измеряется в единицах Мауа: Window - Settings/Preferences - Preferences - Settings параметр  Linear.

Max Distance: 0.2, 0.5, 1, 0

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


Этот механизм также быстрее считается, но менее качественно.

Reflective: OFF, ON


Just use the mib_color_mix shader in "mode 4" (color multiplier) and multiply the outcolor of the environment shader with the outcolor of the mib_amb_occlusion shader.

Output Mode - определяет как цвета будут отображаться в конечном результате.
  • 0 - Стандартная AO 
  • 1 - Анализ окружения - environment sampling.
  • 2 - В результате получаем карту нормалей - Normal Map. 
  • 3 - Генерируется Bent Normals Map. Bent Normals можно использовать для анализа внешнего освещения от окружения, и аппроксимации image-based lighting. При этом считаются усредненные не прегражденные направления нормалей, и выводятся как цвета: красный по х, зеленый по у, синий по z. В общем это тоже самое что и карта нормалей, только кодировка происходит относительно ориентации камеры.
    "The bent normal is the average direction away from all blockers, so basically the average of all rays which did not hit anything from your method." - LINK
    "Actually, significant information is stored in the occlusion-map: the bent-vector. This vector is just the average vector of all the launched radius vectors which did not intersect any face. Graphically, we can visualize this vector as being the central vector of the Non Occluded Area zone. This new average vector will replace the normal vector that is defined for each vertex in the lighting calculations." - LINK "The main point of the Ambient Occlusion Lighting realism lies in the combined action of the occlusion factor and the bent-vector."
    "Bent normals are an extension to ambient occlusion to allow more intesting lighting. The idea is to average the unoccluded vectors and use this vector (which is "bent" in the direction of unoccluded hemisphere) to look up in an environment map." - LINK
    Анализ заграждающих и не заграждающих поверхностей

    Output Mode
    Model by Zhang Jian

    Occlusion in Alpha - если эта опция включена, то AO будет выводиться в альфа канал, не затрагивая цвета.

    Falloff - определяет "скорость" падения затенения от расстояния Max Distance. Работает только если Max Distance !=0. Технически, это функция затухания на нормированном участке 0 - max_distance, значение 1 - линейный спад. Если значение меньше единицы, то АО более интенсивная на меньшем участке, а если больше то АО имеет более гладкую градацию ч\б. Falloff - это не обрезка, это затухание или спад.

    Id Inclexcl - Определяет, по идентификатору Id, какой объект будет включен в просчет AO (положительный номер) или наоборот исключен из просчета (отрицательный номер).

    Id Nonself - Определяет какой объект не будет подвержен АО вообще.


    Также прилагаю написанный мною, небольшой, скрипт выставления ID объектов. Если Id уже стоит то скрипт автоматически его заменит. Просто перетащите его в рабочую область Мауа. Также более подробно можно посмотреть здесь.

    Maya 2011
    Здесь, для быстрого создания АО, можно использовать пресет слоя (Preset - Predefined Settings) .




    mib_fg_occlusion

    Алгоритм FinalGathering всегда высчитывает a scalar occlusion value. Данная утилита возвращает значение этого просчета для FG лучей и выводит его в качестве черно-белого значения.
    Color When Off - Что то вроде автоматического тригера, определяющего когда FG включен\выключен.


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

    Параметры mib_illum_phong

    Если подключить к параметру Color When Off АО шейдер, то при включенном FG будет просчитываться occlusion от FG лучей (и качество будет определяться рендер настройками FG), а при выключенном будет считаться простая AO. 

    Порядок соединения шейдеров

    Сравнение FG Occlusion и Abmient Occlusion


    Special Shader

    ctrl_occlusion
    Данный шейдер является аналогом mib_amb_occulsion но имеет ряд преимуществ:
    • Быстрее считается
    • Удобней настраивается
    • Имеет большее количество настроек
    • Встроенные настройки FG
    • Дополнительные режимы визуализации Bent Normal
    • Управления распространения затенения AO источником света
    Скачать данный шейдер можно отсюда 
    Установка: 
    перекидываете файлы из папки mentalray
    ctrl_occlusion.dll ------- maya/mentalray/lib folder
    ctrl_occlusion.mi ------- maya/mentalray/include folder

    и из папки maya:
    AEctrl_occlusionTemplate.mel in your docs/maya/version/scripts/ folder
    AEmr_lightsList.mel  -------  docs/maya/version/scripts/ folder
    render_ctrl_occlusion.xpm  ------- docs/maya/version/prefs/icons/ folder
    ctrl_occlusion.fti  -------  maya/icons/ folder


    ПАРАМЕТРЫ (вкратце)

    Main - Основные цвета, тоже самое что и Bright and Dark для стандартного mr шейдера
    .option 
    • probe.geometry - включает или отключает работу шейдера
    • put.in.alpha - помещает результат в альфа канал
    • exclude.GI - если включен global illumination, то они не учитываются
    • built.in.ao - если материал к которому подключен данный шейдер содержит АО просчет то он будет заменен на данный.
    Sampling - то как будет анализироваться окружение точки
    • .adaptability - более точная настройка сэмплинга для близ-лежащих и отдаленных точек
    Occlusion - параметры испускания лучей, тоже что и max distance
    • .correction - дополнительная цветовая коррекция (лучше делать отдельно)
    Standart Parameters
    Ray Direction - настройки позволяющие управлять направлением распространение AO
    • custom.vector - можно самостоятельно задать направление
    • reflection.vector - создает Reflection Occlusion
    • light.vector - разрешает использовать направление распространения света в качестве направления АО

    Linked Lights - подключенный свет, т.е. тот с которого будет браться направление.
    • dir.blend - позволяет смешивать стандартное распространение с распространением по направление света. 1 - полностью свет, 0 - стандартный АО

    Enviroment - информация будет сэмплироваться на основе окружающего освещения.
    mode: 
    1. Color Bleeding - цвета от окружения будут умножаться (Multiply) в зависимости от параметра mix
    2. Enviroment - цвета от окружения будет прибавляться (Replace) с зависимости от параметра mix
    другие настройки отвечающие за цвет-коррекцию.

    Bent Normal - Вектор взаимодействия геометрии со светом и\или окружающими объектами
    bent.normals - выкл\вкл
    space - различные механизмы определения положения объекта в сцене (относительно других объектов или относительно камеры) и его взаимодействия со светом и\или тенью.


    FG Occlusion - позволяет симулировать FG лучи, не включая сам механизм. Насколько я понял, то этот механизм как очень близко считает простую AO а затем немного ее блурит и накладывает поверх. В общем вот картинки, результат так себе, по сравнению с тру FG


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

    НА ЭТОМ РАССМОТРЕНИЕ AMBIENT OCCLUSION я завершаю. Возможно будут какие то дополнения в будующем, по мере приобретения опыта. Для тех кому не хватило информации для размышления могу порекомендовать следующие ссылки:
    Dissecting the mib_amb_occlusion node
    Ambient occlusion concepts
    И другие ресурсы. Я постепенно буду сюда добавлять

    1 комментарий: