Computergrafikpraktikum 2016

Details

Datum: 18. Juli bis 5. August
Zeit: jeweils von 9 bis 17 Uhr
Dozent: Prof. Dr. Oliver Vornberger
Tutoren: Dennis Altenhoff, Miriam Beutel, Lukas Kalbertodt

Gruppen

Es wird insgesamt drei ungefähr gleich große Gruppen geben – je eine pro Tutor. Jede dieser Gruppen behandelt während des ganzen Praktikums ein Thema bzw. ein Projekt. Dabei werden die Gruppenteilnehmer vom betreuenden Tutor in technischen Fragen und in der Projekt­leitung unterstützt.

Bis zur Praktikumsvorbesprechung (am 05.07.) ist es möglich, eigene Themen-/Projekt­vor­schläge einzubringen. Auch können kleinere Gruppen gebildet werden, wenn ein passendes Thema und ein passender Betreuer unter den Tutoren gefunden wurde. Richtet euch ein­fach mit allen Ideen und Vorschlägen per Email an einen der Tutoren.

Die endgültige Aufteilung auf die Gruppen erfolgt bei der Praktikums­vorbesprechung. Dabei wird auch entschieden, welche der Themen/Projekte von den drei Gruppen behandelt werden.

Projekte

Übersicht:

Projekt A: AVZ Run (3D Escape Game)

In AVZ Run ist der Spieler im brennenden AVZ gefangen und muss versuchen, diesem Inferno zu entkommen. Der Spieler kontrolliert den In-Game-Charakter und muss sich gegen Hin­der­nisse, Rätsel und Fallen behaupten, um ganz nach unten und aus dem AVZ zu gelangen.

Das Spiel kann bei einem Stockwerk begonnen werden und je nach Zeit und Lust um beliebig viele Stockwerke erweitert werden. Dabei können sowohl das AVZ von außen, als auch die Flure des inneren AVZs, verwendet werden. Ein wichtiges Augenmerk wird auf der guten Darstellung von Feuer, Rauch etc. liegen. Das Spiel ist beliebig erweiterbar, z. B. durch Feuerlöscher, eine Map mit den Fluchtwegen und weitere Features.

Es steht noch nicht fest, in welcher Sprache und mit welchem Framework dieses Projekt umgesetzt wird. Standardmäßig würden wir JavaScript mit Three.js nutzen; dies kann aber noch von den Teilnehmern entschieden werden.

Projekt B: Marble Folly (Geschicklichkeitsspiel)

Mit Marble Folly soll ein würdiger Nachfolger für das alte Spiel Marble Insanity programmiert werden. In dem Spiel kontrolliert der Spieler eine Murmel und muss diese durch verschiedene Welten zu einem Zielpunkt navigieren – und zwar ohne in Wasser, Lava oder vom Rand der Welt zu fallen.

Natürlich kann das Spiel um zusätzliche Inhalte erweitert werden und muss keineswegs ein direkter Klon von Marble Insanity werden! Allerdings ist in diesem Projekt die Spielmechanik bewusst sehr simpel, sodass das Hauptaugenmerk auf der Implementierung grafischer Ef­fekte liegt. Während in dem Klassiker die 3D-Grafik auf ein Minimum reduziert ist, soll unser Spiel durch seine Darstellungsqualität hervorstechen.

Es steht noch nicht fest, in welcher Sprache und mit welchem Framework dieses Projekt um­gesetzt wird. Standardmäßig würden wir JavaScript mit Three.js nutzen; dies kann aber noch von den Teilnehmern entschieden werden.

Projekt C: Plantex (Open-World-Spiel in Rust)

Die Mechanik dieses Spiels ähnelt der von Minecraft: Der Spieler kann sich in einer riesigen, prozedural generierten Welt bewegen und mit ihr interagieren. Allerdings wird Plantex ganz und gar keine Minecraft-Kopie. Zum einen besteht die Welt nicht aus Würfeln, sondern aus sechseckigen Säulen. Weiterhin kann der Spieler die Welt nicht so frei verändern wie in Minecraft; seine Hauptaufgabe besteht darin, Pflanzen auszusäen, Materialien zu sammeln und Gegenstände zu erbauen.

Auch bei diesem Projekt soll die Spielmechanik zunächst bewusst einfach gehalten werden, sodass grafische Effekte und prozedurale Generatoren eingebaut werden können. Neben den Algorithmen, welche die Welt möglichst hübsch auf dem Bildschirm darstellen sollen, werden nämlich auch Algorithmen benötigt, die eben jene Welt generieren. In unserem Spiel soll jeg­liche Geometrie – vom Terrain bis zu den Pflanzen – prozedural (einfach gesagt: zufällig) er­zeugt werden, sodass kein einziges 3D-Modell aus einer Datei geladen werden muss.

Dieses Projekt wird von Lukas betreut und in Rust – einer modernen, sicheren und extrem schnellen Programmiersprache – geschrieben. Weiterhin wird die Bibliothek glium benutzt, die als dünner Wrapper um OpenGL fungiert. Diese Wrapper-Bibliothek folgt Rust's Philosophie, möglichst viele schwer zu verstehende Laufzeitfehler in einfacher zu verstehende Fehler zur Kompilierzeit umzuwandeln. Für all diese Vorteile zahlt man mit einer steileren Lernkurve, die zu Beginn manchmal frustrieren kann. Natürlich wird den Teilnehmern am Anfang des Prak­ti­kums die Sprache sowie der Umgang mit glium beigebracht. Trotzdem ist diese Gruppe eher für besonders motivierte Studenten gedacht, die keine Mühe scheuen, sich in eine neue Sprache einzuarbeiten und an einem ambitionierten Projekt zu tüfteln.

Projekt D: Space Shooter (Spiel in JavaScript)

In dieser Gruppe soll ein 3D-Space-Shooter entwickelt werden, in dem der Spieler ein Raumschiff steuern und sich – ähnlich wie bei Asteroids – gegen Wellen verschiedener Feinde wehren muss, um dabei möglichst lange zu überleben.

Verschiedene Waffen und Waffenstärken sowie unterschiedliche Gegnertypen (z. B. unterschieden durch bewaffnet/unbewaffnet) sollen für Abwechslung und die Abgrenzung zu oben genanntem Spiel sorgen. Durch die drei Dimensionen ist es wichtig, auf unterschiedlichste Kollisionen und auf möglichst realistische Bewegungsmuster zu achten. Sollte das Grundgerüst einmal stehen, wären mögliche Erweiterungen z. B. ein Shop-System oder dynamische Spawns/Spawnpositionen.

Dieses Spiel wird in JavaScript mit three.js entwickelt. Teilweise wird auch mit Blender gearbeitet werden; diese Arbeit wird aber nicht im Vordergrund stehen.