Gastbeitrag: „Prozedurale Generierung von Inhalten“ von Aaron Chapin

Unser Team hier bei Goodgame besteht aus vielfältigen Talenten mit unterschiedlichsten Spezialisierungen im Bereich Gaming. Was uns verbindet, ist unsere gemeinsame Leidenschaft für die Spieleentwicklung und unser Ehrgeiz, richtig gut in dem zu sein, was wir tun. Um das zu erreichen, wollen wir so schnell wie möglich lernen und uns verbessern, weshalb uns der Austausch von Wissen besonders wichtig ist – sowohl innerhalb unseres Teams als auch mit der restlichen Spieleindustrie. Deshalb teilen wir heute einen ersten Gastbeitrag auf unserem Blog mit euch, diesmal von unserem Kollegen Aaron. Aaron hat sowohl als Client- als auch als Server-Entwickler in unserem Moonshots Studio gearbeitet, und in seinem Blog weiht er uns in das Thema ein, wie Teile eines Spiel mit Hilfe von prozeduraler Generierung automatisch gebaut werden können. Im Folgenden erfahrt ihr, was das genau ist, wie es genutzt werden kann und welche Vor- und Nachteile es gegebenenfalls gibt.

Alex at Unite
Unite 2016 Europe – Image ©Dan Taylor/Heisenberg Media. – Source: Flickr

„Wenn eine Spielwelt die Größe einer echten Galaxie hätte, bevölkert von Millionen Planeten in ihrer realen Größe, wie lange würde es dann wohl dauern, um sie alle zu bauen? Wenn eine einzige Person daran arbeiten würde, jeden Fluss per Hand einschnitzen würde, jeden Berg hochziehen und jede Höhle graben würde, dann wäre sie wahrscheinlich niemals fertig damit, bevor das Spiel veröffentlicht werden soll. Wie baut man also Systeme, sodass Spieler im Spiel frei agieren können und dabei alles reibungslos läuft?

Ich hatte vor Kurzem die Chance, auf der Unite Europe zu sprechen, einer Konferenz für Entwickler, die die Unity Spiel-Engine nutzen. In meinem Vortrag ging es um eines meiner Lieblingsthemen: Prozedurale Generierung, auf Englisch: „Procedural Content Generation“ (PCG). Im Kern geht es bei PCG darum, Daten und Algorithmen zu nutzen, um Teile im Spiel zu bauen, die nicht von Menschenhand vorgefertigt und handgefertigt werden können. Manchmal ist dies nicht möglich, weil die Inhalte sehr komplex oder groß sind, oder weil die Anzahl der Einzelteile unermesslich ist. Anstatt diese Problematik zu lösen, indem mehr Artists und Entwickler eingestellt werden, die an dieser Aufgabe arbeiten, kann man einen Code schreiben, der Teile automatisch baut, basierend auf den Informationen, die man ihm liefert.

Ein klassisches Beispiel ist ein Spline-basierter Netzgenerator. Falls das etwas beängstigend klingt, keine Sorge, denn es handelt sich eigentlich um ein sehr simples Konzept. Wenn man zum Beispiel einen Zaun in der Spielewelt bauen möchte, könnte ein Level Designer jeden Pfosten und jede Planke einzeln bauen und somit Schritt für Schritt den Zaun errichten. Wenn sich allerdings etwas ändern würde und der Zaun eine andere Form annehmen soll, müsste der Level Designer diese Pfosten und Planken nochmal anfassen und bewegen. Bei einer prozeduralen Herangehensweise würden einzelne Abschnitte des Zauns definiert werden, wahrscheinlich nur ein einzelner Pfosten, und die Planken, die die einzelnen Pfosten verbinden. Der Level Designer könnte dann im Level einfach eine Linie auf dem Boden ziehen, dort wo der Zaun stehen soll. Der prozedurale Generator würde dann entlang dieser Linie die Pfosten errichten und sie mit den Planken verbinden. Wenn dann der Zaun bewegt werden soll, müsste der Level Designer einzig und allein den alten Zaun löschen, eine neue Linie ziehen, und den Generator entlang des neuen Pfads arbeiten lassen. Hat man sich also einmal die Arbeit gemacht und den prozeduralen Pfad-Generator programmiert, spart der Level Designer viel Zeit, und der Code kann sogar für weitere Dinge im Spiel genutzt werden.

Fence Generation

Die Verwendung von PCG kann also sehr dabei helfen, die Entwicklung des Spiels zu beschleunigen – sie hat allerdings auch ein paar Nachteile, die man nicht ignorieren kann. Im Allgemeinen kann man nicht alles direkt aus Code bauen, sondern muss dem Generator einzelne Informationsstücke liefern. Das könnten irgendwelche Zahlen oder Texturen sein, oder sogar kleinere 3D-Modelle. Man muss ebenfalls die Formeln entwickeln, die die Informationen aufnehmen und sie in nutzbare Einheiten für das Spiel umwandeln. Wenn mein Generator Schienen bauen würde, die nur 1 Meter lang sind, oder gegeneinander krachen, wären sie im Spiel nicht nutzbar. Sogar bei einem solch speziellen Fall gibt es viele verschiedene Möglichkeiten, um den gewünschten Inhalt zu generieren, und jede davon hat Vor- und Nachteile. Ein besonders schwieriges Problem, das mit PCG gelöst werden muss, ist sicherzustellen, dass alle vom Generator produzierten Inhalte interessant sind. Niemand will ein Spiel spielen, bei dem jeder Charakter exakt gleich aussieht, abgesehen von der unterschiedlichen Haarfarbe.

Track Generation

Es gibt diverse Möglichkeiten, um PCG zu nutzen, wenn man ein Spiel mit Unity entwickelt. Unity stellt Entwicklern jedoch auch einige Hilfsmittel zur Verfügung, um den Einstieg zu erleichtern. So gibt es beispielsweise einen Netzgenerator-Kurs, in dem 3D-Netze programmatisch erstellt werden, anstatt dass man warten muss, bis ein 3D Artist ein Modell erstellt hat. Entwickler haben ebenfalls die Möglichkeit, innerhalb von Unity ihre eigenen Tools zu bauen, und es anderen Teammitgliedern zu ermöglichen ihre eigenen neuen Inhalte direkt in ein Projekt einzufügen. Unity ist ein großes und komplexes Ökosystem, weshalb es möglich ist, dass jemand bereits seit Jahren damit gearbeitet und dennoch von manchen dieser leistungsfähigen Tools noch nie etwas gehört hat. In meinem Vortrag habe ich versucht, eine einfache Einführung in einige dieser Konzepte zu geben, um interessierte Teilnehmer eine Grundlage zu vermitteln, sodass sie eigenständig mehr darüber lernen können.

Alex at Unite II
Unite 2016 Europe – Image ©Dan Taylor/Heisenberg Media. – Source: Flickr

Es hat mir großen Spaß gemacht, an der Unite teilzunehmen und etwas von dem Wissen zu teilen, das ich mir im Laufe meiner Karriere als Spieleentwickler angeeignet habe. Es war auch mein erstes Mal in Amsterdam, was ich großartig fand, obwohl die Stadt nicht ganz so viele Kanäle hat wie Hamburg“.