PDA

View Full Version : [Frage] Charakteranimation


GePeTto
10-04-2004, 13:39
Hat jemand erfahrung mit charakteranimation?
Bis jetzt habe ich folgendes heraus gefunden.
Man baut eine figur in Milkshape oder einem beliebigen anderem programm. Diese kann man dann nach opengl laden und darstellen. das ist ja nicht so hart.
Weiters habe ich ein tutorial gefunden wo steht: Nach dem modellieren lade das netz nach charakterFX, baue ein skelett, animiere das ganze, speicher die skelettanimation als cfx und lade diese ebenfalls nach opengl, nur wie das laden einer solchen animation funktioniert kann ich mir nicht vorstellen.

LG gepetto

bimbo
10-04-2004, 16:53
ich würd eher keine skelett animationen verwenden, da das wahrscheinlich um einiges aufwendiger ist, und es nicht wirklich notwendig ist. falls du dich aber nicht davon abhalten lassen willst, empfehl ich dir www.gametutorials.com, dort gibts ein schönes tutorial zu quake3 models.

p.s: verwendet jemand das half-life mdl-format? würd das gern verwenden, hab aber bisher davor zurückgeschreckt wegen skelett-animation, und weil ich keinen loader gfunden hab.

GePeTto
10-04-2004, 18:36
Ich will es mal so ausdrücken es ist nicht mein größter wunsch eine skelett animation zu verwenden aber wie könnte es denn dann gehen. bin für jede simplere lösung offen

LG gepetto :)

P.S. der link ist super, danke

Fup
10-04-2004, 22:29
Hi Leute

Also ich möchte meine in 3dsmax gezeichneten Models auch mit Milkshape optimieren und in Bewegung bringen.

Wie das genau funktioniert, muss ich mir erst noch anschauen :confused:

Es stimmt doch, dass wir einen eigenen Model Loader schreiben müssen oder? Ebenso auch für die Animation?

ChrisChiu
10-04-2004, 23:20
Hi Leute

Also ich möchte meine in 3dsmax gezeichneten Models auch mit Milkshape optimieren und in Bewegung bringen.

Wie das genau funktioniert, muss ich mir erst noch anschauen :confused:

Es stimmt doch, dass wir einen eigenen Model Loader schreiben müssen oder? Ebenso auch für die Animation?

Nein, der Loader kann auch Fremdcode sein (aber angeben bei der Dokumentation welchen ihr verwendet habt).

Es dürfen nur nicht eventuelle Draw() oder Render() Funktionen dieser Loader verwendet werden. Das Rendern muß von euch selbst kommen.

Optimal ist (für Millkshape etwa), wenn man einen Loader hat, der alles in die MS3D_ Strukturen lädt (sh. auf der MS3D Homepage das MS3D SDK, da ist eine File Format Specification in C Syntax drin). Das Rendern (oder eventuelle Konvertieren in eigene Formate - die MS3D Datenstrukturen sind eventuell nicht optimal für das eigene Spiel) kann man dann ausgehend davon machen.

Ich halte Skeletal Animation nicht für schwieriger als das MD2 oder MD3 Format (die ja einfach Vertex-Animation haben), da der prinzipielle Unterschied nur ist, dass in MD2/MD3 einfach jeder Vertex eine Keyframe Liste hat, während bei Skeletal Animation Formaten nur die "Joints" (manchmal "Bones" genannt) Keyframes besitzen, und die Vertizes halt zu einem Joint gehören können und dessen Transformation mitmachen. Skeletal Animation ist bezüglich der Animation weniger speicherintensiv.

@GePeTto:
Es ist folgende Vorgehensweise möglich:

-) Man macht einen Model Loader, der .ms3d Files lädt, inklusive Joints und Keyframes

-) Die Datenstruktur, in die man diese Daten lädt hat ja normalerweise Keyframe-Listen (Positionskeyframe-Liste, Rotationskeyframe-Liste) per Joint. Jeweils nur eine. Z.B.:

struct Joint {
.... // andere members
int numKeyframes;
PosKeyframe* posKeyframes;
RotKeyframe* rotKeyframes;
};

Wenn man in einer Model-Datenstruktur mehrere Animationen haben will, kann man jetzt hergehen und einfach per Joint mehrere Positions- und Rotationskeyframes unterstützen. Also etwa PosKeyframe* posKeyframes[MAX_KEYFRAME_SETS]; oder so ähnlich (könnte man ja auch dynamisch machen).

Dann kann man bei folgender Vorgehensweise weitermachen:

-) man hat ein Basismodell ohne Animationskeyframes, aber schon mit dem Skelett. Ist das erste was man modelliert. Nennen wir's dude_base.ms3d.

-) man nimmt das Basismodell her, löscht die gesamte Geometrie im Milkshape, und läßt nur das Skelett übrig. Dieses Skelett können wir animieren, sagen wir mit einer Geh-Animation. Speichern wir's als dude_walk.ms3d.

-) weitere Animationen mit dem Skelett-only Model machen. Speichern als dude_hit.ms3d, dude_*.ms3d ...

-) jetzt könnte man eine Art Meta-Dateiformat (textfile) machen, das eben diese Teile miteinander assoziiert. Das Spiel selbst könnte dann etwa aus dude_base.ms3d die Geometrie sowie das Skelett nehmen, und aus den restlichen Dateien die zu den Joints zugehörigen Keyframes.

Das funktioniert, weil das Skelett (also die Jointliste) in derselben Reihenfolge gespeichert sind wie im Basismodell. Man braucht also nur mehr zu jedem Joint (index bleibt ja gleich) nur die keyframes des Animation-only .ms3d files zu laden.


Ich hoff das war jetzt nicht _zu_ kompliziert erklärt. Jedenfalls hört es sich komplizierter an als es ist... die einzige wirkliche Hürde ist wohl einfach nur das Keyframe-System (das die keyframe-tranformationen interpoliert, die Joints danach transformiert, und dann die Zuweisung dieser Transformation an alle Vertizes die an einem Joint dranhängen (jeder Vertex hat eine Joint-ID).