A canopy that dips into a funnel over a single column, cut by vertical planes in three directions 60° apart. Each cut becomes a deep timber rib. Shift one family of planes by half a spacing and the triangular grid turns into a kagome weave of triangles and hexagons, the pattern of Shigeru Ban’s woven timber roof for the Centre Pompidou-Metz.
Reference: choose on the canvas toolbar to load the finished definition.
Build it
The canopy
-
Place eight sliders: Half-span: 20 (10 – 35), Grid: 24 (10 – 40) with Decimals
0, Column height: 4 (1 – 12), Funnel depth: 12 (2 – 25), Ripple: 1.5 (0 – 4), Spacing: 3 (1.5 – 6), Shift: 0.5 (0 – 1) and Rib depth: 0.8 (0.2 – 2), the last four with Decimals2. -
Place a Multiplication (Maths), Half-span ×
-1, and two Range (Maths) components, x and y, from it to Half-span with Grid → N. -
Place an Expression (Maths), r²,
x*x + y*y, with x → x and y → y, with Graft on y: one branch per row of the grid. -
Place an Expression, Funnel shape,
z + y*x/(x + 12), with r², Funnel depth and Column height: exactly Column height at the centre, rising towards Column height + Funnel depth at the rim. Place another, Ripple shape,z*sin(x/5)cos(y/5), with x, y (grafted) and *Ripple, and an Addition (Maths) of the two. -
Place a Construct Point (Vector) with x, y (grafted) and the Addition, an Addition, Grid +
1, and a Surface From Points (Surface), Canopy, with Flatten on P and the row length → U.
Three families of cuts
-
Place a Series (Sets), Family, with C
3, a Multiplication by60, and two Expression components,cos(radians(x))andsin(radians(x)), into a Vector XYZ (Vector): the normals of three families of vertical planes. -
Place three Expression components: Levels each side
ceil(1.42*x/y)(Half-span, Spacing), First offset-x*y(levels, Spacing) and Level count2*x + 1, and a Series with them and Spacing: plane offsets covering the canopy’s diagonal. -
Place an Expression, Family shift,
x*y*z, with Family, Shift and Spacing, and an Addition of the offsets and the shift, with Graft on the shift: one list of offsets per family. -
Place a Contour (Curve), Contours, with the canopy, the normals (Graft on N) and the offsets.
Ribs and column
-
Place a Divide Curve (Curve) with N
40and an Interpolate (Curve), Rib lines: smooth curves through the contours. -
Place a Multiplication, Rib depth ×
-1, a Vector XYZ with it as Z, and an Extrude (Surface), Ribs, of the rib lines: a deep ribbon under each line. -
Place a Cylinder (Surface), Column, with R
1.2and Column height as its length: the funnel’s lowest point rests on its top. -
Turn Preview off on the points, Contours, Divide Curve and Rib lines.
What is happening
Each family of planes is square to one of three directions 60° apart, so the rib lines seen from above form three sets of parallel lines. The offsets of family f are moved by f × Shift × Spacing. Three lines, one from each family, meet in a single point only when the first and third family’s offsets minus the second’s add up to zero. With Shift 0 that happens at every crossing, giving a triangular grid with three rib lines through each node. With Shift 0.5 it never happens: only two rib lines cross at any node, and the cells become triangles round hexagons. That is the kagome pattern, and it is easier to build because no node has to join three ribs.
The geometry tests check that every rib lies in its plane, that each family’s planes sit where the shift puts them, that the rib lines lie on the canopy (within the 0.05 % contour tolerance) and that the funnel rests on the column. The grid-shell updates in about a second (about 0.9 s to solve, most of it tracing the contours, and 0.3 s to draw).
Things to try
-
Set Shift to 0 for a triangular grid, and back to 0.5 for the kagome weave.
-
Set Spacing to 2 for a dense lattice, or 5 for an open one.
-
Set Funnel depth to 4 for a gently dished roof, or 25 for a deep funnel.
-
Set Ripple to 0 for a smooth, rotationally symmetric funnel.