Procedural Lookout Tower
The director had not settled the design, and the camera angles were still moving. So I sent a generator instead of a tower.

Why a generator
The episode needed several lookout towers and nobody had decided how tall, how thick the beams or how big the cabin — those calls depended on how each camera angle read.
Rebuilding the model every review round costs modelling time and the notes conflict from shot to shot. Two Geometry Nodes modifiers with exposed parameters let the team lock a structure per shot themselves.
One idea, repeated
Nearly everything is a 2×2 grid turned into a closed curve and swept along a path, so beam sections are just the grid size. Placement comes from two grids: one at footprint size for the corner legs, one at √(0.5·size²) rotated 45° that lands on the midpoints for the inner uprights.
The X bracing is four vertices and a modulo: Index % 1.5 splits them into two diagonal pairs, each pair is raised by the section height, and joining both makes every edge a crossing diagonal. Stacking is a switch per copy driven by one integer, and a 2×2×2 lattice flares the legs.

The cabin
The cabin is a second tree, 244 nodes, and almost everything in it derives from one input — Floor Size. The floor is a Mesh Line with Count = Floor Size / plank width, one swept plank per point; the joists, the rim and the handrail come off the same grid. The railing is that grid turned into a curve and resampled to a baluster count. The walls are a second grid inset by Inner Cabin Scale, converted to edges and swept as vertical planks, with the glazing a cube extruded and inset so only the inner faces take the glass material. The roof is a grid extruded by Roof Drop and scaled at the top, then Distribute Points on Faces drops shingles aligned to the face normal with random scale and a small Z jitter, so no two tiles sit flush. The one place two objects talk to each other is the hatch: Object Info reads the ladder Empty and booleans the hole out of the floor, so moving the ladder moves the hole.


Texturing procedural geometry
There are no hand-made UVs when the mesh changes on every slider move. Each profile stores its own UV, the spline parameter along the sweep is captured, and per-element values — plank index, per-beam random, per-tile position — are captured before realizing the instances.
Those leave the modifier as output attributes and the wood materials read them with Attribute nodes, so every plank and beam samples a different part of the same texture.

Next steps
- Stacking is seven copy-pasted switches with a hard cap of 8 sections; a Mesh Line with Count = Amount does the same in three nodes.
- The cabin, ladder and lattice are separate objects placed by hand — the tower top height should drive them.
- UVs use the spline Factor, so texel density stretches with the section height. Length would keep it constant.