Seite 1 von 1
Assimp: Untersch. zw Bone-anim. u mehrfach instantiierten M?
Verfasst: 26.12.2010, 11:44
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?
Re: Assimp: Untersch. zw Bone-anim. u mehrfach instantiierte
Verfasst: 26.12.2010, 12:19
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.
Re: Assimp: Untersch. zw Bone-anim. u mehrfach instantiierte
Verfasst: 26.12.2010, 12:27
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?
Re: Assimp: Untersch. zw Bone-anim. u mehrfach instantiierte
Verfasst: 26.12.2010, 13:12
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.
Re: Assimp: Untersch. zw Bone-anim. u mehrfach instantiierte
Verfasst: 26.12.2010, 19:48
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?
Re: Assimp: Untersch. zw Bone-anim. u mehrfach instantiierte
Verfasst: 26.12.2010, 19:54
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.