Hilfe bei Animations-Import

  • Ich arbeite gerade an einer Visualisierung, und habe ein ziemlich komplizierte Maschine animiert.
    Das Problem: Meine Zylinder werden einfach nicht richtig exportiert oder importiert.
    Meine Vermutung ist, das es an dem Blender-BoneConstraint "Stretch To" liegt, mit dem Ich die Zylinder animiere. Ich habe quasi ein Bone, der skaliert wird, und an seinem Ende und Anfang sind 2 weitere Bones, die dann die jeweiligen Zylinder-Teile rotieren und verschieben.
    Anscheinend sind in Unreal die 2 Bones irgendwie falsch rotiert. Ich habe schon ziemlich viel herrumexperimentiert, aber komme zu keinem besseren Ergebnis.

    Hier mal ein Beispiel: (oben UE, unten Blender)



    Habt Ihr einen Tipp, wie Ich das noch versuchen könnte? In Blender funktioniert die Animation ganz wunderbar, Ich benutze bis auf diese Constraints nichts anderes kompliziertes und habe keine Fehler beim Importieren.
    Ansonsten würde Ich mir einen Zylinder-Blueprint bauen, den Ich an 2 Sockets des Skeletal Meshes anbringe, was natürlich viel mehr Arbeit ist.....

    MFG, Tank

    • Offizieller Beitrag

    Das wie ist klar oder ? In Blender funktioniert ja alles oder ?


    Wie du selbst schon festgestellt hast, solltest du folgendes brachten:


    1. Die Bones in die Richtige Richtung ausrichten, in deinem Fall wohl in Arm Richtung. In Maya würde dies mit Pivot - Set to Edge gehen. ( Die Pivot nach einer Edge ausrichten)

    2. Du solltest die Translation vor dem Export immer Freezen (auf 0 setzen)

    3. Die Bones Limitieren. Ein Bone kann zb in + Richtung um 90 Grad rotieren oder in - Richtung um 90 Grad. Damit das Rigg richtig funktioniert kannst du je nach Bedarf die + oder - Richtung sperren.

    Somit hat der Bone keine andere Wahl als sich korrekt zu verhalten.

  • Hallo

    Du hast richtig vermutet.

    Blender exportiert keine constraints, sondern nur die reine Animation, also die Verschiebung der Vertices.

    In der Engine müsstest du den bone skalieren um das entsprechende Ergebnis zu erzielen.

    Gewichte die Teile die Rotieren an eine Entsprechende Achse. die kolben an einen entsprechenden Bone. Die Schwingbewegung des Pleuels kannst du durch entsprechendes Gewichten erreichen.

    Anbei ein kleines Modell im Blendfile. Ich hoffe ich konnte helfen.

  • Erstmal danke an alle für eure Antworten.

    Sleepy
    Die Armature hat die ScaleLocRot auf 0,0,0/1,1,1
    Auch alle Bones haben folgendes:

    Die Bones sind perfekt nach der Geometrie ausgerichtet
    Die Bones sind so, das sie nicht in eine Gimbal-Lock Stellung kommen. Ich habe dafür die Bone-Roll des Stretch-Bones auf -90° gesetzt. Vorher wollte er sich nämlich einmal komplett drehen, wenn die End-Y-Pos die Start-Y-Pos "überhohlt" hat. Das sollte aber kein Problem machen, denn auch andere Bones haben angepasste "Roll" werte.


    Artful3D
    Aber es bringt ja nichts, wenn Ich den bone per Anim-BP skaliere, müsste Ich ja alle Werte irgendwie in ne Kurve packen, da mache Ich dann lieber einen Zylinder-BP anstatt alle Werte aus Blender zu notieren und zu übertragen x_x

    Danke, aber Ich glaube Ich verstehe dein Beispiel nicht ganz. Im Prinzip zeigt es das so, wie Ich es auch gemacht habe.


    Also In Blender sieht das ganze so aus:

    Der Große Bone steuert den Arm. Daran ist ein kleiner control-bone. Der grüne Bone skaliert sich immer zum control bone und verschiebt somit den kleinen hellblauen Bone an der Spitze.
    Nur die 2 kleinen hellblauen Bones (links) tragen die Gewichtungen der Verticies des Zylinders.
    Ich habe noch eine lineare-bewegung, wo Ich auch einen Bone benutze, der skaliert wird um einen kleinen Bone an dessen Spitze linear zu verschieben, und das funktioniert wunderbar. Allerdings benutzt der nicht das "StretchTo" constraint.

    Ich habe auch versucht, die Animation für alle Frames zu baken, und dann zu exportieren, aber das bringt anscheinend nichts.


    anscheinend sind die 2 kleinen hellblauen Bones in Unreal etwas verdreht. In der Endposition passt die Animation wieder, je kleiner der grüne Bone wird, desto ungenauer werden scheinbar Ihre Werte.

  • Entschuldigung für Doppelpost, aber das hier ist eine wichtige Erkenntnis:

    Habe nochmal überprüft:
    Wenn Ich mir die Bones in UE anzeigen lasse, sieht alles richtig aus, auf den zweiten Blick merkt man aber, das die Kolbenstange dem "Piston_End" folgt. Das wäre der richtige Bone, allerdings ist in UE der Piston_End irgendwie nicht der gleiche bone wie in Blender. Die Stange sollte eigentlich dem (mit Paint) grün markierten Bone folgen und im 90° Winkel dazu stehen, dann wäre es richtig.
    Der "Piston_End" Bone heißt in Unreal "Piston_End_End". Der "Stretch_Bone" heißt "Piston_End"
    Omg, das ist so verwirrend.
    Das heißt es ist anscheinend ein Fehler bei der Zuordnung der Verticles zu den Bones. Sie folgen einfach dem falschen.




    Edit: Mein Gehirn besteht nurnoch aus Pampe, anscheinend gibt es vertex-groups, die keinem einziegen dieser Bones und scheinbaren Bones folgen, Ich bin einfach nur verwirrt, und weiß garnichtsmehr. Ich glaube Ich baue mir einfach einen BP dafür, den ich dann an das Skeletal-Mesh attache. Wenn Ich mich wirklich für einen Zylinder sonst so lange rumärgere, lohnt es nicht, weil Ich noch viele verschiedene Maschinen habe, die zum Teil über 8 solcher Dinger haben >____<
    Falls euch noch eine Lösung einfällt, die mich rettet, nehme Ich die natürlich gerne an :(

    • Offizieller Beitrag

    Für den Arm ein Rigg okay aber wieso für die Hydraulik ? Das würde ich mit Constrains lösen:




    Also:


    1.Die Zylinder Rot und Lila dürfen sich nur in Pfeil richtung drehen.

    2.Der Zylinder (Blau ist mit dem Zylinder Rot geparentet.

    3.Drehst du also den Roten Zylinder, so dreht sich der Blaue Zylinder in der selben Richtung mit.

    4.Der Grüne Zylinder ist mit dem Rosa Zylinder via Parent verbunden.

    4.Drehst du den Rosa Zylinder, so dreht sich der Grüne Zylinder mit. a



    5.Achte darauf das die Pivots richtig am Rotations Punkt gesetzt sind.


    6. Nun der Trick: Das sind 4 einzelne Objekte (Kein Merge, Combine oder Gruppen.

    7.Du richtest den Blauen Zylinder auf den Rosazylinder aus und zwar so, das der Blaue Zylinder immer auf den Rosa Zylinder zeigt (Wie ein Magnet)

    Das selbe machst du mit dem Grün/Roten Zylinder.


    In der Praxis funkt das nun so:

    Kippst du den arm, so richtet sich der Blaue Zyilinder immer auf den Rosa Zylinder aus. Und der Grüne Zylinder immer auf den Roten Zylinder.Kiippst du den Arm, so fährt der blaue Zyilinder in den Grünen hinein und der Grüne in den Blauen hinein.


    Wenn deine Mechanik komplexer wird, ist es ratsam entsprechende Gelenke und Drehpunkte einzubauen (Mehr Zylinder)


    Ich hab vor ca 2 jahren mal so ein Arm gebaut der hat sehr gut funktioniert wenn ich Morgen am PC bin kann ich den auch gerne mal hochladen falls Interesse besteht.

  • Zeig mal deine Export settings.



    Sleepy
    Ich dachte, wenn Ich alles mit einem Skelett steuere, ist es schön einfach. Da habe Ich mich wohl etwas vertan.
    Du redest aber von Constraints in der 3D Software, und nicht von Physic-Constraints in Unreal, stimmts? Da müsste Ich mich dann erstmal mit beschäftigen.
    Ich glaube einen kleinen Zylinder-BP zu bauen ist garnicht so eine schlecht Idee. Im Prinzip müsste er dann auch nur das machen, was du beschrieben hast. :)

    • Offizieller Beitrag

    Du redest aber von Constraints in der 3D Software, und nicht von Physic-Constraints in Unreal, stimmts? Da müsste Ich mich dann erstmal mit beschäftigen.
    Ich glaube einen kleinen Zylinder-BP zu bauen ist garnicht so eine schlecht Idee. Im Prinzip müsste er dann auch nur das machen, was du beschrieben hast. :)

    Constrains kannst du natürlich nicht aus dem 3D Programm importieren aber du kannst entweder die Constrains in Unreal bauen oder du setzt auf gebakete Animationen.


    https://docs.unrealengine.com/…nts/ConstraintsBlueprints

  • Du hast deine Animation auf das constraint gemacht. Hierbei wird ein Bone skaliert. Die normale Animation in UE4 setzt aber nur Bone Bewegungen und keine Skalierungen um. Folglich bewegt sich deine Animation an dieser Stelle in der Engine nicht.

    Du müsstest deine Animation auf einen Bewegten Bone legen, gewichten und animieren.

    oder aber:

    Da das Constraint nicht aus Blender exportiert wird, ein entsprechend gleiches direkt in der Engine neu anlegen., dann würde auch deine Gewichtung wieder passen und das Mesh sich wie gewünscht bewegen.

    • Offizieller Beitrag

    Stretch Funktioniert. Alles andere wird umgerechnet. Du hast sicherlich vergessen die Scale zu setzen. Schau mal in dein Action Editor. Deine StandardPosition (RefPose) sollte alle werte haben. Da einfach alle Bones markieren und auf dem Schlüssel klicken

    Dann benötigst du diese Einstellung Blender Import/Export UE4 Einstellung Für deinen Export. Axo, es schau aus, als hättest du die Alte FBX Version. Nutze den Blender 4.79