Animal Well ist einfach nur ein weiteres 2D-Pixel-Art-Indie-Spiel – wieso fühlt es sich also so .. anders an? In seiner Zusammenfassung zum Summer Games Fest hat Danny O’Dwyer (Noclip) es sehr gut erklärt, als er Animal Well „das Spiel, bei dem am schwierigsten zu erklären ist, wieso ich es mochte“ nannte. Was genau es so besonders macht ist schwer zu erklären, vor allem, weil es auf den ersten Blick aussieht wie etwas aus der Zeit des Commodore 64. Ich möchte mir deswegen heute etwas Zeit nehmen zu erklären, wieviel Arbeit in jeden einzelnen Frame geflossen ist und dafür gesorgt hat, dass Animal Well aussieht, wie es aussieht. Was noch kommt wird eine kurze und anspruchsvolle Reise sein – jedes der Features könnte einen eigenen Blogpost füllen – aber eben auch eine sehr interessante.
Für den Anfang: Animal Well wird in verschiedenen Schichten gerendert, die alle auf recht komplizierte Weise zusammengesetzt werden. Ihr könnt hier einen Blick auf diese Schichten werfen und wie sie alle eingesetzt werden, um die Beleuchtung zu rendern und dann das finale Bild zu erstellen.
In diesem Shot aus der Anfangsphase des Spiels sehr ihr, wie man Feuerwerk benutzen kann, um einen Geist zu verbannen. Wir können das aufdröseln, um einige der Verarbeitungsschritte zu sehen, die vorkommen.
Für noch mehr Spaß, lasst uns einen Blick darauf werfen, wie dieser Ausschnitt aussähe, wenn es keine Beleuchtung gäbe:
Wenn es ums Rendern geht, passieren bei Animal Well viele kleine Dinge, die sich zu dem Endresultat zusammenfügen. Hier sind nur einige Beispiele.
Normalen-Maps
Wenn ein Licht sich über Hintergrundszenen bewegt, beleuchtet es die Dinge darin unterschiedlich, je nach Richtung. Um diesen Effekt zu erzielen, verwende ich Normalen-Maps. Normalen-Maps sind Texturen, die dabei helfen, kleine geometrische Details auf einer Oberfläche zu simulieren, die eigentlich vollkommen flach ist.
Die Farbe jedes Pixels stellt die „Oberflächennormale“ dar, die durch einen Vektor beschrieben wird, der die Richtung angibt, in die sie ausgerichtet ist. Die meisten 3D-Kunst-Pipelines haben diese Komponente, aber sie sind seltener in 2D-Spielen. Ich zeichne die Normalen-Karten von Hand mit der übrigen Kunst im Spiel.
Hintergrundeffekte
Animal Well last viel im Hintergrund passieren. In diesem Beispiel sehen wir eine Menge impliziter 3D-Geometrie, die durch Ray Marching erstellt wird, und dadurch auch vom Ray March erstellte Reflektionen enthält! Implizite Geometrie ist alles, was nicht in traditionellen 3D-Netzen definiert wird. Im Fall von Animal Well verwende ich sogenannte orientierte Distanzfunktionen (oder „Signed Distance Functions“ – SDFs). Diese Geometrie wird dann durch die Lichtquelle beschienen, die in den Schichten davor definiert wurde. SDFs sind “teuer” in ihrem Rendering (in dem Sinn, dass der Prozess viele Prozessorressourcen benötigt), aber auf der PS5 hat die GPU damit keine Probleme.
Flüssige Effekte
In Animal Well gibt es eine Schicht, die ständig eine Navier-Stokes-Flüssigkeitssimulation berechnet. Die wird für verschiedene Effekte im Spiel eingesetzt, meistens für Wasser oder Rauch. In der Funktion werden kleine Geister als „Farbe“ eingezeichnet und Objekte im Spiel üben Kräfte darauf aus, die die Bewegungen der Flüssigkeiten sehr realistisch macht. Auch solche Simulationen können rechnerisch teuer sein, weil sie für genaue Resultate häufig mehrere Iterationen durchlaufen müssen. Dabei achten wir besonders auf den Grenzwert der Farben, damit sie zum Rest der Pixel-Art passen.
Werkzeuge
Ein großer Teil der Entwicklung dreht sich nicht um das Spiel selbst, sondern Tools, um das Spiel zu machen. Ich habe die Engine fürs Spiel und den Editor selbst entwickelt, um gleichzeitig das Spiel entwickeln zu können.
Midi Controller
So gut wie jede Variable im Spiel kann über einen Midi-Controller bearbeitet werden, den ich an meinen PC angeschlossen habe. Der Prozess des Finetunings im Spiel wird dadurch viel schneller (und macht mehr Spaß!) – mit einem Midi-Controller kann ich einfach die Einstellungen wählen.
Ich habe eine modifizierte Version des beliebten Programms Aseprite verwendet, um die Geister zu zeichnen und zu animieren. Ich kann Dinge in Aseprite verändern, die dann eine eigene binäre Animationsart erzeugen und die Engine übersetzt die sofort während das Spiel läuft.
Extrem wenig Verzögerungen
So wie es schwierig ist, genau zu erklären, inwiefern Animal Well anders aussieht als andere Pixel-Art-Spiele, ist es auch eine Herausforderung, in Worte zu packen, wieso es so viel Spaß macht, das Spiel zu spielen. Die Steuerung ist immerhin extrem simpel: nach links, nach rechts, springen, Gegenstände verwenden – das war’s. Also was ist daran anders als an anderen Spielen in der Geschichte der Spiele? Eingabeverzögerungen sind der Schlüssel.
Eine ganz neue eigene Engine zu erstellen ist eine Menge Arbeit, weswegen die meisten Leute darauf verzichten. Es gibt so viele bestehende Engines, von Unreal über Unity bis GameMaker und so weiter. Spiele, die mit diesen fertigen Engines gebaut wurden, liegen quasi auf der obersten Schicht der Maschine, die einen Puffer zwischen dem Spiel und der CPU bzw. GPU aufbauen. Animal Well hingegen übersetzt jede Berührung des Spielers direkt für die GPU und liefert ohne Verzögerung oder zusätzlichen Übersetzungsschritt auch gleich die Anweisung, was die Maschine zu tun hat – so kann das Spiel also noch aus dem gleichen Frame rendern und ohne Buffering weiterarbeiten. Der Weg Gehirn -> Finger -> Controller -> Spiel -> Bildschirm wird unglaublich kurz. Natürlich bemerkt niemand so etwas bewusst. Das Spiel fühlt sich einfach wie eine natürliche Erweiterung der Gedanken an und ihr spürt den Controller verschwinden.
Aufgenommen mit 240 FPS auf einem OLED-Display und dann um ca. 400 % verlangsamt
Wenn ich den Entwicklungsprozess hinter Animal Well beschreibe, verwende ich meist das Oxymoron “Next-Gen 2D Pixel Art Platformer“ – ich denke, dieser Blick unter die Haube hat euch erklärt, wie es dazu kommt.
Website: LINK