algorithmic modeling for Rhino

following on from Part 1

So now we have a mesh consisting of strips of thin rectangles

To make the shape a little more interesting, I've also distorted the initial coarse input mesh, by moving its control points in Rhino.

Also, I forgot to mention in part 1 that when doing the directional subdivision, depending on how you drew your input mesh, there is a chance that it gets divided in the wrong direction, and you end up with something like this:

Which is not what we want.

The simple way to fix this is with the MeshTurn component, which rotates the direction of each face by one side:

Now we can use physical relaxation to smooth our mesh. In this example I show a simple tensile relaxation, so it will be negatively curved, but the same principles can be applied to all sorts of surfaces by using different combinations of forces.

The definition for the relaxation is attached below.

There are 3 main groups of forces used:


For the mesh to be able to unroll properly into flat strips, we want each of the thin rectangles to be flat.


I already showed how the WarpWeft splitting can be used to assign different strengths to control the shape of a mesh here. Now because of the uneven subdivision we have very different numbers of edges in each direction, so the strengths have to account for this. Depending on the level of subdivision used and the shape you want to achieve, you may need to set the Weft stiffness to be 10 to 100 times that of the Warp.

Edge Smoothing

Because our subdivided mesh has square ends, we might not want to simply anchor the boundary, so I've shown how we can force them to become more circular, while still staying in place. Each boundary curve gets pulled onto its best fit plane, while also applying bending to round it out, and springs to keep it from shrinking.

(This part could also be achieved in other ways, such as pulling the boundary vertices to a curve)

When we run this relaxation, the shape should smooth out to something like this:

Play with the tensions and boundaries until you are happy with the result, wait for it to stop moving, then stop the timer. (Remember it is very important to always stop the timer once the relaxation has finished, before continuing working with the output, as otherwise Grasshopper becomes very slow, because Kangaroo is constantly resolving, even if no movement is visible).

If you want to try other shapes than tensile surfaces, you could also use forces such as bending, laplacian smoothing, or pulling to some target surface to control the form.

Next - Part 3 splitting and unrolling

Views: 5142


Replies to This Discussion

This is so cool. Thank you for describing the process as you have...I am learning a lot by going through the example. So generous... thanks again.

Thanks for sharing this

Hi Daniel,

I tried running the script you've provided, I've hooked up mesh edges to planar surface for it to show planar mesh faces but the script only planarises about half of them. I've fiddled with the Weft/Warp and rest lenght parameters but I can't get all faces planarised. Can you help me out please?

Hi Andrei,

It's better if you make a new discussion for this in the Kangaroo group, rather than in the comments here (Please also include the files you are working with).

Hi Daniel - do you have an update of a Developable strips tutorial for Kangaroo2? 






  • Add Photos
  • View All

© 2021   Created by Scott Davidson.   Powered by

Badges  |  Report an Issue  |  Terms of Service