2
$\begingroup$

I am trying to create a rig for the limbs of a crossbow in blender. Here is what I have so far: enter image description here Each of the limbs is controlled by an an IK constraint. The targets of the IK constrain have a limit distance constraint, which moves them as the string is pulled.

The problem is that the limbs aren't actually bending in a realistic way. Specifically, the part when the middle of the limb bends "up", as pictured above.

Here is a rough animation of the behavior I am trying to achieve: enter image description here

Instead of bowing up, the limb of the crossbow bends as if it is describing the arc of a circle with an increasingly smaller radius. What is the best way to achieve this in Blender? Is there some way I can get the IK constraint to behave this way, or do I need to use curves, or something else entirely?

$\endgroup$

3 Answers 3

2
$\begingroup$

Here is a straightforward way to accomplish your goal. I've described the approach but you'll have to tweak the constraints and driver to match your desired movement:

Bone chain showing four arcs of the curve and a controller

In this example, the 4 bones in the Z chain represent the object you want to curve. They are chained and connected: Bone is the parent of Bone.001 is the parent of Bone.002 is the parent of Bone.003. There's nothing special about it being 4 bones, that's just a convenient number.

All of the bones have a Copy Rotation constraint to copy the rotation of their parent, except Bone. The idea is that rotating Bone will cause each of the other bones to rotate as well, creating the arc:

Typical copy rotation constraint for chain

This is the constraint applied to Bone.001. It has the default settings, except that both Target and Owner are set to Local Space. Since we are rotating the bones on their local Z axis, we could lock out the X and Y axis in the Axis setting, but I didn't bother.

The technique for getting the bow right is to set the Influence of each bone so as to achieve the result you want.

Bone.004 is meant to move along the world X axis (its local Y axis.) Its Y location is used in a driver that controls the Z rotation of Bone:

Driver for the Z rotation of Bone

This is a crude version of the setup. Bone.004 is not reasonably positioned and should be placed where you want your control bone. The expression I used in the driver, $-location$, is not scaled properly or properly converted into radians to use for the rotation value.

But the above is the basic setup. Modify it by tweaking the constraint influence on each of the constrained bones and modify the expression appropriately and you can produce your desired curves.

$\endgroup$
2
$\begingroup$

i think it is quite easy with this:

first do a "normal" rig like this:

enter image description here

then add a nurbspath like this:

enter image description here

enter image description here

select this endpoint in edit mode, press CTRL-H -> hook to new object

enter image description here

same to this:

enter image description here

select your last bone of your armature in pose mode:

enter image description here

add bone constraint:

enter image description here

as target choose your nurbspath

increase chain length to the number of your bones, choose y scale mode: none

enter image description here

now you can move your two empties as you want to get the result you want:

enter image description here

to get your armature to the other side, select everything, press SHIFT-D, then press F3 -> search for object mirror x local

enter image description here

and move along x axis after mirroring that it fits.

To simplify your animation, i would recommend to lock the z-axis of the empties, so you can easy move them correct with G and mouse movement.

enter image description here

enter image description here

$\endgroup$
1
$\begingroup$

It's tempting to suggest a Simple Deform > Bend modifier:

enter image description here

(Origin at geometry: object currently aligned to World: about Z)

$\endgroup$

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .