Animationen in Modellen

Grafik, Musik, Sound, Spieledesign, Spielmechanik, Story Writing und sonstiger kreativer Kram, der nichts mit Programmieren zu tun hat.
Antworten
Benutzeravatar
Thoran
Establishment
Beiträge: 224
Registriert: 15.05.2009, 12:51
Wohnort: Stuttgart
Kontaktdaten:

Animationen in Modellen

Beitrag von Thoran »

Hallo zusammen!

Bevor einer meckert, dass das hier ein Crossposting ist:
Ich poste diese Frage aus gutem Grund in mehreren Foren und zwar weil ich die Meinung verschiedener Leute zu dem Thema hören möchte und bitte deshalb die Admins den Thread nicht wegen Crossposting zu schließen.

Zum Thema:
Ich hab mich kürzlich mit Animationen in Modellen beschäftigt und festgestellt, dass es prinzipiell mehrere Möglichkeiten gibt, wie man seine Animationen in ein Modell einbetten kann. Ich gehe hier davon aus dass der Arbeitsablauf vorsieht, das alle Animationen in einem Modellierungsprogramm erstellt werden und dann exportiert, um dann über die Animationsframes abgespielt zu werden (also zum bsp. Laufen 1-30, Springen 31-61 etc). Ich habe nun in einem Modell festgestellt, dass der Erzeuger das ganze etwas anders gemacht hat. Zum Erklären möchte ich mal die Animation des "Schwert ziehens" nehmen. Mein intuitiver Ansatz ist das ich das ganze im Modeller auf Bones-Ebene animiere, Keyframes setze und abspeichere. Wenn die Animation benötigt wird sage ich dann für das Modell einfach, beispielsweise spiele Frame 61-90 ab und der gesamte Vorgang des "Schwert ziehen" wird abgespielt wie er im Modeller "vorgefertigt" wurde.

Sein Ansatz sah aber so aus, dass er seperat eine Animation für das Greifen mit der Hand hatte, eine seperate Animation für die Bewegegung des Arms und diese dann im eigentlichen Programm beim Abspielen abgestimmt hat.

Meine Frage an Euch ist nun, was ist Eurer Meinung nach der bessere Ansatz?

Thoran
Wer Rechtschreibfehler findet, darf diese gerne behalten.
Mein Entwicklertagebuch
Aktuelle Projekte: Universum: Domination (ehemalig AlphaOmega),Universum: Sternenjäger, PixelWars: Highscore-based Top-Down-Spaceshooter
Spieleengine Unreal 5
Benutzeravatar
Brainsmith
Establishment
Beiträge: 109
Registriert: 04.09.2009, 13:52
Echter Name: Fabbo

Re: Animationen in Modellen

Beitrag von Brainsmith »

Den Vorteil, den ich gerade bei der zweiten Methode sehe, ist, dass man so viele verschiedene "Einzelanimationen" kombinieren kann, womit man prinzipiell eine größere Menge von Animationen erzeugen kann. Man könnte sich das als Basis der Gesamtheit aller Animationen wählen.

Da ich mich mit der Implementierung von Animationen noch nicht beschäftigt habe, weiß ich allerdings nicht, wie gut man das umsetzen kann. Kann mir gut vorstellen, dass man, wenn man diese Technik für Arme, Beine, Kopf etc einzeln einsetzt, wesentlich mehr Prozessorkapazitäten verbraucht, als eine Keyframe-Animation.
Benutzeravatar
Schrompf
Moderator
Beiträge: 4854
Registriert: 25.02.2009, 23:44
Benutzertext: Lernt nur selten dazu
Echter Name: Thomas Ziegenhagen
Wohnort: Dresden
Kontaktdaten:

Re: Animationen in Modellen

Beitrag von Schrompf »

Ich glaube, Du bist da nur einer Namensverwirrung aufgesessen. Bone-Anims sehen wie folgt aus: eine Animation hat eine Dauer und ein Rudel Animationskanäle, wobei jeder Kanal die Keyframes für genau einen Bone liefert. Ein Kanal besteht dann entweder aus einem Array von Zeit-Wert-Paaren für die Transformation des Bones, oder aus mehreren Arrays, die jeweils separat die Zeit-Wert-Paare für Position, Rotation, Skalierung... des Zielbones angeben. Letztere Methode kostet mehr Rechenzeit zur Laufzeit, die Animation auszuwerten und anzuwenden, spart dafür aber Speicher.

Obige Namensgebung ist jetzt mehr oder minder meine private Namensgebung, die so aber auch z.B. in Assimp verwendet wird. DirectX .x-Files dagegen und auch ein paar andere mehr nutzen eine andere Namensgebung. Bei denen ist der Einzelkanal für einen Bone eine "Animation" und die Sammlung aller Kanäle für ein Skelett heißt dann "Animation Set". Das Prinzip ist also exakt dasselbe, aber wenn man Beispielsource oder Beschreibungen dazu findet, klingt das ganz schön verwirrend.

Man teilt Animationen aber üblicherweise schon nach Körperteilen auf. Wir haben bei Splitterwelten den Unterkörper getrennt animiert, den Oberkörper, für Waffen/Angriff/Irgendwas-Anims zusätzlich noch den Oberkörper in linke und rechte Hälfte aufgeteilt. Der Kopf ist ebenso separat animiert, um verschiedene Mimik-Layer draufzuzaubern.
Früher mal Dreamworlds. Früher mal Open Asset Import Library. Heutzutage nur noch so rumwursteln.
Benutzeravatar
Thoran
Establishment
Beiträge: 224
Registriert: 15.05.2009, 12:51
Wohnort: Stuttgart
Kontaktdaten:

Re: Animationen in Modellen

Beitrag von Thoran »

@Schrompf:
Bezog sich deine Antwort auf mich oder auf Brainsmith?

Thoran
Wer Rechtschreibfehler findet, darf diese gerne behalten.
Mein Entwicklertagebuch
Aktuelle Projekte: Universum: Domination (ehemalig AlphaOmega),Universum: Sternenjäger, PixelWars: Highscore-based Top-Down-Spaceshooter
Spieleengine Unreal 5
Benutzeravatar
Schrompf
Moderator
Beiträge: 4854
Registriert: 25.02.2009, 23:44
Benutzertext: Lernt nur selten dazu
Echter Name: Thomas Ziegenhagen
Wohnort: Dresden
Kontaktdaten:

Re: Animationen in Modellen

Beitrag von Schrompf »

Auf Dich.

Zusatztext, da ich ja auch auf Developia mitlese: Die Aufteilung der Anim über die Skelettteile hat *nichts* mit der Kombination mehrerer Animationen zu tun. Wenn ein Bone von mehr als einer Animation beeinflusst wird, muss man die Anim-Keys mathematisch mischen. Meist heißt das "gewichtet interpolieren", aber wir z.B. rechnen Anims beim Import relativ zur Bind Position und können dadurch nachher einfach akkumulieren und auch die Stärke skalieren.
Früher mal Dreamworlds. Früher mal Open Asset Import Library. Heutzutage nur noch so rumwursteln.
Benutzeravatar
Chromanoid
Moderator
Beiträge: 4256
Registriert: 16.10.2002, 19:39
Echter Name: Christian Kulenkampff
Wohnort: Lüneburg

Re: Animationen in Modellen

Beitrag von Chromanoid »

@Thoran: wenn ich das richtig verstehe, fragst du dich, ob es sinnvoller ist Bones körperzonenabhängig oder körperzonenunabhängig (also nur gesamtanimationen a'la gif animation) zu animieren.
Soweit ich das kennengelernt habe, ist best practice einfach immer nur den Teil zu animieren, der von einer Animation betroffen ist (um animationen mischen zu können) - sonst würde man einen großen Teil der Vorteile von skelettaler Animation verlieren. Dabei muss man sich eben gut überlegen, was eine einzelne Animation dann eigentlich ist.
Eine Winkanimation kann nur vom Arm, vom Oberkörper oder vom gesamten Körper ausgeführt werden. Je nach dem müsste man entsprechende Bones animieren. (winken mit Arm, winken mit drehung der schultern in richtung des winkziels, heftiges winken mit füßen in schrittstellung schulter in richtung winkziel gedreht dabei mit dem anderen arm wild wedelnd :D)

Es wird ja immer nur eine Veränderung gespeichert, nicht die absolute Position. Dadurch kann man beliebig viele Animationen übereinander legen. Das macht aber nur Sinn wenn sich die Animationen nicht gegenseitig unschön überlagern (z.B. eine Wink- und Schlaganimation gleichzeitig ausführen, sollte zu hässlichen Ergebnissen führen, noch drastischer -> eine sitzanimation und eine lauf animation). Je nach belieben kann man also Animationen mischen usw.

Allerdings mischt z.B. Second Life Animationen auf dieselben Knochen nicht (wahrscheinlich aus optischen und Performance Gründen) - es wird pro Knochen anhand von einer Priorität festgelegt welche Animation angezeigt wird, wenn derselbe Knochen von mehrere Animationen animiert werden soll - siehe http://wiki.secondlife.com/wiki/Animation_Priority. Second Life ist da ein interessantes Beispiel, weil es wahrscheinlich kaum ein anderes System mit mehr von Hobbyisten gebastelten Animationen gibt.

Evt. zusätzliche IK Animation o.Ä. solltest du bei der Wahl der zu animierenden Knochen und der Intensität ihrer Animation natürlich ebenfalls mit berücksichtigen.

PS: Es kommt natürlich immer alles sehr auf die Zielanwendung an. SL "mischt" Animationen mithilfe der Prioritäten, andere erlauben eine Interpolation usw. Wenn ich mir eine Implementation aussuchen könnte würde ich wahrscheinlich die SL Variante nehmen, da die eigentlich ziemlich gut funktioniert und die Ergebnisse relativ vorhersehbar sind- natürlich nur wenn man keine professionellen animierer an der Hand hat, die evt. solche interpolations features vermissen könnten.
Benutzeravatar
Thoran
Establishment
Beiträge: 224
Registriert: 15.05.2009, 12:51
Wohnort: Stuttgart
Kontaktdaten:

Re: Animationen in Modellen

Beitrag von Thoran »

Also so wie ich das sehe, lohnt es sich Animationen nach Körperteilen zu organisieren (wie es ja z.B. von Schrompf) angesprochen wurde. Eine Animation die einen kompletten Bewegungsablauf, wie z.B. Laufen beinhaltet bietet sich nur an, wenn ich vorher sicherstellen kann, das ich in meinem Spiel die Lauf-Animation nicht mit einer anderen Mischen muss.

@Schrompf:
Sorry wenn ich in der Namensgebung nicht eindeutig war. Mit Bones bezog ich mich eigentlich nur auf das Animieren eines Skeletons wie es in Blender existiert (dort auch Armature) genannt. Prinzipiell ist mir klar, das eine Animation durchaus verschieden Bones beinflußt, bzw. führe ich bisher meine Transformationen auf der Skeleton-Ebene aus und mache dann nen Keyframe für diese Transformation. Dadurch bekomme ich dann eine Animations sequenz auf dem Skeleton. Die eigentliche Verknüpfung mit der Geometrie erfolgt bei mir auch in Blender durch Weight-Painting womit ich den Einfluß eines Bones auf die Vertices definiere (0.0 - 1.0) . Die Dateifromatebene und wie das in der Modelldatei gehandhabt wird, lasse ich außen vor, da mir das glücklicherweise Ogre3D schon alles zur Verfügung stellt. Ist es dass, was du mir etwa verdeutlichen wolltest?
Chromanoid hat geschrieben: Eine Winkanimation kann nur vom Arm, vom Oberkörper oder vom gesamten Körper ausgeführt werden. Je nach dem müsste man entsprechende Bones animieren. (winken mit Arm, winken mit drehung der schultern in richtung des winkziels, heftiges winken mit füßen in schrittstellung schulter in richtung winkziel gedreht dabei mit dem anderen arm wild wedelnd :D)
An deinem Beispiel kann ich schön klarstellen um was es mir eigentlich bei meiner Frage ging. Also ausgehend von deinem Beispiel, würde ich

a) Die Hand-, Unterarm-, Oberarm- und Schulterbewegung als eine Animation in meine Modelldatei speichern und jedesmal abspielen wenn ich winken will?

oder

b) Die Hand animieren und in der Modelldatei speichern, den Unterarm, den Oberarm, die Schulter und dann in meine Spiel um das Winken zu realisieren alle 4 Animationen abspielen um das Winken zu erreichen.

Das ist jetzt vielleicht von der Ebene zu detailreich, aber man kann ja für Hand und Unterarm, eben auch Laufen und Schwert ziehen einsetzen und dann eben nach a) alles in einer Animation speichern oder nach b) in zwei Animationen, die ich zur Programmlaufzeit zusammenblende.

Thoran
Wer Rechtschreibfehler findet, darf diese gerne behalten.
Mein Entwicklertagebuch
Aktuelle Projekte: Universum: Domination (ehemalig AlphaOmega),Universum: Sternenjäger, PixelWars: Highscore-based Top-Down-Spaceshooter
Spieleengine Unreal 5
Benutzeravatar
Chromanoid
Moderator
Beiträge: 4256
Registriert: 16.10.2002, 19:39
Echter Name: Christian Kulenkampff
Wohnort: Lüneburg

Re: Animationen in Modellen

Beitrag von Chromanoid »

ich würde a) nehmen. Lieber eine vernünftige Gesamtkomposition als so modulare Sachen die nicht so hübsch aussehen. Ich würde außerdem nichts in die Modell-Datei speichern, sondern die Animationen getrennt ablegen. Im Modell sind da nur die Gewichtungen...
b) ist unnötiger Overhead, der schwer zu warten, nervig zu editieren und auch sonst wenig Vorteile bringt... So sehe ich das jedenfalls...
Antworten