Sun Between Towers

Computational Design2025

Sun Between Towers

Project Overview

Client
UC Berkeley - Arch 249, Computational Design
Role
Computational Designer
Year
2025
Timeline
Final Project
Type
Parametric Urban Daylight Study
Tools
Rhino + Grasshopper + Ladybug Tools + Python (pandas / matplotlib)

A parametric study of how urban density shapes ground-plane daylight - 60 tower configurations, an annual sun simulation on each, and a finding that density wins across every seed.

Sun Between Towers asks how much daylight reaches the public ground between buildings - the difference between a usable park and a permanently shaded plaza. A 4x4 cell grid generator places towers from two inputs: a seed (1-20) that controls which cells get a tower and how tall each one is, and a density_sweep (0.4 / 0.6 / 0.8) that controls how many cells are occupied. Each of the 60 (seed, density) combinations runs through a Ladybug Direct Sun Hours simulation over the Oakland TMY3 weather file, producing two scores per iteration: avg sun hours on the ground plane, and the percentage of ground points above a usable-daylight threshold. How do you quantify the daylight cost of urban density on public ground space - and is layout cleverness enough to offset it?

Iterations
60
Density levels
3
Sun hours, 0.4→0.8
-38%
Well-lit, 0.4→0.8
-46%

Phase 01

Parametric generator

Brief

A Grasshopper definition places towers in a 4x4 cell grid from two inputs — seed (which cells, what heights) and density_sweep (how many cells), with plot_fill fixed at 0.51.

Grasshopper generator - seed + density_sweep feed the random component that places towers

Phase 02

Annual sun simulation

Brief

Ladybug Direct Sun Hours runs against the Oakland TMY3 weather file, computing per-point ground sun hours over a full year for every iteration.

Ladybug Direct Sun Hours - annual simulation driven by the Oakland EPW

Phase 03

60-iteration sweep

Brief

Colibri iterates all 60 (seed, density) combinations and an Aggregator writes a CSV row and a PNG image per run.

Sweep samples

Colibri iterator + aggregator - cycles every (seed, density) combo, writes CSV and PNG per iteration
Density sweep, fixed seed 10 - d=0.4, 3108 h, 89% well-lit
Sparse (d=0.4, seed 1) - 2651 h, 82% well-lit
Dense (d=0.8, seed 1) - 1555 h, 33% well-lit

Phase 04

Analysis + plots

Brief

Python (pandas + matplotlib) clusters the sweep, draws the performance landscape, and renders the 60-configuration sorted grid.

60 urban block configurations, sorted by daylight performance - sparse / medium / dense
Performance landscape - avg sun hours vs. % well-lit, clustered by density
Density is the dominant driver - both metrics drop sharply from 0.4 to 0.8

Across all 20 sparse plans, every single one beats every single dense plan. The worst sparse layout (2271 h) still beats the best dense one (2150 h). Layout helps within a density band - it does not escape it. For a designer optimizing for public sunlight, the real question is not which arrangement to pick, but whether you can afford to build less.

Credits

Computational Designer
Yanik Wickremasinghe
Course
UC Berkeley Arch 249 - Prof. Ramon Weber
Tooling
Ladybug Tools, TT Toolbox / Colibri, Oakland TMY3 EPW