1 Punkte von GN⁺ 2023-12-21 | 1 Kommentare | Auf WhatsApp teilen
  • Selbst in der Ära der 2D-Spiele, in der echtes 3D schwierig war, erzeugten Entwickler mit Parallax Scrolling und SNES-Mode 7 räumliche Tiefe, und der Perspective Mode von Diablo 2 zeigt diese Linie innerhalb eines 2D-ARPGs
  • Don’t Starve erschafft trotz flacher Assets für Büsche, Bäume und Gegner eine plastische Szene, und Diablo 2 vermittelt in einem 2D-Spiel von 2000 einen ähnlichen Eindruck, indem es Boden-Rendering und Sprite-Verformung kombiniert
  • Der Perspective Mode von Diablo 2 ist nicht bloß ein Effekt, der Sprites einfach verschiebt, sondern erzeugt eine Verformung, als würde der ganze Bildschirm zum Horizont hin kippen, wodurch Fluchtpunkt und Perspektive sichtbar werden
  • Blizzard teilte DT1-Sprites in 32×32px-Stücke und versuchte, je nach orientation-Wert Objekte wie Wände und Zäune unterschiedlich zu verformen, um Lücken in der Szene zu verringern
  • Laut später veröffentlichten Inhalten auf Gamasutra benötigte der Perspective Mode eine 3D-Grafikkarte, erzeugte Tiefenwirkung und Parallax-Effekte durch leichtes Drehen, Skalieren und Strecken von Mini-Tile-Texturen und brauchte etwa 1 bis 2 Wochen für die Implementierung

Frühe Techniken, um 2D wie 3D aussehen zu lassen

  • In den 1990er-Jahren begannen Spiele den Übergang von 2D zu 3D, aber schon vor echtem 3D nutzten Entwickler verschiedene Tricks, um Bildschirme zu erzeugen, die wie 3D wirkten
  • Eine typische Methode ist der Parallax-Effekt
    • Je nach Entfernung bewegen sich manche Elemente schneller und andere langsamer, wodurch Tiefenwirkung entsteht
    • Moon Patrol von 1982 erzeugte schon allein durch mehrere Ebenen mit unterschiedlicher Geschwindigkeit einen starken räumlichen Eindruck
  • Mode 7 aus der SNES-Ära ist kein echtes 3D, lässt aber durch Manipulation der Bodentextur eine Darstellung mit Perspektive entstehen
    • Laut einer GBA-Erklärung konnte man auch ohne echte 3D-Hardware in jeder Scanline Skalierungs- und Verschiebungswerte anpassen, um 3D nachzuahmen
    • Diese Methode liegt näher an einer Texturmanipulation, bei der Höhe in Tiefenwirkung umgedeutet wird

Der Einsatz flacher Assets in Don’t Starve und Diablo 2

  • Heute lassen sich alle Assets tatsächlich in 3D rendern, aber nicht jede Szene braucht plastische Modelle
  • Die Büsche, Bäume und Gegner in Don’t Starve sind flache Assets, liefern visuell aber dennoch ein ausreichend attraktives Ergebnis
  • Diablo 2, ein 2D-ARPG aus dem Jahr 2000, ist ein Beispiel, das gleichzeitig an Moon-Patrol-artige Parallax-Effekte und an eine Mode-7-artige Bodendarstellung erinnert
  • Diablo 2 in den Standardeinstellungen ist ein rein 2D-Bild
    • keine Perspektive
    • kein Parallax-Effekt
  • Wenn man den Perspective Mode aktiviert, werden dieselben Bodenpixel nicht mehr ständig von Säulen überdeckt, und wie in Don’t Starve wirken flache Assets so, als bewegten sie sich in einem Raum mit Tiefenwirkung

So wurde der Perspective Mode von Diablo 2 analysiert

  • Da es zu Diablo 2 kaum offizielle Informationen gibt, wurde der Perspective Mode mit Tools zum Extrahieren und Analysieren von MPQ- und DT1-Dateien untersucht
    • MPQ Editor wurde verwendet, um DT1-Dateien aus MPQ zu extrahieren
    • DT1 Tools wurden verwendet, um PCX-Dateien aus DT1 zu extrahieren
    • DT1 Tutorial diente zum Verständnis des DT1-Formats
  • Der Perspective Mode ist kein simpler Effekt, der Sprites ein wenig verschiebt
    • Vergleicht man dieselbe Position mit aktiviertem und deaktiviertem Modus, zeigen alle Elemente eine Verformung, als würden sie in Richtung Horizont kippen
    • Fügt man der Bodentextur ein Schachmuster hinzu, wird diese Verformung noch deutlicher sichtbar
  • Da die Szene aus vielen Sprite-Fragmenten besteht, entstehen bei der Verformung leicht Lücken an den Grenzen
    • Diablo 2 hält die Teile dennoch zusammen und bewahrt gleichzeitig eine perspektivische Darstellung

32×32-Stücke und orientation-Werte

  • Blizzard teilte Sprites in 32×32px-Bereiche
    • Das wirkt wie eine Optimierung, um nur benötigte Bildteile zu laden
    • Auch für die Anwendung von Verformungen im Perspective Mode scheint das nützlich zu sein
  • Zeichnet man auf eine Säulentextur Linien im Abstand von 32px und betrachtet sie wie ein künstliches Wireframe, scheinen die vertikalen Linien auf einen Fluchtpunkt tief im Boden zuzulaufen
  • Bei einigen Sprites wirkt die untere Begrenzung gekrümmt
    • Aus rein perspektivischer Sicht wäre diese Krümmung nicht unbedingt nötig
    • Diese Verformung variiert je nach Blickwinkel auf den Sprite sowie je nach Position von Spieler oder Kamera
  • Im DT1-Format können Sprites einen orientation-Wert haben
    • Laut der Dokumentation von Paul Siramy kann sich je nach Richtungswert unterscheiden, wie Sprites verformt werden
    • Beispiele sind Wandrichtungen wie Left Wall, Upper Wall oder Lower-Left corner
  • Sprites mit unterschiedlichen Ausrichtungen, etwa Wände oder Zäune, werden auf unterschiedliche Weise verformt
    • In manchen Fällen sind obere und untere Kanten nicht gekrümmt, und die Begrenzungslinien scheinen auf einen Fluchtpunkt links zuzulaufen
    • Das Spiel scheint die Verformung etwas zu übertreiben, um Lücken zu vermeiden, und Zaun-Sprites passen gut aneinander
    • Wird derselben Wand ein falscher orientation-Wert zugewiesen, entstehen zwischen den Sprites Lücken

Zusätzliche veröffentlichte Informationen und ähnliche Beispiele

  • Der Perspective Mode ließ sich in Diablo 2 nur im D3D-Vollbildmodus aktivieren
    • Diablo 2 unterstützte auch Glide und Software Rendering
    • In alten DirectX-Dokumenten wurde nach weiteren Informationen gesucht, jedoch ohne Erfolg
  • In einem späteren Update wurde ein Link zu Bildverzerrungen ergänzt
    • image aberration sieht der Verzerrung im Perspective Mode von Diablo 2 sehr ähnlich
    • Ob die Entwickler von Diablo 2 dies tatsächlich verwendet haben, ist nicht bekannt
  • In dem von Paul Siramy geteilten Gamasutra-Artikel wird die Implementierung des Perspective Mode direkter beschrieben
    • Zum Aktivieren des Perspective Mode war eine 3D-Grafikkarte erforderlich
    • Diablo II nutzte ein feineres Raster, indem große Diamant-Tiles aus vielen kleinen Diamant-Tiles zusammengesetzt wurden
    • Die Textur jedes Mini-Tiles wurde leicht rotiert, die Grafikkarte legte sie dann auf zwei Polygone und streckte sie vertikal und horizontal, sodass sie je nach Charakterposition größer oder kleiner wirkten
    • Bäume und Gebäude wirkten beim Näherkommen oder Entfernen unterschiedlich groß, scrollten mit anderer Geschwindigkeit als Vorder- und Hintergrundobjekte und erzeugten so einen Parallax-Effekt
    • Das leichte Flimmern mancher Objekte wird als Ergebnis des bilinear filtering der Grafikkarte erklärt
    • Selbst Charaktere, Items und Strukturen wie die Hütten und Türme aus Act I wurden im Perspective Mode skaliert
    • Laut Daves Erklärung wurde mit echter 3D-Mathematik ein Raster leicht skaliert und gestreckt, um Tiefenwirkung zu erzeugen
    • Die Implementierung dauerte etwa 1 bis 2 Wochen und erforderte die Ausrichtung von Wänden und die Behandlung von Beleuchtung; außerdem mussten die Artists Objekte neu zuschneiden und anders rendern
  • In Update 3 wurde auch Cultures als weiteres Beispiel für einen ähnlichen 2D-Perspektivtrick ergänzt

1 Kommentare

 
GN⁺ 2023-12-21
Meinungen auf Hacker News
  • Das stand früher auf meiner Liste der Dinge, die mich neugierig gemacht haben, also kann ich es jetzt wohl streichen. Falls jemand weiß, wie der Himmel in World of Warcraft gemacht wurde, und – wenn auch etwas weniger – wie das Terrain in Warcraft 3 umgesetzt wurde, wäre ich für Hinweise dankbar.
    Beim Terrain von Warcraft 3 dachte ich immer, dass dort marching squares clever eingesetzt wurden. Ich frage mich das seit über zehn Jahren: Funktionen wie Tag/Nacht/Wolken/Mond/Sterne sind unglaublich, schön und leichtgewichtig, scheinen nur jeden zweiten Frame aktualisiert zu werden und wirken trotzdem sehr natürlich. Es scheint kein Render-to-Texture zu sein, ist so glatt, dass man weder Polygone noch Texel sieht, und lief sogar auf Computern von 2002 – ein Wunderwerk der Tech Art.

  • Dank der Leute, die Project Diablo 2[1] betreiben, spiele ich D2 immer noch. Der Perspektivmodus sieht mit 144 fps wirklich wunderschön aus, und zum ursprünglichen LoD-Client mit 30 fps zurückzukehren, ist ziemlich schwierig.
    Ich erinnere mich immer noch mit Nostalgie daran, wie ich in der Pandemonium Fortress die gewundenen Treppen hinunterging und von der schönen – vielleicht passt „unheimlichen“ besser – Grafik überwältigt war.
    [1] https://www.projectdiablo2.com/

  • Mode 7 ist im Kern eher ein primitiver 3D-Beschleuniger. Er rendert eine einzelne texturierte Ebene mit verschiedenen Transformationen; im Prinzip ist das genauso „echtes 3D“ wie bei modernen GPUs, nur sehr eingeschränkt und ungenau.

    • Das stimmt nicht ganz. Mode 7 kann eine Ebene in 2D nur skalieren, verschieben und drehen. Ein typischer Anwendungsfall ist etwa der Bowser-Kampf in Super Mario World: Bowser bewegt sich, rotiert gelegentlich, und zwischen den Runden fliegt er durch Skalierung „3D-artig“ herum.
      Glaubwürdigere 3D-Hacks kamen von Zusatzprozessoren in den Cartridges. Spiele wie Super Mario Kart berechneten mit Zusatzchips schnell neue Mode-7-Parameter für jede Scanline. Wenn man pro Zeile Skalierung und Verschiebung ändert, die Rotation aber gleich lässt, erscheinen die oberen Zeilen kleiner und die unteren größer, wodurch der Eindruck einer geneigten 3D-Fläche entsteht.
      Diese Methode, „die Skalierung pro Scanline zu ändern“, ist sehr anders als moderne GPUs und auch keine beliebige Transformation. Mit dieser Technik kann man eine Ebene zum Beispiel nur um die horizontale Achse drehen, nicht um die vertikale.
    • Es ist wirklich eher eine Fixed-Function-Pipeline.
  • Frühe Computergrafik ist immer wieder erstaunlich. Ich bin überzeugt, dass sowohl Software als auch Hardware ohne die Beiträge früher Animation und Computergrafik heute mehrere Generationen zurückliegen würden.
    Wenn man sich NVIDIA ansieht: Dass dieselbe Architektur für frühe Formen von Machine Learning und „künstlicher Intelligenz“ nützlich war, war fast schon Glück, aber das Unternehmen selbst wurde auf Computergrafik aufgebaut.

    • Nicht ganz. NVIDIA hat KI nicht vorhergesehen, aber sehr früh in General-Purpose Computing investiert. Der heutige Marktwert ist das Ergebnis davon, dass sie diese Vision 20 Jahre lang konsequent verfolgt und gut umgesetzt haben.
    • Davor waren Vektorverarbeitung und Dinge wie SIMD eher die Domäne alter Supercomputer wie Cray.
  • Warum die Unterkante der Sprites so stark gekrümmt ist: Vermutlich war das nötig, um bei vertikalen Sprites einen Fluchtpunkt „unter“ dem Boden zu simulieren. Wenn drei Pfähle sich nach oben hin nach außen auffächern und rotieren, muss sich die Unterseite in gewissem Maß mitdrehen; eine einfache Schertransformation hätte seltsam ausgesehen.
    In der 3ds-Max-Szene lag die Textur frontal zum Viewport und war quadratisch, deshalb sah die Scherung wohl in Ordnung aus und der Unterschied fiel kaum auf. In dem bewegten Beispiel müssten sich die drei Pfähle, wenn man es realitätsnäher betrachtet, mit zunehmender Nähe relativ zur Kameraperspektive auffächern; das zeigt der 3ds-Max-Render nicht gut.

  • Dieser Artikel konzentriert sich auf Parallaxe in Spielen, aber der Parallax-Effekt hat in der Animation eine lange Geschichte.
    Disneys Multiplan-Kamera und ihre Vorläufer gibt es seit fast 100 Jahren. Auch mit 2D-Bildern lassen sich viele Tricks nutzen, um Szenen mit Tiefe aufzubauen.
    https://en.wikipedia.org/wiki/Multiplane_camera

  • Die Entwickler schienen mit dem Parallax-Effekt ziemlich zufrieden zu sein, aber ich kann mich nicht erinnern, ihn tatsächlich genutzt zu haben. Nachdem man sich schon an die Standardeinstellung gewöhnt hatte, wirkte es wohl einfach seltsam.

    • Außerdem wurden die Sprites nicht im 1:1-Maßstab gerendert, was die visuelle Qualität verschlechterte. Aus heutiger Sicht, wo ein bisschen 3D nicht mehr beeindruckt, sieht es meiner Meinung nach eher schlechter aus.
    • Der Bildschirm fühlte sich „näher“ an, sodass man weniger Gegner sah. Für jemanden, der Zauber einsetzt, war das ein Problem.
    • Damals vermittelte es schon ein 3D-Gefühl, wenn sich die Figur schnell bewegte und viele verdeckende Objekte wie Wände oder Bäume vorbeizogen. Ich erinnere mich auch, dass manche Renderings bei Lichteffekten besser wirkten.
  • Bei solchen alten Spielen sagt man, ihr 3D sei „nicht echt“, aber moderne 3D-Spiele werden am Ende auch auf einem flachen Bildschirm angezeigt. Sind sie dann nicht im grundsätzlich gleichen Sinn kein echtes 3D?

    • Nicht unbedingt. Moderne 3D-Spiele platzieren eine Kamera an einer beliebigen Position, projizieren 3D per Linearer Algebra in einen 2D-Clip-Space und rasterisieren das Ergebnis. Spiele wie D2 erzeugen nur mit Sprites und Offsets eine 3D-Illusion; sie haben ursprünglich gar kein 3D-Koordinatensystem. In solchen Spielen ist auch die Bewegung normalerweise auf zwei Achsen beschränkt.
      Ein weiterer wichtiger Unterschied sind vorgerenderte Sprites. In Spielen wie Roller Coaster Tycoon oder Diablo wurden Modelle auf teuren Spezialrechnern erstellt und dann als Sprite-Sheets gerendert. Auch wenn Objekte 3D-artig aussehen, wurden sie meist als flache Assets ausgeliefert. Einige moderne Pixel-Art-Spiele legen zusätzlich Normal Maps bei, um dynamisches Licht auf 2D-Sprites anzuwenden.
      Moderne Parallax-Effekte lassen sich leicht umsetzen, indem man flache Objekte in einer 3D-Szene rendert; die Grafikpipelines vor 20 Jahren waren aber ganz anders, und für 3D-Effekte musste man deutlich cleverer sein.
    • Genau. Im Artikel wird eine mit Mode 7 umgesetzte flache 3D-Ebene einfach als „Fake 3D“ bezeichnet, aber das Ergebnis sieht fast genauso aus wie ein einzelnes texturgemapptes Polygon. Der Unterschied ist nur, dass die „Kamera“ Änderungen von Yaw und Pitch erlaubt, aber kein Roll.
      Das ist lediglich eine Einschränkung der 3D-Situationen, die das Mode-7-System rendern kann, und bedeutet nicht, dass das Renderbare selbst falscher wäre. Am Ende manipulieren alle 3D-Rendering-Verfahren ein 2D-Pixelraster auf dem Bildschirm, um die Illusion zu erzeugen, virtuelle Objekte zu betrachten.