Procedural Curve Rigging

I’m thrilled to share Crv2FK, a new Procedural Maya Python tool I’ve built for riggers and technical artists! With its PyQt-based UI, it lets you quickly create procedural and interactive joint chains on any curve…

I’d Love to hear your thoughts before sharing it to the community if you have any ideas about some features i should include in the tool…

:sparkles: Key Features:
:small_blue_diamond: Procedural and Interactive FK Rigging – Generate FK controls in seconds, fully ready for animation.
:small_blue_diamond: PyQt-Powered GUI – Intuitive, user-friendly interface for seamless workflow integration. No more command-line headaches!
:small_blue_diamond: Dynamic Rotation Axis Toggle – Show/hide local rotation axes with a single click.
:small_blue_diamond: Joint Radius Slider – Adjust chain thickness interactively for better viewport clarity.
:small_blue_diamond: RGB Color Picker – Visually customize joint and control colors for better organization.
:small_blue_diamond: Master Control Options – Auto-generate a master FK or let users choose parent controls via the UI.
:small_blue_diamond: Module-Independent Workflow – Modify/export joint chains and rebuild rigs later using the module name. Reusability FTW!
:small_blue_diamond: Rig-Agnostic Integration – Attach the setup to any existing rig with minimal effort.

Here’s the Demo

1 Like

The first thing I thought is it needs automated control hierarchy. At 0:31 you show setting up sub-chunks via selection. That may be worth automating so that every N controls gets a master, or it makes N masters spread as evenly as possible.

Another thing I thought of is that I want an API. It’s nice you’ve got your own standalone tool. But if I were to use this, I’d want to be able to integrate it into my auto-rigger for some of my custom subsystems without opening or instantiating your UI, or even importing Qt (so it’ll run in batch mode). And I’d also want to add a panel to my existing rig setup tool that can call your interactive functions, or at least show your UI as a widget in my own tool.

And really, FK is OK. But if FK exists, I know of at least 2 of my animators that will immediately ask for IK controls. If you don’t implement it, then I’d definitely want the API to return the lists of objects so that I could build my own IK solution on top of your FK one.

At work, I have a very specific naming convention I’ve got to adhere to for both object names and attribute names. Can I customize that?

And why are you using PyQt? PySide comes with Maya already. If you want to maintain compatibility with PyQt, then I’d suggest using mottosso’s Qt.py so people that don’t want to mess with the PyQt dependency are still able to use your tool.

Oh, and how well does it handle Undos?


And now for something I absolutely do not expect you to change about your code. But I’m gonna ask it anyway because it gives me a chance to rant a bit, and it gives you a chance to think about how you’d make this change.

Can the setup be built with just transforms, and not bones? I have an aversion to bones. They’re a terrible half-way legacy solution to a problem that can be solved better and more intuitively with extra transform nodes, or the offset parent matrix.

2 Likes

First of all Thank you so much for taking time to give me feedbak on this

A- for setting the number of master controls automatically I was going to do that until a rigger friend asks me to give him the control over wich controls he chooses to have a master, But you have a good point and i’ll add the feature in next version

B- for ik thing i’ll add the splineIk behavior with control over the number of ctrls driving it
C- for naming convesion, now its not dynamic, but i’ll consider adding control for the naming convension for the jnts/ctrls
D- I said Iam using PyQt but actually I did use PySide2 and PySide6 for later versions of maya
I know that PyQt/Pyside is the same thing so I didn’t think that would cause a misconception
E- for undo thing, i put the jnt/ctrl creation into an undo chunck
so that with only ctrl+z you can undo the hole thing
F- for the transform it’s a good idea to add this into the code so it will be more dynamic and not working for only the joints

G- about the API i didn’t actually understand what you mean about API

did you mean sharing the code itself ?! or making a commands that interacts with setup after creation ?!
i did add a button for attaching the setup to any existing rig though

again Thanks very much for your FeedBack !

D- PyQt and PySide are not the same thing. They are both libraries that do the same thing, but they are not compatible with each other. And Qt.py makes them compatible. (I’ve had to deal with this, so I’m picky about it)

G- No, not sharing the code itself. An API is just a list of functions that you share without sharing the code. Like how you can call a maya command without having the code it runs.

An API is an advanced thing. It’s probably not useful to the people who want to use your tool. I was too eager to share my thoughts, and didn’t consider that.

However, as your tools get more complex, it will become useful. So it’s good practice to make one, I think. It is not required, though.

3 Likes

I appreciate your advice and valuable feedback.

Thank you for explaining the difference between PyQt and PySide—the API idea is definitely worth considering.

I’ll put in the hard work and see what comes out of it!

1 Like

once I got the time to re work on the script I added this small feature "Dynamic Master Fk For The Fk Ctrrls Number "