[Assimp] Richtung der Bitangenten

Für Fragen zu Grafik APIs wie DirectX und OpenGL sowie Shaderprogrammierung.
Antworten
Benutzeravatar
CodingCat
Establishment
Beiträge: 1857
Registriert: 02.03.2009, 21:25
Wohnort: Student @ KIT
Kontaktdaten:

[Assimp] Richtung der Bitangenten

Beitrag von CodingCat »

Ich habe den ganzen Tag damit zugebracht, Tangenten und Bitangenten in meinem Shader zu rekonstruieren. Schlussendlich komme ich jedoch nie um eine Negierung der Bitangenten herum. Ist es gewollt / bekannt, dass die Bitangenten nach dem Assimp-Import stets entgegen der V-Texturrichtung zeigen, oder mache ich was falsch?

Ich nutze aiProcess_ConvertToLeftHanded. Ich habe auch mal über den Source geschaut, und prinzipiell scheint alles Notwendige vorgenommen zu werden. In FlipUVs werden die V-Koordinaten geflippt, in MakeLeftHanded die Bitangenten. (Warum eigentlich, sollte das nicht zu den UV-Koordinaten? Sollte MakeLeftHanded tatsächlich mal isoliert eingesetzt werden, zeigen die Bitangenten doch erst Recht in die falsche Richtung?)

Momentan zeigen meine Tangenten in U-Richtung und meine Bitangenten entgegen der V-Richtung. :(
alphanew.net (last updated 2011-07-02) | auf Twitter | Source Code: breeze 2 | lean C++ library | D3D Effects Lite
Benutzeravatar
Schrompf
Moderator
Beiträge: 4884
Registriert: 25.02.2009, 23:44
Benutzertext: Lernt nur selten dazu
Echter Name: Thomas Ziegenhagen
Wohnort: Dresden
Kontaktdaten:

Re: [Assimp] Richtung der Bitangenten

Beitrag von Schrompf »

Tja... ich hab mich ehrlich gesagt seit Jahren mit diesem Thema nicht mehr beschäftigt. Ich müsste das Projekt mal "vanilla" benutzen - ohne die zweihundert Framework-Stufen zwischendurch.
Früher mal Dreamworlds. Früher mal Open Asset Import Library. Heutzutage nur noch so rumwursteln.
Benutzeravatar
Aramis
Moderator
Beiträge: 1458
Registriert: 25.02.2009, 19:50
Echter Name: Alexander Gessler
Wohnort: 2016
Kontaktdaten:

Re: [Assimp] Richtung der Bitangenten

Beitrag von Aramis »

Benutzeravatar
Schrompf
Moderator
Beiträge: 4884
Registriert: 25.02.2009, 23:44
Benutzertext: Lernt nur selten dazu
Echter Name: Thomas Ziegenhagen
Wohnort: Dresden
Kontaktdaten:

Re: [Assimp] Richtung der Bitangenten

Beitrag von Schrompf »

Hm.... verstehe ich das richtig?

Right Handed Coordinate System:
- Tangenten sind korrekt
- Bitangenten sind invertiert

Left Handed Coordinate System:
- Tangenten sind korrekt
- Bitangenten sind aus Versehen korrekt, weil wir vergessen haben, mit dem Flippen der UV-Channels auch die Bitangenten umzudrehen?

Warum ist das bisher niemandem aufgefallen? Oder wurschteln die alle genauso wie ich nur mit den Minuszeichen rum, bis das Ergebnis stimmt? :?
Früher mal Dreamworlds. Früher mal Open Asset Import Library. Heutzutage nur noch so rumwursteln.
Benutzeravatar
CodingCat
Establishment
Beiträge: 1857
Registriert: 02.03.2009, 21:25
Wohnort: Student @ KIT
Kontaktdaten:

Re: [Assimp] Richtung der Bitangenten

Beitrag von CodingCat »

Nein, siehe Eingangspost. Die Konvertierung Left <-> Right stimmt prinzipiell, auch wenn sie etwas seltsam über die verschiedenen Schritte verteilt ist (ebenfalls siehe oben). Die Bitangenten sind auch bei mir im Left-Handed System falsch, und somit wohl konsequent immer falsch. ;)
alphanew.net (last updated 2011-07-02) | auf Twitter | Source Code: breeze 2 | lean C++ library | D3D Effects Lite
Benutzeravatar
CodingCat
Establishment
Beiträge: 1857
Registriert: 02.03.2009, 21:25
Wohnort: Student @ KIT
Kontaktdaten:

Re: [Assimp] Richtung der Bitangenten

Beitrag von CodingCat »

Code: Alles auswählen

// mirror bitangents as well as they're derived from the texture coords
if( pMesh->HasTangentsAndBitangents())
{
	for( unsigned int a = 0; a < pMesh->mNumVertices; a++)
		pMesh->mBitangents[a] *= -1.0f;
}
Dieser Schritt aus MakeLeftHandedProcess sollte wohl in FlipUVsProcess, damit die beiden Schritte auch isoliert korrekt arbeiten.

Unabhängig davon sind die Bitangenten aber im Right- wie Left-Handed Coordinate System stets invertiert, was dann eigentlich nur noch an der grundsätzlichen Berechnung des Tangent Frames liegen kann.
alphanew.net (last updated 2011-07-02) | auf Twitter | Source Code: breeze 2 | lean C++ library | D3D Effects Lite
Antworten