Copier

Чем является copier

Это набор инструментов для процедурной работы с массивами объектов. Похожий на particleInstancer, но отличающийся большей гибкостью и функциональностью. В отличие от particleIntancer, создаётся реальная полигональная геометрия, с которой можно продолжить историю конструирования, запечь в кэш, деформировать, использовать в динамических симуляциях. Отлично взаимодействует с известным бесплатным плагином SOuP.

Чем не является copier

Это не инструмент для ускорения рендеринга, как различные Инстансеры и Скаттеры, результат так или иначе отрендерится, но это будут не инстансы, которые генерируются в rendertime.

Arrays

Массивы это основной тип данных которым предстоит оперировать. Выходы и входы нод, которые предстоит соединять между собой. Вариантов подключения множество, все зависит от вашей фантазии и сложности эффекта, которого требуется добиться. Для простоты все одномерные типы я сделал floatArray, а трехкомпонентные - vectorArray, включая цвет, позиции, нормали.

Установка

Плагин содержит часть на C++ и часть на python.
Самая новая версия первой части для Maya 2013 x64 под Windows
Версия для остальных платформ есть в поставке SOuP.
Вторая часть плагина для всех платформ здесь.

Описание нод(узлов):

copier

Создает полигональную геометрию по шаблонам подключенных объектов, позиции, ориентацию, размер, цвет и множество других атрибутов можно варьировать индивидуально, подключив соответствующий Array. Для этого подойдут пер-партикловые атрибуты частиц или данные из нод mesh2arrays, curve2arrays.

- envelope это обычный on/off

- count просто показывает количество создаваемых копий

- outputMesh выходной параметр, содержащий описание полигональной модели, его следует подключить к inMesh параметру polyShape ноды

- componentList (coming soon) выходной параметр, содержащий список всех компонент объекта, используется для Constuction History, например если вы пожелаете сделать экструд на созданных объектах, componentList будет передавать ему актуальный набор полигонов, даже в случае изменения количества копий и их топологии

- inputMesh входящий параметр, служит для задания копируемых объектов, подключите сюда outMesh выход от шейпы копируемого объекта. возможно подключение любого количества копируемых объектов.

- indexArray входящий параметр floatArray, массив индексов, позволяет выбирать какой из подключенных к inputMesh объектов будет создан, по индексу.

- posArray входящий параметр, vectorArray, позиции опорных точек, в которых и будут созданы копии


- orient позволяет выбрать способ ориентации, задавая Aim и Up вектора, либо указывая углы вращения


- aimArray входящий параметр, vectorArray, при выборе ориентации по Aim и Up векторам, задает направление для X оси копируемого объекта

- aimArray входящий параметр, vectorArray, при выборе ориентации по Aim и Up векторам, задает направление для Y оси копируемого объекта

- rotArray входящий параметр, vectorArray, при выборе ориентации по углам вращения, ориентирует копию по ним

- rotOrder при выборе ориентации по углам вращения, задает порядок осей вращения

- rotOrder при выборе ориентации по углам вращения, задает единицы измерения углов, градусы либо радианы

- scaleArray входящий параметр, vectorArray, позволяет задать неравномерное масштабирование создаваемых копий


- uniformScaleArray входящий параметр, floatArray, позволяет задать равномерное масштабирование создаваемых копий


- time входящий параметр, для использования возможностей сдвига анимации во времени, подключите к нему глобальное время сцены maya, от ноды time

- toggleTimeShift активирует режим сдвига анимации во времени


- timeShift входящий параметр, floatArray, позволяет задать в секундах индивидуальный сдвиг во времени для каждой создаваемой копии

- originalVertexColor активирует режим передачи цвета от копируемого объекта, создается одноименный colorSet

- inheritVertexColor активирует режим передачи цвета наследуемого от дистрибьюшен объекта, создается одноименный colorSet. Будет полезен в шейдинге, чтобы разнообразить параметры материалов


- rgbArray входящий параметр, vectorArray, содержащий RGB значения цвета для создаваемых копий

- toggleUV активирует передачу и сохранение UV координат от копируемых объектов (отключается для быстродействия)


- toggleSoftHard активирует передачу и сохранение жесткости ребер копируемых объектов (отключается для быстродействия)

- override (experimental) активирует механизм оверрайда любого атрибута в истории конструирования объекта.


mesh2arrays

Cвоего рода анализатор полигонального объекта, позволяет использовать в качестве данных его компоненты, позиции вертексов, нормали и т.п.

- inputMesh сюда подключаетcя outMesh выход от шейпы дистрибьюшен объекта (по поверхности которого требуется сделать расстановку).

- type доступные режимы:
* Mesh Vertex

* Random


- count в рандомном режиме позволяет выбрать число создаваемых объектов (соответственно размер массивов)

- seed задаёт уникальный паттерн для алгоритма рандомизации

- useColorAsMask позволяет использовать цвет вертексов дистрибьюшен объекта как маску для создания копий



- minRandomFloat maxRandomFloat нижний и верхний порог для рандомно создаваемого Float(однокомпонентного) массива, используется для рандомизации параметров копий, например: размер, сдвиг во времени(Time Shift)

- minRandomVector maxRandomVector нижний и верхний порог для рандомно создаваемого Vector(трехкомпонентного) массива, так же используется для рандомизации параметров копий, например: цвет, размер, поворот

- positionArray выходной векторный массив, содержащий позиции, в зависимости от выбранного типа скаттеринга, который в большинстве случаев предполагается использовать именно как позиции копий

- normalArray выходной векторный массив, результат считывания нормали поверхности дистрибьюшен обьекта, который в большинстве случаев предполагается использовать как направление в ориентации копий

- colorArray выходной векторный массив, результат считывания цвета вертексов дистрибьюшен обьекта, который можно передать процедурным копиям


- randomFloat выходной float массив, создаваемый для рандомизации параметров копий, например: размер, сдвиг во времени(Time Shift)

- randomFloat выходной float массив, создаваемый для рандомизации параметров копий, например: цвет, масштабирование, поворот

- verbosity включает отладочный режим, позволяет проследить затратность вычислений



создайте ноды такими MEL коммандами:
createNode copier;
createNode mesh2arrays;
createNode curve2arrays;
Подсоедините к ноде copier любое количество референсных полигональных объектов.
Присоедините атрибут "copier.outputMesh" к любой существующей поли-шейпе.

схема подключения частиц и ноды copier:


схема подключения нод mesh2arrays и copier:


эту систему можно успешно применять для работы с большим количеством объектов, их рандомизации
например создав одну травинку и проанимировав её bend, можно сделать целую поляну


еще один пример, анимация персонажей, анимировано количество, и заданы рандомные значения для поворота и сдвига во времени


Скачать плагин можно здесь.

Буду рад услышать отзывы и пожелания, ответить на вопросы.

7 комментариев:

  1. Спасибо за плагин! Не плохо было бы выложить сцены с семплами.

    ОтветитьУдалить
  2. great script. hope there will be a tutorial for this soon :)

    ОтветитьУдалить
  3. отлични плагин, толко UV отсутствует у финалного обиекта, а так все отлично

    ОтветитьУдалить
  4. ребят, на самом деле UV включается галочкой)))
    плюс уже есть нормальный билд на c++, который работает в разы шустрее.
    пишите, если хотите потестировать

    ОтветитьУдалить
  5. с удовольствием попробую, а как на счет если финальни ресулт будет не один меш а инстанси копируемого? так гораздо легче станет и геометрия и рендер сцени, возможно такое?

    ОтветитьУдалить

счетчик посещений