Сохраните сцену (bubbles.та). Рассмотрим принципы написания expression для частиц на примере этих же пузырей.

Particle Expressions - от порядка к хаосу и обратно Откройте сцену bubbles.та.

В Attribute Editor нажмите правую кнопку напротив атрибута radiusPP и выберите в меню Delete Array Mapper, чтобы удалить зависимость радиуса частиц от времени жизни.

Сейчас мы хотим задать всем частицам разный радиус прямо при рождении.

Снова нажмите правую кнопку напротив атрибута radiusPP и выберите Creation Expression. Появится Expression Editor, в котором следует ввести формулу для радиуса нарождающихся частиц.

Введите формулу: radiusPP=rand(0.01, 0.1); и нажмите кнопку Create.

Теперь все частицы рождаются с разным радиусом. А созданный expression выполняется для каждой частицы один раз во время её испускания. Введенная формула гласит: «присвоить атрибуту radiusPP случайное число в диапазоне от 0.01 до 0.1».

1рГ*1

Теперь надо что-то сделать с радиусом частиц.

Если снова нажать правую кнопку напротив radiusPP и выбрать Runtime Before Dynamics Expression, снова появится Expression Editor с приглашением ввести формулу которая будет выполняться не только при рождении частицы, а в каждом кадре, пока частица жива. Об этом говорит включенная опция Runtime before Dynamics.

Снова введите формулу:

radiusPP=rand(0.01, 0.1); Нажмите Create и почувствуйте разницу между Creation и Runtime Expressions. Теперь радиус каждой частицы меняется к каждом кадре случайным образом, а не только в момент испускания.

Исправьте скорее последнюю формулу на следующую:

radiusPP=radiusPP*1.01; и не забывайте нажимать каждый раз Edit после исправления.

Не закрывайте пока Expression Editor.

Частицы начнут благостно надуваться, так как их радиус, в соответствии с формулой, немного увеличивается в каждом кадре. Причем теперь это надувание не зависит от того, имеют ли частицы конечное время жизни или живут вечно. Увеличьте время жизни до шести секунд: lifespan=6.

Запретим чрезмерное раздувание. Ограничим максимальный радиус частиц.

Исправьте последнюю формулу:

if(radiusPP<0.15) radiusPP=radiusPP*1.01;

Попробуем проанализировать высоту поднятия пузырей и остановить их на каком-нибудь уровне. Дополните последнюю формулу в Expression Editor следующим образом:

if(radiusPP<0.15) radiusPP=radiusPP*1.01; vector $pos = position; vector $vel = velocity; if ($pos.y > 2) {

velocity = << $vel.x, 0, $vel.z >>; Это означает, что если частица забралась по вертикали выше, чем на 2, её скорость по вертикали обнуляется и она продолжает движение только в горизонтальной плоскости.

Правда у нас частицы летят строго вертикально, поэтому никакого горизонтального движения после остановки не наблюдается. Добавим его.

Измените последнюю строчку, добавив к горизонтальным составляющим скорости небольшие возмущения:

if(radiusPP<0.15) radiusPP=radiusPP*1.01; vector $pos = position; vector $vel = velocity; if (Spos.y > 2) {

velocity = << $vel.x+rand(-0.01,0.01), 0, $vel.z+rand(-0.01,0.01) >>;

}

Теперь частицы начнут слегка «плавать» по поверхности. Дальнейшие эксперименты можно продолжать довольно долго. Основное достоинство использования expression состоит в том, что логика и формулы управления частицами ограничены только вашей фантазией и знанием физики с математикой.


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