<< к оглавлению...

Клонирование большого количества геометрии с помощью Proxy-объектов.

Допустим, у вас есть высоко-детализированная модель, например, как мой "Погребальный Робот" (3 миллиона граней после однократной сабдив итерации) :

hi-poly robot

И вот вам сказали, что в одном фильме будет кадр фабрики погребальных роботов, и по сценарию нужно показать зал с сотней-другой этих красавцев.
Чтобы сэкономить использование памяти, можно использовать клонирование (instancing), но всё равно, при таком большом количестве, даже обычное клонирование в 3ds max не справится с тем, что вам нужно. Рендеринг, наверняка, израсходует всю память.
Также как и можно забыть про то, чтобы отобразить их всех одновременно во вьюпорте. 
Вот где в игру можно включить такую "штуку" как объект mr Proxy (замещающий объект).
mr Proxy объект работает с mentalray (хотя, у многих других систем рендеринга имеются свои схожие разработки) и позволяет "запекать геометрию", результат выглядит почти как исходная геометрия, но занимает существенно меньше места в памяти, а рендеринг происходит намного быстрей.
Примечание: Все тесты выполнены в Max 2011.
Начнём с погребального робота: продублируем его 10 раз, используя стандартное клонирование (instancing) 3ds max-а. Даже для того, чтобы выполнить клонирование данного объекта 9 раз, я вынужден перейти в режим box mode вьюпорта max-а, чтобы избежать "критической перегрузки" OpenGL драйвера:

instancing

Нажимаем Render. 30 миллионов граней, потребление памяти около 2 ГБ, на моей машине время рендера: 3 мин. 30 сек. в разрешении 600x400. Не так уж ужасно, но если вам нужно заполнить этими штуками всё помещение, ваш компьютер может запросто рухнуть, особенно учитывая, что пока это лишь "чистая геометрия", мы ещё не задействовали ни одной текстуры или источника света.

instanced10

Теперь давайте заменим нашу геометрию на объект mr Proxy.

1) Объект mr Proxy работает только с одним экземпляром, если у вас более сложная модель, включающая в себя множество объектов, перед конвертацией в mr Proxy объект, нужно будет их всех объединить (attach) в один объект. Также, желательно, сбросить все применённые ранее трансформации объекта, используя команду Reset XForm (вкладка Utility).
2) Во вкладке Create (на панели команд) находим: mentalray, mr proxy. 
3) Используя инструмент выравнивания (Align), выравниваем наш mr Proxy объект с исходным объектом.
4) Переходим в панель Modify. В разделе Source Object (Исходный объект), выберем модель робота. Теперь нажимаем кнопку "Write Object To File" (Записать объект в файл) и указываем путь, куда будет записан наш proxy-объект, точнее кэш-файл, содержащий геометрию нашего объекта.
5) После того, как объект записáлся в кэш-файл, скрываем (hide) исходную геометрию (технически, можно удалить исходный объект, поскольку он сохранился в кэш-файле, но так как сам кэш-файл мы не можем редактировать, и в некоторых случаях может понадобиться отредактировать исходную геометрию, и останется всего лишь обновить закэшированный файл).
6) Если объект (точнее, точки, представляющие его форму) отображается неплотно, во вкладке Display, можно увеличить число в поле Viewport Verts (отображаемые вершины). Я поднял это значение до 10.000.

mr Proxy object

7) Объекты mr Proxy не наследуют материалы исходных объектов. Так что, вручную назначьте материал исходного объекта созданному mr Proxy объекту.

Теперь создадим 10 копий нашего mr Proxy объекта, обратите внимание, что вьюпорт при этом не тормозит, и вам не нужно переходить в режим отображения bounding box.

Жмём Render. 

10 mr proxies

30 миллионов граней, расход памяти: около 0.5 ГБ, на моей машине время рендера 14 секунд. Да, абсолютно верно, время рендера уменьшилось с 3,5 минут до 14 секунд! И это при значительном снижении расхода памяти. Да-а-а, разница впечатляет! Теперь ваша мечта о сотне роботов не такая уж недостижимая, какой казалась недавно.

100 proxies
300 миллионов граней, расход памяти около 0.6 ГБ, 1200x600, время рендера (на моём компьютере) 22 секунды.

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


оригинал статьи : http://www.neilblevins.com/cg_education/proxy_objects/proxy_objects.htm
перевод и адаптация: Александр Ергашов /© 2009-2012/
<< к оглавлению...