Godot: PBR-Texturen mit ORMMaterial3D einrichten
Godot liest eine ORM-Textur mit Ambient Occlusion in Rot, Roughness in Grün und Metallic in Blau – exakt die Kanalreihenfolge unserer ARM-Datei – und erwartet Normal Maps in OpenGL-Konvention (X+, Y+, Z+), sodass unsere _nor_gl-Dateien unverändert passen.
- Version
- Godot 4.7 (aktuell 4.7.2, Stand 18.08.2026)
- Material für unsere Texturen
- ORMMaterial3D statt StandardMaterial3D
- Normal Map
- OpenGL-Konvention (X+, Y+, Z+) laut Godot-Dokumentation
- Dauer
- etwa 20 Minuten
Zwei Materialien, ein Unterschied
Godot bietet für PBR-Oberflächen zwei eng verwandte Materialtypen: StandardMaterial3D und ORMMaterial3D. Laut der offiziellen Godot-Dokumentation sind beide praktisch identisch bis auf einen Punkt: Statt separater Einstellungen und Texturen für Occlusion, Roughness und Metallic nutzt ORMMaterial3D eine einzige gepackte ORM-Textur, deren Farbkanäle die drei Werte tragen.
Das trifft sich gut mit unserem Textur-Format. Unsere _arm-Datei liefert Ambient Occlusion in Rot, Roughness in Grün und Metallic in Blau – laut BaseMaterial3D-Referenz genau die Kanalreihenfolge, die Godots ORM-Textur erwartet (die Referenz nennt explizit „Ambient occlusion is stored in the red channel. Roughness map is stored in the green channel. Metallic map is stored in the blue channel."). Wer unsere ARM-Datei in ORMMaterial3D lädt, muss also nichts umsortieren.
Weil beide Werte in ORMMaterial3D aus der einen ORM-Textur kommen – dafür ist der Materialtyp gemacht. Wie du unsere Texturen in beide Materialtypen einbaust, welche Normal-Map-Konvention Godot erwartet und wie Kachelgröße und Parallax-Tiefe eingestellt werden, zeigt der Rest dieser Anleitung.
Alle unsere Texturpakete – Cracked Concrete 01, Oak Planks 01, Rusty Corrugated Metal 01, Cobblestone 01, Corrugated Metal 01 – liefern dieselben sechs Karten in 2K, 4K und 8K. Für Godot sind drei davon der direkte Weg: _diff für Albedo, _arm für den ORM-Slot und _nor_gl für die Normal Map. _rough, _ao und _disp liegen zusätzlich einzeln bei, für den Fall, dass du mit StandardMaterial3D arbeitest oder einen Wert separat nachjustieren willst.
Godot selbst weist laut Dokumentation darauf hin, dass Programme wie Substance Painter und Armor Paint ORM-Texturen bereits über ihr Unreal-Engine-Exportpreset erzeugen – ein Hinweis darauf, dass ORM kein Godot-spezifisches Format ist, sondern ein branchenüblicher Standard, den unsere _arm-Datei von Haus aus erfüllt.
Schritt 1: Textur-Import-Einstellungen
Bevor eine Datei in Godot als Textur brauchbar ist, entscheidet das Import-Dock über Kompression und Farbraum. Godot importiert Bilder standardmäßig mit verlustfreier Kompression, ohne Mipmaps – Einstellungen, die für 2D gedacht sind. Die Funktion Detect 3D erkennt laut Dokumentation automatisch, wenn eine Textur in einem 3D-Material verwendet wird, und passt Mipmaps sowie Kompressionsmodus entsprechend an.
Für unsere Normal Map (_nor_gl) solltest du im Import-Dock kontrollieren, dass die Erkennung als Normal Map tatsächlich gegriffen hat – sonst behandelt Godot die Datei wie ein gewöhnliches Farbbild und komprimiert sie verlustbehaftet, was auf Richtungsdaten sichtbare Artefakte erzeugt. Bei Bedarf stellst du die Import-Option „Normal Map" manuell von „Detect" auf „Enabled".
KI-generiertSchritt 2: ORMMaterial3D einrichten
Ein ORMMaterial3D-Ressource im Inspector zeigt dieselben Grundeinstellungen wie StandardMaterial3D – Albedo, Normal Map, Emission – nur der Occlusion/Roughness/Metallic-Bereich ist zusammengefasst:
| Slot | Datei |
|---|---|
| Albedo | _diff |
| ORM | _arm |
| Normal Map | _nor_gl |
Du ziehst _arm in den ORM-Slot, _diff in Albedo, _nor_gl in Normal Map, aktivierst Normal Mapping über die Checkbox daneben – fertig sind die drei wichtigsten Kanäle. Höhen- und Parallax-Einstellungen kommen in Schritt 4 dazu.
KI-generiertWillst du stattdessen mit Einzeldateien arbeiten, etwa weil du Roughness separat nachjustieren willst, nimmst du StandardMaterial3D und befüllst die eigenen Slots für Metallic, Roughness und Ambient Occlusion mit _rough und _ao. Beide Wege führen zum selben optischen Ergebnis, ORMMaterial3D braucht dabei einen Texture-Sample weniger.
Ein Material lässt sich in Godot laut Dokumentation auf vier Arten einem Objekt zuweisen: über die Material-Eigenschaft des Meshs selbst, über die Material-Eigenschaft des Nodes, der das Mesh nutzt (etwa ein MeshInstance3D), über die Material-Override-Eigenschaft dieses Nodes, oder als Material Overlay, das über einem bestehenden Material liegt. Für unsere Texturen ist der Unterschied vor allem organisatorisch: Ein Material am Mesh selbst wirkt überall, wo dieses Mesh verwendet wird, während ein Material Override nur für eine einzelne Node-Instanz gilt – praktisch, wenn dieselbe Wand-Geometrie einmal mit Cracked Concrete 01 und einmal mit Cobblestone 01 texturiert werden soll.
Schritt 3: Normal Map ohne Umbau übernehmen
Godot legt für Normal Maps eine eigene Konvention fest. Laut Dokumentation gilt: „Godot requires the normal map to use the X+, Y+ and Z+ coordinates, which is known as an OpenGL-style normal map." Wer eine Normal Map aus einem Programm importiert, das DirectX-Konvention nutzt, muss laut derselben Dokumentation vor dem Import die Option Normal Map Invert Y aktivieren.
Für unsere Texturen entfällt dieser Schritt komplett: _nor_gl steht für genau diese OpenGL-Konvention, die Dateien passen unverändert in den Normal-Map-Slot von StandardMaterial3D und ORMMaterial3D. Zusätzlich nutzt Godot laut Dokumentation ohnehin nur Rot- und Grünkanal der Normal Map für die Berechnung, was Kompression und Speicherbedarf senkt.
Schritt 4: Height Map und Parallax
Unsere _disp-Datei lässt sich als Height Map für den Parallax-Effekt von BaseMaterial3D einsetzen. Godot nennt die Funktion in der Klassenreferenz auch „Depth Mapping": Sie täuscht laut Dokumentation zusätzliche Tiefe vor, ohne echte Geometrie zu erzeugen, per Ray-Marching entlang der Blickrichtung.
Die relevanten Eigenschaften:
| Eigenschaft | Funktion |
|---|---|
| Heightmap Enabled | schaltet den Effekt ein, kostet GPU-Leistung |
| Heightmap Texture | nimmt unsere _disp-Datei auf |
| Heightmap Scale | steuert die Stärke des Effekts, Standardwert 5,0 (laut Dokumentation so kalibriert, dass der hellste Punkt der Karte rund 5 cm höher wirkt als der dunkelste) |
| Heightmap Deep Parallax | aktiviert Parallax Occlusion Mapping statt einfachem Offset-Mapping, überzeugender, aber teurer |
| Heightmap Flip Tangent / Heightmap Flip Binormal | korrigieren laut Dokumentation die Richtung des Effekts, falls er seitenverkehrt oder gespiegelt wirkt |
KI-generiertOhne sichtbaren Effekt liegt es fast immer an Heightmap Scale nahe 0 oder daran, dass Heightmap Enabled noch nicht gesetzt ist.
Wichtig für die Erwartungshaltung: Parallax-Mapping verändert nie die tatsächliche Silhouette eines Meshs. Von der Seite betrachtet bleibt eine Wand mit Cracked Concrete 01 flach, der Tiefeneffekt funktioniert nur aus der Perspektive der Kamera und wird an den Kanten des Meshs unweigerlich abgeschnitten. Für sichtbare Kanten – etwa eine Fensterlaibung oder eine Mauerkrone – bleibt echte Geometrie die zuverlässigere Wahl, Parallax eignet sich vor allem für große, flache Flächen wie Wände oder Böden, bei denen die Kamera nie senkrecht an der Kante vorbeischwenkt.
Schritt 5: Kachelgröße über UV1 Scale
Godot skaliert Texturen nicht über ein Tiling-Feld direkt am Textur-Slot, sondern über die Material-Eigenschaft UV1 Scale (ein Vector3, für 2D-Kachelung reichen die ersten beiden Werte). Sie multipliziert die UV1-Koordinaten des Meshs, unabhängig von dessen tatsächlicher Größe. Für eine Fläche, deren UVs 1:1 zur realen Objektgröße gelegt sind, gilt dieselbe Faustregel wie in anderen Engines: UV1 Scale = Kantenlänge in Metern ÷ Kachelmaß der Textur. Cracked Concrete 01 mit seinem Kachelmaß von 1 × 1 m bekommt auf einer 3 Meter breiten Fläche also UV1 Scale X = 3.
Alternativ bietet Godot Triplanar Mapping, das Texturen aus drei Raumrichtungen projiziert und über die Normalen blendet – nützlich für unregelmäßig geformte Meshes ohne saubere UVs, aber mit höheren Rechenkosten.
In der Praxis hilft eine kurze Kontrollrechnung, bevor du eine Fläche mit unseren Texturen belegst: Miss die tatsächliche Kantenlänge des Meshs in der 3D-Software, in der es gebaut wurde, nicht die Größe des Godot-Node im Editor – Skalierungen auf Node-Ebene verändern die UV1-Berechnung nicht automatisch mit. Wenn eine Wand in Blender mit 6 Metern Breite modelliert und exportiert wurde, bleibt UV1 Scale X = 6 ÷ Kachelmaß korrekt, selbst wenn du den Node in Godot später zusätzlich skalierst.
Schritt 6: GLB und glTF importieren
Unsere 3D-Modell-Pakete liegen unter anderem als .gltf und .glb vor. Godot unterstützt laut Dokumentation glTF 2.0 als empfohlenes 3D-Format nativ, in beiden Varianten – als Text-Datei mit separater .bin und Texturen im textures-Ordner, oder als eine einzelne Binärdatei. Ein Plugin ist dafür nicht nötig, du kopierst die Dateien in dein Projektverzeichnis und Godot importiert sie beim nächsten Fokus auf das Editor-Fenster automatisch. Details zu unseren übrigen Formaten (FBX, .blend) stehen in der Anleitung zu 3D-Dateiformaten.
Für den LS25 (Landwirtschafts-Simulator 25) ist Godot kein Bestandteil der Pipeline – dort läuft der Import über den GIANTS Editor mit eigenem i3d-Format und eigener DDS-Konvertierung. Wer trotzdem an beiden Projekten gleichzeitig arbeitet, sollte die beiden Ausgaben strikt trennen: Godot bekommt ORM- und Normal-Map-Dateien in unveränderter Form, LS25 bekommt die separat konvertierten DDS-Dateien aus dem GIANTS Texture Tool.
Ein Blick über den Tellerrand lohnt sich auch hier: In Unreal Engine heißt der gleiche Textur-Standard ORM und funktioniert nahezu identisch, die ORM/ARM-Anleitung vergleicht beide direkt. Wie sich Displacement- und Height-Maps zwischen Engines unterscheiden, steht in der Displacement-Anleitung.
Häufige Fehler
| Problem | Ursache | Lösung |
|---|---|---|
| Normal Map wirkt falsch, Vertiefungen sehen erhaben aus | Fremde DirectX-Normal-Map importiert statt unserer OpenGL-Datei | Unsere _nor_gl-Datei verwenden oder bei fremden Maps die Import-Option Normal Map Invert Y aktivieren |
| Material wirkt komplett metallisch trotz Steintextur | ARM-Datei versehentlich im Albedo-Slot statt im ORM-Slot | ORMMaterial3D verwenden, _arm in den ORM-Slot legen, _diff bleibt Albedo |
| Parallax-Effekt ist nicht sichtbar oder seitenverkehrt | Heightmap Enabled aus, Heightmap Scale nahe 0, oder Tangenten-Richtung falsch | Heightmap Enabled aktivieren, Heightmap Scale erhöhen, notfalls Heightmap Flip Tangent/Binormal umschalten |
| Normal Map wird beim Import wie ein Farbbild komprimiert | Detect 3D hat die Normal-Map-Erkennung nicht automatisch gesetzt | Im Import-Dock die Option Normal Map manuell auf Enabled stellen und neu importieren |
| Kachelung passt nicht zur Modellgröße | UV1 Scale nicht an Kachelmaß und Objektgröße angepasst | UV1 Scale nach der Formel Kantenlänge ÷ Kachelmaß setzen |
Häufige Fragen
StandardMaterial3D oder ORMMaterial3D für unsere Texturen?
ORMMaterial3D, wenn du unsere gepackte _arm-Datei nutzt – sie hat einen eigenen ORM-Textur-Slot dafür. StandardMaterial3D bietet dagegen separate Slots für Albedo, Metallic, Roughness und AO, falls du lieber mit den Einzeldateien _diff, _rough, _ao arbeitest.
Muss ich unsere Normal Map für Godot umbauen?
Nein. Godot erwartet laut Dokumentation die OpenGL-Konvention (X+, Y+, Z+), und unsere _nor_gl-Dateien liegen bereits in genau diesem Format vor. Nur DirectX-Normal-Maps aus anderen Quellen bräuchten beim Import die Option Normal Map Invert Y.
Wie stelle ich die Kachelgröße unserer Texturen in Godot ein?
Über die Eigenschaft UV1 Scale des Materials. Sie skaliert die UV-Koordinaten des Meshs unabhängig von dessen Größe und bestimmt so, wie oft sich die Textur auf einer Fläche wiederholt.
Importiert Godot unsere glTF-Modelle ohne Zusatz-Plugin?
Ja. glTF 2.0 ist laut Godot-Dokumentation das empfohlene 3D-Format und wird sowohl als .gltf als auch als .glb nativ unterstützt, ohne dass du ein Plugin installieren musst.