17 ■ Для реализации обоих эффектов нам потребуется еще одно множество частиц, которое логично называть sparkParticles.
particle -name sparkParticles ; Сразу добавим нашим частицам цвет. Поскольку искры будут разного цвета, то при добавлении атрибута цвета нужно выбрать опцию Add Per Particle Attribute, как и в пункте 15.
Оба эффекта - и искристость желтых сфер, и феерическая смерть центральных, решаются по одному принципу: с помощью правил, выполняемых в процессе жизни (runtime expressions), в которых будет присутствовать команда emit, с помощью которой мы легко определим место возникновения и цвет искр - это положение и цвет порождающей искры частицы. Скорость и направление разлета искр вычислим как случайно распределенный по сфере вектор. Останется определить момент появления искр.
18 . Откроем окно редактора атрибутов множества частиц crossParticles и в секции Per Particle (Array) Attribute для атрибута position создадим выражение, исполняемое в период существования (Runtime Expression). Напомним, что для этого нужно щелкнуть правой клавишей мыши в поле атрибута и в появившемся меню выбрать Runtime Expression, либо выбрать узел crossParticleShape, вызвать окно Expression Editor и убедиться, что в строке partice выбрано положение переключателя Runtime.
// Вероятность испускания искр
float $р=0.005;
// Число искр
int $sparkNumber=10;
//Скорость искр
float $sparkVelocity=2 ; vector $pPosition, $pVeloeity; if (rand(l) < $p) {
$pPosition = position;
for ($i=0; $i < $sparkNumber; $i++) {
$pVelooity = sphrand( $sparkVelocity ) ; emit -object sparkParticles
-position ($pPosition.x) ($pPosition.y) ($pPosition.z)
-attribute velocity
-vectorValue ($pVelocity. x) ($pVelocity.y) ($pVelocity.z)
-attribute rgbPP
-vectorValue (colorRed) (colorGreen) (colorBlue);
};
} ; Обратим внимание на условие испускания искр. В каждом кадре для каждой частицы вычисляется значение случайной равномерно распределенной на отрезке [0,1] величины (rand(1)), которое сравнивается с «пороговым» значением $р. Выполнение неравенства rand(1)<$p и является условием появления искр у каждой конкретной частицы. В нашем случае вероятность «искрения» равна 0.005
- всего лишь полпроцента! Проиграем анимацию. Кошмар! Полная каша. Вместо желаемых искр полетели какие-то желтые точки. На самом деле все не так страшно, как может показаться на первый взгляд. Чтобы добиться приемлемого результата, нужно лишь немного поработать с атрибутами “искр”
- частиц из sparkParticles: изменить способ их визуализации и сократить время жизни.
19.
Откроем редактор атрибутов для множества частиц sparkParticles. В секции Lifespan Attribute изменим атрибут lifespanMode с Live forever на Random range и зададим для атрибута lifespan значение
0.2, а для lifespanRandom - значение 0.05. Далее. В секции Render Attributes изменим атрибут parti-cleRenderType с Points на Streak. Добавим атрибуты для нового типа визуализации частиц, щелкнув по кнопке Add Attributes For Current Render Type, и увеличим значение атрибута tailSize до 20.