Да прибудет с Вами Ambient Occlusion!
Да прибудет с Вами 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
Редактор есть, плагины и скрипты установлены, осталось дело за малым - создание новой сцены, либо использования готовой. Что будет в сцене - абсолютно не важно, наша главная задача - просчитать АО предоставленными способами и выбрать для себя оптимальный.Именно поэтому я не навязываю вам своей сцены, в ней нет ничего, ни хорошего, ни плохого, ни особо навороченых настроек. Можете просто кубиков\сфер накидать.
Очень краткая информация об АО
"Что такое occlusion pass?
Чтобы упростить объяснение, представте ситуацию, когда все ваши объекты окрашены в белый цвет и ваша сцена одинаково (со всех сторон) освещается белым светом. В принципе это должно привести к полностью белому изображению, но что происходит, когда некоторые объекты блокируют определенные лучи, которые должны были попасть на другие объекты? Эти лучи не доходят до другого объекта, и, как результат, поверхность затеняется. Чем больше лучей блокировано, тем темнее поверхность. Соответственно мы получаем это белое изображение с темными областями, возникающими там, где либо пересекается геометрия, либо близкорасположенные объекты блокируют лучи." - перевод части статьи с сайта boomerlabs.
Простыми словами (конкретно утрируя) - АО это иммитация глобального освещения в сцене с однородным белым материалом на объектах.
Для более подробной информации прошу сюда либо сюда. Этот урок ориентирован не на "что это", а на "как это".
Для чего же он нужен? Ну, это уже решать Вам :) В крайнем случае повесите на стенку в красивой рамочке :-)
Скажу только следующее - сам использую его для оживления просчитанной картинки, для добавления некоторой детализации в местах затенения мелких и средних деталей и просто в деталях, которые в большинстве случаюх "замуливаются" рендером "скорость\качество" (и даже иногда рендер "качество\качество" теряет деталировку).
Как это делается
Часть 1. Плагины и скрипты
Судя по тому, что для просчёта АО написаны плагины и скрипты, актуальность быстрого результата в среде CG специалистов значительно востребовано.
Occlusion Pass Generator
Рассмотрим плагин от Boomer labs "Occlusion Pass Generator" (в дальнейшем OPG)
Принцип его работы основан на использовании mental ray. Собственно всё это можно сделать и вручную, но об этом - ниже. Плагин даёт возможность в "один" клик подготовить сцену для просчёта АО.
Прежде чем нажать заветную кнопочку, мы делаем следующее:
1.пересохраняем нашу сцену.
2.проверяем наши материалы, они должны быть стандартными (виреевские маты плагин конвертит, но с дополнительными фичами (сохранение бампа, дисплейса и опэсити) могут возникнуть ошибки.(советую использовать скрипт товарища 3dZver "VrayMtlConverter")
3. проверяем "Render elements" в диалоге рендера - не должно быть активированы пассы, особенно вреевские.
Активируем Edit\Hold (в любой момент возвращает сцены на момент нажатия Hold, для возвращения нажимаем Fetch) Всё готово - начинаем экспериментировать)))
Samples - .чем выше значение, тем качественнее картинка, соответственно и время просчёта возрастает
Spread - более высокие значения смягчают тени, увеличивая радиус захвата
Distance - при значении 0 работает как skylight (автоматически вычисляет растояние) Зависит от единиц сцены Значения, отличные от 0, устанавливают радиус дистанции просчёта, дальше которого затенение не просчитывается.
Bump maps - сохраняет бамп для ваших карт, и включает его в просчёт АО (Внимание! не работает с Multi-sub object материалом!)
Displacement maps - сохраняет карты дисплейса, если они есть в сцене
Opacity maps - сохраняет карты прозрачности (сказать ничего не могу - не пробовал)
Execute - запускает процесс. Внимание! Изменения откатить нельзя! Перед нажатием пересохраните сцену или Edit\Hold !
Save and rename - пересохраняет и переименовывает сцену если вы этим не озаботились самостоятельно (использовать в крайнем случае! у меня при активации этой опции сцена вылетала в винду и более не запускалась! хотя может у вас и сработает)
Открываем Material Editor. Смотрим что же изменилось. Ага! OPG переприсвоил маты, и создал один активный для нас с вами! (этот материал является инстансным, то есть если мы меняем его - меняются все остальные)
Если мы возьмём пипетку (около окошечка с названием мата) и кликнем на элементе сцены, на котором присутствовал бамп или дисплейс, мы увидим, что OPG создал новый материал, оставив из всех карт только бамп\дисплейс.
Смотрим на мою картинку, и меняем по своему усмотрению.
в соответствии с моими каракулями)))
Если честно, мне кажется что OPG работает не совсем корректно, а именно - выставляем значения в диалоге плагина, нажимаем кнопку, считаем - изменений не видим! в независимости от введённой информации OPG конвертит сцену с настройками по умолчанию (сэмплы 128, спрэид 0,75, дистанц - 0)!!! По крайней мере так у меня. Поэтому желаемые цифры вводим вручную, что и накалякано на картинке.
Дерзайте - вдруг это у меня руки кривые, а не плагин)))
Заострю внимание на параметрах Distance. Экспериментируя с этим параметром, нашел некий алгоритм задания максимального значения параметра - не больше чем максимальная высота геометрии, при превышении этого числа видимых полезных изменений не наблюдается, высокие значения приближают картинку к варианту с радиусом 0. Моя сцена построена в миллиметрах, максимальная высота (высота здания) 3100.
Сцена просчитана с параметрами: samples - 128, spread - 0.75, distance - 0\1000\3100, время - 53 сек
Сцена просчитана с параметрами: samples - 128, spread - 0,1\1\10, distance - 1000, время 54 сек
VRay ambient occlusion
Следующий кандидат на вашу любовь и почитание - скрипт "VRay ambient occlusion" от plugins.angstraum.at (вроде так они себя обзывают).
Порядок установки и запуска можно прочесть в архиве со скриптом. Кто не очень в аглицком, прикладываю картинку для большей наглядности.
Где он у вас будет жить - это вы решите сами. (просто перетащите в меню или куда ещё)
После установки можно работать (даже не нужно перезапускать МАКС)
Установите vRay активным рендером и вызывайте скрипт.
Больше ничего делать не нужно))) Скрипт не изменяет в сцене НИЧЕГО!
Выставляем предпочитаемые настройки и жмём "Render"
Чуть подробнее об опциях. Как вы видите, настроек меньше чем в OPG, да и нет вкуснятинки в виде сохранения бампа\дисплейса\опэсити ваших материалов.
Зато есть два метода просчёта :)
Dirtmap - основан на использовании vRaydirt шейдера.
Параметры:
Radius - определяет площадь захвата (в единицах сцены), в пределах которой вычисляется dirtmap.Чем выше значение, тем более затеняется сцена.
Image Sampler Override - Optimized rQMC Anti-Aliasing - когда активировано, достигается оптимальное соотношение производительность\качество для просчёта АО. Поскольку настройка адаптируется к уровню шума, основываясь на subps, нет необходимости в дополнительных настройках (vray рендера)
Subps - чем больше значение, тем качественнее результат. Время просчёта увеличивается соответственно.
Skylight - свет распространяется из небесной сферы или полусферы.
Параметры:
Sphere -свет идёт отовсюду, равномерно освещая всю сцену
Dome - свет ограничен горизонтом, и исходит от полусферы
Сцена просчитана с параметрами: Subps - 16, radius - 500\2000\3100, время - 2 мин 17 сек
Сцена просчитана с параметрами: Skylight, sphere\dome, время -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 - 500\2000\3100, время - 2 мин
Mental Ray Renderer
Создаём стандартный материал.Ambient\Diffusion\Saturation делаем абсолютно белыми. В слот Self Illumination устанавливаем шейдер Ambient\Reflective Occlusion, настраиваем параметры. И присваиваем всем объектам сцены или, если есть необходимость сохранить карты бампа или дисплейса, работаем с каждым материалом лично))) не забывая и о том, что Distance можно варьировать - в зависимости от размеров объектов.
Создаём источникк света с 0,0 интенсивностью (чтоб МАКС не мешал нам своими дефолтными осветителями). Проверяем Environment - должен быть белым, карты отключены.
Samples - .чем выше значение, тем качественнее картинка, соответственно и время просчёта возрастает
Spread - более высокие значения смягчают тени, увеличивая радиус захвата
Distance - при значении 0 работает как skylight (автоматически вычисляет растояние) Зависит от единиц сцены Значения, отличные от 0, устанавливают радиус дистанции просчёта, дальше которого затенение не просчитывается.
Сцена просчитана с параметрами: samples - 128, spread - 0,75, max distance - 1000, время - 1 мин
Default Scanline Renderer
Здесь всё предельно просто. Открываем редактор материалов. Ambient\Diffusion\Saturation делаем абсолютно белыми. В закладке maps снимаем галочки со всего, кроме бампа (если он есть), зачем? допустим на дифьюзе у вас стояла карта, нам же нужно белый цвет, поэтому и снимаем галочку.
Открываем закладку lights, выбираем skylight и устанавливаем его в сцену в любое место (не существенно).Environment - белый. Выставляем предпочитаемые значения параметров и запускаем рендер.
Важные для нас параметры:
Multiplier - интенсивность освещения, чем выше, тем больше засветов
Sky Color - не забудьте выставить его на абсолютно белый.
Cast shadows - именно эта опция ответственна за просчёт АО с помощью skylight
Rays per Sample - чем выше значение, тем качественнее картинка, время увеличивается пропорционально
Сцена просчитана с параметрами: Rays per Sample - 20, multiplier - 1\1,5, время - 11 мин
В то время как я вам объяснял что да как, настало утро, и на сцене появилась хозяйка этого...хм...дачного бунгало))) причём деревья тоже успели подрасти, а цветы - распуститься... Если бы на моём бунгало по утрам вдаль всматривалась такая красотка, я бы тоже распустился))) Что же она высматривает? Скорее всего следующую часть нашего повествования....
полигонов в сцене - 1039666, время просчёта картинки (vRay, Irmap(high)\lightcash(1000), AA - adaptive DMC, 800x600) - 8 мин 24 сек, время просчёта АО ("вручную"ментал реем) - 3 мин 7 сек.
Часть 3. Немного о постобработке
Уроков на тему постобработки предостаточно, но всёже внесу свою ржавую пятикопеечную монету. Хотя бы для того, чтоб показать куда же его, АО, помимо жёсткого диска, можно пристроить.
Не мудрствуя лукаво, открываем в фотошопе нашу картинку и нашу АО. Создаём новый слой в файле картинки, копируея в него АО.. Используя диалог blending mode изменяем смешивание (blend) Normal на Multiply. Смотрим результат. При необходимости уменьшаем прозрачность (opacity) На этом можно и остановиться. Но давайте добавим ещё красоты.
Копируем слой с картинкой (background) в новый слой и располагаем его над слоем с АО (чтоб слегка сгладить затенения там, где они слишком затеняют)
Идём Filter\Blur\Gaussian blur, замуливаем со значением от 2 до 5, меняем смешивание Normal на Overlay. Любуемся результатом, и, при необходимости, регулируем прозрачность.
Разница чувствуется, правда? Картинку можно ещё долго мучать в фотошопе, вот вы этим и займётесь, на досуге...потом...если захотите)))
Фотошоп, к слову сказать, не единственное средство. Любой редактор растровой графики с возможностью смешивания слоёв, и результат уже зависит лишь от вас. Ну а если вы считали не статику, тогда и в вашей любимой монтажке (Fusion, After Effect, Autodesk Combustion, Shake, Nuke и подобные им) найдётся инструменты, ведь верно?
Вот, собственно и всё на этот раз. Я с чувством выполненого долга схожу выпью чашечку-другую кофейку, а вы за это время чешете макушку, трёте лоб, ну или что вы обычно делаете в величайших раздумьях. Вам предстоит решить для себя, какой способ предпочтительнее именно для вас. Как говориться - на вкус и цвет товарища нет.
Обращаю ваше внимание - в примерах я использовал екстерьер, то есть есть ещё над каким уроком поработать. Но позже, когда сам разберусь с АО в интерьерах во всех возможных и невозможных проявлениях. Если кто подкованнее меня в этом вопросе - прошу бить на опережение, обижаться уж не буду)))
Спасибо за внимание! И да прибудет с Вами АО!!!