Backe, backe Blender: Wie generiere ich flott Ambient-Occlusion-Texturen für ein OMSI-Objekt?

Das Forum befindet sich im reduzierten Betrieb. Die Addon- und Supportforen bleiben weiterhin verfügbar.
Bitte beachte, dass OMSI nicht mehr weiterentwickelt wird. Ein Teil der Entwickler widmet sich inzwischen der Entwicklung eines neuen Simulators. Weitere Informationen zum LOTUS-Simulator findest Du hier.
  • Tach. Dämlicher Titel, ich weiß.


    (Vorab: Die hier gezeigten Schilder (natürlich erweitert und beschriftbar, zur Verwendung in OMSI, als normales, fertiges Haltestellenschild) und eine passende Blender-Quelldatei gibt es in diesem Thread zum Download, erster Post auf Seite 1 => http://www.omnibussimulator.de/forum/index.php?page=Thread&postID=691453)


    Ambient Occlusion (AO) - das unbekannte Wesen. Es gibt zwar unzählbar viele Tutorials für das baken (=> "backen") von Texturen in Blender, die verwenden dann aber auch gerne Cycles oder für OMSI nie benötigte Materialeinstellungen. Deswegen folgt nun ein kurzes Mini-"Tutorial" mit dem tollen Namen "Wie generiere ich flott AO-Texturen für ein OMSI-Objekt?". Ich setze Grundwissen über das Erstellen und Texturieren (mit UVMaps) von Objekten in Blender voraus, es geht hier nur um das "backen" der Texturen.


    Als praktisches Beispiel verwenden wir ein altes Haltestellenschild der Münchner Verkehrsgesellschaft, wie sie in den 1980ern für Straßenbahn- und Omnibushaltestellen massenhaft verwendet wurden. Damit die AO-Effekte auch gut sichtbar sind, ist dieses Modell relativ ausmodeliert. Hier verwendete Blenderversion ist die 2.71, praktisch funktionieren alle Schritte aber auch in älteren (> 2.49) und neueren Versionen identisch.




    Hier sehen wir das blanke Modell, noch ohne Texturen. Zuerst weisen wir dem Objekt ein Material zu und texturieren es ganz normal mit einer beliebigen Quelltextur. Größe und Format spielen hier keine Rolle - OMSI wird diese Textur nie zu Gesicht bekommen, man darf verschwenderisch sein. Um das spätere "backen" der Textur zu erleichtern, verwende ich hier nur eine Quelltextur, die allerdings mit 2048²px für ein solches Objekt gigantisch groß ist - wie gesagt, hier kann verschwendet werden.



    Als nächstes bereiten wir das Objekt auf den "Backprozess" vor. Dazu blenden wir alle störenden Objekte sowohl optisch als auch rendertechnisch aus - hier die Glasflächen und alle Objekte, die der Nutzer optional anbringen kann. Außerdem schalten wir "Ambient Occlusion" und "Enviroment Lighting" ein.



    Jetzt fügen wir eine neue UVMap hinzu und benennen diese - hier "Render". Außerdem klicken wir auf das kleine Kamerasymbol neben der neu erstellen UVMap.



    Diese wählen wir nun aus und erstellen eine neue Textur der gewünschten Größe, hier 512²px. Grundsätzlich werden Objekte mit gebackenen AO-Texturen für gleiche Texturqualität quasi immer größere Texturen benötigen als solche ohne, da man nicht beliebig Texturflächen "wiederverwenden" kann.



    Nun müssen wir die neue UVMap ordentlich füllen. Am besten geht das natürlich per Hand, schneller geht es über die Option "Smart UV Project", welche das Mesh automatisch in die UVMap quetscht. Dabei lässt Blender aber z.T. große Freiflächen übrig, evtl. muss auch hier per Hand nachgearbeitet werden.



    In den Textureigenschaften stellen wir jetzt unter "Mapping" die "Coordinates" auf "UV" und die danach erscheinende Option "Map" auf "UVMap" - unsere Quelltextur.



    Wir prüfen, ob "Render" immer noch die aktuell gewählte UVMap ist. Jetzt wechseln wir in den Eigenschaften auf "Render" und drücken unter "Bake" auf den großen "Bake"-Knopf. Innerhalb von Sekunden bis Minuten (Je nach Texturgröße) erscheint nun die gebackene AO-Textur im UVEditor.



    Jetzt muss die Textur nur noch abgespeichert werden. Im UVEditor wählen wir dazu unter "Image" "Save as Image" und geben der Textur einen beliebigen Namen.



    Fast geschafft: In den Textureigenschaften ändern wir nun die Quelldatei auf die gerade gespeicherte Texturdatei und die UVMap unter "Mapping" auf "Render".



    Das Objekt kann jetzt exportiert werden und, zusammen mit der gebackenen Textur in OMSI verwendet werden.



    Zack, Fertig: Objekt mit AO-Texturen. Zum Vergleich hier das gleiche Objekt nur mit AO-Texturen, diese kann man durch Ändern des "Bake Mode" von "Full Render" auf "Ambient Occlousion" erstellen:



    Gerade bei Objekten für historische Karten, die nicht mehr existieren oder von welchen man aus diversen Gründen (z.B. generelles Fotografierverbot in einigen Museen ohne Ausnahmen) keine Texturen abfotografieren kann, kann man so auch hübsche Texturen mit Tiefe "zeichnen". Aber auch Fototexturen mit eingebautem "echtem AO" schadet zusätzliches künstliches Ambient Occlusion meist nicht.


    Die Quelldateien und das (erweiterte) fertige Endprodukt des hier gezeigten Objekts gibt es hier im ersten Post zum Download: http://www.omnibussimulator.de/forum/index.php?page=Thread&postID=691453


    Appendix A - Mehrere Objekte auf eine Textur baken


    Natürlich kann man auch mehrere Objekte auf eine Textur baken. Wir gehen davon aus, dass alle Texturen für Objekt A (hier: das Haltestellenschild) bereits auf die Textur gebacken wurden und die Texturen für Objekt B (hier: Der Linieneinschub) auf eine verbleibende Freifläche der gleichen Textur gebacken werden soll. Unsere Freifläche findet sich hier:



    Wir fummeln Objekt B in die Freifläche hinein und stellen erneut die Textureigenschaften wieder passend (Mapping => UV; Map => UVMap [bzw. die Quell-UVMap]) ein.



    Jetzt können wir Objekt B ebenfalls auf die Textur backen. Dabei allerdings umbedingt darauf achten, dass kein Haken bei "Clear" gesetzt ist. Außerdem sollte man, je nach Größe der Freifläche, "Margin" etwas verkleinern. "Clear" würde die bisherige Textur löschen, "Margin" (mancher kennt den Begriff aus dem Webdesign) gibt den Bereich an, der über die eigentliche UVMap hinaus in der passenden Farbe gefüllt wird - damit werden unschöne Übergänge an den Rändern des Objektes verhindert.



    Jetzt nur noch wie bei Objekt A die Textur speichern und in den Textureigenschaften sowohl das Mapping (Map => Render [bzw. die Ziel-UVMap]) als auch den Dateinamen der Textur anpassen. Schon kann das Objekt ebenfalls exportiert werden.


    Appendix B - "Circular Reference in Texture Stack"; "No objects or images found to bake to"


    Häufige Fehlermeldungen beim Bake-Vorgang:
    "Circular Reference in Texture Stack" -Vermutlich ist in den Textureigenschaften entweder keine Quelltextur oder die Zieltextur als Quelltextur angegeben.
    "No objects or images found to bake to" - Entweder ist keine Textur für die gewählte UVMap hinterlegt oder - wahrscheinlicher - das gewählte Objekt ist rendertechnisch ausgeschaltet. Ein Klick auf das Kamerasymbol in der Objekteauswahl neben dem gewünschten Objekt sollte das Problem lösen.


    Appendix C - Repaintbarkeit und Texturgrößen


    Gebackene Texturen besitzen zwei Nachteile. Zum einen benötigt man häufig größere Texturen, in diesem Beispiel statt einer 256²er-Textur eine 512²er-Textur. Einfache Geländer oder Objekte, die zu hunderten pro Kachel vorkommen, sollte man also evtl. nicht umbedingt gebackene Texturen verpassen oder dann zumindest mehrere Objekte auf einer Textur unterbringen.
    Zum anderen sind solche Objekte je nach (zerstückeltem) Mapping etwas schwierig zu repainten. Wer Repaintern die Arbeit erleichtern möchte, kann Texturen und AO-Texturen seperat erstellen und in einem Bildbearbeitungsprogramm der Wahl zusammenfügen.
    Dazu einfach zuerst unter "Bake" den "Bake Mode" auf "Textures" stellen, damit Blender nur Texturen ohne AO-Effekt auswirft. "Bake" drücken, diese Textur speichern, "Bake Mode" auf "Ambient Occlusion" stellen und nochmal backen lassen. Die AO-Textur ebenfalls unter anderem Namen speichern. Danach beide Bilder zusammenführen. Beispiel:



    Textur ohne AO



    AO-Textur



    Beide Texturen vereint, wobei der AO-Effekt hier sehr gering ist. Diese Textur kann jetzt gespeichert und beide Quelltexturen dem Download beigelegt werden. Damit können Repainter ganz einfach die Texturen bearbeiten, ohne den AO-Effekt zu verlieren. Alternativ kann man auch seperat AO-Maps erstellen, um diese dann per Hand mithilfe von GIMP oder Photoshop auf die bestehende Textur "aufzutragen", ohne vorher die Texturen durch Blender "vermatschen" zu lassen. Denn natürlich kann ein Bildbearbeitungsprogramm besser mit Texturen umgehen als Blender.


    Abschließend bitte folgendes bedenken: Fast alle Objekte in der OMSI-Welt sind ohne AO mit Fototexturen texturiert. Bei Objekten, die sich in andere, bestehende Objekte "hinenblenden" sollen (z.B. ein neues Reihenhaus, passend zu den Spandau-Häusern) ist AO nicht sinnvoll, da es die Optik "zerhacken" würde. AO ist hier eher bei einzeln stehenden Objekten (Kiosk, Haltestelle, Automat, Fahrzeug, Schilder, Bänke) und Innenräumen (Tunnel, U-Bahnhöfe, Garagen) sinnvoll.


    Ich hoffe, das Mini-"Tutorial" ist verständlich und nützt dem einen oder anderen etwas. In jedem Fall hat es mich mal wieder dazu gebracht, etwas zu veröffentlichen. Ist doch auch was.


    Sollte mir ein grober Schnitzer unterlaufen sein, macht mich bitte darauf aufmerksam. Ein großer Teil dieses Textes ist gegen 2 Uhr entstanden.


    Grüße

  • *Bedankbutton-Drück*


    Vielen herzlichen Dank für dieses Tutorial!

    :D

    Hat echt geholfen!

    :)