Архитектурные решения различных форм и помещений

Погружение в ментал (Proxy – мифы и реальность)

Всех приветствую!

В первой части  урока я расскажу,  как использовать объект mr Proxy. Собственно в этом нет ничего сложного, но меня удивляет неоднозначное отношение к нему. В форумах некоторые сетуют, что прокси не дают экономии во времени рендеринга, а ожидают того, что чуть ли на 386 процессорах можно обсчитывать огромные сцены. А некоторые высказываются, что в проксях толку нет – только вред.  В этом уроке мы на реальных цифрах посмотрим на целесообразность данного объекта. Во второй части мы рассмотрим один из частных случаев оптимизации сцены под быстрый обсчет. В уроке я не буду выкладывать файлы сцен, так как в первой части все элементарно, а во второй части  я хочу,  чтобы исполняющие сами сделали шейдерный материал, тем самым поняв гибкость шейдерной структуры.  Урок исполняется в 3ds Max 2009. Рассчитан на пользователей кто знаком с интерфейсом Макса, ну и конечно желателен опыт работы в нем, чтобы понять целесообразность различных  действий.

Часть первая – Proxy

Создание proxy-объекта:

Create – Geometry – mental ray – mr. Proxy

image0033

На сцену кладется пустой контейнер. Заходим в свойства созданного mr Proxy, верхняя графа – Source Object – жмем на кнопку с надписью None и мышкой щелкаем по объекту, который хотим сделать прокси-объектом.

image0046

image0054Добавлять можно только один объект! Группы объектов и сборки также невозможно добавить в одну проксю. В сети существует скрипт, позволяющий автоматически объединить несколько объектов и сохранить их как прокси-объект, но при совмещение сложных объектов происходить сбой (у меня по крайней мере), поэтому следует помнить пословицу о бесплатном сыре, да и объединить несколько объектов в одну сетку (мэшь) руками не так уж и сложно.

После добавления мы получаем в габаритном контейнере копию оригинала.  Раздел в настройках - «Display» позволяет настроить отображение объекта во вьюпортах; «Viewport Verts» – задает количество вершин объекта, которые будут видны. На этапе позиционирования контейнера объекта на сцене, количество можно увеличить, чтобы иметь представление о реальной геометрии объекта, потом выставить минимальное значение (позаботиться о производительности). Ниже «Viewport Vertы» идут два переключателя «Show Point Cloud»  – отображать точки (вершины) объекта и «Show Bounding Box» – отображать рамку вокруг габаритного контейнера (без рамки трудно выделить объект мышкой).

Кнопка «Write Object to File»  сохраняет прокси-объект в файле (сохранятся в виде файла *.mib и дополнительно графического файла превьюшки) во время сохранения будет задан вопрос об способе сохранения  – отдельный кадр, фрагмент или вся анимация (да, да прокси позволяет сохранять воздействие на объект модификаторов с течением времени). После сохранения произведется рендеринг  «внутренностей » прокси и у нас появиться файлик с объектом.

При добавлении в сцену Proxy-объектов, сначала нужно создать пустой mr Proxy, затем в настройках нажать кнопку на поле «Proxy File» и указать путь к файлу объекта.

image0055Важно: При указании имени и расположения файла прокси-объекта, Макс запоминает только линк объекта, открытие файла не происходит! Если проводиться работа группой из нескольких человек над одной сценой, то расположенные на сцене прокси-объекты могут меняться и усовершенствоваться. Открытие файла прокси происходит только при рендере сцены, соответственно и изменения исходного файла учитываются на этот момент. Если файл по указанному пути отсутствует, то рендер выдаст сообщение об этом.

В свитке настроек есть окошко с предпросмотром , туда выводиться изображение которое создается при сохранении прокси файла. Если мы назвали файл «test», то в результате (если не отключить эту опцию) сформируется 2 файла : test.mib и test.mib.bmp, изображение из последнего будет выводиться в окно предпросмотра. Если над сценой работают несколько человек, то удобно к создаваемым проксям в графическом файле делать свои подписи с помощью любого редактора:

image0065

Под окном просмотра раздел порта анимации: «Animation Support». Если при сохранении прокси-файл сохранялся в несколько кадров, то их можно все (или часть) включить а анимацию нашей сцены. Включив параметр «Ping-Pong Replay» можно зациклить анимацию прокси-объекта, на продолжительность всей сцены.

С созданием и добавлением прокси вроде разобрались, теперь про материалы:

В прокси-объект материал не сохраняется! Поэтому при создании возьмите пипеткой материал с создаваемого объекта (если он заранее не подготовлен) и сохраните его в библиотеку, для последующего использования. После добавления proxy-объекта на него можно просто добавить сохраненный материал (структура мэша на уровне элементов сохраняется, поэтому использование multi-sub материала возможна).

В Хелпе на mr Proxy упоминается использование материала «Xref». На мой взгляд использование этого материала актуально только в работе группой, тем не менее давайте его разберем.

Материал X-Ref это материал-ссылка на материал другой сцены.

В настройках путь к файлу сцены (донора) и имя объекта (донора) на указанной сцене:

image0074

image0056Важно: Материал берется с указанного объекта, по его имени, а не из редактора материалов.  Данные по материалу считываются один раз и сохраняются, дальнейшее изменение материала на объекте доноре не приведет к изменению материала XRef.  Для обновления данных по материалу необходимо будет перевыбрать объект донор.

Давайте закончим с теоретической частью и посмотрим эффект от применения прокси на практике.

Для примера я на плоскость состоящую из 2 полигонов добавил 10 одинаковых деревьев (пока без листьев) с усложненной, TurboSmooth’ем сеткой. Итого получилась сцена с четырьмя с половиной миллионами полигонов: (тестирование на машине с E4400 – 2х2Ghz и 2Гб ОЗУ)

image0083

Рендерим (GI с минимальными настройками качества)

image009_s

Рендер 5 минут 30 секунд.

Макс с открытой сценой занимает 322 мегабайт ОЗУ, во время рендеринга используется 1348 мегабайт ОЗУ  (в объем ОЗУ включена и ОС и все что у меня висело в трее, то есть это общий расход ОЗУ)

Теперь заменяем все деревья на прокси (для чистоты тестирования удобно полностью копировать параметры положения, наклона и масштаба объекта донора на те же параметры прокси)

Рендер 4 минуты 42 секунды. (Я не стал приводить картинку рендера, она один к одному – отличий нет совсем)

Макс с открытой сценой занимает 282 мегабайта ОЗУ, во время рендера используется 1170 мегабайт ОЗУ.

Время рендера отличается не сильно (на некоторых сценах, это вообще не заметно), а вот экономия ОЗУ очень сильная!

В общем-то последствия ожидаемые, так как рендерить объект из прокси все равно приходиться, учитывать в распространении фотонов тоже, пусть он и представлен в удобном для рендера формате. Отсюда и небольшая разница по времени. А вот из-за того что сам объект не сидит в ОЗУ, а грузиться с диска мы получаем существенную экономию используемой памяти.

Это особенно актуально на машинах с 32-битной системой. Простой пример:

Я увеличил количество деревьев до 20 штук. Рендер на проксях проходит за 16 минут, рендер с настоящими объектами за 52 минуты. Почему такая разница во времени? Все из за того что с проксями используется 1698 мегабайт ОЗУ (в пределах физической памяти), а с настоящими объектами 2586 мегабайт  – ОЗУ физическая кончилась  и пошла виртуальная на HDD, где скорость передачи данных намного меньше.  При количестве деревьев 32 шт рендер на проксях проходит, хоть и тратиться больше 1 часа, а вот с настоящими объектами рендер не возможен – не хватает памяти.

ИТОГ: Proxy экономит оперативную память компьютера, за счет удаления информации об объекте со сцены на диск, что позволяет нам делать более масштабные сцены, и немного экономит время рендера, за счет оптимизированного представления информации о файле.

Часть вторая – экономим время

А как же «все и сразу и чтобы ничего за это не было!» как сэкономить и ОЗУ и время рендера? Вот об этом мы и поговорим во второй части. Для этого перенесемся на совсем слабую машину (с точки зрения 3d графики слабую) это будет :

image0103

Можно сказать просто продвинутый офисный компьютер.

Я изобразил не бог весть какой сложности зданьице с минимальном количеством полигонов:

image011_s1

И хочу его обсчитать с большим количеством фотонов и хорошими настройками FG, а еще я хочу обсадить его деревьями!

В результате одиночное здание обсчитывается за 6 минут, а в виде:

image012_s

За 46 минут 03 секунды. Где справедливость ?  мы добавили несколько второстепенных объектов а получили рендер в 7 раз дольше!!! Если заменить деревья на прокси-объекты, получим рендер за 44 минуты и 12 секунд, опять несправедливо – слишком маленькая экономия !

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

Спасет нас материал Ambient Occlusion!

Мы можем исключить деревья из непрямой иллюминации, оставив только получение FG (а если не использовать фотометрическую экспозицию и светящиеся материалы можно убрать и получение FG), а все эффекты освещения получим на материале сами.

Итак Ambient Occlusion

Теорию данного материала описывать не буду, кому интересно вот статься Игоря Сивакова:

http://www.ixbt.com/soft/mr33-2-ao.shtml

Также описание настроек и действие упомянуто в моем уроке:

Погружение в ментал (шейдерный материал mental ray)

В двух словах Ambient Occlusion имитирует Глобальное освещение на  материале путем учета окружающей геометрии, без учета источников света.

Остановлюсь только на 4 нужных нам сейчас параметрах шейдера Ambient/Reflective Occlusion (3dsmax)

image0133

Samples – это качество обсчета эффекта чем больше, тем лучше

Bright & Dark –  светлая (освещенная) и темная(полностью затененная) часть материала

image014_s2

Spread – качество размытия границ:

image015_s

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

image016_s

Теперь создадим материал на основе этого шейдера для самого сложного объекта – листьев моих деревьев.

1.     Корневой материал «mental ray»

2.     Слот Surface (а позже скопируем результат и в Shadow) карта «Mix»

3.     То что отсекает маска – будет прозрачным (ставим шейдер Transmat), то что осталось – шейдер Ambient…..

4.     В слот Bright я поставил DGS материал с растром листа дерева, а в слоте Dark можно оставить черный цвет, либо тот же материал, но с темной растровой картой.

Весь процесс я изобразил на схемке:

image017_s1

Для поверхностей,  где не нужна карта прозрачности(ствол дерева), можно сразу в раздел Surface материала mental ray ставить шейдер Ambient/Reflective Occlusion (3dsmax)

Если мы имитируем эффект глобального освещения, то объекты к которым будет применяться такой материал (деревья) должны быть исключены из расчетов настоящего  глобального освещения:

Выделяем все то что у нас не будет участвовать в расчетах(у меня это деревья), правый клик мышки и заходим в свойства объекта, закладка mental ray:

image0183

Устанавливаем переключатель для FG в положение Invisible to FG, для Глобальной иллюминации ставим галку на Exclude from GI. Есть еще один параметр – Receive Illumination from FG, это получение результата освещения объектом от расчета FG, на быстродействие он влияет не сильно, а вот при больших значениях экспозиции может сильно попортить яркость картинки, поэтому этот параметр я оставил.

Теперь тестовые рендеры (слева освещаем GI с обычными материалами, справа деревья исключены из GI и материал с АО)

image0193

Почему-то результат справа мне нравиться больше.

Теперь цифры:

  1. Без прокси без АО и с GI       - время 46:03 – память 898 мегабайт
  2. С прокси без АО и с GI           - время 44:12 – память 877 мегабайт
  3. С прокси и АО на деревьях  - время 21:53 – память 858 мегабайт

Результат виден невооруженным взглядом!

Думаю после просмотра результатов урока Вы задумаетесь перед тем как нажать кнопку RENDER – а стоит ли облегчить расчеты компьютеру и получить экономию во времени? А время как известно это деньги!

С Уважением, КАА!

Kaa936@rambler.ru

Задать вопросы и обудить урок можно на форуме.




Комментарии (5) »

  1. я только одного не понимаю как 5 деревьев на 4 ядрах можно щитать 50 минут…?

    Comment by Clonic — 22.03.2009 @ 18:46

  2. В статье не говорилось о 4х ядрах, в статье приведен скриншот параметров компа и там 2 ядра по 1.6 и гиг оперы.

    Comment by admin — 22.03.2009 @ 18:52

  3. «И хочу его обсчитать с большим количеством фотонов и хорошими настройками FG, а еще я хочу обсадить его деревьями!» < цитата из текста.

    ФГ в режиме релиза + пол лимона фотонов + адаптация FG и GI . даже 8 ядер на что способен ментал ( если еще не увеличили как обещали) повесяться больше чем на час

    Comment by КАА — 23.03.2009 @ 10:18

  4. У тебя огромная ошибка что ты подходишь к менталу как к врайю. Я вот делал деревья и высаживал в большом количестве, но с другим похдодом: 1)не использовал GI вообще. 2) Использовал AO. 3) Деревья имеют листья не из геометрии (контур листа), а плоскости на которых карта с полупрозрачным материалом (ментал такие объекты считает гораздо лучше). 4) Использовал Гамму. 5) Использовал HDRI. 6) Использовал прокси. Я правда не закончил эту сцену но можешь посмотреть на результат. http://pasha-sevkav.ru/portfolio/arxitektura/individualnyj-zhiloj-dom/

    Comment by admin — 23.03.2009 @ 11:08

  5. Спасибо за статью, как раз требуется облегчение антуража. Деревья запроксил а материал с АО не получается. Вообще не могу найти в 2012 версии DGS материал. Да, требуется именно двустронний материал с АО. Arch and Design в превью двусторонний, а рендерит одну сторону.

    Comment by Стас — 04.12.2012 @ 14:10

RSS-лента комментариев к этой записи. TrackBack URL

Оставить комментарий