Initial значения партикловых атрибутов|Initial values of particle attributes

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

Let’s say, we’ve set initial state for our particles or just have created them with some defined attribute values via meticulously crafted script, and now we want to change some of them… For example, smoke sprites have various starting scale and then they grow larger with time from it, and we want to make them half their size… Or we simply want to modify mass of exploding object‘s shards (that, let’s say, has been precalculated with respect to the volume of the shard), but without recalculations, re-setups and so on.

Particles with inital mass for each shard

Particles with initial mass for each shard

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

The problem is – particles don’t have creation stage anymore. Writing down and modifying starting values for a hundred of particles is not an option. And if we write something like this into runtime expression:

mass *= 0.5;

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

each frame mass would be cut in half. Of course, we can write:

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

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

and while passing this frame #2 values would get modified, but it has it’s own problems…

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

Anyway, there’s a simple solution – use initial values of attribute you want to modify. All these initial versions of attributes are named the same as the attribute with addition of zero in the end:

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 экспрешен для массы получится:

So, runtime expression for the mass looks like this:

mass = mass0 * 0.5;

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

Also, it’s often very useful to have access to starting values – which coordinate a particle had started from, which velocity with and so on.

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

By the way, if you assign a value to such initial attribute – it’d be saved permanently as an initial state.

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

Leave a Reply