Saddle Curve folding funny behavior

Hey everyone,

I’m experimenting with (curved) folding simulations for my thesis and wrote a C# component (still WIP) that generates a mesh, triangulation lines and hinges from curves as inputs for Kangaroo. The functionality of the KingKong plugin was used as template.

I implemented the possibility to fold a set of circular or eplitical curves to fold a saddle curve, but the simulation doesn’t behave smooth and I have to apply a fold angle of 180° from the beginning to get the expected state of folding. A gradually increase of the fold angle doesn’t work, the real folding will happen at 180°, only a gradually decrease from 180° behaves smooth. So the simulation has some kind of “starting problems”.

It would be great if someone could point me in a direction on how to improve my simulation. (32.7 KB)

Here a video of the unsmooth simulation:

Kind regards

1 Like

I think this sort of buckling with the transition to lower frequency waves as it gets more curved could be physically correct for an increasingly hyperbolic sheet like this.
If it starts out with radial symmetry, that symmetry needs to be broken somehow for it to buckle out of plane. No particular orientation for the saddle is energetically favoured over another, so which one it picks will just be a result of tiny material imperfections (or floating point error in the simulated version).
This initial buckling could happen in a few places around the disc at once, causing multiple waves to form, but as these waves get bigger, they will tend to merge into each other until they find that simple 2 directional saddle it ends up as.
Of course when folding these things by hand, you trigger the buckling manually, so don’t see these merging waves, but with a continuous disc where the outer part is growing relative to the middle, an effect like the one in your simulation can happen.


There’s also another effect which could be at play here, which is that when simulating curved fold origami with planar quads, the mesh direction is tied to the ruling direction of the curved surface, and in reality this ruling direction sometimes changes during the folding. I don’t think that is necessarily the primary driver here though, since the effect also occurs when simulating it as a finely triangulated shell.


Thank you very much for your great answer @DanielPiker!
Your explanation was easy to understand and the paper was an interesting read. It definitely helps me to understand what’s happening in this simulation. I modified the shape of the curve to prevent radial symmetry and voila no buckling. :slight_smile:

Until now I have only folded such shapes by hand and was not quite sure what to expect from such a simulation. But I remembered seeing something similar on youtube and there was no problem breaking radial symmetry. I found this video again, it accompanied the paper Modeling Curved Folding with Freeform Deformations.

At minute 1:23 they simulate a similar folding pattern, but contrary to my memory they used a line that serves as a rope to break the radial symmetry of the disc.
They used evenly spaced quad meshes and are able to fold the mesh anywhere, the crease curve just have to intersect the quads. From what I understood they duplicate the intersected quads, split the mesh an stitch it back together somehow, the process is explained in a previous paper The Shape Space of Discrete Orthogonal Geodesic Nets but they don’t simulate physics (at least I think so). Additionally their program is able to judge for itself whether to fold a crease as a mountain or valley fold.
The Discrete Geodesic Nets Editor used is also published on github but at the moment it’s an earlier version that can’t handle crease patterns yet but I plan on playing around with it.
I wonder how hard it would be to implement the functionality of their DOG Editor into rhino/gh for better modelling of curved folded surfaces or bend surfaces.

At least I’m thinking about implementing the use of an evenly spaced quad mesh + the intersection splitting at creases to generate the starting mesh. But I have a hard time to dertmine how I could define the hinges in kangaroo to fold the quads located between crease and edge or crease and crease that are not intersected.

1 Like

The IGL DOG work is great. I’ve been a fan and following it since their first paper on it.
I’ve actually implemented the basic idea (without the curved creases) in Kangaroo.

See a couple of my previous posts on this:
Plywood Strips twisting and bending simulation (includes an example definition)
Tessellation Origami

Note that the lengths of the diagonals of the quads is not kept fixed. Simply using a quad mesh with edge lengths fixed does not give the same effect, since there would be nothing resisting stretching along the diagonal. Adding length constraints on the diagonal does not really work either, since if enforced strictly it resists bending in the perpendicular direction to that diagonal (you can work around this by using a fairly fine unstructured mesh, so no direction is particularly biased, like shown here and allowing a small amount of stretch. This has its issues though, since the bending resistance is tied to the stretching resistance, and as a fine mesh is needed, it can get slow).
The key idea of the DOG work is enforcing a condition on the angles around each vertex in a way that lets you separate in plane stretching from out of plane bending. I’ve been meaning for a while to improve my implementation of their work in Kangaroo and include the more recent stuff with the curved folds.