Springy Motion in Cinema 4D

Cinema 4D Tutorial – Springy Motion in Cinema 4D

Someone on FXPHD recently asked me if there was a way to add some springiness to their Cinema 4D animation, you know the kind where an object overshoots it’s keyframed position (or any animated parameter). It can be overused, but if applied with some subtlety, it can offer a wonderful secondary motion which can really enhance your work.

I’ve uploaded a file which demonstrates three ways to achieve this affect, they all have advantages and disadvantages depending on the application.

jiggle

Jiggle Deformer

Firstly I used the Jiggle Deformer. This deformer is so powerful, there are a million things you can do with it. In this most basic of examples, the jiggle deformer simply moves the object vertices as the velocity changes using some internal springs. It works fine on parametric objects, but the real power is unleashed when you use polygon objects. You then have the opportunity to fine tune the jiggliness based on selections and vertex maps. This means you can weight your mesh depending on which part should be jigglier. Imagine a character with a big belly, by weighting the belly considerably higher than the rest of the body you can ensure that the belly will bounce around as your character moves. The jiggle deformer also allows you to include forces and gravity to give your objects cloth or dynamic motion, more on that another day.

spring

Spring Constraint

Secondly I chose to use a spring constraint. This allows you to connect one object to another by a virtual spring, as you move one or other object the connection stretches until the spring reaches full length and then it will pull the other object towards it, along with some inertial type motion to make it all feel quite natural. Great thing with the spring constraint is that you can add several targets, so your object might be connected to two or three objects, leaving it suspended between them. Another neat trick is to create a chain of spring constraints, so object a to object b, object b to object c, etc. If you do this with some null objects and then connect them with a tracer, you’ve essentially built a dynamics spline. Great if you don’t have the hair module and need a dynamic spline!

delay

Delay Effector

Finally I used the MoGraph Delay effector. By building a small Xpresso setup, you can use the Data Node to link the global matrix of the Delay effector to the global matrix of your objects. With a little bit more effort you can link this to any parameter on an object. Simply split the matrix into a vector and then vector to real and you can isolate a single axis and apply the delay to things like Z Movement on an Extrude.

xpresso

Sample MoGraph Data Node

You can download the file here. I hope it’s useful to some of you.

Author: Tim

34 Comments

  1. jackleisen
    jackleisen On December 5, 2013 at 8:55 PM

    Thank you,.!!!

  2. Craig Zuckerman
    Craig Zuckerman On December 6, 2013 at 8:54 AM

    Thank you sir-I ALWAYS learn a lot from this site, Best, Craig

  3. Ricardo
    Ricardo On December 7, 2013 at 6:02 AM

    How could I turn the Delay effector to act like bouncing? Something like getting only absolute values of the spring variations?

    • admin
      admin On December 9, 2013 at 10:24 AM

      You could try running the global matrix output through an ABS node but I have a feeling it isn’t going to be that easy…

  4. Really noisy
    Really noisy On December 7, 2013 at 12:00 PM

    Useful and neat as always! thank you.

  5. Brandon
    Brandon On January 10, 2014 at 6:55 AM

    Tim is a boss

  6. Craig Zuckerman
    Craig Zuckerman On January 10, 2014 at 11:20 AM

    Thanks, dude, your are truly generous, creative, and smart, happy new year, CZ

    • admin
      admin On January 22, 2014 at 10:16 AM

      Happy New Year to you too Craig, thanks for the compliments.

  7. soatia
    soatia On January 28, 2014 at 11:05 PM

    great tips ! thanks a bunch for all of your tuts !
    i use delay/spring to get an unrolling carpet with mospline and get a realistic good result,

    i have a question please as i play around with it :
    what would you suggest me if i want to get an unrolling carpet/flag to collide with a wall behind it – i messed up with dynamic tag, hair tag, cloth tag……

    thanks in advance

    • admin
      admin On January 29, 2014 at 5:32 PM

      @soatia Did you try using the collision deformer?

      • soatia
        soatia On January 29, 2014 at 10:31 PM

        thanks Tim, i got it ! ๐Ÿ™‚ i put a spline wrap on my plane to get the spiral shape , then i edit/current state it, apply cloth tag and voilร  it can collide with my wall within the cloth collider tag !

  8. soatia
    soatia On January 29, 2014 at 11:31 PM

    anyway i got some buggy things, my cloth_spiral won’t self-repulse no matter high distance/force/damping i use, any clue ? thanks

  9. Isaac Quezada
    Isaac Quezada On March 4, 2014 at 10:16 AM

    Hi Tim, great tips as always. I was wondering how could you sample the delay effector in order to control the strength of a deformer?

    • admin
      admin On March 4, 2014 at 10:35 AM

      Hey Isaac, the MoGraph Sample node has a strength output, so you can directly wire that into a deformer or use a range mapper to adjust the values to the range required.

      • Isaac Quezada
        Isaac Quezada On March 28, 2014 at 11:04 AM

        Thanks a ton, that did the trick!

      • Brien Hopkins
        Brien Hopkins On March 2, 2015 at 8:08 AM

        Hi Tim,

        I’m trying to do the same thing Isaac did. However, I’m a bit lost. I think I understand wiring the mograph sample node’s strength out to the bend strength, but what do I feed into the mograph sample node to begin with?

        Thanks,
        Brien

  10. M. Kabbara
    M. Kabbara On March 30, 2014 at 1:42 AM

    Hi Tim, thanks for you great tips and tutorials.
    how can I add springy motion to “Fillet radius” of cube, going from 20cm to 0cm?

    • admin
      admin On March 31, 2014 at 10:28 AM

      You could feed the sample effector node strength output through a rangemapper and convert the 0-100% to 0-20 values and then pass this into the cube fillet parameter.

      • M. Kabbara
        M. Kabbara On March 31, 2014 at 3:54 PM

        thanks Tim, the strength output is now connected to fillet radius thru rangemapper, but nothing happen!
        should i modify something in the input of Sample effector?

        • admin
          admin On March 31, 2014 at 5:35 PM

          yes! To use strength you need something to modify strength. You can achieve what you’re after by taking the global matrix output and then splitting this using matrix to vectors, then vector to real, then pass this through the range mapper.

          Like this example

          http://luxx.tv/delayfillet

          Note how I used the X axis as this is where the effector is animated, so it is not the most flexible approach but hopefully opens up possibilities for you.

          • M. Kabbara
            M. Kabbara On March 31, 2014 at 6:00 PM

            thanks thanks thanks ๐Ÿ™‚
            your are truly generous; this is exactly what i need ๐Ÿ˜€

  11. CMitchell
    CMitchell On April 15, 2014 at 2:40 PM

    Hi Tim,
    I have spent all day attempting to troubleshoot/recreate the delay effector rig. But it seems very buggy and stops working if I change anything. For instance, when I open the file it seems to work perfectly, but if I change the starting keyframe on the delay effector from -200 to -100, it just stops bouncing. Then if I change it back to -200 it still doesn’t work.
    There also seem to be yellow (as opposed to red) keyframes on the cube, which seems weird and the cube seems to start at -400 even though it is linked to the GMatrix of the delay effector. Not sure why.
    Was this created in R15? Could it be a version issue, or am I missing something?

    • admin
      admin On April 15, 2014 at 7:10 PM

      Unfortunately the Delay Effector is quite buggy, drives me nuts too. The trick is to only adjust the value with the slider, if you use numerical values then it stops working.

  12. craig zuckerman
    craig zuckerman On March 3, 2015 at 1:16 AM

    Hey Tim, thanks for your insights here- !-I am a bit lost, when you talk about linking other parameters, in respect to the Xpresso setup, ie, matrix to vector, etc. Any chance for a tutorial, or an example?, I love when I deconstruct your files to learn. Thank you in advance, Best, Craig

  13. Craig Zuckermanc
    Craig Zuckermanc On March 3, 2015 at 10:10 AM

    thank you sir, Best, Craig

  14. Nikits
    Nikits On May 1, 2015 at 4:45 AM

    Hallo,
    Thanks for your springy methods.

    I have an issue using the constraint spring method and I need some help please.

    I am working on a mobile phone which comes in the frame using the spring style method 2 which is very very nice!!!!
    When I export to after effects with an external compositing tag for the screen I get rotation and position of the screen perfect BUT NOT the scale.

    Any ideas?

    Thanks again

  15. Billy
    Billy On August 10, 2015 at 9:44 AM

    Hi I have some objects being morphed with pose morph but can’t figure out how to use jiggle or delay with this. Can you please advise?

    • admin
      admin On August 10, 2015 at 10:03 AM

      You should be able to use the morph deformer and then place the jiggle deformer after the morph deformer. It works here.

  16. Carlito
    Carlito On November 10, 2015 at 6:35 AM

    Hi Tim,
    Thank you for your great tuts again. I have an issue with Xpresso. I’m trying to put a delay effector on a joint goal of a rig like the exemple you did. But it didn’t work. I put a delay (object and global matrix port) to a sample node, to my Joint goal (global matrix). Did I do something wrong? Thank you so much in advance to help me out with that issue.

    • admin
      admin On November 10, 2015 at 2:03 PM

      Hi Carlito,
      Without seeing your setup it is difficult to know what is wrong. In my scene, the Delay Effector is animated, the global matrix is then taken from this and applied to the cube. You should probably plug the Goal Null / Global Matrix as an input to the Sample Effector node as this is the object moving.

      Did you know, you can also get secondary movement by activating the dynamics option in the IK tag?

      Thanks

Leave a Reply