Wie soll ich mit der Sprite-Erstellung für anpassbare 2D-Zeichen umgehen?

8

Ich möchte Avatar-Animationen (Sprites) für ein browserbasiertes MMORPG erstellen. Der Spieler kann den Charakter anpassen und der Inhalt ändert sich häufig (neue Waffen, Rüstungen usw.). Wie kann ich die Erstellung und Aktualisierung aller Sprite-Blätter strukturell verwalten?

Die Anzahl der verschiedenen Kombinationen ist groß genug, dass das einfache Generieren aller Permutationen nicht funktioniert.

Dies kann server- oder clientbasiert sein. Wenn es jedoch vollständig auf dem Client funktioniert, behalten Sie es bitte nur bei HTML5 / CSS / Canvas / WebGL.

Lauri Laakso
quelle
3
Komponieren von Spielern mit mehreren Sprites +
Farbtönung
Ein verwandter Artikel zum Generieren dieser Art von Sprites: gamasutra.com/blogs/DavidYork/20161130/286500/…
MichaelHouse

Antworten:

14

Um dies effektiv zu tun, ohne alle möglichen Optionen zu generieren, sollten Sie einen Layering-Ansatz verwenden ... zumindest theoretisch, selbst wenn Sie in der Praxis die geschichteten Texturen schließlich zu einem einzigen Sprite zusammenfassen, um die Anzahl der Aufrufe zu verringern , was ich denke, Sie sollten und werden später detailliert.

Der Layering-Ansatz beinhaltet ein Sprite-Set für alle Charaktere ohne Waffen oder Ausrüstung und individuelle Sprite-Sets für jede Waffe oder Ausrüstung, die so ausgerichtet sind, dass sie über den Sprites der Basischaraktere gerendert werden können, um den endgültigen, zusammengesetzten Charakter zu bilden.

Für einfache Sprites mit wenigen Betrachtungswinkeln (wie die Kampf-Sprites traditioneller Final Fantasy-Spiele) ist dies relativ einfach. Für komplexere Sprites (wie die Charaktere von Diablo II, die mehrere Facings und eine isometrische Perspektive hatten) sind die Sprites für Waffen und Rüstungen schwieriger zu konstruieren, da Sie "Lücken" im Sprite lassen müssen, wenn sie hinter dem erscheinen Charakter. Eine einfache Möglichkeit, dieses Problem zu beheben, besteht darin, die Geräte-Sprites weiter in eine Ebene "Vordergrund" und "Hintergrund" zu unterteilen. Ihr Prozess zum Rendern eines Sprites ist dann logisch:

  1. Rendern Sie die Hintergrundebenen der Ausrüstung (normalerweise nur Waffen).
  2. Rendern Sie das Sprite des Basiszeichens.
  3. Rendern Sie die Vordergrundschichten des Zahnrads (normalerweise hauptsächlich Rüstung).

Diese Methode ist nicht narrensicher (insbesondere, wenn Sie die Anzahl der unabhängig voneinander austauschbaren Ausrüstungsgegenstände erhöhen, die ausgerüstet werden können und sich auch auf einen gerenderten Charakter auswirken), funktioniert jedoch für einen Großteil der Ausrüstung, sobald Ihre Künstler den Dreh raus haben der Authoring-Technik.

Ein Sprite-Bearbeitungswerkzeug mit umschaltbaren Ebenen ist von entscheidender Bedeutung, da es schwierig ist, ein Schwert oder einen Stab zu animieren, der durch leere Luft geschwungen wird, ohne dass eine Referenzebene des Charakters es schwingt. Wenn Ihre Sprites tatsächlich in einem 3D-Tool erstellt wurden, kann es viel einfacher sein, diese Pipeline einzurichten.

Sie können diese Technik in Vanilleform wie oben beschrieben verwenden. Sie sollten sich jedoch bewusst sein, dass dies bedeutet, dass die Anzahl der Ziehungsaufrufe pro Bildschirmzeichen erheblich erhöht wird. Dies kann ein ernstes Problem in einem MMO sein, in dem mindestens einmal die Möglichkeit berücksichtigt werden muss, dass viele Zeichen auf einem Bildschirm angezeigt werden Zeit.

Das Backen des kombinierten Ebenen-Renderings in einem einzelnen Sprite-Blatt ist ein nützliches Werkzeug, um dieses Problem zu bekämpfen. Sie sollten über Code verfügen, der die obigen Rendering-Schritte für eine Textur ausführt, die Sie auf der Festplatte speichern oder im Arbeitsspeicher zwischenspeichern können. Auf diese Weise können Sie die erhöhten Renderkosten jedes Mal bezahlen, wenn ein Spieler seine Ausrüstung wechselt. Nach dem ersten Rendern wechseln Sie jedoch für alle nachfolgenden Frames zur Verwendung des gebackenen zusammengesetzten Texturblatts.

Stellen Sie für maximale Laufzeiteffizienz sicher, dass alle Sprite-Blätter für Charakter und Ausrüstung genau ausgerichtet sind, damit Sie nur das gesamte Blatt und nicht einzelne Frames rendern können . Sie können verschiedene Formen des Offline-Packens verwenden, um das Layout der Sprites auf dem Blatt zu maximieren, sowie die Texturkomprimierung, um Offline-Platz zu sparen.

Es ist auch möglich, diese Technik während der Inhaltserstellung Ihres Spiels zu nutzen: Charaktere mit fester Ausrüstung, wie z. B. NPCs, können vorgebacken werden, um Laufzeit zu sparen (insbesondere für Charaktere, die häufig auftreten).

Sie sollten auch sicherstellen, dass Ihr Spiel jedem Spieler den Basischaraktertyp und die Ausrüstung anderer Spieler in der Nähe meldet , damit Sie vorbeugend das Compositing auf dem Computer eines Kunden durchführen können, wenn diese Spieler in der Nähe irgendwann kommen in Sichtweite des lokalen Spielers.


quelle