HOME - SMIL: Version 2.1 vom 20.06.2005 © Wolfgang von Keitz


Vorwort
Grundlagen
Layout
Zeit

Bild, Text und Ton

SMIL und HTML
Referenz
Beispiele
Anhang
Quellen

4. Bild, Text und Ton

4.4. Animation

In diesem Kapitel werden die Animationsmodule erläutert. Es gibt zwei Animationsmodule: Das Basisanimationsmodul und das Spline-Animationsmodul. Die Module enthalten Elemente und Attribute zur Integration von Animationen in eine Multimediapräsentation.

Unter Animation versteht man landläufig Cartoons oder Trickfilme. Ein Programm, das Animationen unterstützt, unterstützt im Grunde das Zeichnen von Objekten und die Bewegung von Objekten. Da SMIL keine Sprache ist, mit Objekte erzeugt werden können, ist das Verständnis von Animation in SMIL darauf begrenz, Parameter bereits bestehender Objekte so zu verändern, dass Bewegung entsteht. Die Animationsmodule in SMIL haben also nichts mit Cartoons zu tun. Vielmehr geht es um das Thema Bewegung bzw. Veränderung. Welche Möglichkeiten die SMIL-Animationsmodule bieten, soll an folgenden Beispielen verdeutlicht werden:

  • vergrössern oder verkleinern eines Objekts - Beispiel
  • ein Objekt auf dem Bildschirm bewegen - Beispiel
  • die Hintergrundfarbe ändern - Beispiel
  • die Lautstärke verändern - Beispiel
  • die Transparenz ändern - Beispiel
  • die GrössePräsentationsfensters verändern - Beispiel
4.4.1. Das Animationsmodell
4.4.1.1. Die einfache Animationsfunktion

Eine Animation ist in SMIL als eine zeitabhängige Funktion eines Zielelements definiert. Die einfache Animationsfunktion produziert einen Attributwert des Zielelements für jeden Zeitpunkt der Animation. Es wird unterschieden zwischen dem Basiswert und dem Präsentationswert. Der Basiswert ist der Attributwert, von dem die Animation aus startet; der Präsentationswert ist der Attributwert, der sich zu einem bestimmten Zeitpunkt t aus der Animationsfunktion ergibt.

An dem nachfolgenden Beispiel wird das Prinzip der einfachen Animationsfunktion sichtbar:

<rect ...>
<animate attributeName="width" from="10px" to="100px" begin="0s" dur="10s" />
<animate attributeName="height" from="100px" to="10px" begin="0s" dur="10s" />
</rect>

Die zehn Sekunden dauernde Animation produziert ein Rechteck, das zunächst schmal und hoch ist und dann breit und flach wird. In diesem Beispiel wird die einfache Animationsfunktion des width-Attributs durch from="10px" to="100px" und dur="10s" spezifiziert. Daraus ergibt sich die Funktion f(t)=(10+90*t/10)px.

Darüberhinaus kann eine einfache Animationsfunktion auch ohne die Angabe eines from-Wertes definiert werden:

<animate attributeName="top" to="10" dur="2.5s" />

Der Zielwert wird automatisch vom Ausgangswert her bestimmt. Die allgemeine Beschreibung der Funktion lautet hier f(t,u)=(u*(2,5s-t)/2,5s)+10*(t/2,5s).

Zusammenfassend lässt sich sagen, dass eine einfache Animationsfunktion f(t) definiert ist für die Zeitwerte von 0<=t<=d, wobei d die einfache Dauer einer Präsentation ist; der Zeitwert 0 legt den Beginn der Animation fest. Der aktuelle Wert des Zielattributs a eines Animationslements zu einem bestimmten Zeitpunkt wird mit u gekennzeichnet. Mit f(t,u) wird eine Animationsfunktion beschrieben, bei der neben der Zeit t weiterer Parameter hinzukommen.

4.4.1.2. Die Animationseffektfunktion F(t,u)

Neben der einfachen Animationsfunktion gibt es noch die Animationseffektfunktion F(t,u), die sich von der einfachen Animationsfunktion dadurch unterscheidet, dass hier nicht die einfache Präsentationsdauer d sondern die aktive Präsentationsdauer AD in die Funktion eingeht. In diesem Fall sind Wiederholungen oder Freeze-Angaben mitberücksichtigt. Die Animationseffektfunktion F(t,u) ist somit definiert für die Zeitwerte 0<=t<=AD.

Bei Wiederholungen wird die Animation mehrfach durchgeführt. Allgemein wird die wiederholte Animationsfunktion mit fr(t)=f(REMAINDER(t,d)) definiert, wobei mit t>=0,d die einfache Dauer der Präsentation und REMAINDER(t,d) als (t-d*floor(t/d)) definiert ist. Folgendes Beispiel, in dem die 2,5 Sekunden dauernde Animation einmal wiederholt wird, verdeutlicht dies:

<animate attributeName="top" from="0" to="10" dur="2.5s" repeatCount="2" />

Neben repeatCount kann auch das Attribut repeatDur verwenden werden. Beispiel:

<animate attributeName="top" from="10" to="20" dur="10s" repeatDur="5s" />

Mit der Wiederholung von Animationen kann sich ein kumulativer Effekt verbinden. In diesem Fall spricht man von einer kumulativen Animation. Beispiel:

<img ...>
<animateMotion path="c(3 5 7 5 10 0)" dur="5s" accumulate="sum" repeatCount="4" />
</img>

Die Animation wird 4 mal durchgespielt; es handelt sich um ein Bild. das 5 Sekunden lang in einem Bogen durch die Präsentationsfläche wandert. Nach der ersten Animation kehrt das Bild aber nicht zum Ausgangspunkt zurück sondern startet an dem Punkt, an dem es die Animation beendet hat. Es wandert also mit jeder Wiederholung der Animation ein Stück weiter über die Animationsfläche.

Eine weiterer Effekt ist das Einfrieren von Animationen. Beispiel:

<img top="3" ...>
<animate begin="5s" dur="10s" attributeName="top" by="100" fill="freeze" />
</img>

Bei einer Animation kehrt das animierte Element nach Ende der Animation an den Ausgangspunkt zurück. Mit fill=freeze wird das Element, z.B. ein Bild, an dem Punkt bleiben, an dem es am Ende der Animation angekommen ist.

4.4.1.3. Die additive Animation

Zusätzlich zur einfachen, wiederholten Animation oder kumulativen Animation können mit der additiven Animation komplexe Kombinationen von Animationen entwickelt werden. Das erste, theoretische Beispiel zeigt das Prinzip der additiven Animation; ein Rechteck, das 20 Pixel breit ist, wird um weitere 10 Pixel gedehnt. Der Ausgangswert des animierten Attributwertes beträgt 20 Pixel; hinzu kommen dann die durch die Animation addierten 10 Pixel; am Ende der Animation beträgt die Breite des Rechtecks dann 30 Pixel:

<rect width="20px" ...>
<animate attributeName="width" from="0px" to="10px" dur="10s" additive="sum"/>
</rect>

Im folgenden Beispiel werden zwei Bewegungen kombiniert:

<img ...>
<animateMotion from="0,0" to="100,0" dur="10s" />
<animateMotion values="0,0; 0,5; 0,0" dur="1s" repeatDur="10s" additive="sum"/>
</img>

4.4.2. Elemente und Attribute des Basic Animation Moduls

Das Basic-Animation-Modul kennt vier Elemente:

  • animate - für eine generische Animation
  • set - um einen konstanten Wert eines Zielattributs zu setzen
  • animateMotion - um eine Bewegung entlang eines Pfades zu definieren
  • animateColor - um zeitabhängige Farbveränderungen definieren zu können
4.4.2.1. Das <animate>-Element

Das <animate>-Element kann numerische Skalare als auch numerische Vektoren animieren. Das <animate>-Element ist ein leeres Element, d.h. es bezieht sich zunächst nicht auf ein bestimmtes Medienobjekt. Der Bezug zum Medienobjekt wird entweder über das Attribut targetElement oder über die Position im SMIL-Dokument als Teil der Medienobjektbeschreibung hergestellt. Die Attribute des <animate>-Element werden auch von den anderen Animationselementen benutzt. Aus diesem Grund werden die einzelnen Attribute an dieser Stelle ausführlich besprochen. Ihr Anwendung gilt für die anderen Animationselement entsprechend.

4.4.2.1.1. Die Spezifizierung des Animationsobjekts

In SMIL wird das zu animierende Objekt target element genannt. Dieses Objekt, z.B. ein Rechteck oder ein Bild, wird mit den Attributen targetElement und attributeName näher spezifiziert. Beispiel:

<region id="video" top="7" left="10" height="216" width="280" />

...................

<animate targetElement="Video" attributeName="top" from="50" to="100" dur="5s" />

Der Wert des Attributs targetElement ist entweder der Wert eines XML identifiers eines Elements innerhalb des SMIL-Dokumentes. Der Wert des Attributs attributeName ist eine Zeichenkette, die den Namen des Target-Attributs festlegt. Daneben gibt es noch das Attribut attributeType mit den Attributwerten css, auto oder xml. Mit attributeType wird festgelegt, nach welchen Konventionen die Zeichenkette spezifiziert wird. Der Attributwert auto ist der voreingestellte Wert.

Diese Form des <animate>-Elements kann an jeder Stelle des SMIL-Dokuments stehen. In diesem Fall spricht man von einer expliziten Definition des Targetelements.

Bei der impliziten Definition wird das <animate>-Element in den Medienobjektcontainer integriert. Beispiel:

<region id="video" top="7" left="10" height="216" width="280" />

...................
<video id="video1" src="..." region="video">
<animate attributeName="top" from="50" to="100" dur="5s" />
<animate attributeName="left" from="50" to="100" dur="5s" />
</video>

4.4.2.1.2. Die Spezifizierung der einfachen Animationsfunktion f(t)

Die Animationsfunktion bestimmt den Wert eines attributs zu einer bestimmten Zeit. Der Zeitbereich, in dem die Animationsfunktion definiert ist, ist die einfache Dauer der Animation.

Eine Animation wird mit zunächst einmal entweder mit einer Liste von Werten oder als eine from, to, by-Liste beschrieben. Beispiel:

<animate attributeName="top" values="50;100" dur="5s" />

In dem oben stehen Beispiel wird die Animation mit Hilfe des Attributs value durch eine Liste von Werten beschrieben. Der Wert von top wird innerhalb von 5 Sekunden in Zehnerschritten von 50 auf 100 erhöht.

Wird statt mit dem Attribut values mit den Attributen from, to und by gearbeitet, ergeben sich folgende Beispiele:

<animate attributeName="top" from="50" to="100" dur="5s" />

Der optionale Attributwert from legt den Ausgangswert und der Attributwert to den Endwert der Animation fest. In diesem Fall beginnt die Animation bei 50 Pixeln und endet bei 100 Pixeln.

<animate attributeName="top" from="50" by="50" dur="5s" />

In diesem Beispiel wird statt des to-Attributs das by-Attribut benutzt. Mit by wird der Wert festgelegt, um den der Ausgangswert erweitert oder vermindert werden soll.

Wie aus dem obenstehenden Beispiel sichtbar wird, sollte entweder ein to-Wert oder ein by-Wert angegeben werden; werden beide Werte angegeben, wird lediglich der to-Wert ausgeführt und der by-Wert ignoriert.

Zur näheren Bestimmung einer Animation gehört noch das Attribut calcMode. Das Attribut calcMode bestimmt mit seinen Attributwerten die Art der Interpolation:

  • linear - mit linearer Interpolation (Voreinstellung),
  • paced - mit konstanter Animationsgeschwindigkeit
  • discrete - ohne Interpolation wird von einem Wert zum nächsten Wert gesprungen

Beispiel für eine lineare Interpolation:

<animate attributeName="top" values="0; 50; 100" dur="5s" calcMode="linear" />

Beispiel für keine Interpolation:

<animate attributeName="color" to="blue" dur="5s" calcMode="discrete" />

4.4.2.1.2. Die Spezifizierung der Animationseffektfunktion F(t,u)

Von einer Animationseffektfunktion spricht man immer dann, wenn die einfache Animationsfunktion

  • mit Hilfe der Attribute repeatCount oder repeatDur wiederholt wird oder mit dem Attribut fill eingefroren wird,
  • bei Wiederholungen als kumulativ bzw. nichtkumulativ definiert werden,
  • als additiv oder nichtadditiv gekennzeichnet wird.

Im einzelnen besitzt die Animationseffektfunktion neben den bereits genannten Attributen die Attribute:

  • accumulate, mit den Attributwerten sum, um die Funktion als akumulativ und none um die Funktion als nichtakumulativ zu kennzeichen;
  • additive, mit den Attributwerten sum, um die Funktion als additiv und replace um die Funktion als nichtadditiv zu kennzeichnen.
4.4.2.2. Das <set>-Element

Das <set>-Element dient dazu, einen bestimmten Attributwert für eine bestimmte Zeit als Konstante zu setzen. Die Wirkung von <set> endet mit dem Ende der Animation.

Die Wirkungsweise von set soll an zwei Beispielen demonstriert werden. Im ersten Beispiel wird für die Animation der ursprüngliche Attributwert „stroke-width“ eines Rechtecks auf 5 Pixel gesetzt:

<rect ........> 
<set attributeName="stroke-width" to="5px" begin="5s"dur="10s" fill="remove" />
</rect> 

Im zweiten Beispiel wird ein Textelement auf „highlight“ gesetzt, wenn die Maus über das Textelement fährt:

<text This will highlight if you mouse over it ...> 
<set attributeName="class" to="highlight" begin="mouseover"end="mouseou" />
</text> 

4.4.2.3. Das <animateMotion>-Element

Das animateMotion-Element lässt ein Objekt einen bestimmten Pfad entlang wandern. Der Pfad kann auf mehrere Arten beschrieben werden:

  • path-Attribut
  • from, to, by-Attribute
  • values-Attribut

Alle Pfadangaben sind als x,y-Koordinatenwerte zu verstehen. Die Syntax für die x,y-Koordinatenwerten lautet:

  • x-Koordinatenwert Komma y-Koordinatenwert; mehrere Wertepaare werden in runde Klammern gesetzt (optional) und durch Semikolon getrennt.
  • beim Pfadattribut wird die SVG Notation benutzt: durch Leerzeichen getrennte Ziffern, denen ein Buchstabe vorangestellt ist; der Buchstabe kennzeichnet die Pfadbewegung; im einzelnen gilt
    • M - absolute move to, m - relative move to
    • L - absolute line to, l - relative line to
    • H - absolute horizontal line to, h - relative horizontale line to
    • V - absolte vertical line to, v - relative vertical line to
    • Z - absolute closepath, relative z - closepath
    • C - absolute cubic Bezier curve to, c - relative cubic Bezier curve to

Für einen from-Wert ergibt sich zum Beispiel from=“(100,0)“, usw. Das folgende Beispiel soll die Arbeitsweise von <animateMotion> unter Benutzung des Pfadattributs verdeutlichen:

<img ........> 
<animateMotion path="c(3 5 7 5 10 0)" dur="5s" accumulate="sum" repeatCount ="4" />
</img> 

In diesem Beispiel wandert für jeweils 5 Sekunden ein Bild auf einem Halbkreis die x-Achse entlang. Diese Bewegung wird drei mal wiederholt. Durch die Akumulation beginnt das Bild jedesmal dort, wo es nach der jeweiligen Iteration zum Halten kam.

Quelle: SMIL 2.0, W3C, 2001.

Im folgenden Beispiel werden zwei Bewegungen kombiniert:

<img ........> 
<animateMotion from="0,0" to="100,0" dur="10s" />
<animateMotion values="0,0; 0,5; 0,0" dur="1s" additive="sum" repeatDur="10s" /> </img> 

In diesem Beispiel wird sowohl für die from/to-Werte als auch für die values-Werte die Koordinatenschreibweise benutzt.

Als Voreinstellung verwendet das <animationMotion>-Element für das calcMode-Attribut den Wert paced. Dadurch ergibt sich entlang des definierten Pfades eine konstante Bewegung. Wird der Wert linear benutzt, kann die Bewegung mit unterschiedlicher Geschwindigkeit ablaufen.

Ein weiteres Attribut des <animateMotion>-Elements ist das Attribut origin. Mit origin kann eine bestimmte Ausgangsposition für das Animationsobjekt gesetzt werden.

4.4.2.4. Das <animateColor>-Element

Mit dem <animateColor>-Element kann die Farbe eines Objektes verändert werden. Die Farbangaben müssen Standardfarbangaben oder RGB-Farbwerten entsprechen. Beispiel:

<animateColor targetElement="background" attributeName="backgroundColor" values="red;black" dur="10s" />

4.4.3. Das Spline-Animation Modul

Das Spline-Animation-Modul erweitert die Interpoltationsmöglichkeiten des Basic-Animation-Moduls. Während im Basic-Animation-Modul nur die Interpolationswerte discrete, linear und paced möglich sind, steht im Spline-Animation-Modul für das calcMode-Attribut auch der Wert spline zur Verfügung. In diesem Fall erfolgt die Interpolation zwischen den Werten der values-Liste nach einer kubischen Becier-Splinefunktion. Hierfür werden die zusätzlichen Attribute

  • keyTimes und
  • keySplines

benötigt. KeyTimes enthält eine Liste von durch Semikolon getrennte Zeitangaben, um die Geschwindigkeit der Animation zu steuern. KeySplines enthält die Angaben für die Splinefunktion. Beispiel:

<animate calcMode="spline" attributeName="x" values="0;50;100" dur="10s" keyTimes="0; .8; 1" keySplines=".5 0 .5 1; 0 0 1 1" />

Das Beispiel beschreibt eine 10 Sekunden dauernde Animation eines Objekts von 0 auf 50 nach 100 Pixel. Durch die keyTimes-Angabe läuft die Animation nicht kontinuierlich ab; vielmehr werden die ersten 80% der Animationszeit (8 Sekunden) für die Animation von 0 auf 50 Pixel verwendet. Die restlichen 2 Sekunden verbleiben dann für die Animation von 50 auf 100 Pixel.Die keySplines-Angaben definieren die Kontrollpunkte für die beiden Teilanimationen. Dem ersten Teil, von 0 auf 50 Pixel sind die Kontrollpunkte 0.5, 0 und 0.5, 1 als Wertepaar zugeordnet; dem zweiten Teil der Animation die Kontrollpunkte 0,0 und 1,1. Die untenstehende Grafik verdeutlicht die Arbeitsweise der Splinefunktion mit unterschiedlichen Kontrollpunkten. Die Kontrollpunkte 0.5, 0 und 0.5, 1 ergeben:

Quelle: SMIL 2.0, W3C, 2001.

Die Kontrollpunkte 0,0 und 1,1 ergeben:

Quelle: SMIL 2.0, W3C, 2001.

Ein weiteres Beispiel zeigt, wie from/to-Wertelisten benutzt werden:

<animate calcMode="spline" attributeName="s" from="10" to="20" dur="20s" keyTimes="0; 7" keySplines=".5 0 .5 1" />

In diesem Fall erfolgt die 10 Sekunden dauernde Animation von 10 auf 20 Pixel in 7 Sekunden; die Animationsbewegung folgt einer s-förmigen Splinefunktion. Die restlichen 3 Sekunden verbleibt die Animation in der Position, die nach 7 Sekunden erreicht sind.

Das Spline-Animation-Modul benutzt die selben Elemente wie das Basis-Animation-Modul:

  • <animate>
  • <animateMotion>
  • <animateColor>

 

zurueck top weiter