I think your troubles stem from a misunderstanding of the data model. It’s equally simple to switch the Action and Slot of an NLA strip, but you have to do that on the actual NLA strip.
Your questions are basically answered by the Python API documentation, and the example code in the 4.4 release notes. For more help with the API, please poke me in the #animation channel on Blender Chat. That way this thread is less about solving this specific issue for you, and can be more about collecting feedback on slotted actions in general.
You can, in the Action editor. There slots can be renamed and removed, just like any other channel in the channel list. You’re right in that they’re not displayed in the Outliner yet.
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.
First you say you can’t assign at all, but then you say you can, but it just takes one step more. Which one is it?
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?
I don’t know much about the FBX add-on, except that it’s quite complex code. I wouldn’t be surprised if it still only uses the first slot in each Action. If you feel that there’s a bug in there (like not supporting slotted Actions properly), please file a bug report.
Export errors when exporting a collection with two rigs. And exporting them separately led to different results.
Don’t keep errors to yourself, please file a bug report. Be sure to include the exact error messages you see, and an as-simple-as-possible example file which can be used to reproduce the issue.
Conclusion: Everything was complicated for me. And the slots didn’t help in any way.
I’m sorry to hear that.
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.
This I mentioned explicitly in my original post, under “What does not happen?”. The work to get this streamlined is tracked in #133725: Anim: switching assigned action on multiple data-blocks together. If you want to help out, please join the design discussions, and maybe the module meetings.
It’s not? If I understand correctly, it’s about exposing material properties from outside the material node-tree, but making it so you can change (and, I asume, animate) those properties from the material properties instead of the node-tree. The idea is to treat materials like GN modifiers: only the Group inputs get exposed to the outside.
Please keep this thread on topic. This is to help the development of Blender by giving feedback to developers, not to ask for help using Blender yourself.
Item 1 and 2:
I found out how to delete slots. But this is not at all an obvious way. Also, why do I need all the slots for an object (armature) in the Action Editor list if I choose only one for animation? In the drop-down list, it is clear. In the “Summary” list with animation channels for an object, in theory, there should only be an active slot. After all, I can’t mix two slots in one action.
3 and 4. For the gaming industry, fbx is the main way to transfer animation to the engine. And if it doesn’t work properly, then users will either have to look for some workarounds, or refuse to use the program.
As far as I understand, slots are important for motion graphics. And that’s cool. But I would like other directions not to be forgotten.
I often have to animate paired characters. For example, a rider on a horse. The rider can change. And I expected that the slots are needed so that I can choose one action and the necessary slots would be applied to both the skeleton of the horse and the skeleton of the riders I create for it.
Another example: there is a map with many groups of people on it. In fact, they all have the same rig. For example, a tent with goods that has a seller and buyers (7 people). I used to call the animation like this: tent_seller, tent_supper-A, and so on. I expected that the slots would be selected automatically when I choose the tent action, and if I choose another action, the slots for the rest of the characters would be selected automatically. And, of course, I could easily pass all this to the Unity engine via fbx. But…
I use an automatic translator, so I’m sorry if something isn’t very clear.
That’s what the “only show slot of active object” filter option is for.
After all, I can’t mix two slots in one action.
Slots are not meant for mixing. That’s currently what the NLA is for, and what in the future “action layers” will be for.
For the gaming industry, fbx is the main way to transfer animation to the engine. And if it doesn’t work properly, then users will either have to look for some workarounds, or refuse to use the program.
Or acknowledge that this is Open Source, and actually help with the development. There’s a lot of smart developers in the game industry.
As far as I understand, slots are important for motion graphics. And that’s cool. But I would like other directions not to be forgotten.
I am an animation noob, but in a recent project I had to create some animations and precisely slots were useful to coordinate the parts of an animation to be reused that involved several objects. My only feedback is what has already been stated in the proposal: the NLA is clearly not made for them and a proper tool will be needed. Currently if I want to arrange an action with three coordinated slots, I need to set up three channels/clips/tracks/whatever was the name (one per object), set each object at a different slot, and manually sync these channels. Since slots help group several sources into an action, I hope there will be some editor where the action is placed, and then the slots are given data to animate, rather than the opposite at happens in the NLA editor. And of course there should be the possibility to assign no objects to a slot or even several objects to a slot. I guess internally this will work in whatever way.
The process of assigning new slots of the desired type to an existing action was quite painful but this also seems to be already acknowledged.
Please don’t repeat what’s already stated. As I said in the intro post, just press the icon on posts that you agree with. It’ll be a lot easier to gather feedback that way.
Reading up on the layered anims it isn’t clear to me how slots are meant to work with multiple strips and layers. That and where the actual fcurves would live in an actions data structure. Like would each strip have its own slot to decide which channelbag to use? Or is it undecided atm?
I realize this is just the groundwork and we only have one layer and strip per action rn. The active slot being stored at the action level makes it look like the slot will decide which fcurves to use for the entire action, all strips. Just trying to wrap my head around how the new system will structure everything. Understandable if it’s massively in flux atm being a WIP.
The FCurves will continue to live in the channelbag.
A channelbag is for a single slot.
A strip can reference multiple channelbags.
And finally a layer can contain multiple strips.
The action only defines which slots there are on the top level.
Hi @MSPro! Welcome to the discussion, and thanks for the question. Please note that the documentation you linked to is the developer documentation, which provides a low-level, under-the-hood explanation of the system. In my answer below, I’m instead focusing on the user-facing perspective, which glosses over some of the technical details in that documentation.
It’s the Strip that stores fcurves, and a Strip can store fcurves for more than one Slot. For example, a Strip can have a “Location X” fcurve for slot “Bob” and also a separate “Location X” fcurve for slot “Sally”. When two strips get mixed (e.g. by the layering system), the corresponding channels for corresponding Slots get mixed together. For example, “Location X” for slot “Bob” will be mixed with other “Location X”'s for slot “Bob” in other Strips, but not with “Location X”'s for slot “Sally”.
Layers are then just a way of arranging and mixing Strips.
When you assign an Action and Slot to an object, the object is then animated by the final mixed result of the channels for its selected Slot.
I hope that answers your question!
Having said that, this is a bit off-topic for this thread. This thread is intended for feedback on just the Slots feature alone, based on people’s experience actually using it. I don’t mean to discourage you from asking questions about layers and strips, but rather I’m just saying that this isn’t the right place for that. Feel free to join the Animation & Rigging module chat on chat.blender.org or join one of the module meetings if you have further thoughts/questions about that.
Ok fair enough, I’ll ask there. There are so many blender boards and subdomains I never know exactly where to go. This thread was one of the top search results.
My previous question kind of is my feedback though. The user facing stuff with the current implementation is pretty straightforward, bundling multiple “”““actions””“” in one new action, selecting a specific active one with slots etc. Reading up on the python API side is how I got to the dev docs and got a bit baffled. Thanks~
I’m developing an addon that combines different armatures and their current actions. I add new curves by calling the fcurves.new() function on the action. It works when there is only one slot in the action of the active armature object. but if the action has access to more than 1 slot, it seems to only add to the the slot at index 0 regardless of what is displayed as the active slot on the action editor. Is it possible for you to add a new parameter for the slot in the new() or/and even the keyframe_insert()/insert()(for keyframe_points) functions in the future?
That is as designed. The legacy API (action.fcurves, action.groups) only works on the first slot. These properties are considered deprecated since Blender v4.4 and will be removed in v5.0.
Nope, the action.fcurves and action.groups properties (and thus their .new() functions) are going to be removed. Actions already have layers (although currently limited to 1), and layers have strips (although currently again limited to 1, and only of type ‘KEYFRAME’). So to create a new F-Curve, you would also have to specify for which layer, and for which strip on that layer. The v4.4 release notes describe the new API to do this.
fcurve.keyframe_points.insert() is still going to keep working, as F-Curves themselves remain the same.
struct.keyframe_insert() simply uses the assigned Action + Slot, so it should Just Work™.