Vorbemerkung

Expressions („Ausdrücke") sind mathematische Gleichungen, einfache Verbindungen oder komplexe Scripts für Animationen. Sie berechnen Attribute für Geometrien, Texturen, Lichter oder Partikelsysteme. In den meisten Fällen werden die Werte bei jedem Frame neu berechnet. Einfache Expressions können ohne umfassende Programmierkenntnisse verwendet werden. Bereits einfache Scripts können bei Animationsaufgaben hilfreich sein. Diese Grundlage versucht allgemeine Regeln und Verfahrensweisen softwareunabhängig aufzuzeigen. Die Anwendungsbeispiele zeigen MEL scripting (Maya).

Skriptsprachen für Expressions:
Maya: MEL. MEL script
Cinema: Coffe
3dStudio: Max script.

Einfache Expression

nurbsSphere1.translationX = time;

Der Kugel wird für den Wert translationX der Wert time zugewiesen. "Time" ist ein programminternes Zählwerk, welches je nach Voreinstellungen (Pal, NTSC) Sekunden ausgibt. So wird bei der Voreinstellung Pal / 25 fps der Nurbs-Kugel bei Frame 25 ein Wert von 1 für den Wert translationX zugewiesen.

Die Abbildung zeigt eine einfache Expression in Maya:
(a) Hypergraph: Hierarchische Darstellung der einzelnen Verknüpfungen.
(b) ScriptEditor in Maya: Scripts und Expressions können in den eigenen Editor oder in externen Editoren geschrieben werden.
Der Sekundenzeiger hat bei Frame 25 einen Rotationswert von -6. Mit der Expression -time * 6 bewegt sich der Sekundenzeiger korrekt. Der Minutenzeiger und der Stundenzeiger werden daraus berechnet.
Einfache Expression: Uhrwerk | swf | 80 kb

Komplexe Expressions

Im folgenden Beispiel wird das Drehen der Räder über eine Expression berechnet. Die Räder werden durch Pfad-Animation bewegt. Der Wert motionPath.uValue erstreckt sich von 0 = Anfangspunkt bis 1 = Endpunkt der Pfad-Animation. Zuerst wird die Variable $pi , $Vradius (Radius des Rades) und $Vlength (Gesamte Weglänge) definiert. Der aktuell zurückgelegte Weg wird durch eine Multiplikation von "Gesamte Weglänge" und motionPath.uValue berechnet. Die aktuelle Rotation wird so berechnet, dass der aktuell zurückgelegte Weg durch den Umfang des Rades dividiert wird. Multipliziert mit -360 ergibt die Rotation des Rades zum aktuell zurückgelegten Weg.

Tour de france | mov | 2.23 kb

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