I have a setup in Godot with two different skeletons for male and female models. The skeletons are different because the proportions are different, but I need them to be synchronized.
Both models have an AnimationPlayer child with all their animations and since I want to synchronize both players I need a third AnimationPlayer. I created this third AnimationPlayer and re-created every animation using an Animation Playback Track to reference the male/female AnimationPlayers, something like this:
Male model
→ AnimationPlayer (animations: anim_library/jog_forward, anim_library/job_backwards)
Female model
→ AnimationPlayer (animations: anim_library/jog_forward, anim_library/job_backwards)
When playing the animations directly from the BothAnimationPlayer the models reflect the correct animation, but when I try to i.e. blend the jog_forward and jog_backwards animations in an AnimationTree the animations don’t seem to blend at all, instead they swap back and forth between the two animations.
Is this not supported by Animation Playback Tracks or am I doing something wrong?
Never tried this but it sounds like the playback track just applies the specified animation.
Blending works by mixing the values it gets from the parallel tracks, it’s kind of understandable that it doesn’t know how to mix the “jog_forward” and “jog_backwards” strings.
If that’s not possible, is there some other way to sync two different skeletons with the same animations + blending? Trying to play both the male and female animation players at the same time only works for a while, eventually they go out of sync.
I feel like such an unnatural odd setup shouldn’t be necessary. Is there a reason to have two separate skeletons and two separate sets of animations, if the goal is to use and display them as a single object? Just have one animation controlling both sets of bones and avoid the whole synchronization issue.
That sounds like what I’m looking for, could you elaborate? Or do you mean in Blender? Exporting a single animation for both set of bones? Because in Godot I tried having both models in the same glb file, but they still have separate skeletons and I can’t find a way for a single AnimationPlayer to refer to both at the same time.
Yes, it makes sense to use Blender to prepare the model, though to be honest, I don’t have an exact idea on how to make that happen. All I am saying is, what you got there is a collection of meshes and bones and animation for those bones - that is no different from any regular model. It doesn’t matter to either Godot or Blender that part of the mesh is shaped as a male and is rigged to a subset of bones, so it should be perfectly possible to export it as one model with one set of animations.
You could try joining two separate animations using AnimationNodeAdd2 with sync set to true, but that might not be enough to solve the synchronization problem and it’s still feels like a workaround. I have no experience with RetargetModifier3D but it looks like it might be of use too.
Yeah, but that’s the snag, isn’t it? The way I see it my only option for doing it in blender is having both set of bones be a part of the of the same skeleton object, then I can animate both under the same Action. But then I would have to duplicate the Animations by hand/script which would defeat the purpose (me doing less work).
RetargetModifier3D does work, though, so I’ll go with that.