Проиграем анимацию. Уже удовлетворительно. Теперь добавим выброс искр в . момент «смерти» частиц из trackParticles. На самом деле, выполнить выражение (Runtime expression) в момент или после смерти частицы невозможно. Вместе с исчезновением частицы исчезает и вся информация о ней: положение в пространстве, цвет и так далее Поэтому любое выражение можно выполнить только пока частица «жива». Ну что ж. Мы создадим выражение для частицы, условием выполнения которого будет последний кадр ее жизни. То есть когда разность между сроком ее жизни (lifespan) и возрастом (age) станет не больше одного кадра -1 /25 секунды (В самом начале мы договорились о том, что работаем в системе PAL - 25 кадров в секунду.)

20 . Как и в пункте 18, создадим выражение, исполняемое в период существования (Runtime Expression), но на этот раз для частиц trackParticles:

// Число искр

int $sparkNumber=50;

//Скорость искр

float $sparkVelocity=3;

vector $pPosition, $pColor, $pVelocity;

if ((lifespan-age)<=0.04) {

$pPosition - position;

$pColor=rgbPP;

for ($i=0; $i < $sparkNumber; $i++) {

$pVelocity = sphrand( $sparkVelocity); emit -object sparkParticles

-position ($pPosition.x) ($pPosition.y) ($pPosition.z) -attribute velocity

-vectorValue ($pVelocity.x) (SpVelocity .y) ($pVelocity.z)

-attribute rgbpp

-vectorValue ($pColor.x) ($pColor.y) ($pColor.z);

};

}; Проиграем анимацию. С чувством глубокого удовлетворения отметим, что цель Достигнута.

Все заявленные эффекты в наличии. И отметим, что не было использовано ни единого источника частиц (emitter). Писанины, правда, хватило бы на небольшой рассказ, но это справедливая плата за полный контроль над происходящими в сцене событиями.

Фейерверки, мерцание сказочного неба, блестки “волшебной” пыли, бенгальские свечи - вот далеко не полный перечень эффектов, в создании которых будет полезна команда emit.

Столкновение твердых тел.

Второй пример на ту же тему. Искры при столкновении твердых тел.

Когда мы имеем дело с частицами, то определить, что будет происходить при их столкновениях с поверхностью разрешения коллизий, довольно легко - достаточно лишь задать некоторое (не очень большое) количество опций в диалоговом окне Particle Collision Events (Particles -> Particle Collision Events…). Все действия, необходимые для реализации этих событий (collision event), MAYA выполнит самостоятельно: и отследит сам факт столкновения, и определит его координаты, и «убьет» (если нужно) ударившуюся частицу и так далее.

В случае столкновения (или коллизии) твердых тел (rigid body) все немного сложнее. Существуют, конечно, обходные пути (мы помним, что в MAYA любую задачу можно решать разными способами). Например, твердое тело можно «обернуть» эластичной оболочкой (soft body) и всю ответственность за действия при столкновениях возложить на частицы, являющиеся неотъемлемой частью этой эластичной оболочки. Метод известный и надежно работающий, причем не требующий от пользователя никаких особых познаний в MEL-программировании. Правда, выбор событий, происходящих при столкновении, невелик, и приходится «утяжелять» сцену дополнительной геометрией и системой частиц со всеми вытекающими отсюда последствиями в виде увеличения времени динамической симуляции.


⇐ вернуться назад | | далее ⇒