Ergebnis 1 bis 16 von 16

Thema: 2D Bone Animation?

Baum-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #2
    Also ich kenn mich jetzt nur mit Joints und Bones in 3D Software aus, aber das ließe sich sicher auch auf eine 2D Software übertragen.
    Cinema 4D benutzt ein gutes System das wie folgt arbeitet:

    Du hast dein Mesh, und du hast Joints - also Gelenke. Diese Joints werden in einer Hierachie angeordnet, z.B. Hüftgelenk -> Knie -> Fußgelenk. Man platziert also die Gelenke, die Fix im Abstand zu den vorherigen Gelenken stehen, und sich rotieren lassen. Die Bewegung des Hüftgelenks bewegt also auch das Kniegelenk und das Fußgelenk mit. Einzelne Drehung der unteren Gelenke ist aber natürlich auch möglich.

    Die einzelnen Joints werden nun optisch per Bones verbunden, auch wenn diese praktisch keinen Nutzen haben, außer dass man die Verbindungskette sieht. Denn die Zuordnung des Mesh geschieht zu den Joints. Die Vertices des Oberschenkels werden also dem Hüftgelenk zugeordnet, das Schienbein dem Kniegelenk etc. Eine Drehung des Knies bewirkt damit das Anwinkeln des Schienbeins, so wie es sich gehört. Und mit dem rechten Hüftgelenk dreht man das ganze rechte Bein. Es entspricht damit also einem echten Gelenk.
    Zuordnen tut man die Vertices in Cinema indem man die Intensität "aufmalt". Jedes Joint kann beliebig viele Punkte des Mesh beliebig stark betreffen. Die Intensität von 0 - 100 % malt man mit einem Pinsel auf. Dort wählt man die Größe und wie deckend und wie "Soft" der Pinsel sein soll, ähnlich also wie in Photoshop.
    Das ganze lässt sich natürlich auf 2D übertragen. Dort hast du dann eben dein Mesh und die Vertices und die Joints-Hierachie. Dann wählst du dort das entsprechende Joint aus, wählst das Wichten-Werkzeug und zeichnest die Intensität auf das Mesh. In 2D dürfte das sogar sehr gut gehen, bei 3D muss man hingegen viel drehen und testen und die Perspektive ändern.
    Grafisch kannst du die Wichtung beim Erstellen der Charaktere übrigens sehr hübsch darstellen, indem du stark gewichtete Punkte sehr hell darstellst und nicht gewichtete Punkte schwarz. Der Verlauf der punkte zeigt dir, wie stark gewichtet wurde.

    Was du also für dein System brauchst ist die Möglichkeit, Gelenke zu zeichnen und eine Möglichkeit, die Wichtung zu zeichen und das Mesh damit an die Joints zu binden. Das Animieren geschieht dann über das Drehen der Joints.

    Im letzten Schritt kannst du dich natürlich auch mit IK (Inverse Kinematik) auseinander setzen. Also statt die Joints manuell zu rotieren (FK - Forward Kinematik) kannst du ein Ziel für den Fuß festlegen und der Fuß versucht immer dieses Ziel zu erreichen. Die Beine bzw die die Gelenke verdrehen sich entsprechend, sodass es passt. Das dürfte mathematisch nicht ganz unproblematisch zu realisieren sein (steckt viel Geometrie und Winkelberechnungen drinn), aber erzeugt sehr realistische Bewegungen und vereinfacht das spätere Animieren sehr.


    Achso, und wie du die die Daten später speicherst kannst du dir ja frei wählen. Bei 2D fällt immerhin eine Koordinate und 2 Winkel weg. Jeder Joint braucht eine Position und einen Winkel und die Information, welche Punkte er wie stark beeinflusst. Die Wichtung kannst du in einer Linked List speichern, dort bekommt jeder Punkt des Mesh eine Nummerierung und dann speicherst du dir die Nummer und die Wichtung von 0 - 100 (%). So kannst du flexibel gewichtete Punkte in der Liste dynamisch hinzufügen.
    Die Joints kannst du natürlich auch in einer Linked-List speichern. Dort musst du berücksichtigen, dass jedes Joint mehr als ein Child-Joint haben kann - aber nur ein Parent. Du brauchst also für die Child-Verlinkung ebenfalls wieder eine Linked-List. Damit hat jedes Listenelement eine Liste inbegriffen, welche die Childs beinhaltet. Dadurch kannst du dann eine Hierachie für die Joints erzeugen. Es geht also darum, dynamisch Linked-Lists anzulegen und in einer Hierachie zu verwalten. Wie du die Daten dann letztendlich speicherst bleibt natürlich dir überlassen.

    Die Länge des "Bones" - also der Abstand der beiden Joints, kannst du - musst du aber nicht - mit speichern. Denn diese ergibt sich ja auch schon durch die beiden Positionen der Joints, wenn du diese miteinander vergleichst. Da brauchst du dann ein bissel Vektorrechnung, aber im 2D-Raum ist es noch einfacher als 3D.

    Geändert von Ynnus (05.03.2010 um 21:46 Uhr)

Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •