Best ways to simulate grid shell bending?

Hey everyone. Working on something related to bending and twisting. I am wondering if there is any existing plugin to simulate the transformation of following kind of grid, or if kangaroo alone is enough?

Imagine if I have a a grid like the one from the left. If I pull point C and B up, the distance between C and B would get shorter while A and D drop lower. I understand that for the video there are those slots for the wood pieces to plug in (which would severely add complexities) but for now lets just imagine the grid is 3D printed in one piece. Looking for something that I can set the vectors at specific points and change the stiffness of the material.

Thanks. If there isnt a plugin for this kind of simulation I would love to explore on how to script one.

1 Like

Hi @wesleyshe623

That video shows a very specific and unusual type of gridshell - where the laths are oriented with their large dimension normal to the shell.
These asymptotic gridshells are a quite recent development. Eike Schling in particular has been working focused on these over the last few years. See here for one of his publications on this.

In conventional actively bent timber gridshells, the laths are usually wider than they are deep, and layered instead of intersecting, with a connection where they cross which allows them to rotate. They start with the members unstressed in the flat state, and have to be pushed or pulled up:

(Cluj gridshell)
If you are just interested in getting started with gridshells in general, then I’d recommend looking at this type to begin with, as they have been around much longer, with plenty of large scale built examples and lots of literature about them.

In asymptotic gridshells instead the members have to be already under significant bending in the initial flat grid, and as the shell pops up, this bending turns into twisting.

One key characteristic of these is that if you want to be able to use laths which are straight in their unstressed state, the grid has to follow the asymptotic directions of a minimal surface.

Which way round are you looking to work with these? A tool for actually designing them from the 3d first, then down to the flat intersection pattern, or something where you can start with various flat grids and see what shapes they pop up into?

You talk about 3d printing though, which would be very different to what is shown in the video, since if you print an asymptotic gridshell in the flat state, not only would the joint angles not be able to change, but the bending stress would not be there, so it would not pop up like the one in the video.


Here’s a basic setup for simulating the pop-up of something like this once you have the flattened curve network. (17.1 KB)


Hey Daniel! Thank you for your reply! In fact… I am now researching under Eike and we are exploring about not using FEA engineering softwares to simulate transformation effect of some asymptotic grids after applying force. We would love to work on a script or even develop a plugin under Grasshopper to study their kinetic behavior. At the moment, one of Eike’s colleagues has already built a script to find out the asymptotic curves (or principals curves) of a surface (

You are absolutely right about the difference between conventional and asymptotic grids, one being pushed up while the other one forms its shape almost automatically. And precisely because of the complexity added by the internal stress, I figured it might be hard to start with an asymptotic grid shell. Therefore, I tried to simplify the current stage of research into just a simple double ruled (surface) grid and its transformation if force is applied. If I apply force on just point B and C of the grid, is the distance between the two points gonna be shortened under Kangaroo? It seems like there is already a lot to think about for this simple simulation. For example, if I define point A as the origin/ fixed point what if point A also moves (or twist)? If I apply force to point B and C, how can I keep the direction of the applied force constant? These are things I would like to solve first before getting into asymptotic grids.

As for the configuration, we usually have two configurations for the shells, one is a slotted waffle (like those wood puzzle) and the other one is basically double layered of wood pieces connected by a pin to freely rotate. The former one is clearly more problematic since the slotted hole would severely affect the simulation result (not to mention to rotate, the gap must be wider). Please ignore what I have said about the 3D printed grid (it was kind of late last night when I typed that). I said that mainly because I was wondering about how to simplify things even more. For now, I think I will focus on the double layered rotation method.

Slotted waffle method

Double layered method

Ultimately, the script or plugin should perhaps be able to analyze not just double double ruled grids and asymptotic grids but also geodesic grids. Thank you for all the feedback! I will take a closer look into your comments and script and do some more experiments first. Its truly a pleasure to have you here in the forum!


1 Like

Ah, you are already working with Eike! that makes sense now. Tell him I say hi.

Here’s another simpler approach that is maybe clearer.
This one starts from the 3d shape (in this case a ruled saddle), and treats each curve as a simple bending-only thin cylindrical elastic rod (ignoring anisotropy and torsion resistance).
Then it pulls the points onto a plane, while maintaining the segment lengths:

I also included the beams generated by the offset in the normal direction, but unlike the previous definition, here the beams are just a geometric construction, not part of the simulation, where the rods are treated just as polylines

flatten_000 (18.0 KB)


Hey Daniel! A bit busy lately so I am just picking everything back up. I am wondering what would be the input curves for the first script you have sent out? Is it a split up grid or an asymptotic grid that has been flatten? Thanks!

doh! I hate when I save just a gh file forgetting to internalise the geometry inputs.

The input is supposed to be a set of polylines in 2 directions, crossing at their control points and forming the grid. If you have a mesh, you can extract these 2 sets of curves using the WarpWeft component and joining.
Here’s a new file with input internalised this time (here I just took the flattened result from the other definition): (19.7 KB)


Any tips on generating grids of smooth, continuous principal curvature curves on minimal surfaces? Was playing around with millipede to generate some curves but they seem to usually be discontinuous/jagged.

As far as I know, Kangaroo can’t generate “real” minimal surface (correct me if i am wrong Daniel!). Kiwi3D on the other hand is possible. You can take a look at the following component Bowerbird that marks the principal curves on a given point for you ( With or without minimal surface, it is, however, still very hard to generate something with even and smooth principal curves. But since Bowerbird allows you to specify your point of interest, you can project an array of points onto the surface then manually adjust them bit by bit to reach an evenly spaced principal curves network.

Thank you Daniel for the explanation. Will get back to you if I manage to find some other methods!

1 Like

Kangaroo can generate real minimal surfaces!
You just have to use the SoapFilm goal instead of Length goals on the mesh edges. This properly weights the edges by the area to give discrete minimal surfaces, like described in the classic reference by Pinkall and Polthier.
There’s an example file here:

Also if you want your soap film to be able to undergo very large deformations, then you can even use the LiveSoap component, which modifies the mesh connectivity as it relaxes to maintain good triangle quality:

As for principal curvatures, another quite different way to go about generating minimal surfaces is to make isothermic quad meshes from Koebe polyhedra, so that the grid directions already follow the principal curvatures:


My sincere apology! Definitely will look into the Soapfilm component! Thanks Daniel!

Thanks Daniel. Super helpful

Dear Greg,
Did you read this thread?

Eike Schling and David Rutten et. al. are providing scripts to generate Asymptotic and PC Lines.
One can use the bisecting quality of both to get close to a nice network layout.
The PDF shows the principle. I tried to automate grid generation, however I still run into inaccuracies regarding intersections…

AsymptoticGrid_NetworkPrinciple.pdf (489.5 KB)

Kind regards,

1 Like

Thanks Marilies, these are super useful scripts.

The inaccuracies are quite a challenge to work with indeed.

If the discrete asymptotic network is what you are ultimately after, I imagine it would be better to generate this more directly, instead of trying to make a triangulated mesh or continuous surface then numerically trace curves across that (which does seem prone to inaccuracies).

With the discrete minimal isothermic surfaces from Koebe polyhedra as linked in my last post, if you connect the incircle centres to the corners of the quad grid (which follows the principal curvatures), then you get appears to be the discrete asymptotic grid with planar vertex stars you are after:

I suspect there’s also a simpler way possible where you would optimise directly for the planar (or spherical) vertex stars without going via the Koebe polyhedron.

1 Like

Actually just keeping the vertex star planar with a coplanar goal seems to work really well.

I tried lofting strips through lines normal* to the surface, and they unroll nicely to straight strips without any area change.

*(not using the default normal, but with a custom normal perpendicular to the plane defined by the vertex star)

At some point I’ll add something to this to get the strips out automatically (14.6 KB)

1 Like

This is great, thank you.

Dear Daniel,
You are absolutely right regarding curve tracing and inaccuracies.
I did some tests with regular koebe polyhedra that turned out great!

Now, I am wondering, as designing with regular Polyhedra and transforming them to Discrete Minimal Surfaces is not super intuitive, if it was possible to set up a workflow as follows:

  • Designing continous Minimal Surface
  • Create Gaussian Image
  • initializing Mesh to be optimized (E.g. Mesh Plane)
  • Optimize Mesh towards Edge Tangency , SlideOff (Unit SPhere as reference geometry) and Isothermic Goal and using Grab in order to push the mesh to fit the Gaussian image of the Minimal surface as good as possible…

I tried to implement this setup, however I did not manage to find the right strengths so that the vertices “grabbed” to their “right” position are anchored there and the mesh tended to collapse at a certain point. I am also not sure on how to find the right initialisation mesh.

Another option beyond using Gaussian Sphere would be a futher stereographic projection to the plane and using that one as refernce surface for mesh optimization.

Attached there is a script with a “simple” Minimal Surface (that won´t lead to Singularities) internalised and further processing to its Gaussian Spherical image and stereographic projection to the plane.

Any input to setting this up would be highly appreciated!

Mara (573.6 KB)

Hi Marilies,

at the moment I also try to go from a Koebe Polyhedra to a discrete minimal surface.
As you I am struggling a bit with the workflow. I saw your fantastic thesis(congrats!) and you seem to have found a way. Would you mind to share some hints on the tactic you used?
Thanks a lot!
Gruß Baris

Dear Baris,
Sorry- I totally missed your post! I used Christoffel Transformation shown in Pottmanns “Architectural Geometry”- “Optimal Discrete Surfaces” and Stefan Sechelmann Thesis . The principle is illustrated very nicely here: Koebe polyhedra and minimal surfaces - YouTube . My code is maybe not very elegant, but basically works… Please let me know if you think I have some scripts that might help! And thank you for the nice feedback regarding my thesis! Kind regards und viele Grüße, Marilies

1 Like