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

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

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

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

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

Create – Geometry – mental ray – mr. Proxy

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

 

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

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

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

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

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

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

За 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)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Kaa936@rambler.ru

824 0 850 41
21
2008-10-07
Без комментариев.5/5
2008-10-08
опять же 5/5
2008-10-08
десятки форумов сообща бились об эту проблему, мало кто нашел выход. Спасибо, крайне актуально и полезно. 5/5
2008-10-08
Спасибо
2008-10-08
Присоединяюсь
2008-10-08
С VRay Proxy мне удалось в экспериментальной сцене отрендерить более 2000 деревьев (примерно 16 млрд поликов) за 43 мин. на P4 2.4 \ 512 ОЗУ с включенным GI. Теперь с Менталом поэкспериментирую опираясь на урок (правда машина теперь совсем другая) Большое спасибо! 5/5
2008-10-08
5/5 очень хороший урок.
2008-10-08
в очередной раз! мои поздравление и респект 5/5
2008-10-08
5\5 Супер!!!
2008-10-08
5/5
2008-10-08
5/5 :)
2008-10-09
как всегда 5/5
2008-11-29
Незнаю незнаю vray proxy точно память єкономит а вот mental ray как сказать. Сам тестил mental ray вылетает как только процес становися весить больше 1.5гига. А vray рендерит милиарды не кушая память практически.
2009-02-03
Большое спасибо за урок-какраз вовремя!тяжелая сцена-комп слабый)спасибо!!!
2009-04-29
вопрос к автору. можно ли с помощью ментал прокси считать 8-10тыс прокси деревьев? без глобального и сколько по времени это займёт? мои тесты были без успешны =( ментал не справлялся с таким количеством =(
2009-05-13
После создания пустого контейнера не нажимается кнопка NON для выбора объекта.
2009-05-13
Подскажите,что делать.
2009-06-20
5/5!
2009-12-10
Почему у меня кнопка NONE не активна? [smile=01] с чем это может быть связано? Я создала пустой контейнер, все как написано..
2015-08-26
 Спасибо
2017-05-25
Всем привет, кто знает как из менталовских проксей обратно вытащить геометрию? Перебрался на корону, но нужно поработать со старой сценкой... Было бы круто вытащить из ментала всю запечёную в прокси геометрию....
RENDER.RU