Live Soap Film

Hi all,

Does anyone know anything about how to replicate the behavior shown in Daniel Piker’s video ‘Live Soap Film’ Live soap film on Vimeo ?

I’ve searched through the forums but can’t find an example of the live component in use, plus I imagine there might be some tricks in the generator of the mesh from the curves which I can’t quite understand.

Thanks for any help or advice!


Here’s one example: Tensile surface from curves:
I was thinking I’d posted more, but maybe not, thanks for reminding me - I’ll share some other examples soon


Here’s a better one - more like what is shown in the video (26.6 KB)
It includes an option to turn on volume preservation for CMC surfaces, plastic drag and bending for the boundaries, and a few different starting meshes to choose from.

Note that although the vertices can redistribute, the total number of vertices stays fixed, and also the number of points on each boundary. So while the starting mesh doesn’t need to be a great mesh, the ratio of boundary points to internal points should be reasonable.
Also, the number of boundaries and the genus (number of ‘handles’) of the mesh stay the same. I’m working on an update though that will also allow genus change.

One thing to watch out for - I’ve realised there’s a bug with the grab goal where occasionally it will cause an error if the simulation is reset and the last grabbed point had an index higher than the number of points in the new simulation - if this happens you can work around it by selecting the grab component,and using Ctrl-X,Ctrl-V to cut it then paste it back in, which works to reset its index.


Daniel, could you please internalise the meshes?


My mistake. I updated the file above now with the meshes internalised



Thank you for the amazing plug-in! My students have fun semester after semester with Kangaroo 2. Regarding the Live Soap Film and the definition that you shared, I’m having some difficulty getting meshes that I created to work with your definition. Attached is a Rhino file with an open ended Box Mesh. I’ve racked my brain trying to figure out why it won’t work. Any advice that you can give would be greatly appreciated.Livesoap_Issue.3dm (71.7 KB)


Glad to hear they’re having fun.
Which definition are you using that mesh with?

If I plug it as an input into the last definition I posted above ( it works.
The ends are too far apart to form a catenoid, so it splits into 2 disks, but if you pull them together it can reconnect.


Thank you for the quick response! You found the issue. The ends were too far apart.
Thank you again for looking into this. It is greatly appreciated. My students and I thank you. If you’re interested here is a link to a recent tutorial I made for my students using Kangaroo 2.


1 Like

Hi Daniel!

My apologies for not thanking you sooner! This is a really cool definition.

I only had one question. You referred to working on an update where you are able to change the genus or ‘handles’. I’m not too sure what these are exactly, if they’re not the boundaries? In this updated scenario the topology would still have to maintain the starting mesh?

Thanks again, we’re getting really close to be able to prototype this sort of thing in Kangaroo!


1 Like

Indeed - those Frei Otto experiments were a big inspiration

About the genus changes -
In the current version there is no way to start from a simple disk and deform it into something like this…

…even though this still has only one simple loop as its boundary. This is because it has a topological ‘handle’. Note that handles are different from holes here (holes are closed boundary curves).
I plan to release next a version where both holes and handles can be created and destroyed interactively. (Handles can sort of be destroyed already - if you stretch a tunnel too far it will collapse into a single thread,

but they never really go away, and if you bring the sides back together you can often get them to open back up again)


Ah I see what you mean by handle now, thanks for the explanation.

May I ask where this updated version sits on your list of priorities? I imagine you have quite a few things on the go, so I was just wondering whether this might be a few months away or so?

We’re currently looking at how these types of forms could be prototyped digitally and then integrated into a fabrication process. So super keen to help out any way we can we the development.

Daniel Piker, I downloaded the formula you posted, but it looks like this. What’s wrong?

Hi @zfq947254420
There was a bug in an old version of the rod component, but it was fixed several service releases ago.
Which version are you running? This will probably be fixed by updating Rhino.

Hi @DanielPiker, am I correctly assuming that SoapFilm does not work with large input meshes (large, as in big dimensions). I change the mesh in your original example to be roughly 3000 mm in length. The mesh collapses onto itself.

My goal is to make CMC surfaces with a bbx of up to 5 x 5 x 5 m.


02 (19.6 KB)

Your file works fine at that scale without the volume constraint - just one of the tunnels collapses leaving a single saddle (the same happens with real soap).

I see the volume constraint does depend on the units though. I can look at changing this, but easiest way for now is just to use a different scale for the form-finding - the shape will be the same.

1 Like

Hi Daniel, thanks for getting back. The collapsing tunnel was what I was wondering about and I understand how it is correctly resembling a real soap film. Is there another way to optimize towards CMC, with larger sizes, while preventing that tunnel from collapsing? Eventually achieving the same result, as if one would optimize the smaller scale version of your example and scale it up afterwards?

If not with Kangaroo, any input about papers describing methods to achieve discrete CMC would help. I found some information here, but only for meshes with non-triangular faces: On Discrete Constant Mean Curvature Surfaces | SpringerLink.
Bobenko also seems to have something on the topic, but I could not access the book yet: Discrete Differential Geometry. Integrable Structure

Just turn on the volume option to find CMC surfaces like this: (19.6 KB)

You can then change the volume to change the relative size of the tunnels.

Hi Daniel, thanks for all the answers. I am having a hard time getting the examples to work on other geometric inputs - even simple catenoid configurations (please see image below) with reasonable dimensions of a 40 mm radius (numeric value and real world). I tried LiveSoap and SoapFilm with TangentialSmooth.

LiveSoap (15.7 KB): The tunnel collapses with volume false. With volume true, no result is computed. I tried many different values. I am wondering how the volume parameter works. Is there a paper describing the method you implemented?

SoapFilm w. TS (14.8 KB): Starts well but never converges and ends with a collapsing mesh. Also the strength values between SoapFilm and TS are quite disproportionate to avoid a fast collaps.

Thanks! S

1 Like

What is the ratio you are using for the separation between the circles to their radius?

No stable minimal surface solution exists when this is above ~0.663, so collapsing is the correct behaviour. (That is to say, you can’t have long thin catenoids)

1 Like

The below example is at radius/distance = 40/50 = 0.8.

If the mesh resolution is increased, collapse can be prevented. Still getting folded triangles though:

Everything above is done with