Probably a silly question but there are Blendspace 1Ds which allow you to blend together animations based on a single variable, and there are Blendspace 2Ds which allow you to blend together animations with two variables; is there a way to do the same thing with three or more variables.
I’m aware this isn’t available in Blueprint (probably not anyway), but could it be done in C++ if nothing else?
The ability to blend together many different animations would be a major boost to the overall aesthetic of my game. Blendspace 2D has done wonders. Could it be taken further?
1d’s allow you to blend together an infinite number of animations, and 2d’s allow you to blend together an infinite number with an infinite number. For example, here’s one with 10.
3d’s could be theoretically useful in a game that had a character floating through space, however implementing a 4d blend space would probably have to be implemented by a higher dimensional being which might make them a tad tricky to use.
What would be the third variable? Normaly “Speed” and “Direction” are used for the Blendspace. Or something like the Aiming Offset. If you need to combine 2 Blendspaces, you can still use a “Layer Blend Per Bone” Blend in your AnimGraph and adjust the Slots.
The Weight value for the blend can be changed with a variable, or a curve from a AnimMontage etc.
Third value could be used for something like variation. Have variation change gradually over time and you’d be blending alternate versions of the same basic animations together. It’d add to the aesthetic making the animations seem more like natural movement.
And thanks for the help! Layer Blend Per Bone should fix my problem.
The most common application would be for run+strafe+turn blends, as you would see in a third person shooter or sports game, with lots of mocap samples for different combinations of those three variables and root motion. That is pretty hard to implement with the current system.
I was able to get a pseudo 3 dimensional blendspace by doing this. I have a 2D space that contains slope angle and movement speed. After this, I blended on top of this two 1D blendspaces for bank angle. It turned out quite well.
MovingOnTerrain is two dimensional. MovingBankLeft / MovingBankRight are both 1D blend spaces.
You found your own answer: simply blend more blendspaces in nodes. I could vouch for 3D blendspace, but to be realistic, you just need to be a bit more crafty to solve those more specific cases.
You can set up a 3rd input axis like this using a simple Blend node and MapRange. In this example, I have the Speed as the 3rd input axis. I think this approach could also be used to add a fourth input as well.