Kapitel 5: Dependency Graph und MEL

Werbung
[ Computeranimation ]
Kapitel 5: Dependency Graph und MEL
Prof. Dr. Stefan M. Grünvogel
[email protected]
Institut für Medien- und Phototechnik
Fachhochschule Köln
5. Dependency Graph und MEL [Computeranimation] – p.1/41
Grundlegende Konzepte von Maya
Ziel: Grundlegende Konzepte der Animation an Hand von Maya erläutern
Fundamentale Konzepte tauchen in ähnlicher Weise in anderen Tools auf.
Konzept verstanden ⇒ übertragbar auf andere Tools
Dafür: Genaueres Verständnis von Maya notwendig
5. Dependency Graph und MEL [Computeranimation] – p.2/41
Maya Architektur
Graphisches Interface
m
Interaktion durchführen
↓ wird übersetzt
MEL Command Engine
m
Dependendy Graph
MEL-Kommandos
↓ wird interpretiert
Operation auf Dependency Graph
5. Dependency Graph und MEL [Computeranimation] – p.3/41
Datenfluss-Modell
Prinzip von Maya: Ein Interface für Modelung, Animation, Rendering,...
Grundidee: data flow model (Datenfluss-Modell)
Was macht ein 3D-Programm eigentlich?
Erzeugt Daten (z.B. 3D Modell, Animation)
Daten werden durch Operatoren verändert
Resultat der Operation sind wieder Daten (z.B. Pixel, ander Daten)
Daten → Operator1 → Operator2 → . . . → OperatorN → Ergebnis
Daten “fließen” durch die Operatoren
5. Dependency Graph und MEL [Computeranimation] – p.4/41
Der Dependency Graph
Dependency Graph (DG) realisiert das Datenfluss-Paradigma in Maya (technisch:
“push-pull”-Modell anstatt data flow)
Repräsentation von Daten und Operatoren durch nodes (Knoten):
erzeugen und manipulieren myemphalle Daten (Modelle, Dynamik,
Animation,...)
können miteinander verknüpft werden
◮ Netzwerk von miteinander verknüpften Knoten
◮ Konstruktion komplexer Operationen möglich
Knoten vernetzen + MEL ⇒ vielfältige Möglichkeiten
5. Dependency Graph und MEL [Computeranimation] – p.5/41
Die Szene
beinhaltet alle Modelle, Texturen, Lichter, Kameras,...
Der Dependency Graph ist die Szene
Maya-Datei: Sequentielle Abbildung des DG in einer Datei.
5. Dependency Graph und MEL [Computeranimation] – p.6/41
Darstellung des Dependency Graphen
Hypergraph: Darstellung der Knoten und Verbindungen des DG
5. Dependency Graph und MEL [Computeranimation] – p.7/41
Datenfluss
Beispiel: Animation einer NURBS-Sphäre entlang x-Achse
Unsichtbar: time node. Output: Aktuelle Zeit
curveAnim node (Animationskurve): Erzeugt mit aktueller Zeit einen
Output-Wert nurbsSphere1_translateX.output
transform node (Transformationsknoten): Output-Wert der Animationskurve
wird nach nurbsSphere1.translateX übertragen
5. Dependency Graph und MEL [Computeranimation] – p.8/41
Knoten - Schematische Darstellung
node
input
output
Knoten besteht aus einem Typ, Attributen und einer compute
Funktion
compute()
Attribute
◮ Halten Daten des Knoten
◮ Beispiel:
• transform node: translateX
• makeNurbsSpehere: radius
compute() Funktion
◮ Symbolische Bezeichnung für uns!
◮ Wird im Hypergraph nicht dargestellt
◮ Aufgabe: Berechne neue Werte aus Input-Attributen und überweise
Ergebnis in Output-Attributen.
5. Dependency Graph und MEL [Computeranimation] – p.9/41
Attribute
Attribut = Name + Datentyp
Ähnliche Attributen von Objekten
Alle Daten sind in den Attributen von Knoten gespeichert
node
node
node
size: float
pointA: compound
x: float
y: float
z: float
Einfaches Attribut
Compound Attribut
points: array
[0] point: compound
x: float
y: float
z: float
[1] point: compound
x: float
y: float
z: float
[2] point: compound
x: float
y: float
z: float
Array Attribut
5. Dependency Graph und MEL [Computeranimation] – p.10/41
Die Compute-Funktion
Funktion der Form
output = compute(input0, ... , inputN)
output, input1, ..., inputN: Attribute des Knotens
Rechnung mit Daten seines Knotens und nicht mit Daten anderer Knoten
“black box”
Vorteil
Implementierung von compute ist gekapselt
kann ausgetauscht werden ohne Funktionalität zu ändern
Wartung, Effizienz
Nicht jeder Knoten muss compute-Funktion enthalten.
5. Dependency Graph und MEL [Computeranimation] – p.11/41
Abhängige Attribute
In Maya: Keine formale Unterscheidung zwischen Input und Output-Attributen
Alle Attribute halten Daten
Interne Verknüpfung durch compute-Funktion im Knoten
Beispiel:
Volumen abhängig von Radius
sphereSize: Input-Attribut
volume: Output-Attribut
sphereVolume
sphereSize: float
volume: float
Berechnung mit compute()-Funktion:
volume = compute(sphereSize)
Intern: C++ Funktion
attributeAffect(sphereSize, volume)
5. Dependency Graph und MEL [Computeranimation] – p.12/41
Abhängige Attribute
Verknüpfung mehrerer Input und Output-Attribute
boxMetrics
width: float
height: float
depth: float
areaOfTop: float
volume: float
areaOfTop = width * depth
volume = areaOfTop * height
areaOfTop = compute(width, depth)
volume = compute(areaOfTop, height)
Update-Mechanismus
Berechnung volume hängt von areaOfTop ab.
Zuerst Berechnung von areaOfTop, dann Berechnung von volume.
Änderung von width oder depth ⇒ Neuberechnung areaOfTop und
volume.
5. Dependency Graph und MEL [Computeranimation] – p.13/41
Knoten ohne compute-Funktion
Nicht jeder Knoten muss compute-Funktion enthalten.
Knoten halten dann nur Daten in Attributen
Beispiel
time
Globaler Framezeitknoten
Ein time-Knoten pro Graph
outTime: time
Graph erhält alle Zeitinformatio aus time-Knoten
Hält aktuelle Frame in outTime
Time Slider bewegen ⇒ outTime hält aktuellen Frame
5. Dependency Graph und MEL [Computeranimation] – p.14/41
Knotenverbindungen
Knoten: Berechnet Output-Attribute mit Werten aus Input-Attribute
Knotenverbindung
Kante im DG
Verbindet Output-Attribut eines Knotens M mit Input-Attribut eines Knotens N
Regeln:
◮ Verbindung nur zwischen Attributen des gleiche Typs möglich
◮ Output-Attribut: Verbindung zu mehreren Input-Attributen
◮ Input-Attribut: Verbindung zu höchsten einem Output-Attribut
5. Dependency Graph und MEL [Computeranimation] – p.15/41
Knotenverbindungen
Beispiel: Animation Sphäre entlang x-Achse
time
outTime: time
animCurveTL
transform
input: time
translate: double3
output: time
translateX: double
translateY: double
translateZ: double
... andere Attribute
5. Dependency Graph und MEL [Computeranimation] – p.16/41
Datenfluss
M
N
a : typ
b : typ
Knoten M, N mit Attributen M.a und N.b
Keine Verbindung zwischen M.a und N.b ⇒ N.b speichert Wert in Knoten N .
Verbindung M.a → N.b ⇒ Interner Wert von N.b wird ersetzt durch Wert von
M.a
Verbindung zwischen M.a und N.b trennen ⇒ N.b hält letzten aktuellen Wert
von M.a.
5. Dependency Graph und MEL [Computeranimation] – p.17/41
Verbindungen
Attribut mit mehreren Verbindungen
Nicht erlaubte Verbindung
node
node
a : float
node
node
b : float
a : float
b : float
c : float
c : float
node
d : float
5. Dependency Graph und MEL [Computeranimation] – p.18/41
Grenzen des DG
Knoten im DG:
dependency nodes
Komplexes Netzwerk von Verbindungen
Problem:
Übersichtlichkeit
Darstellung von Hierarchien (z.B. Parenting)
5. Dependency Graph und MEL [Computeranimation] – p.19/41
DAG Knoten
DAG: directed acyclic graph
directed acyclic: Keine zyklischen Verbindungen
graph: Keine Baumstruktur. Knoten kann mehrere Eltern haben
Knoten im DAG:
DAG-Knoten
sind spezielle DG-Knoten
visualisieren hierarchischen Strukturen (Eltern-Kind-Beziehung)
Visualisierung von Knoten im Hypergraph entweder
hierarchisch in DAG-Form, “Szene Hierarchy”, oder
als Up- und downstream Verbindungen im DG
5. Dependency Graph und MEL [Computeranimation] – p.20/41
Beispiel
Darstellung von DAG und DG-Knoten in einem Diagramm
transform
time
animCurve
transform
shape
Pfeile: Verbindung zwischen Attributen
Linien: Hierarchische Eltern-Kind-Beziehung
5. Dependency Graph und MEL [Computeranimation] – p.21/41
Transform und Shape Nodes
Prinzip: Erzeugung von 3D Objekten Resultat von zwei DAG Knoten
Transform Node
Bestimmt Position, Orientierung, ... von Objekt
im Weltkoordinatensystem
Bestandteile von Objekten sind im
Objektkoordinatensystem gegeben
Knoten transformiert Objekt- in Weltkoordinatensystem
transform
shape
Shape Node
Definiert Form eines Objekts
Elemente des Objekts sind im
Objektkoordinatensystem gegeben
Kann ohne Transform Node nicht existieren
5. Dependency Graph und MEL [Computeranimation] – p.22/41
Parenting und Grouping
Definition von Transformations-Hierarchien
Parenting
Knoten wird zum Kind-Knoten eines anderen
Knotens
Grouping
Einfügen eines neuen Transform Nodes und
einfügen von Knoten als Kind-Knoten
torso
head leftLeg rightLeg leftArm rightArm
leftHand rightHand
5. Dependency Graph und MEL [Computeranimation] – p.23/41
DAG Pfad
Position Objekts im Weltkoordinatensystem:
bestimmt durch Transform Nodes bis zur Wurzel
berechnet durch Multiplikation der Transformationsmatrizen
Beispiel: Transformationsmatrix von leftHandshape
torso Matrix * leftArm Matrix * leftHand Matrix
DAG Pfad (DAG path)
Spezielle Notation für Pfad von Wurzel bis Knoten
Jeder Knotenname wird durch den Character | getrennt
Beispiel:
|torso|leftLeg|leftArm|leftArmShape
Leerer Elternknoten vor torso: Globale Wurzel (root node) der Hierarchie ohne
Transformation
5. Dependency Graph und MEL [Computeranimation] – p.24/41
Underworld Nodes
Dreidimensionaler Raum
Position von Objekten in kartesischen Koordinaten (x, y, z) gegeben
Eindimensionaler Raum
Beispiel: Kurven
Eindimensionale Koordinate (u)
Zweidimensionaler Raum
Beispiel: NURBS-Oberflächen
Zweidimensionale Koordinaten (u, v)
Underworld node:
Spezieller Transform Node
Koordinaten im parametrisierten Raum ⇒ Welt- bzw. Objektkoordinaten
5. Dependency Graph und MEL [Computeranimation] – p.25/41
Beispiel
Umschalten auf (u, v) Koordinaten
NURBS-Oberfläche: Modify | Make Live
Hypergraph
◮ Darstellen:
Option − Display − U nderworld N odes
◮ Underworld-Verbindung: gestrichelte Linie
DAG-Pfad
◮ Underworld-Verbindung: ->
◮ Beispiel:
|nurbsPlane1|nurbsPlaneShape1->curve1|curveShape1
5. Dependency Graph und MEL [Computeranimation] – p.26/41
Instanzen
Maya: Duplicate − Geometry T ype : Instance
DAG-Knoten bestehend aus
◮ Transform Node
◮ Referenz auf Shape-Knoten: Geometrische Objekte, Kameras, Lichter,
Instanzgruppen
Zweck: Darstellung eines Objekts an mehreren Orten gleichzeitg
Vorteile:
◮ Spart Speicherplatz, Rechenzeit
◮ Änderung Objekt wirkt sich auf alle Instanzen aus
◮ Wichtig um große Zahl gleicher Objekte zu erzeugen
5. Dependency Graph und MEL [Computeranimation] – p.27/41
Instanzen
Darstellung im Hypergraph:
◮ Gestrichelte Linie Shape - Transform Node
◮ Deshalb: Hypergraph und nicht Hypertree
Darstellung DAG-Pfad:
◮ Zwei (oder mehrere) Pfade zum Knoten
◮ |nurbsSphere1|nurbsSphereShape1
|nurbsSphere2|nurbsSphereShape2
5. Dependency Graph und MEL [Computeranimation] – p.28/41
Knoten bestimmen
Syntax: ls [flags] [objectName [objectName...]]
Rückgabewert: string[]
Gibt Namen (optional Typ) von Objekten einer Szene zurück
Filtern oder Vergleichen von Objekten bzgl Namen oder Typ
Anwendung auf
◮ alle Objekte der Szene
◮ alle ausgewählten Objekte
5. Dependency Graph und MEL [Computeranimation] – p.29/41
Beispiel-Szene
circle -n Kreis1;
group;
circle -n Kreis1;
sphere -n Kugel1;
group;
instance;
select -ado;
// Gruppiere Kreis1 -> group1
// Gruppiere Kugel1 -> group2
// Instantiiere group2 -> group3
// Wähle alle DAG-Objekte aus
5. Dependency Graph und MEL [Computeranimation] – p.30/41
Knoten bestimmen
Wildcards: *
ls "Ka*";
-selection (-sl): Liste aller ausgewählten Objekte
ls -sl;
ls -sl "group1";
ls -sl "Ka*";
-long (-l): Voller DAG-Pfad für DAG-Knoten. Kürzester eindeutiger Pfad
wird zurückgegeben
ls -l "*Shape";
5. Dependency Graph und MEL [Computeranimation] – p.31/41
Knoten bestimmen
-showType (-st): Objektname und Typ zurückgeben
ls -st;
-type (-typ): Auflistung von Objekten mit speziellem Typ
ls -type nurbsSphere;
-dagObject (-dag): Auflistung von DAG-Objekten. Falls Name angegeben,
werden alles DAG-Objekte unter dem Objekt zurück gegegeben speziellem Typ
ls -dag group3;
Beispiel: GetInstanceIndex.mel
5. Dependency Graph und MEL [Computeranimation] – p.32/41
Knoten auswählen
Syntax: select [flags] [objectName ...]
Rückgabewert: keiner
Setzt ein oder mehrere Objekte auf Liste der ausgewählten (aktiven) Objekte
-all (-all): Auswahl aller Knoten
-clear (-cl): Auswahlliste löschen
-add (-ad): Zur Auswahlliste hinzufügen
select -add "Kugel1";
-deselect (-d): Aus Auswahlliste entfernen
5. Dependency Graph und MEL [Computeranimation] – p.33/41
Knoten erzeugen
Meist: Erzeugung von Knoten mit MEL-Kommandos
sphere, cone, torus, nurbsPlane, nurbsCube,....
Oft:
◮ -name (-n): Name des Knotens
◮ -constructionHistory
ausschalten
(-ch): Constructíon History an- oder
sphere -ch on; //C.h. hinzufügen
sphere -ch off; // C.h. nicht hinzufügen
createNode nodeType [-shared] [-n nodeName] [-p dagParent]
Erzeugt Knoten eines bestimmten Type unter einem Elternknoten
5. Dependency Graph und MEL [Computeranimation] – p.34/41
DAG-Hierarchien
Syntax: listRelatives [flag] [object]
Rückgabewert: string[]
Listet Eltern- bzw. Kindknoten von DAG-Objekten auf
-children (-c): Direkte Kinder des DAG-Knotens
list relatives -c group3
-allDescendents (-ad): Gesamten Teilbaum unterhalb des Knotens
-parent (-p): Direkte Eltern des DAG-Knotens
-allParents (-ap): Alle Knoten aufwärts bis zur Wurzel
listRelatives -ap Kugel1;
5. Dependency Graph und MEL [Computeranimation] – p.35/41
Knotenattribute
Daten einer Szene sind in Knotenattributen gespeichert
Knotenverbindungen bestimmen Datenfluss
Kommandos:
getAttr Rückgabe des Werts eines DG-Knotenattributs
setAttr Setzt Wert eines DG-Knotenattributs
5. Dependency Graph und MEL [Computeranimation] – p.36/41
Knotenattribute ausgeben
Syntax: getAttr [flags] [-time] object.attribut
Rückgabetyp: Abhängig vom Typ des Attributs
Gibt den Wert eines Knotenattributs zurück.
-time (-t) Wert des Attributs zu bestimmten Zeitpunkt
-type (-typ) Typ des Attributs
Beispiel:
$radius = ‘getAttr makeNurbSphere1.radius‘;
print("\nRadius: " + $radius);
float $s[] = ‘getAttr Kugel1.scale‘;
print("\nKugel1.scale: \n");
print($s);
getAttr -type Kugel1.scale; //Typ des Attributs
5. Dependency Graph und MEL [Computeranimation] – p.37/41
Knotenattribute setzen
Syntax: setAttr [flags] object.attribut [values]
Rückgabewert: Keiner
Setzt den Wert eines Knotenattributs
Komplexe Attributtypen müssen in einzeln Komponenten zerlegt angefügt werden.
Beispiel:
setAttr makeNurbSphere1.radius 2.5;
$radius = ‘getAttr makeNurbSphere1.radius‘;
print("\nRadius: " + $radius);
vector $sc = << 1.5, 2.3, 1.4 >>;
// setAttr Kugel1.scale $sc
geht nicht!
// Statt dessen
setAttr Kugel1.scale ($sc.x) ($sc.y) ($sc.z);
5. Dependency Graph und MEL [Computeranimation] – p.38/41
Koordinatensysteme in Maya
Hierarchie von Transformationen gegeben durch transform
nodes
trafoA
trafoB
Shape node: Erzeugt Geometrie
trafoC
Transform node: Affine Transformation
shape
Transformation eines Punkt p des shape node in Weltkoordinaten:
p′ = trafoA · trafoB · trafC · p
5. Dependency Graph und MEL [Computeranimation] – p.39/41
Koordinatensysteme in Maya
Transformation spaces
Object Space
◮ Koordinatensystem des Objekts
◮ Punkte die im Shape Node erzeugt werden sind in Object
Space-Koordinaten p(obj) .
◮ Koordinatenurspung: Im Allg. Zentrum der Bounding Box des Objekts
◮ Pivot point im Ursprung des Koordinatensystems
5. Dependency Graph und MEL [Computeranimation] – p.40/41
Koordinatensysteme in Maya
Local / Parent Space
◮ Koordinatensystem des Elternknotens
◮ Objekt-zu-Elterntransformation: objektname.parentMatrix
◮ Im Beispiel: p(loc) = trafoC · p(obj)
◮ Eltern-zu-Objekttransformation: objektname.parentInverseMatrix
World Space
◮ Koordinatensystem der gesamten Szene
◮ Ursprung im Zentrum der Szene
◮ Objekt-zu-Welttransformation: objektname.worldMartix
◮ Im Beispiel: p(world) = trafoA · trafoB · trafoC · p(obj)
◮ Welt-zu-Objekttransformaiton: objektname.worldInverseMatrix
Beispiel: SpaceToSpace.mel
5. Dependency Graph und MEL [Computeranimation] – p.41/41
Knotenverbindungen
Verbindungen zwischen Knotenattributen bestimmten Gesamtszene
Kommandos:
listConnection Verbindungen eines Objekts ausgeben
connectionInfo Test ob Attribut in Verbindung mit anderem Attribut steht
isConnected Test ob Attribute zweier DG-Knoten miteinander verbunden sind
5. Dependency Graph und MEL [Computeranimation] – p.42/41
Knotenverbindungen ausgeben
Syntax: listConnection [flags] [Object[.attribute]]
Rückgabewert: string[] Liste der Verbindungen
Gibt Liste aller Attribute/Objekte eines spezifizierten Types zurück, die mit
gegebenem Objekt verbunden sind
Falls keine Objekte spezifiert: Verbindungen der ausgewählten Knoten
-source (-s) {on, off} Attribute auf “Source”-Seite des Objekts
(eingehende Verbindung)
-destination (-d) {on, off} Attribute auf “Destination”-Seite des
Objekts (ausgehende Verbindung)
-plugs (-p) {on, off} Gibt Attributnamen (plugs) aus, nicht nur
Objektnamen
5. Dependency Graph und MEL [Computeranimation] – p.43/41
Verbindungstest 1
Syntax: connectionInfo [flags] plugName
Rückgabewert: boolean, string, string[]
Test ob Attribute Source oder Destination für eine Verbindung sind
Falls keine Objekte spezifiert: Verbindungen der ausgewählten Knoten
-isSource (-is) True gdw. plugName Quelle einer Verbindung
-isDestination (-id) True gdw. plugName Ziel einer Verbindung
-destinationFromSource (-dfs) Falls plugName Source ist, Rückgabe
der Desinations
-sourceFromDestination (-sfd) Falls plugName Destination ist,
Rückgabe der Source
5. Dependency Graph und MEL [Computeranimation] – p.44/41
Verbindungstest 2
Syntax: isConnected sourcePlug destinationPlug
Rückgabewert: boolean
Test ob zwei Attribute miteinander verbunden sind
true gdw. zwei Attribute miteinander verunden
Beispiel: VerbindungsInfos.mel
5. Dependency Graph und MEL [Computeranimation] – p.45/41
Utility Knoten
Bisher: Einfache Verbindung von Attributen
A.x = B.y
Jetzt: Attributwerte werden durch Funktion verändert:
A.x = f (B.y)
mit einer Funktion f .
In Maya: Vordefinierte Funktionen mit Hilfe von Utility Nodes
DG-Knoten
Haben ein oder mehrere Input- und Outputattribute
Berechnen Outputwerte mit Hilfe einfacher Operationen
5. Dependency Graph und MEL [Computeranimation] – p.46/41
Utility Knoten
Vorteil:
Schnellere Auswertung als Expressions
Übersichtlich
Nachteil:
Nicht alle Berechnungen lassen sich mit Utility Nodes realisieren
Verbindungen von und zu Utility Nodes müssen “von Hand” erstellt werden
5. Dependency Graph und MEL [Computeranimation] – p.47/41
Erzeugung von Utility-Knoten
GUI:
Erzeugen: Hypershade/Create
Verbinden mit Connection Editor
MEL:
Erzeugen: createNode utilitynodename;
Attribute des Utility-Nodes mit Attributen der Objekte verbinden
Evtl. Utility Node mit setAttr konfigurieren
Beispiel: Utility1.mel
5. Dependency Graph und MEL [Computeranimation] – p.48/41
Beispiel für Utility-Knoten
In Maya-Hilfe unter Node and Attribute Reference zu finden
Beispiele
plusMinusAverage Summe, Durchschnitt oder Differenz einer Menge von
Input-Attributen
multiplyDivide Multiplikation oder Division von ein bis drei float-Werten
vectorProduct Skalarprodukt, Kreuzprodukt, Vektor mal Matrix, Punkt mal
Matrix
condition Vergleich zweier Input-Knoten und Ausgabe eines Wertes
setRange Abbildung eines Intervalls auf ein anderes
5. Dependency Graph und MEL [Computeranimation] – p.49/41
Herunterladen