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.


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