Well, why yet another bike tutorial, the answer is that I have found a better way to rig the front wheel so the suspensions behaves more precisely as the bike pitches. An image:
Now we have a new bike – the old “Chopper” style, as before the model is not important and I only spent a couple of hours building it. We should also look at the armature:
The basis of the new system is two right-angle triangles, the first is based on the bones “pitch” and “RH_loc” – these form a right angle triangle, so as you rotate the pitch bone, the RH_loc bone will move along the horizontal axis. Here are the triangles drawn in magenta:
RH_loc‘s distance from the head of the pitch bone can be expressed as; length of pitch multiplied by cosine of pitch angle. So we put a driver on this bone’s Z location to move it along the horizontal axis, the driver is this:
len * cos(ang) where len is the length of the pitch bone and ang is it’s angle of inclination relative to horizontal, here are the variables:
Next we must position the “wheel-pos” bone correctly to form the other right angle triangle. This bone determines where the front wheel will be, bearing in mind that the wheel moves away from the back wheel when the forks are extended and towards it when the forks are compressed. So the triangle is determined by the position of the tail of the pitch bone, the positions of the RH_loc bone and the position of the wheel-pos bone. The distance of wheel_pos from RH_loc can be expressed as; the distance from the tail of pitch to RH_loc multiplied by the tangent of the angle of inclination fo the forks. So we put a driver on the wheel-pos bone’s Y location (it is lying flat), the driver is this:
len * tan(ang) + len_2 when len is the distance from the fork top to RH_loc, ang is the angle of inclination of the forks (angle of forks_ref relative to vertical) and len_2 is the distance of RH_loc from the back wheel. it should be noted that the RH_loc and wheel-pos bones are located at the back wheel when the armature is at rest, or in Edit mode. They are then moved forward by the drivers. Here are the variables for the wheel-pos bone:
Finally, the bone fork_low is parented to the wheel-pos bone and given a Damped Track constraint to point it towards the top of the forks. The front wheel, mudguard, brakes, etc and then “Bone” parented to this bone so they move as they should. I have also added a “bike_roll” bone, so I can lean the bike in corners and a “horiz_ref” bone, so I can pitch the whole assembly for when the bike is on a hill.
The wheel drivers are based upon the X movement of the bike_lean bone for the back wheel and wheel-pos bone for the front wheel.
Here is an image of the bike pitched up:
And pitched down:
Steering is achieved by rotating the forks-top bone, forks-low has a Copy Rotation constraint to follow the Y rotations of forks-top. As an optional extra, I have also added a Driver to bike_roll so it leans the bike automatically as the steering is rotated. This could also be linked to the bike speed as in previous bike tutorials.
- Bones RH_loc, RH_ang and forks_Ref are merely construction bones used to determine angles for the two Right Angle triangles used to determine the position of the front wheel, they are not used to move any meshes. Bone RH_ang has a Damped Track constraint so it always points towards RH_loc. It is not possible to calculate the position of the front wheel by combining the distance of RH_loc into the calculation for wheel-pos as this would create a cyclic loop and not work. I hope this all makes sense!
- I found out that the Angle Variable for drivers on bones only seems to work for angles between the Z axes rotations – nice to know! It is also important that the Z axes all point the same way and at right angles to the bike, or they don’t work properly. So this is why the construction bones rotate about their Z axes, rather than their X axes…..
Yep, another finished page here 😛