Effiziente Skelettanimation

11

Ich möchte ein Skelettanimationsformat ( wie hier aufgefordert ) für ein RTS-Spiel übernehmen. Die individuelle Darstellung jedes Modells auf dem Bildschirm wird klein sein, aber es wird viele davon geben!

In Skelettanimationen, z. B. MD5-Dateien, kann jeder einzelne Scheitelpunkt an eine beliebige Anzahl von Gelenken angehängt werden.

Wie können Sie dies bei der Interpolation in GLSL effizient unterstützen? Oder machen Engines ihre Animation auf der CPU?

Oder setzen Motoren willkürliche Grenzwerte für die maximale Anzahl von Gelenken pro Scheitelpunkt und rufen für diejenigen Verbindungen, die nicht die maximale Anzahl verwenden, keine Multiplikationen auf?

Gibt es Spiele, die Skelettanimationen in einer RTS-ähnlichen Umgebung verwenden, was beweist, dass ich mir bei integrierten Grafikkarten keine Sorgen machen muss, wenn ich den Knochenweg gehe?

Wille
quelle
+1, das ist eine gute Frage. Ich habe mich immer gefragt, ob die Animation in Schattierungssprache oder auf der CPU erfolgen soll ...
James
RTS-Spiele mit der SAGE-Engine von EA (C & C 3 und höher, BFME-Serie) verwenden Skelettanimationen, aber dort sind die Eckpunkte nur an einen Knochen gebunden (zumindest in BFME)
Bart van Heukelom,

Antworten:

6

Die Begrenzung der Anzahl von Knocheneinflüssen ist üblich, ja. Sie können entweder unbenutzte Einflüsse mit einem Gewicht von 0 oder einen Loop / Early-Out-Mechanismus zum Überspringen verwenden.

Ob es für ein RTS funktioniert, ich habe keine Referenz für Sie, aber ich kann mir vorstellen, dass Sie LOD benötigen, wenn Sie mit einer großen Anzahl von Zeichen auf dem Bildschirm arbeiten und auch wenn diese Zeichen klein sind.

Das LODen von Skelettcharakteren ähnelt dem LODen von allem anderen, außer dass Sie wahrscheinlich die Knocheneinflüsse und das Skelett sowie das Netz LODEN möchten.

Beispielsweise kann bei einer geringen Detailgenauigkeit nur ein einziger Knochen mit dem höchsten Einfluss pro Scheitelpunkt verwendet werden (auch als "harte Haut" bezeichnet).

Sie würden wahrscheinlich auch die Anzahl der Knochen im Skelett für ein Modell mit niedriger LOD begrenzen.

Schließlich - überlegen Sie , ob Sie die Zeichen jemals in Nahaufnahme rendern müssen. Sie möchten wahrscheinlich nur die Zeichen für den nächstgelegenen Betrachtungsabstand modellieren, skinieren und animieren. Sicherlich möchten Sie nicht alle Laufzeitdaten mit einer Auflösung speichern, die weit höher ist als jemals zuvor. Möglicherweise benötigen Sie nicht mehr als ein sehr einfaches Skelett und einige Einflüsse pro Scheitelpunkt für Ihre Situation.

JasonD
quelle
Ich hatte gehofft, jemand könnte sagen "Sie wollen wirklich keine Knochen für Türme in einem rts, wenn Ihre Teile klein sind; betrachten Sie stattdessen MD3 mit der Funktion für verknüpfte Modelle" oder so etwas
Will
Nun, ich würde in solchen Situationen kein Skinning für diese Art von Netzen verwenden, aber "Bones" sind nur ein ausgefallener Name für hierarchische Transformationen. Nichts hindert Sie daran, nur Netze an ihnen anzubringen, anstatt Scheitelpunkte zu gewichten. (Mit anderen Worten, für einen Turm haben Sie möglicherweise nur zwei Knochen und zwei Maschen und überhaupt keine Haut / Gewichtung).
JasonD
2

Ich denke nicht, dass Skelettanimationen für ein RTS-Spiel gut sind. Skelettanimationen erfordern einen zusätzlichen Prozess für alle Charaktere, während Keyframe-Animationen mehr Speicher verbrauchen, aber Sie werden dasselbe für viele Charaktere verwenden. Auch ein RTS-Spiel erfordert wenig Animationen pro Charakter

James
quelle