Tutorial: Create a Procedural Ribbon in Maya

Tutorial: Create a Procedural Ribbon in Maya

Since I put up my rigging reel I’ve received a lot of questions and requests for a tutorial on the procedural ribbons, so I’ve finally put together a tutorial on them. When I finished the tutorial I realized that it was really slow-paced, so I’ve written a script for it also (attached at the bottom of this post). So for those of you that find it easier to figure out what’s going on by skimming through a script, you know what to do 🙂

ProceduralRibbonDemo

I’m sure this technique is old news to some people, but it’s too awesome not to be shared. These ribbons actually evaluate slightly faster than the traditional ribbon-setup, which is crazy considering they’re so much more flexible. What makes this setup powerful though, is that they utilize the nonLinear deformers in Maya, which means you inherit the same flexibility as you have with deformers, so you won’t take a performance-hit as you’re just adding functionality to the already existing deformer(s). This technique could of course easily be altered to ride ontop of FK-rigs, which could be used to rig tails/tentacles/fishes etc.

The tutorial:

The script:
The script is almost identical to the one I create in the tutorial, I’ve just added an option to offset where on the surface the twist occurs, and cleaned up the setup a bit.

Download Script

2,473 total views, 3 views today

13 comments

  1. Fabian Elmers says:

    I’m very curious about the twist extractors you talk about in your reel. I am having a hell of a time trying to make a forearm setup that can go past 180 degrees without flipping.

    Aim’s don’t work as they flip at 180.

    • Jorn says:

      Hey, yeah I’ll see if can make some time to put together at tutorial on those also. Yeah right, again, simple trick: weighted constraint 🙂

  2. Paul Schweizer says:

    Hey Jørn,
    Awesome stuff with your ribbon setup, and thanks for sharing!
    I executed the script but unfortunately my maya immediately crashes after I move one of the controls even a little bit.
    I am trying it on Win 8.1 with Maya 2015.
    Have you encountered this behavior before? I will further investigate, since it’s a really cool setup and I would like to use it.
    I already suspect it has something to do with the blendshapes, because up until that step, everything works fine.
    Thanks,
    Paul!

  3. Paul Schweizer says:

    It seems I solved the bug, I had to install all the service packs up to SP 5 to get it to work.
    So thanks again for the cool setup!

    • Jorn says:

      That sounds really weird, I haven’t had any problems in any versions of Maya, I actually did the tutorial on Windows 8.1 in Maya 2015 SP1. It might just be to delete the prefs folder, I’ve had all kinds of problems that has been solved by deleting that folder 😛

  4. HxC says:

    Thank you so much !
    It will be awesome if you can make a tutorial about the twist extractors !

  5. Sam S says:

    Hi,
    very nice setup, thanks for sharing.
    Can you give us some hints of how you manage the twist extracts, another chain with spline IK maybe as initial setup ?

    Best.

  6. ramiro gomez says:

    Hi Jorn,

    This is actually pretty cool. How do you handle it when your arm is not straight but slight bent at the elbow for example and you don’t want a perfectly straight ribbon, but something that contours more to your topology?

    Thanks,
    Ramiro

    • Jorn says:

      Well there’s probably several ways to do this, what comes first to mind is to just have two more controllers influencing a denser wirecurve, easy peasy 🙂

  7. Marko says:

    Hi Jorn hope you are doing great, I just follow your great ribbon tutorial and everything goes fine until the last part of it, when I try to run the last part, when you connect the attributes for the xfrom_grps i got this annoying error “The destination attribute ‘ribbon_ctrl_follicle_xform_grp_01.scaleY’ cannot be found, same for the scaleZ. I cannot figure out what is wrong, I am new to this so hope my question is not dumb. Hope you can help me to solve this. Thanks in advance. Have a great day. Regards from México.

    • Jorn says:

      Hey there 🙂 Based on the error message, I suspect that the follicle groups either don’t exist or have another name. See if you can find the object “ribbon_ctrl_follicle_xform_grp_01”.

      Cheers 🙂

  8. Dean Finnigan says:

    Hi Jorn

    Fantastic work and many thanks for sharing your techniques.

    I wanted to ask a question about the seemingly 1D of a ribbon and how the follicles follow along only in one direction.

    I’m finding restrictions in the way the joints/follicles only follow the plane in one dimension. That is when you bend the plane in one axis which distorts the plane and naturally the follicles re adjust to the new direction and follow the curve of the plane.

    So in your video when you lift the middle it has that natural flow and all the joints and follicles follow and adjust rotations.

    However rather than lift it up in the direction of the flat plane, but move it side to side in the direction of the edge, then the joints do not re adjust rotations.

    Really hope that makes sense!! :o)

    So for rigging twists and bends in limbs in has limitations.

    In this case, do you have any work arounds or look at IK spline which has the ability to bend in all axes?

    Many thanks for your thoughts on this
    Cheers
    Dean

    • Jorn says:

      Thanks Dean 🙂 I’m not quite sure I understand your issue, you’re right in that the middle controller won’t affect the primary axis orientation on any of the joints, but that’s normally the way you want it, no? With ribbons you normally use twist extractors to control the primary axis of rotation, or optionally adjust the twist attributes manually.

      I’ve used the ribbons in several production rigs, but I can’t say that I recognizes the issue you’re talking about :/ Have you used the script to set up the ribbon by the way?

Leave a Reply

Your email address will not be published. Required fields are marked *