Minimal surfaces

First of all great work!

About the continuity. I don’t think its feasible to align surface with higher continuity just by appling “goals” to it. Matching (multiple) surface can result in a state where there is simply no solution. The layout of surfaces is extremely important to ensure G1+ continuity on multiple edges. When working in the Automotive design, we usually tried to find a surface layout which made it possible to match. The other way around does not work, you cannot ensure higher continuity on an arbitary set of surfaces. Of course you can move points closer to the edge, but this is essentially not leading to good overall look, because a second constraint is the overall flow of contuinity (no waves etc)

Thats by the way the greatest drawback of sub-d surfaces. It forces to use an (internal) surface layout which makes it really difficult to build in details, like transitions from sharp to smooth areas of a model. Yet its an extremely useful compromise. Since you are able to work with the surfaces further down the pipe!

So for something productive (which is not “just” an 3d print) I would always apply some sort of extra step in trying to get at least a sub-d surface model out of it. Of course somebody could try to apply relaxation on sub-d’s, which somehow is what a sub-d already does? So I’m not sure if the outcome will be much different…


Why not? if an energy accurately models the difference from G2 continuity where the patches join, and we minimize that energy. I’m talking about the situation where none of the surfaces are fixed, except at some external boundary (and they are all untrimmed). We could combine it with some other fairness and spacing targets to avoid waves etc.

There are constraints on the shape of the external boundary which allow finding a continuous surface, but provided these are met and you are free to move all the other control points as much as needed, what arrangements of patches around an interior vertex would prevent a G2 matching?

Now actually deriving this energy in a useful form isn’t easy, but I don’t see any reason why it isn’t theoretically possible.

As for relaxation of SubDs - subdivision results in smoothing, but it is a very different smoothing to what you get from relaxation.
For example, this simple elbow of 3 cubes. from left to right - SubD without relaxation, SubD with cage edges relaxed, subdivided then relaxed as a fine mesh.

What I’m wondering about is an energy for moving the points of the coarse cage such that it gives a shape more like the last one, but without needing to actually move around all the points of a finely subdivided mesh.


Really nice work.

1 Like

I mean you can enforce g1 and even close to g2 to almost any situation. XNurbs and similar tools shows that its possible to match up arbitary patches in a visually satisfying manner. Still the outcome is often not a very nice surface, resulting in issues when working further with such surfaces (such as offseting)

Of course if such a goal generates a situations where matching is easy then its likely to work. But it may require not to move the affected cps in normal direction but also in u v direction and the boundaries as well.

Very good conditions for matching surfaces is having the same or similar surface properties of all surface involved and that edge- and centerisolines having g1 continunity to its counterpart on the other surface. This however requires to move even the edges. It is also beneficial if cps are equally distributed and showing a smooth overall flow. And a very ‘rectangular’ of ‘fan-like’ surface boundary helps as well.

In Rhino 7 McNeel finally introduced a deviation analysis, which basically creates needle lines on the edges to evaluate the continuity of two surfaces. This is extremely useful, because it shows that continuity can be very different along an edge. Even slightest unsmoothness, can cause great local discontinuities.
With such an analysis you can even manually match a surface, pushing it under a certain tolerance. Something I have done very often when modelling professional, especially on corner fillets. I think if you try to manually match a surface to g1 you can clearly see, that its not just pushing points up and down. You further will notice that the iso alignment is extremely important, and not having that makes it extremly difficult, even impossible to match. You can further check how well Rhinos (and any other CAD’s) ‘Match’ command actually works if the conditions are bad.

The same Rhino can do now is shown here using Icem:

1 Like

@DanielPiker Thanks for mentioning us! You can use Kiwi!3d for formfinding while preserving your initial NURBS discretization. I actually tried to formfind the Centre Pompidou Metz for my thesis. It worked quite well. Kiwi will try provide a minimal surface, i.e. the columns will reduce to a line. This can be prevented by using a high Young’s modulus. Then, you can choose an intermediate result inbetween your initial surface and the minimal one.



1 Like

Hi Daniel.

I’ve spent some quality time looking at your kind grasshopper routine and trying to adapt it specifically to what I am trying to accomplish. Given that I am still trying to dial in the milling process also, this complicates things. Could you explain a bit more why you include the following nodes in the routine?

Warp and weft

I’m attaching a grasshopper routine that is undoubtedly more involved than it needs to be. Please forgive any lack of clarity in the file. Of substance is the fact I can’t seem to generate the circular holes that you have. For the sake of a generating a good theoretical surface that can serve as a basis for the wood members I find myself wanting these circles. It undoubtedly has to do with the fact I have skipped this whole warp and weft thing due to the more involved nature of my basic mesh. Any advice on this front is appreciated.

Thank you again for your previous help.


Variation on Daniel’s (177.3 KB)

Hi Michael,

The separation into Warp and Weft is not always needed - just sometimes it can be useful as a way of controlling the shape. For this to work well though, you need an all quad mesh designed in a way that can be separated - like the red and blue lines in Anders’ post above.
(I see you also have the boundary option of the post-relaxation Weaverbird subdivision set to Fixed - switching this to smooth will give you smoother boundaries)

Your mesh is composed of a mix of triangles and rectangles. What is the reason you chose this arrangement of an orthogonal grid with holes cut out instead of the concentric/radial arrangement shown in the earlier posts?
It’s not necessarily a problem, depending how you want to use it, but for fabric structures it often makes sense to orient the mesh edges in a way that at least roughly corresponds to the way the fibres of the fabric will be oriented.

You talk about building this from wood though, so maybe this is all less relevant in this case.

One thing worth thinking about with these Shigeru Ban structures is that although at first glance they have a similar look to an actively bent timber gridshell, the construction technique is very different.
For a gridshell like Mannheim, the laths start out straight, connected with joints allowing rotation, and are bent into shape as the shell is erected. The design and calculation and erection procedure of these structures was complex, but the pieces themselves were relatively simple.
For structures like Shigeru Ban’s 9 bridges golf club, or Pompidou Metz though, the pieces were formed into very complex doubly curved shapes before being assembled. I believe the milling, lamination and screw arrangement for these pieces was all quite involved.

You could even separate the grid and structure from the form even more and just project and extrude vertically like the Metropol Parasol project.

1 Like

Hi Daniel.

Thank you so much for the thoughtful reply. Yes, you have correctly sensed my challenges.

I am trying to create a more orthogonal approach to constructing the woven wood structures like you see so ambitiously executed at the Pompidou Center. I am also trying to do this with most of the work done on the CNC table. I dream of milling all this with sufficient precision that running single bolts through the predrilled half-lap points will go together with very little wood work in the field.

I have been studying how plywood deforms when it receives a few precisely placed “slot” cuts. The idea is these cuts are made with a thin tapered bit, and the plywood is steamed and bent until these cuts close. I have machined a stainless steel steaming jig that will confine the steaming to a focused “strip” of the plywood surface. The jig steams both sides of the plywood along this fold line. It is a pretty involved process, but I’m hopeful the fruits of the labor will result in a rigorous methodology for consistently bending plywood (specifically Russian birch) in a single cylindrical “roll” through various angles and with various approximate radiuses. A single grid line will essentially be constructed of a couple of different cylindrical bends. This is important since the shape we are discussing has a gridline trajectory that is not purely cylindrical. The idea is to mill a single “grid line” flat on a table while planning for its future required distortion as it crosses other members and ultimately assumes the mesh shape. The grid line will need to be broken into several segments since my CNC table is only 8’. Hopefully, the redundancy of the mesh will minimize the problems associated with this relatively short segmentation.

Yes, your observation about the difficulty erecting these structures is a great point and -as far as I’m concerned - one of the biggest obstacles to seeing more of these made. The thing that seems to be most often missing is the required research linking the great geometric information that Rhino (and Kangaroo) can provide with the material performance data.

I love the Pompidou structure and how its inspiration coming from an Asian hat, as it does. But establishing an orthogonal language has its own compelling rationale despite its less isometric geometry. This brings me to a fairly subtle but important refinement I need to make to how the mesh you kindly shared with me behaves. I have attached a sketch that attempts to summarize my challenge. The way the smoothing worked in your last example, it wound up inscribing a fairly circular form inside an octagon where the grid pattern formed the column base. I need the mesh to superscribe this octagon. See sketch. Any help you might have in this regard is appreciated.

Thank you again for all your help thus far. Kangaroo is just great.



1 Like

Hi Daniel.

I’m taking a second look at this beautifully simple example and I’m wondering if the circle that appears to be generated from it at the base is a perfect circle. If so, the simplest way to produce a helpful starting mesh would be to compensate for the difference that exists between the octagon and the starting square by scaling the inner squares 1.082. See attached image. What do you think of this approach?

Thank you again for your help.


Thank you again for Kangaroo, and sharing your introductory thoughts about minimal surfaces in Grasshopper. So often seemingly innocent project inquiries turn out to be a journey into worlds unknown. To chase the dream of producing columns similar to Shigura Bans in Rhino, I’ve put together a couple helpful-but-flawed grasshopper routines (highly inspired by your examples). These routines produce developable ribbons out of compound curved surfaces (when I don’t encounter bugs). In any case, here are a few images to share the progress this far. Thanks again for your help.


Here is the piece in walnut - no machining, all hand work :slight_smile:

Of course yours looks much better


I think that looks amazing! And incredible that you have done it by hand!
They are as nice to hold as they are to look at!

Yes, you are correct. It gives a different feeling when held by hand. I am sure you know exactly what i mean.
I couldn’t make it through GH cause I just started learning it. However; I created the model in rhino (the hard way) and uploaded the 3D model into my phone. I used the model to figure out where to carve. lol
See snap shots of the model below


I wouldn’t have a clue how to do it in Rhino! And if I tried to shape it by hand it would not look as nice as that! I have to do a lot of sanding after CNC machining but that’s not too hard once the shape is right.

Add your image to the gallery post…

1 Like

Alex, would you share the model?

I created this shape in GH that is similar to the original shape in some aspects.
I’m at the start point of learning grasshopper by manipulating existing .gh files that I download from McNeel reference or some other places.
I made this shape by chance!

Of course, it is a 2D shape with a series of curves.

1 Like

I just did , I also attached a link to the video


Equal grid faces are possible with a careful study of the work of the mathematician Chebyshev. Only their implementation in the Grasshopper is completely incomprehensible. Unfortunately, I will not be able to translate the article Cut clothes without seams from the journal Science and Life

Dear and Almighty Daniel. Please teach me how to make videos like this. There is also this good program about the brain. Show me an easy way to make animation.