I’m using joints attached to curves to control the eyebrow, eyelid, and mouth deformations.
My nodes are as follows:
curveShape.worldSpace > pointOnCurveInfo.position > joint.translate
What this allows is, for example keying the bones’ position along a curve. This works really nicely in making the eyelid bones curve around the eye instead of using blendshapes that move vertices from point A to point B, causing geometry clipping when you’re working with large eyes.
I’ve run into a problem I blindly didn’t anticipate though:
The pointOnCurveInfo node is only just that: information of points on the curve. It holds no rotational information, so when the system is parented such that it follows the head, the bones remain oriented to their plane. This creates nasty deformations whenever the head is turned in any direction.
No form of constraint seems to take care of this problem.
Is there any way to keep the bones attached to their curves as I have it while having them inherit proper rotation? I’d like the flexibility of curves, but UnReal demands joints for deformations that aren’t blendshapes…
I was able to make the following setup:
In the Node Editor, connect curveShape.worldSpace > pointOnCurveInfo.position > locator
Constrain the bone itself to the locator with a pointConstraint
Directly parent the bone to the joint whose orientation it needs to inherit—in this case, to the upperJaw bone.
This informs the bone to inherit its rotation from its parent joint and its translation from the locator, which is bound to the curve.