How it works
The block heights come from a primitive-root sequence `g^h mod N` folded onto an X×Y grid (where X·Y = N−1 and X, Y are coprime) using the Chinese-Remainder-Theorem mapping. Because every height is unique, the specular lobe is suppressed on both axes — the 2-D analogue of what a PRD does in one axis.
Skylines are popular because they are visually striking and machine-friendly: each block is a simple rectangular prism, easy to CNC or stack from sheet stock.
Worked example: N = 7, g = 3 at 500 Hz
N = 7 gives N−1 = 6 = 2·3, so the array is X = 2 rows by Y = 3 columns — never square, by construction. The 1-D sequence `S_h = 3^h mod 7` for h = 1…6 is `3, 2, 6, 4, 5, 1`; CRT-folding it onto the 2×3 grid at cell `(h mod 2, h mod 3)` gives:
| row \ col | 0 | 1 | 2 |
|---|---|---|---|
| 0 | 1 | 4 | 2 |
| 1 | 6 | 3 | 5 |
At 500 Hz the per-block step is the same u ≈ 49.03 mm as a 1-D panel of this N, so the deepest block (value 6) is 6 × 49.03 ≈ 294.2 mm — identical to the PRD worked example at the same N, since it's built from the same 1-D sequence. Open this exact panel in the designer to see the 3-D preview and get the cut file.
Tiling a skyline without a repeating look
A single skyline module already breaks up reflections on both axes, but repeating one module across a wide wall reimposes a visible, and acoustic, repeat. Fresnelcut's fix is a companion module — every block height flipped to `(N−1) − h`, which shares the same footprint and depth range but has low similarity to the original — placed against the base module in a non-repeating pattern so neither the eye nor the reflection pattern locks onto a period.
Skyline vs. 2D QRD
Both scatter two axes; the visible difference is the grid shape (skyline's X×Y array is never square, a 2D QRD's N×N grid always is) and skyline additionally suppresses the straight-back reflection, the two-axis analogue of what a 1D PRD does in one axis.
Building it: block-by-block or one routed panel
There are two common ways to build a skyline. The first stacks or glues individual blocks cut from stock of each required thickness — more individual pieces, but every cut is a simple straight rip and no single sheet needs to be thicker than the deepest block. The second CNC-routes the whole height map into one solid panel — fewer pieces to align, but the blank has to be at least as thick as the tallest block everywhere, including under the shortest ones. Fresnelcut's cut list supports either approach; which one makes sense mostly comes down to what tools you have.
Mounting a skyline panel
A skyline is heavier than a comparable 1-D panel of the same footprint, since it's carrying depth across a full grid rather than a single row of wells — plan the wall mounting hardware (French cleat, mounting rail, or direct screw-through with washers) for the finished weight, not just the base panel's, especially at low design frequencies where the tallest blocks get substantial.
S_h = g^h mod N → grid cell (h mod X, h mod Y)CRT folding of the 1-D primitive-root sequence. N−1 = X·Y with gcd(X,Y)=1, so the array is never square.
Best for
- A statement wall that also treats reflections
- Two-axis scatter with the block-city aesthetic
Not the tool for
- Low-frequency control (use an absorber)
- The thinnest possible panel — tall blocks need depth
Start from a common size
N is the number of wells (a prime). More wells scatter more smoothly but make a wider, deeper panel. Pick one to open the designer pre-set: