Complex animation workflow between Godot and Blender?

:information_source: Attention Topic was automatically imported from the old Question2Answer platform.
:bust_in_silhouette: Asked By unfa

I’m making an animated fantasy gate asset.

The gate has an eye that is made up of three objects:

  • Eyeball
  • Top Lid
  • Bottom Lid

The animation requires 4 components:

  • Eyeball Rotation
  • Top Lid Rotation
  • Bottom Lid Rotation
  • Eyeball Shapekeys (pupil animation)

I am trying to figure out how to handle this both in Blender and in Godot.

I’ve so far tried this:

  • created separate actions for every component
  • exported GLTF 2.0 for Godot
  • used Animation Tree with a Blend Tree, using a stack of Add2 nodes to combine all 4 components into a single Animation

This however gets very messy, and I wish I could somehow have all the component animations merged into a single Animation in the imported scene’s AnimationPlayer.

I have a lot of instances of things falling apart and getting out of sync and I think the reason is these multiple animations.

I was thinking about maybe handling this with an armature, but I also want to make the eyeball follow the player in certain situations and I thought using separate objects would be easier.

Even if I used an Armature - I’d still have a separate Shapkey action.

Can I somehow join or group such animations in Blender so managing them, export/import and playback would be easier?

I also would want to use both Armature and Shapekey animations for some character models, but this seems very finnicky to get it to work.

How do you handle such complex animation needs? I’ve searched for help, but all I can find are very basic tutorials, which I already got past.

I think I don’t really understand Blender’s Actions and NLA Editor enough, but I hope I can find someone who used this strictly with Godot.

PS: After thinking about this, it looks like I’d get better results animating the whole thing inside Godot, instead of exporting the animations from Blender. Thought it should be possible to handle such complex cases either way.

What if someone has a AAA-style cutscene with multiple mocapped characters interacting in a scene with props and other stuff? There has to be a way to handle this without making a huge mess…

I’m on a similar situation: I want a better animation workflow (than I suppose I have to do). First at all, I want to know if, in this last 2 years, you find a way to do it or if you migrate to Godot 4 or what…

Then, maybe I will ask you some of my needs…

Mario Mey | 2022-07-18 15:30

:bust_in_silhouette: Reply From: Rodeo

Don’t use separate actions for each component. As you’ve found, an action in Blender corresponds directly to an animation in Godot.

It sounds like you are exporting the eye components each as a separate gltf file. Instead, parent all the components to something in Blender (an Empty works nicely if you don’t want anything visual; this will become a Spatial in Godot), then use your parent object to create an action where all the components are animated. Then export the parent object (just one gltf file).

In Godot you will get an animation with each component in a different track, just like the action is in Blender.

I am exporting everything to a single GLTF file, and each object (mesh) has it’s own animation, but the problem is I need to play them back together in sync.

The only way to do this I’ve found so far is by creating an AnimationTree and using a cumbersome Blend node setup to be able o play/stop animation of all these objects at once.

I thought there should be an easier way to do this.

unfa | 2020-03-04 21:25

:bust_in_silhouette: Reply From: tshannon

I believe I ran into this same issue, or at least similar. I have an animation for an opening door. The animation involves two separate meshes, one opening to the left and the other opening to the right. When you animate it in Blender it creates two actions, one for each separate mesh. When exported to gltf and imported into Godot, it creates two separate animations, when really what I want is one animation with two separate tracks so that I can play the animation and both meshes animate at the same time.

I could accomplish this with with the animation tree and blending the two animations like you said, but that is tedious for something so simple as this.

I found that if you open up the NLA editor in blender, and push both separate actions down into an NLA track you can then name the NLA track the same for both pushed actions, even though they are two separate tracks.

When exported to GLTF and imported to Godot it combines these two NLA tracks with the same name into one animation with the two separate mesh’s animations on separate tracks in the same animation.

If that doesn’t make sense, I can try to upload screenshots somewhere.