Kapitel 5: Dependency Graph und MEL

[ Computeranimation ] Kapitel 5: Dependency Graph und MEL Prof. Dr. Stefan M. Grunvogel ¨ [email protected] Institut fur ¨ Medien- und P...
Author: Reinhold Bauer
8 downloads 3 Views 3MB Size
[ Computeranimation ]

Kapitel 5: Dependency Graph und MEL Prof. Dr. Stefan M. Grunvogel ¨ [email protected]

Institut fur ¨ Medien- und Phototechnik ¨ Fachhochschule Koln

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¨ ahle 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¨ ugen sphere -ch off; // C.h. nicht hinzuf¨ ugen

 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 = >; // 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