Colours and Emotion [The B Files]

Nach einer doch eigentlich erfolgreich verlaufenen Präsentation diese Woche, wo ich vor den Kommilitonen meine Fortschritte vorgestellt habe, und dabei eigentlich feedbackmässig nicht allzu schlecht weggekommen bin, habe ich den Rest der Woche vor allem darauf verwendet, am visuellen Stil zu arbeiten. Hätte sich dieser als nicht machbar erwiesen, hätte da schleunigst noch ein neues Konzept her müssen. Glücklicherweise scheint dies nicht der Fall zu sein.

Particles

Dank der Hilfe von Mario von Rickenbach, der mir freundlicherweise die Scripts gegeben hat, die einen möglichen Weg für Compositing und Blendung in Unity aufzeigten, konnte ich ein System aufbauen, mit dem ich das Aussehen des Levels komplett umfärben kann.

Im Moment arbeite ich mit verschiedenen Layers, die von eigenen Kameras aufgenommen werden, und dann mit einem Composite-Shader zusammengerechnet werden. Die Layer sind im Moment folgendermassen aufgebaut:

  • Layer 1: Farbe für Weiss (färbt alle hellen Stellen des Levels ein)
  • Layer 2: Farbe für Schwarz (färbt alle dunklen Stellen des Levels ein – damit kann ich z. B. Objekte einfärben oder aber Effekte erreichen, wie sie etwa in Lain zu sehen sind)
  • Layer 3: Luminance (Ein weiterer Kanal – kann je nachdem für interessante Effekte sorgen, indem hier zusätzliche weisse oder dunkle Partikeleffekte hinzugefügt werden, um die Hintergründe durchscheinen zu lassen)
  • Layer 4: Highlights

Der Fortschritt meiner Bemühungen sind in diesem Video dokumentiert:

Der vierte Layer sollte eigentlich dazu dienen, wiederum weisse Elemente in das Bild einzubringen, da mit der momentanen Technik das Problem besteht, dass kein Objekt heller ist als die Farbe von Layer 1. Alleine mit einem eigenen Layer ist das Problem dabei nicht zu lösen, da dabei die Geometrie, die diese weissen Objekte überdeckt, nicht berücksichtigt wird – dies wird auch in der letzten Sequenz im Video ersichtlich, wo die Lichtpunkte durch die Silhouette durchscheinen.

Mit grosser Wahrscheinlichkeit wird es darauf hinauslaufen, dass ich für diese Effekte einen speziellen Replacement Shader schreiben muss, der ausser den weissen Elementen alles andere schwarz rendert, damit ich so wieder eine RenderTexture bekomme, die ich in das Bild hineinrechnen kann.

Das Problem ist auch hier – wie immer – die Leistung. Viele Partikeleffekte machen zwar, dass das Spiel interessant aussieht, aber fressen auch ziemlich viel Leistung; Leistung, die ich auf Schulcomputern nicht erwarten kann.

Je nachdem werde ich die Scripts umschreiben müssen, und weniger hochaufgelöste Render-Textures verwenden, wie im Blurst-Blog beschrieben. Dies müsste ich machen, sobald ich bemerken würde, dass ich zuviele Partikel-Effekte verwende und deshalb die Leistung spürbar darunter leidet.

More Shifts

Seit der letzten Woche sind mir weitere mögliche Shifts eingefallen.

Never Let Me Go

Ein Zukunftsszenario: durch die steigende Umweltbelastung werden immer mehr Menschen unfruchtbar – aber wollen sich trotzdem nicht nehmen lassen, ein Kind zu haben. Während die Adoption immer schwieriger wird, hat ein wissenschaftliches Verfahren es möglich gemacht, Menschen zu klonen. Problematisch ist dabei, dass die Gesellschaft nicht mit offenen Armen auf diese Klone reagiert, sondern sie stigmatisiert und ausgrenzt. „Du Scheiss-Klon“ avanciert auf dem Schulhof zum Allgemeingut, das man jedem und jeder nachrufen kann, die etwas eigenartig erscheint.

Internat

Auch ein Internat würde gute Möglichkeiten bieten, den Aktionsradius des Spielers zu begrenzen. Hier stellt sich aber ebenfalls die Frage, inwiefern das für Schweizer Schüler nachvollziehbar ist, da ja die Mehrheit von ihnen nie in einem Internat war.

Wohnblock

Vielleicht sollte man auch nicht zu weit weg gehen, um zu sehen, wo sich Möglichkeiten bieten.

Die meisten Jugendlichen sind in diesem Alter schon einmal umgezogen oder haben zumindest die Schule gewechselt. Wird der Spieler damit konfrontiert, so müssen keine Hintergrund-Informationen vermittelt werden, die dem Spielercharakter zu Beginn des Spiels schon bekannt sein müssen; stattdessen muss er sich in eine schon bestehende Gemeinschaft einfügen, und dabei herausfinden, mit wem man Koalitionen bildet, und für wen man in diesem Fall sein darf, und gegen wen man sein muss, um sich die Gunst der (vermeintlichen?) Anführer zu erarbeiten.

Dieses Szenario würde in einem Wohnblock spielen, in dem es weitere Jugendliche in einem ähnlichen Alter hat, die sich jeweils im Innenhof dieses Blocks treffen. Auch hier sind möglicherweise nicht alle bestens miteinander befreundet – man trifft sich, weil man am selben Ort wohnt. Eine solche Wohnblock-Situation ermöglicht auch, dass ohne grössere Probleme weitere Figuren eingeführt werden können, selbst in späteren Stufen der Entwicklung.

Zusammen mit einer Tiefgarage, einem begehbaren Flachdach und besagtem Innenhof sollte es auch genügend „Bühnen“ geben, die bespielt werden können.

Mit grosser Wahrscheinlichkeit wird das mein endgültiges Szenario sein, da es einem TV-Serienaufbau am nächsten kommt und verhältnismässig viel Freiraum bietet.

Was macht einen Charakter aus?

Eine meiner Ideen für diese Arbeit (durchaus inspiriert vom ECIRCUS Projekt) war es, quasi eigenständige Agenten zu haben, die Emotionen zeigen und darauf basierend agieren. Das Ziel des Games soll ja auch sein, dass unterschiedliche Leute anders reagieren.

Natürlich ist es einfach, einen Charakter zu definieren, wenn man einfach all seine (Re-)Aktionen vorschreibt – aber was muss man machen, um davon weg zu kommen, hin zu einer Simulation?

Es wäre nicht so, dass ich der erste wäre, der dies versucht. Das ECIRCUS Projekt hat dies ebenfalls im Rahmen eines Games zur Bullying-Prävention gemacht – und dabei das OCC-Modell1 modelliert.2

In meinem Fall wäre das wahrscheinlich zu hoch gegriffen, vor allem, weil in diesem Modell auch noch die Erinnerung eines Agenten berücksichtigt werden, durch die zukünftige Entscheidungen ebenfalls beeinflusst werden.3

Wenn man versucht, ein Standard-Repertoire an Emotionen zu finden, so wird man leider enttäuscht. Das zeigt alleine die Tatsache, dass auch EmotionML, ein Vorschlag zur Encodierung von Emotionen in einem XML-Format, keine fixen Kategorien vorschlägt, sondern nur die Möglichkeit bietet, auf verschiedene Bibliotheken zu verweisen.4

Ich werde also selber einen Weg finden müssen, auf eine effiziente Art „Charakter“ zu simulieren. Das folgende ist deshalb ein Versuch davon – der, zumindest zur Zeit, noch kaum mit festen Theorien untermauert ist.

Meine momentane Überlegung zielt darauf, zwei verschiedene Mechanismen zu verwenden. Das erste ist ein reaktiver Mechanismus. Menschen haben unterschiedliche Muster, wie sie auf die Aussagen anderer Menschen und den darin enthaltenen (oder vermeintlichen) Emotionen reagieren. Wird zum Beispiel jemand verärgert angegriffen, so kann er selber verärgert reagieren – oder auch verängstigt, eingeschüchtert oder defensiv. Dieser erste Mechanismus wäre also vorerst nur eine reine Zuordnungstabelle: Wenn der Gesprächspartner diese Emotion zeigt, dann zeigt der Charakter diese Emotion.

Nun ist es natürlich nicht so, dass das immer stimmt. Wenn ich schon sonst verärgert bin, ist es wahrscheinlicher, dass ich bei einem Angriff ebenfalls verärgert reagiere, selbst wenn dies normalerweise nicht meine Reaktion wäre. Diese Reaktionstabelle müsste also mit der momentanen Stimmung des Charakters modifiziert werden.

Der zweite Mechanismus definiert die momentane Stimmung sowie die Geschwindigkeit der Stimmungsänderung eines Charakters. Anhand mehrerer Dimensionen,5 die jeweils eine negative und positive Ausprägung haben, können komplexe Emotionen erfasst werden. Indem jeder Charakter individuelle Abfall-Kurven zugewiesen bekommt, kann modelliert werden, wie schnell er von einer ausgeglichenen, neutralen Position zu einer Extremposition ausschlägt, und danach wieder in die Neutral-Position zurückfällt. Damit können Charaktere gestaltet werden: Steil ansteigende Kurven definieren einen Hitzkopf, den man schnell „auf die Palme jagen kann“; flache Kurven definieren eine ausgeglichene Persönlichkeit, die nicht so leicht aus der Ruhe zu bringen ist, aber, einmal von Emotionen gepackt, nicht so leicht wieder zu beruhigen ist.

Ein Charakter-Imprint-Mechanismus, der die Verhaltensweisen eines Spielers aufnehmen soll und danach wiedergeben soll, müsste also mit der Anpassung dieser Werte arbeiten. Dabei ist es sehr wahrscheinlich einfacher, eine Statistik darüber zu führen, auf welche Emotionen der Spieler mit welchen Emotionen reagiert und diese dann zu replizieren, als die Kurven zu verändern.

Natürlich – ganz einfach ist das natürlich auch nicht. Ein solches System setzt voraus, dass die jeweilige Emotion ebenfalls in den Aussagen eincodiert ist und dass jeder Charakter die einzelnen Aussagen auch noch in verschiedenen Emotionen „vorrätig“ hat. Da stellt sich dann schon fast die Frage, ob man nicht das ganze Konversationssystem auf Text- und Emotionserkennung umstellt …

Prioritäten

Angesichts solcher Überlegungen mit gleichzeitigem Blick auf die langsam knapper werdende Zeit habe ich mir noch einmal überlegt, welche Komponenten hier sein müssen, damit ich bei der Bachelor-Präsentation überhaupt etwas zeigen kann.

In den nächsten Wochen wird es deshalb vor allem darum gehen, ein System zu gestalten, auf dem alles zusätzliche (schöne, interessante, aber aufwendige) schlussendlich aufbauen kann.

D. h. ich brauche in einer ersten Phase

  • Erste Modelle, die ich einsetzen kann (Räume/Level, sowie ca. 3 Figuren)
  • Einen funktionierenden First-Person-Kontroller, mit dem ich die Adventure-üblichen Dinge machen kann, d. h. Dinge aufnehmen, öffnen, betrachten, mit Personen sprechen etc.
  • Eine Grund-KI für die Agenten, damit mit ihnen gesprochen werden kann, und der einen emotionalen Status hat, der abgerufen und angezeigt werden kann.
  • Darauf aufbauend der farbige Hintergrund, der für jeden Charakter unterschiedlich aussehen soll.
  • Auch der Sound sollte hier festgelegt werden.

Damit (und mit ziemlich viel Skripting) sollte es möglich sein, eine erste Demo zusammenzubekommen. In einer zweiten Phase können weitere Elemente hinzukommen, die das Spiel komplexer machen:

  • Ein Charakter-System (siehe oben), das beeinflusst werden kann vom Spieler über
  • Charakter-Imprints, d. h. der NPC verhält sich so, wie sich der Spieler zuvor verhalten hat.

Allein das sollte schon einiges an Arbeit geben, bis es effektiv funktioniert. In einer dritten Phase – die sehr wahrscheinlich erst nach dem Bachelor angegangen werden kann, könnten noch weitere Elemente eingebaut werden:

  • Ein Konversationssystem für Nicht-Spieler-Charaktere selber (d. h. die NPCs „hören“, was andere NPCs sagen und verändern darauf basierend ihre Beziehung zu den anderen)
  • Eine Möglichkeit für Spieler, ihre eigenen Emotionen auszudrücken, indem sie Emoticons eingeben können.
  • Ein Achievement-System

… und weiteres mehr, das das Spiel interessanter, aber auf komplizierter machen könnte.

Ich denke, dass ich alleine mit der ersten Phase noch genügend Arbeit haben werde … besser, ich mache mich an die Arbeit.

Connections

Social Tags: Product:

Neuen Kommentar schreiben