Minimal surfaces

Hello everyone,

I was exploring minimal surfaces and I was wondering if with grasshopper would be possible to create a knotted one?

1 Like

Yes you can definitely do this in Grasshopper. There are probably a lot of ways to do so. I don’t know that it’s an easy task for someone with out any experience.

Here are a couple spots on this forum & the grasshopper3d forum that may have some info towards what you want to do but not applied in the same manner.

I think maybe your image is not of a minimal surface. It looks more to me like some boolean subtraction of interlinked tori. Looks like perhaps the work of Keizo Ushio.

Hi Ryan thanks for your answer! I tried to read the posts you shared and apart the one that talks about scripting in C#, what I understood is that the shape could be generated also by using the bridging technique cause it’s not sure if the shape is a real minimal surface. Am I wrong?

I agree with @DanielPiker, and he is very knowledgeable with Grasshopper and of course Pufferfish.
I’m really a beginner at Grasshopper but I would think one method would be to create a sphere out of meshes, then bridge some faces and relax or change tension to give the tunneling effect you’re looking for.
Honestly though I wouldn’t know what steps to do or what order to create the proper effect.

Hi Daniel thanks for your answer too!

Maybe we were wrong and that is a real minimal surface… I found this artist making those complex shape similar to the one I uploaded before. He explain his work saying that all the shapes are generated by minimal surface.

Here is the link:

I will check the link of the software he use to make this and I hope I can make it on rhino. What do you think?

Ah, I found the artist - your original image is of a piece by Nat Friedman, and indeed it is apparently from a minimal surface. There are some nice writings on his work if you search.
I’ll have a go later at setting up something in Kangaroo that replicates this shape.


That page links to software called Surface Evolver which generates the shapes.

Surface Evolver is great, and was a big inspiration to me when developing Kangaroo, but it’s very old and far from user friendly - you interact only via command line.

The ‘live soap’ goal I added recently finds minimal surfaces and adjusts the mesh constantly to allow even large changes to the boundary curves:


I will look forward to not being able to open your forthcoming R6 Kangaroo file and trying to do it in R5 K2 :smile:

1 Like

I was taking a look at the soap film component and it is just a great tool! But I’m far away to simulate the shape of the pice of art by Nat Friedman…

I knew that with kangaroo there are different ways to find the minimal surface. I usually simply used the springs component to make it if I’m not wrong. Is it that possible? It was almost one year ago when I was tring it. The 2 method reach the same result?

Yes, you can still simply use length goals/springs for the mesh edges. The result won’t be strictly a minimal surface. If your input mesh is good, with similar density all over, and the relaxed shape isn’t too far from the input shape, the result can be close to minimal. For other cases it can give something far from minimal. Still, for many applications this non minimal mesh is fine - it will usually be smooth, and can work as a tension structure.
If you want an actual minimal surface though, this soap component is the one to use.

1 Like

You might also find this of interest:

1 Like

Dumb question:

How is the soap film component different from setting the Mesh Edges components lengths to a factor of 0?

There are 2 challenges with this original image…

  1. Creating the initial mesh
  2. Making the surface minimal

I’m stuck on #1 :frowning:

Not a dumb question at all.

Setting zero target edge lengths puts all the tension in 1d elements, and the force for each edge only depends on its current length. Unless the mesh is made up of identical equilateral faces (which it never is once the relaxation runs, even if it starts that way), that means the tension is no longer equal in strength across the area of the surface.

For example, if you have a mesh of long skinny triangles, its resistance to stretching will be higher in the direction the triangles are elongated in, because the 1d elements are more bunched together in that direction. Or if you triangulate a square grid, the direction of triangulation can introduce a bias in the behaviour.

To find a true minimal surface (with zero mean curvature), you need equal tension in all directions at all points of the mesh.
The soap film elements are properly area based, so even when the edges are not evenly distributed, the tension in all directions stays the same.
For example, here an anisotropic starting mesh, and below on the left the result of zero target length edges, and on the right with soap film triangles:

This is one of the classic papers on using triangle areas to find minimal surfaces.


But is the starting mesh on the original image a totally different issue or is the image the result of a minimal surface of a straightforward starting mesh?

Sorry I’m not following which images you are referring to

The very first image in the post of the granite carving

Ah, okay I see.
It’s true that making a starting mesh isn’t always easy, however you are going to relax it.
One advantage of the relaxation with remeshing though, is that as long as your starting mesh has the right topology, it doesn’t matter too much the quality of the triangles, they won’t distort the result.

Anyway, perhaps this discussion is diverging a bit, so to get back to the original topic of this sculpture-
This page by the same artist gives some clues. It doesn’t cover this stone piece specifically, but some relevant ideas are covered:

According to the description of the piece here:
‘The form is based on the shape of the soap film minimal surface on a configuration of a wire trefoil knot’

Figure 8b in the first link shows a Seifert surface that looks similar to the piece we are talking about. It’s a trefoil knot, but arranged so that instead of the usual 3 leaf arrangement, it has 2-fold rotational symmetry.

To make a starting mesh for a Seifert surface, we can draw a polyline of the knot, then fill in the areas in plan with faces, which turn vertical wherever the curve crosses itself:

Once we subdivide/remesh/relax this, we get something like this:

Which starts to look a little like the sculpture.

However… a minimal surface is something with zero thickness, and the sculpture doesn’t look like simply an offset of this. What’s more, if you try and trace the sharp edge of the sculpture around, it doesn’t actually look like it is knotted at all (which is why my initial thought was that it looked like some boolean operation on linked tori). So there is something else going on there…