Assimp: Untersch. zw Bone-anim. u mehrfach instantiierten M?

Für Fragen zu Grafik APIs wie DirectX und OpenGL sowie Shaderprogrammierung.
Antworten
CarstenF
Beiträge: 14
Registriert: 24.11.2010, 20:56
Kontaktdaten:

Assimp: Untersch. zw Bone-anim. u mehrfach instantiierten M?

Beitrag von CarstenF »

[Sorry, die Betreff-Zeile ist einfach zu kurz: "Assimp: Unterscheidung zwischen Bone-animierten und mehrfach instantiierten Meshes?"]


Hallo allerseits,

kurze Frage:
Soweit ich es sehe, kann in Assimp ein Mesh entweder
  • Bone-animiert sein (dann taucht es nicht in einem der aiNode::mMeshes auf), oder
  • statisch sein und ein- oder mehrfach durch Auflistung in den aiNode::mMeshes instantiiert werden (dann kann es nicht animiert werden, da sonst mehrere Nodes mit demselben Namen notwendig).
:arrow: Stimmt das so?

D.h. gilt stets, dass für ein in aiNode::mMeshes erwähntes Mesh gilt aiMesh::HasBones()==false, und wenn aiMesh::HasBones()==true, dann kommt es in keinem der aiNode::mMeshes vor?
Viele Grüße,
Carsten

Cafu - die open-source Spiele- und Grafik-Engine für multiplayer, cross-platform, real-time 3D Action
Benutzeravatar
Schrompf
Moderator
Beiträge: 5162
Registriert: 25.02.2009, 23:44
Benutzertext: Lernt nur selten dazu
Echter Name: Thomas
Wohnort: Dresden
Kontaktdaten:

Re: Assimp: Untersch. zw Bone-anim. u mehrfach instantiierte

Beitrag von Schrompf »

Jeder Mesh wird in mindestens einem Node instanziiert, sonst hat der jeweilige Loader Müll produziert. Ein Mesh kann auch mehrfach instanziiert sein, wenn er Bones hat, aber das kommt in der Praxis nicht vor.
Früher mal Dreamworlds. Früher mal Open Asset Import Library. Heutzutage nur noch so rumwursteln.
CarstenF
Beiträge: 14
Registriert: 24.11.2010, 20:56
Kontaktdaten:

Re: Assimp: Untersch. zw Bone-anim. u mehrfach instantiierte

Beitrag von CarstenF »

Vielen Dank für Deine Antwort,
Schrompf hat geschrieben:Jeder Mesh wird in mindestens einem Node instanziiert, sonst hat der jeweilige Loader Müll produziert.
Aber die Bones ordnen doch (im Allgemeinen bzw. U.U.) den Vertices ganz andere Nodes zu als die Instantiierung des Meshes durch den Node?
Ein Mesh kann auch mehrfach instanziiert sein, wenn er Bones hat, aber das kommt in der Praxis nicht vor.
In diesem wie in dem obigen Fall lautet die Frage bzw. der springende Punkt:

Woher soll der User-Code wissen, was nun gewollt bzw. gemeint ist?

Haben wir ein statisches Mesh geladen das mehrfach instantiiert werden soll und versehentlich Bones enthält, oder haben wir ein animiertes Mesh geladen dass versehentlich mehrfach in der aiNodes Hierarchie erwähnt wurde?
Viele Grüße,
Carsten

Cafu - die open-source Spiele- und Grafik-Engine für multiplayer, cross-platform, real-time 3D Action
Benutzeravatar
Schrompf
Moderator
Beiträge: 5162
Registriert: 25.02.2009, 23:44
Benutzertext: Lernt nur selten dazu
Echter Name: Thomas
Wohnort: Dresden
Kontaktdaten:

Re: Assimp: Untersch. zw Bone-anim. u mehrfach instantiierte

Beitrag von Schrompf »

CarstenF hat geschrieben: Aber die Bones ordnen doch (im Allgemeinen bzw. U.U.) den Vertices ganz andere Nodes zu als die Instantiierung des Meshes durch den Node?
Das stimmt. Für den Fall, dass ein Mesh durch Bones defomiert wird, ist der mesh-instanziierende Node eigentlich nicht mehr von Bedeutung. Der Node kann aber trotzdem Kinder haben, zum Beispiel die Skelett-Nodes - das hängt dann davon ab, wie Dein Grafiker und das verwendete Modellierungsprogramm das handhaben.
In diesem wie in dem obigen Fall lautet die Frage bzw. der springende Punkt:

Woher soll der User-Code wissen, was nun gewollt bzw. gemeint ist?

Haben wir ein statisches Mesh geladen das mehrfach instantiiert werden soll und versehentlich Bones enthält, oder haben wir ein animiertes Mesh geladen dass versehentlich mehrfach in der aiNodes Hierarchie erwähnt wurde?
Aus den vorliegenden Szenendaten ist dann gar nicht mehr zu erkennen, wo genau nun das Versehen liegt. Das ist aber auch egal, würde ich sagen... man hat dann halt zwei Instanzen des Meshes, die sich synchron bewegen. Falls das wirklich jemals vorkommen sollte und Du partout genau dieses File brauchst, löschst Du halt eine der Instanzen. Ansonsten wäre eher ein Ruf in Richtung der Grafikabteilung angebracht, was der Unsinn soll :-)

Bei den Splitterwelten machen wir das übrigens so: anhand der Bone-Namen wird der Teil der Hierarchie identifiziert, der das Skelett darstellt. Der wird dann als Szenegraph-Hierarchie nachgebildet und dem Mesh-Node untergeordnet. Ich empfehle, dabei auch eventuelle Nicht-Bone-Zwischennodes mitzunehmen, weil die Grafiker manchmal solche Zwischennodes einfügen, um sich das Animieren zu vereinfachen.
Früher mal Dreamworlds. Früher mal Open Asset Import Library. Heutzutage nur noch so rumwursteln.
CarstenF
Beiträge: 14
Registriert: 24.11.2010, 20:56
Kontaktdaten:

Re: Assimp: Untersch. zw Bone-anim. u mehrfach instantiierte

Beitrag von CarstenF »

Alles klar, danke vielmals!

Also ich mache es nun so, dass ich den Nodes-Baum traversiere und dabei Meshes "instantiiere", die keine Bones haben.

Danach laufe ich nochmal über die Scene->mMeshes und betrachte nun diejenigen Meshes, die mNumBones>0 haben.

Interessanterweise scheint für letztere (Meshes mit Bones) die (einmalige oder versehentlich mehrmalige) Erwähnung im Nodes-Baum überhaupt keine Rolle zu spielen, weil man die (statische) Bind-Pose erhalten kann über die per aiBones verfügbaren Informationen (inbs. die Weights, und Nodes gleichen Namens).

D.h. Meshes mit Bones bräuchten in der Nodes-Hierarchie eigentlich gar nicht erwähnt zu werden! (Dieser Punkt, d.h. dass sie das "doch" auftauchen, hat mir lange Zeit das Verständnis erschwert...) Oder sehe ich da was falsch?
Viele Grüße,
Carsten

Cafu - die open-source Spiele- und Grafik-Engine für multiplayer, cross-platform, real-time 3D Action
Benutzeravatar
Schrompf
Moderator
Beiträge: 5162
Registriert: 25.02.2009, 23:44
Benutzertext: Lernt nur selten dazu
Echter Name: Thomas
Wohnort: Dresden
Kontaktdaten:

Re: Assimp: Untersch. zw Bone-anim. u mehrfach instantiierte

Beitrag von Schrompf »

Hm... eigentlich hast Du das korrekt erkannt - die Vertizes eines geriggten Meshes könnten bereits vollständig aus aiMesh und den Bone-Nodes hergestellt werden. Man benötigt dazu den mesh-instanziierenden Node nicht. Wir benutzen ihn trotzdem, um den Tierchen einen Namen zu geben :-) Aber das ist Geschmackssache und beileibe keine Notwendigkeit.
Früher mal Dreamworlds. Früher mal Open Asset Import Library. Heutzutage nur noch so rumwursteln.
Antworten