Kochbuch: Gebäude erstellen

  • Vom Foto bis zum 3D-Objekt: ein Gebäude nach LOTUS bringen.

    1 Fotos erstellen

    Kurzfassung:

    • Übersichtsfoto erstellen
    • Detailfotos vom Erdgeschoss
    • Wenn auf Übersichtsfoto alle Fenster überwiegend verdeckt, durch Wahl anderer Perspektiven versuchen, >=1 Fenster so frei wie möglich zu fotografieren


    Zunächst wird ein Haupt-Foto angelegt, damit es immer ein Bild gibt, dass das Gebäude vollständig darstellt.


    Hier können, den späteren 3D-Bau im Hinterkopf habend, schon Entscheidungen getroffen werden, ob man bestimmte Teile der Textur einsparen kann. Im 3D-Bau nachher kann man ja Teile der Textur mehrfach verwenden. Zu bedenken ist hierbei, dass dann auch die Nacht-Textur dieses Mapping nutzt und dabei schnell Muster sichtbar werden, da dann immer die gleichen Fenster einer Etage auf die gleiche Weise leuchten - das fällt sofort ins Auge.


    TLDR: Manches kann man mehrfach verwenden und sich somit Arbeit sparen, aber man sollte es nicht übertreiben.



    Anschließend werden Detailfotos erstellt.


    Hat das Gebäude eine Ladenzeile, empfiehlt es sich immer, diese von der selben Straßenseite aus aufzunehmen, wie das Gebäude steht. So hat man nur Fahrräder vor der Nase, aber meistens keine Straßenschilder, parkende Autos oder Menschen.


    Hat das Gebäude Vertiefungen (wie Eingänge) oder erhabene Stellen (wie Ladenschilder), müssen diese auch explizit von der Seite fotografiert werden, damit sie im 3D-Bau nachher texturiert werden können. Im Beispiel betrifft das den Innenraum des Eingangs (wo der Briefkasten steht).


    Verdecken Bäume den Großteil des Hauses, sollte versucht werden, von irgendeiner Perspektive aus ein oder mehrere Fenster mit so wenig Gestrüpp wie möglich darauf zu fotografieren. Diese kann man dann zum Retuschieren benutzen.



    Von der Seitenaufnahme kann man dann Ladenschilder und manchmal auch Texturen vom Eingangsbereich entnehmen.

    2 Entzerren

    Kurzfassung:

    • die Objektiv-Verzerrung sowie die perspektivische Verzerrung muss herausgerechnet werden, sodass die Textur möglichst "senkrecht aufgenommen" wirkt



    Wie hier angegeben, benutzen wir für den ersten Entzerrungsvorgang das Programm PTlens. Das Programm ist kostenpflichtig, dafür sind die Algorithmen zur Entzerrung sehr stark und berücksichtigen auch Objektiv-Verzerrungen. Im Programm wird ein Grid angezeigt, mit dem man am Originalhaus lotrechte Linien (wie senkrechte Säulen oder waagerechte Fensterrahmen) ausrichten kann, sodass am Ende alles so aussieht, als wäre es (fast) genau gerade aufgenommen worden.



    Dieser Vorgang wird für alle relevanten Fotos wiederholt.

    3 Anordnen

    Kurzfassung:

    • aus den Fotos werden alle Teile herauskopiert, die später im 3D-Bau als Textur verwendet werden sollen - und diese auf eine Textur gepackt



    Jetzt bietet es sich an, aus allen Fotos relevante Teile herauszuschnippeln. Diese sollen dann wirklich exakt gerade sein, also kommt unser Image Rectifier zum Einsatz. Der Algorithmus ist trivialer, als bei PTlens, aber dafür arbeitet das Tool pixelgenau und somit 100% exakt - und wenn es vom Menschen genau bedient wird, kommen auch präzise Ergebnisse raus.


    Meistens entstehen bei verschiedenen Aufnahmen auch verschiedene Belichtungszeiten, unterschiedlicher Weißabgleich, etc. Aus diesem Grund ist es das Beste, wenn zusammenhängende Flächen möglichst nicht geschnipselt werden, wenn man es vermeiden kann, sondern auch zusammenhängend bleiben. Das sollte bereits beim Anfertigen der Aufnahmen berücksichtigt werden.


    Muss man zusammenhängende Flächen einzeln zusammensetzen, sollte man sich spätestens beim Retuschieren - besser jedoch bereits beim Anordnen, also jetzt! - die Mühe machen, die Flächen farblich und von der Helligkeit her aneinander anzugleichen.


    Ab hier darf sich das Werk "Textur" nennen, denn es erfüllt bereits alle Voraussetzungen für ein gelungenes Mapping im 3D-Programm.

    4 Retuschieren

    Kurzfassung:

    • störenden Unrat entfernen!


    (ich bin ein GIF, klick mich!)


    Zeitraubend, und doch ausgesprochen lohnenswert: Das Retuschieren. Nun wird alles aus der Textur entfernt, was wir im späteren 3D-Objekt nicht sehen wollen: Menschen, Autos, Schilder, Fahrräder, Poller, Bäumen, Hecken, Kundenfänger, Auslagen, Schirme, Markisen.


    Faustregel: Alles, was nichts im oder auf dem 3D-Objekt zu suchen hat, muss weg.


    Aber: Die Textur sollte keinesfalls aufgeräumt werden! Risse, Graffitis, Unreinheiten, Ablagerungen, Eigenschatten und so weiter gehören für das unterbewusste Realitätsempfinden dazu - alles andere wirkt zu clean und es fällt dem Auge auf.


    Eine besondere Herausforderung sind Störungen unter Balkons. Für das ungeübte Auge fast nicht sichtbar, trüben hier Farbverläufe von ambienten Schatten unter den Balkonen die Fassade ein und machen ein sauberes Retuschieren fast unmöglich. Abhilfe schafft hier ein ausgefuchster Fotograf, der entsprechende Stellen bereits während des Fotografierens bemerkt und den armen Photoshop-Nutzer mit einem sauberen Foto aus einer anderen Perspektive belohnt.


    Gratis Protip: Falls möglich, nicht immer das selbe fertig-retuschierte Fenster immer und immer wieder auf die Fassade kleben, denn auch das fällt dem Auge sofort auf. Hausfassaden sind unaufgeräumt und in sich unterschiedlich! Je mehr individuelle Abschnitte es gibt, die sich nicht wiederholen, desto viel besser!

    5 Glanz & Nacht

    Kurzfassung:

    • Alpha für Glanz-Steuerung erstellen
    • Nacht-Textur erstellen
    • Alpha für Nachttextur-Steuerung erstellen


    (fertiger Alpha-Kanal für den Glanz)


    Je nach dem, ob das Gebäude viele Fenster hat, geht diese Aufgabe schnell oder langsam. ;) Ich mache es so, dass ich mit dem Auswahl-Werkzeug alle Scheiben des Hauses markiere. Achtung: Da die Fenster nicht ausmodelliert werden, gehört es zum Realitätsempfinden dazu, gekippte und geöffnete Fenster und Türen nicht mit den geschlossenen Fenstern mitglänzen zu lassen. Da ein Kompromiss nur zu Lasten der Performance gehen würde und kaum Gewinn erzielt, lassen wir derartige Fenster(-Teile) einfach aus der Auswahl heraus.


    Anschließend fülle ich die gesamte markierte Fläche weiß, benutze - in Photoshop - die Funktion "Auswahl umkehren" und fülle die sodann markierte Fläche (das ist: alles andere) schwarz.


    Diese nicht-farbigen Informationen werden als sogenannter Alpha-Kanal automatisch mit der Haupttextur zusammen importiert und von LOTUS dann zur Steuerung der Reflektions- (oder in unserem Jargon "Glanz"-) Effekte genutzt. Weiß reflektiert 100%, schwarz reflektiert gar nicht. Im Falle einer Häusertextur werden also alle Scheiben weiß, die ganze restliche Fassade schwarz und ggf. diffus Reflektierendes, wie gebürstetes Alu oder Riffelglas grau gefärbt.


    Ich arbeite mit BMP-Dateien ohne dateieigenen Alpha-Kanal, weshalb ich diese Alpha-Textur im Ordner der Haupttextur (oben) so speichere: Name_der_Haupttextur_alpha.bmp. Durch den Zusatz _alpha erkennt LOTUS diese Datei automatisch und fügt sie beim Import mit der Haupttextur zusammen.


    Im Falle von DDS-Dateien wird die Alpha-Textur als eigener Kanal mit in der Hauptdatei gespeichert.


    (fertige Nacht-Textur)


    Jetzt kommt ein Trick! Die Nachttextur wird in LOTUS später mit der Haupttextur (einfach gesagt) addiert. Das bedeutet, Flächen, die nachts genauso aussehen, wie tagsüber, sollten mit "nichts" (also 0) addiert werden, denn Farbe Braun + 0 bleibt Farbe Braun. "Nichts" ist in diesem Falle die Farbe schwarz.


    Flächen, die nachts anders aussehen sollen, werden in der Nachttextur wunschgemäß gefärbt.


    Folgende Vorgehensweise hat sich dafür bewährt:

    • Die soeben erstellte Glanz-Alpha sollte im Fotobearbeitungsprogramm des Vertrauens eine eigene Ebene über der Haupttextur sein, damit sie separat davon verarbeitet werden kann. Die unterste Ebene ist die Haupttextur, die obere Ebene ist die Glanz-Alpha.
    • Die Glanz-Alpha wird nun in den Ebenen-Eigenschaften auf "Multiplizieren" gestellt. Das bedeutet, dass schwarze Teile der Alpha schwarz bleiben, und weiße Teile der Alpha nun die unten liegende Haupttextur "durchlassen".
    • Als nächstes wird die Haupttextur invertiert (sodass ein "Negativ" entsteht). Falls unklar ist, welche Funktion im Programm das auslöst, kann einfach die Gradiationskurve der Haupttextur von Standard: auf Negativ: gestellt werden, das hat den selben Effekt. Dadurch ergibt sich für das Auge in der Regel sofort ein Gefühl von "Beleuchtung von innen" in allen sichtbaren Fenstern. Achtung: Schaufenster aller Art vertragen die Invertierung aufgrund ihrer starken Farbigkeit in der Regel nicht gut und sollten beim Invertieren ausgespart werden.

    Nun wird oberhalb der multiplizierten Alpha-Ebene eine neue Ebene angelegt und diese ebenfalls auf "Multiplizieren" gestellt. Als erstes markiere ich nun alle Fenster im Wohnbereich und färbe diese Fläche auf der neu erstellten Ebene ein einem wohnlichen Gelb-Ton oder Gelb-Gelb-Farbverlauf, der die Fenster anschließend so wirken lässt, als wäre innen Licht an. Bewährte Farben sind alle Farben im Bereich von RGB 236/231/188 bis 231/207/114 - und wie gesagt, am besten quer über das Gebäude im nun markierten Bereich als Farbverlauf.


    In dieser Ebene werden auch mit der Farbe schwarz einzelne Fenster schwarz gefüllt, damit sie nachts nicht mehr leuchten. Hintergrund ist, dass es unrealistisch ist, dass zu einem bestimmten Zeitpunkt sämtliche (!) Fenster eines Hauses gleichzeitig leuchten. Also wählen wir möglichst zufällig ein paar Fenster aus (Faustregel: 1/3 der gesamten Fenster im Wohnbereich), die wir nicht leuchten lassen. Ich nehme dafür übrigens meistens jene, deren Nachttextur mir jetzt schon nicht gefällt, zum Beispiel weil ein Blumenkasten davor war oder ein gekipptes Fensterteil ausgespart werden musste, und dann noch ein paar Zusätzliche, bis mir die maximale Ausleuchtung zu Hauptleuchtzeit (z.B. abends zu Weihnachten) gefällt.


    So sieht die zum Beispielhaus gehörende Ebene aus, solang sie nicht multipliziert wurde:

    Und das multiplizierte Endergebnis dieses Vorgangs seht ihr an der Nachttexur am Anfang dieser Sektion des Artikels.


    Die halbe Arbeit der Nachttextur ist nun erledigt. Jetzt kommt noch etwas Handarbeit dazu:

    • Aus der Haupttextur müssen nun Flächen, die nicht über die Auswahl der Scheiben für die Glanz-Textur mit in die entstehende Nacht-Textur gekommen sind, manuell dazugeholt werden. Dazu bietet es sich an, in der Haupttextur nach solchen Flächen zu suchen, diese auszuwählen und auf eine eigene, ganz oben liegende Ebene zu kopieren. Dazu gehören normalerweise: Offene Türen von Läden, leuchtende und beleuchtete Hausnummern, Ladenschilder, Ladenüberschriften. Im Beispiel ist es nur die Hausnummer:
    • Meistens sollte für jedes so "nach oben" geholte Schnipsel eine Gradiationskurve angewendet werden, und diese so oder so geformt werden. Das lässt die Textur des betreffenden Schnipsels meistens mehr "leuchtend" aussehen, was für Hausnummern und Ladenschilder fast immer erwünscht ist.


    (fertige Nacht-Alpha)


    Nun wollen wir gern noch beeinflussen, wann welcher Teil der Nachttextur leuchtet. Dafür fertigen wir wieder einen Alpha-Kanal bzw. eine Alpha-Textur an, diesmal bezieht sich das Alpha auf die Nachttextur, also wird sie nachher auch wieder so heißen wie, in dem Fall, die Nachttextur, mit dem Zusatz _alpha. Demnach also: Name_der_Nachttextur_alpha.bmp


    Für diesen Alpha werden Flächen, die die zu leuchtenden Flächen deutlich überragen, in Graustufen gefärbt. Faustregel: Was in der Nachttextur schwarz ist, kann beim Alphakanal zum Übermalen genutzt werden, muss aber nicht mit eingefärbt werden. Ich ziehe nun also nacheinander ein paar rechteckige Flächen über die Fenster und färbe sie gemäß der hier angehängten Vorlage (ganz unten). Mit bloßem Auge kaum zu erkennen, sind hier im Beispiel alle Flächen unterschiedlich grau gefärbt.


    Wohn-Fenster suche ich mir aus den oberen zwei Zeilen der Vorlagen-Textur zusammen (möglichst zufällig!).

    Hausnummern und Ladenschilder aus dem Bereich "die ganze Nacht", Hausflure meistens aus dem Bereich "Schulen", der Rest ist sicher selbsterklärend.


    LOTUS interpretiert die Farben dieses Alphas nun um zu entscheiden, zu welcher Uhrzeit in der Simulation welcher Teil der Nachttextur leuchtet und welcher (noch) nicht (mehr).

    6 Letzte Vorbereitung der Textur

    Als Ausgangspunkt haben wir nun die 4 Texturdateien. Der nächste Schritt ist die Beachtung der für die Computertechnik vorgegebenen Auflösung einer Textur. Alle Texturen haben eine Größe von 2^X * 2^Y Pixeln, also 32*32 Pixel, 512*512 Pixel, aber auch rechteckige Größen, wie 2048*512 Pixel oder 1024*2048 Pixel sind möglich. Mit ein bisschen Denkarbeit lassen sich die vorhanden Texturdateien auf eine Größe "pressen", mit der die wenigsten Informationen verloren gehen (immer nach unten skalieren!). Für die hier vorliegende Textur ist die endgültige Größe 1024*2048 Pixel. Die mitunter verzerrten Proportionen können im UV-Mapping später wieder ausgeglichen werden.

    Dieser Schritt ist auch nicht zu vernachlässigen, da sonst automatisch die nächst höhere Auflösung verwendet wird. Dadurch werden unnötig Ressourcen verschwendet.


    Zuletzt werden der Haupttextur und der Nachttextur die jeweiligen Alpha-Kanäle in einer DDS-Textur zugeordnet. Hierfür benötigt es ein Programm, welches DDS-Dateien schreiben kann. Als kostenfreie Programme stehen dafür Paint.net, das DirectX Texture Tool und die Kombination aus dem Tool DXTBmp und Gimp. Generell ist es notwendig, dass die DDS Mipmaps enthält und die Kompression DXT5 beträgt.

    Es besteht keine Pflicht, DDS-Texturen zu nutzen, eine 24-bit BMP-Textur ist ebenso von den LOTUS-Tools lesbar. Gerade im Hausbau ist es angenehmer nur 2 Texturdateien (Haupt-/Nachttextur) pro Haus zu haben, damit die Übersichtlichkeit gewahrt bleibt.

    7 3D-Bau (Blender)

    Anm.: Ich nutze Blender 2.79, da es nach wie vor mit neueren Versionen zu Exportproblemen von .x3d-Dateien kommt.

    Kurzfassung:

    • Fundament erstellen
    • grobe Abmessungen erstellen
    • Details herausstellen

    Der erste Schritt in Blender beginnt mit dem Würfel, aus welchem das Haus geschnitzt wird. Für die Maße, die der Würfel annehmen muss, empfiehlt sich die Linealfunktion von Google Earth Pro. Die Breite und die Tiefe die Hauses sind damit ablesbar und der erste Schritt zum Fundament des Hauses. Es empfiehlt sich für jedes Haus ein Fundament zu erstellen, ich nehme in der Regel 2 Meter Höhe, bei Objekten mit großer Grundfläche sind es auch 3 oder 4 Meter.

    Die Maße für das vorliegende Haus sind 19,5 Meter Länge (x-Achse), 14,5 Meter Tiefe (y-Achse):


    Jetzt geht es in die Höhe, hierbei hilft Streetview ganz gut. Unten rechts bei Streetview wird eine Höhe angegeben, auf die der Mauszeiger gerade zeigt. Insofern für eure Stadt kein Streetview vorhanden ist, kann man die Höhen über den Dreisatz und dem Originalbild berechnen. In der Regel liegen Etagenhöhen zwischen 3 und 4 Metern. Nun befinden sich im ersten Schritt viele "Querverzierungen" an der Fassade, demnach gehen wir etagenweise, nur die oberen 2 Stockwerke können zusammengefasst werden. Mithilfe der Gesamthöhe von 20 Metern und der Werte aus Streetview entsteht die Grundform der Fassade durch das Extrudieren des oberen Polys in auf der Z-Achse:


    Nun wird die Fassade in der Höhe einmal geschnitten, da die rechten 2/5 der Fassade ein wenig nach vorn stehen sowie die bisher vorbereiteten "Querverzierungen" ausmodelliert. Das Mindestmaß für die Ausmodellierung von Details liegt bei mir bei einer Differenz zur Fassade von +-0,2 Meter. Gebäude, welche an Kreuzungen oder Haltestellen stehen, sollte man detallierter bauen als Gebäude, an denen man mit 50 km/h vorbeifährt. Allgemein haben Details bei Häusern den faden Beigeschmack, dass sie mitunter sehr aufwändig sind, aber während der Simulation eher weniger wahrgenommen werden. Eingerückte Fenster fallen bspw. auch erst bei genauerem Hinsehen auf. Auch haben Details im Erdgeschoss eine höhere Priorität als im Dachgeschoss. Mithilfe der Loop-Cut-Funktion und der Extrudierfunktion sieht das Haus so aus:


    Zeit für die Fassadentextur und die erste Texturierung. Material erstellen -> Textur zuweisen -> UV editing und die Schnipsel entzerren. Bei der etwas komplexeren Fassade dieses Gebäudes gar nicht mal so einfach:


    Nun geht es an die Details im Erdgeschoss, welche wir anhand der Textur richtig platzieren können. Die unteren beiden Etagen werden in der Mitte längs geschnitten, per Inset-Funktion wird der grobe Auschnitt gewählt und die obere Rundung eingefügt. Die eingerückten Hauseingänge haben ein Bodenpolygon welches sich knapp über dem Nullpunkt befinden sollte, sodass es keine Clippingprobleme mit dem Terrain gibt:


    Weitere Details werden entweder in das vorhandene Mesh geschnitten oder per neuen Würfel an die Fassade angebracht. Nun können das Fundament und die Seiten- sowie Rückwand texturiert werden. Insofern ihr keine passenden Texturen dafür habt, könnt ihr für generische Sachen wie auch das Dach eine Textur aus der OpenLOTUS Filebase verwenden:


    Zu guter Letzt wird das Dach aus dem oberen Polys extrudiert. In dem Fall sind es knapp über 2 Meter Höhe für ein spitz zulaufendes Dach und im Anschluss ein Flachdach:


    Das Objekt wird als x3d-Datei in das passende Arbeitsverzeichnis des Containers exportiert.

    8 Import & Konfiguration

    Mit korrekten DXT5 kompessierten DDS Texturen für die Haupttextur und die Nachttextur geht es ins Content Tool. Ein Gebäude ist immer CAT1, die entsprechende Kategorie ist frei wählbar. Zuerst kümmern wir uns um die Materials. Für die Haupttextur sind meist folgende Werte einzustellen (bei korrekter Vorarbeit mit den Texturen ist weniger zu tun):


    Und für die Dach/Seitentextur folgende (Insofern kein Spitzdach genutzt wird, bleibt der Haken bei "Alpha-Wert für Schnee nutzen" raus):


    Ein Gebäude benötigt im Reiter Verkehrsbedarf eine Tür, bei einer Gebäudenutzung durch verschiedene Sachen, können weitere Gebäudeteile mit entsprechenden Türen hinzugefügt werden. Dies ist wichtig für die spätere Berechnung des Fahrgastaufkommens an Haltestellen. Bei Wohngebäuden sind auch Fensterverzierungen notwendig, vielleicht 1/3 bis 1/4 der Fenster können dabei mir Fensterverzierungen ausgestattet werden.

    Das Verhalten von Schnee und der nachttextur kann im Reiter Testumgebung getestet werden. Nun fehlt nur noch der Knopf unten rechts und wir sind fertig.

    9 Zu Guter Letzt

    Es gibt bei jedem Arbeitsschritt zahlreiche Kniffe, die hier den Rahmen eines flüssig zu lesenden und schnell zu lernenden Tutorials sprengen würden. Für den Einstieg sollte dieses Tutorial reichen, doch für alles Weitere empfiehlt sich die Teilnahme an einem Content-Entwickler-Stammtisch, denn dort werden diese Tricks angewendet, gezeigt und erklärt!


    Kein Stammtisch geplant? Dann schlag vor, dass wir mal wieder einen veranstalten!