Assimp lädt keine Bones

Programmiersprachen, APIs, Bibliotheken, Open Source Engines, Debugging, Quellcode Fehler und alles was mit praktischer Programmierung zu tun hat.
Antworten
Benutzeravatar
Jonathan
Establishment
Beiträge: 2661
Registriert: 04.08.2004, 20:06
Kontaktdaten:

Assimp lädt keine Bones

Beitrag von Jonathan »

Nach ein paar Tagen debugging habe ich letztendlich herausgefunden, dass in meinem Vertexshader keine Boneweights ankommen. Und dass die Matrizen die ich seit Tagen anschaue scheinbar doch ziemlich richtig sind.
Das Problem an der Sache ist jetzt: Assimp scheint überhaupt keine Bones zu laden. Der entsprechende Eintrag in aiMesh ist einfach leer. Ich habe das Commandline-Tool benutzt und den XML-Dump angeschaut und dort sind weit und breit keine Bones zu sehen (im Gegensatz zu den Dumps von Modellen, die funktionieren - es scheint soweit also alles in Ordnung zu sein).
Das eigentlich interessante ist aber, dass sowohl der Assimp-Viewer, als auch OpenMod3D das Modell mitsamt Animationen korrekt anzeigen. Nach etwas nachforschen habe ich dann herausgefunden, dass die einzelnen Nodes auch Verweise auf Submeshs haben können, wodurch dann wohl einfach das gesamte Mesh transformiert wird.
Die Frage ist jetzt: Spricht etwas dagegen, dass intern in Weights zu konvertieren (das wäre eigentlich auch ein ganz netter PostPro-Schritt, wie mir gerade einfällt), oder kann ich damit an anderen Stellen Probleme bekommen? Kann es beispielsweise vorkommen, dass beides benutzt wird?
Lieber dumm fragen, als dumm bleiben!
https://jonathank.de/games/
Benutzeravatar
kimmi
Moderator
Beiträge: 1412
Registriert: 26.02.2009, 09:42
Echter Name: Kim Kulling
Wohnort: Luebeck
Kontaktdaten:

Re: Assimp lädt keine Bones

Beitrag von kimmi »

Hast du den Post-proxcessing-Step Pretransform Vertices auf enabled gesetzt? Wenn ja: nimm die Option mal raus.

Gruß Kimmi
Benutzeravatar
Schrompf
Moderator
Beiträge: 5164
Registriert: 25.02.2009, 23:44
Benutzertext: Lernt nur selten dazu
Echter Name: Thomas
Wohnort: Dresden
Kontaktdaten:

Re: Assimp lädt keine Bones

Beitrag von Schrompf »

Verstehe ich das richtig: Du hast ein Modell geladen. Das besteht aber nicht aus einem einzelnen Mesh, der mittels Bones deformiert wird, sondern aus einer Reihe Meshes, die jeweils nur transformiert werden? Dafür einen PPS zu schreiben, der alles in einen Mesh zusammenführt und die einzelnen Trafos als Bones abbildet, wäre durchaus ne Idee.
Früher mal Dreamworlds. Früher mal Open Asset Import Library. Heutzutage nur noch so rumwursteln.
Benutzeravatar
Jonathan
Establishment
Beiträge: 2661
Registriert: 04.08.2004, 20:06
Kontaktdaten:

Re: Assimp lädt keine Bones

Beitrag von Jonathan »

Jup, genau.
Ich habe jetzt erstmal nur Bone-Weights generiert. Allerdings erst nach dem Laden, weil ich auf meinen eigenen Datenstrukturen komfortabler arbeiten konnte und ich mich nicht in die Assimp PP-Konventionen einarbeiten wollte. Waren insgesamt auch unter 40 Zeilen, also kein großer Aufwand.
Das Modell ist halt ein Mech, als fbx-Datei aus Blender exportiert. Ich fand es interessant, dass die Weights nicht direkt in der Datei standen, aber wollte halt auch Sonderfälle unterstützen.
Leider habe ich immer noch ein paar Probleme mit den Transformationen. Irgendetwas übersehe ich scheinbar oder rechne zuviel und es ist nicht wirklich einfach den Fehler zu finden. Naja, mal schauen.
Lieber dumm fragen, als dumm bleiben!
https://jonathank.de/games/
Benutzeravatar
Jonathan
Establishment
Beiträge: 2661
Registriert: 04.08.2004, 20:06
Kontaktdaten:

Re: Assimp lädt keine Bones

Beitrag von Jonathan »

Ich habe nochmal eine Frage: Wofür genau ist die mOffsetMatrix in aiBone? Ist das nicht eine total redundante Information, weil man die entsprechende Transformation auch genauso aus den mTransform Werten der aiNodes berechnen kann (einfach die Kette entlang der Parents bilden und invertieren).
Denn da das aktuelle Problem-Modell keine Weights hat, fehlen die mOffsetMatrix-Werte auch komplett. Ich habe sie aber früher ohnehin nie benutzt sondern die MeshToBone-Transformationen immer aus der Node-Hierarchie berechnet.
Die Frage ist daher: Darf ich das überhaupt machen, oder gibt es tatsächlich Situationen, in denen mOffsetMatrix zusätzliche Informationen enthält?
Lieber dumm fragen, als dumm bleiben!
https://jonathank.de/games/
Benutzeravatar
Schrompf
Moderator
Beiträge: 5164
Registriert: 25.02.2009, 23:44
Benutzertext: Lernt nur selten dazu
Echter Name: Thomas
Wohnort: Dresden
Kontaktdaten:

Re: Assimp lädt keine Bones

Beitrag von Schrompf »

mOffsetMatrix ist die MeshToBone-Matrix, das stimmt. Die aber ist immer gültig, während die aktuelle Transformation der Nodes nicht unbedingt in Bind Pose ist. Wenn das ganze Skelett in Bind Pose exportiert wird, klappt Dein Ansatz. Ich habe aber oft genug gesehen, dass Exporter das Skelett und dessen Nodes in der aktuellen Anim-Phase exportieren. Dann kannst Du die Node Trafos nicht für die Bind Pose benutzen, sondern bist auf die Offset Matrix angewiesen.

Die heißt übrigens so, weil sie in Assimps ersten Dateiformat, was Anims unterstützt (DirectX), so hieß.
Früher mal Dreamworlds. Früher mal Open Asset Import Library. Heutzutage nur noch so rumwursteln.
Antworten