Teil 3: Skin-Modifier

Bevor wir mit dem praktischen Teil beginnen, möchte ich den Skin-Modifier zunächst etwas genauer betrachten. Ein Envelope besteht aus den vier folgenden Komponenten:

  1. “Outer Envelope” (die äußere, braune Hülle)
  2. “Inner Envelope” (die innere, rote Hülle)
  3. “Envelope Length Control” (gelb gekennzeichnet) und
  4. “Cross Section/Envelope Size Handles” (grün markiert).

Mittels dieser Bestandteile steuern wir das Skinning in der ersten Phase. In der darauf folgenden Phase, die mit dem “Physique-Vertex- Level” vergleichbar ist, kann über das intuitive “Painting Skin Weights” oder über die manuelle Vergabe von “Weights” für einzelne Vertices weiter Einfluss auf die Deformationen genommen werden.

Für besondere Problemzonen stellt Skin drei verschiedene “Angle Deformer” zur Verfügung:

  1. Joint: Gelenke
  2. Bulge: Muskelkontraktion
  3. Morph: z. B. Achselhöhlen

Sie funktionieren ähnlich einem Morph-Target, das durch bestimmte Gelenkwinkel (zum Beispiel Arm gebeugt) aktiviert wird, um definierte Verformungsergebnisse abzurufen.

Darüber hinaus ist der Skin-Modifier in Release 6 um zwei wichtige Funktionen, “Mirror Skin” und “Skin Utility System” (hierzu später mehr), erweitert worden, die diesen zu einer äußerst attraktiven Alternative und zu einem ebenbürtigen Konkurrenten zum Physique-Modifier erhoben haben. Hier sei kurz angemerkt, dass dieser Skinning-Workflow starke Parallelen zu den Arbeitsschritten und Tools in Maya aufweist (Angle Deformer werden dort zu “Lattice Deformer”, “Painting Weights” wird zu “Painting Membership” etc.) – das Prinzip ist eben häufig dasselbe.

Skin-Modifier definieren

Und jetzt zur Manufaktur – los geht es mit der Zuweisung des Skin-Modifier auf das Mesh. Als Ausgangssituation dient uns die Szene “skin_01_start.max”. Es ist jedoch wichtig, dass im Vorfeld die Skin Pose im Character Assembly definiert wurde! Ist dem nicht so, sollte dies zuerst nachgeholt werden. Danach selektieren wir das Mesh und wählen in der Modifier-Liste den Skin aus. Im Parameter-Rollout weisen wir über Add – das Select Bones-Dialogfenster wird geöffnet – alle Bones dem Mesh zu. Die zugewiesenen Bones erscheinen im davor leeren Feld. Da die Nubs Envelopes bilden würden, für die wir keine Verwendung haben, entfernen wir diese (Auswahl im Viewport oder Selektion im Modify-Panel) via Remove.

Im Skin-Modifier aktivieren wir den Subobject- Level Envelope, via Selektion eines solchen im Modifier-Panel oder durch die direkte Auswahl im Viewport können wir dessen Größe und Auswirkung auf das Mesh betrachten.

Der erste Arbeitsschritt besteht darin, die Größe der Envelopes anzupassen. Hierzu selektieren wir eine der Cross Sections und ändern deren Größe im Modify-Panel mit Hilfe von Radius in den Envelope Properties oder durch Verschieben der Kontrollpunkte im Viewport. Alternativ dazu können wir auch mittels der Envelope Length Control wirken. Genaue Werte sind hierbei unwichtig, es geht vielmehr darum, den Wirkungsbereich des jeweiligen Envelopes sinnvoll anzulegen, zum Beispiel den Envelope des rechten Beines nicht Einfluss auf den des linken nehmen zu lassen.

Obwohl wir bereits an dieser Stelle die angepassten Parameter leicht mittels der Symbole (Envelope Properties) Copy und Paste auf die linke Seite übertragen könnten, werden wir die linke Seite zunächst außer Acht lassen.

Sollte für bestimmte Bereiche, beispielsweise für die Wade, eine andere Form benötigt werden, so können wir durch das Einfügen zusätzlicher Cross Sections die Envelopes darauf anpassen. Wir selektieren den jeweiligen Envelope und fügen Cross Sections mittels Add ein, durch Remove können diese wieder entfernt werden.

Dasselbe Vorgehen, also die Anpassung der Envelopes, werden wir zuerst auf alle Arm- und Bein-Bones der rechten Seite und anschließend auf die der Wirbelsäule, des Beckens und des Schwanzes anwenden. Das Ergebnis ist einsehbar in Szene “skin_02_envelopes_left.max”.

1. Mirror Skin-Tool

Als Nächstes werden wir die Envelopes der rechten Seite auf die linke übertragen. Hierfür bedienen wir uns des in Release 6 eingeführten Mirror Skin-Tool, das die Funktionalität des Bio Skin- Scripts abgelöst hat. Die Anwendung ist einfach: Im Skin-Subobject-Level aktivieren wir den Mirror Mode, die Mirror Plane, die in Achse und Position verschiebbar ist, wird eingeblendet.

Die Tatsache, dass die Vertices des Mesh auf der rechten Seite grün und die auf der linken blau dargestellt werden, bedeutet, dass die Vertices die mit ihnen korrespondierenden Gegenstücke gefunden haben. Als Nächstes aktivieren wir Paste Green To Blue Bones, um die Settings der rechten Seite zu übertragen. Ein symmetrisch aufgebautes Modell stellt keine Herausforderung für dieses Tool dar, das neben Envelopes natürlich auch “Skin Weightings” spiegelt. Selbst nicht symmetrische (in Maßen) Objekte können über Mirror Threshold bearbeitet werden. Die angepassten Envelopes können im Advanced Parameters-Rollout mittels Save abgespeichert werden.

Siehe Szene “skin_03_envelopes_mirror.max”.

Nachdem die Envelopes nun auf beiden Seiten angepasst sind, haben trotzdem manche von ihnen zu starken Einfluss auf die benachbarten Bereiche. Wenn wir beispielsweise das rechte Knie von Nils anwinkeln, wird die zu große Auswirkung des “nils_thighRT”-Envelope sichtbar.

2. Paint Weights

Um dieser Verformung entgegenzuwirken, werden wir die durch die Envelopes vorgegebene Gewichtung der Vertices mittels Paint Weights korrigieren. Zunächst einmal stellen wir wieder die Ausgangsposition durch die Assume Skin Pose-Funktion im Character Assembly her. Danach öffnen wir den Painter Options-Dialog (die drei Punkte neben Paint Weights), geben in den Brush Properties für Min-/Max-Strength • 0/–2 ein und aktivieren Mirror, um beide Seiten gleichzeitig zu bearbeiten.

Jetzt aktivieren wir Paint Weights und radieren, da wir negative Werte verwenden, den Einfl uss von “nils_thighRT”-Envelope auf den Unterschenkel weg – dieses Vorgehen lässt sich einfach und intuitiv auf alle anderen Bereiche des Charakters anwenden. Da die Paint Weights- Funktion Normal Based ist, muss die Rückseite des Objekts ebenfalls bearbeitet werden.

Das Ergebnis der Paint Weights-Bemühungen könnte wie dargestellt aussehen.

Siehe Szene “skin_04_paintweights.max”.

3. Vertex Level

Der nächste Ansatz, die Verformungsergebnisse zu optimieren, nähert sich dem Problem auf dem Vertex Level. Wir erstellen eine Vertex-Auswahl und weisen dieser dann manuell und einzeln Gewichtungswerte zu. Unnötig zu erwähnen, dass dieses Vorgehen mit einem Mesh, das bereits im Basiszustand hoch aufgelöst ist, zu einem äußerst zeitraubenden Unterfangen ausufern kann. Ein LowRes-Kontrollobjekt verursacht im Skinning deutlich weniger Aufwand und lässt darüber hinaus mehr Möglichkeiten der Bearbeitung zu.

Die Ausgangssituation ist in Szene “skin_05_weighttable_a.max” zu sehen. Um die Navigation zu erleichtern, aktivieren wir im Modify-Panel Select • Vertices und unter Display die folgenden Einstellungen: Show Colored Vertices, Show Colored Faces, Show All Vertices, Show No Envelopes. Wir sehen jetzt nur noch die gemäß ihrer Gewichtung eingefärbten Vertices und ihre Auswirkung auf die Faces. Wir selektieren alle Vertices, die sich auf der Höhe des rechten Knöchels befinden, und bewegen den Time Slider auf Frame 20.

Als Nächstes öffnen wir die Skin Weight Table, stellen als Auswahl Selected Vertices ein und bewegen den Slider so lange nach rechts, bis wir die Spalten “nils_shinRT” und “nils_ footRT” sehen. Die Vertex ID ist der Name des Punktes, die Bezeichnung S, M, N, R und H stehen für:

  • S: Vertex ist selektiert
  • M: Gewichtung modifi ziert
  • N: Gewichtung normalisiert (wird von mehreren Bones beeinflusst)
  • R: Vertex ist “rigid” (wird nur von einem Bone beeinflusst)
  • H: Patch Handles sind “rigid” (wird nur von einem Bone beeinflusst)

Ein Doppelklick auf eines der Vertices selektiert und hebt diese im Viewport rosa hervor. Es empfiehlt sich jedoch, die zu bearbeitenden Vertices einzeln im Viewport zu selektieren, um dann die Gewichtungen Wert für Wert oder durch Rechts- und Linksbewegung des Cursors, ähnlich einem Slider, einzugeben.

Die Vertices 10, 25 und 306 müssen bezüglich ihrer Gewichtung angepasst werden. Das Ergebnis könnte wie in Szene “skin_06_weighttable_b.max” aussehen.

Vorgenommene Gewichtungsänderungen können mittels Bake Selected Verts, dem Pendant zu Character Studios “Lock Vertices”, gesperrt und damit für Paint Weights und Envelope-Operationen unmodifizierbar gemacht werden, bis der Zustand in der Skin Weight Table durch Entfernen des X in der M-Spalte (modifizierte Gewichtung) wieder aufgehoben wird.

4. Angle Deformer

Die letzte und eleganteste Methode, die Mesh-Verformung unseren Wünschen anzupassen, sind die Angle Deformer (Joint, Bulge und Morph) – Deformationswerkzeuge, die winkelbasiert Verformungsergebnisse abrufen.

Zur Unterscheidung der drei angebotenen Deformer ist Folgendes zu sagen:

  • Joint Angle Deformer: verformt Vertices des Parent- und Child-Bones mittels eines Lattice (wie FreeFormDeformation-Modifier).
  • Bulge Angle Deformer: verformt Vertices des Parent-Bones mittels eines Lattice (wie Free Form Deformation-Modifier).
  • Morph Angle Deformer: verformt Vertices des Parent- und Child-Bones mittels Snapshot oder zusätzlichem Modifier.

Da der Morph Angle Deformer universell einsetzbar ist, werden wir diesen einsetzen, um Verformungen bei einer extremen Armstellung entgegenzuwirken. Die Ausgangssituation ist einsehbar in Szene “skin_07_angledeformer_a.max”. Um die Szene übersichtlicher zu gestalten, habe ich im Character Assembly unter Display die Einstellung LowRes Objects (also nur das Mesh ist sichtbar) aktiviert. Im Skin-Subobject- Level selektieren wir “nils_ forearmRT” und wählen die Vertices aus, die sich im Bereich des rechten Handgelenks befinden.

Als Nächstes stellen wir im Gizmos-Rollout die Option Morph Angle Deformer ein und legen diesen mittels Add Gizmo in seiner Basishaltung an.

Nachdem die Basis definiert wurde, bewegen wir den Time Slider auf Frame 20 – Arm und Handgelenk nehmen eine extreme Pose ein – und betrachten uns die Verformungsprobleme im Bereich des Handgelenks.

Das Ziel des Morph Angle Deformer kann entweder durch die Bearbeitung eines erstellten Snapshots, der dann im Deformer Parameters- Rollout über Add From Nod dem Deformer zugewiesen wird, oder aber mittels eines Edit Mesh-Modifiers, der über dem Skin-Modifier angelegt und dessen Modifikation über Add From Stack übertragen wird. Wir werden uns der zweiten Variante bedienen. Im Modifier tack erstellen wir einen Edit Mesh-Modifier und korrigieren dann im Vertex-Level die Verformungen.

Wenn die Verformungen herausmodelliert sind, kehren wir zurück in den Skin-Subobject- Level und weisen dann im Deformer Parameters- Rollout über Add From tack dem Morph Angle Deformer die Änderungen zu. Als Nächstes löschen wir den Edit Mesh-Modifier, da ansonsten der Effekt des Deformers verdoppelt wird. Wenn wir jetzt den Time Slider zwischen Frame 0 und 20 hin- und herbewegen, ist das Verformungsproblem nicht mehr zu sehen.

Siehe Szene “skin_08_angledeformer_b.max”.

Denselben Vorgang wiederholen wir für den Schulterbereich. Im Skin-Subobject-Level selektieren wir “nils_upperarmRT” und wählen die Vertices im Schulterbereich aus. Dann stellen wir im Gizmos-Rollout erneut die Option MorphAngle Deformer ein und legen diesen mittels Add Gizmo in seiner Basishaltung an. Wichtig ist, dass wir uns in Frame 0 befinden! Danach bewegen wir den Time Slider auf Frame 20, erstellen im Modifier Stack einen Edit Mesh-Modifier und korrigieren im Vertex-Level die Verformungen der Schulter. Als Nächstes weisen wir, zurück im Skin-Subobject-Level, im Deformer Parameters-Rollout über Add From Stack die Änderungen dem Deformer zu und löschen den Edit Mesh-Modifier. Siehe Szene “skin_09_angledeformer_c.max”.

Skin Utility System

Abschließend möchte ich noch das neue “Skin Utility System” ansprechen, das für eine schnelle Übertragung von Skinning-Informationen, insbesondere “Vertex Weightings”, auf andere Komponenten entwickelt wurde. Ähnlich dem Mirror Mode muss das Objekt, das mit dem “Vertex Weight” versehen werden soll, nicht exakt gleich aufgebaut sein. Über einen Mirror Threshold können Abweichungen bis zu einem bestimmten Grad aufgefangen werden. Für den Spielebereich liegen Anwendungen wie abgewandelte Körperteile, wechselnde Kleidung oder Equipment (Waffen etc.) nahe. Aber auch in anderen Bereichen ist der Einsatz des Tools vorstellbar, wenn die Grundvoraussetzung eines modular aufgebauten LowRes Characters (steuert hoch aufgelöste Instanz) erfüllt wird. Im Folgenden möchte ich kurz beschreiben, wie der Umgang mit diesem Tool abläuft: Über die Extract Skin Data- Funktion werden die Vertex Weights in einem neuen Mesh gespeichert, das dann mittels der üblichen Transform-Operationen auf das Objekt positioniert wird, dem die Skinning-Informationen zugeführt werden sollen. Als Nächstes werden beide Objekte selektiert und über die Import Skin Data From Mesh-Funktion der Paste Skin Data-Dialog geöffnet. Dort müssen die Target-Bones den Source-Bones zugewiesen und über den Mirror Threshold anders positionierte oder zusätzliche Vertices aufgefangen werden.