Wie berechnet Mikktspace den Tangentenraum während des normalen Mappings?


8

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 von Vertex
  • Triangle: {V1 V2 V3} (in der richtigen Wicklungsreihenfolge für die normale Richtung)
  • TriangleList: Eine Liste von Triangle

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?


Ist es zu schwer Jeder kann es versuchen, wenn er das Gefühl hat, eine Antwort geben zu können. Schon eine kurze Erklärung dessen, was sich von der Mikktspace-Technik spezifisch von der allgemeinen Technik der Tangentenraumberechnung unterscheidet?
Grady

Antworten:


4

Dieses Projekt enthält mehr Code:
Dieses https://github.com/teared/mikktspace-for-houdini/tree/master/source

Informationen zu normalen Tangentenraumkarten finden Sie auch hier:
https://archive.blender.org/wiki/index.php/Dev:Shading/Tangent_Space_Normal_Maps/ http://image.diku.dk/projects/media/morten. mikkelsen.08.pdf

Andere Informationen über die normalen Karten des Tangetenraums (Mikktspace) sind nicht sehr klar.

Eine kurze Erklärung zu den Methoden ist sehr lang und daher habe ich die beiden obigen Links eingefügt, um auf die gute Erklärung zu Tangentenraum-Normalkarten zu verweisen.

Hinweis: Blender gibt auch Tipps, warum Sie diese Methode nicht verwenden sollten.

Ich hoffe das war hilfreich :)


Ich denke, Sie sollten einige Informationen (eine Art Einführung) neben den Links allein setzen. Sie sind nicht sehr hilfreich, wenn sie eines Tages 404 werden würden.
Aistis

Sehr wahr, gute Idee Aistis. Sie können aber auch eine Website herunterladen, wenn Sie möchten.
Tripl3Fac3

Ich akzeptiere diese Antwort als die richtige Antwort, da Tripl3Fac3 für mich persönlich eine große Hilfe war und die Informationen, die Tripl3Fac3 in den Links bereitgestellt hat, so ziemlich alle derzeit besten Ressourcen zu diesem Thema zusammenfassen.
Grady

Gern geschehen, es tut mir leid, dass ich nicht früher antworten konnte, mit Schulprojekten und einer neuen 2D-Spiel-Engine beschäftigt war, die mit jeder Plattform kompatibel ist (egal welchen Treiber Sie verwenden)
Tripl3Fac3

1
Der PDF-Link funktioniert gut für mich @Fire
Tripl3Fac3
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.