Ampel,Animation,Leveldesign

Transcrição

Ampel,Animation,Leveldesign
C.I.T.Y. - Das Leben in der Stadt
WS 2009/2010
Projektarbeit von
Marko Flod – 110511 76
Mentor Prof. Dr.-Ing. Friedbert Jochum
Inhaltsverzeichnis
Realisierung eines Ampelsystems........................................................................................................3
Einleitung ........................................................................................................................................3
Prototypischer Editor zur Regelung einer Ampelschaltung.............................................................3
Modellierung der Fußgänger- und Autoampel.................................................................................4
Realisierung in Unity3D..................................................................................................................4
Modellierung und Animation...............................................................................................................6
Modellierungsrichtlinien..................................................................................................................6
Beispiel Modellierung einer Taube mit Animation..........................................................................6
Stadtgeneriung und Leveldesign........................................................................................................10
Eine Stadt wird gebaut...................................................................................................................10
Anforderungen an die Stadt...........................................................................................................10
Stadtgenerierung mit blended cities...............................................................................................11
Fazit...............................................................................................................................................14
Realisierung eines Ampelsystems
Einleitung
Reale Verkehrssituationen zu simulieren und nachzubauen ist eine der zentralen Themen in C.I.T.Y.
Dementsprechend ist es erforderlich, ein Ampelsystem zu realisieren. In unserem Fall kann ein
Ampelsystem aktiv oder passiv sein. In einem passiven Ampelsystem schalten die Ampeln ohne die
Beeinflussung des Spielers. In einem aktiven System ist der Spieler gezwungen, den Knopf an der
Fußgängerampel zu betätigen, damit die Ampel grün wird. In der realen Welt können beide Formen
zwar gemischt in einem Ampelsystem existieren, doch um die Komplexität erst einmal gering zu
halten, werden beide Formen getrennt eingesetzt.
Prototypischer Editor zur Regelung einer Ampelschaltung
Zuerst wurde über die Erstellung eines Editor überlegt, der die Schaltung der Ampeln regeln
könnte. Dadurch sollten komplexere sowie einfachere Verkehrskreuzungen realisiert werden
können. Da aber der Aufwand zu hoch wäre, jede Kreuzung in der Stadt Individuell zu erstellen, ist
der Editor vorerst prototypisch verblieben.
Aufbau des Prototyps:
Für jedes Ampelsystem müssen alle Ampeln in der Liste eingetragen werden. Jede Ampel kann
zwei verschiedene Zustände einnehmen: grün oder rot. Dann ist es möglich, eine Schaltgruppe
hinzuzufügen. Sie bestimmt den Zustand der einzelnen Ampeln. Eine einzige Schaltgruppe in der
Tabelle wäre zwecklos, es sind mindestens zwei erforderlich. Zu jeder kann angeben werden, wie
lange sie automatisch angeschaltet bleiben soll oder ob sie nur angeschaltet werden soll, wenn eine
Ampel vom Fußgänger gedrückt wurde. Durch einen solchen Editor wird es möglich, komplexere
Straßenkreuzungen zu realisieren, wie z.B. die Realisierung einer geschalteten Abbiegespur. Diese
Komplexität würde aber erfordern, dass mehr Aufwand betrieben wird, um aktive und passive
Ampelsysteme zu kombinieren.
Modellierung der Fußgänger- und Autoampel
Um ein Ampelssystem zu realisieren sind zwei verschiedene 3D-Modelle nötig: die Fußgänger- und
die Autoampel. Beide ähneln einander sehr, daher kann man aus der Autoampel sehr leicht die
Fußgängerampel ableiten. Beim Modellieren ist es wichtig, die Lichter als einzelne Objekte zu
erstellen. Dadurch ist es möglich die Textur für die Lichter später anzusprechen und zu wechseln.
Durch den Texturwechsel kann man zwischen den verschiedenen Zuständen der Ampel wechseln –
Bei einer Autoampel: rot, rot-gelb, grün, gelb.
Lichter der Ampel
Fußgängerampel in Blender
Realisierung in Unity3D
Das Schalten der Ampel wurde in Unity3D realisiert.
Ampelüberquerung in Unity3D
Wenn der Spieler nah genug an der Ampel ist, wird ein Trigger ausgelöst, der einen Zeitstempel für
die jeweiligen Zustände setzt.
Die grüne Box ist der
Trigger
Durch mehrere Zeitstempel wird reguliert, wann welche Ampel welchen Zustand hat.
startGreenPed = Time.time + waitTime;
endGreenPed = startGreenPed + waitTime;
//trafficlight car values
endGreenCar = startGreenPed - changeTime*2;
endYellowCar = startGreenPed - changeTime;
endRedCar = startGreenPed + waitTime + changeTime;
endRedYellowCar = startGreenPed + waitTime+ changeTime*2;
Bei der passiven Kreuzung besteht nicht die Notwendigkeit eines Triggers. Die Ampelschaltung
befindet sich in einem Kreislauf, der nicht von außen beeinflusst wird.
Modellierung und Animation
Modellierungsrichtlinien
Bevor wir beginnen zu modellieren, ist es wichtig, sich an bestimmten Richtlinien zu halten.
Die Polygonanzahl bei den Modellen sollte zwischen 500-60001 liegen. Sonst erhält man nicht
genügend FPS ( Frames per Second) und das Spiel fängt an zu ruckeln. Texturierung sollte über
eine UVmap gemacht werden. Dadurch müssen weniger Texturen während des Spiel geladen
werden.
Beispiel Modellierung einer Taube mit Animation
Tauben in einer Stadt sind keine Seltenheit und sie würden in der virtuelle Stadt eine Atmosphäre
erschaffen. Es wäre jedoch zwingend notwendig, dass sie sich bewegen können, denn welche Taube
bleibt starr auf der Straße stehen?
Als Vorlage für die Modellierung habe ich ein Bild einer Taube gewählt. Ich kann es in Blender2
einfügen und es als Hintergrundbild verwenden.
Die Verwendung eines Backgroundimages
Somit kann man Objekte aus der Realität vereinfacht in ein 3D-Modell übertragen.
Das Modell wurde in zwei verschiedene Teile getrennt: den Körper und die Füße. Somit wird nur
ein Fuß modelliert, der dann dupliziert wird.
1 http://unity3d.com/support/documentation/Manual/Modeling%20Optimized%20Characters.html
2 http://www.blender.org/ - einem kostenlosen 3D-Modellierungsprogramm
Damit die Modelle lebendiger und realer aussehen, werden sie texturiert. Eine Textur ist ein Bild,
das auf das Modell gelegt wird. Um das Modell zu texturieren wird eine UVmap der Taube
benötigt. Eine UVmap ist eine 2D-Abbildung des 3D-Modells. Das Modell hat Seiten, welche auf
eine Textur gelegt werden können. Dies nennt sich UVmapping.
Die Texturierung findet über eine UVmap statt:
UVmap der Taube, die auf eine Textur gelegt wurde
In Blender kann man Animationen erzeugen, die im Spiel abspielbar sind. Dafür ist es jedoch
zwingend notwendig, die Animation mit Knochen zu realisieren, weil Unity3D nur solche
Animationen unterstützt.
Ein Kochen, der den Hals repräsentiert
In dem Actioneditor verwaltet man die Animationen. Zuerst wähle ich einen Name für die Action
aus, damit sie später ansprechbar ist.
Für die Grundposition muss ich einen Keyframe einfügen. Der Keyframe speichert die Position,
Rotation und die Skalierung des Knochens. Dann spult man ein paar Frames vor und bewegt die
Knochen in die gewünschte Position. Dann wird nochmals ein Keyframe eingefügt. Zum Schluss
dupliziere ich den ersten Keyframe (die Grundposition) und füge ihn am Ende hinzu. Somit hat die
Animation einen fließenden Übergang.
Ausschnitt aus dem Actioneditor mit Keyframes
Die fertige Taube
Nach einem ähnlichen Verfahren wurde die U-Bahn-Station realisiert.
Bild gerendert in Blender
U-Bahn-Station in Unity eingefügt
Stadtgeneriung und Leveldesign
Eine Stadt wird gebaut
"Rom wurde auch nicht an einem Tag gebaut."
(Deutsches Sprichwort)
Aus der Realität ist es uns bereits bekannt, dass das Bauen z.B. von Häusern, Straßen und Parks ein
sehr komplexes Unterfangen darstellt. Es gibt verschiedene Kriterien (Wasser und Heizung in der
Wohnung, Breite der Straßenspuren, DIN-Normen usw.), die eingehalten werden müssen. Um diese
jedoch alle gemeinsam einzuhalten, ohne dass sie ineinander überfließen, benötigt es Planung. Dies
trifft in unserem Projekt C.I.T.Y. ebenfalls zu.
Wenn man den Projektaufbau anderer weltweit bekannten Spiele3 richten, ist es anhand der Anzahl
der Mitarbeiter fürs Level Design erkennbar, dass dieses von zentraler Bedeutung für die
Spielentwicklung ist.
Level Design beschäftigt sich viel mehr mit dem Aufbau des Levels, als mit den dort stattfindenden
Interaktionen. Die Aufgabe besteht viel mehr darin, eine Realisierung der ausgearbeiteten
Nutzeraufgaben und Interaktionen im Level zu ermöglichen.
Anforderungen an die Stadt
Im Projekt C.I.T.Y. wird ein 3D-Lernspiel entwickelt, dass sich zu dem Genre Serious Games
bekennt. Die Anforderungen beinhalten neben der Vermittlung von Lerninhalten, drücken des
Knopfes führt zu grünen Ampel , oder Verhaltensregeln, nicht über eine Rote Ampel gehen, die
Erschaffung einer virtuellen 3D-Stadt, mit welcher der Spieler auf folgende Arten interagieren
kann:
•
U-Bahn fahren
•
Bus fahren
•
Taxi fahren
•
Straßen verkehrsgerecht überqueren
Die genannten Interaktionsarten lassen erahnen, dass lange Fahrtstrecken umgesetzt werden
müssen. Schon während einer Bahnfahrtzeit von 10 Minuten wird eine weite Strecke zurück gelegt.
Dies ist teils mit einem Rennspiel zu vergleichen, wo der Spieler eine längere Strecke zurück zu
legen hat. Dies lässt die Gefahr aufkommen, dass das Level Design derart komplex wird, dass es ein
zu hoher Zeitaufwand nötig wird. Aber hierfür gibt es Lösungen, die wir später kennen lernen
werden.
Da der Spieler mit der U-Bahn fahren soll, ist es erforderlich, dass die Stadt noch folgende Objekte
3 Siehe Credits von GTA 4, Super Mario Galaxy, Zelda – Twilightprincess, Metal gear solid
enthält:
• U-Bahn-Station
• U-Bahn-Netz
• U-Bahn
Um das Bauen der Stadt zu vereinfachen, wird die U-Bahn unterirdisch angelet. In manchen Städten
verläuft die U-Bahn zwar sowohl unter- als auch oberirdisch. Jedoch ist es durch die notwendige
Komplexität bei der Simulation des Autoverkehrs und der Einbindung von Modellen wie Gleisen
oder Absperrungen übersichtlicher, die U-Bahn nur unterirdisch fahren zu lassen.
Für den Fußgängern ergeben sich folgende wichtige Objekte in der virtuellen Stadt:
•
•
•
Fußgängerüberweg
Fußgängerampel
Bürgersteig
In der Realität existieren des Öfteren zwei Fahrstreifen pro Fahrbahn für Autos. Ein hohes
Verkehrsaufkommen erschwert die Übersicht der Verkehrssituation, wodurch es ein wichtiges
Lernziel ist, in solchen Situationen die Übersicht zu bewahren. Daraus ergeben sich für das
Verkehrsnetz der KFZs und LKWs folgende Eigenschaften:
•
•
•
Fahrbahnen können auch zweispurig sein
Kreuzungen
Autoampeln
Weitere Verkehrsobjekte, die in der Verkehr betreffen in der Stadt gebraucht werden:
•
•
Verkehrszeichen
Verkehrsschilder
Da es unser Ziel ist, eine Stadt zu bauen, die die Realität möglichst widerspiegelt, haben wir uns
entschieden, haben wir uns am Kölner Straßennetz orientiert. Auch der Städtischen Stil von Köln
sollte berücksichtigt werden.
Stadtgenerierung mit blended cities
Die Stadt per Hand zu realisieren, wäre ein zu hoher zeitlicher Aufwand. Dies hat sich schon
gezeigt beim Nachbauen des Kölner Straßennetzes in Blender.
Straßenbau in Blender
Viele Fragen sind offen geblieben. Die Realisierung von Bürgersteigen zeigt sich als sehr
problematisch. Und die Dauer der Umsetzung ist viel zu hoch. Eine andere Alternative muss her.
Das Straßennetz rechteckig zu realisieren, wäre eine andere Möglichkeit, wie im folgendem
Beispiel:
Straßenbau in Blender
Eine solche Umsetzung würde dem Straßennetz von Köln dann allerdings nicht ähneln. Auch in
diesem Falle würde die Zeit zu lange dauern um dies für eine größere Stadt zu realisieren. Diese
Lösung stellt ebenfalls keine zufriedene Lösung dar.
Leider gibt es fast nur kostenpflichtige Stadtgeneriungstools4, bis auf eines:
Blended Cities (http://jerome.le.chat.free.fr/index.php/en/blender/scripts/city-engine.html)
Blended Cities ist ein Skript, das in Blender ausgeführt wird. Wenn das Skript geladen ist, kann man
an Hand vieler Einstellenungsmöglichkeiten eine Stadt generieren lassen. Das Straßennetz wird An
Hand eines Meshs generiert. Ein solches Mesh läßt sich sehr einfach erstellen:
4 Cityengine: http://www.procedural.com/
Anhand dieses Meshs werden die Straßen erstellt
Wie man erkennen kann, müssen die Straßen nicht rechtwinklig zueinander stehen. Dies wäre zum
Nachbauen des Kölner Straßenverkehrs sehr passend. Des Weiteren kann man für jede einzelne
Straße bestimmen ob es eine Einbahn- oder mehrspurige Straße sein soll. Zu den jeweiligen Straßen
werden dann Bürgersteige generiert.
Aber nicht nur Straßen und Bürgersteige werden erstellt, sondern Häuser ebenfalls.
Blended Cities bietet eine Vielzahl an
Einstellungen.
Man kann hier durch z.B. bestimmen, ob die Stadt viele oder wenige Hochhäuser haben soll.
Nach der Generierung erhält man eine Stadt:
Fertig generierte Stadt
Fazit
Blended Cities bietet eine sehr gute Grundlage, um eine Stadt zu generieren. Es gibt Plugins für das
Tool, welche noch bessere Häuser generieren lassen. Es besteht zudem die Möglichkeit eigene
Häuser ebenfalls mitgenerieren zu lasssen, was sich für unser Projekt als vorteilhaft erweist.