# Blender Dokumentation: Ipo-Driver

| <<<Zurück Ipo-Curves bearbeiten | ↑ Inhaltsverzeichnis ↑ Handbuch durchsuchen | Weiter>>> Pfadanimation |
* Diese Seite bezieht sich auf Blender v2.42a
Ein Ipo-Driver erlaubt es, einen Ipo-Wert durch die Bewegung eines anderen Objektes zu steuern. So können Sie beispielweise die Farbe eines Objektes von der Position eines anderen Objektes abhängig machen. Eine häufig gebrauchte Anwendung ist die Steuerung von Shape-Keys durch die Bewegung eines Armature-Bones. Sie können so z.B. eine Muskelbewegung (Shape-Key) durch die Bone-Bewegung steuern, und auch das "Einknicken" von Objekten verhindern (Abbildung 1, unten).
Ein Ipo-Driver sieht aus wie eine Ipo-Kurve, auf der horizontalen Achse ist aber nicht der Frame-Wert (also die Zeit) dargestellt, sondern der steuernde Wert des anderen Objektes. In dem Beispiel in Abbildung 2 wird der Rot Z-Wert eines Bones benutzt, um den Shape-Key ArmPit zu steuern. Die Bones sind so angeordnet, dass das Beugen des Armes in negative Z-Richtung erfolgt. Damit sich der Shape-Key nicht zu früh auswirkt, verläuft die Kurve bei kleinen Rotationswerten flach, und erst bei Rotationswerten unter etwa -70° steil. Bei einer Rotation des Bones um -90° soll sich der Shape-Key voll auswirken, daher erreicht die Kurve dort den Wert 1.
Um einen steuernden Wert zu einer Kurve hinzuzufügen, benutzt man das Transform Properties Panel im Ipo Curve Editor (Abbildung 3a-d).
| Abbildung 3a: Zunächst öffnet man das Transform Properties Panel (N). | Abbildung 3b: Dann trägt man einen Objektnamen ein. | Abbildung 3c: Bei einer Armature kann man zwischen Objekt- und Poseeigenschaften wählen. | Abbildung 3d: Bei einer Pose wird der Name des Bones eingetragen, und zum Schluss die treibende Eigenschaft ausgewählt. |
Statt einem Objekt kann auch ein einzeiliger Pythonbefehl benutzt werden, um die Eigenschaft zu steuern. Aber lassen Sie sich durch die Beschränkung auf eine Zeile nicht täuschen, Sie können vollständige Programme als Module nutzen (siehe unten).

## Driver und Werte

Jeder Ipo-Wert kann gesteuert werden, aber nur Objekt- oder Boneänderungen können zur Steuerung benutzt werden. Da nur lokale Änderungen berücksichtigt werden, wird nur der Location/Rotation/Scale Wert ohne eventuelle Parent-Transformationen ausgewertet, also so wie er im Transform Properties Panel der Objekte angezeigt wird. D.h. bewegen Sie den Parent eines steuernden Objektes und das Objekt folgt seinem Parent, wird diese Bewegung nicht zur Steuerung benutzt (Abbildung 4). Das gleiche gilt für Constraints des steuernden Objektes.
Bei Posen wird die Änderung zu der Ausgangsstellung [Restposition] ausgewertet, also so wie sie im Transform Properties Panel des Pose Modes angezeigt wird.
Das Mapping eines Drivers ist in der Voreinstellung eins zu eins, und wird nur durch die Werteinschränkung des Kanals begrenzt. So kann der Wert "R" für die Materialfarbe nur Werte von 0.0 bis 1.0 annehmen. Drehungen werden in Ipos um den Faktor 10 herunterskaliert (360 Grad entsprechen im Ipo-System dem Wert 36.) Die horizontale und vertikale Werteanzeige zeigt den Ipo-Wert aber unskaliert, nur im Properties-Panel ist der skalierte Wert zu sehen.
Wenn Sie I drücken, können Sie eine one-to-one curve [eins zu eins Beziehung] einfügen, die häufig einen guten Ausgangspunkt für eigene Bearbeitungen darstellt. Ist der steuernde Wert eine Drehung, entsprechen 180° Drehung einem Bereich von einer Einheit.
* Benennt man einen Bone um, wird der Driver nicht umbenannt, die Beziehung also zerstört. Bei treibenden Objekten wird der Name des Drivers automatisch angepasst.
* Fügt man einen Ipo über File->Append ein, wird das steuernde Objekt nicht mit eingefügt.

## Beispiele für Python-Ausdrücke

Das Einfügen eines Python-Ausdrucks als Treiber eröffnet einige interessante Möglichkeiten. So kann man mathematische und logische Funktionen benutzen, um Animationen zu steuern. Der Ausdruck muss eine Zahl zurückliefern, also keine Zeichenkette oder ein Array oder einen anderen Typ. Gültige Ausdrücke:
* 1.8931 # reelle Zahlen bitte nicht mit Komma, sondern mit Punkt trennen
* 4.5 + 8.9 * 7.0 - (2 / 3.0)
* math.pi * 2 + 5.0
* Blender.Get("curframe") # der aktuelle Frame der Animation
* math.sin(Blender.Get("curframe"))

### Eingebaute Abkürzungen

Um Tipparbeit zu sparen, existieren für einige der Pythonmodule Abkürzungen:
* Blender: blender, b
* Blender.Noise: noise, n
* math: math, m
Ein Beispiel:
* m.cos(m.pi * b.Get("curframe") / n.random)
ist also das gleiche wie:
* math.cos(math.pi * blender.Get("curframe") / noise.random)
Für einige häufig benutzte Daten existieren ebenfalls Abkürzungen:
* ob(name) = Blender.Object.Get(name)
* me(name) = Blender.Mesh.Get(name)
* ma(name) = Blender.Material.Get(name)
Beispiel: ob("Cube").LocX + ob("Lamp").RotZ

### Benutzung eines ganzen Scriptes

Ist im Texteditor eine Textdatei namens "pydrivers.py" geladen, kann diese ebenfalls als Modul ausgewertet werden:
* pydrivers: pydrivers, p
So kann man eigene Funktionen und Variablen erzeugen, ohne die Beschränkung auf eine Zeile. Wenn die Datei "pydrivers.py" z.B. so aussieht:
Nun kann die Variable "myvar" und die Funktion "myfunction" in jedem Ausdruck benutzt werden: p.myvar * p.myfunction(2) - 1

## Links

Ipo Drivers Releasenotes zu v2.40 Using Ipo driven shape keys to correct deformations in joints (mit .blend Datei). Brillantes Beispiel für die Anwendung von Armature Driven Shapes. Python Driver Dokumentation auf mediawiki.blender.org
| <<<Zurück Ipo-Curves bearbeiten | ↑ Inhaltsverzeichnis ↑ Glossar | Weiter>>> Pfadanimation |