Daten aus Länder-Geoportalen in den TS übernehmen (3d-Modelle und Landschaft)

Discord Einladung
Trete unserem Discord-Server bei (klicke hier zum Beitreten).
  • Ausgangslage

    Bei unserem Streckenprojekt "Oberpfalz" gibt es diverse Ortsdurchfahrten. Bei einigen liegen Teile der Ortschaften am Berg bzw im Tal, also deutlich sichtbar von der Lokführerperspektive. Als Beispiel genannt seien hier Nabburg und Amberg, oder Maxhütte-Haidhof oder auch Etzelwang. Die Nutzung von vielfach vorhandenen Haus-Objekten schied aus, wir wollten so authentisch wie möglich bleiben. Um hier überhaupt einigermaßen voranzukommen, hatte ich mit den Grundrissen aus OpenStreetMap gearbeitet und experimentiert. Es blieb aber immer noch ein aufwändiger Arbeitsschritt.


    Erste Überlegungen

    Bereits erwähnt, habe ich auf der Basis von OpenStreetMap-Daten (Grundrissen) Bereiche in Bodenwöhr Nord (Blechhammer) gestaltet. Die Häuser sind zwar individuell, aber immer noch mit zu großem Aufwand gestaltet. So habe ich den Schritt abgebrochen, bei dem Beispiel fehlen deshalb auch noch Texturen.

    Mittlerweile hatte ich mit Planungsdaten zu tun und im Rahmen von Planungen für eine Schule den Train Simulator als Planunsinstrument genutzt. Konstruiert hatte ich einen Hochbahnsteig der Stadtbahn direkt an einem Schulneubau mit direktem Zugang zum Schulhof in der Ebene 1 der Schule.

    Dabei bin ich dann auf die bei der Stadtverwaltung vorhandenen Daten im Geoportal gestoßen.

  • wir wollten so authentisch wie möglich bleiben

    Irgendwo muss man im TSC Grenzen beim Streckenbau setzen, sonst wirds nie fertig. Ich weiss nicht, welche Provider ihr freigeschaltet habt, aber

    mir fallen auf anhieb diverse Häuser aus Konstanz-Villingen ein, die an der Stelle hinpassen würden.


    Wir haben aktuell genau die gleiche Diskussion in Hildesheim. Streng genommen müsste man dort jeder Häuserfront am Bahnhof in Blender nachbauen....aber wirds dann fertig? Eher nicht. Man muss sich auch die Frage stellen, ob es überhaupt noch irgendwann ein Publikum für das eigene Projekt gibt, wenn man etliche Jahre am basteln ist. Wir haben diesen Faktor bei unserem Projekt immer im Blick, wenn wir uns entscheiden müssen, wie authentisch irgendwas sein soll. Am Ende des Tages wollen die Spieler halt spielen und etwas im Downloadbereich sehen.

    „Wer die Freiheit aufgibt um Sicherheit zu gewinnen, der wird am Ende beides verlieren.“
    Benjamin Franklin

    4 Mal editiert, zuletzt von tom87 ()

  • Die Daten im Geoportal

    Bayern, was für unser Projekt entscheidend ist, liefert Daten im CityGML-Dateiformat (City Geography Markup Language).

    Das Datenformat gehört zu den Opendata-Formaten und ist damit frei verfügbar. In den CityGML-Daten sind dreidimensionale digitale Modelle von Gebäuden enthalten, die auf der amtlichen Liegenschaftskarte basieren, also schon recht genau sind. Dazu gehört ein digitales Geländemodell zur Beschreibung der Erdoberfläche. Bei den digitalen Gebäudemodellen gibt es verschiedene Detailstufen, einen Level of Detail (LoD).

    - LoD1 Daten beinhalten einfache Klötzchen ohne Berücksichtigung der tatsächlichen Dachform.

    - LoD2 Daten beinhalten zusätzlich allen Gebäuden zugeordnete standardisierte Dachformen. Sind die Dachformen zu komplex, wird ein Flachdach dargestellt. Bayern liefert diese Datenform.

    Es gibt noch die Definition LoD3 (detaillierte Gebäude mit Dachüberständen, Balkonen, Türen, Fenster), die bisher eher selten vorkommen (Google Earth liefert angenäherte Daten mit Texturen von den größeren Städten)

    Leider stehen Google-Daten für die Städte in der Oberpfalz nicht zur Verfügung.

    Im Folgenden möchte ich darstellen, wie man über Blender die Gebäude und Landschaftsdaten in den TS bekommt. Die Landschaftsdaten sind insoweit interessant, dass man zum Beispiel felsige Geländeeinschnitte so per Objekt einigermaßen realistisch gestalten kann. Ich habe dazu 4 Beispieldateien ausgewählt: Schwandorf-Pesserlstraße, Nattermoos, Kronstätten Dorf, Pösing Dorf.

    Quelle: Bayernatlas: https://atlas.bayern.de/?c=677…=8&r=0&l=atkis&t=ba&mid=1

    Man kann 3D mit dem Button unten rechts aufrufen, egal ob Karte oder Luftbild


    Daten nach Blender zur Weiterverarbeitung laden

    Ich arbeite nach wie vor mit Blender 2.79, weil das für mich von der Erfahrung und von den Arbeitsschritten am einfachsten ist. Aber die hier zu beschreibenden grundsätzlichen Schritte sind auch bei der Oberfläche ab 2.8 nicht anders.

    Der erste notwendige Schritt ist, die CityGML-Daten nach Blender zu bekommen. Das geht über das obj-Dateiformat. Dafür gibt es Kommandozeilen-Tools, wie z.B.
    https://github.com/tum-gis/CityGML2OBJv2

    Damit muss man sich aber schon sehr gut auskennen. Ich habe hier jetzt darauf verzichtet.

    Es gibt als Tool den 3DcityLoader, der allerdings keine kostenlose Konvertierung bietet (es sei denn, die Datei ist klein):

    Das Downloadportal für 3D-Stadtmodelle
    3D-Stadtmodelle aus öffentlichen Quellen konvertiert in viele Dateiformate, wie CityGML, AutoCAD DXF, STL oder OBJ, sofort herunterladen.
    3dcityloader.com

    Es gibt auf der Einstiegsseite unter "3D-Stadtmodelle in vielen Formaten" einen Button "Jetzt Testen". Dann gelangt man auf den Auswahlbereich. Ich habe hier Kronstetten Dorf mit der Kirche ausgewählt. Das Ergebniss seht ihr in der Vorschau, ebenso Schwandorf_Presserlstraße, Nattermoos und Pösing.

    (Nattermoos und Kronstetten sind kleine Datei und daher kostenlos) Quelle: jeweils 3DCityloader

    Man kann rechts das Dateiformat einstellen, hier also "obj", die Auflösung beim Gelände bis 1m herunter, bei Gebäuden bis 20cm. Außerdem gibt es die Option, nur die Gebäudedaten herunterzuladen, oder die Geländedaten in einer eigenen Datei zu bekommen. Wenn Ihr ein Luftbild als Textur bekommen wollt, müsst Ihr bei "Textur" das entsprechende Häkchen setzten.

    Man kann auch mit dem von AutoCAD bekannten Dateiformat dxf weiterarbeiten. Ich werde beide Möglichkeiten im Folgenden darstellen und auf die Unterschiede hinweisen.

  • Importieren der Datei nach Blender

    1. obj-Datei

    Die Datei aus dem 3DCityLoader wird gepackt als zip-Datei zur Verfügung gestellt. Nach dem Entpacken gibt es die obj-Datei, die ATTRIBUTION.txt mit den Angaben für die Lizenzen, die map_texture.jpg mit dem Luftbild für die Geländedaten und die materials.mtl mit Informationen für die Texturen. Die Datei materials.mtl lässt sich mit einem Texteditor (z.B. Notepad) öffnen. Es gibt in der Datei also das Material terrain_material mit der Textur map_texture.jpg und das Material buildings_material. Die Angabe Kd steht für eine diffuse Farbe nach dem Schema rot-grün-blau. Dabei bedeutet 0.7 0.7 0.7 einen Grau-Wert. Die Angabe Ks steht für Specular Reflectance, also der Intensität eines Glanzlichts.

    Ich bereite an dieser Stelle mein Material gleich für den TS vor. Dazu konvertiere ich die jpg-Datei in eine png-Datei und verändere die Größe in eine beispielsweise 1024x1024 oder 2048x2048 große Datei. Zur Erinnerung, der TS benötigt ace-Dateien, die Werte zur Basis 2 beinhalten müssen. Da die Beispieldatei von Kronstetten nicht quadratisch ist, passe ich den Arbeitsbereich in Photoshop entsprechend an und speichere die Datei unter Kronstetten_Luftbild. Zudem habe ich gleich der obj-Datei einen passenden Namen gegeben als Kronstetten_Dorf.obj. Damit ist nun meine Datei fertig für den Import nach Blender.

    Nicht wundern nach dem Import in Blender, das Objekt steht. Es muss als erstes um die X-Achse rotiert werden; also mit dem Blender-Befehl R X -90. Dann liegt es korrekt.

    Als nächstes müssen wir uns um das Material kümmern.

  • Modul in Blender für den Export in den TS vorbereiten

    Aus ökonomischen Gründen geht es hier lediglich darum, das Modul so weit zu bearbeiten, dass es sich fehlerfrei in den TS bringen lässt. Ein bisschen ist deshalb die Arbeitsweise "quick and dirty". Die Bearbeitung im Detail ergibt sich nach der Beobachtung an der gewünschten Stelle im Strecken-Projekt. Die beiden Bilder zeigen das Ergebnis der fehlerfreien Übernahme in unser Strecken-Projekt.

    Die dargestellten Schritte haben sich durch mögliche Fehler als am sinnvollsten dargestellt. Ich gehe davon aus, dass die Arbeit mit Blender bekannt ist. Ich verzichte deshalb auf die detaillierte Darstellung der Arbeitsschritte,

    Schritt 1: Gelände-Objekt bearbeiten

    Als Erstes sollte zwingend der Shader ausgewählt und zugeordnet werden. Ich hatte anfänglich das Problem, dass sich kein Shader zuordnen ließ. Bekanntlich hatte ich das Luftbild an die TS-Konventionen angepasst. Also muss für das Geländemodul das Luftbild in der Lage korrigiert werden. Zuletzt noch den Namen des Objektes entsprechend der Konventionen vergeben. Ich habe mein Mosul 1_0500_Kronstetten_Gelaende genannt. Damit ist das Gelände-Objekt bereits fertig.

    Schritt 2: Gebäude bearbeiten

    Zur Erinnerung, in der materials.mtl-Datei war das Luftbild verlinkt, für die Gebäude gab es aber keine eigene Textur. Ich habe deshalb eine eigene Textur angelegt, mit grau und einigen Dach-Texturen. Die Texturen sind teilweise von texturescom (https://www.textures.com/). Allerdings arbeite ich mit den Dachtexturen zunächst nicht. Nun ist etwas Fleißarbeit erforderlich. Die Gebäude sind als einzelne Objekte vorhanden, in dem Beispiel rund 60. Also zunächst wähle ich wieder den Shader aus und definiere dann ein eigenes Material für die Gebäude und weise meine Textur (ihr könnt die Textur gerne weiter benutzen, ist aber zur eine Arbeitstextur ohne Qualitätsanspruch!) zu.

    Bei den Gebäude-Objekten vergebe ich jeweils einen Namen, hier zum Beipiel 1_1000_Kronstetten_Dorf 1 usw, und weise grau aus der Textur zu. Gleichzeitig überprüfe ich, ob sinnvoll Gebäude-Objekte zusammengefasst werden können. Manchmal sind Hauptgebäude und Anbau zwei getrennte Objekte.

    Wenn alles korrekt bearbeitet worden ist, sollte sich das Modul in der gewohnten Weise in den TS exportieren lassen. Das Beispiel seht Ihr an seinem vorgesehenen Platz im Oberpfalz-Projekt.

    Mögliche Fehler:

    Ich hatte im Wesentlichen drei Fehler: Shader war nicht richtig zugewiesen, bzw. die Zuweisung nicht in Blender akzeptiert worden, eine Gebäude-Objekt bei der Vielzahl übersehen, Fehler bei der Namensvergabe,


    Sinnvolle Anwendungsmöglichkeiten:

    Es gibt grundsätzlich vier sinnvolle Anwendungsmöglichkeiten. Das Kronstetten-Modul zeigt schon eine, Ortschaften oder Ortsteile, die im Panoramabereich der Strecke liegen. Auch wenn man das Modul noch bearbeiten muss, ist es schon hilfreich, lediglich ein Objekt und noch dazu mit höhenrichtig stehenden Gebäuden zu haben, anstatt 60 Gebäude einzeln platzieren zu müssen.

    Die zweite Anwendung sind Ortschaften oder -teile, die auf einem Berg errichtet sind. Unten seht Ihr das Beispiel Nabburg.

    Als dritte Möglichkeit möchte ich auf große Industriekomplexe an einer Strecke hinweisen. Immerhin erhält man so eine Basis, auf der man weiter arbeiten kann.

    Und zum Schluss sei noch auf die Möglichkeit hingewiesen, schwierige Geländesituationen so als Objekte darstellen zu können, die sich nicht im TS abbilden lassen.

    Manchmal kommen alle drei Situationen zusammen, wie beim Beispiel Cham.


    Importieren der Datei nach Blender

    2. dxf-Datei

    Ich möchte kurz auch auf den Weg über eine dxf-Datei eingehen. Grundsätzlich ist das Add-on in Blender für Autocad dxf-Dateien nicht aktiv. Das bedeutet, dass unter "preferences" in Blender das Add-on mit dem Setzen eines Häkchens erst aktiviert werden muss.

    Nach dem herunterladen über den 3DCityLoader wird die zip-Datei entpackt. Man wird dann feststellen, dass es eine Datei mit dem Namen texture.wld gibt. Diese Datei lässt sich ebenfalls mit einem Text-Editor (z.B. Notepad) öffnen. Darin befinden sich mehrere Zahlenwerte, die aber für uns keine Bedeutung haben. Die Zahlen stellen Georeferenzierungsdaten für CAD-Zeichnungen dar, um die dxf-Datei in einem GIS-Programm richtig zu positionieren.

    Wir können also die dxf-Datei direkt nach Blender importieren.

    Es gibt vier Unterschied gegenüber der Arbeit mit obj-Datei: Das Modul liegt richtig plan, das Gelände ist plan mit Höhenstrukturen und kein Kasten wie bei der obj-Datei und das Luftbild wird eben nicht mit geladen. Dazu sind die Gebäude in einem Objekt zusammen gefasst.

    Also, zunächst für das Gelände ein Material anlegen, den Shader aktivieren und dann die für den TS angepasste Luftbild-Textur laden. Das Gelände nach der Namenskonvention umbenennen.

    Dann ein Material für die Gebäude anlegen, Shader definieren und die "quick and dirty" Textur aus dem obj-Beispiel zu weisen. Nun kann ich alle Gebäude in einem Schritt grau zuweisen, da sie in einem Objekt zusammengefasst sind. Damit kann man das Modul bereits in den TS exportieren.

    Dieser Weg ist einfach und schnell, hat aber dann den Nachteil, dass ich die Gebäude zum Nachbearbeiten aufteilen muss, zumindest teilweise.

  • Ich seh viel Texturarbeit...

    Was nützt das wenn die Häusser bis auf 1m korrekt stehen, aber die Texturen alle noch gemacht werden müssen.

    Viel zuviel Aufwand.


    Dann lieber 10 Häuser durchtexturieren und die Modellermaterialien so gestalten daß die z.B Klinker oder Putzdateien(Textur) nur im Modeller ausgwechselt werden müssen und man hat gleich 20 oder 30 neue Häuser.

    Das geht leicht wenn man ähnliche Klinkervarianten\Grössen und farbige Putztexturen hat. Dazu noch einige Anbaumodule erstellen und das ein oder andere Haus aufzupimpen.

    Für die Position der Häusser kann man auch nur Google Map nehmen.

    Das gute ist das man mehrere Häuser auf einen Texturatlas legen kann und selbst den noch im BBearbeitungsprog. farblich verändern kann, so daß noch mehr Varianten enstehen.

    Ruckzug hat man schnell einen Häuserpool.

  • ice

    ich widerspreche unserem ungekrönten Meister im Objektbau ungern. Aber zum einen ging es mir darum zu zeigen, dass man die 3D-Daten aus den Geoportalen auch nutzen kann. Zum anderen ist es mit ein paar Häusern nicht getan. Das mag an mir liegen, weil ich mich im Studium und die letzten rund 15 Jahre intensiv mit Stadtplanung auseinandergesetzt habe. Jede Epoche und auch jede Region hat ihre eigenen Baustile entwickelt. Ein bisschen provokant gesagt, ein Dorf in Ostfriesland sieht anders aus wie ein Dorf in der Oberpfalz, Hannover ist anders in seiner Wirkung wie Nürnberg. Wenn man einigermaßen die Charakteristik einer Region treffen will, ist eine größere Anzahl an Gebäuden notwendig. Aber ich möchte gar nicht alles über die 3D-Daten abbilden. Wir haben eine Reihe von Standard-Gebäuden gebaut, aber das reicht eben gerade in der hügeligen Oberpfalz oft nicht. Wir haben die Gleise als Beispiel von Schwandorf bis Cham liegen. Aber Cham habe ich bisher ausgeschlossen, weil der am Berghang über dem Bahnhof liegende Ort nicht ansatzweise mit Standardgebäuden darstellbar ist.

    Die Texturen stellen für mich nicht wirklich das Problem dar. Ich gehe einen Vormittag durch den Bereich, den ich bauen möchte und mit Nacharbeit habe ich die Texturen in rund 2 Tagen, wie bei dem Beispiel hier Kronstetten fertig. Ich brauche in vielen Fällen bei den Gebäuden nur eine oder zwei Seiten. Wie das einigermaßen ökonomisch geht, werde ich noch zeigen.


    Viele Grüße und einmal ein wirklich ganz kräftiges Dankeschön für die tollen Objekte

    Bernd

    System: HP Z800, 2 x Xeon 5550 2,66 Ghz, 96 GB RAM, Nvidia Quadro 4000

  • Als Widerspruch sehe ich daß jetzt nicht Bernd, nur wird Niemand jedes Dorf exakt nachgestalten können. Solange lebt man bei einer 200km Strecke garnicht.

    Man muss nur darauf achten daß die Bauformen/Stil und -Fassaden regional bis überregional eingehalten werden.

    Also möglichst kein Hamburger Klinker in Tirol verwenden...(nur ähnlich als Beispiel.)

    Ich würde wenn das Haus nur von 2 Seiten betrachtet wird, gleich die anden beiden Seiten anders gesstalten und dann wird aus einem Haus gleich zwei und bei 10 zusammengelegten Häussern wären auf einen T-Atlas gleich 20 Häuser abgedeckt.

    Der Modellimport zum Plazieren ist daß aber brauchbar ..wenn es bis auf den Meter genau ankommt bei Haus aufstellen.

    Nur wenn danach der Durchschnittsjogel im TSc da vorbei fährt, der hat sicher kein Zolli dabei oder den Blick für das richtige Maß.

    Macht sich schon gut dein Projekt.

    Viel Erfolg uns weiterhin Spass damit.