Skeleton Independent Animation Blueprint

Since we have LinkedAnimGraphs that can receive Parameters like AnimSequences we would be able to create specific AnimGraphs that would receive specific animations and would be able to be shared with any of our animation blueprints.

That would allow for very complex character animations to be maintained very easily, since it would be all in one place and used by any amount of other characters.

Is it a possibility?

Even if it causes crashes if used wrongfully, like passing an AnimAsset that is not from the specific skeleton

At least put a boolean hidden in the class properties somewhere, like bIsSharedAnimBP with a @Warning informing what a sharedAnimBP is or so people who are learning Unreal or AnimBP specificly does not toggle that

Or make it a different animBlueprint class altogheter with features that could cause problems removed, or modified

This is already possible: just have them share the same root bone name (e.g. “root”). Skeleton Assets | Unreal Engine Documentation

1 Like

really? i will try it out, thanks a lot for letting me know, i really appreciate it

1 Like

Not working for me, can you explain what you did for this to work?

here you can see i have created a skeleton with only Root bone which is the same name as the other character root

is it something like this? import the other meshes on top of a default skeleton?

this second photo is the second example

I see, so, i create a Skeleton with only the Root bone, now if i import another mesh and use that skeleton, it will not generate a new skeleton anymore, but the new bones will be there in the Root Only skeleton, is that what you mean by shared animBP?

If so, have you been doing it for a while? do you do it at all?

Yes. All the other bones after the root bone count as “additional limbs” since they aren’t in the skeleton asset, which is why the root bone is white and the rest are greyed out. When playing animations, if the skeletal mesh doesn’t have same bones as the animation, the missing bones are just ignored (you can see this in my video when the character t-poses). Since the skeleton asset only has a root bone, and the animation blueprint uses that skeleton asset, all meshes that have a root bone (which is all skeletal meshes) can use that animation blueprint.

Also, you can set the preview mesh for the animations to which skeletal mesh it’s for (though, this isn’t necessary, as it’s just for the preview).

No, not really; I would probably only do this for simple things like simple characters or weapon systems, where the animations will all follow the same flow (e.g. primary_fire, secondary_fire, reload, etc.). The reason is that different characters may have different requirements for what they need to do & how they need to animate. The graph is shared, so it may make things complicated with very different character types; I also noticed that all bones for all valid skeletal meshes are listed, so if you have many meshes with many different bone names, it can get messy. And, with bone nodes, those nodes look for specific bones in order of the hierarchy, so you need to take that into account, as well.

But at least you know it’s possible. :smiley:

Yeah thanks for sharing, but that is not what i mean’t

I was looking for something that would prevent anything from breaking, this would cause too much problem with very different skeletons, since if two skeletons have a single bone that is named the same, the structure would break, unless they where in the exact same place

It may work, but are you aware of the costs involved with virtual bones?
Probably not. Go read up on the documentation.

Your feature request is sort of invalid though.
The way things work is pretty much the only way for things to work.

To share animations the assets have to either be retargeted, or use the exact same skeleton.

What you should be asking, is to completely dump the current system and just let bone tracks play out based on Name on anything regardless of everything else.

That way, virtual or physical, any bone that’s animated in an animation will always move regardless of what skeleton it is actually found in.

The whole skeleton asset thing should realistically probably be dumped - but then they wouldn’t know where to hide things like the retarget settings for instance. So they’ll likely never change that.

Not really, i don’t want to share one animation across multiple skeletons
I want to share one Animation Graph which is just a “Behaviour Tree”, that would receive Animation Assets as parameters to play, so every Skeleton could pass their specific animation asset to play in that slot


Movement Component Anim Graph Asset

  • Direction
  • Moving Forward AnimAsset
  • Moving Backward AnimAsset

then this asset would calculate what needs to play at the right time and play the parametrized asset

Then you have lets say 3 skeletons

Biped Skeleton
Quadruped Skeleton
Whatever Skeleton

And these skeletons have 2 Anim BP Each

Human AnimBP (Biped Skeleton)
RandomHumanoid AnimBP (Biped Skeleton)
Whatever AnimBP (Quadruped Skeleton)…

This would be 6 Animation BLueprints using the same Movement Logic, if i need to implement new stuff or fix stuff, i dont repeat my actions 6 times, i do it once and its done

It’s the same base problem.

If animations were actually unlinked from a skeleton, then the animation blueprints could also be independent from it.

That said, not all biped and quadruped move alike.
But the problem isn’t the animations to use, which have to be different, as much as the fact the skeletons would have to be mostly made up of virtual bones in order to share the same boiler plate.

Honestly, I would settle for a time remaining node that isn’t directly linked to the animation in the state machine.
Every darn time you copy over a BP and swap Animations the transitions are what breaks…

Ok, I get what you mean now. Still, different characters with very different skeletons (e.g. a human & a strider from half life) move differently and will require different setups. Imagine a climbing animation for a human vs. a dragon vs. a snake vs. a bird, or even something simpler like a look around or attack animation.

There’s Get Relevant Anim Time, which gets the time of the most “relevant” animation; I tested it on the third person anim bp and it works.

Unfortunately it’s not as direct timing / fast path wise in testing.
Making just replacing the direct node a little better despite the time it takes (really don’t go around swapping ABP out more than once a year anyway).

Unfortunately, things are not always easy. I agree that you should not change some parts too often, because this can lead to premature wear of neighboring nodes, which endure physical stress when dismantling the device.

No, you are wrong on this, ofc not everything moves alike, but you can create patterns and adjust everything with parameters, so if you have a good parametrized component you can move everything with the same Component/AnimGraph and adjust the values, the base of movement is always the same

Yes, specific stuff can be moved out from a movement component and placed inside a “climbing component” for instance, components are made to be easily fragmented, so when you make a new character you can choose which of your components you would like to use

Fairly sure I’m not wrong, but what do I know? They only pay me 200 an hour to make character motion…

I’m thinking you mean a “general” animation graph that handles just the broad things (like move, attack, take damage, etc. ) and is independent of any skeleton. Then you can use it on any skeleton and plug in animations or animation graphs into parameters, which will allow you to share logic with characters of any skeleton without having to copy & paste them manually.

If that’s the case, that’s basically already possible, though, not 100% to what you want. Just build an animation graph that references no animations (i.e. empty variables), then do “duplicate anim blueprints and retarget”, uncheck “show only compatible skeletons”, select your skeleton, and click retarget. It duplicates the animation blueprint and changes the skeleton, which is essentially what you’re looking for. I tried it and it worked: