Lesedauer 4 Minuten

Verantwortlich für: Game Design, Enemy AI, Level Design, Level Generation, Technical Art, Sound Design, General Programming

Während meines Master-Studiums AI Engineering (Game) an der FH Technikum Wien, entstand über zwei Semester ein vollständiger Action-Horror-Shooter, welcher von Dozent:innen der FH und Vertreter:innen aus der Industrie im Rahmen eines Showcase-Evenings offiziell zum jahrgangsbesten Games-Projekt ausgezeichnet wurde.

Hier am Rande des Universums erkenne ich. Selbst der Tod bietet mir keinen Ausweg aus diesem stählernen Gefängnis.“ – Im Horror-Shooter „Humans Never Change“ erwachen Spieler:innen auf dem führungslosen Raumschiff „Amber Hawk“ und müssen eine Möglichkeit finden, ihre Freiheit zurück zu erlangen. Vorbei an fremdartigen Wesen, welche in den Schatten lauern – durch ein Labyrinth an Gängen und verschlossenen Türen – hin zur Wurzel dessen, was die „Amber Hawk“ in seinem Bann hält.

Das Projekt wurde mittels der Unity Game Engine umgesetzt. Spieler:innen müssen den Weg durch eine große, verwinkelte Raumstation finden, Gegnern ausweichen oder sie besiegen, um in den finalen Raum zu gelangen und dort den Level-Boss zu besiegen.

Grafisch und ästhetisch hat man sich an den Spielen aus der Ära der originalen Playstation gehalten. Alle Assets des Spiels, mit Ausnahme der Sounds und der Musik sind im Rahmen des Projekts entstanden. Folgend werden einzelne besondere Komponenten des Spiels beschrieben.

Gameplay & Tech – Trailer

Creep AI

Die Gegner welche die Spielenden innerhalb der Raumstation durch die Gänge verfolgen werden Creeps bezeichnet. Der Name entspringt dem Design, dass diese zunächst den Spieler observieren, bei Gefahr flüchten und anschließend mit Verstärkung als Gruppe zurückkehren, um den Spieler zu verfolgen und zu töten.

Dieses Verhalten wurde mithilfe eines Behavior Trees realisiert. Für das Verhalten innerhalb der Gruppe wurde ein Flocking Algorithmus verwenden, für das Pathfinding dient der AStar-Algorithmus auf einem Navigation-Mesh, welches beim Laden des Levels generiert wird.

Der Behavior Tree teilt sich essenziell in zwei verschiedene Verhaltensmuster, die sich darin unterscheiden, ob der Creep alleine oder Teil einer Gruppe ist. Ob diese Bedingung zutrifft oder nicht, kann sich während dem Spiel verändern. Alle Creeps starten zunächst allein und suchen sich ihre Gruppe, um den Spieler zu besiegen.

Level Design & Generierung

Jeder Knotenpunkt (Räume in welchen sich zwei oder mehr Gänge treffen) kann abgeriegelt werden. Die für das Entriegeln nötigen Schlüsselkarten werden zufällig im Level verteilt. Teil dieser Lösung war auch, dass für jede Tür nur eine bestimmte Schlüsselkarte gültig war. Folglich musste ein Algorithmus entwickelt werden, welcher zufällig Türen des Levels verriegelt, den direkten Weg zum Bossraum versperrt und die Schlüsselkarten so platziert, dass das Level in jedem Fall lösbar ist. Denn würde die Schlüsselkarte zu Raum A sich in einem Sektor befinden, den man nur über Raum A erreichen kann, wäre das Level unlösbar.

Aus Balancing-Gründen wurde letztendlich der Modus eingebaut, dass jede beliebige Schlüsselkarte einen verschlossenen Raum aufsperren kann. des Weiteren gibt es zufällig platzierte Items für Lebenspunkte, Munition und Leuchtstäben, um Spieler:innen mehr Optionen zu bieten und sie für das Erkunden zu belohnen.

Technical Art

Für den Look & Feel des Spiels wurden einige Partikelsysteme, Lichteffekte, Post- Processing und Sound verwendet. Den größten Aufwand hat dabei der Player Controller selbst verursacht. Schließlich ist diese Entität das, was Spielende am längsten und intensivsten wahrnehmen werden, wenn sie das Spiel spielen. Dabei geht es um das Feedback beim Schießen mit der Waffe, das Audio-Feedback nach dem Sprinten (Atem-Geräusche) oder auch Effekte, beim Einschlag von Projektilen der Waffe.

In einem Action-Horror-Spiel spielen Sounds und Musik eine essenzielle Rolle. Aus diesem Grund haben wir uns dafür entschieden, diese Assets nicht selbst zu produzieren, sondern auf externe Arbeit von Sidearm Studios und freesound.org zurückzugreifen. Diese werden entweder zeitlich, durch Trigger oder Erfüllen von bestimmten Bedingungen im Game State verursacht und abgespielt. Es war sehr interessant zu sehen, wie wichtig Timing bei diesem Thema ist. Ein Stück Musik kann sehr passend für das Spiel sein, aber die Stimmung, wenn es zum falschen Zeitpunkt abgespielt wird, vollständig zerstören.

Raytracing

Die Game Engine unserer Wahl, Unity, verfügt in der Editor Version 2020f.3.30f1 über ein experimentelles Featureset an Raytracing-Funktionen wie auch Pathtracing. Pathtracing ist ein Begriff der für ein globales Beleuchtungssystem steht, welches noch realistischere Lichtverhältnisse als Raytracing erzeugen kann und auch in Feature-Animationsfilmen zum Einsatz kommt. Und obwohl es überraschenderweise nicht viel mehr Performance als Raytracing in Unity benötigt, ist es aktuell noch geplagt von Pixelrauschen, ohne die Funktion, durch Denoise- Algorithmen das Bild zu stabilisieren. Schlussendlich fiel die Wahl auf Recursive Rendering in Unity, welches durch Raytracing zur Verfügung steht. Dabei werden bis zu einer gewissen Rekursionstiefe Strahlen durch das Level geschickt, welche Oberflächen nach Reflexionen proben, um ein realistisches Ergebnis für das Shading der Materialien zu ermöglichen.

Das experimentelle Raytracing wird in neuesten Versionen der High Definition Rendering Pipeline (kurz HDRP) von Unity bereitgestellt. Die HDRP ist ein kostenfreies Plugin für Unity, welches das Projekt mit modernen Renderingtechniken und Shadern ausstattet. In den Einstellungen der HDRP werden schließlich die Einstellungen für Raytracing und Co. gesetzt. Anschließend können Materialien mit dem HDRP/Lit Shader für Recursive Rendering konfiguriert werden, welches aber noch nicht sofort greift. Denn zuerst muss dem Game Object eine Volume Component mit einem Override für Recursive Rendering hinzugefügt werden. Paradoxerweise befinden sich dort dann auch detailliertere Einstellungen wie beispielsweise der Rekursionstiefe oder die Reichweite der Strahlen, welche von jedem neuen Game Object mit Volume überschrieben werden können. Vermutlich ist das aber ein Artefakt der experimentellen Natur dieses Features.