3D-Modellierung und Animation

3D-PDF's erstellen, 3D-Charactersetup & Liquidsimulation in Autodesks MAYA (Version: 12. Juni 2021)

INHALTSVERZEICHNIS

1. Einführung

  • Character-Animation ist ein Teilgebiet der Computeranimation und bezeichnet die Gestaltung einer Figur für den Animationsfilm.
  • Zweck der Fluid-Simulation ist das physikalisch möglichst realistische Darstellen einer Flüssigkeitsbewegung.
  • Autodesk-Maya ist eine Software zur 3D-Visualisierung und Animation und wird in der Film- und Fernsehindustrie sowie bei der Entwicklung von Computerspielen eingesetzt. Maya ist eines der bekanntesten und meistgenutzten Softwareprodukte im Bereich 3D-Modellierung, Computeranimation und Rendering.
  • Die wichtigsten MAYA Befehle:
    Pivot eines Objekts ändern: Move-Tool wählen + fn + LeftArrow
    Mehrfachselektion im Outliner: RightMouseButton + cmd
    2-Tastenmaus wählen: Maya/Preferences/Interface
    Tumble (Rotation): LeftMouseButton + Alt
    Track (Translation): LeftMouseButton + Alt + Cmd
    Dolly (Zoom/Skalierung): Scrollwheel benutzern oder RightMouseButton + Alt
    Werte interaktiv im ChannelBox-Parameterfeld ändern: Wert selektieren + Cursor ins Panel (z.B. persp) verschieben + LeftMouseButton + Cmd
    Maya FullScreen-Mode verlassen: Maus auf oberen Bildrand und man erhält das Top-Menü zurück!

1.1 The language of movement

1.2 Walk Cycle

1.3 Gesichtsmuskeln

2. Character-Animation Vorbereitungen

2.1 Vorbereitung für das Character-Setup

Einstellungen für das Joint-Tool und Solver-Einstellungen für die inverse Kinematik.

2.2 IK Spline Option Window (Default Einstellungen)

Wird angewendet bei der Erstellung des Rückgrats (Spine)

2.3 Clusters für Spline-Vertices

  • Spline auswählen
  • F8 (Vertices-Mode)
  • Vertex selektieren
  • Create Deformers|Clusters

So verschiebt man das Cluster-Handle (Buchstabe C):

  • ClusterHandle anklicken
  • In den AttributEditor gehen
  • ClusterHandleShape wählen
  • Bei Origin die gewünschte Koordinate wählen
  • Bei selektiertem Feld: Ctrl gedrückt halten + Click-n-drag mit LMB.

2.4 Gruppierung, Parenting und Constraints

Unterschied zwischen Parenting und ParentConstraint
Sowohl bei Parenting als auch ParentConstraint folgt das Child bzw. der Slave dem Parent bzw. Master in Translation und Rotation, hat aber in seiner eigenen lokalen Umgebung die volle Bewegungsfreiheit. Bei Parenting besteht aber eine starre Hierarchie zwischen Parent und Child. Demgegenüber kann beim ParentConstraint die Master-Slave Beziehung aufgebrochen werden, dh. den Constraint-Weight von 1=Aktiv auf 0=NichtAktiv gesetzt werden. Das entsprechende Attribut heisst: xx_parentConstraint_n/xx 1W0.

2.5 Snapping

(x: Grid intersections / c: Curves / v : CV, vertex, or pivot)
Vertex oder Vertices selektieren, danach Taste „x“ oder „c“ oder „v“ gedrückt halten:

  • LMB (LeftMouseButton) entspricht MoveTool mit Vertex-Snapping
  • MMB (MiddleMouseButton)-Select über einem Vertex ergibt Snapping der zuvor selektierten Vertices auf diesem Vertex.

2.6 Menüpunkt in den Custom-Shelf kopieren

  • Ctrl + Shift danach MenuItem selektieren und Drag-n-Drop in CustomShelf.

2.7 Im JointTool Joints orthogonal (inLine) verlegen

Beim Setzen der Joints zusätzlich die Taste Shift gedrückt halten.

2.8 Mirroring Joints

Start-Joint wählen, danach das Menü Skeleton / Mirror Joint:

2.9 Control-Curve

Nach dem Erstellen und Positionieren der Control-Curves immer Freeze Transform and Delete History

2.10 Local Rotation

2.11 Interaktiv Werte ändern im Attribute Editor

In das Feld mit dem Attribut klicken, dass man interaktiv ändern möchte. Cursor im Feld belassen! Ctrl + LMB     (Click and drag)

2.12 Technische Begriffe und englische Ausdrücke

  • RMB / LMB = Right Mouse Button / Left Mouse Button
  • IK = Inverse Kinematics
  • FK = Forward Kinematics ikSCsolver
  • ikSCsolver = IK single chain Solver
  • ikRPSolver = IK rotate plane Solver
  • Cluster = Gruppe/Bündel/Haufen
  • Spline = Funktion, die stückweise aus Polynomen zusammengesetzt ist
  • NURBS =  Non-uniform rational B-Splines (Mathematisch definierte Fläche)
  • Pivot =  Drehpunkt/Mittelpunkt
  • Constraint = Zwang
  • Locking = Blockierung/Sperrung
  • Span = Spannweite/Bogen
  • Vertex = Scheitel/Spitze
  • Vertices = Eckpunkte
  • Inverse = Verkehrt/Umgekehrt
  • Tweak = hochfrisieren (Gemeint ist: Aufwertung eines Gegenstands/Fähigkeit)
  • Curl = Locke/ringeln/kringeln (zB. Finger)
  • Cup = Tasse/hohl machen (zB. Handfläche)
  • follow through = durchschwingen/verfolgen
  • anticipation = Vorwegnahme/Voraussicht
  • inbetween = dazwischen
  • force and drag = erzwingen/treiben und ziehen/schleppen/reissen
  • Palm = Handfläche
  • Wrist = Handgelenk
  • Thumb = Daumen
  • Indexfinger = Zeigefinger (index)
  • Middlefinger = Mittelfinger (middle)
  • Ringfinger = Ringfinger (ring)
  • Pinkyfinger = Kleiner Finger (pinky)
  • Arm = Arm
  • Clavicle = Schlüsselbein
  • Skull = Schädel
  • Neck = Hals
  • Back = Rücken
  • Chest = Brust
  • Abs = Unterleib (Abdomen)
  • Sway = wiegen/schwanken/schwingen
  • Hip = Hüfte
  • Pelvis = Becken
  • Knee = Knie
  • Ankle = Knöchel
  • Toe = Zehe
  • Joint = Gelenk (verbindet Bones!)
  • Balljoint = Kugelgelenk (zB. Schultergelenk: Bewegung in drei senkrecht zueinander stehenden Achsen = ikRPSolver)
  • Saddlejoint = Sattelgelenk (zB. Daumengelenk: Bewegung in zwei senkrecht zueinander stehenden Achsen = ikRPSolver)
  • Hingejoint = Scharniergelenk (zB. Ellenbogengelenk: Nur eine Achsen: ikSCsolver)
  • Bone = Knochen (wird durch Joints verbunden!)

3. Character-Animation Leg and Reverse Foot Control

3.1 Einleitung

leftFootControl rightFootControl:
Translation und Rotation Fussbewegung. Reverse Foot Control mithilfe des Attributs FootRoll ermöglicht Gehen auf Zehenspitzen bzw. auf Fersen.

leftKneeControl rightKneeControl:
Nur Translation! Knie ein- und ausdrehen.

globalControl:
Translation, Rotation und Skalierung der kompletten Figur. (inkl. Bones + Controls)

Der globalControl wird bei Kapitel 6 GlobalControl behandelt!

Die Foot ReverseLock Joint-Chain
Damit der Fuss beim Gehen richtig abrollen kann, wird eine sogenannte ReverseLock Joint-Chain erstellt.

Die Foot-ikHandels werden, wie im nächsten Abschnitt detailliert gezeigt, an die ReverseLock Joint-Chain parented. Die  ReverseLock Joint-Chain wiederum an den Foot-Control. Ohne diesen Mechanismus könnte man z.B. den Fuss im Knöchel nicht drehen. Kein Skin-Bind der Foot-Mesh an die ReverseLock Joint-Chain! Sonst funktioniert's nämlich nicht.

3.2 Joints, ikHandlers and CurveControls

Pro Bein 4x+3x Bones=7x Bones, 3x ikHandles und 2x ControlCurves gemäss Skizze kreieren:

Joints:

  • leftHip
  • leftKnee
  • leftAnkle
  • leftFoot
  • leftToe
  • leftRLBase positioniert bei Ferse
  • leftRLToe positioniert bei leftToe 
  • leftRLFoot positioniert bei leftFoot
  • leftRLAnkle positioniert bei leftAnkle

ikHandles:

  • ikHandle_leftLeg (leftHip-leftAnkle; ikRPsolver)
  • ikHandle_SC_leftLeg (leftAnkle-leftFoot; ikSCsolver)
  • ikHandle_SC_leftToe (leftFoot-leftToe; ikSCsolver)

ControlCurves:

  • leftKneeControl
  • leftFootControl

Hinweis: Die ReverseLock Joint- Chain liegt aus Darstellungsgründen etwas unterhalb des Fusses. Positionshinweise oben beachten!

3.3 Parenting

Die ReverseLock (RL) Joint-Chain ist Parent von den Foot-ikHandles!

3.4 Reverse Foot Control : Control Curve «leftFootControl»

3.5 Reverse Foot Control : Set driven key «footRoll»

3.6 Reverse Foot Control : Parenting

3.7 Leg : Control Curve «leftKneeControl» Pole-Vector

3.8 Hinweis auf Knee locking system

Der leftKneeControl soll dem Character-Foot automatisch folgen. Dazu werden einige Gruppierungen und Constraints nötig sein. Mehr dazu in Kapitel 7 Knee Locking System!

Weitere Arbeiten:

  • Bein duplizieren: Skeleton / Mirror Joint
  • Controls duplizieren und platzieren
  • Die in diesem Kapitel gemachten Schritte für das rechte Bein wiederholen!
  • Linkes Bein an Körper anschliessen: leftHip + Hip-Joint + p (Parent)
  • Rechtes Bein an Körper anschliessen: rightHip + Hip-Joint + p (Parent).

4. Character-Animation Body and Spine

4.1 Einleitung

  • HipControl: Rotation und Translation des gesamten Oberkörpers. (Alle Controls im Oberkörper, ohne den Armen) sind untergeordnet. Major-Control!
  • HipSwayControl: Nur Translation! Po-Hüftbewegung à la Shakira.
  • AbsControl: Nur Translation! Bauchbewegung (Hula-Hop-Ring)
  • ChestControl: Nur Translation! Brust rausstrecken oder Buckel machen. Kopf bleibt dabei an Ort
  • backControl: Rotation und Translation des Oberkörpers, Vorbeugen und Zurücklehnen.  (neckControl und Clavicle-Controls sind untergeordnet)
  • neckControl: Nur Rotation! Kopf drehen
  • rightClavicleCtrl + leftClavicleCtrl: Nur Translation! Schulter anheben, Achselzucken.

Hierarchie der Controls:

4.2 Joints, Clusters, ikHandlers and CurveControls

8x Bones, 2x ikHandles und 5x ControlCurves gemäss Skizze kreieren:

Joints:

  • Root
  • Hip
  • Back1 ... Back4
  • Neck
  • baseHead
  • Skull

ikHandles:

  • ikHandle (Neck) (Neck-baseHead; ikRPsolver)
  • ikHandle (Spine) (Hip-Back4; ikSplineSolver)

ControlCurves:

  • HipControl
  • HipSwayControl
  • AbsControl
  • ChestControl
  • BackControl

4.3 Spine Clusters

  • Clustern des ikHandlels-Splines, danach Cluster wie gezeigt umbenennen!
  • Die vier Clustermittelpunkte sollten in den jeweiligen Joint-Zentren liegen:
    clusterHip=Hip / clusterAbs=Back1 / clusterChest=Back3 / clusterNeck=Back4
  • Die vier ClusterHandle etwas verschieben (siehe 2.3)
  • Jeder der vier Cluster gruppieren (Cluster in Gruppe)
  • Parenting (Cluster unter Root-Joint):
    Alle 4 Cluster-Gruppen selektieren + Root (Root-Joint) + Parenting (P)

4.4 Body Controls

  • leftHip (Leg) + Hip (Body) + Parenting (P)   (Beine am Körper befestigen)
  • PointConstraint (pC):
    BackControl + clusterNeck + pC
    ChestControl + clusterChest + pC
    AbsControl + clusterAbs + pC
    HipSwayControl + clusterHip + pC
  • Parenting (MajorControl=HipControl):
    AbsControl + HipControl + p (Parent)
    HipSwayControl + HipControl + p (Parent)
    ChestControl + HipControl + p (Parent)
    BackControl + HipControl + p (Parent)
    (Alternativ ginge auch: AbsControl + HipSwayControl + ChestControl + BackControl + HipControl + p )
  • ParentConstraint (pC):
    HipControl + Root (Joint) + pC
  • ChestControl-Tweak
    Im Window/General Editors/Connection Editor folgende Verbindung herstellen:
    Left: Chest Control/Rotate/Rotate Y
    Right: ikHandle (Neck) / Twist

Aufräumarbeiten
Alle 4 Cluster in einem Display-Layer "dont_touch" sammeln!

4.5 Head Control

1x ControlCurve "NeckControl" gemäss Skizze kreieren:

  • PointConstraint (pC):
    NeckControl + ikHandle (Neck) + pC
  • OrientConstraint (oC):
    NeckControl + baseHead (Joint) + oC
  • Parenting:
    NeckControl + BackControl + p

5. Character-Animation Arm and Hand

5.1 Einleitung

Inverse Kinematics (IK)

  • leftWristControl:
    Nur Rotation!
    IK-FK-Umschaltung
    Div. Handstellungen
    DrivenKeys zB. Fist
  • leftArmControl:
    Nur Translation!
    Handziel bei IK
  • leftElbowControl:
    Elbogenrotation.

Forward Kinematics (FK)

  • leftWristControl:
    siehe IK!
  • leftElbowFK:
    Nur Rotation!
  • leftShoulderFK:
    Nur Rotation!

Warum bei Armen Forward Kinematics?

  • IK: Nach Dingen greifen. Wäre mit FK nur schwer zu realisieren! Man führt die Hand zum Ziel und der restliche Arm folgt ihr automatisch
  • FK: Natürliche Bewegungen ohne direktes Ziel. Die Bones werden ausschliesslich durch die Rotation der Gelenke bewegt.
    Bei den Beinen ist nicht unbedingt FK erforderlich. Es genügt dort in den meisten Fällen IK.

5.2 Joints, ikHandlers and CurveControls

4x Bones, 2x ikHandlers und 4x ControlCurves gemäss Skizze kreieren:
(Später kommen noch zwei weitere Controls leftShoulderFK und leftElbowFK dazu)

Joints:

  • leftClavicle
  • leftShoulder
  • leftElbow
  • leftForearm
  • leftWrist

ikHandles:

  • ikHandle_leftClavicle (leftClavicle-leftShoulder; ikRPsolver)
  • ikHandle_leftWrist (leftShoulder-leftForearm Achtung: Endeffektor verschieben; ikRPsolver)

ControlCurves: 

  • leftClavicleControl
  • leftElbowControl
  • leftWristControl
  • leftArmControl

Hinweis: Local Rotations überprüfen! (Siehe Kapitel 2.10)

5.3 Forearm-Twist

Der Unterarm des Menschen besteht aus zwei langen Knochen, der Elle (Ulna) und der Speiche (Radius). Für eine realistische Unterarmdrehung werden daher zwei Bones
(1: Elbow-Forearm, 2: Forearm – Wrist) eingezogen und der Effektor des oberen Bones (Elbow-Forearm) an das Handgelenk (Wrist) verschoben.

Vorgehen bei EndEffektor von Forearm zu Wrist verschieben:

  • Im Window/Hypergraph:Connections den effector_xx für den ikHandle_leftWrist wählen
  • MoveTool/Insert
  • Swap effector_xx zu Wrist

5.4 Create Fingers

Ausrichten der Joints:

  • joint –e –oj xyz –zso –ch

Finger-Attribute dem leftWristControl hinzufügen: (Modify/Add Attribute)

  • thumbCurl
  • thumbRotX / thumbRotZ
  • indexCurl
  • middleCurl
  • ringCurl
  • pinkyCurl / pinkyCup
  • fingerSpread

Finger Driving:

  • Animate / Set Driven Key / Set

Weitere Arbeiten:

  • Arm duplizieren: Skeleton / Mirror Joint
  • ArmBones an Körper anschliessen (Arm + Back4-Joint + p (Parent)
  • Controls duplizieren und platzieren.

5.5 Hand Controls and Forearm Rig

Clavicle-Control:

  • PointConstraint (pC):
    S(L)-Control + ikHandle_leftClavicle + pC
  • PointConstraint (pC):
    S(R)-Control + ikHandle_rightClavicle + pC
  • Grouping:
    S(L)-Control + S(R)-Control + Ctrl g (Groupname: clavicleGRP)
  • Parenting: clavicleGRP + BackControl + p

Elbow + Wrist-Control:

  • PointConstraint (pC):
    leftArmControl + ikHandle_leftWrist + pC
  • LeftElbowControl snap to leftElbow-Joint and move back in space
  • LeftWristControl snap to leftWrist-Joint
  • PolevectorConstraint (pvC):
    LeftElbowControl + ikHandle_leftWrist + pvC  (Constrain / Pole Vector).
  • OrientConstraint (oC):
    LeftWristControl + leftWrist-Joint + oC
  • PointConstraint (pC):
    leftWrist-Joint + LeftWristControl + pC
  • Expression Editor leftForearm-Joint:
    LeftForearm.rotateX=LeftWristControl.rotateX*0.3;

DirectConnect for ClavicleControl:

  • Modify/Add Attribute to LeftClavicleControl (S): Attributename=ClavTwist
  • ConnectionEditor: (Window / General Editors / Connection Editor)
    Left: LeftClavicleControl/ClavTwist
    Right: ikHandle_leftClavicle/Twist

Alle in diesem Kapitel gemachten Schritte für den rechten Arm wiederholen!

6. Character-Animation Global Control

  • Grouping:
    left/rightFootControl +
    left/rightKneeControl (PoleVectors) +
    HipControl +
    left/rightElbowControl (PoleVectors) +
    left/rightWristControl +
    left/rightArmControl + g (Group) (Groupname=controlCurvesGRP)
  • ParentConstraint (pC):
    globalControl + controlCurvesGRP + pC
  • ScaleConstraint sC:
    globalControl + controlCurvesGRP + sC
  • Grouping:
    Root-Joint + Ctrl g (Groupname=rootGRP)
  • ScaleConstraint (sC):
    globalControl + rootGRP + sC Grouping: Alle ikHandles (6 Stück!) + Ctrl g
    (Groupname=ikGRP)
  • ScaleConstraint (sC):
    globalControl + ikGRP + sC

7. Character-Animation Knee Locking System

Der leftKneeControl befindet sich in der controlCurvesGRP!

  • Grouping:
    leftKneeControl + Ctrl g (Groupname=leftKneeControlGRP)
  • Move Pivot of leftKneeControlGRP to the Back of the ReverseFoot (LeftRLBase)
  • PointConstraint (pC):
    LeftRLBase (ReverseFoot) + leftKneeControlGRP + pC
  • Set Driven Key: (KneeLocking ON/OFF-Switch) Modify/Add Attribute to leftKneeControlGRP: Name: KneeLock Type: Boolean Driver: leftKneeControl/KneeLock Driven: leftKneeControlGRP_pointConstraint/left RLBase W0: 1=on / 0=off

Alle in diesem Kapitel gemachten Schritte für das rechte Knie wiederholen!

8. FK-IK Switcher

Zwei Controls "leftShoulderFK" und " leftElbowFK" kreieren und an Joints constrainen:

  • leftElbowFK erstellen
  • leftShoulderFK erstellen
  • PointConstraint (pC):
    leftShoulder + leftShoulderFK + pC
  • OrientConstraint (oC):
    leftShoulderFK + leftShoulder + oC
  • PointConstraint (pC):
    leftElbow + leftElbowFK + pC
  • OrientConstraint (oC):
    leftElbowFK + leftElbow + oC
  • Set Driven Key: (IK-FK Blend Attribut)
    Add Attribut to leftWristControl
    Name: ik_fkBlend
    Type: Float 0..1
    Default: 0
    Driver: leftWristControl/ik_fkBlend 1/0
    Driven: ikHandle_leftWrist/ikBlend
    (Weitere Driven Keys mit Driver leftWristControl/ik_fkBlend)
    Driven: leftElbowFK/visibility: 1=off/0=on
    Driven: leftShoulderFK/visibility: 1=off/0=on
    Driven: leftElbowControl/visibility: 1=on/0=off
    Driven: leftArmControl/visibility: 1=on/0=off
  • Parenting:
    leftElbowFK + leftShoulderFK + p
  • Grouping: leftWristControl + Ctrl g (Groupname=leftWristControlGRP)
  • PivotPoint von leftWristControlGRP an leftWrist-Joint snapen
  • ParentConstraint (pC):
    leftElbowFK + leftWristControlGRP + pC

Alle in diesem Kapitel gemachten Schritte für den rechten Arm wiederholen!

  • Grouping:
    leftShoulderFK + rightShoulderFK + g (Groupname=extraFKCurveGRP)
  • ScaleConstraint (sC):
    globalControl + extraFKCurveGRP + sC

9. Character-Animation Tweaking Control's and adjusting channels

9.1 Cleaning Channels

  • PolevectorConstraint-Controls: R + L: Nur Translation X/Y/Z
  • FootControls: Translation X/Y/Z und Rotation X/Y/Z
  • HipSwayControl: Nur Translation X/Y/Z

9.2 Tweaks

  • Rotation des chestControls bewirkt Drehung im Neck!
    Tweak:
    ConnectionEditor: (Window / General Editors / Connection Editor)
    Left: backControl/RotateY
    Right: ikHandle1 (back4)/Twist
  • Rotation des backControls bewirkt Abschnüren der Halspartie!
    Tweak:
    ParentConstraint (pC):
    backControl + ikGRP + pC
  • Rotation des backControls im FK-Modus dreht Arme nicht mit!
    Tweak:
    Parenting:
    extraFKCurveGRP + backControl + p
  • Der vorangegangene Tweak bewirkt im IK-Mode unnatürliche Wrist-Rotationen! Tweak:
    Set Driven Key:
    Driver: leftWristControl/ik_fkBlend: 0=0, 1=1
    Driven: leftWristControlGRP_parentConstraint1/leftElbowFKW0
    (Auf rechter Seite wiederholen)
  • ChestControl:
    Lock RotateY + Lock TranslateY (Es verbleiben nur Transalation in X/Z)
  • leftElbowFK:
    Nur RotateY
  • Für eine übersichtlichere Darstellung Display-Layers zuweisen

10. Fluids

Autodesk Maya bietet ab Version 2015 Flüssigkeitssimulationen mit Bifröst an. Bifröst ist ein prozedureales Framework für Wassersimulationen und benutzt einen FLIP-Solver (Fluid Implicit Particle) Solver. Man stösst eine Flüssigkeit aus einem Emitter aus und lässt eine Gravität auf sie einwirken. Man kann sie auch mit Kollisionsobjekten interagieren lassen, welche den Fluss dirigieren oder Spritzer erzeugen. Auch ist denkbar, mittels Kräfteeinwirkung z.B. eine Fontänen zu erzeugen.

10.1 Bistfröst-Objekte

Eine Bifröst Simulation besteht aus drei Bistfröst-Objekten:

  • Bifrost Object: Enthält  einen «BifrostShape Node» welcher die von Bifröst generierten Daten repräsentiert. Das Objekt ist über die Bounding Box im Viewport selektierbar. Man kann das Aussehen im Viewport kontrollieren und dort direkt rendern. Ein Bewegen dieses Objekts  hat keinen Einfluss, weil alle Berechnungen im World Space durchgeführt werden.
  • BifrostLiquid Object: Enthält den «BifrostLiquidContainer Node». Dieser enthält die Global Controls der Simulation wie Voxel Resolution und Gravity Vector. Er ist im Viewport als kleines Icon sichtbar. Wie beim Bifrost Object hat ein Verschieben dieses Objekts keine Auswirkungen.
  • BifrostMesh Object: Repräsentiert das Polygon-Mesh zum rendern. Solange man diese Option im Bifrost-Objekt nicht aktiviert, gibt es kein Polygon-Meshobjekt. Einmal erzeugt kann es wie normale Polygonobjekte verschoben und bearbeitet werden.

Zusätzlich zu den Bifröst Objekten kann es verschiedene weitere Meshes geben, welche in die Simulation einbezogen werden können wie z.B. Emitters, Colliders usw. Fügt man eine solche Mesh zur Simulation hinzu, wird eine Bifrost Section zur Shape-Node hinzugefügt, wo man die entsprechen Attribute ändern kann um Effekte zu kontrollieren.

10.2 Cache-Typen

Die zwei Cache-Typen:

  • Den temporären Scratch Cache für schnellen Playback und Scrubbing in einer tiefen Auflösung. (High Master Voxel Size).
    Der Scratch-Cache wird ad-hoc erzeugt und wird bei Änderungen oder Rückkehr zum Startframe neu berechnet. Die Simulation wird temporär gespeichert und so viel wie möglich werden Frames im Arbeitsspeicher gehalten. Beim Schliessen der Szene wird der temoräre Speicher gelöscht. Siehe auch «Preview a Bifröst Simulation».
  • Im User Cache speichert man die definitive hochaufgelöste Simulation. Die Daten werden vom Disk gelesen und müssen nicht jedesmal neu berechnet werden. (Low Master Voxel Size) Der Speicherort befindet sich im Projekt-Unterordner cache/bifrost. Siehe auch «Work with Bifröst user caches».

10.3 Computation Server

Bifröst Computation Server → Obwohl die Bifröst Effekte direkt in Maya erstellt werden, wird die Simulation ausserhalb Maya auf einem Bifröst Computation Server berechnet. Maya ist damit von dieser Rechenbelastung befreit.

Der Workflow:

Im Viewport sollte als Renderer «Viewport 2.0» gewählt werden. Ausserdem muss in den Settings der Playbackspeed auf «Play every frame» gestellt sein.

  • Schritt 1: Die Szene muss richtig aufgesetzt werden, bevor der Simulationsprozess gestartet wird. Das heisst: Alle Objekte wie z.B. der Wasserausfluss sind mit Keyframes animiert worden. Auch der Masstab der Szene muss stimmen. Bifröst rechnet immer im Metermassstab! Z.B. ein Würfel mit 100 Units Höhe und Mayaeinstellung in Zentimeter wird Bifröst als 100 Meter hohes Objekt betrachten und die Simulation wird nicht wie gewünscht aussehen.
  • Schritt 2: Zuerst wird ein Emitter-Objekt kreiert, indem wir z.B. einen Polygonzylinder erstellen und ihn über einem Wasserauffangbecken (z.B. Polygonmodell eines Wasserglas etc.) so platzieren, dass er kein Objekt berührt. Mit selektiertem Emitter-Polygonobjekt wählen wir im Bifröstmenü «Create Liquid». Dabei werden alle benötigten Bifröst-Objekte erstellt wie «BifrostLiquid1», «Liquid1» und «BifrostLiquid1Mesh». Gleichzeitig hat die Shape-Node des Emitter-Polygonobjekts unter der Sektion Bifröst weitere Controls erhalten. Tatsächlich erhalten alle Objekte die als Emitter, Collider und Accelerator verwendet werden diese Bifröst-Sektion mit den zusätzlichen Controls.
    Es können übrigens mehrere Polygonmodelle als Emitter selektiert und somit in die Simulation einbezogen werden.
  • Schritt 3: Wenn wir im Outliner «Liquid1» selektieren und Playback drücken, sehen wir in der Timeline einen wachsenden gelben Balken, gefolgt von einem grünen, der anzeigt, wie weit die Simulation bereits fortgeschritten bzw. berechnet ist. Ausserdem sollte man nun auch die aus dem Emitterobjekt fallenden Wasserpartikel sehen. Allerdings durchdringen diese noch das Wassergefäss. Das ändern wir nun, indem wir das Wassergefäss in ein Kollisionsobjekt verwandeln. Dazu selektieren wir das «BifrostLiquid1-Objekt» und shift-selektieren anschliessend das Wassergefäss. Wir schliessen den Vorgang ab, indem wir im Bifröstmenü «Add Collider» wählen. Wenn wir den Playback wiederholen, wird das Wassergefäss die Wasserpartikel nun auffangen. Dieser Vorgang kann für das Hinzufügen von weitere Kollisionsobjekten wiederholt werden.
  • Schritt 4: Um die Simulation zu verfeinern, müssen wir die «Master Voxel Size» anpassen. Diesen Parameter findet man ganz oben im «BifrostLiquidContainer1» von  «BifrostLiquid1». Damit bestimmt man die Grösse der Voxels und zwar im Metermassstab! Liegen die Objekte einer Szene z.B. im Zentimeterbereich vor, setzen wir die Voxelgrösse auf 0.005. Das bedeutet, dass ein Voxel eine Grösse von 5 cm hat. Damit erhöht sich aber auch die Berechnungszeit der Simulation. Ebenfalls kann man die «Transport Time Scale» auf 0.75 reduzieren, um ein realistischeres Aussehen zu erhalten.
  • Schritt 5: Wenn die Simulation befriedigt, kann sie nun in einen Cache gespeichert werden «Bake out», um beim anschliessenden Rendern CPU-Ressourcen zu sparen. Dazu muss man mit selektiertem BiFrostLiquid1-Objekt im Bifröstmenu «Bifrost Compute And Cache Options» wählen, den Zielordner bestimmen und mit «Create» den Vorgang abschliessen. Danach wird im gewählten Ordner eine Filesequenz mit den Simulationsdaten erstellt. Nachdem der Cache erstellt wurde, soll in «Bifrost1» unter der «Caching Sektion» die Option «Enable Disk Cache» gewählt werden.
  • Schritt 6: Um der Simulation eine Mesh zuzuweisen, wähle man das «Bifrost1 Objekt» aus und aktiviere die  «Bifrost Meshing Option». Nun sollte man als Flüssigkeit eine Mesh sehen, die man in den Mesh-Settings noch anpassen kann. Danach muss das «BifrostLiquid1 Objekt» versteckt (hidden) werden. Die Mesh bleibt dabei sichtbar. Man sieht nun das «BifrostLiquid1Mesh Objekt» inkl. Texturmaterial. In «BifrostLiquidMaterial1 Tab» können die Materialeigenschaften angepasst werden. Wenn die Simulation langsam sein sollte, kann man versuchen, die «Foam Remap Controls» zu deaktivieren.

10.4 Emitter

Hinweis zu «Bifröst-Emitter»:
Anders als bei partikelbasierten Flüssigkeitssimulationen gibt es bei diesen Emittern keine Emissionsrate. Die Anzahl vom Emitter ausgestossenen Teilchen basieren auf der Geschwindigkeit eines Voxel-Feldes welches von verschiedenen Faktoren abhängt, wie Gravität, Druck, Temperatur, Beschleunigungskräfte und andere Flüssigkeiten.

10.5 Auflösung und Genauigkeit der Simulation

Wie man die Auflösung und Genauigkeit einer Bifröst-Simulation beeinflusst:

  • «Master Voxel Size» des «BifrostLiquidContainer-Nodes»: Globale Anpasung der Auflösung und Genauigkeit in «World Space Units». Der geeignete Wert hängt damit vom Massstab der Szene ab. Kleinere Werte habe eine bessere Auflösung und Genauigkeit zur Folge, beanspruchen aber mehr Arbeitsspeicher und Prozessorleistung. Faustregel: Hohe Werte beim Bearbeiten der Szene und tiefe für das finale Rendering. Für eine akurate Berechnung sollte die «Master Voxel Size» kleiner sein, als das kleinste in der Fluidszene relevante Objekt. Will man eine Flüssigkeit durch ein 0.2 Unit Loch fliessen lassen, muss eine «Master Voxel Size» von 0.1 oder kleiner gewählt werden.
  • Voxelization: Jeder Emitter, Collider, und Accelerator hat dafür eine «Conversion Attribute» Sektion. Um gute Resultate zu erhalten, sollte bei Flächen und dünne Objekten «Mode» auf «Shell» und Thickness, bzw. «Falloff Bandwidth» bei Acceleratoren, auf 1.0 oder mehr gesetzt werden. Um Simulationsfehlern bei Löchern in Colliders entgegenzuwirken soll dieser Wert sogar noch mehr erhöht werden. Im Gegensatz dazu sollte bei massiven Gegenständen «Mode« auf «Solid» und «Thickness» oder «Falloff Bandwidth» auf 0.0 belasssen werden oder sogar negative Werte aufweisen.
  • Collision und Acceleration Voxel Scale: Das «Voxel Scale» Attribut in der «Collision» und «Acceleration» Sektion des BifrostLiquidContainers bietet zusätzlichen Einfluss auf die «Voxelization» der Colliders und Accelerators. Sie wirken dabei als Vervielfacher der «Master Voxel Size». Werte grösser 1 erzeugen gröbere Voxels und somit ungenauere Kollisionen, reduzieren dabei aber die Rechenlast. Werte zwischen 0.0 und 1.0 produzieren feinere Voxels. Dieses Attribut kann bei der Erzeugung von engen Durchgängen und Fontänen hilfreich sein, wenn man die globale Auslösung bzw. «Master Voxel Size» unter keinen Umständen anrühren möchte.
  • Transport Steps: Bei Volumenverlust, ungewolltem Partikelverhalten oder Leck in einem Kollisionsobjekt kann man versuchen, das «Transport Step» Attribut bei «Transport» des «BifrostLiquidContainers» zu ändern. Eine Erhöhung der «Transport Step Adaptivity» bewirkt eine höhere Auflösung der Partikelgeschwindigkeit und somit eine genauere Simulation, hat aber auch eine erhöhte Belastung des Rechners zur Folge. Für Probleme bei sehr schnellen Bewegungen wird ebenfalls eine Erhöhung des «Max Transport Steps» empfohlen.
  • Particle Distribution: Diese Werte im «BifrostLiquidContainer» beeinflussen die Anzahl Partikel pro Voxel auf der Oberfläche und innerhalb der Flüssigkeit, so wie auch die Tiefe derselben. Generell gilt: Mehr Partikel haben eine höhere Detailierung zur Folge und benötigen mehr Rechenleistung. Typischerweise werden an der Oberfläche mehr Partikel benötigt als darunter.
  • Time Steps: Bei Problemen wie Volumenverlust oder schnell bewegenden Kollisionsobjekten kann man mit den Umgebungsvariablen IFROST_GRAPH_STEP_ADAPTIVITY, BIFROST_GRAPH_STEP_MAX, and BIFROST_GRAPH_STEP_MIN «Time-Stepping» aktivieren. Siehe auch «Bifröst Environment Variables».

11. 3D-PDFs erstellen

11.1 Dreidimensionale Objekte statisch als JPG anzeigen

Anaglyphen-Verfahren: Bildtrennung durch die Verwendung von Farbfiltern. (Dafür braucht es eine Bildbetrachtungs-SW und eine 3D-Brille: Links → Rotfilter / Rechts → Grünfilter)

11.2 Dreidimensionale Objekte dynamisch im PDF-Viewer anzeigen

Adobe-Acrobat besitzt ab Version 7 (2005) die Fähigkeit, basierend auf dem Universal 3D format (.u3d) 3D-Objektinformationen einzubetten. Man kann damit 3D-Inhalte anzeigen, die z.B. mit 3D-Modellierungsprogrammen erstellt wurden.

(Hinweis: Im PDF-Viewer muss man eventuell explizit 3D-Content zulassen. Als PDF im Webbrowser funktioniert es derzeit noch nicht.)

Die Arbeitsschritte zur Erstellung eines 3D-PDF's:

  • Erstellen eines Polygonmodels in einem 3D-Programm und Abspeichern als .obj-File.
  • Laden des .obj-Files in Photoshop.
  • In Photoshop 3D-Ebene exportieren als .u3d-File.
  • Laden des .u3d-Files in Acrobat X Pro und abspeichern als .pdf-File.