Paul Hanson
Email: paulhanson2000 at gmail
Blender chat: @paulhanson2000
PRs:
• #156412 (WIP): Ability to restrict IK stretch to Y only; addresses #83911
• #156548: Fixes IK stretch with targetless/auto IK
• Tiny fixes #155496 and #155499
Synopsis
The goal of this project is to lay the groundwork for an expanded Auto IK system in Blender. In this system, a rig is defined by simple settings on each bone and how they interact with different control modes. These interactions lead to many emergent ways to control the rig which normally require complicated mechanisms to set up traditionally. And all this with only one set of bones, no FK/IK switching!
This builds on how Auto IK already works: temporary constraints appear when a transform operation is invoked; when the operation is confirmed the transforms are baked to an FK pose and the constraints disappear. The expanded system would allow more control over where constraints appear. Admittedly, this system shares a problem with Auto IK in that everything is still interpolated with FK. There are workarounds to achieve other types of interpolation, but this system is especially intended to save time in cases where stepped or FK interpolation is acceptable.
Benefits
Temporary constraints from Auto IK may conflict with regular bone constraints. But no matter how complex a rig’s constraint mechanisms, as long as it has some sort of top-level interface that is FK (such as when all FK/IK switches are set to FK), you can use this system to animate it. But why care if you already have a fancy rig with all the controls you need? One advantage is that it would remove the hassle of FK/IK snapping/switching during the blocking pass. Fixing the FK interpolation later is relatively easy: after animating, bake the (FK) keyframes to the traditional rig’s IK controls and do a quick second pass just to keyframe the IK switches.
This would also lower the rigging entry barrier for beginner animtors. With the expanded Auto IK system, one could have access to semi-complicated behaviors such as knee and elbow pinning, all with a minimal FK rig. (As long as FK or stepped interpolation is acceptable.)
(Note the system would depend on parent-child relationships between the bones. Rigs which fake these relationships using bone constraints would not be compatible.)
Project Details
There are 4 parts to the system:
- Per-bone properties
- Rig-wide presets/“snapshots” of those bone properties the user can create and switch between
- Global control modes (analogy: like sculpt brushes, but for animation)
- Global toggles (e.g. X-Axis Mirror)
Examples:
Take a typical humanoid FK rig. Suppose there is a bone property called IK Mark, with an associated Default Chain Length property. I tick IK Mark box for the hip, clavicle, fingertips, and thumbtip, setting chain lengths of 0, 0, 3, and 2 respectively.
Now for the control modes. Each interacts differently with the IK Mark property. (Videos show the intended behavior. Green/Red bones represent FK/IK.)
- IK mode
- Automatically creates an IK chain to the tail of the nearest upstream IK mark,
and a reverse-IK chain from the tail of the nearest downstream IK mark. - Here the forearm is grabbed. The nearest downstream IK mark is the fingertips, so they are pinned with reverse-IK up to their specified Default Chain Lengths. The nearest upstream IK mark is the clavicle, so the arm movement stops at the shoulder.
- This next video does the same, but switches to a different rig preset where the fingers are not IK-marked.
- Automatically creates an IK chain to the tail of the nearest upstream IK mark,
- FK mode
- Rotates the current bone in FK, but the tail of the nearest downstream IK Mark is pinned.
- Here the clavicle grabbed and moved freely, while keeping the fingers pinned. (If I had been in IK mode, an IK chain would have been created down the spine because the hip is the nearest upstream IK Mark.)
- One more example which switches to a preset with no IK marks, so the fingers are not pinned:
- Connected mode: This would simply be the existing Auto IK functionality under a new name.
There are many more possible modes (e.g. backwards-FK, or even modes that apply temporary physics to the bones like the cloth simulation brushes of sculpt mode). I won’t have time to implement them all in this project, but I believe the above three are the most important.
UI:
- New “Auto IK” panel in bone properties.
- New “Auto IK Presets” panel in armature properties (a list view similar to bone collections).
- Expanded “Pose Options” side panel in the 3D viewport, similar to the prototype UI in the videos above.
Testing strategy: There will be 3 layers of testing.
- A suite of minimal rigs to test the basic logic.
- A simple FK humanoid as shown in the videos, with a suite of rig presets to test more practical scenarios.
- A couple more complex rigs such as from Rigify. I will not impose it on myself to be compatible with all these rigs, but it will be interesting to observe what issues I run into.
Deliverables
- An expanded version of Auto IK which can:
- Automatically create IK chains in convenient user-defined places depending on the context.
- Pin any joint.
Schedule
I expect this to be a small (90-hour/8-week) project. I could start right away and anticipate no conflicts in my schedule as I work only part time.
- Week 1-2: Boilerplate
- DNA/RNA property definitions
- UI elements to access the properties
- Ability to store & recall rig presets
- Week 2: Create test suite of rigs and rig presets
- Week 3-4: Connected mode and FK mode
- Weeks 5: IK mode
- Weeks 6-7: Finalizing
- Docs
- UI polish
- Final testing and bug fixes
- Week 8: (extra week to account for delays)
Stretch Goals
If time allows, there are some other useful additions which could fit in the schedule of this small project:
- “Free” control mode
- Always pins the immediate parent and child regardless of IK marks, and enables IK stretch. This allows free movement of a single joint without affecting anywhere else.
- Always pins the immediate parent and child regardless of IK marks, and enables IK stretch. This allows free movement of a single joint without affecting anywhere else.
- X-Axis mirror compatibility
- A global toggle along the lines of “IK Mark Children Inherit Rotation”. This would lock the rotation of any bones downstream an IK Mark.
- Here is an example of what it would look like on an IK-Marked wrist:
- Here is an example of what it would look like on an IK-Marked wrist:
Bio
Hello! I’m a 25 year old data analyst working at a hospital in the Boston area. I’ve been interested in animation for many years, but only recently did it occur to me how applicable programming can be to 3D animation, and I started to wonder if I could pursue it despite not having gone to art school. Last year I started to practice 3D more seriously.
My field is a big mess of bash, R, and Python, so that is most of my experience. Regarding C, I managed to sneak in some C & Vulkan for a school project (a particle life simulation: short video). Earlier, I made a simple ASCII game engine for the terminal in C. As for Python, besides work I have written some add-ons for myself with bpy, such as one to stream hand mocap data from LeapMotion trackers into Blender (another short video).
Why am I the best person to work on this project? Because I really want these features for myself so I am motivated to implement it!
Acknowledgements
Thanks to Raf Anzovin, the inventor of “ephemeral rigging". If you’ve never heard of ephemeral rigging, see this presentation; it was my main inspiration! Also thanks to @Pxy-Gnomes and @Nacho_de_Andres for inspriation and ideas, and @Jeacom for the human mesh used in my examples.

