NLA Additive blending reference pose...?


(Etana) #1

Hi,
I’m not even sure if my terms are wrong here but…

Currently, it feels like additive blending always uses rest pose as a reference pose when trying to make any kind of additive blending. Because of this, it’s really difficult to use additive blending effectively and easily.

Imagine this situation: you have made most beautiful hand shaking animation ever in the world. But then you realize that you need to offset your character hand a bit on Z axis.

In ideal situation you would just make new NLA strip&action and set additive “reference pose” to what is the starting pose of the hand shake animation, offset your hand on Z axis and it’s done.

In current blender situation you have to make new NLA strip&action and set it to additive, but because the reference pose is rest pose, you have to reset all pose transforms on your new action and then offset your hand on Z axis.

Current way is doable but then (As far as I know at least) you can’t see the final combined animation when you edit your new action. So by hitting tab you edit it ,when you are done editing hit tab to exit action edit mode and check results, if the position of your characters hand is not correct, rinse and repeat until it looks correct.

Is there any little button anywhere to make additive blending use the current NLA strips combined transform as reference pose to do the additive blending or is such a thing possible in blender?


(stilltrying) #2

Not sure what you are trying to do, buy can’t you just use replace rather than add? Do you have an example file and can you grease pencil what you want to do?


(Etana) #3

Thanks for your reply

Of course I could use replace but that means I would have to redo all small movements I already have on that earlier animation layer because new action would replace all earlier keyframe transforms, not ideal solution if you just want to offset your limb a bit.

Replace works but I am specifically talking about additive layer on this thread and how one should use it in a real production, without having a reference pose for additive layer it’s really difficult to use effectively.


(AnnaO'Key) #4

I feel that I understand what you want. I would also greatly like to have this offset/additive option with NLA strip&actions thing. I often deal with mocap, and this blending mode is needed there very much to adjust things and see what you are doing on the fly.
There’s no such thing as far as I know, at the moment. That is what Animation Layers do in Maya, Max and MotionBuilder. I wrote to developers with a proposition to add a special “OFFSET” blending mode to NLA editor, that would make offsets that you do to your animations, clear for editing. But there was no answer.

My example of a thing, which is impossible to do with current NLA blending modes is: to insert the same initial pose to dozens of MOCAP actions of the same character, for game animations. I only have to insert the initial and final poses in base layer and adjust ALL CURVES ALL BONES of the character in ALL ACTIONS! This is a great deal :frowning: If there is a simpler way, which I do not know - I’d be delighted to hear of it!


(Hadriscus) #5

Hi,

no it doesn’t work at the moment. I agree it is frustrating. It is on Aligorith’s roadmap though, so it may come some day.


(AnnaO'Key) #6

Great to hear, that is on to do list! Thanks!


(mangojambo) #7

I’m having the same problem and it is really annoying behavior for now. I’m developing a blendtree animation for a project I’m working on and this is the first time in 17 years using Blender, I will need to move to Maya (or something else) to accomplish something not possible in Blender. Sad day indeed…


(Etana) #8

It’s been a while since last time this topic was brought up but developer of auto-rig pro has made and addon called additive keyer
It looks to be nice workaround for real additive animation blending in blender.
here is a video of it


(Hadriscus) #9

Thanks !!!


(Edtion) #10

After I saw that, I started thinking of ways to do that more automated (because I don’t want to keep clicking buttons). I came up with 2 methods (but same principles):

Method 1 = Copy Location+Copy Rotation+[offset]
Method 2 = Child Of+Child Of

Select the bone/object you want to modify, then pressing Ctrl+Shift+C and selecting the desired constraints. If you didn’t Shift+select the active (I.E. two or more things currently selected) then Blender will create an empty object at the active and target the constraints to it; otherwise the previous active will be the target in the constraints
(note: you don’t have to re-select the object, because the constraints will be targeting the same thing)
Constraint bone = bone/object you set the constraint on. Constraint control = the target of the constraint.

For Method 1 all you have to do clear the location+rotation of the constraint control for when you want to use the original constraint bone’s transforms, then pose the constraint control when you want to offset.
If you want to have the constraint control near the constraint bone, you have to set the constraint to Local Space <> Local Space, and add a parent to the constraint control. Now when you move the control’s parent, the bone won’t be affected.
(note: bone-to-object in local space probably doesn’t work correctly. Best to use bone-to-bone)

For Method 2 (my preferred) you just add the Child Of Constraint two times, then disable Location on one, and Rotation on the other. Click Set Inverse, and ctrl+a >> All Transforms to Deltas so you can clear /Transforms without having to copy keys/etc to disable offset.
(note: this is only in world space, so you can’t move the constraint control without affecting the constraint bone)


Reason you need 2 Child of Constraints is Location+Rotation causes the constraint-bone to pivot around the constraint-control, yet with two constraints, it just copies the offsets individually.


(NIWO) #11

@Etana
Great information. Better than nothing! :smiley:

@Edtion
Please make a tutorial for this.
I’m not that advanced to understand what you wrote.
But I’m very interessted in automating this process.


(Hadriscus) #12

Oooohhhh clever, or you could duplicate every controller, and create a global switch to show either the first set (parent) or the second (child, additive)…!


(Edtion) #13

I’m not really a video tutorial guy.

Here’s a simple example file for this showing the two methods:
!hand_constraints.blend (2.37 MB)

Method #1’s world space rotation is off (in my test). It works but it seems to offset the initial rotation.

A simpler explanation is:

  1. select bone >> ctrl+shift+C >> Child Of
  2. ctrl+shift+c >> Child Of
  3. bone constraints >> Set Inverse (both constraints)
  4. disable Location X/Y/Z #1
  5. disable Rotation X/Y/Z $2

Looking at the example file shows what it should look like…or this image:



(Edtion) #14

I made a script to do this faster (with my preferred method)…well I did but while I was typing this, I decided to make it an addon (sort of)

Install this addon: ChildOf.zip (883 Bytes) (as text >> http://pasteall.org/510952/python)
Then run whichever of these commands you want to use:

bpy.ops.constraint.child_of()
bpy.ops.constraint.child_of_location()
bpy.ops.constraint.child_of_rotation()
bpy.ops.constraint.child_of_scale()

I suggest using this command for location+rotation:

bpy.ops.constraint.child_of_locrot()

Select a bone or object then run the command, to create an (empty) offset control.
Select the empty and press ctrl+A >> Apply All Transforms to Deltas to be able to Alt+G/R/S to reset it to the default transform.

For using the Addon, just add the command to a hotkey in your user preferences Input.
example: [Input] >> Window >> Add New >> constraint.child_of_locrot
Key: Shift+I

The way I’m using it (because I’m not a programmer) is add the commands to buttons using Pie Menu Editor addon (and maybe temporarily add hotkeys to them while I’m working).