cannot tie my shoelaces

Become a member of the CGSociety

Connect, Share, and Learn with our Large Growing CG Art Community. It's Free!

Thread Tools Display Modes
  04 April 2013
cannot tie my shoelaces

I am stuck trying to create an animation of hands tying a knot. The hand animation part is working well. I have a hand model with scripted sliders for wrist flexion and extension, abduction and adduction and finger and thumb sliders for flexion of the first joint, abduction and adduction, and curling (flexion of each finger/thumb joints).

The shoelace (actually "suture") part is giving me grief. I have a simple shader on the lace that has a color channel and a layer channel on the bump (with two noise shaders, one with a scaled U to create some subtle lines). If the lace changes length, the shader does some weird slipping, and the lace part needs to be kept constant in length for proper animation anyway.

What I have tried that does not work:
1. I used a sweep nurb (circle and b-spline) for the lace. When animating this, there is no way I can figure to add a spline length constraint, so I have to repeated go to the project info settings and manually adjust points to keep the length approximately the same. Animating the individual points to create a couple of square knots without the animation jumping around between frames is not working. Adding a constraint to keep one of the vertices (the second one) to the thumb position of the hand is not working and it does not stay in perfect position between keyframes (it falls off a short distance).

2. I created a cylinder 200 x 1 cm with 200 vertical subdivisions and 12 circumferential subdivisions and created 200 joints. C4D moves to a crawl with more than 50 joints, I discovered.

3. I created a cylinder as above with 41 joints and weighted the vertex rings between the joints with 100%, 80%, 60%, 40%, and 20% weightings from joint x to joint x+1. I then used IK between the first and last of the joint chains. I added a constraint for the goal to the thumb, and again it falls off a bit between keyframes. I also added joint goals, but when I add a collision tag, the two laces do not do what real laces do: not go through each other.

4. I did the same as above but used an IK spline instead. Even with all the joints and weighting, it gets pretty kinked in the actual knot areas and does not follow a smooth curve. I've played with every setting without getting a good curve and even added a hypernurb without improvement.

So I am now playing with hair tags, which is even more complicated. I have searched Google for any tutorials on this in any 3D program without really getting guidance for how to proceed. I would be most appreciative of any guidance. Thanks!

Edit: it looks like the best solution is none of the above, but use of a simple spline deformer with fixed length of the cylinder as above. Now if I can figure out how to constrain a single point on the spline to the tip of the thumb joint, I will be set.

Last edited by IsleofGough : 04 April 2013 at 01:03 AM. Reason: further information
  04 April 2013
Maybe this thread can help:
  04 April 2013
Very helpful

That link is very helpful. What is the advantage to using cactus dan's plugins rather than script it in expresso?
  04 April 2013
Using Mograph

Using native tools, this works to keep consistent spline length:
  04 April 2013

That is a very clever way of controlling length. I am not sure if I can use this for a non circular spline, but I will play with it. Thanks. Right now I have the basic model and hand animation sliders but need to either manually map vertices on the laces, cheat and use a non rendered IK chain to get an approximate curve, or best - to set up a collision system for the vertices on the spline. I am working on that now. Very preliminary:
  04 April 2013
have not red everything , but you could use the mograph MoSpline object. it does
implement scaling along spline tangents.

the white spline is the scaled spline , the black spline is the (animated) source.

setup and initial state :

scale down (current spline is longer than initial spline):

scale up (current spline is shorter than initial spline):


scaled with overshoot

edit : the reference spline is just the unanimated spline as a reference for the initial
length. you could also just cache the length of your spline with a python node/tag
if you do not like clunky xpresso reference objects

Last edited by littledevil : 04 April 2013 at 12:29 AM.
  04 April 2013
Originally Posted by IsleofGough: That is a very clever way of controlling length. I am not sure if I can use this for a non circular spline,

It will work with any spline as the source. I just used a circle as a quick start. Moreover, you can set the exact length of the spline by setting the number of clones and the size of the steps. In the sample file I provided, the sweep will always be exactly five units long, because the the step size is 1m and there are 6 clones, 1m for every space between.
  04 April 2013

Thank you very much for the tips!
  04 April 2013
You could also use the spline wrap deformer which has a "keep length" option.
  04 April 2013
Thread automatically closed

This thread has been automatically closed as it remained inactive for 12 months. If you wish to continue the discussion, please create a new thread in the appropriate forum.
CGTalk Policy/Legalities
Note that as CGTalk Members, you agree to the terms and conditions of using this website.
Thread Closed share thread

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Society of Digital Artists

Powered by vBulletin
Copyright 2000 - 2006,
Jelsoft Enterprises Ltd.
Minimize Ads
Forum Jump

All times are GMT. The time now is 09:16 AM.

Powered by vBulletin
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.