NokiMo
colortwist
colortwist

patreon


Finger IK tech demos

Ermehgerd, more boring non-boob related stuff!

I hate dropping off the face of the planet, so I figured I might as well post something that shows what I've been working on recently.

Long story short, I hate finger posing. Traditionally it's done by rotating a set of controls constrained to each finger joint, but that means you're dealing with a minimum of 15 joints per hand plus the metacarpals. Things tend to get even more messy when you're trying to position the fingers in such a way that the finger tips lie on a specific surface or happen to be wrapped around a certain object- since the only thing you can do in that case is to keep tweaking the individual joints until the tips are approximately where you want them.

Maybe I'm just lazy, but that's one of those things where I look at the problem and go "why?". Why do I want to be rotating finger joints manually when I already know where the finger tip should be? Why can't I just tell the computer where I want the tip goal to land up, and have it solve the finger joint chain for me?

The answer to that is simple- because joint chains with more than 2 joints tend to get really hairy when you try to bind them to a standard IK solver. There's no easy way to override the final rotation of the distal phalanxes, which means it's not trivial to simulate things like finger tip pressure (such as a finger pushing into a hard surface) or finger tip tension (where the tip is looped around something that's actively pulling away, straightening the other two joints).

When confronted with this problem, most people just shrug their shoulders and deal with the manual joint rotations instead. I guess that's one of the benefits of being lazy- you tend to find ways to automate things, even if that automation requires an initial investment of time and effort in order to speed things up down the line.

So this is a little plugin I've been working on for my 3D package that basically solves the 3-joint finger IK problem for me. It's a very specialized solver and only supports 3 joints for finger-like configurations (toes can usually be represented by 2 joints only, which means they can be handled using a standard IK solver). It works by equalizing the angle between all the joints in order to ensure that the finger tip always lands up at the defined goal (or points towards it if the goal is out of reach), along with a bit (okay, a lot) of extra math to enable fingertip pressure and tension modifiers. It supports arbitrary bone lengths, since finger bones are never the same length and each finger is different from the other. It also has a curve profile that defines a rotational falloff, which can be used to ensure that the finger properly unfolds itself as the goal is moved towards the knuckle (to prevent the joints from contorting up into a physically impossible shape).

The end result is that dealing with finger posing is now just a matter of grabbing 5 objects in the viewport, positioning them to where you want them, then setting the pressure and tension modifiers accordingly. At most, this takes maybe 16 or so mouse clicks instead of the 100+ you might spend tweaking joint rotations manually for a good 4-5 minutes.

Videos of the plugin in operation are attached below. The first one simulates how the finger tip can react to hitting a "hard surface" (represented by the line across the ellipse) and dealing with an increasing and decreasing amount of pressure. The second shows how the plugin works in general, including the tension setting which can be used to simulate fingers pulling at something (ie, someone grabbing onto a ledge trying not to float away) or even the fingers being forcefully bent back where the second joint needs to lock straight and the third bends backwards (incidentally, this is something that's nearly impossible to do with normal IK solvers since the joints will always orient themselves towards the IK pole vector).

Finger IK tech demos

Related Creators