In diesem Tutorial soll es um den Bau von Kreuzungen gehen. Im Folgenden werden die unterschiedlichen Methoden kurz erläutert und ein kleiner Einblick anhand eines Beispiels gegeben. Die gezeigte Methode soll weder eine Best-Practise-Vorgabe sein, noch den Anspruch haben, allgemeingültig für alle Arten von Kreuzungen zu sein.
In diesem Tutorial wird auf Blender 2.71 zurückgegriffen, es kann aber jede beliebige Version ab 2.5 genutzt werden. Es wird eine Kreuzung auf Basis von eigenen Splines und Texturen gebaut. Bei größeren Kreuzungen ist eine (handschriftliche) Skizze hilfreich, um sich die Verkehrsführung schon vorher vor Augen zu führen; bei der beispielhaft vorliegenden einfachen T-Kreuzung ist dies aber nicht notwendig.
1. Methoden
Die verschiedenen Methoden unterscheiden sich hauptsächlich in Funktionalität und Grad der Schwierigkeit bzw. benötigten Vorkenntnissen.
Methode | Vorteile | Nachteile | |
---|---|---|---|
Terrain-Splines |
Die Kreuzung wird komplett im Editor mithilfe von Splines gebaut. Es gibt viele Terrain-Spline-Downloads in der Webdisk und im Forum. |
Die einfachste Möglichkeit, keine Blender-Kenntnisse erforderlich |
Flackern von übereinander liegenden Splines, keine Kollision von Fahrzeugen untereinander bei Benutzung von "Invis-Splines", Ampelschaltungen nur begrenzt möglich, meist viele Splines nötig |
Splines vorbauen & Import in Blender |
Es wird zuerst ein Grundgerüst (z.B. der Gehweg) gebaut. Dieser wird in Blender importiert und anschließend die Kreuzung vervollständigt. Diese Methode ist zwar unpopulär, liefert aber angemessene Ergebnisse. |
Keine tiefen Blender-Kenntnisse erforderlich, Ampelschaltung möglich, schnelles Einpassen der Kreuzung an Splines, Export "als Ganzes" |
Hohe Anzahl an Vertices, viel Arbeitsaufwand, nicht performance-freundlich |
Bau nach Kreuzungs-SDK |
Es wird mit den Vorlagen aus dem Kreuzungs-SDK gebaut. Dies ist vorwiegend für rechtwinklige Kreuzungen auf Original-Spline-Basis geeignet. |
Kein Beschäftigen mit Texturen, da schon vorhanden, nur wenig Blenderkenntnisse erforderlich, uneingeschränkte Ampelschaltung möglich, Aufwand gering, Wiederverwendung |
Unflexibel, feste Texturen |
Bau komplett in Blender |
Die komplette Kreuzung wird in Blender gebaut. |
Bestmögliches Ergebnis, schont Performance, beste Flexibilität, uneingeschränkte Ampelschaltung möglich, Wiederverwendung, Export "als Ganzes" |
Tiefe Blender-Kenntnisse erforderlich, hoher Aufwand, Fehlerpotential hoch |
2. Bauen der Kreuzung in Blender
Der folgende Teil stellt ein Bautagebuch einer Kreuzung dar.
2.1. Weiterführende Hilfen
Der Objekt- und besonders der Kreuzungsbau ist ein sehr komplexes Thema. In diesem Tutorial wird Bezug auf Folgendes genommen:
- Grundlegende Funktionen von Blender und wichtige Tastaturkürzel (Blender-Tutorial, Video-Serie, Tastaturkürzel 1, Tastaturkürzel 2)
- Export eines Objekts von Blender in OMSI
- Aufbau von Objekten und .sco-Dateien
- Kreuzungs-Editor (s. inoffizielles SDK-Handbuch (Datei Kreuzungen_1_02.pdf) S.19ff. und Vorwort)
2.2. Vorbau
Vor dem Modellieren einer Kreuzung steht (insbesondere bei realen Karten) die Basis fest: Die Splines, in die die Kreuzung später "eingepasst" wird (Abb. 1). Diese können im OMSI-Editor unter dem Reiter Spline-Export in ein für Blender lesbares Format (.x) exportiert werden. Es werden erst alle beteiligten Splines ausgewählt und dann an einem beliebigen Ort gespeichert (Abb. 2). Das fertige Kreuzungsobjekt wird die volle Länge der Splines nicht ausnutzen - benötigt werden die Splines aber, um die Kreuzung so nahtlos wie möglich an die Splines anzuschließen. Dies kann insbesondere in Kurven oder bei Steigungen hilfreich sein, um die Ästhetik zu wahren.
Nun ist die Vorarbeit im OMSI-Editor beendet und es kann mit Blender fortgefahren werden. Nach einem Import der .x-Datei in Blender präsentiert sich das Objekt um 90° gedreht was schnell korrigiert werden kann. Im Edit-Mode müssen zusätzlich noch die Normals umgedreht werden (W -> Flip Normals). Um sicherzugehen, kann die Funktion Backface Culling aktiviert werden (im N-Menü von Blender unter Shading).
2.3. Texturen vorbereiten
Jetzt beginnt die eigentliche Arbeit. In der Solid- und Texture-Ansicht präsentiert sich das Objekt noch komplett weiß und untexturiert (Abb. 3a und 3b). Das wird nun geändert, indem Texturen hinzugefügt werden. Für jede Textur wird jeweils ein unabhängiges Material erstellt. Um unschöne Effekte zu vermeiden, werden folgende Einstellungen genutzt (Abb. 4):
- Diffuse-Farbe auf 1.0/1.0/1.0 (100% weiß)
- Diffuse-Intensity auf 1.0
- Specular-Intensity auf 0.0
Wie im oben verlinkten Artikel zu Blender verlinkt, bekommt jedes Material genau eine Textur (einen Reiter weiter). Als Typ wird ein Bild gewählt (Abb. 5). Diese Prozedur wird für alle Texturen wiederholt.
In diesem Beispiel gibt es nun vier Materials mit je einer Textur. Diese sind aber noch nicht auf das Objekt aufgetragen. Um das zu tun, werden im Edit-Mode zunächst alle doppelten Punkte entfernt (W -> Remove Doubles) und dann die Dreiecke zu Rechtecken konvertiert (Alles auswählen -> ALT+J).
Anschließend wird das Fenster geteilt, indem die rechte obere Ecke (Abb. 6) nach links gezogen wird. Links unten im neuen Fenster wird nun auf den UV/Image Editor gewechselt und im großen Fenster auf die Sicht von oben (Numpad 7) geschaltet. Im Edit-Mode werden nun für jede Textur die zugehörigen Faces ausgewählt, dann das passende Material ausgewählt und Assign gedrückt. Danach wird im UV/Image Editor noch die Textur ausgewählt. Die Kreuzung sollte sich jetzt wie in Abb. 7 zeigen. Diese Aktion wird abermals für alle Texturen und zugehörigen Faces wiederholt bis das Objekt vollständig texturiert ist. (Abb. 8 )
2.4. Modellierung mit Curve- und Array-Modifier
Nun wird mit der eigentlichen Modellierung begonnen. Zunächst werden einzelne Abschnitte, die nicht mehr benötigt werden, weil sie später unter der Kreuzung verschwinden, gelöscht. In diesem Beispiel ist das unter anderem die Grünfläche zwischen den späteren Kreuzungsstücken, die nachher unter der Straße verschwindet, sowie der Randstein, da er in einer Kurve zur Einmündung verläuft (Abb. 9). Das aktuelle Objekt kann nun mit einem Klick rechts oben auf das Auge versteckt werden, weil es bei der folgenden Arbeit zunächst im Weg steht. Die Texturen sind erst einmal wieder unwichtig, also kann in die Solid-Sicht gewechselt werden.
Nun werden Segmente für die Kurven gebaut. Für die spätere Verwendung ist es wichtig, die Höhen einzuhalten: Die folgenden Segmente werden 0.1m tiefer gebaut, sodass der Boden auf -0.1m liegt; die Straße auf 0.00m und der Gehweg auf 0.15m Höhe. Nun wird ein "Kurvensegment" der Länge 1m (oder einer anderen beliebigen Länge, die sogar im Nachhinein noch verändert werden kann) gebaut.
[warningbox]Im Folgenden wird der Curve-Modifier zusammen mit dem Array-Modifier benutzt. Beide Modifier arbeiten mit der positiven x-Achse als Richtung und dem Origo (0|0|0) als Nullpunkt.[/warningbox]
Wichtig ist dabei, dass das Segment am Nullpunkt von einem Fixpunkt (z.B. die rechte oder linke Ecke) startet, der an einer Kante liegt. Das Segment wird in Richtung der x-Achse vom Nullpunkt aus gebaut (Abb. 10).
Dies wiederholen wir wieder mit allen möglichen Segmenten (hier im Beispiel noch die Kante ohne Gehweg für die linke Kurve).
Nun liegen die Segmente vor und müssen nur noch eingepasst werden. In diesem Fall werden zwei Bezier-Curves hinzugefügt, die an die Splines angepasst werden (Abb. 11). Wichtig ist dabei, dass die Kurve nur im Edit-Mode verändert wird und die vorher festgelegten Fixpunkte verbindet (In unserem Beispiel die Ränder der Straße). Ansonsten ist die Curve beliebig anpassbar, die Resolution sollte aber auf 64 gesetzt werden und Radien & Co. nicht verändert werden. Für die rechte Seite fügen wir analog dazu ebenfalls eine neue Curve hinzu.
[warningbox]Der Curve-Modifier funktioniert nicht richtig, wenn der Objektmittelpunkt vom Segment und von der Kurve verschoben worden sind. Beide Objektmittelpunkte müssen im Origo (0|0|0) liegen. Um dies wiederherzustellen, kann man mit ALT+G die Position löschen.[/warningbox]
Nun wird das Segment ausgewählt und Array- und Curve-Modifier hinzugefügt. Die Einstellungen finden sich in Abb. 12 (C1 ist hierbei der Name der Bezier-Curve). Nun sollte das ganze wie eine Kurve aussehen (Abb. 12). Auch diesen Schritt wiederholen wir für andere Seiten pro Kurve.
Nun können beide Modifier von oben nach unten angewendet werden (auf Apply drücken). Wieder zurück im Obect-Mode werden alle Kurven mit dem Hauptmesh der Splines vereinigt (STRG+J). Nun sollte das ganze wie in Abb. 13 aussehen. Es können wieder doppelte Punkte entfernt werden. Das fehlende Stück zu den anschließenden Splines wird mit Auswahl der entsprechenden Punkte und F hinzugefügt. Bei kleineren Lücken können auch die Eckpunkte verschoben werden und am Rest eingerastet werden (Abb. 14). Nach all den Schritten wird wieder ein Remove Doubles ausgeführt und die Modellierung ist fertig.
2.5. Modellierung mit Bridge Edge Loop
Diese Funktion ist in der Lage, Enden zweier Stücke direkt zu verbinden. Dazu werden erst die beiden zu verbindenden Stücke ausgewählt und dann per SPACE und dem Suchen nach Bridge Edge die Funktion angewendet.
2.6. Modellierung mit Spin-Modifier
Bei "geraden" Kreuzungen, die nicht an Splines angepasst sind, sondern auf Basis von Koordinaten arbeiten, kann auch der Spin-Modifier genutzt werden, um Kurven zu erzeugen.
2.7.
Mapping der Texturen
Nun zeigt sich der eben gebaute Teil wieder untexturiert. Deshalb wird die Prozedur vom Abschnitt Texturen (Abb. 6-8) wiederholt. Nun muss noch das Mapping angepasst werden.
Der Asphalt wird mithilfe von U -> Project From View gemappt bis nach Ausprobieren von verschiedenen Zoom-Stufen das Ergebnis optimal wird. Die "Kurven"-Flächen mit dem Randstein werden etwas anders texturiert: Zunächst werden die Flächen ausgewählt und als letzte Fläche die angrenzende Fläche der Splines. Nach U -> Follow Active Quads präsentiert sich der Randstein fertig texturiert (Abb. 16). Dies wird ebenfalls für alle restlichen Flächen wiederholt.
Nun ist die gesamte Kreuzung fertig texturiert. Jetzt müssen nur noch die restlichen angrenzenden Spline-Stücke, die nicht mehr zur Kreuzung gehören, von der eigentlichen Kreuzung abgetrennt werden. Das wird gemacht, indem mithilfe von den gängigen Auswahlwerkzeugen (C für Kreisauswahl; B für Rechtecksauswahl; ALT+RMT zum Markieren zusammenhängender Flächen) alle Flächen unserer Kreuzung markiert werden. Anschließend trennt P -> Selection die Teile ab.
Nun kann ggf. die Kreuzung noch auf der x- und y-Achse verschoben werden damit die Kreuzung im Editor einfacher platziert wird.
2.8. Export & Einbindung in OMSI
Omsi stellt Flächen immer nur in eine Richtung dar, das ist vergleichbar damit, dass man in Häusern keine Wand von innen sieht. Die sogenannten "Normals" zeigen rechtwinklig von der Fläche in die Richtung der Außenseite, bei Kreuzungen also nach oben.
Das Mesh ist nun soweit fertig. Um die Normals zu überprüfen, geht man im Edit Mode in der rechten Leiste der 3D-Ansicht auf den Punkt Mesh Display. Unter Normals werden Flächen ausgewählt. Jetzt sieht man Linien, die aus den Flächen herausragen. Die Striche sollten nach oben zeigen. Bei jeden Flächen, wo dies nicht der Fall ist, wird W -> Flip Normals angewendet. Zeigen alle Normalen nach Außen, kann das Objekt in eine .o3d-Datei exportiert werden. (Dazu muss das Objekt ausgewählt werden.)
Nun erstellen wird die .sco-Datei erstellt, Name und die Gruppen dürfen natürlich beliebig gewählt werden.
[friendlyname]
Einmundung Moskauer Ring
[groups]
2
Wuerzburg
Kreuzungen
[rendertype]
surface
[LightMapMapping]
[fixed]
[absheight]
[surface]
[collision_mesh]
Moskauer.o3d
###################
Model Data
###################
[mesh]
Moskauer.o3d
Alles anzeigen
Damit ist die Objektdatei komplett. Wenn alles richtig funktioniert hat, können wir die Kreuzung schon im Editor platzieren.
2.9. Pfade
Jetzt fehlen nur noch die Pfade. Um überhaupt eine Basis zu bekommen, an der die Pfade eingepasst werden können, wird in Blender die Position und Rotation der Splines herausgefunden. An jedem herausgehenden Strang wird der Mittelpunkt der Spline markiert (dieser liegt genau zwischen zwei Punkten) und dessen globale x- und y-Koordinaten gemerkt oder aufgeschrieben (Abb. 17).
Um den Winkel herauszufinden, wird ein Dreieck zu Hilfe genommen, indem ein Punkt der Eckkante auf der x-Achse extruiert (E -> X) und eine Fläche darüber erstellt wird (F). Dann werden unter Mesh Display die Winkel angezeigt und ebenfalls notiert (Abb. 18).
Nun wird das Objekt im Kreuzungs-Editor geöffnet. Gemäß der vorher aufgeschriebenen Daten kann nun die Lokalisierung der Spline Templates bestimmt werden. Stimmt die Drehung nicht, muss mit den Werten experimentiert werden. (z. B. Vorzeichenwechsel, ±90, ±180 etc.)
Sind alle Werte korrekt, können die Pfade hinzugefügt werden, Blinker und ggf. auch Ampelschaltungen gesetzt werden und die Kreuzung wird fertig gespeichert.
Nun ist die Kreuzung fertig und kann verwendet werden.
So sieht die fertige Kreuzung im Editor aus ...
... und so eingepasst in die Splines in OMSI:
3. Weiterführende Links
- Video-Tutorial von NiLe