Seit mehreren Jahrzehnten gilt Okino als Pionier im 3D-Bereich und betreibt aktive Forschung und Entwicklung im Bereich der professionellen Skeleton- und Skinning-Conversions zwischen den beliebtesten 3D-Charakteranimations-Softwarepaketen und Dateiformaten wie z.B. 3ds Max, Cinema 4D, LightWave, Maya, Softimage, Collada, DirectX, FBX und U3D. In dem folgenden Beitrag möchten wir ihnen einen Überblick über die Konzepte hinter Skeleton, Skinning bieten und ihnen erklären warum Conversions von Skinning-Daten zwischen diesen oben genannten Softwarepaketen im Allgemeinen mit potenziellen Problemen schon sehr fortgeschritten ist.
Basierend auf Okinos direkter Kundenerfahrung, der langen und zielgerichteten Entwicklung und dem Feedback, was den Animationsfirmen gegeben wurde, um Fehler und Probleme in einem Mesh-Skinncode zu korrigieren, kann Okino zurecht behaupten, dass Sie aktuell die besten, raffiniertesten und technisch fortschrittlichsten Skinning Conversion-Systeme auf den Markt anbieten. Dies gilt insbesondere, wenn Sie Skeletons und geskinnte Meshes zwischen 3ds Max (Physique oder SkinMod), Cinema 4D, LightWave, Softimage und Maya konvertieren müssen. Diese fünf Programme sind aufgrund von Bone-Re-Alignment-Unterschieden, Problemen mit Biped Off-Axis-Skalierung und „fehlenden“ Bindungspositionen von Maya nicht besonders kompatibel. Unser Skinning-System ist auch dafür bekannt, dass es in der Lage ist, falsch konvertierte Skelette und Skinned Mesh-Conversions, die aus anderen freien und kostenpflichtigen Programmen erstellt wurden, zu reparieren: Alles, was Sie tun müssen, ist, in das Okino.bdf-Dateiformat von 3ds Max oder Maya zu exportieren und die Datei anschließend erneut zu importieren – das Okino „Arctic“-Toolkit kompensiert inhärente Probleme im Conversion Prozess.
Da das Konzept des Mesh Skinnings ziemlich einfach ist, glaubte Okino, dass die Conversions von Skeleton- und Skinning-Daten eine einfach zu entwickelnde Angelegenheit sein würde, aber das war nicht der Fall. Alle möglichen Probleme können bei der Konvertierung solcher Daten auftreten (die anderen Konverter nicht zu behandeln schien), wie zum Beispiel:
Für DirectX hat Okino seit 1997 die von der Industrie akzeptierte .X-Standard-Export Implementierung. Das .X-Dateiformat änderte sich erst mit DirectX 8.1, das die Unterstützung für die Echtzeit-Meshverformung durch Smooth-Skinning-Techniken sowie Vertex-Duplizierungslisten hinzufügte. Okino hat sowohl seinen .X-Importeur und -Exporteur erweitert, um Mesh-Skinning und Vertex-Duplizierungslisten zu verarbeiten, als auch die neue Datenrepräsentation „Matrix-Animation“ zu importieren. Wie wir in der Vergangenheit gelernt haben, verursachen die einfachsten Dateiformate die größten Schwierigkeiten bei der Entwicklung und das ist direkt auf die .X-Dateikonverter anwendbar, um den sorglosen Export von geskinnten Meshes zu ermöglichen, wurde die Möglichkeit hinzugefügt, die Mesh-Daten nach der Ausgabe des Skeletons auszugeben (für Fälle, in denen sich ein Mesh innerhalb einer Skeletonhierarchie befinden könnte) und automatisch zusätzliche Dummy-Nodes zu erzeugen, wenn sich die Scheitelgewichte nicht auf einem Mesh auf 1,0 summieren (DirectX gefällt dieser Fall nicht).
Was sind Skeletons?
Skeletons in einer 3D-Charakteranimation haben eine direkte Beziehung zu einem menschlichen Skelett. Sie bestehen aus gelenkingen Knochen und Gelenken und können als Kontrollmechanismus verwendet werden, um angehängte Meshdaten durch „Skinning“ zu verformen. Das Skelett besteht eigentlich nur aus „Null-Nodes“ im 3D-Raum (oder „Dummynodes“ oder „Gruppierungsnodes“, wie sie auch oft genannt werden). Das Parenting der Null-Nodes zusammen erzeugt eine explizite Hierarchie und die Transformationen auf den Null-Nodes definieren die Drehung und den Versatz jedes Null-Nodes von seinem übergeordneten Null-Node. Die Position jedes Null-Nodes stimmt mit einem „Gelenk“ überein und der Abstand zwischen zwei untergeordneten Null-Nodes definiert die Länge des Bones.
Einige 3D-Programme sind „gelenk-“ und andere „bonesbasiert“. Maya und Okino`s PolyTrans sind „gelenkbasiert“, was bedeutet, dass der Bone implizit zwischen zwei Gelenknodes (zwei Null-Nodes) visualisiert wird. Sie benötigen immer mindestens zwei Gelenke, um ein Bone zu definieren. Andere Programme, wie 3ds Max und LightWave, sind „bonesbasiert“, d.h. ein Bone wird anhand einer Ausgangsposition, Richtung und Bone-Länge visualisiert (ein Kindergelenknode ist in diesen Programmen nicht notwendig, damit ein Bone sichtbar wird).
Innerhalb der eigenständigen Software von Okino (PolyTrans und NuGraf) werden die Skelette als eine Kugel visualisiert, die auf jedem Gelenk zentriert ist, wobei ein trapezförmiger Bone die Kugeln verbindet.
Skinning: Mesh Deformation durch glatte/starre Bindung von Bones und Skeletons.
„Skinning“ ist eine beliebte Methode zur Echtzeitverformung von Polygonmeshes mittels zugehöriger Bones/Gelenke eines gegliederten Skeletts. „Skinning“ ist der Prozess der Bindung eines Skeletts an ein einzelnes Meshobjekt und Skinning-Deformation ist der Prozess der Deformation des Meshes, wenn das Skelett animiert oder bewegt wird. Wenn das Skelett von Bones bewegt/animiert wird, bewirkt eine Matrixzuordnung mit den Eckpunkten des Meshes, dass sie sich gewichtet verformen. Skinning ist eine beliebte Methode, um Verformungen von Charakteren und Objekten in vielen 3D-Spielen durchzuführen.
Okinos PolyTrans und NuGraf Software haben eine schöne Implementierung der Meshverformung über gewichtete Verbindungen oder mit anderen Worten „Smooth Skinning“. Es wurde als eine Pipeline zum Importieren, Speichern, Abspielen, Abfragen, Optimieren und Re-Exportieren von geskinnten Daten zwischen den wichtigsten Dateiformaten der Charakteranimation und Animationspaketen erstellt.
Grundlegende Konzepte des Skinning.
Skinning funktioniert nach dem Prinzip, ein oder mehrere „deformierte“ Gizmos zu bewegen, die wiederum an bestimmten Eckpunkten eines Meshobjekts gewichtet zerren, um es lokal zu verformen. Es ist üblich, dass einem einzelnen Bone mehrere Deformerobjekte zugeordnet sind, die jeweils einen Anteil an der gesamten deformierenden „Festigkeit“ haben, aber alle zusammen eine Festigkeit von 1,0 ergeben.
Das traditionelle Charakteranimationssystem verwendet ein einzelnes Hauptgeflechtobjekt (d.h. einen ganzen menschlichen Körper, der aus einem Geflechtobjekt besteht) und ein dazugehöriges Skelett. Das Skelett ist einfach als eine Hierarchie von Null-Nodes definiert. In einigen Animationssystemen werden die Null-Nodes des Skeletts als Bones (3ds Max, Cinema 4D, LightWave) visualisiert, die eine Quellposition und -richtung aufweisen, während sie in anderen Animationssystemen als verbundene Gelenke + Knochen (Maya, Okino) visualisiert werden, die einfache Kugeln sind, die ein Skelettbonezentrum mit dem nächsten Skelettbonezentrum verbinden. Das Skelett wirkt als Deformer für das Meshobjekt, das die Deform ist.
Die Skinning-Erstellung in einem Authoring-Paket erfolgt durch Auswahl eines Bones / einer Verbindung und Zuordnung als Deformer zu einem oder mehreren Eckpunkten eines Mesh-Objekts. Dieser Node-/Bonezuordnung ist ein Gewichtswert zugeordnet. Ein Wert von 0,0 bedeutet, dass kein Tugging durchgeführt wird, während ein Wert von 1,0 den Bone ein vollständiges Tugging am Scheitelpunkt ermöglicht. In vielen Fällen werden mehrere Bones einem einzelnen Node zugeordnet sein (so dass mehrere Teile des Skeletts lokalisierte Bereiche des Meshes manipulieren), wobei in diesem Fall alle Gewichte, die einem einzelnen Bone zugeordnet sind, „normalisiert“ sein und sich zu 1,0 addieren müssen. Außerdem werden als integraler Schritt, wenn das Skelett zum ersten Mal dem Meshobjekt (gebunden) wird, eine Reihe von „Bind Pose“-Matrixschnappschüssen aufgenommen, die definieren, wo sich das Meshobjekt und wo sich die Skelettverbindungen zum Zeipunkt der Bindung im World Space befanden. Diese „Bindungsposition“-Matrizen stellen eine Art statisches, festes Koordinatensystem dar, mit dem der Skinning-Wiedergabealgorithmus erkennen kann, ob ein Skelett animiert/transformiert wurde und so die unterschiedlich berechneten Änderungen in den Skelettpositionen nutzen kann, um die Bones des gebundenen Meshobjekts, die die reinste Definition von „Skinning“ ist, gleichermaßen zu transformieren.
Wenn es einen Bone pro Scheitelpunkt gibt und das Gewicht 1,0 ist, wird dies häufig als „rigid“ Skinning bezeichnet, wenn es jedoch mehrere Bones pro Scheitelpunkt gibt und das Gewicht nicht gleich 1 ist, spricht man von „Smooth“ Skinning.
Skinning ist der Prozess der Bindung einer Skeletthierarchie an ein einzelnes Meshobjekt. Dies geschieht durch die Zuordnung eines oder mehrerer beeinflussender Gelenke (z.B. Bones) zu jedem Node des Meshes, jeweils mit einem zugehörigen Gewichtungswert. Der Gewichtswert definiert, wie sehr ein bestimmter Bone den Scheitelpunkt im Verformungsprozess beeinflusst. Hinweis: Im Allgemeinen kann ein Mesh von jedem anderen Objekt in der Szene als Defomer beeinflusst werden und nicht nur von Null-Nodes, die als Skelettverbindungen markiert sind. Im Grunde genommen kann jede Instanz, jede Null-Nodeinstanz oder jede Instanz, die als Verbindung markiert ist, verwendet werden, um ein Mesh-Objekt zu defomieren (nur die Transformationsmatrix des Null-Nodes wird für den Deformationsprozess benötigt).
Wenn das Mesh zunächst an das Skelett gebunden wird, wird eine „Bind Pose“ WorldSpace-Snapshot von allen Transformationsmatrizen des Mesh und der Skelettnodes erstellt. Diese Bindungspositionsmatrizen ermöglichen es, jede Nodeposition in den lokalen Koordinatenraum des zugehörigen beinflussenden Bones zu transformieren und zwar zu dem Zeitpunkt, zu dem sich das Mesh und das Skelett in ihrer ursprünglichen unverformten Position befanden (die „Bindungsposition“, „Ruheposition“ oder „Referenzposition“). Während der Echtzeitwiedergabe führt jede Bewegung des Skeletts weg von seiner „Bindungsposition“ zu einer entsprechenden Verformung des Meshes.
Die Bindungsposition.
Wenn ein Skelett und ein Mesh importiert und mit Skinninggewichten zusammengebunden wurden, dann wurden höchstwahrscheinlich auch die Bindungspositionsmatrizen definiert und eingestellt. Diese Matrizen definieren die World Space Position des Meshobjekts und der damit verbundenen Skelettbones/Gelenke zum Zeitpunkt der Bindung. Normalerweise sehen Sie in der PolyTrans/NuGraf-Benutzeroberfläche das Mesh, das sich unter dem Einfluss der aktuellen Skelettposition verformt (es sei denn, Skinning ist global deaktiviert). Wenn Sie das Skelett und das Mesh zum Zeitpunkt der ersten Bindung wieder in ihre Posen zurückbringen möchten, ohne dass Verformungen auftreten, dann müssen Sie „Go to Bind Pose“ auf der Mesh-Instanz und jeder Bone-/Gelenkinstanz verwenden.
Die Erklärung zur „Bindungsposition“.
Die „Bindungsposition“ ist oft der verwirrendste Aspekt des Lernes, die Skinning-API zu programmieren, aber das absolut wichtigste zu verstehende Konzept. Die „Bindungsposition“ ist die Position des Meshobjekts, des Skeletts und ihrer relativen Versätze in dem Moment, in dem das Skelett an das Meshobjekt gebunden ist und bevor Verformungen auftreten. Diese Pose sieht oft folgendermaßen aus:
In diesem Moment, in dem die Skelettknochen an das Mesh gebunden werden (über die Bones-Vertex-Zuweisungen mit entsprechenden Gewichtswerten), wird für jeden Knochen/Gelenk und das Mesh selbst (nicht zu verwechseln mit der lokalen Transformationsmatrix) eine Snapshot-Matrix mit der Bezeichnung „(WorldSpace) Bing Pose Matrix“ erstellt. Diese sind sehr wichtige Matrizen für das Skinning. Die Bindungsposition-Matrizen werden in den Instanzdefinitionen gespeichert, die das Mesh-Objekt und die Skelett-/Knochen/Gelenke definieren (Knochen/Gelenke im NuGraf Toolkit sind nur Null-Nodes oder leere Instanzen, wie sie oft genannt werden). Die Bind Pose Matrizen definieren die ursprüngliche Worldspace-Position des Meshes und der Knochen/Gelenke zum Zeitpunkt der Bindung.
Wie werden Bindungsposition-Matrizen während der Verformung des Skinnings verwendet? Dies ist der Kernpunkt, den es zu verstehen gilt: Die Matrizen ermöglichen es, einen rohen Scheitelpunkt des Meshes (in lokalen Koordinaten) in den World Space und anschließend in den lokalen Koordinatenraum jedes Bones zu transformieren, wonach die Animation jedes Bones auf den betreffenden Scheitelpunkt angewendet werden kann (unter dem Einfluss des Gewichtungswertes). Die Bindungsposition des Meshes nimmt den Scheitelpunkt von lokalem Raum zum World Space und anschließend nimmt die inverse Bindungsposition jedes Bones den Scheitelpunkt des Meshes vom World Space zum lokalen Raum dieses Bones. Im lokalen Raum des Bones angekommen, wird die aktuelle animierte Transformationsmatrix des Bones verwendet, um die Position des Scheitels zu transformieren (verformen). Nachdem alle Boneseinflüsse berücksichtigt wurden, landet der Node im World Space an seiner endgültigen verformten Stelle. Mit anderen Worten, diese Bindungspositionsmatrizen beziehen die Position eines Nodes in seinem lokalen Meshraum auf die gleiche Position des Nodes in Bezug auf die lokalen Koordinatensysteme der einzelnen Bones. Sobald diese Beziehung bekannt ist, ist es einfach, die Meshnodes durch Animation der Knochen zu verformen.
Alles, was Sie beachten müssen, ist, dass die Bind Pose Matrix des Meshes ihre Nodes in den World Space bringt, an den Ort zum Zeitpunkt der Bindung und die Bind Pose Matrix jedes Bones bringt die Nodes vom lokalen Raum in den World Space zum Zeitpunkt der Bindung.
Vielen Dank für ihren Besuch.