Wie kann ich vorgerenderte 2D-Sprites implementieren, die in jede Richtung weisen können?

28

Ich habe gegoogelt, wie Spiele wie Clash of Clans ihre Truppen rendern, und es scheint, dass sie 3D-Modelle vor der Laufzeit in 2D-Sprite-Sheets rendern und diese 2D-Bilder zur Laufzeit rendern. Truppen in Clash of Clans können sich jedoch jeder Richtung stellen.

Wenn ich in meinem ähnlichen Spiel ein Bild für jede Ausrichtung (0 bis 360 Grad) für jeden Truppentyp (es gibt 18 Typen) in jedem Bild in der Animation erstellen würde, müssten sie eine enorme Menge von Bildern erzeugen. Ich kann mir nicht vorstellen, dass dies das ist, was andere Entwickler tun. Wie kann ich das tatsächlich erreichen?

Kyle Lin
quelle
2
Die Technik, auf die Sie sich beziehen, heißt übrigens "Billboarding".
Weckar E.

Antworten:

45
  1. Normalerweise gibt es weniger als 360 Richtungen. Üblicher Fall ist 8 oder 16. Animationen sind auch ziemlich kurz.

  2. Automation ist dein Freund. Schreiben Sie ein Blender / 3DMax / etc-Skript, um ein Modell aus der Liste zu laden, und rendern Sie es in jedem erforderlichen Frame und in jeder Richtung zu einem Bild. Kennzeichnen Sie Bilder nach Inhalt und adressieren Sie sie aus dem Spiel.

  3. Packe alles in Textur-Atlanten (auch Sprite-Blätter genannt) für einen schnelleren Zugriff.

Am Ende stehen Ihnen mehrere Tausend Sprites zur Verfügung, die ordentlich in nur ein Dutzend Atlanten verpackt sind. Nicht so eine große Sache;)

Ich konnte kein Bild von CoC finden, aber hier ist Diablo II, das den gleichen Ansatz für Charakteranimationen verwendete. ZB Amazonas Nahkampfangriff:

Bildbeschreibung hier eingeben

Kromster sagt Unterstützung Monica
quelle
4
Das Verhältnis von Rendering-Leistung / Zeit zu Speicherplatz und Download-Zeit.
M. Mimpen
3
Was ist ein "Atlas"? Irgendein Link?
BЈовић
7
@ BЈовић Suche nach "Texturatlas". Es ist ein sehr verbreitetes Konzept.
Kromster sagt Unterstützung Monica
2
Es kann erwähnenswert sein, dass die Entwickler von Blizzard North bei Diskussionen über diese Technik zu dem Schluss kamen, dass es eine seltsame Maßnahme war, einen unangenehmen Moment in Bezug auf die PC-Grafikfähigkeiten zu bewältigen, und selbst dann war dies nicht der Fall am Ende ist es wert. Es gab ein Interview darüber und am Ende brauchte es so viel Zeit, um alles neu zu rendern, dass die allgemeine Schlussfolgerung lautete, dass es kein großartiger Ansatz war (und ihr nächstes Spiel definitiv 3D sein würde).
KRyan
1
@KRyan gute ergänzung! Ich würde vermuten, dass es an der großen Menge an NPCs und Ausrüstung in der D2 lag. Für CoC- und mobile Plattformen ist das eine andere Balance.
Kromster sagt Unterstützung Monica
8

Beachten Sie auch die niedrige Auflösung dieser Bilder. Es gibt noch ein paar Dinge, die Sie tun können, um Platz zu sparen, obwohl ich nicht weiß, welche davon von Clash of Clans verwendet werden:

  • Sie können die Position der Truppen so einstellen, dass sie in Standardrichtungen (N, E, S, W, NE, SE, SW, NW) ausgerichtet sind, und dann nur für Standardrichtungen optimieren.

  • Sie können einen kombinierten Ansatz ausführen, bei dem Sie nur einige Anweisungen vorab rendern. Während des Frames können Sie die Truppen rendern, die nicht mit einem vorhandenen Bild übereinstimmen, oder das nächstgelegene Bild verwenden, wenn Sie keine Zeit mehr haben.

  • Verwenden Sie nach Möglichkeit Links- / Rechtssymmetrien, um die Anzahl der gespeicherten Bilder zu halbieren.

  • Sie können bestimmte Animationen wie Gehen und Ausruhen priorisieren und mehr Richtungen und Frames für diese speichern. Deaktivieren Sie dann andere Animationen, z. B. das Schwingen eines Schwertes, in denen Sie weniger Richtungen und Frames speichern (ich empfehle, mehr Richtungen für das erste und letzte Frame des Swings beizubehalten).

  • Sie können die verbleibenden Richtungen fälschen, indem Sie das nächstgelegene Bild verwenden und es dann strecken.

Insgesamt könnte es sich um 18 Einheiten handeln, bis zu 8 Richtungen, möglicherweise 2 Sekunden Animationen mit 20 Bildern pro Sekunde, durchschnittlich 64 x 64 Pixel und etwa 2 Bytes pro Pixel. Das sind 18x2x20x64x64x2 = 50 MB. Sie können auch die Anzahl der Richtungen, die Auflösung und die Anzahl der Frames basierend auf den Funktionen des Geräts und der Anzahl der auf der Karte verwendeten Einheiten skalieren.

Peter
quelle
2
Sie können auch von Werbetafeln zu 3D-Modellen wechseln, wenn Sie in der Nähe eines bestimmten Objekts zoomen. Es ist also 3D in der Nähe und Sie können die schnellere 2D verwenden, wenn nur viel im Hintergrund herumläuft. Es kann jedoch schwierig sein, den Übergang reibungslos zu handhaben.
Tim B
@ TimB Das ist besonders gut, weil Sie am Ende hohe Auflösungen rendern und Bilder für niedrige Auflösungen verwenden.
Peter
2

Beachten Sie zusätzlich zur @Kromster-Antwort, dass Bilder häufig erheblich komprimiert werden. Bei großen "Atlas" -Bildern mit vielen sich wiederholenden Elementen (z. B. leerem Hintergrund) ist die Komprimierung erheblich. Die endgültige "Größe" der Bilder ist also nicht nur eine direkte Multiplikation der einzelnen Bildgröße.

afaulconbridge
quelle
5
Die Komprimierung funktioniert für GPUs anders als für JPEGs, insbesondere für mobile GPUs in den Geräten, für die Clash of Clans geschrieben wurde. en.wikipedia.org/wiki/S3_Texture_Compression Mit anderen Worten: Der leere Hintergrund ist für die Texturkomprimierung zu 100% irrelevant.
Peter
-2

Als klassisches Beispiel schlage ich vor, dass Sie das Original Doom herunterladen, bei dem 2D-Sprites in einer Pseudo-3D-Umgebung verwendet wurden. Die Sprites hatten 8 Blickrichtungen (relativ zum Standpunkt des Spielers) und nach dem Speicher ungefähr 8 verschiedene Größen, als sie näher kamen. Dies war sehr gut sichtbar, aber für das Gameplay akzeptabel genug. Bei Clash-Spielen oder anderen Spielen mit isometrischer Anzeige muss natürlich nicht auf die Entfernung geachtet werden.

Graham
quelle
Es gab keine unterschiedlichen Größen. Das Rendering hat nur naiven Nearest-Neighbour-Skalierung nach Bedarf.
R ..
@ R .. Danke für die Korrektur. Es ist ein paar Jahre her, seit ich es gespielt habe! :)
Graham
1
Entschuldigung, aber dies beantwortet die Frage "Wie kann ich implementieren .." überhaupt nicht.
Kromster sagt Unterstützung Monica
@Kromster Bei der Frage "Wie setze ich das um?" Beantworte ich die Frage nicht mit einem kurzen Überblick über ein klassisches Spiel, in dem es implementiert wurde (8 Winkel statt 360) leicht zu sehen, wenn Sie es spielen, da die OP anscheinend nicht in Clash sagen konnte? Und beachten Sie die Unterschiede zwischen diesem allgemeinen Fall und dem speziellen Fall einer isometrischen Ansicht? Ich gebe frei zu, dass es nicht annähernd so gut ist wie Ihre Antwort, aber es gibt einen Unterschied zwischen einer Antwort von geringerer Qualität und der Nichtbeantwortung der Frage.
Graham