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 (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 some code, you know what to do 🙂


This kind of technique might be 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 an already existing deformer. This technique could of course be altered to ride ontop of FK-rigs, which could be used to rig tails/tentacles/fishes etc. When I figured out this technique I felt like it opened a door to a new way of thinking about rigging challenges.

The tutorial:

The script:
The ribbon produced by the script is almost identical to the ribbon created in the tutorial, with the exception of some cleanup in the setup and an option to offset where on the surface the twist occurs.

Download Script

62,064 total views, 28 views today


  1. Abhishek Chuniyana says:

    Thank you for the script brother but I’m Running script in python tab still getting

    Error: invalid syntax

  2. Mr Matthew Pidgeon says:

    Thanks so much for posting this tutorial! It’s very useful!!

  3. hoda says:

    how I use segments ctrl that linked with joints which link to the mesh .. to make bendy mesh to more control in between mesh!!

  4. Katia M says:

    Hi !

    first of all thank you very much for this tutorial.
    I’ve got a problem, i’m stuck at the wire deformer step. When I’m trying to apply the deform, it doesn’t works. My controller works but the geometry doesn’t follow. I tried separatly to see if an other constrain blocked something, the same.After a few tests, I realized that the problem is the curve. When my curve points touch an intersection of my geometry, the wire deformer works and when it doesn’t, the deformer doesn’t work. Really strange, do you have any idea about this issue??? I really want to finish your great tutorial !! Hope you will help me. Have a nice day,:)


    • Katia M says:

      (to be more exact, when I create a new curve, only the point on the border of myribbon geometry works and deform my ribbon geometry…

  5. Xhom says:

    Thanks for this great tutorial.
    After making this ribbion ,how should I attach the ribbion to other joints?

  6. Anupam Banerjee says:

    Jorn please do this utilities node connection with maya 2017 or 18

  7. Dishank says:

    i m a student and thank you so much for sharing your techniques it helped me alot for my rigging showreel.

  8. Luis Linares says:

    Hi Jorn! great tutorial, i was wondering why the scripts you used werent working for me. The one at the beginning to place Joint/Grp/Curve into the follicles AND the one towards the end to do the array of nodes for the squash. Thanks for your time 🙂

    • Jorn says:

      Which maya version are you using, and what specifically doesn’t work? Do you get an error message or something? You are talking about the script named jh_proceduralRibbon.py, right?

      • Luis Linares says:

        I’m talking about the scripts at minute 2:53 and 29:30, I don’t know much about scripting but I copied everything word by word how you have it and it says #Error: invalid syntax, I used my own naming convention but I changed things accordingly in the scripts for it to work but still didn’t work.

        • Luis Linares says:

          I’m using 2018. Thank you for the quick reply 🙂

        • Jorn says:

          Ah I see, I should probably have mentioned this in the video, but if you look at the tabs in the script editor, you have different tabs named “MEL” and “Python”. So as this is Python code you will have to make sure that you run the script from one of the Python tabs 🙂

          • Luis Linares says:

            I was running it as a python script, interestingly enough, if I delete everything after the #Rename command it works, it renames everything just fine. I’m just going to bite the bullet and do it manually this one time just so I know what’s under the hood, but I’m going to have to understand the command itself. Thank you tho!

          • Eddy says:

            Hello! Yeah, I’m currently having the same problem as Luis here.
            I keept getting a #Error: invalid syntax for the Commands used to connect the follicles and the nodes used!
            I cant seem to get it!

  9. 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

    • 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?

  10. 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 🙂

  11. 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?


    • 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 🙂

  12. Sam S says:

    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 ?


  13. HxC says:

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

  14. 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 😛

  15. 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.

  16. 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 🙂

Leave a Reply

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

seo reseller