3 нояб. 2011 г.

движение частиц по поверхности объекта


Заставить частицы двигаться по геометрии произвольной формы можно с помощью узла closestPointOnMesh, это на мой взгляд намного практичнее чем часто описываемая техника использования goal-ов и не потребует от вас создания дополнительных UV-сетов.

Достаточно создать одну такую ноду, подключить к ней нужную геометрию и опрашивать её для каждого партикла индивидуально. Вот пример перпартиклового выражения:
// считываем текущее положение
vector $pos = particleShape.position; 

// назначаем его узлу
setAttr closestPointOnMesh.inPosition ($pos.x) ($pos.y) ($pos.z);

// получаем точку на поверхности ближайшую от заданной
vector $newPos = `getAttr closestPointOnMesh.position`;

// получаем нормаль в этой точке, она пригодится для верной ориентации
vector $meshNormal = `getAttr closestPointOnMesh.normal`;

Затем, воздействуя на частицы полями или добавляя им скорости в выражении, мы заставим их двигатся аккуратно по поверхности.

Сцену с примером можно скачать здесь.

3 комментария:

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