1. Главная страница » Компьютеры » Ambient occlusion в 3d max

Ambient occlusion в 3d max

Автор: | 16.12.2019

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!

Здравствуйте, уважаемые!
По паспорту и в миру известен как Кагал Александр, в сети откликаюсь на ник igni. Год рождения — 1977. Живу и работаю в г.Одессе. По образованию и профессии — архитектор. Архитектурой занимаюсь с 1998 года (включая обучение в институте (ОГАСА)) С 2001 года проекты благополучно перекочевали с кульмана, ватмана и грифеля в электронную среду проектирования (AutoCAD + 3d studio MAX), сначала как необходимость (устроился в архитектурно-дизайнерскую студию, пришлось познавать САПР, до этого компьютеров боялся как чёрт ладана), а затем втянулся и теперь не мыслю работу без компьютера (хотя ручками продолжаю работать, только уже как хобби в свободное время.
Увлекаюсь, помимо CG, философией(в основном восточной и своей собственной), боевыми искусствами, холодным оружием, и вообще всем что не связано с непосредственной работой (занимался бы чем угодно, лишь бы не тем, чем надо 🙂 )
.
Хочу представить вашему вниманию урок, посвящённый Ambient Occlusion (AO), а именно — как просчитать АО пасс, способы и рекомендации. Вся изложенная информация в большинстве своём — переведённые и осмысленные хэлпы и мануалы, ну и чуть-чуть моих собственных изысканий)))
*Прилагаемые отрендеренные сцены считались в 3d MAX 2008 в разрешении 800х600, на следующей конфигурации — Intel Pentium 4 3,2 GHz HT, RAM 1024 mb, nVidea gForce 6600 128 mb, OS — Windows XP Pro SP-3* кол-во полигонов — 28341.

Что нам нужно для начала работы? Нам нужно прежде всего желание это сделать)))И конечно же установленный 3D редактор, какой — ну конечно же 3d studio MAX. Ведь мой урок ориентирован на 3d studio MAX, и если я освою что нибудь ещё (Maya, XSI, Houdini, Lightwave, Cinema 4d, Blender и т.д.), я обязательно дополню урок для других пакетов моделирования. Также нам понадобится vRay, желательно версии 1.5. Скачайте и установите бесплатные плагины и скрипты, рассматриваемые в данном уроке:
VRay ambient occlusion 2.0
Occlusion Pass Generator
Редактор есть, плагины и скрипты установлены, осталось дело за малым — создание новой сцены, либо использования готовой. Что будет в сцене — абсолютно не важно, наша главная задача — просчитать АО предоставленными способами и выбрать для себя оптимальный.Именно поэтому я не навязываю вам своей сцены, в ней нет ничего, ни хорошего, ни плохого, ни особо навороченых настроек. Можете просто кубиковсфер накидать.

Читайте также:  Pentax k 70 kit 18 135mm

Очень краткая информация об АО

"Что такое occlusion pass?
Чтобы упростить объяснение, представте ситуацию, когда все ваши объекты окрашены в белый цвет и ваша сцена одинаково (со всех сторон) освещается белым светом. В принципе это должно привести к полностью белому изображению, но что происходит, когда некоторые объекты блокируют определенные лучи, которые должны были попасть на другие объекты? Эти лучи не доходят до другого объекта, и, как результат, поверхность затеняется. Чем больше лучей блокировано, тем темнее поверхность. Соответственно мы получаем это белое изображение с темными областями, возникающими там, где либо пересекается геометрия, либо близкорасположенные объекты блокируют лучи." — перевод части статьи с сайта boomerlabs
.

Простыми словами (конкретно утрируя) — АО это иммитация глобального освещения в сцене с однородным белым материалом на объектах.
Для более подробной информации прошу сюда либо сюда. Этот урок ориентирован не на "что это", а на "как это".

Для чего же он нужен? Ну, это уже решать Вам 🙂 В крайнем случае повесите на стенку в красивой рамочке 🙂
Скажу только следующее — сам использую его для оживления просчитанной картинки, для добавления некоторой детализации в местах затенения мелких и средних деталей и просто в деталях, которые в большинстве случаюх "замуливаются" рендером "скоростькачество" (и даже иногда рендер "качествокачество" теряет деталировку).

Как это делается
Часть 1. Плагины и скрипты

Судя по тому, что для просчёта АО написаны плагины и скрипты, актуальность быстрого результата в среде CG специалистов значительно востребовано.

Occlusion Pass Generator

Рассмотрим плагин от Boomer labs "Occlusion Pass Generator" (в дальнейшем OPG)
Принцип его работы основан на использовании mental ray. Собственно всё это можно сделать и вручную, но об этом — ниже. Плагин даёт возможность в "один" клик подготовить сцену для просчёта АО.
Прежде чем нажать заветную кнопочку, мы делаем следующее:
1.пересохраняем нашу сцену.
2.проверяем наши материалы, они должны быть стандартными (виреевские маты плагин конвертит, но с дополнительными фичами (сохранение бампа, дисплейса и опэсити) могут возникнуть ошибки.(советую использовать скрипт товарища 3dZver "VrayMtlConverter")
3
. проверяем "Render elements" в диалоге рендера — не должно быть активированы пассы, особенно вреевские.
Активируем EditHold (в любой момент возвращает сцены на момент нажатия Hold, для возвращения нажимаем Fetch) Всё готово — начинаем экспериментировать)))

Samples — .чем выше значение, тем качественнее картинка, соответственно и время просчёта возрастает

Spread — более высокие значения смягчают тени, увеличивая радиус захвата

Distance — при значении 0 работает как skylight (автоматически вычисляет растояние) Зависит от единиц сцены Значения, отличные от 0, устанавливают радиус дистанции просчёта, дальше которого затенение не просчитывается.

Bump maps — сохраняет бамп для ваших карт, и включает его в просчёт АО (Внимание! не работает с Multi-sub object материалом!)

Displacement maps — сохраняет карты дисплейса, если они есть в сцене

Opacity maps — сохраняет карты прозрачности (сказать ничего не могу — не пробовал)

Execute — запускает процесс. Внимание! Изменения откатить нельзя! Перед нажатием пересохраните сцену или EditHold !

Save and rename — пересохраняет и переименовывает сцену если вы этим не озаботились самостоятельно (использовать в крайнем случае! у меня при активации этой опции сцена вылетала в винду и более не запускалась! хотя может у вас и сработает)

Открываем Material Editor. Смотрим что же изменилось. Ага! OPG переприсвоил маты, и создал один активный для нас с вами! (этот материал является инстансным, то есть если мы меняем его — меняются все остальные)
Если мы возьмём пипетку (около окошечка с названием мата) и кликнем на элементе сцены, на котором присутствовал бамп или дисплейс, мы увидим, что OPG создал новый материал, оставив из всех карт только бампдисплейс.
Смотрим на мою картинку, и меняем по своему усмотрению.
в соответствии с моими каракулями)))

Если честно, мне кажется что OPG работает не совсем корректно, а именно — выставляем значения в диалоге плагина, нажимаем кнопку, считаем — изменений не видим! в независимости от введённой информации OPG конвертит сцену с настройками по умолчанию (сэмплы 128, спрэид 0,75, дистанц — 0). По крайней мере так у меня. Поэтому желаемые цифры вводим вручную, что и накалякано на картинке.
Дерзайте — вдруг это у меня руки кривые, а не плагин)))

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

Сцена просчитана с параметрами: samples — 128, spread — 0.75, distance — 010003100, время — 53 сек

Сцена просчитана с параметрами: samples — 128, spread — 0,1110, distance — 1000, время 54 сек

VRay ambient occlusion

Следующий кандидат на вашу любовь и почитание — скрипт "VRay ambient occlusion" от plugins.angstraum.at (вроде так они себя обзывают).
Порядок установки и запуска можно прочесть в архиве со скриптом. Кто не очень в аглицком, прикладываю картинку для большей наглядности.
Где он у вас будет жить — это вы решите сами. (просто перетащите в меню или куда ещё)

Читайте также:  Lg twin wash отзывы

После установки можно работать (даже не нужно перезапускать МАКС)
Установите vRay активным рендером и вызывайте скрипт.
Больше ничего делать не нужно))) Скрипт не изменяет в сцене НИЧЕГО!

Выставляем предпочитаемые настройки и жмём "Render"

Чуть подробнее об опциях. Как вы видите, настроек меньше чем в OPG, да и нет вкуснятинки в виде сохранения бампадисплейсаопэсити ваших материалов.
Зато есть два метода просчёта 🙂

Dirtmap — основан на использовании vRaydirt шейдера.
Параметры:
Radius — определяет площадь захвата (в единицах сцены), в пределах которой вычисляется dirtmap.Чем выше значение, тем более затеняется сцена.
Image Sampler Override — Optimized rQMC Anti-Aliasing — когда активировано, достигается оптимальное соотношение производительностькачество для просчёта АО. Поскольку настройка адаптируется к уровню шума, основываясь на subps, нет необходимости в дополнительных настройках (vray рендера)
Subps — чем больше значение, тем качественнее результат. Время просчёта увеличивается соответственно.
Skylight — свет распространяется из небесной сферы или полусферы.
Параметры:
Sphere -свет идёт отовсюду, равномерно освещая всю сцену
Dome — свет ограничен горизонтом, и исходит от полусферы

Сцена просчитана с параметрами: Subps — 16, radius — 50020003100, время — 2 мин 17 сек

Сцена просчитана с параметрами: Skylight, spheredome, время -4 мин 9 сек

Часть 2. Вручную (handmade)

Существует категория людей, предпочитающих "чистый" макс, без плагинов (vRay по сложившимся традициям считается неотъемлемой частью макса, или — врей это то, что давно должно быть в наборе стандартных инструментов макса, и чего никогда не случится 🙂 ;( ). Для этой категории CG-деятелей, да и просто для общего развития расмотрим настройки для просчёта АО, используя vRay, mental ray и Default Scanline Renderer

vRay Renderer

Всё просто — создаёте материал типа VRaylightMtl с шейдером Vraydirt, который настраиваем под свои нужды:
Radius — определяет площадь захвата (в единицах сцены), в пределах которой вычисляется dirtmap.Чем выше значение, тем более затеняется сцена.
Subps — чем больше значение, тем качественнее результат. Время просчёта увеличивается соответственно.

Теперь просто кидаете созданый материал в слот Override mtl свитка Global Switches диалога рендера. Отключаете и включаете опции в соответствии с картинкой (default light, hidden light, shadow — отключаем, также отключаем GI если оно было активировано) Жмём "Render"

Сцена просчитана с параметрами: Subps — 16, radius — 50020003100, время — 2 мин

Mental Ray Renderer

Создаём стандартный материал.AmbientDiffusionSaturation делаем абсолютно белыми. В слот Self Illumination устанавливаем шейдер AmbientReflective Occlusion, настраиваем параметры. И присваиваем всем объектам сцены или, если есть необходимость сохранить карты бампа или дисплейса, работаем с каждым материалом лично))) не забывая и о том, что Distance можно варьировать — в зависимости от размеров объектов.
Создаём источникк света с 0,0 интенсивностью (чтоб МАКС не мешал нам своими дефолтными осветителями). Проверяем Environment — должен быть белым, карты отключены.

Samples — .чем выше значение, тем качественнее картинка, соответственно и время просчёта возрастает
Spread — более высокие значения смягчают тени, увеличивая радиус захвата
Distance — при значении 0 работает как skylight (автоматически вычисляет растояние) Зависит от единиц сцены Значения, отличные от 0, устанавливают радиус дистанции просчёта, дальше которого затенение не просчитывается.

Сцена просчитана с параметрами: samples — 128, spread — 0,75, max distance — 1000, время — 1 мин

Default Scanline Renderer

Здесь всё предельно просто. Открываем редактор материалов. AmbientDiffusionSaturation делаем абсолютно белыми. В закладке maps снимаем галочки со всего, кроме бампа (если он есть), зачем? допустим на дифьюзе у вас стояла карта, нам же нужно белый цвет, поэтому и снимаем галочку.
Открываем закладку lights, выбираем skylight и устанавливаем его в сцену в любое место (не существенно).Environment — белый. Выставляем предпочитаемые значения параметров и запускаем рендер.

Важные для нас параметры:
Multiplier — интенсивность освещения, чем выше, тем больше засветов
Sky Color — не забудьте выставить его на абсолютно белый.
Cast shadows — именно эта опция ответственна за просчёт АО с помощью skylight
Rays per Sample — чем выше значение, тем качественнее картинка, время увеличивается пропорционально

Сцена просчитана с параметрами: Rays per Sample — 20, multiplier — 11,5, время — 11 мин

В то время как я вам объяснял что да как, настало утро, и на сцене появилась хозяйка этого. хм. дачного бунгало))) причём деревья тоже успели подрасти, а цветы — распуститься. Если бы на моём бунгало по утрам вдаль всматривалась такая красотка, я бы тоже распустился))) Что же она высматривает? Скорее всего следующую часть нашего повествования.

полигонов в сцене — 1039666, время просчёта картинки (vRay, Irmap(high)lightcash(1000), AA — adaptive DMC, 800×600) — 8 мин 24 сек, время просчёта АО ("вручную"ментал реем) — 3 мин 7 сек.

Часть 3. Немного о постобработке

Уроков на тему постобработки предостаточно, но всёже внесу свою ржавую пятикопеечную монету. Хотя бы для того, чтоб показать куда же его, АО, помимо жёсткого диска, можно пристроить.

Не мудрствуя лукаво, открываем в фотошопе нашу картинку и нашу АО. Создаём новый слой в файле картинки, копируея в него АО.. Используя диалог blending mode изменяем смешивание (blend) Normal на Multiply. Смотрим результат. При необходимости уменьшаем прозрачность (opacity) На этом можно и остановиться. Но давайте добавим ещё красоты.
Копируем слой с картинкой (background) в новый слой и располагаем его над слоем с АО (чтоб слегка сгладить затенения там, где они слишком затеняют)
Идём FilterBlurGaussian blur, замуливаем со значением от 2 до 5, меняем смешивание Normal на Overlay. Любуемся результатом, и, при необходимости, регулируем прозрачность.

Читайте также:  Ltps или super amoled что лучше

Разница чувствуется, правда? Картинку можно ещё долго мучать в фотошопе, вот вы этим и займётесь, на досуге. потом. если захотите)))
Фотошоп, к слову сказать, не единственное средство. Любой редактор растровой графики с возможностью смешивания слоёв, и результат уже зависит лишь от вас. Ну а если вы считали не статику, тогда и в вашей любимой монтажке (Fusion, After Effect, Autodesk Combustion, Shake, Nuke и подобные им) найдётся инструменты, ведь верно?

Вот, собственно и всё на этот раз. Я с чувством выполненого долга схожу выпью чашечку-другую кофейку, а вы за это время чешете макушку, трёте лоб, ну или что вы обычно делаете в величайших раздумьях. Вам предстоит решить для себя, какой способ предпочтительнее именно для вас. Как говориться — на вкус и цвет товарища нет.
Обращаю ваше внимание — в примерах я использовал екстерьер, то есть есть ещё над каким уроком поработать. Но позже, когда сам разберусь с АО в интерьерах во всех возможных и невозможных проявлениях. Если кто подкованнее меня в этом вопросе — прошу бить на опережение, обижаться уж не буду)))

Спасибо за внимание! И да прибудет с Вами АО.

Да, для создания наших уроков была взята за основу версия V-Ray 1.5. На практике это самая распространенная версия этого рендерера сейчас и еще долго будет ею оставаться.

Отвечая на твой вопрос, первое, что стоит упомянуть, это общие принципы и что же вообще такое вообще Ambient occlusion.

Ambient occlusion (AO) – это, по сути, фейковая имитация глобального освещения. Суть ее заключается в том, что на основании геометрии сцены, создается карта светлых и темных зон. Где расположенные рядом объекты, углы, углубления и прочие мелкие детали сцены, будут подчерняться, а остальные зоны сцены будут оставаться светлыми.

Работает AO следующим образом. Из каждой точки геометрии на сцене по полусфере от нее выпускаются векторы. Затем, эти векторы проверяются на пересечения с другими объектами или деталями данного объекта сцены. Если один из лучей полусферы этой точки пересекается с геометрией сцены, то цвет этой точки становится темнее. Дальность, точнее длина векторов, определяется параметром радиуса. Чем он выше, тем более удаленные объекты от этой точки будут учувствовать в вычислении ее затемнения. Вот как примерно выглядит схема этих векторов:


Где внизу плоскостью показана поверхность объектов, а сверху показана геометрия другого объекта в сцене. Пунктиром показан радиус.

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

Как раз этим AO пассом, подмешиваемым в финальный рендеринг и является то, что ты видишь, активируя галочку Ambient occlusion в Indirect illumination. То есть рендерер попросту зачерняет все точки сцены, в которых полусферические векторы AO сталкиваются с соседними деталям геометрии.

Разумеется, что ни о какой физической корректности или фотореалистичности тут речи не идет. Единственная цель AO в Indirect illumination, это просто визуальное насыщение сцены мелкими деталями, призванное компенсировать недостаточную плотность GI сэмплов.

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

Вот как выглядит нормальный рендер, карта AO, и рендер с подмешанным в него AO.

Если присмотреться к крайнему правому рендеру, куда подмешано AO, то в общем-то да, деталей стало побольше, но вот "сюрприз" – место под тюлем, выглядит совсем не фотогенично 😁

Кстати, 3d модель это резного столярного классического зеркала можно бесплатно скачать в архиве библиотеки.

По поводу Use camera path, мы лишь можем похвалить разработчиков, сказав, что это одни из наиболее полезных нововведений. Если вкратце, то активация Use camera path позволяет избавляться от фликеринга на статических объектах при просчете комбинированных анимаций. То есть это анимации облета, но с движущимися объектами в ней. Для того, чтобы понять, что именно делает эта функция, как минимум следует быть полностью знакомым с техникой рендеринга walk-through (Fly-through) и Dynamic (with moving objects) анимацией.

Но, отвечая конкретно на твой вопрос, мы относимся к Use camera path СУПЕР положительно 👍

По поводу фильтров, то мы высказывали наше мнение о самой концепции их применения в статье про Antialiasing. Мы не советуем использовать антиалиасинг фильтры вообще, это касается фильтров в принципе. Как старых, так и новых 😉

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *