In 2.5D verwenden Sie 2D-Assets / Rendering-Techniken, um das Gefühl einer 3D-Umgebung zu vermitteln.
Mit dieser Definition ist im folgenden möglicherweise mehrdeutigen Szenario eine gewisse Ausarbeitung erforderlich:
Spiel A
Mithilfe von 3D-Grafiken wird die GPU beschleunigt und alle (die Spielobjekte sind Maschen, keine Bilder) mit einem festen Kamerawinkel. Machen wir es noch schlimmer, die Projektion ist orthographisch, die klassischen 63,43 Grad. Die einzige Möglichkeit, auf den ersten Blick zu bemerken, dass Grafiken keine 2D-Grafiken sind, besteht darin, dass 3DGC - abgesehen davon, dass Sie sie mit äußerster Sorgfalt rendern - leicht von Handzeichnungs-Sprites unterschieden werden kann, unabhängig von der Projektion, mit der sie gerendert werden. Sie können mit verschiedenen Rendertechniken, Parametern, Shadern usw. experimentieren, und es fällt Ihnen schwer, die Tatsache zu verbergen, dass es sich um 3D-Netze handelt.
Spiel B
Eine Portierung von Spiel A, die jedoch auf Plattformen abzielt, von denen bekannt ist, dass sie über Hardware verfügen, die mit 3D-Grafiken nicht sehr gut oder überhaupt nicht zurechtkommt. Dann ersetzt der Port die Maschen durch Sprites. Es werden weiterhin 3D-Begrenzungsrahmen zum Beispiel für Kollisionen verwendet und Objekte haben eine Positionseigenschaft mit x-, y- und z-Werten, da die Spiellogik meistens nicht oder überhaupt nicht berührt wurde, nur der Rendering-Code wurde geändert.
Da die Sprites von Spiel B die 3D-Assets von Spiel A darstellen und Spiel A keine komplizierten Shader benötigt, können Sie in 99% aller GPUs keinen Frame von Spiel unterscheiden B eines Rahmens aus Spiel A.
In 2.5D ist die Interaktion zwischen Spielobjekten auf Situationen beschränkt, in denen die Illusion von 3D nicht beeinträchtigt werden kann. Um beispielsweise zwei umarmende Charaktere darzustellen, müssen Sie eine einzelne Bilddatei erstellen, in der die beiden Charaktere interagieren, da der Versuch, die Umarmungsaktion nur mit einem einzigen Bild pro Charakter darzustellen, zu schwierig oder unmöglich wäre. Vielleicht können Sie mit einem in Teile aufgeteilten Charakterkörper kommen und diese in der richtigen Reihenfolge zeichnen. In 3D gibt es dieses Problem nicht (es gibt ein anderes Problem, bei dem die beiden Zeichen richtig positioniert werden, damit sie nicht in das Netz des anderen Zeichens eindringen).
Um dies zu veranschaulichen, stellen Sie sich vor, dass in Spiel A und B ein Fehler vorliegt, durch den der Spielercharakter in bestimmten Situationen ein anderes Spielobjekt passieren kann, sodass wir leicht zwischen dem 2.5D- und dem 3D-Objekt unterscheiden können.
Game B, 2.5D Render, Sprites werden nach dem z-Wert ihres Positionsvektors sortiert. In diesem Beispiel ist positives z unten und negatives z oben. z-Achse und y-Achse sind parallel, aber z wird mit einem Faktor von 0,5 von y skaliert. Wenn also der sichtbare Bereich zwischen 10 und -10 Jahren liegt, haben wir im selben Bereich zwischen 20 und -20 Jahren. Objekte mit einem größeren z werden letztere gezeichnet, so dass sie als vor Objekten mit einem niedrigeren z stehend angesehen werden. Der Schatten eines Spielercharakters sieht seltsam aus, da sich die Schatten in einer höheren Ebene als der Boden befinden, aber in einer niedrigeren Ebene als alle anderen Objekte, sodass der Schatten eines Spielercharakters niemals auf dem Würfel liegt.
Spiel A, 3D Render. Der Tiefenpuffer (auch als Z-Puffer bezeichnet) wird für die pixelgenaue Tiefenprüfung verwendet. Ein Objekt muss also nicht ein anderes Objekt vollständig verdecken, nicht einmal ein Dreieck muss ein anderes Objekt vollständig verdecken. Wir haben einen Tiefentest mit Pixelgenauigkeit. Wir können die Spielobjekte in beliebiger Weise drehen und trotzdem realistische Ergebnisse erzielen, wenn sie interagieren.
Fazit: In 2.5D befindet sich ein Sprite entweder vor oder hinter einem anderen Sprite. In 3D besteht ein Netz aus Dreiecken. Beim Testen der Tiefe ist Dreieck jedoch nicht die Mindesteinheit. Sie können die Pixelgenauigkeit festlegen. Natürlich ist eine Kameradrehung in 2.5D nicht möglich, da Objekte für einen festen Kamerawinkel erstellt wurden, während in 3D natürlich ist, wenn die Kamerawinkel in einem 3D-Spiel durch das Design eingeschränkt sind.
Es gibt verschiedene Tricks, die das Gefühl vermitteln, in einer 3D-Welt zu sein, wenn Sie nur 2D-Grafiken rendern können. Ich habe nur ein schnell erstelltes Beispiel vorgestellt, das einige Elemente eines aufgegebenen Projekts von mir verwendet.
Warum nicht einfach immer 3D verwenden und 2.5D vergessen?
Nun, ich kann in einigen Beispielen nachdenken, warum ein Entwickler den 2.5D-Ansatz bevorzugt:
- Vielleicht kennen sie 3D-APIs nicht oder mögen sie nicht (Direct3D, OpenGL, es gibt andere).
- Möglicherweise kann die Zielplattform 3D-Grafiken nicht gut verarbeiten (alte Desktop-Computer, 2D-Konsolen).
- Ihr Team kann erstaunliche Sprites erstellen, jedoch keine 3D-Modelle.
Wie stark können Sie die Ergebnisse von 3D-Grafiken mit 2.5D approximieren?
Es gibt einen Performance- und Programmierkomplexitätshorizont. Wenn Sie sich diesem Horizont nähern, beginnen Sie zu bezweifeln, ob Ihr Projekt in 2.5D wirklich möglich ist oder ob Sie in 3D arbeiten müssen. Zum Beispiel können Sie Z-Buffering in 2.5D (theoretisch) verwenden, aber können Sie die Videospeicherkosten bezahlen (alter Desktop-Computer mit integrierter Grafik, keine leistungsstarken Mobilgeräte)? Möchten Sie die Speicherkosten für ein zusätzliches Bild bezahlen, um die Z-Maske jedes Sprites zu speichern?
Gute Kandidaten für 2.5D sind RPG-Spiele, denke Baldur's Gate-Serie oder RTS, denke Age of Empires 1 und 2 (AoE 3 ist vollständig 3D und leicht zu unterscheiden).
Nützliche Hinweise:
Z-Buffering: http://en.wikipedia.org/wiki/Z-buffering
Orthographische Projektionen: http://glasnost.itcarlow.ie/~powerk/GeneralGraphicsNotes/projection/orthographicprojection.html