Rigify improvements in Blender 3 and beyond #88711
Labels
No Label
Interest
Alembic
Interest
Animation & Rigging
Interest
Asset Browser
Interest
Asset Browser Project Overview
Interest
Audio
Interest
Automated Testing
Interest
Blender Asset Bundle
Interest
BlendFile
Interest
Collada
Interest
Compatibility
Interest
Compositing
Interest
Core
Interest
Cycles
Interest
Dependency Graph
Interest
Development Management
Interest
EEVEE
Interest
EEVEE & Viewport
Interest
Freestyle
Interest
Geometry Nodes
Interest
Grease Pencil
Interest
ID Management
Interest
Images & Movies
Interest
Import Export
Interest
Line Art
Interest
Masking
Interest
Metal
Interest
Modeling
Interest
Modifiers
Interest
Motion Tracking
Interest
Nodes & Physics
Interest
OpenGL
Interest
Overlay
Interest
Overrides
Interest
Performance
Interest
Physics
Interest
Pipeline, Assets & IO
Interest
Platforms, Builds & Tests
Interest
Python API
Interest
Render & Cycles
Interest
Render Pipeline
Interest
Sculpt, Paint & Texture
Interest
Text Editor
Interest
Translations
Interest
Triaging
Interest
Undo
Interest
USD
Interest
User Interface
Interest
UV Editing
Interest
VFX & Video
Interest
Video Sequencer
Interest
Virtual Reality
Interest
Vulkan
Interest
Wayland
Interest
Workbench
Interest: X11
Legacy
Blender 2.8 Project
Legacy
Milestone 1: Basic, Local Asset Browser
Legacy
OpenGL Error
Meta
Good First Issue
Meta
Papercut
Meta
Retrospective
Meta
Security
Module
Animation & Rigging
Module
Core
Module
Development Management
Module
EEVEE & Viewport
Module
Grease Pencil
Module
Modeling
Module
Nodes & Physics
Module
Pipeline, Assets & IO
Module
Platforms, Builds & Tests
Module
Python API
Module
Render & Cycles
Module
Sculpt, Paint & Texture
Module
Triaging
Module
User Interface
Module
VFX & Video
Platform
FreeBSD
Platform
Linux
Platform
macOS
Platform
Windows
Priority
High
Priority
Low
Priority
Normal
Priority
Unbreak Now!
Status
Archived
Status
Confirmed
Status
Duplicate
Status
Needs Info from Developers
Status
Needs Information from User
Status
Needs Triage
Status
Resolved
Type
Bug
Type
Design
Type
Known Issue
Type
Patch
Type
Report
Type
To Do
No Milestone
No project
No Assignees
12 Participants
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: blender/blender#88711
Loading…
Reference in New Issue
No description provided.
Delete Branch "%!s(<nil>)"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Preface
In this post I describe (most of) my contribution plans to the Rigify addon into a somewhat coherent document so if anyone finds something controversial, they can raise their concerns. Note that I'm not a full-time developer, I'm just a rigger who enjoys Python a lot, so I mostly work on Rigify patches in my "free time", so expect slow progress.
A lot of these things have already been done in my Feature Set, so that will be mentioned and linked to sometimes.
If a topic turns out to be more complex or elicit a lot of discussion, I can create child tasks to split the discussion into appropriate places. Also, when a patch shows up, feel free to discuss it within the patch rather than here.
Code Quality
rigify/ui.py
and__init__.py
could use some splitting.Mistaken use of name mangling?
I believe function names starting with __ are unintentionally using Python's name mangling syntax. At least I see no justification for it, but I see in the function
rigify_report_exception
uses the dunder prefix for a different purpose (perhaps code was written before python had name mangling?). This should be looked into.Resource Blend File over Text-Encoded assets
Metarigs and Rig samples could be loaded from one or more resource .blend files that are part of the addon or feature sets, rather than the current encoding to text workflow.
UI/UX
Generating UX
Bone Organization UX
Blender's bone layer and bone group system is fairly lackluster. We should provide both rig authors and animators an abstraction layer over Blender's 32-layer system, where layers can be named and organized into rows and columns. This already exists, but it could be better.
The Unified Selected/Active Color can work perfectly fine with regular bone groups - It does not even need an "Apply" button.
Customizing bone group and layer assignments
New Operators
These are speed-ups to my workflow that I use on a daily basis.
New Features
Added subscriber: @Mets
Added subscriber: @zanqdo
Added subscribers: @icappiello, @angavrilov, @BassamKurdali, @cessen
Pinging people who pop into my mind when I think of Rigify.
@angavrilov @icappiello @BassamKurdali @zanqdo @cessen Feel free to ping anyone I might've missed.
Although thoughts about any part of this wall of text are welcome from anybody, let's assume that I would like to work on these issues roughly top to bottom. That means for now I'm most interested in what's the deal with Rigify Legacy:
Changed status from 'Needs Triage' to: 'Confirmed'
All-in-all, I really like this proposal.
As far as I'm concerned, absolutely yes, please rip it out. Ha ha.
Yes, that's exactly what it is. The down-side is that I'm not offering support for it (I'm mostly maintaining it just for personal use), but I suspect that in practice the legacy feature set wasn't getting used much and probably wasn't a support priority anyway.
I'm also in favor of this.
(Or, alternatively, if the space switcher is considered critical to the functionality of some of the rig types, then IMO we should continue with the principle that Rigify itself isn't required for using the rigs it generates, and have that functionality moved into the generated rig's Python code so that it's bundled with the rig itself.)
I don't feel strongly about this one way or the other. But I want to bring up some questions that I think are worth considering before making such a move:
I think I'm slightly in favor of moving away from text-stored data, but only if we can make sure we're not degrading either the end-user or rig-type-developer experience.
Anyway, again, over-all I really like this proposal! Getting Rigify cleaned up and updated for Blender 3.0 would be really great!
Also, if I can add another item of my own:
Many of the rig types' names are a bit confusing, and could be more straightforward/descriptive. For example, "super_limb". I've received emails from people asking what's "super" about it, and what that even means, and I never really have a good answer for them.
For context: these names aren't special or meaningful in any particular way. They're just a weird historical hold-over from when I initially integrated PitchiPoy's rig types--PitchiPoy liked to name their rig types whimsically. At the time I distinguished these from the other rig types with the "pitchipoy" prefix to make it clear that they were studio-specific. But because they are now the main supported rig types, I think this is a good chance to name them properly. For a lot of them, just dropping the "super_" is probably enough. But some of them would likely benefit from a bit more thought as well.
Thanks for taking the time to read and respond!!
No, as far as I'm aware no part of Rigify references the space switcher operator or its bl_idname.
Agree, this change should have no issue being unnoticable on the user-facing side.
The way I imagine it is this:
Note that I haven't looked into the technical feasibility of this, but it sounds doable?
If we wanted to go one step further, we could wait for the asset system to be done, which I believe will establish a convention for storing datablocks in a centralized way, where they become available to the user in any blend file. This would be awesome for metarigs and samples, so even users could create their own totally within Blender's UI, without any file opening shennanigans. But, for now this is of course science fiction!
Added subscriber: @AndyCuccaro
Added subscriber: @TodorNikolov
If that's doable, and can be done in a way that's reliable and clean, I'm all for it! Sounds great.
@cessen always great to have your thoughts and suggestions on how to improve rigify!
since i answered @Mets in chat and this was probably missed, i'll repost my opinion about legacy here.
removing the legacy rigs in my opinion is part of a rigify redesign. Even if i am not a fan of the older modules, i believe that removing those should be done carefully. Also raises some questions about how to do it and what should happen when rig sets became deprecated (or just not maintained anymore)
my idea of sorting this out would be to have the source repos available in the rigify preferences. This way we could still have legacy rigs in, but would be Nathan's choice if he want those to be maintained or not. I'd go at this point remove the legacy code from rigify itself and ask cessen to make his featureset compliant with new rigify. If so we can at least give users a quick way to enable it by including for a couple of releases the link to cessen's repo in the prefs
also we could include as default @angavrilov 's repo and cloudrig
this also led me to te conclusion we should have a sort of load/unload or enaled/diabled state for featureset
this way rigify can start with only the bundled rigs pre-loaded and can grab the latest "featured" rigs from @Mets, @angavrilov and @cessen 's repos
i believe that removing the legacy rigs is the occasion to upgrade rigify preferences in a way all user base can benefit and prevent future mantainment of legacy code
Totally agree on removing super_ prefix. We just kept it as is since we knew you worked on it and seemed to be a sort of description of new rig capabilities (bendy and stretchy rigs). But honestly we just kept it as we found it.
about metarigs, samples, and i'll add widgets too, i have mixed opinions.
for sure picking those from a blend file is easier to manage for users, but i don't know if it has to be encouraged without a basic knowledge of what a metarig or sample is.
I would first try to analyse the clear pro and cons we have with current method and see if it can be enhanced without a complete redesign.
what i see as main flaws here is that "encode metarig" and "encode widget" operators are doing only half of the job since they create the .py scripts, but they are not able to place those in any useful place. Moreover "encode metarig" is not including custom informations like constraints and so on that are instead now explicitly supported by some types like raw_copy or basic_pivot.
i wonder if we could make all this workflow more manageable, but at same time i believe it was cleverly designed to expose the user what rigify actually is and how it works. I believe this is a plus.
what i'd inspect is where user's custom samples and metarigs should be stored, cause inside rigify folder in blender package is something to be totally avoided (at least on mac builds it would break the app signature).
if this part can be sorted out i believe that a basic usage could be:
• user encodes metarig and adds it to his local metarig folder / package
• user encodes widgets and adds them to his local widget folder making those available in selected rig-types whose can use them (basic_copy, basic_pivot ?)
also this could affect rigify preferences:
• user can pack his customs in a zip
• user can load custom metarigs/widgets from preferences
i honestly don't know how complicated this could be, but i'd like to discuss it a bit.
These are both ideas I've wanted to add as the follow-up for D8519, so I'm totally in agreement.
I would hold off looking for an answer to this until the upcoming Asset Browser arrives, since I think that would make a lot of sense for this. And I think it's very close!
Yay! Those names have always kind of bugged me, ha ha. I can put together some renaming suggestions if you guys would like.
I'll defer to you guys on this one. But from my perspective, part of the reason I designed Rigify to generate addon-independent rigs was precisely to avoid having to worry quite so much about backwards compatibility. The rigs that Rigify has already generated will continue to work, no matter what we do with Rigify.
So from my perspective, at least, I would be happy to see the legacy stuff ripped out. It would allow both the code and user experience to be simplified, and people can always install my feature set if they want those rig-types in newer Rigify.
I think you're giving me too much credit here. I only wrote "encode metarig" and "encode widget" because, at the time, it seemed like the easiest/most-reliable way to bundle armature and mesh data with Rigify. I don't even think of the resulting Python as code, it's just Python-encoded data. So, for me at least, I'm totally fine with moving that data to blend files, as long as it doesn't impact anything negatively.
But yeah, it depends on whether it can actually be pulled off in a transparent way. I'm most concerned about samples (which in retrospect isn't a great name for what they really are). Keeping the workflow where you can create an empty armature, and just toss in a bunch of rig-type samples and plug them together like legos to create a new metarig is really important IMO. That workflow needs to be fast and streamlined, with each sample quickly accessible from within armature edit mode and tightly associated with its respective rig-type. Not something where you navigate a separate asset system.
(I'm also happy to have samples become more than that as well, but IMO that's the minimum functionality.)
please do!
i learned from contributing to maintain rigify for some time that i can't predict what people do with the tool. So as long as your featureset is mantained by you i'd like to have it in.
If it becomes a featureset and you maintain it, we can remove the old code and make everyone happy
What i mean is that, intentionally or not, you created a tool that's very consistent and also helped me at the time to understand how it was meant to work. I consider this good design.
I think the add-on should be as self-contained as possible. Wouldn't look too far to integrate with asset manager.
Please continue to elaborate more what you'd like to have. Most of the latest added features came from a chat made with you at a bcon table.
Unfortunately, I can't make any commitments to maintaining my feature set. For now, I plan to maintain it to the extent needed for my own personal use, but that's all I can really say. And even then, that may involve e.g. changing the rig types in non-backwards-compatible ways. If that's not enough for you to be comfortable removing the legacy mode, that's totally fair.
Having said that, Rigify has been around for almost 11 years now, and the legacy rig-types have been hidden behind legacy mode for a good chunk of that time. Rigify isn't an operating system or long-term critical piece of infrastructure, and at some point backwards compatibility isn't worth the maintenance burden, I think. And removing legacy mode at the same time as these other changes and the transition to Blender 3.0 seems like good timing. But... I'm also not the one doing the hard work of maintaining Rigify anymore, so I don't want to really push the point. It's totally up to you guys, since you're actually doing the work!
Incidentally, thank you so much for all of your work over the years!
I definitely agree. If we do switch to blend files to store the data, it should be done in a way that doesn't affect Rigify (or feature sets) being self-contained.
Having said that, I wouldn't be totally against the pre-built metarigs (not samples) being integrated into an asset browser. I think if anything, that would actually make it easier to find the ones you want, with preview images, descriptions, etc.
I guess it just surprises me that the Python-encoded data was a useful tool for learning how Rigify works. I would expect that e.g. looking at the actual rig-type code would be more useful to that end. But I believe you!
Ah, I didn't mean I had any additional ideas myself. I just meant that if other people had ideas, I'm fine with that, as long as the samples also continue to serve the functionality I outlined. In other words, I was trying to make it clear that I wasn't advocating for specifically limiting their functionality.
Added subscriber: @Guilherme-Lacerda-Prestes
Added subscriber: @PaoloAcampora
Added subscriber: @noc2
Why, oh why would you remove Legacy mode? What does anyone do if they need simpler rigs without the rubber hose limbs? What possessed you to make that decision? I mean even the simple arm and leg option yields those stupid rubber hose controls... Why take out that option? Why are you guys so overzealous at times? Why???
@noc2 as you can read from previous comments, the reason is due to the fact that the author of the legacy code is no longer actively mantaining the featureset. Keeping this included in blender itself woukd have meant for the current rigify mantainers to mantain those potentially unsupported features along with their actively mantained code.
I personally requested in the above discussion to make the legacy module an external featureset directly loadable inside the addon itself to ease the removal downsides. In that case the legacy fetureset could have been downloaded directly from the author repository and its life would have been decided directly by the author intention to actively mantain it or not.
Can’t tell how difficult this was to achieve though and if this has been done or not.
That said i can assure you that:
You can download and install the legacy featureset from the author repository. You can ask @cessen for a working link.
The current rigs can be reduced to simpler ones by going in the rig options and set the segment split to 1
I am not sure if this is a good place for suggestions but have you considered a meta rig option to set the bendy bones number in the spine?
Legs and arms and paws have this setting, why not the spine?
I have seen people who were confused because they weight a mesh100% to a spine bone but it keeps bending. :)
Yes, no problem! Here's the link to the legacy feature set (I don't expect this link to change for the foreseeable future):
https://github.com/cessen/cessen_rigify_ext
Added subscriber: @rwman
Added subscriber: @zNight
A good chunk of these changes have been implemented, which is great. My rigging workflow has transitioned to a standalone system, so I probably won't be making direct contributions to Rigify anymore, so, closing this task.