top of page

Procedural
Landscape

4_iso.jpg
fall 2021 | coding for design | panagiotis michalatos

The landscape is designed wholly with C# inside Grasshopper. The code responds to input curves representing roads and rivers as well as meshes for buildings. Landscape height and river depth are functions of distance and the planting algorithm is based on elevation and mesh normal direction.

The script generates and manipulates points, vectors, lines, curves and meshes using if-else loops. Specifically, it focuses on extracting mesh faces based on conditions and translations of geometries.

topography

roads

roads

1_iso.jpg

z1 dominates

Base Topography

z0 = 10cos(0.1x)*sin(0.1y)

z1 = 0.3y


t = ((x+y)/2)^2

z = z0(1-t) + z1*t

z0 dominates

2080 FC.jpg

roads

water

building

partition
planting alg.
2_iso.jpg
2_top.jpg
road.jpg

Road Section

water.jpg

Road height determined by point on the input street curve. It does not fit exactly with the topography mesh but instead protrudes or cuts in.

River Section

Wider on north side. Depth controlled by distance from river endpoints.

3_iso.jpg
3_top.jpg

S

N

Mesh Partition

Topography mesh separated based face normal vectors. North facing meshes colored in light green, and south facing ones in dark green.

4_iso.jpg
4_top.jpg

Planting Algorithm

bushes + grass 

on north facing

meshes

increases

in size

and height

trees + grass 

on south facing

meshes

iterations

Iterations

different inputs and results

ViewCapture20220108_232515.jpg
ViewCapture20220108_230722.jpg

Desai Wang

bottom of page