Notifications
Clear all

[Closed] Create a chain of bones from a spline

I’m interested, just haven’t had a chance yet to decide if I want to make it my go-to solution.

As for the part about not being able to rotate around the toe on a reverse-foot rig, yes you can unless I am misunderstanding what you mean.

what is wrong with Biped leg?

You can still had intermediate pivot like for roll front and back…
But having additional controller for toesRotation and heelRotation is a pain to animate.

who has a problem? what should i have do?

The complaints I’ve had (and other animators I know have had) with the traditional Reverse Foot setup is that simple posing of the foot isn’t as quick as I’d like.

I like to pose a rig through direct manipulation as much as possible since animating via sliders is often clunky. (Note: that may be more of an issue with UI. If I were using Maya’s channel box, I may be singing a different song.)

I would love to have a foot rig where I simply rotate the foot freely (i.e. pivoting from the ankle in FK mode) or around a contact point (presumably animatable to be at the ball, heel, toe or anywhere in between) with an easy switch between the two modes. And with a minimal number of controls to animate. Although Biped is terrible in a lot of ways, it actually gets pretty close to that ease of use.

I’ve yet to use a custom rig with a really robust foot rig and instead have used a lot of “good enough” rigs.

Finally had the chance to examine this in detail.

Okay, so it’s basically a version of the triple IK leg. For whatever reason, I’ve always found these to be very “wiggly”. That is to say, they don’t like to stay flat on the ground. Maybe there’s a certain amount of realism to that, since actual feet are constantly shifting about to maintain balance, but in practice the results often look wrong and are difficult to control.

that is a good foot rig? it’s a rig where an animator can easy make full cycle of STEP in IK mode:

ankle

toe on free mode

heel

ball

toe (IK)

ankle on free … etc.

Okay, I figured out what I was doing wrong. I needed to set the X and Y preferred angles to EXACTLY zero, and dramatically lower the solver thresholds. Now I can do what I need with the triple IK.

I never understood what I was doing wrong with them before, because my triple IK legs were always less stable than those I watched other people make! So often it’s the seemingly smallest things that create trouble…

At any rate, I’ve worked this into my spline-to-bone-creator as an option. The relevant parts are simply

(
  			for i = 1 to 2 do
  			(
  				local p1	= LP[i], p2 = LP[i + 1] -- start and end points
  				local a		=	getAxis LP[3] LP[2] LP[1]
  				local b		= boneSys.createBone p1 p2 a
  				append boneChain b
  
  				if names[i] != undefined then
  					b.name = names[i]
  				else
  					b.name = "Bone_" + lin.name + "_" + (i as string)
  			)
  			boneChain[1].parent = base
  			boneChain[2].parent = boneChain[1]
  
  			for i = 3 to 4 do
  			(
  				local p1 = LP[i], p2 = LP[i + 1]
  				local a = cross (p2 - p1) [0,0,1]
  				local b = boneSys.createBone p1 p2 a
  				append boneChain b
  
  				-- Name foot bones
  				if names[i] != undefined then
  					b.name = names[i]
  				else
  					b.name = "Bone_" + lin.name + "_" + (i as string)
  
  			) -- end i loop
  			boneChain[4].parent = boneChain[3]
  ) -- end leg

and

(
  				IKHI		= IKSys.ikChain boneChain[1] boneChain[3] "IKHISolver"
  
  				chains	= #(IKHI)
  				vh.pos	= boneChain[2].pos
  				IKHI.transform.controller.posThresh = 0.001
  
  				chains	= #(IKHI)
  				IKHI_Instep				= IKSys.ikChain boneChain[3] boneChain[4] "IKHISolver"
  				IKHI_Instep.name	= ("IK_" + lin.name + "_Instep" + side)
  				IKHI_Instep.transform.controller.posThresh = 0.001
  
  				IKHI_Toe					= IKSys.ikChain boneChain[4] boneChain[5] "IKHISolver"
  				IKHI_Toe.name			= ("IK_" + lin.name + "_Toe" + side)
  				IKHI_Toe.transform.controller.posThresh = 0.001
  
  				append h (point pos:LP[3] size:(hw * 2) wireColor:(color 14 255 2) name:(lin.name + "_Ankle" + side))
  				append h (point pos:LP[4] size:hw wireColor:(color 14 255 2) name:(lin.name + "_Instep" + side))
  				append h (point pos:LP[4] size:(hw / 2) wireColor:(color 14 255 2) name:(lin.name + "_Ball" + side))
  				append h (point pos:LP[5] size:hw wireColor:(color 14 255 2) name:(lin.name + "_Toe" + side))
  				append h (point pos:LP[6] size:hw wireColor:(color 14 255 2) name:(lin.name + "_Heel" + side))
  
  				h[5].parent			= h[1]
  				IKHI_Toe.parent	= h[3]
  				IKHI_Instep.parent = h[2].parent = h[3].parent = h[4]
  				h[4].parent			= h[5]
  
  				IKHI_Instep.transform.controller.SAParent = 0
  				boneChain[3].transform.controller.PrefXAngle = 90
  				boneChain[3].transform.controller.PrefYAngle = -0
  )

(Haven’t tested whether it will work with my switch-IK-to-FK script yet, but that’s a different project. If it does I will probably simplify the rig a bit, since it will no longer need the ankle or the toe lift helpers since both would be better handled from the FK side.)

Page 3 / 3