Panelizing a Double-Curved Facade Without Lying: Developability Tests, Flatness Tolerance, and the 2 mm Deviation Budget Between Grasshopper and the Shop

The 2 mm budget is a contract, not a wish

On a double-curved facade, the distance between the Grasshopper definition and the shop drawing is measured in millimeters. If you set a 2 mm deviation budget, you are not describing an aspiration. You are defining the maximum allowed difference between the intended surface and the fabricated panel, measured in a way both sides agree on. That number has to survive unrolling, nesting, cutting, forming, and installation.

Failures in panelized facades are often caused by a tolerance that was never defined, or was defined differently by the designer and the fabricator. A panel that is 1.8 mm off the true surface at mid-span is acceptable under one measurement method and rejected under another. The fix is procedural: define the metric, test developability before you commit to a panel size, and carry the tolerance through every file exchange.

What developability actually means for a panel

A developable surface can be flattened onto a plane without stretching or compressing the material. In Rhino, the UnrollSrf command handles developable surfaces and reports whether the surface can be unrolled without distortion. The Rhino feature documentation lists “unroll developable surfaces” and “flatten developable surfaces” as native tools, and it also lists Squish under transform tools for surfaces that are not developable. That distinction matters: UnrollSrf is a geometric operation with a binary outcome for true developables, while Squish is a best-fit flattening that introduces strain.

For a double-curved facade, almost no panel is truly developable unless you are panelizing with single-curved strips or ruled surfaces. The practical question is not “is it developable?” but “how much strain does the flattening introduce, and can the material absorb it?”

Three tests to run before you fix panel size

1. Gaussian curvature check. Use Rhino’s curvature analysis or a Grasshopper component that samples Gaussian curvature across each panel. A panel with near-zero Gaussian curvature everywhere is close to developable. A panel with high Gaussian curvature will require significant forming or will need to be subdivided. The Rhino analysis tools include Gaussian curvature and mean curvature display modes, which you can use to screen panels before unrolling.

2. Unroll and measure edge length change. Unroll the panel with UnrollSrf or Squish, then compare the perimeter of the flat boundary to the perimeter of the 3D boundary. The difference, divided by the original perimeter, gives you a strain percentage. For a 2 mm deviation budget on a 1.5 m panel, a 0.13% strain is the rough equivalent if the deviation is distributed across the panel. That is a tight number for most cladding materials. If your strain is higher, you need smaller panels or a different material.

3. Chord deviation at mid-span. This is the metric most fabricators actually measure. Take the flat panel and the intended curved surface. Find the maximum distance between the flat panel and the surface at the panel’s mid-span, measured normal to the surface. That is your chord deviation. If your budget is 2 mm, this number must be under 2 mm before you release the panel to the shop.

How Grasshopper reports deviation, and what it does not

Grasshopper itself does not have a built-in “developability report” component. The core Grasshopper installation in Rhino 8 includes data types and geometry components, but the developability and strain analysis typically comes from addons or custom scripts. Grasshopper Docs lists 182 addons with over 10,000 components, including categories for CAD and manufacturing, panels, and structural analysis. That breadth is useful, but it also means there is no single standard for how deviation is reported.

In practice, you have three options:

  • Use Rhino’s native tools and bake results. Unroll with UnrollSrf or Squish, then use PointDeviation to measure the distance between the flat panel and the original surface. Rhino 8’s PointDeviation tool supports SubDs and shows red numbers when invalid distances are entered, which helps catch unit errors. This is the most transparent method because the measurement is visible in the model.
  • Write a custom Grasshopper definition. Sample the surface at a grid of points, flatten the panel, sample the flat panel at the same parameter locations, and compute the normal distance. This gives you a deviation map you can color-code. The risk is that your sampling density determines what you see. A 10×10 grid on a 1.5 m panel samples every 150 mm, which can miss a local deviation peak.
  • Use a third-party addon. Several Grasshopper addons include panelization and flattening tools. Check what metric they output. Some report strain, some report edge length change, some report nothing and just give you a flat outline. If the addon does not report a deviation number, you cannot verify your 2 mm budget with it.

The gap in most workflows is not the flattening itself. It is the lack of a documented deviation number attached to each panel. If your Grasshopper definition outputs a flat panel but not a deviation value, you are relying on the shop to discover the problem.

File exchange: where tolerance metadata goes to die

Your 2 mm budget has to travel with the geometry. In most exchanges, it does not.

STEP. STEP is a solid model exchange format. It carries geometry and some product structure, but it does not have a standard field for “maximum allowed deviation from intended surface.” You can embed tolerance in the file name or in a separate document, but the STEP file itself will not enforce it. If you send a STEP file to a fabricator, the tolerance lives in the email, not the model.

IFC. IFC is a data schema for the built environment, published as ISO 16739. The latest official version is IFC 4.3.2.0, also published as ISO 16739-1:2024. IFC 4.3 contains over 1,300 entities and approximately 2,500 properties organized in over 750 property sets. That is a lot of room for metadata, but there is no universal property set for panel flatness tolerance. You can create a custom property set, but the receiving software has to read it. buildingSMART provides an IFC Validation Service and publishes scorecards on software IFC performance, which tells you that not all tools handle IFC equally. If your fabricator’s software does not read custom property sets, your tolerance is invisible.

DWG. DWG is a drawing format. It can carry dimensions and annotations, but it is not a tolerance-aware format for 3D deviation. A flat pattern in DWG with a note saying “max deviation 2 mm” is a human-readable instruction, not a machine-readable constraint.

STL and 3MF. STL is a mesh format with no units and no tolerance metadata. 3MF is more structured and can carry units and some metadata, but it is still a mesh format. If you export a flat panel as STL for CNC, the tolerance is not in the file. If you export as 3MF, you have a better chance of carrying units, but you still need a separate specification for deviation.

The practical conclusion: no standard exchange format will carry your 2 mm budget automatically. You need a tolerance specification document that travels with the geometry, and you need to verify that the receiving shop has read it. The file format is not the contract. The contract is the contract.

What the shop can actually hold

The achievable tolerance depends on the process, the material, and the stock thickness. These are not vendor claims. They are physical limits that show up in the first article.

CNC routing and milling

A 3-axis CNC router like a ShopBot can hold flatness on a flat panel to within the flatness of the spoilboard and the material. If you are cutting a flat panel from a flat sheet, the deviation from flat is mostly the material’s own warpage. A 6 mm aluminum composite panel will not be perfectly flat over 1.5 m. A 3 mm aluminum sheet will be flatter but more prone to oil-canning. The machine’s contribution to deviation is usually smaller than the material’s.

For a curved panel, you are either forming the material or cutting a mold. A Haas or Tormach mill can cut a mold with high accuracy, but the mold cost is per panel shape. If every panel is unique, the mold cost dominates. If you can group panels into a few families, the mold cost amortizes.

Laser cutting

Laser cutting is a 2D process. It cuts flat stock. The flatness of the cut part is the flatness of the stock. If you are cutting a flat pattern that will be bent or formed, the laser’s kerf and the material’s residual stress determine the final deviation. For thin sheet, laser cutting is fast and accurate in-plane, but it does not help with out-of-plane deviation.

FDM printing

FDM printing is rarely used for facade panels at full scale, but it is used for mockups and connection details. The achievable flatness on an FDM printer is limited by bed adhesion and thermal shrinkage. A 200 mm test panel might deviate 0.5 mm or more depending on material and orientation. That is not a facade tolerance. It is a mockup tolerance.

Stock thickness and deviation

Thicker stock resists deviation but weighs more and costs more. A 3 mm aluminum panel will deflect more under its own weight and under wind load than a 6 mm panel. If your 2 mm budget is measured in the installed condition, you have to account for deflection. If it is measured in the shop before installation, you have a different number. Define the measurement condition.

A practical procedure for a 2 mm budget

Here is a sequence that works for a panelized double-curved facade where the budget is 2 mm chord deviation at mid-span, measured in the shop before installation.

  1. Define the metric in writing. “Chord deviation at mid-span” means the maximum distance between the flat panel and the intended surface, measured normal to the surface at the panel’s center. Write it down. Put it in the panel schedule.
  2. Screen panels for Gaussian curvature. Use Rhino’s curvature analysis or a Grasshopper definition to flag panels with high Gaussian curvature. Those are the panels that will need forming or subdivision.
  3. Unroll and measure strain. For each panel, unroll with UnrollSrf if developable, or Squish if not. Compare edge lengths. If strain exceeds your material’s allowable strain, subdivide the panel or change the material.
  4. Measure chord deviation. Use PointDeviation or a custom Grasshopper definition to measure the maximum normal distance between the flat panel and the 3D surface. If it exceeds 2 mm, iterate on panel size or subdivision.
  5. Attach the deviation value to the panel. In Grasshopper, use UserText or a similar mechanism to attach the deviation value to the panel geometry. Rhino 8’s Grasshopper includes UserText components for adding, modifying, or removing user text from Rhino objects. That metadata can travel with the geometry if the exchange format supports it.
  6. Export with a tolerance specification. Do not rely on the file format to carry the tolerance. Export the geometry and a separate tolerance specification that lists each panel ID and its allowed deviation. If you are using IFC, create a custom property set and verify that the receiving software reads it.
  7. First article inspection. Before full production, have the shop fabricate one panel and measure it. If the measured deviation is within 2 mm, the process is capable. If not, adjust the process or the budget. Do not assume the process is capable because the machine specification says so.

Documenting the standard across a firm

In a firm of 5 to 500 people, the tolerance standard has to live somewhere that everyone can find it. A PDF in a project folder is not enough. The standard should be in the template, in the Grasshopper definition, and in the exchange checklist.

For Revit, the panel schedule can include a tolerance column. For Rhino and Grasshopper, the definition can output a deviation report as a CSV or a text file. For Dynamo, the script can read the panel schedule and flag panels that exceed the budget. For Navisworks, the clash detection can include a tolerance check if you model the flat panel and the intended surface as separate objects.

The goal is not to automate the decision. The goal is to make the deviation visible before the shop discovers it. A 2 mm budget is only real if someone measures it.

FAQ

Can I use Squish for a panel that is not developable?

Yes, but Squish introduces strain. The Rhino documentation lists Squish as a transform tool for surfaces. It is a best-fit flattening, not a true unroll. You have to measure the resulting deviation and decide whether the material can absorb it. For a 2 mm budget, Squish is usually only acceptable for panels with very low curvature.

Does IFC carry tolerance metadata?

IFC 4.3 has over 750 property sets, but there is no universal property set for panel flatness tolerance. You can create a custom property set, but the receiving software has to read it. buildingSMART provides an IFC Validation Service and publishes scorecards on software IFC performance, which can help you choose tools that handle custom properties.

What is the difference between chord deviation and strain?

Chord deviation is a distance in millimeters between the flat panel and the intended surface. Strain is a percentage change in length. They are related but not the same. A panel can have low strain and high chord deviation if the curvature is concentrated in one area. Measure both.

How do I know if my CNC can hold 2 mm?

Do a first article. Cut one panel and measure it. The machine’s specification is not the same as the process capability. Material warpage, fixture rigidity, and tool deflection all affect the result. A 2 mm budget on a 1.5 m panel is achievable on a good CNC router with a flat fixture, but it is not guaranteed by the machine alone.

What if the fabricator refuses a 2 mm budget?

Then you have a negotiation. Either you increase the budget, change the panel size, change the material, or change the fabricator. A 2 mm budget on a double-curved facade is tight. It is achievable for some materials and panel sizes, but not all. Get the fabricator involved before you fix the panel size.

Sources