Curve driving bonechain Blender

Curve with wave modifier driving bones.

 
In this tutorial I use an easy way to create a tentacle wave like motion.

Instead using keyframe animation I decide to use a wave deformer to animate the curve and then

this curve to drive the bone chain.Then I bake the animation and in the end I copy the first frame to the

last frame just to create a loop to use it in Unity or other game engine.

So here's the steps:

 
Add an Armature/single bone and place it to match the model, then subdivide it as many times you want.


Then add a Bezier curve : Shift+A /Curve/ Bezier and place it to bone chain.

You can do it easily by selecting the last bone in Edit Mode, Shift+S / Cursor to selected

and then select in Edit Mode again the Curve point of he Bezier Curve and Shift+S Selection to Cursor.Then select the Curve point with Handles and scale it to Y axes, S+Yand hit 0 to scale.

Do the same for the Tip of the Curve also and the subdive the Curve in Edit Mode:

Select all Curve points hit W select Subdivide.I recommend to subdivide it 2 or 3 times to have some points to have nice deformations.

 
Now select the Curve, go to modifiers tab and add a wave modifier.

Change Position from 0 to 1.

Rotate 90 degrees if you need the curve in Y axes.








Ok now with Curve selected go to texture tab and create a new Blend texture.

Check Ramp, select black color and change the Alpha value from 0 to 1.

Go to Modifiers tab again and in texture parameters choose that blend texture.

Depending the result you want, you can adjust the other parameters also, like speed or narrowness.Also you can go to texture and adjust the ramp colors to create the motion

you want for your Curve.

In black there is no motion at all, where is white is full motion.

So black color should make bone chain base to not moving at all.


Now to in order to make the Curve to drive the bone chain, select the last bone and in properties go to
BoneConstaints tab and add a SplineIK constraint.
In Spline IK properties select the BezierCurve as target and in Chain Lenght increase the number to match bones number from the bonechain. In this example we have 8 bones so increase the chain Lenth fitting to 8.


Now to in order to make the Curve to drive the bone chain go to Modifiers tab and select
this little icon as shown in image below.
Playback the animation and now you can see the bone chain having a wave motion.









To finish the set up select in Edit mode the base of the base bone and hit E to extrude a new bone that will influence the body of the model.

Then select the Mesh and then the Armature and Ctrl+P and select With automatic weights.
 
Paint weight paints if you need and then Select armature in pose mode (all bones) , space/select bake actions
Check “ Clear Constraints ” and Done.

The last step is to create the loop of the animation.
So in Dope Sheet Select the first keys and dublicate them to the last frame you want.
You have to scrub in timeline to find the right last frame to be match as possible the first frame.
For example in my case frame number 25 is like number 1, so I dublicate Frame 1 and translate the keys to Frame number 25 to have an animation loop.
Now you can export the model with the baked animation as .fbx to use it in Unity or other game engines.




Note:
Before you do that select the mesh and Ctrl+A and select Apply Scale.
In some cases when you apply scale I have notice that normals changed in some faces, so in Edit mode select all faces and hot Ctrl+N to recalculate normals.
Now you are ready to export the model with the animation.



Comments

  1. This tutorial doesn't work, there is no mention on how to connect the curve to the bone chain.
    That little icon you talk about doesn't affect the bone chain at all.
    You must have missed a step when you parent or setup a constraint to the bone chain some how.

    ReplyDelete
  2. You are right, I missed the step that you create a SplineIK constrain in bonechain.
    Really sorry about that, I will update this thread soon but for now do this:
    1. Create the bone chain
    2. Add the Bezier Curve
    3. Select the last bone and create a Spline IK constraint.
    4.Add a Wave modifier.
    5.In Spline IK properties select the BezierCurve as target and in Chain Lenght increase the number to match bones number from the bonechain.
    Finally select BezierCurve and in wave modifier properties select the little icon on top right.

    ReplyDelete
  3. Ok I updated the tutorial, now it will work as expected.
    Thank you and sorry again.

    ReplyDelete
  4. Thanks so much got it working now. :D :D :D

    ReplyDelete

Post a Comment

Popular posts from this blog

Tranfer animation between blender and maya

Easy walk cycle with maya.