Partikel-Expression

Expessions sind besonders bei Partikelsimulationen hilfreich. Mit wenig mathematischen Grundkenntnissen lassen sich eine Vielzahl an Parametern berechnen. Im folgenden Beispiel werden Particel-Sprites mit Expressions berechnet.
Bei Partikelsimulationen in Maya werden generell zwei Arten von Partikel-Expressions unterschieden:

Creation Expression / Birthtime Expression: Werden bei der Geburt der Partikel berechnet.
Runtime Expression: Werden Frame für Frame für jedes einzelne Partikel kalkuliert. Eine große Anzahl von Partikel verursacht folglich lange Berechnungszeiten.

Im folgenden Beispiel wird ein Rauchwolke für eine Cartoonrakete erstellt. Dabei werden Expressions verwendet, um die Partikel zu Drehen und zu Skalieren.
Bei dem verwendeten Particelsystem handelt es sich um einen omnidirektionellen Emitter mit Sprite-Partikel. Dieser Emitter bewegt die Partikel entlang der X-Achse. Durch den Wert Spread werden die Partikel gestreut.
(a) ungestreuter Partikelaustoß in die Richtung X
(b) gestreuter Partikelaustoß (Spread 0.2)
(c) die Partikel werden über eine Expression gedreht.
(d) die Partikel werden über eine Expression skaliert..

gestreuter Partikelausstoß ohne Expression

Die einzelnen Partikel bekommen bei der Geburt für den Wert spriteTwistPP (Sprite - Rotation) einen Zufallswert zwischen -45 und 45.

Creation Expression:
particleShape1.spriteTwistPP = rand(-45,45);

Im nächsten Schritt werden die Partikel mit einer Runtime Expression gedreht. Beim nächsten Frame wird der Wert 10 hinzugezählt. Dadruch drehen sich alle Partikel mit gleicher Geschwindigkeit in die gleiche Richtung.

Runtime Expression:
particleShape1.spriteTwistPP = particleShape1.spriteTwistPP +10;

Beispiel: Partikel-Expression | mov | 1.383 kb

Durch eine if-Schleife wird die Rotation variiert. Da bei der Creation Expression negative und positive Rotationswerte zufällig vergeben werden, drehen sich alle Partikel mit negativen Rotationswerten nach links, und alle anderen Partikel machen eine Rechtsdrehung.

Runtime Expression:
particleShape1.spriteTwistPP = particleShape1.spriteTwistPP +10;
if (particleShape1.spriteTwistPP <= 0)
{
particleShape1.spriteTwistPP = particleShape1.spriteTwistPP -10;
}
else
{
particleShape1.spriteTwistPP = particleShape1.spriteTwistPP +10;
}

Beispiel: Partikel-Expression | mov | 1.384 kb

Alle Partikel bekommen bei der Geburt eine zufällige Sprite-Scalierung zwischen 0 und 0.1. Die Sprite-Skalierung wird in diesem Fall durch die zwei Werte spriteScaleYPP und spriteScaleXPP definiert.

Creation Expression:
particleShape1.spriteScaleXPP = rand (0,0.1);
particleShape1.spriteScaleYPP = particleShape1.spriteScaleXPP;

Beispiel: Partikel-Expression | mov | 826 kb

Druch eine Sinus-funktion ändern sich die Skalierwerte periodisch.

Runtime Expression:
particleShape1.spriteScaleYPP = particleShape1.spriteScaleYPP * (
sin(time));
particleShape1.spriteScaleXPP = particleShape1.spriteScaleYPP;

Beispiel: Partikel-Expression | mov | 147 kb

In diesem Beispiel wurde das obere Partikeslsystem 3x dupliziert. Bei den Duplikaten wurde die Phase der Sinuskurve variiert.
Runtime Expression:
particleShape1.spriteScaleYPP = particleShape1.spriteScaleYPP * (sin(time +
0.1));
particleShape1.spriteScaleXPP = particleShape1.spriteScaleYPP;

Beispiel: Partikel-Expression | mov | 1.237 kb

Ergänzende und vertiefende Module