Page MenuHome

NLA - Action baking broken
Closed, ResolvedPublicBUG

Description

System Information
Operating system: Windows-10-10.0.18362 64 Bits
Graphics card: GeForce GTX 1080/PCIe/SSE2 NVIDIA Corporation 4.5.0 NVIDIA 430.86

Blender Version
Broken: version: 2.81 (sub 3), branch: master, commit date: 2019-08-22 20:40, hash: rB1de7717ed711
Worked: 2.79b

Short description of error
Baking actions / NLA is broken in Blender 2.8-2.81

Exact steps for others to reproduce the error

  • First, in order to verify it works as expected in Blender 2.79b, open the attached blend file in Blender 2.79b. It contains one bone with a simple base action + a tweak action in additive mode on top, in the NLA editor.

  • Spacebar > "bake" > NLA Bake > check "Visual Keying" and OK
  • Baked fine, one keyframe per frame, when muting the base action, the animation is preserved.
  • Now, repeat the same process in Blender 2.8/2.81
  • Baking went wrong, there are only two keyframes at the start and end of the frame range, and when muting the base action, the animation is screwed up.

Thanks!

Event Timeline

Philipp Oeser (lichtwerk) changed the task status from Needs Triage to Confirmed.Mon, Jan 6, 3:51 PM
Philipp Oeser (lichtwerk) changed the subtype of this task from "Report" to "Bug".

Hi, thx for the report (and sorry for the massive delay in reply)!

I can confirm the issue.

CC @Sybren A. Stüvel (sybren): does this deserve to be High prio (dont see a reason why this shouldnt be working, looks rather bad to me...)?

Animation baking depends on the state of "Action Blending" before the bake starts. In the attached file it's set to "Add". If you change it to "Replace", the baking will work as expected. The functionality is still there, but this feels more like a usability issue.

I've done quite some motion capture cleanup in the past months and always baked new clips using "Replace" mode. All other modes (mainly "Combine") were used to manually create clips and adjust the underlaying animations. Of course afterwards the mode needed to be set back to "Replace" anytime I wanted to bake the composition into a new clip. So it still works, but the usability is not great.

Thanks for providing this workaround! This is indeed a nice fix.

Just to provide exact steps for others waiting for this:

  • Convert the additive action to strip (push down button)
  • Set the mode to "Replace" on the right in "Animation Data" (the additive action below remains additive so it's not an issue)
  • Bake it and enjoy

Maybe the baking operation should force the mode to replace while it's running.

Thanks for providing this workaround! This is indeed a nice fix.

Sure thing!

Maybe the baking operation should force the mode to replace while it's running.

When baking, I exclusively needed the bake to be in "Replace" mode. Any other modes wouldn't give me the results I wanted. Not sure whether there are any other use cases where they would be needed, but I personally didn't encounter them yet.

When using another popular 3d app for mocap cleanup, clips to adjust underlaying animations were always added manually and bake was done always to Blender's equivalent of "Replace". The program didn't offer any other option and it didn't feel it was missing anything. So it's an indication bake in other blending modes is probably not widely used or needed?

Limiting bake operation to "Replace" sounds like the simplest solution. Do you think this would need to be exposed in the ui and communicated to the user somehow? Perhaps through a tooltip or similar.

Maybe the baking operation should force the mode to replace while it's running.

That sounds like a good approach to me 👍

@Alexander Gavrilov (angavrilov) wrote in Blender Chat:

Should it switch to Replace permanently or for the duration of the operator?

I think for the duration of the duration of the operator is best. That way the user doesn't have anything changed in the settings after the operator is done, and the operator functions properly.

The downside of that is that the action would not evaluate properly after the operator completes. One compromise could be to switch permanently if creating a new action, and restoring the old value if reusing an existing one? (it's an option of the operator)

In that case, let's set it permanently. This behaviour should be mentioned in the manual as well, then.