For this add-on, for example: Action to Scene Range — Blender Extensions
为什么不借鉴下modo的actor action优秀动画系统,BL动画插槽的设计让使用者感到困惑和混乱,而却功能简陋
Yeah that makes sense.
I am confused here, because I really can’t find the answer. What is animated by the Material data-block? Everything I can keyframe on a material seems to be animated by the Shader Node Tree data-block.
Anything that’s not in the shader tree, but still configured on a material. For example these settings here:
Cannot copy action/slot to selected objects.
Yes. I don’t think it needs to have a preference. If someone wants the objects to have different actions, he can just key them separately. If you are keying multiple objects simultaneously, chances are you are moving them all by the same amount at the same time, i.e. they should be moved by the same action.
I may not understand this question completely, but I think no. If every time you switch an action in one data-block, it automatically switches the action of another data-block, then you would never be able to make them different.
Make parent and children share the same action automatically. For example, an armature and the object it controls, likely should be animated by the same action in different slots.
First, feedback about existing functionality:
One use I found for them that I like and works without much issue is creating different takes for camera or character moves, and being able to really quickly switch between them by changing the slot on the NLA strip. Outside of that, merging or actions or adding slots is pretty inconvenient when also working with the NLA editor. In my testing I would have to assign the strips action to the scene objects to make changes then unassign again, which was inconvenient.
The ‘Only Show Slot for Active Object’ filter should instead be a ‘Only Show Slots for Selected’, and work the same as ‘Only Show Selected’ works.
Locking and hiding slots would be very nice to be able to see other slots keyframes without accidentally editing them. In addition to the previous suggestion, I think these would make working with them more comfortable and less error prone.
Ideally there’d be an option to duplicate a slot with its keyframes. As is, copy and pasting keyframes currently pastes to a seemingly random slot. It should paste to the active slot, or at least the active object’s slot. I had a lot of trouble just trying to copy keyframes from one slot to another, even in the same action. I think the only way I got it to work was separating the slots first, then merging after copy pasting.
Couple bugs:
Trying to delete an unused slot crashed blender, and after a couple crashes this way, blender would crash on startup and I’d have to restart my machine.
Searching fcurves didn’t update the UI and clicking channel groups to expand would cause them to disappear if they didn’t contain a searched fcurve.
What I hope they’ll do someday:
I’d really like some way to use slotted actions like scene strips in the sequencer, but in one scene. Being able to group all the animation for a shot into one action seems like a great use case for me, if they could be manipulated like strips in the sequencer. They could be a way more usable and faster than scene strips.
Also/Or: Better use with the NLA editor. Such as merging actions from strip selections, and maybe linking strips that share an action like audio clips in the sequencer. Might not be as practical as being able to manipulate slotted actions as strips on a scene timeline.
I think maybe the use cases I think of and have been trying to use the slotted actions for need the actions (or their strips) to refer to the datablocks they animate in the scene and not the other way around, but I don’t know if that dramatic of a change is worth considering.
Thanks for your work
Thanks for your feedback @Bloopert.
Yes, I can see that. Since slots are the first step to the entire replacement of the NLA, we made them work, but didn’t put too much effort into really polishing the workflow.
That makes sense.
In the Action editor’s channel list, select the slot you want to paste into. Make sure you do not have any keys selected. Then paste. There’s developer documentation about this; it would be nice to have this in the user manual as well.
Please report them via the actual bug tracker (Help → Report a Bug).
This has been considered, and decided against. Things are easier to manage when the animated “thing” points to its animation source.
I believe I did this, I’ll double check next time. Though if NLA support is limited it might have been because I was pasting into a strip in tweak mode when it didn’t work, and into an assigned action when it did work. If that does end up being the case, should I still file a bug report since it’s NLA related?
Slotted Actions aren’t really designed to work together with the current NLA system. We’ve made sure that they do nevertheless work, for backwards compatibility reasons. But ultimately Slotted Actions are more forward-looking, and we’re planning to eventually replace the NLA system with something much better and more powerful.
To expand a bit on why Slotted Actions and the current NLA system aren’t really great friends:
Slots are designed for storing the animation of more than one object/data-block in a single action. In other words, they’re designed to bring animation data together. Unfortunately, the design of the current NLA system doesn’t permit the same thing, since it’s fundamentally per-object: you can’t have an NLA that encompasses multiple objects or data-blocks with the current NLA system.
Because of that, the very thing that slots are designed for, you simply can’t take advantage of in the current NLA system.
As you mentioned, you can certainly still use slots to store different takes when using the NLA–it will work, and we certainly won’t stop anyone from using it that way if they want to. But it’s not the purpose of Slots, and we aren’t planning to optimize Blender’s workflows/UI for it. Instead, handling multiple takes is one of the use cases we want to explicitly support via the Layered Action system that will be coming later, after Slotted Actions have had a chance to settle.
For many years I used a self-written addon for inserting pre-made actions (like walk cycles, etc.) Accordingly, a decent base of actions with a prefix for automated insertion has accumulated, which I linked or append from project to project.
I was very surprised that now, when switching to one of my old actions, for example like this:
area.type = ‘DOPESHEET_EDITOR’
bpy.context.space_data.mode = ‘ACTION’
bpy.context.area.spaces.active.action = bpy.data.actions.get(“%s” % self.my_old_action)
my old Legacy Slot action remains in unassigned mode and further manipulations with it in the graph editor are impossible.
That’s not the recommended way to switch Actions, and will stop working in a future version of Blender.
Use something like this instead:
object = bpy.context.object
anim_data = object.animation_data_create()
anim_data.action = self.my_old_action
For more code examples, see Python API - Blender Developer Documentation.
Hi! I am an animator using blender 4.4 since release.
Two things popped to my attention for now.
-
With the slotted actions, it would be nice to be able to animate objects along side a character while entering pose mode. For example I had an animation where a character was opening an oven and if I could select the oven door, the rig and then in pose mode animate the oven door object it would be a good time save.
-
When you animate a material property (for example Emission), it applies to all materials added to the action. The slot is displayed as “Shader Nodetree” for all materials. So if you want to animate the same property on different materials, they all have the same keys on that specific property. I think it would be better if the material itself was a slot or even a material assigned to the object you want to animate so it doesn’t animate all the material instances on the scene.
Let me know if maybe I missed something and the feedback is totally invalid
Hi @Snorki ,
- That’s already possible (Edit → disable Lock Object Modes).
- That’s only the case when they use the same slot on the same Action. But you’re right, because all materials name their node tree the same (they’re all called “Shader Nodetree”), assigning the same Action will automatically assign the same slot as well. You can manually create a new slot for each material’s node tree.
In the long run, it would be nice if embedded data-blocks (the material’s node tree) could be animated from the owning data-block (the material itself). That way we wouldn’t need a slot for each, and it would make life considerably simpler.
Oh, I didn’t specify with the first one that I was referring to the specific scenario when you have both objects in one Action. So basically like and automatic Lock Object Mode disable on objects within an action.
With the material properties is exactly like you said, it would be nice if it would automaticaly create a new slot for the material’s Shader Nodetree when you key a property.
This would be solved by this “Material Reusabilty” PR. No?
Hi Sybren, I followed your suggestion to set the action using:
object = bpy.context.object
anim_data = object.animation_data_create()
anim_data.action = self.my_old_action
Unfortunately, in practice this fails when the object has NLA tracks and thus uses Slotted Actions — the anim_data.action
property becomes read-only. In my case, I’m using the Animation Layers addon (by Tal Hershkovic), so NLA usage is essential for me.
Summary of issues encountered:
anim_data.action
is read-only if the object uses action slots (e.g., due to NLA).bpy.ops.action.copy()
fails unless the context is a Dopesheet/Action Editor.- You can’t access or create
action_slots
via Python, despite being mentioned in the API docs. context.area
is read-only, so we can’t even simulate a UI switch to a Dopesheet.- The only working method I found involves manually switching the area to the Dopesheet editor, setting the mode to
'ACTION'
, assigning the my_old_action tospace_data.action
, and usingbpy.ops.action.copy()
.
This approach relies on UI manipulation and forcibly changes the current editor, which is far from ideal — but it’s the only reliable way to copy keyframes in Blender 4.4+ given the current limitations with slotted actions and the API. All other attempts via temp_override()
failed due to inability to access space_data.action
safely from non-UI contexts.
This makes it currently impossible to copy/paste keyframes from an action in a script-only or headless context. My addon, which used to work for years with bpy.data.actions
, now breaks unless the user manually switches the UI to the right mode and editor.
Questions:
- Are there plans to expose
action_slots
inbpy
, so we can safely manipulate them via script? - Could we get a way to access the Legacy Slot (even just assigning it) from Python?
- Can operators like
bpy.ops.action.copy()
eventually support working directly from data-level context?
Thank you again for your time and work — I understand this is a complex transition, and I appreciate all the power the new system brings. I just hope it will still be possible to support scripted animation workflows without relying on manual UI workarounds.
Best regards,
Nikita Sobolev (Sobollion)
I work in the game industry mainly with rig and character animations.
To be honest, I tried using slots and was disappointed in them.
- I can’t manage slots. For example, delete them. They are not displayed in the outliner.
- I can’t assign one animation to multiple objects at once. Thus, if earlier I had to select an object and assign an animation, now the path has become longer. I now need to select I need to select an object then an animation and another slot.
- When exporting to fbx, only one slot is displayed, and it is not clear how to choose it. My last task was to animate groups of people communicating. They have the same rig and mash. How should I organize my work?
- Export errors when exporting a collection with two rigs. And exporting them separately led to different results.
Conclusion: Everything was complicated for me. And the slots didn’t help in any way. For example, I animate a rider on a horse. These are two armatures that interact. I’m doing gait and attack animations. When switching to gait animation, it would be great to have the two armatures switch to the desired animation.
I don’t think so. It doesn’t mention “action” or “animation”, so I doubt it’s about that.