Reduce number of panel units for mapping double-curved surface

Hi folks,

I am doing an architectural project designing a tower (image 1). This tower has two double-curved facade, which unsurprisingly the client wants to map out using straight panels. For this requet, I used gh script to achieve by isotrim the double-curved srf, and project vertexes of each sub-srf onto one plane, so in this way, this double-curve srf is mapped out by straight panels. Afterwards i did some rotation of the panels as a design feature (image 2, model and script attached).

Then it comes another question-which i’m not sure how i should approach:)

  • there is too many type of straight panel, to be accurate, each panel mapping the surface is slightly different. In this case, if we want to build the curtain wall facade exactly as the model is, the cost would be super (high)!

There are some case studies where the units are generalized into smaller number of type, as showed in Image 3-5. For my case for instance i could ‘catogoraize’ the panels in say four types according to their curvature etc… I wonder could anyone share some insights about how to reduce the number of panel type in grasshopper?

Thanx a lot!


1 Like

Look at the various threads on mesh optimization, which will most likely done in Kangaroo.

Hi Rickson,

Thanks for ur reply! I searched on the forum and there are several similar post of mesh optimization. They are helpful, only they more aim to panelizing one mesh into controllable number of shapes, while my case the input might be the 3k+ panels ,and is about how to optimize them into a few shapes, with the whole mapping result still close to as it is now :slight_smile:

The illustration you are showing in the book I believe uses global gaussian curvature to determine what type of panels need to be placed in which location to stay close enough to the organizing surface. Some places can use multiple panels the same shape. While others areas with high gausean may need unique panels.

Another technique used is to find the panels that only need to be bent in one direction, many times that can be much cheaper to build. Then decide what percentage of panels have to be doubly curved.

A third technique involves laying out panels on the surface, the actually changing the surface slightly to reduce variation. Grasshopper can be setup to report the number of panels of each type as the shape is edited.

Have you taken a look at some of the pluggins?

Here is a paper on the gausean technique in detail:


@scottd He is referring to the project of
Morphosis Architects + ATLV this has been developed using Processing by Satoru Sugihara

Computationally generated components in Phare tower project.

The architectural design copyright belongs to Morphosis. Some images are courtesy of Morphosis. Computational design is performed by Satoru Sugihara when he belonged to Morphosis

Computationally generated components in Phare tower project.

Solar shading skin pattern studies.

Diagrid geometry optimization by tensile force simulation

Evolution of diagrid structure.

Interactive lighting study.

Solar optimization algorithm for Phare tower skin. Each panel seeks the highest solar angle at each building orientation and determine the panel angle around the diagonal fixture.

Enlarged solar optimization diagram. As a result of the optimization algorithm, each panel is optimized for different time in the summer solstice day. Some areas are optimized for the winter solstice day for differentiated patterning.

Rationalization diagram of glazing panels.

Unfolded color-coded glazing panels and panel counts after radial rationalization.

Solar shading skin unitization

Source: ATLV Project: Phare Tower Skin and Structure
Copyrights belong to their respective owners


So is height and width different for all panels? Or is it curvature that is tripping you up? Or is it once you rotate the panels they do not match at the edges?

I have seen curvature categorization done by setting a plane thru the 3 corner points. The measure how far off that plane the fourth corner point is from that plane.

Here is an old thread that addresses this issue too:

Or does this give you some hints?

Hi Scott,

Thanks for ur multiple reply! I find the ur ‘categorization’ link helpful for calculating GFA for massing study in concept design, and the youtube link good for pattern finding lol~

When u mentioned about ‘setting a plane thru 3 pts’, it’s similar to logic i used to panelize the doubly-curved srf into straight panels - 1. isotrim the big srf with certain numbers in U V; 2. for each panel, find the closest 3 pts forming a plane; 3. project the 4th pt on its plane forming new straight panels; 4. baking, and go have a beer to celebrate :wink:

After this rationalization i did some further schemes equally staggering/slanting/rotating to all panels as design options. The problem is that for all options have too many panels, althought they look really similar (see attached image, each level of panels have same width=floor line/U number, and all panels have different heights and angle).

I’m gonna try SkinDesign plugin first-to model a standard curtain wall unit and try to ‘apply’ it onto the doubly-curved srf see what happen :laughing: Just wonder, since the panels i got similar enough, is there a way in grasshopper to approximate them into controllable number of units, so the curtain wall modules could be contained :smile:

sorry image right behind

wow thanks BVR for the insights! The actual design of the building is much smarter than i thought lol
Reminds me of Woods Bagot’s South Australian Health and Medical Research:)

I am going to take a guess here. UV surface control is not great for panelization. It is easy, but not accurate for content widths. So I might also try panelingtools. It allows you to specify the width and/or specific height of a panel. Here is a thread on this: Equal Grid Across Surfaces

Hi Scott,

I opened ur gh file in this link about paneling tools, and my grasshopper shows as below: PT

I looked up on food4rhino, and once i installed the Paneling Tools Installer, it shows on my rhino interface, but not on grasshopper.

Also, i did test using paneling tools in rhino before-1. create paneling grid by srf domain number; 2. In Paneling from Grid choose planar quads. Then the result generates 80% of the planar quad panels, but the ret 20% are holes…

Could u help me with this?


just got some clue about my own question lol
So planar panelization using Paneling Tools is a trade off-deviation value vs accuracy maintaining the original form. This is my undertanding so far…

I just got the result from another Paneling Tools test, although this time i set UV both as they are reality (way bigger than my first test), it generates all panels, only most of the panels are traingles, looking like loft got different directions lol

Before i use the doubly-curved srf to test, i dupborder and rebuilt two edges then loft, so the new srf gets smaller. Then i took the above 2 steps in PT and about 2hr here shows the results. Not sure how to improve my steps… If we could get all panels to be planar quads that would be fantastic!

Here is the root of the problem here is a mathematical limitation that makes a strict solution impossible.

Mathematically a solution that cannot do all of these all at the same time:

  1. Grid any double curved surface
  2. Have specific sized Quads
  3. All Quads that match corner to corner
  4. Require Quads that are planar

So to find a solution, one or more of these requirements needs to change. And there are many many ways that this can be done.

For instance, there are only a few specific shapes that can be gridded with the last 3 requirements above. If the shape is a section of a torus for instance. That is a known solution. There are other shapes, but they are limited.

Getting specific sized quads can be done. Using UV spacing to do this is a very poor way of getting this. Using a more flexible method of gridding will help here. Panelingtools can help here. Of course this may lead to issues as what to do with leftover space or grid panels that meet the edges with overlap etc…

Quads that meet corner to corner. This may or may not be a requirement. Many time the facade system does allow for some adjustment from panel to panel. That may be deep mullions. Or perhaps visual breaks in the horizontal segmentation. So one strip of panels is slightly offset to the next. Then only the horizontal strips need to solved.

How planar panels need to be? Can a mullion systems allow some floating of planar panels within them? Or if the corner panel is allowed to come off the surface just a bit? This effectively changes the shape locally to allow panels to be planar.

So, where can the solution have some level of tolerance or flexibility to get a solution that works? PanelingTools has construction tools to address each one of these issues. But understanding where there is some flexibility is important.

Can you attach the surface you are working on? Perhaps working on the same model might make this easier.

1 Like

Using Machine Learning is another interesting technique to. Proving ground with Lunchbox ML covers this at the the bottom of their page.

Most real things are pretty thought out and take a long time to develop. To that level no single simple gh definition will get you there. As you see a lot of analysis is involved. That is why I love this quote in the asking effective questions post.

Similarly, questions in the form of “ How do I quickly recreate this facade that took a team of skilled professionals four months to figure out? ” have a very low success rate.

You might also look into clustering algorithms like K-Means.

planarQuads_smooth.3dm (14.4 MB) (129.2 KB)

Hi Scott,

Thanks for summarizing my question so comprehensively! Sorry for the late reply.
The attach rhino file has the original doubly-curved srf and its panelization result using flat panels. Let me explain them accordingly:

. *Grid any double curved surface
well i guess the reason i isotrim the srf is just part of the logic of getting individual panels then flatten each of them (by projecting the 4th pt on plane the closest 3pts). So now the problem series was solved the first step-panelize the srf using straight panels.

. *All Quads that match corner to corner (allow me jumping to point 3:)
In the model, you can see although each panel is close to one another, they have about 6mm gap, so they do not match corner to corner strictly. This panelizing deviation distance I think could be absorbed by facade system.

. *Have specific sized Quads
This comes to the current problem-all panels have slightly different size due to equal division for different floor line and srf vertical segments. I was thinking is there a logic series, probably in gh, to input those panels and then categorize them into several number of shapes, for instance, like length between 119-121mm all equals to 120mm, and height between 359-362 all equals to 360mm. With this “categorization” for sure the panelizing deviation would be increased, maybe then it comes to trade off between smaller number of shape and smaller deviation.

*Require Quads that are planar
Now the panels are all planar, and the grasshopper file is also attached which shows the planar panelization logic mentioned above. And yes, “a mullion systems allow some floating of planar panels within them”, and “the corner panel is allowed to come off the surface just a bit”. I think any sort of local “deviation”
would be allowed as long as it could be covered within the mullion system, to this degree, we could say the overall panelization result only deviates from the original form in acceptable range.

Many Thanks!

It looks like you are making good progress in this. Working through each of these shape limitation is exactly the design process that needs to be done.

The specific size quad grouping here seems to be this biggest hang up?

One possibility is have a construction method that allows the panels to attach to the floors in way that is adjustable, allowing the panels to not exactly line up in the same spot. Use same size smaller panels from floor to floor that loose a few mm per floor. Then ratchet up to the next size to gain that loss back. Then it is an optimization problem. Limited number of panels distributed in a way that keeps the panels within a large tolerance of the floor to floor height. With interior floor and ceiling thickness that tolerance might be .5 meter? Trying and alternating pattern in the vertical or keep the sum of the built up “error” from floor to floor as you go up the building might inform the logic of what height panel to use in the next strip.

It seems this problem is getting few enough variables in it now that even Galapigos might help. But a simple sum of the offset might suffice.

Now the panels in the horizontal are a different question. Because the pattern is broken up in the vertical, the panels edges also might be able to change across the horizontal, just be a few mm. Seems height of the panels that need to use then selecting just a couple common widths and see what that looks like.

It is interesting here that the large organization of the panels based on the overall shape of the building. But then there are very specific requirements for limited common panel sizes. The optimization of both of the conflicting goals is what makes this such a good design problem, but also a problem that is not solved with balancing the two against each other.