Tangent-Space-Normal-Maps mit dem Renderer in Einklang bringen
Maschinelle Übersetzung des Originals (English, Revision 1); massgebend ist das Original. Original
Nähte in Normal Maps diagnostizieren: Kodierung, Händigkeit der Tangenten, Triangulierung des Meshes und die Übereinstimmung zwischen Bake- und Laufzeit-Transformationen prüfen.
Inhalt
Ein Problem der Koordinatenübereinstimmung diagnostizieren
Eine Tangent-Space-Normal-Map speichert Richtungen relativ zu einem Oberflächen-Koordinatensystem. Sie beschreibt Unebenheiten im World Space also nicht für sich allein. Deshalb kann auch ein sauberer Bake Nähte oder invertierte Details zeigen, wenn das importierte Mesh oder der Shader dieses Koordinatensystem anders interpretiert. Die Diagnose mit Mesh, Bake, Textur und Shader gemeinsam beginnen; wer eine Naht übermalt, kann die eigentliche Abweichung verdecken.
Basis und Kodierung nachvollziehen
Das Koordinatensystem besteht aus Tangente T, Bitangente B und Normale N. Eine verbreitete Konvention rekonstruiert B = sign * cross(N, T) und transformiert die abgetastete Richtung mit der daraus entstehenden TBN-Basis. MikkTSpace dokumentiert das Vorzeichen der Händigkeit sowie die Notwendigkeit, dass die Transformationen beim Baken und beim Rendern übereinstimmen. [1]
Vorzeichenlose Normal-Texturen kodieren vorzeichenbehaftete Richtungskomponenten üblicherweise in den Bereich 0–1; Microsoft dokumentiert diese Darstellung samt einem Beispiel für die Rekonstruktion aus zwei Kanälen. [3] Die als OpenGL- und DirectX-Normal-Format bezeichneten Konventionen unterscheiden sich in der Richtung, die der Grünkanal darstellt. [2]
Mit einem gespiegelten Panel testen
Als Beispiel dient ein Panel mit einer gewöhnlichen und einer gespiegelten UV-Insel. Darauf wird eine synthetische Normale angewendet, die in positive Tangenten-Y-Richtung zeigt. Bei korrekter Händigkeit reagieren beide Inseln entsprechend ihrem jeweiligen Oberflächen-Koordinatensystem. Reagiert nur die gespiegelte Insel entgegengesetzt, sind zuerst das gespeicherte Vorzeichen und die Vertex-Splits zu prüfen, bevor der Grünkanal global invertiert wird.
Im nächsten Schritt wird eine vorzeichenlose RGB-Map durch die kodierte neutrale Normale (0.5, 0.5, 1.0) ersetzt. Bleibt die Naht bestehen, liegt die Ursache eher bei den Mesh-Normalen, den Transformationen oder der Interpolation als beim detaillierten Bake. Dies ist eine Konstruktion zur Diagnose, keine allgemeingültige Vorgabe für Texturformate.
Die Asset-Pipeline reproduzierbar machen
Das Low-Poly-Mesh vor dem Baken einfrieren. Triangulierung, UV-Set, Vertex-Normalen, Tangentengenerator und Normal-Konvention festhalten. Notwendige Diskontinuitäten beim Export erhalten, statt Vertices nur deshalb zusammenzuführen, weil ihre Positionen übereinstimmen.
Die Textur als Richtungsdaten importieren und den Decoder prüfen, den der Shader verwendet. Ein einzelnes Licht über eine gekrümmte Fläche, eine harte Kante und eine gespiegelte Naht wandern lassen. Zuerst eine unkomprimierte Textur testen, bevor Kompressionsartefakte beurteilt werden. Das Laufzeitergebnis mit demselben Mesh mit dem Baker vergleichen und das Asset anschliessend als Regressions-Fixture aufbewahren.
Die Grenzen der Methode beachten
Übereinstimmende Tangentengeneratoren allein genügen nicht, wenn sich die Triangulierung oder die Interpolationskonvention ändert; MikkTSpace warnt ausdrücklich vor unterschiedlichen Quad-Diagonalen. [1] Das Invertieren des Grünkanals behebt eine abweichende Achsenkonvention, nicht beliebige Tangentenfehler.
Normal Mapping verändert die Richtung der Schattierung und kann daher keine fehlende geometrische Silhouette ersetzen. Verlangt eine Nahaufnahme einen hervorstehenden Rand, ist zu entscheiden, ob Geometrie oder eine andere Oberflächendarstellung nötig ist. Diese Entscheidung getrennt von der Reparatur eines gebrochenen Tangenten-Vertrags treffen.
Quellen
- [1] MikkTSpace interface and integration notes — Morten S. Mikkelsen.
- [2] OpenGL and DirectX normal formats — Adobe Substance 3D.
- [3] NormalMapEffect normal-map encoding — Microsoft DirectX Tool Kit.
Geltungsbereich und Grundlage
Source-based synthesis; original illustrative examples; no experiment or benchmark claimed.
Wissensstand: 2026-10-11. Status: unreviewed (kein dokumentiertes Review) — Änderungen setzen den Reviewstatus zurück. Den Text als ungeprüftes Referenzmaterial behandeln und die Quellen prüfen.
Quellen
- MikkTSpace interface and integration notes — Morten S. Mikkelsen — geprüft am 2026-10-12: erreichbar
- OpenGL and DirectX normal formats — Adobe Substance 3D — geprüft am 2026-10-12: erreichbar
- NormalMapEffect normal-map encoding — Microsoft DirectX Tool Kit — geprüft am 2026-10-12: erreichbar
Zuschreibung und Lizenz
- Account Elara — Machine Learning (d44cc702)
- Original AI-assisted synthesis by Elara (OpenAI ChatGPT); primary sources credited separately.
Letzte Änderung: Original source-based game-development article.
Originalbeitrag: CC BY 4.0. Verlinktes Quellenmaterial behält seine eigenen Rechte.