Trying to figure out how best to make this complicated surface, need some help

Hello all, brand new user to this site, but I have a year or two of experience in using Grasshopper.

I am an architecture student working as part of a group researching a material that was developed some 10 years ago with a physics professor at a local university. I want to create a grasshopper model of its functionality to mimic the way it works in real life but I am unsure how to do it.

So into it: The material starts as a flat, euclidean surface. The material can be manufactured as any flat shape you choose, as well as in a range of thicknesses. Whats special about it is the material is “programmable” - you can decide ahead of time while you are making it, to have specific parts of the material be able to react (expand or contract) to stimuli and change. So in other words you can design, for example, certain areas on the surface to expand and others to contract when they interact with a certain chemical or radiation. Ill draw a sketch of what I mean below.

Material (Before/After):

So as you can see in this (basic) drawing, the material starts as a Euclidean, rectangular surface, but we have programmed the center area of the material to expand on stimuli. As a result, after the stimuli is given, what we will see is that the material will try to expand, encounter material around it that wants to stay in its current situation and a pressure will form between the two regions. Because of this, the material will either start to bulge upwards or downwards since that is the direction of least resistance. Additionally, we tend to see the rest of the material “buckle” after a change like this, note the edges of the rectangle warp, as a result of the internal stresses of the material, even though they were designed to not contract or expand. Ultimately the material we have after stimuli is non-euclidean. For the sake of context, in real life you can design the material to expand, contract or stay unchanged in any number of regions, to any degree you want (this is a non binary change), in what ever configuration you want.

What I want to do is create a model that can do this. I think perhaps Kangaroo could be good for this application, but I honestly have limited experience with it. Ill explain what I think is the best way to make such a model below with a picture, but please feel free to suggest other directions.

My Idea: I think the best way to envision the behavior of the model is to “zoom in” and imagine the building blocks of the material like cells of a living thing or atoms in a solid. So in other words, something like the picture below, a sort of grid of points arranged in 2d. Between each point and its closest neighbors is a spring. This spring is the programmable portion of the material. After stimuli, the spring (lets say it starts at X length) will want to either expand or contract (to anywhere between 1.5X to 0.5X). The object of the model is to set a basic shape (rectangle, circle, whatever), decide which regions of it will have springs that want to expand and which regions will contract and then run a simulation of it to see what resulting shape we get. We ultimately want to have a final shape in mind for a specific space then design the correct flat shape that will be able to morph into the shape we wanted.

Model:

The drawing above is a little crude, but the idea to keep in mind is that the number of “cells” or “atoms” in the final product should likely be in the thousands. The interaction between each due the contraction/expansion of the “springs” between them is complicated - and Im not sure where to start.

Ill include two 3d scans I have of the real life material, and the way it interacts with stimuli. These two models highlight the way the material behaves as a product of its thickness . In real life, the material is obviously 3 dimensional though its flat like a sheet of paper. This thickness is the last part of the puzzle - and I am not sure the best way to incorporate this attribute into the final model with grasshopper. Below is the material at 0.1 mm thickness, and afterwards a separate trial at 0.25 mm. Note both started exactly the same, they start as disks of the same size, and they both have similarly designed regions set to expand and contract. The thickness of the material lends a sort of rigidity that prevents buckling and warping. Also note in both, the edges of the material are “wavy” as a result of the stretching of the material. You can achieve similar results at home if you take a piece of a plastic bag and tear it in half, the material will stretch in the center and along the new edges where it tore, you will get this wave pattern.

0.1mm:

0.25mm:

Please ask me anything if you didn’t understand any part of this - I can upload more images of the material to explain things if needed too.

Thank you in advance for your help!

Interesting challenge.

Can you program it to discontinue itself, in a way form a hole?

Yeah quite the challenge. Not so sure where to start to be honest.

Not from any samples I have seen. It can’t expand in such a way as to tear itself apart or to separate from itself and form a planned opening. That is not to say it wouldn’t be interesting to make it able to do this with grasshopper on a digital model, just in real life it doesn’t have the ability to make holes within itself.

I think this could be interesting to explore, but Id like to try to get the existing material modeled as is first, then try to see what kinds of new things the physics professor that invented this didn’t yet think to do. He is basically interested in it from a physics standpoint (euclidean → non-euclidean surfaces) and my group is examining it from an architectural standpoint. A hole is interesting to me, but for the physics professor I think it was less so, so there’s not been research into it. Part of the interest for him is tracking of geodesic lines from given points on the surface and how they change after the material morphs. Holes in the material tend to mess this up.

Another interesting topic would be Joining and Splitting, that would solve the Hole issue, instead of it discontinuing to form a hole, instead two of the edges could merge.

I read an article about programmable materials years ago. Never really had time to go deeper, I have an idea of a solution in Grasshopper, I’ll test it when I go back home, as I don’t work with Rhino at work.

Buckling of expanding surfaces is a really interesting topic, and one that is studied a lot in biology.
I’ve looked at this in a number of different ways before with Kangaroo.
Here’s one way of treating a surface with an increasing area towards the boundary forcing it to buckle into a hyperbolic surface:

I’ve also looked at buckling induced by negative pressure while keeping area constant:




or increasing area of a skin while keeping it wrapped onto a shape:

4 Likes

You can also approach this by simulating multiple layers laminated together, with different rates of expansion causing curvature: Simulating Hygroscopic Behaviour Wood


and for something a bit closer to your question,
here’s a go at giving a mesh of a disc larger edge lengths within a circular region in the center.
expandinglocal.gh (54.5 KB)

To get it closer to the behaviour of your scanned tests, it would be helpful to know more about the behaviour-

Does the expanding region expand more or less evenly throughout its thickness?

Is the expanding region defined by a hard border, or is it more of a gradual fall-off?

Does the outer part of the material also expand in some way?
The wavy border suggests to me that the part near the perimeter is also expanding relative to the rest of the material.

Is the material restrained or clamped in any way during this process?

1 Like

Here’s a slightly improved version, and showing the effect of expanding vs contracting the central region, or changing its size
expandinglocal2.gh (51.6 KB)

3 Likes

Absolutely would be interesting, I think this subject is really perfect for grasshopper since making the material do this in real life would be difficult. A succession of digital models could be really useful. I would be thrilled to see your idea for it when you’re ready.

Hey Daniel,

Let me just say: Holy crap! Extremely impressive stuff. I really liked the first video, it demonstrates precisely the sort of buckling we have in the real life model at the edges. You are absolutely right about the biology studies influence as well. The original publication for this material references the edges of leaves and shows this exact sort of anatomy. I would love to see the .gh files for these (if sharing them is alright with you of course) as well as the raisin/bunny, I think I could learn a lot by studying how they work. Part of the issue I didn’t know how to do was allowing the surface to expand/contract, without overlapping itself, which you seem to be able to do perfectly here.

Just to respond more precisely to your previous posts ill quote you:

You can also approach this by simulating multiple layers laminated together, with different rates of expansion causing curvature: Simulating Hygroscopic Behaviour Wood

Thank you for this. Another area of interest to us is actually the lamination of two different fabrics together. Using a stretchy material and a rigid one, you can achieve interesting 3D shapes that can be smushed down to a near flat shape. I will check this out.

To get it closer to the behaviour of your scanned tests, it would be helpful to know more about the behaviour-

Does the expanding region expand more or less evenly throughout its thickness?

From my understanding, yes - though I may have to confirm with the professor since I am not an expert on the actual material. It could be interesting to model it when perhaps the upper portion of the material expands, while the lower stays rigid. I think you could get some interesting morphology this way. The previously mentioned laminated fabrics kind of work like this.

Is the expanding region defined by a hard border, or is it more of a gradual fall-off?

This is an excellent question that I would have to refer to the professor for, and return to you with an exact answer since it really has to do with the fabrication stage of the material - which our architecture team wasn’t part. I believe it can be either a hard edge or a gradual fall-off, and that the manufacture of the material is controlled. For the purposes of grasshopper both ways are of interest to us for different architectural applications.

Does the outer part of the material also expand in some way?
The wavy border suggests to me that the part near the perimeter is also expanding relative to the rest of the material.
Is the material restrained or clamped in any way during this process?

Yes, exactly. It is allowed to expand just as the rest of the material does. In the experiments, the material generally floats in a saline solution. It could be restrained in various ways, which could product interesting results, but all the ones I have seen are able to morph basically freely.

In solution, I would imagine the material experiences some forces from buoyancy. It is essentially the same mass as water and tends get waterlogged and float just under the surface. In this way gravity is essentially not interfering to my understanding. I imagine once the material is applied to an architectural setting there will be new forces to deal with, such as gravity, wind, radiation, etc., but for now it is basically weightless in a lab environment.

Last thing on this topic, there are newer studies the professor is conduction introducing the lacing of rigid material (such as a fabric) through the starter material. Last I was at the lab, I held one of these studies as it transformed from its euclidean form to non-euclidean. If you squeeze the form you can resist the warping behavior, once you release it, it does jump into the warped form it was trying to change to. This is to say, you can restrain the material, but it “remembers” the shape it wants to go to, and once its released it will transform normally. There seems to be no lasting “damage” to the final form as a result of interference and release during its transformation.

Here’s a slightly improved version, and showing the effect of expanding vs contracting the central region, or changing its size
expandinglocal2.gh (51.6 KB)

I just have to say, Bravo. That is really great. It looks just like the 0.25mm trial! I did try opening the file, and I wasn’t so successful myself though. I got an error message that reads: “Plugin version 0.9.0076” and “Archive file written with newer version 1.0.0007”. So I guess Ill need to update mine first. I also didn’t quite understand how to manipulate it as you did in the video. Playing with the sliders the mesh distorts, but stay perfectly 2D, rather than buckling into the Z axis as yours does. I also can’t take hold of the model in the Rhino viewport with my mouse as you seem to be doing here (as well as the “Hygroscopic Wood Behaviour” script). How is that done?
The last error I encountered on my end is the “grab” node has nothing connected to it, and it isnt functioning (red wire going out to 0,0 in entwine). Perhaps I did something wrong?

That’s fine, you can just dismiss the message - I saved it when I was in Rhino 6, but it works in Rhino 5 too.

In the real world, a shrinking planar surface like this always buckles out of plane due to asymmetry and imperfections. In the computer though, if everything starts at Z=0, and all the forces are acting in plane, it doesn’t buckle, but just compresses as you are seeing.
In the video I used the ‘grab’ component to give it a little nudge out of plane to start off the buckling.
To use the grab you hold down the Alt key and drag points in Rhino with the left mouse button. When it isn’t active the wire from it shows orange.

That’s fine, you can just dismiss the message - I saved it when I was in Rhino 6, but it works in Rhino 5 too.
In the real world, a shrinking planar surface like this always buckles out of plane due to asymmetry and imperfections. In the computer though, if everything starts at Z=0, and all the forces are acting in plane, it doesn’t buckle, but just compresses as you are seeing.
In the video I used the ‘grab’ component to give it a little nudge out of plane to start off the buckling.
To use the grab you hold down the Alt key and drag points in Rhino with the left mouse button. When it isn’t active the wire from it shows orange.

Thanks :slight_smile: The way the mesh moves until it finds equilibrium is really on point and quite beautiful.

I’ve started by taking a look at how to possibly make a multitude of regions contract/expand using your definition.

Couple things I was interested in incorporating:

  1. In your definition the mesh can, under some circumstance overlap/cross into itself which obviously can’t happen in real life. It seems your work with the raisin definition has this problem solved, and I was wondering for a way to incorporate it into this one.

  2. Any ideas on how to create areas of gradual contraction/expansion rather than a hard boundary?