Fachbeitrag «3D-Charactersetup»

Anleitung für den Charactersetup in der 3D-Animations-SW Maya

Inhaltsverzeichnis

1. Einführung

1.1 The language of movement
1.2 Walk Cycle
1.3 Gesichtsmuskeln

2. MAYA-Tipps und Tricks

2.1 Vorbereitung für das Character-Setup
2.2 IK Spline Option Window (Default Einstellungen)
2.3 Clusters für Spline-Vertices
2.4 Gruppierung, Parenting und Constraints
2.5 Snapping
2.6 Menüpunkt in den Custom-Shelf kopieren
2.7 Im JointTool Joints orthogonal (inLine) verlegen
2.8 Mirroring Joints
2.9 Control-Curve
2.10 Local Rotation
2.11 Interaktiv Werte ändern im Attribute Editor
2.12 Technische Begriffe und englische Ausdrücke

3. Leg and Reverse Foot Control

3.1 Einleitung
3.2 Joints, ikHandlers and CurveControls
3.3 Parenting
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

4. Body and Spine

4.1 Einleitung
4.2 Joints, Clusters, ikHandlers and CurveControls
4.3 Spine Clusters
4.4 Body Controls
4.5 Head Control

5. Arm and Hand

5.1 Einleitung
5.2 Joints, ikHandlers and CurveControls
5.3 Forearm-Twist
5.4 Create Fingers
5.5 Hand Controls and Forearm Rig

6. Global Control

7. Knee Locking System

8. FK-IK Switcher

9. Tweaking Control's and adjusting channels

9.1 Cleaning Channels
9.2 Tweaks

1. Einführung

1.1 The language of movement

1.2 Walk Cycle

1.3 Gesichtsmuskeln

2. MAYA-Tipps und Tricks

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. 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. 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. 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. 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. 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. 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