13. Добавим атрибут цвета для множества частиц crossParticles. Поскольку мы собирались «покрасить» все частицы из crossParticles в один цвет, то при добавлении атрибута цвета выберем опцию Add Per Object Attribute
14.
Для трех новых атрибутов, появившихся в редакторе атрибутов, зададим следующие значения; colorRed = 1, colorGreen = 1, colorBlue =0. Такой выбор значений сделает наши частицы желтыми.
15 . Поскольку каждой частице из trackParticles мы будем задавать значения цвета индивидуальноьно, то при добавлении атрибута цвета множеству частиц trackParticles следует выбирать опцию Add Per Particles Attribute.
IO . Вновь в окне Expression Editor разыщем выражение trackExpression и отредактируем повую команду emit, с помощью которой порождаются частицы из tracParticles. Значение Зарождающихся частиц определим, исходя из текущего значения угла поворота группы LRotate. В окончательном виде наше выражение примет вид:
//Находим текущее положение локатора L в мировой системе координат
float $LPos[];
$LPos='pointPosition -w L'; float $hue; vector $curColor;
// Вычисляем цвет частиц
$hue=LRotate.rotateY/360. - trunc(LRotate.rotateY/360.) ;
$curColor=hsv_to_rgb ( <<$hue, 1, 1>> );
// Добавляем одну частицу к множеству частиц trackPartides // в текущем положении локатора L
emit -object trackPartides
-position ($LPos[0]) ($LPos[l]) ($LPos[2])
-attribute rgbPP
-vectorValue ($curColor.x) ($curColor.y) ($curColor.z);
// Расстояние от оси Y до локатора
float $radius=5.;
// Расстояние между центральной и боковыми сферами
float $dist=0.45;
// Вспомогательные переменные
float $kIn, $kOut, $kBack;
$kIn= ($radius - $dist) /$radius ;
$kOut =($radius + $dist)/$radius; $kBack=$dist/$radius;
//Добавляем пять частиц к множеству частиц crossParticles
emit -object crossParticles
-position ($LPos[0]) ($LPos[l]+$dist) ($LPos[2])
-position ($LPos[0]) ($LPos[l]-$dist) ($LPos[2])
-position ($kIn*$LPos[0]) ($LPos[l]) ($kIn*$LPos [2])
-position ($k0ut*$LPos[0]) ($LPos[1]) ($kOut*$LPos[2])
-position ($LPos[0])-$kBack*LPos[2])($LPos [1] )($LPos [2] +$kBack*SLPos [0]); Теперь наша сцена выглядит значительно веселее. Проиграв анимацию, мы увидим примерно такую картинку:
(Сцена emit02c.mb).
Если все, что мы делали до этого шага, можно было бы тем или иным способом реализовать и без применения команды emit, то в заключительном эффекте без нее обойтись невозможно. (Правда, «невозможно» - это слишком категоричное слово, когда речь идет о MAYA).
Итак, сейчас мы усложним жизнь и смерть наших частиц следующим образом. Нам бы хотелось, чтобы частицы из trackParticles «умирали» не так «бессловесно», напротив, они должны заканчивать свое существование всплеском искр. Причем искры будут того же цвета, что и погибающая частица. Частицы же из crossParticles умирать будут по-прежнему, без дополнительных эффектов, но зато в процессе своей жизни в случайном порядке испускать веер искр во всех направлениях. Искры логично сделать желтыми, под цвет самих частиц.