Initial значения партикловых атрибутов

Предположим, мы установили частицам initial state или попросту создали их с определенными значениями атрибутов кропотливо вымученным скриптом, а потом захотели изменить некоторые из этих значений… Допустим, спрайты дыма имеют разный начальный скейл и увеличиваются относительно него со временем, и мы хотим их сделать в два раза меньше… Или попросту изменить в несколько раз массу осколков разлетающегося объекта (которая, предположим, предварительно высчитана с учетом объема осколка), но не производя заново вычислений, сетапов и т.п.

Particles with inital mass for each shard

Particles with initial mass for each shard

Проблема в том, что creation состояния у частиц уже нет. Вписать вручную начальное значение и модифицировать его для каждой из сотни частиц – не вариант, а написав в runtime экспрешен что-то вроде:

mass *= 0.5;

в каждом фрейме масса начнет сокращаться вдвое. Конечно, можно написать:

if( frame == 2 ) {
	mass *= 0.5;
}

и при прохождении указанного фрейма #2 значения будут изменены, но тут есть свои неудобства…

В общем, простое решение – воспользоваться initial значением изменяемого атрибута. Все эти initial версии атрибутов называются так же как сам атрибут с добавлением нуля в конце:

mass -> mass0
position -> position0
myCustomAttrPP -> myCustomAttrPP0
Some of the standard particle attributes and corresponding initial ones

Some of the standard particle attributes and corresponding initial ones

Таким образом, runtime экспрешен для массы получится:

mass = mass0 * 0.5;

Ну и вообще иметь доступ к начальным значениям атрибутов бывает очень полезно – из какой координаты частица стартовала, с какой velocity и т.п.

Кстати, если такому initial атрибуту установить значение – оно запишется останется постоянно как initial state.

Posted on August 9, 2009 at 22:02 by Ark · Permalink
In: FX · Tagged with: , , , , , ,

Leave a Reply