Zunehmend übernimmt die 3D-Industrie den Standard von Mikktspace zur Berechnung des Tangentenraums für normale Abbildungen und andere Effekte, die auf einer genauen und konsistenten Berechnung des Tangentenraums von einer Anwendung zur anderen beruhen. Blender, xNormal, Unity, Substance Painter und Unreal Engine sind nur einige Beispiele, die jetzt Mikttspace verwenden. Ich persönlich versuche, meine eigenen Projekte neu zu codieren, um diesen Standard ebenfalls zu übernehmen.
Es gibt jedoch nur sehr wenige Ressourcen zur Funktionsweise von Mikktspace, da es sich um eine relativ neue Sache handelt. Die wenigen Ressourcen, die es gibt, sind in der Regel detailarm und sehr technisch, nicht sehr benutzerfreundlich zu verstehen, oder es wird davon ausgegangen, dass der Codierer über einen bestimmten Wissensstand verfügt, der etwas über dem durchschnittlichen Neuling liegt, der gerade erst anfängt und die Dinge genauer erklärt werden muss.
Ich suche nach einer klaren Erklärung, wie Mikktspace funktioniert und wie es implementiert wird, mit einer einfachen Erklärung, wie Mathematik und Code auf eine Weise funktionieren, die nicht nur auf eine Sprache beschränkt ist.
Nehmen wir zum Beispiel an, ein Programmierer hat ein Netzobjekt mit einem Index von Eckpunkten, die jeweils eine Position, eine Normal- und eine UV-Koordinate enthalten, sowie eine Liste von Dreiecken, die auf diesen Index verweisen.
Zum Beispiel:
Vertex
: {XYZ NX NY NZ ST}VertexIndex
: Eine Liste vonVertex
Triangle
: {V1 V2 V3} (in der richtigen Wicklungsreihenfolge für die normale Richtung)TriangleList
: Eine Liste vonTriangle
Wie würde man in einfachen Worten vorgehen, um pro Scheitelpunkt einen Tangentenvektor (TX TY TZ) und einen Bitangensvektor (BX BY BZ) für jeden Scheitelpunkt auf eine Weise zu berechnen, die Mikktspace entspricht?