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?
Antworten:
Normalerweise gibt es weniger als 360 Richtungen. Üblicher Fall ist 8 oder 16. Animationen sind auch ziemlich kurz.
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.
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:
quelle
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.
quelle
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.
quelle
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.
quelle