что такое ambient occlusion map
Что такое Ambient Occlusion (AO)
Ambient occlusion – метод глобального фонового или непрямого затенения объектов.
Мягкие тени, создаваемые за счет Ambient Occlusion в различных трещинах и углублениях 3D-объектов, освещаемых в сцене непрямым освещением, визуально разделяют объекты, добавляя дополнительного реализма на рендере.
Например, Ambient Occlusion можно использовать для лучшего визуального разделения кирпичей стены, которые на самом деле не разделены. АО – это не то же самое, что и тени, отбрасываемые прямым источником света, фактически, это фейковые тени, образуемые за счет непрямого освещения, которые на рендере отбрасывают поверхность геометрии.
Если эти лучи взаимодействуют с другой поверхностью, этот участок становится темнее. Если нет – светлее. В большинстве 3D-приложений АО рассчитывается с помощью специального шейдера, который назначается на геометрию. После рендера АО-пас добавляется к изображению в редакторе для композитинга, например в Photoshop, где он дополнительно редактируется и улучшается.
Учитывая, что АО имитируется тогда, когда поверхность объекта «испускает» свет, любой объект с назначенной картой прозрачности не будет просчитываться автоматически. При этом кажется, что АО не рассчитывается, но это не так, поскольку на самом деле лучи света проходят сквозь прозрачную геометрию.
Ambient Occlusion идеально подходит для смягчения всех теней в сцене, если они чрезмерно резкие, а также для их затемнения, если светлые. При этом необходимости в создании дополнительного источника света нет, поскольку АО работает не так, как, например, Final Gather, для которого нужен источник света, испускающий лучи. Для Ambient Occlusion также характерна некоторая вариативность цвета, благодаря которой наши глаза лучше различают детали, которые в противном случае остались бы незамеченными или размытыми. Кроме того, АО идеально подходит для визуализации незатекстуренных моделей.
Советы по настройке Ambient Occlusion
При просчете Ambient Occlusion время рендера можно также сократить, если запечь АО в отдельный слой. Это особенно важно при рендере анимации, поскольку при рендере каждого компьютер будет заново рассчитывать AO, что значительно замедляет время рендера.
Если при рендере на АО-пасе возникают непонятные артефакты, например, излишне насыщенные или слабые тени и пр., нужно подкрутить параметр Max distance в настройках АО. Этот параметр отвечает за то, какое расстояние должны преодолеть лучи света на пути к поверхности геометрии. Чем больше расстояние, тем шире и насыщенней будут тени. Увеличение расстояния также увеличит количество отбрасываемых теней. При уменьшении этого расстояния лучи проделают меньший путь, поэтому тени появятся только там, где геометрия будет расположена близко к поверхности. Экспериментальный подход – залог того, что вы достигнете желаемого результата.
Для дополнительного реализма на рендере можно также использовать непосредственно АО-пас, который можно найти в настройках рендера. Это позволит с помощью направленного источника света добавить Ambient Occlusion дополнительной направленности, а также уменьшит его зависимость от окружающей геометрии.
В некоторых случаях необходимости в рендере отдельного АО-паса нет, поскольку в некоторых материалах он встроен. В таких 3D-редакторах, как 3ds Max или Maya, АО можно найти в настройках архитектурных или дизайнерских материалов. Поэтому перед тем, как настроить отдельный АО-пас, проверьте, не встроен ли он в настройки материала.
Да прибудет с Вами Ambient Occlusion!
Да прибудет с Вами Ambient Occlusion!
Очень краткая информация об АО
Как это делается
Часть 1. Плагины и скрипты
Судя по тому, что для просчёта АО написаны плагины и скрипты, актуальность быстрого результата в среде CG специалистов значительно востребовано.
Occlusion Pass Generator
VRay ambient occlusion
После установки можно работать (даже не нужно перезапускать МАКС)
Установите vRay активным рендером и вызывайте скрипт.
Больше ничего делать не нужно))) Скрипт не изменяет в сцене НИЧЕГО!
Выставляем предпочитаемые настройки и жмём «Render»
Чуть подробнее об опциях. Как вы видите, настроек меньше чем в OPG, да и нет вкуснятинки в виде сохранения бампа\дисплейса\опэсити ваших материалов.
Зато есть два метода просчёта 🙂
Часть 2. Вручную (handmade)
vRay Renderer
Mental Ray Renderer
Default Scanline Renderer
Часть 3. Немного о постобработке
Уроков на тему постобработки предостаточно, но всёже внесу свою ржавую пятикопеечную монету. Хотя бы для того, чтоб показать куда же его, АО, помимо жёсткого диска, можно пристроить.
Не мудрствуя лукаво, открываем в фотошопе нашу картинку и нашу АО. Создаём новый слой в файле картинки, копируея в него АО.. Используя диалог blending mode изменяем смешивание (blend) Normal на Multiply. Смотрим результат. При необходимости уменьшаем прозрачность (opacity) На этом можно и остановиться. Но давайте добавим ещё красоты.
Копируем слой с картинкой (background) в новый слой и располагаем его над слоем с АО (чтоб слегка сгладить затенения там, где они слишком затеняют)
Идём Filter\Blur\Gaussian blur, замуливаем со значением от 2 до 5, меняем смешивание Normal на Overlay. Любуемся результатом, и, при необходимости, регулируем прозрачность.
Разница чувствуется, правда? Картинку можно ещё долго мучать в фотошопе, вот вы этим и займётесь, на досуге. потом. если захотите)))
Фотошоп, к слову сказать, не единственное средство. Любой редактор растровой графики с возможностью смешивания слоёв, и результат уже зависит лишь от вас. Ну а если вы считали не статику, тогда и в вашей любимой монтажке (Fusion, After Effect, Autodesk Combustion, Shake, Nuke и подобные им) найдётся инструменты, ведь верно?
Спасибо за внимание! И да прибудет с Вами АО.
Карта Ambient Occlusion (AO) Corona
Примечание: Ради реализма и физической точности мы не рекомендуем использовать ambient occlusion для усиления затенения во всей сцене. Corona Renderer позаботится о затемнении вогнутых областей без каких-либо специальных настроек. Пример сцены с Corona AO и без него:
| |
Материал с CoronaAO | Материал без CoronaAO |
CoronaAO в редакторе материалов
Окклюдированный/неокклюдированный цвет и расстояние AO
Для Corona AO есть три входа, первые два управляют цветом окклюзии и цветом без окклюзии, который также можно контролировать с помощью текстуры. Третий вход управляет параметром расстояния Corona AO с помощью текстуры или растрового изображения, которое можно дополнительно контролировать с помощью параметра Max Distance. Следующие примеры демонстрируют, как применяется окклюзия в зависимости от параметра Max Distance. Низкие значения обеспечивают контактное затенение и усиливают возможные пустоты на сетке, а также ускоряют рендеринг, в то время как более высокие значения охватывают большие поверхности/области, но и рендеринг происходит медленнее.
Режим расчета и распределение цвета
Существует три различных метода управления расчетом окклюзии:
Режим «Outside» включен по умолчанию, и он создает окклюзию, глядя на объект с внешней стороны (поверхность, обращенная к лицу). Это похоже на освещение объекта светом окружающей среды.
Режим «Внутри» учитывает окклюзию при взгляде на объект изнутри (поверхность, обращенная назад).
Режим «Снаружи + Внутри» рассчитывает оба режима одновременно и объединяет их.
Режимы: Снаружи, Оба (снаружи + внутри), Внутри
В следующем примере в качестве цвета окклюзии используется карта грязи, с помощью Color Spread окклюзионный цвет можно заменить не окклюзионным, увеличив значение от 0,0 до 1,0. Это делает эффект окклюзии более сильным и очевидным.
Обычно нет необходимости изменять значение по умолчанию. Увеличение числа сэмплов обеспечит более чистый рендеринг (меньше шума) за более короткое время за счет других эффектов, таких как GI и сглаживание. При меньших значениях рендеринг происходит быстрее, но выглядит более шумным.
Низкие значения этого параметра приводят к равномерному распределению лучей вокруг нормалей геометрии. Увеличение этого значения приводит к тому, что лучи фокусируются только на окклюдированных областях. В следующем примере показано, как меняется концентрация лучей при изменении значения Ray Directionality с 1.0 до 0.0 по умолчанию.
Смещение направления можно также использовать отдельно для осей X, Y и Z. Это полезно при моделировании износа от протекающих веществ или жидкостей и других направленных эффектов.
В случаях, когда в художественных целях в сцене требуется усиленная окклюзия или грязь, элемент рендеринга CTexmap вместе с Corona AO, примененным в качестве его texmap, может быть использован для создания слоя, который впоследствии может быть смешан в 2D-редакторах сторонних производителей с помощью Beauty pass для дальнейшего контроля. Приведенное ниже сравнение демонстрирует различия между необработанным рендером beauty и рендером с наложенным Corona AO CTexmap:
Как и в предыдущих примерах с Calculation Mode и Color Spread, выветривание и повреждения могут быть привнесены в различные материалы с помощью текстурной окклюзии. В таких случаях необходима гранжевая маска, выполняющая роль цвета окклюзии. Лучше всего использовать ее с высоким цветовым охватом (около 1,0), а также в режиме расчета, который может создать трещины и выветривание на затирках для плитки или небольших полостях/трещинах. Сравнение:
Гранж-маска / карта, используемые в качестве цвета окклюзии и расстояния АО
Более подробно ознакомиться со всеми курсами образовательного проекта CGBandit вы можете здесь: https://www.cgbanditcourse.com
Перевод статьи осуществлен образовательным проектом CGBandit c официального сайта coronarenderer.
ORM textures, а стоит ли оно того?
Недавно я читала статью и увидела описание процесса создания интересной текстурной карты, о которой пойдет речь далее…
Вступление
Что же такое ORM? Сокращенно — это «Occlusion, Roughness, Metallic» необычное сочетание трех разных PBR карт запакованных в одной текстуре.
Пример создания такой текстуры я буду показывать в Substance Painter, но также ее можно делать и в Photoshop (для меня это более затратный по времени способ тогда, как Substance Painter делает ее автоматически, главное только правильно настроить конфигурацию). Для рендера я буду использовать Blender 2.8.
Проблема
Для настройки текстур на объекте, работая в Blender, как и в любом другом редакторе, очень часто приходится добавлять примерно пять основных текстурных карт (BaseColor, Normal, AO, Metallic, Roughness), а то и больше. Этот процесс занимает хоть и не большое, но все-таки драгоценное время художника. Поэтому в данной статье я и хочу разобрать такую тему, как объединение карт в ORM и выяснить, какое она дает преимущество перед традиционными текстурами и дает ли его вообще.
Разбор
Ambient Occlusion, Roughness, Metallic — это три черно-белые (Grayscale) карты. Это значит, что их цвет лежит только в одном канале. Для справки, в текстурировании мы можем использовать текстуры, состоящие из 3-4 каналов (RGB, RGB+A).
Тогда зачем же хранить эти карты по отдельности, когда можно сделать небольшой архив-изображение, в трех каналах которого поместятся целых три черно-белые текстуры? В этом и есть преимущество ORM.
С теорией разобрались. Но перед тем как показывать настройку проектов в Substance Painter и Blender, я бы хотела привести немного измерений рендеринга одного и того же 3D объекта с использованием разных движков, попеременно подключая два разных материала (один с тремя отдельными картами, другой с использованием ORM).
Для рендеринга я использовала такие движки как Eevee, Cycles (CPU и GPU) и Octane Render (все настройки стандартные, sampling равен 128).
(Сразу хочу сказать, что в Octane я не профи, и, если вы заметите у меня неточности в настройке материалов, буду только рада, если вы на них укажите).
Теперь выбор остается за вами. Как видно результаты рендера очень близкие. Хочу напомнить, что эта статья написана в первую очередь лишь для того, что бы показать, как работать с ORM, а не про оценку времени рендеринга на разных движках.
Настройка текстур
Первоначально создадим свою конфигурацию в Substance Painter и добавим в нее три ячейки для текстур, первую и вторую – RGB+A (три связанных канала и один несвязанный), а третью – R+G+B (три несвязанных канала). Теперь переносим в ячейки уже имеющиеся карты. В итоге должна получиться такая картина
При экспорте я использовала добавление альфа канала и Dilation + Transparent для того, чтобы текстура запекалась только на месте UV шеллов и нигде больше. На рисунке видно какие в итоге получились карты.
Теперь разберемся с настройкой текстур в Blender. Думаю, что таким же образом можно настраивать ноды и в других редакторах, таких как Maya или Cinema4D.
(Сейчас будет совсем туториал, поэтому я уберу его из основного текста дабы не нагружать статью большим числом картинок).
Итак начнем с обычной настройки материала в Blender.
В Eevee и Cycles ноды с картами подключаются к своим ячейкам на главной ноде (PrincipledBSDF), которая их комбинирует. Единственное, что может вызвать вопрос, это, что я делаю с Normal Map? Такими действиями я инвертирую зеленый канал, чтобы карта из типа DirectX стала OpenGL. Да, можно и сразу выгрузить в OpenGL, но мне нравится более универсальный вариант.
Во втором случае AO, Metallic и Roughness я заменяю на ORM и добавляю ноду Separate RGB, чтобы распаковать каналы и достать карты по отдельности. Далее по той же схеме подключаю их к главной ноде.
Теперь разберемся с Octane. Ноды в этом движке отличаются, но имеют похожий смысл.
Вроде ничего сложного, теперь с ORM.
В случае с ORM разделение каналов работает по другой схеме и не так просто, как в Eevee и Cycles. Добавляя RGB Spectrum Tex (красный, зеленый или синий) и ORM в Multiply Tex, я вытягиваю из ORM только один канал, в зависимости от цвета RGB Spectrum Tex. Cosine Mix Tex преобразует этот канал в оттенки серого и отправляет в главную ноду (Universal Material).
Посмотрим сразу на итоговый результат, и, если вас он устраивает, можете смело читать как его добиться.
Это попарное сравнение всех рендеров мечей. Как видно Octane несколько отличается, так как имеет другие стандартные настройки, и настройки освещения в том числе. Но повторю еще раз, я не профессионал. На настройку материалов в Eevee и Cycles я потратила меньше времени, чем обычно, в Octane наоборот больше, так что использовать ORM или нет решать вам, а у меня всё.
Спасибо за то, что уделили время этой небольшой статье, надеюсь она была для вас полезной.
Mental ray 3.3 для 3ds max. Часть 2.
В седьмой версии 3ds max, благодаря mental ray 3.3, появился новый шейдер Ambient/Reflective Occlusion. Это шейдер обладает рядом интереснейших возможностей, позволяющих использовать его для решения широкого спектра задач визуализации и рендеринга, включая имитацию GI. Рассмотрением его свойств и возможностей практического применения и посвящено данное небольшое исследование.
Начну немного издалека. Построение изображений (рендеринг) в трехмерной компьютерной графике опирается на расчет трех основных компонент цвета поверхности – окружающего освещения (ambient color), диффузного освещения от прямых источников света (diffuse color), а также – зеркальных и specular отражений/преломлений. Ambient освещение в стандартной модели затенения в 3ds max не предполагает наличия источников света и основывается на простом, #34;одноцветном», фоновом цвете, который просто добавляется к диффузному и specular освещению поверхности. Последнее вовсе не означает, что для ambient-компоненты материала нельзя задавать карту цвета, например – растровую или процедурную карту.
Предлагаемая шейдером ambient/reflection occlusion схема расчета состоит в определении степени, или меры «затенения», или блокирования, точек поверхности окружающей геометрией в сцене.
Величина степени затенения рассчитывается по следующему правилу.
Для каждой точки поверхности, видимой в камеру, строится полусфера относительно ее нормали. Затем, через сферу, в сцену испускается в случайных направлениях некоторое количество лучей. Для испущенных лучей возможны только два варианта развития событий – либо они столкнутся с поверхностями других объектов и будут считаться «затененными» (occluded), либо они беспрепятственно выйдут за пределы сцены (или за пределы расстояния указываемого в настройках шейдера) и будут считаться «свободными», незаблокированными. В результате, степень затенения точки будет определяться как отношение числа заблокированных к общему числу испущенных лучей. Например, если всего испущено 10 лучей, только 5 из которых пересеклись в пределах сцены с другими объектами, то цвет точки будет иметь значение 50% серого, поскольку 50% лучей заблокировано другой геометрией. Как видим, все довольно просто.
Поскольку шейдер ambient/reflection occlusion (далее в тексте – АО) рассчитывает фоновое освещение, вполне логично сравнить возможности его алгоритма с расчетом полного глобального освещения методом final gathering + photon map. По сравнению с Final Gathering, АО не рассчитывает освещенность в точке пересечения с другой геометрией и не учитывает затухание света с расстоянием. А по сравнению с фотонными картами, АО не учитывает вторичных переотражений света между объектами. В силу указанных различий АО шейдер является корректной альтернативой расчета GI только в случае открытых сцен (экстерьеров) и дает неправильные результаты для закрытых сцен (интерьеров). Однако физическая корректность освещения в компьютерной графике не всегда является первостепенной задачей, чаще достаточно просто правдоподобности освещения. Такую правдоподобность АО вполне способен обеспечить. Допустимо также использовать АО совместно с фотонными картами, вместо FG. Хотя такой результат также будет далек от физической корректности, он может давать вполне убедительное и гладкое «псевдо-глобальное» освещение, причем время расчета будет гораздо меньше по сравнению с временем расчета методом FG + Photon Map.
Рассмотрим назначение параметров шейдера АО.
Прежде всего, я приведу спецификацию шейдера, как ее дает mental images:
color «mib_amb_occlusion» (
integer «samples» default 16,
color «bright» default 1 1 1 1,
color «dark» default 0 0 0 0,
scalar «spread» default 0.8,
scalar «max_distance» default 0,
boolean «reflective» default off,
integer «output_mode» default 0,
boolean «occlusion_in_alpha» default off
)
version 2
apply texture
Отсюда вытекает способ использования АО в сочетании с другими шейдерами для создания материала со сложными свойствами – mental ray phenomena или материалов 3ds max.
АО в результате вычислений может возвращать величину «color», т. е. цвет, и может принимать цвет от других шейдеров в качестве параметра для вычислений (параметры «bright» и «dark»). Результат вычислений шейдера ambient occlusion также может быть передан внешней функции-обработчику, например, для комбинирования результатов вычислений нескольких шейдеров в один общий результат.
АО может быть успешно использован для определения ambient-свойств материалов 3ds max. В этом случае результат вычислений АО будет сочетаться с диффузными, отражающими и преломляющими свойствами материала, по правилам, стандартным для материалов 3ds max.. Таков один из возможных способов реализации основной функции шейдера – «ambient occlusion», то есть затенение фонового освещения.
Еще один вариант использования АО – соединять его с другими шейдерами посредством «комбинирующих» материалов 3ds max, например – Shellac, Fallof, Mix и других. В этом случае АО может быть использован для определения любых свойств материала. Именно так реализуется функция reflect occlusion – для определения отражающих/преломляющих свойства материала используется сочетание АО, материала типа Raytrace и растровой карты для отражений.
Вполне возможно и одновременное использование обоих этих методов, в этом случае будет выполняться «полное» затенение, то есть и «ambient occlusion» и «reflective occlusion».
Наконец, третий способ использования шейдера АО – для целей компоузинга во внешних программах и пост-обработки изображений.
Интерфейсе шейдера АО в 3ds max выглядят следующим образом:
Параметр Samples определяет число лучей, «выстреливаемых» из точки через поверхность сферического сегмента в окружающую сцену. Чем больше лучей, тем более гладким будет результат. На гладкость результата оказывают также влияние настройки антиалиасинга и величина параметра Spread (угол сферического сегмента, через который посылаются лучи).
Параметр Bright позволяет определить цвет для незаблокированных лучей (лучей, не встретивших препятствий при трассировке в сцене), а параметр Dark – цвет для лучей, встретивших препятствие. Наиболее часто используемое практическое значение величины Dark – черный цвет. Результирующий цвет точки определяется как отношение числа заблокированных лучей к общему числу испущенных лучей и с учетом значений цвета, заданных для Bright и Dark. Для определения значений Bright и Dark можно использовать не только простой цвет, но и растровые карты, шейдеры и материалы.
Параметр Spread определяет угловую величину сферического сегмента точки поверхности, через который посылаются сэмплирующие лучи. Изменяется в пределах от 0.0 до 1.0. Значение «0» определяет только одно направление испускания (один луч) – вдоль нормали к точке или вдоль направления отражения, что используется для reflective occlusion. Значение «1» определяет полусферу (угловая величина 180 градусов). Чем больше угловая величина сферического сегмента, тем больше потребуется лучей для получения гладкого результата. С другой стороны, чем уже конус лучей, тем более резко очерченными будут теневые переходы и наоборот. Использование целой полусферы дает интересный эффект самозатенения поверхностей, что с успехом может быть использовано для «проявления» рельефа поверхности или оттенения деталей поверхностей, содержащих многочисленные мелкие элементы – травы, волос и т.п.
Параметр Max distance указывает максимальную длину сэмплирующего луча и тем самым – максимальное расстояние в пределах которого проверяется наличие геометрии. Если его значение равно 0, границы области проверки определяются размерами сцены. Таким образом, явное указание Max distance может быть использовано для ускорения расчетов ambient occlusion.
Включение/выключение флага Reflective определяет направление, относительно которого строится сферический сегмент для испускания лучей. Если флаг установлен (Reflective on) сфера строится относительно направления отражения света, определяемого свойствами материала и геометрии поверхности. Используется для расчета reflective occlusion. Если флаг отключен (Reflective off), сфера строится относительно нормали в точке поверхности, шейдер рассчитывает ambient occlusion.
Если параметр Return occlusion in alpha установлен в положение «on», создается растровая черно-белая карта значений ambient occlusion, которая помещается в альфа-канал изображения. Результат расчетов будет зависеть от установленного режима работы шейдера (значения параметра Type).
Теперь попробуем применить все это на практике. Рассмотрим вот такую сцену:
Сцена содержит плоскость с установленным на нее автомобилем и освещена двумя точечными источниками света, всем объектам сцены заданы материалы типа Standard.
А вот что мы увидим, если зададим для свойств поверхности шейдер ambient occlusion:
Все детали получили дополнительные мягкие тени в результате самозатенения, делающие их вид более объемным. Поскольку «небо» над автомобилем совершенно чистое, светлые участки обеих сцен почти идентичны. Во втором случае цвет поверхностей изменился по той причине, что параметр bright и dark шейдера АО имеют значения по умолчанию – белый и черный соответственно. Основной диффузный цвет материала значения не имеет, поскольку в расчетах не учитывается.
Теперь отключим тени у источников света, а над автомобилем поместим затеняющую плоскость.
Использование АО для определения диффузных характеристик поверхности не является использованием шейдера по прямому назначению, скорее – способом получения спецэффектов. Например, он хорошо подходит для реализации reflective occlusion. Кроме того, сочетание АО c другими материалами требует определенных усилий. Обусловлено это тем, что назначение «в лоб» карт и материалов для параметров «bright» или «dark» редко дает приемлемый результат. Здесь требуется комбинирование АО и материалов, например при помощи «оборачивающего» материала, такого как Shellac или Fallof.
Использование АО по прямому назначению предполагает определение с его помощью ambient – характеристик материалов. Для этого отключаются замки, блокирующие ambient и diffuse свойства материалов:
Если в сцене установить хотя бы один источник света, диффузные характеристики поверхностей «вступают в игру» наряду с ambient occlusion. Как хорошо видно на последнем рисунке, там где поверхность хорошо освещена источником (в данном случае он сверху) превалирует диффузный цвет, а в областях слабо освещенных – тень, рассчитанная АО. Таким образом, очевидно, что необходимо приводить в соответствие цвета «dark» и «bright» шейдера АО и диффузный цвет.
Однако, существует способ автоматизировать до некоторой степени этот процесс. Для этого нужно переключить АО в режим 1 (mode=1), в котором он будет выполнять сэмплирование окружения и настроить цвет окружения.
Существует еще один способ использования ambient occlusion, наиболее удобный из всех – шейдер АО можно назначить источнику света. В этом случае необходимость специально редактировать материалы почти полностью отпадает.
Для случая точечного источника этот метод состоит в следующем. Создаем и помещаем в удобном месте сцены источник света. В свойствах источника Advanced effects включаем Ambient Only, при этом Diffuse и Specular свойства становятся недоступны и рассчитываться не будут – мы превращаем обычный источник света в чисто амбиентный (фоновый) источник. Далее отключаем освещение у источника вообще – в Light Type убираем галочку из бокса «On» и идем к свитку свойств mental ray Light Shader. Здесь щелкаем на кнопке с надписью Light Shader и в появившемся списке выбираем Ambient/Reflective occlusion. Включаем галочку в боксе «Enable» (разрешаем его использование) и перетаскиваем кнопку Ambient/Reflective Occlusion c кнопки Light Shader в свободный слот редактора материалов. Это нужно для того, чтобы иметь возможность редактировать параметры шейдера. Результат:
Как видим, такой способ позволяет правильно сочетать результат расчетов ambient occlusion и свойства материалов и освещения, к тому же прост и универсален – достаточно всего лишь поместить в сцену один ambient – источник.
Теперь посмотрим, как влияют параметры АО на результат.
Spread = 1, сэмплирующие лучи испускаются через полусферу над точкой. Такой способ дает наиболее размытые тени с плавными переходами и самозатенением. Для достижения качественного результата требует большого количества сэмплов и потому самый медленный.
Spread = 0.5, сэмплирующие лучи испускаются через конус углом в 90 градусов:
Тени стали гораздо темнее и четче. Например, на сфере отчетливо просматриваются три пятна затенения от «земли», автомобиля и плоскости над сценой. Кроме того, при том же количестве сэмплирующих лучей что и в предыдущем случае, результат выглядит более сглаженным.
Для того, чтобы АО шейдер мог правильно строить отражения, необходимо использовать его в сочетании с картой типа Raytrace. Комбинация шейдера и такой карты может быть выполнена разными способами. Например, при помощи «оборачивающего» материала типа Mix, диаграмма материала поверхности может выглядеть так:
В качестве одной карты материала Mix выступает HDR изображение, которое используется для незаблокированных точек поверхности. Второй материал – mental ray Reflect, используется для расчета освещения заблокированных точек. Смешивание карт выполняет ambient occlusion, параметры которого настроены как в предыдущем случае.
Результат применения такого материала:
Теперь поверхность автомобиля правильно отражает окружение.
Смысл этих манипуляций с материалами и шейдерами заключается в том, что они позволяют быстрее рассчитывать отражения по сравнению с использованием истинного рейтресинга – за счет того, что отражения вычисляются только там, где это необходимо.
Приведенная диаграмма материала для reflective occlusion не единственна. Вот еще один пример на основе материала Fallof и Mix:
Можно придумать и другие, здесь поле для творчества ограничивается только фантазией и мерой необходимости.
Такие же комбинированные с шейдером ambient occlusion материалы можно создавать и для диффузных характеристик поверхностей.
Теперь сравним результаты и время расчета сцены с источником света SkyLight и реальными материалами, выполненный при помощи Final Gather, и расчет сцены с использованием ambient occlusion.
Для настройки освещения с помощью ambient occlusion нужно «ловить» соотношение интенсивности прямого освещения и ambient – освещения. Для этого удобно воспользоваться возможностью Material Override прямо из рендера и настраивать параметры шейдера ambient occlusion. Для данной сцены интенсивность точечного источника, дающего прямое освещение составила 0.2, для параметров шейдера АО выбраны следующие значения: Spread = 0.8, Samples = 32, mode = 1 (сэмплируется Environment), Max distance = 150 см.
При таких настройках «чистый» ambient occlusion выглядит так:
Такие настройки были выбраны из-за особенностей материала кузова автомобиля – он относительно темный. Для более светлого материала настройки шейдера АО могут быть другими, с более насыщенными тенями.
Теперь выполним полный рендер сцены, с текстурами:
Хорошо видно, что хотя Ambient occlusion и создает некое подобие глобального освещения, тем не менее, отсутствует одно из важнейших свойств правильного освещения – затухание света по мере удаления от источника, в данном случае – от окон вглубь комнаты. Возникает вполне логичное предположение, что ситуацию можно попробовать исправить с помощью фотонных карт
Таким способом вполне можно достичь затухания освещения, а время рендера будет гораздо меньше, чем при использовании связки фотонные карты + FG. Существенным недостатком является необходимость сильного размывания фотонной карты и, кроме того, остается проблема темных углов. Таким образом, хотя этот метод далеко не идеален, он вполне может быть востребован при определенных обстоятельствах.
Дальнейшим развитием этой техники рендеринга является использование тройной связки «фотонная карта + FG + ambient occlusion». В этом случае мы имеем альтернативу Exposure control – управления освещением при помощи экспозиции. При этом на ambient occlusion возлагается роль постоянного константного освещения, которое можно просто добавить к глобальному освещению, рассчитанному фотонными картами и Final Gathering. Таким образом можно избавиться от засветов в ярко освещенных областях сцены (возле окон) и одновременно добиться того, что темные области сцены будут достаточно хорошо освещены. Можно считать, что в данном случае ambient occlusion позволяет имитировать способность человеческого зрения приспосабливаться к освещению в широком диапазоне интенсивностей.
На практике следует рассчитывать глобальное освещение и ambient occlusion за два отдельных прохода и затем комбинировать их в программе обработки растровых изображений, поскольку расчет освещения методом фотонная карта + FG + ambient occlusion за один проход выполняется очень долго.
Далее каждый из «пассов» укладывается на отдельный слой в программе обработки изображений в определенном режиме смешивания с остальными слоями. Одно из важных преимуществ такого способа заключается в более широких возможностях управления конечным результатом за счет индивидуальных настроек свойств слоев.
На этом пока все. В следующий части будет рассмотрен шейдер SSS, его свойства и возможности.