3. 1. Computers in design
Columbia University GSAPP
ARCH A4845: Generative design
4. Origins of CAD - Steven Coons and the Computer-Aided Design Project at MIT (1959-1967)
1963
Columbia University GSAPP
ARCH A4845: Generative design
5. Origins of CAD - Ivan Sutherland and the Sketchpad system (1963)
Ivan Sutherland’s Sketchpad system is demonstrated on the console of the TX-2 at MIT (1963).
Columbia University GSAPP
ARCH A4845: Generative design
6. Origins of CAD - Ivan Sutherland and the Sketchpad system (1963)
Steps for drawing straight lines and circle arcs Manipulation of complex geometry
Columbia University GSAPP
ARCH A4845: Generative design
7. Origins of CAD - Ivan Sutherland and the Sketchpad system (1963)
Geometric relationships and constraints
Columbia University GSAPP
ARCH A4845: Generative design
8. Origins of CAD - Timothy E Johnson and Sketchpad III (1963)
Sketchpad III, a computer program for drawing in three dimensions.
Generalized space allocation program, showing plan view, two perspectives, and two constraints.
Columbia University GSAPP
ARCH A4845: Generative design
9. Origins of CAD - Lawrence Roberts
Compound object construction (1963) Camera transformation (1963)
Columbia University GSAPP
ARCH A4845: Generative design
10. Origins of CAD - Nicholas Negroponte and the Architecture Machine Group (1969)
SEEK (1969-70)URBAN 5 (1969)
Columbia University GSAPP
ARCH A4845: Generative design
11. Origins of CAD - Nicholas Negroponte and the Architecture Machine Group (1969)
Columbia University GSAPP
ARCH A4845: Generative design
12. “There are three possible ways of having machines assist the design
process:
1. Current procedures can be automated
2. Existing methods can be altered to fit within the specifications and
constitution of a machine
3. The process, considered as being evolutionary, can be introduced
to a mechanism (also considered as evolutionary), and a mutual
training, resilience and growth can be developed
NICHOLAS NEGROPONTE, TOWARDS A HUMANISM THROUGH MACHINES (1969)
Columbia University GSAPP
ARCH A4845: Generative design
13. 2. Design by algorithm
Columbia University GSAPP
ARCH A4845: Generative design
14. Victor Vasarely at work in 1948 Caopeo, 1964
Algorithms in art
Columbia University GSAPP
ARCH A4845: Generative design
15. Yoko Ono, Instruction Paintings, 1961
Algorithms in art
Columbia University GSAPP
ARCH A4845: Generative design
16. Sol Lewitt, Wall Drawing (1974)
Algorithms in art
Columbia University GSAPP
ARCH A4845: Generative design
17. Sol LeWitt, Wall Drawing #960 being executed at Site Gallery, Sheffield, 8 May 2010
Algorithms in art
Columbia University GSAPP
ARCH A4845: Generative design
18. Christopher Alexander, Notes on the Synthesis of Form (1964)
Algorithmic design
Columbia University GSAPP
ARCH A4845: Generative design
19. D’Arcy Wentworth Thompson, On Growth and Form (1917)
Morphogenesis in nature
Columbia University GSAPP
ARCH A4845: Generative design
20. Ernst Haeckel, Embryos (1870)
Morphogenesis in nature
Columbia University GSAPP
ARCH A4845: Generative design
21. Michael Hensel and Achim Menges (eds.) - AD Morphogenetic design series (2004, 2006, 2008, 2012)
Morphogenesis in design
Columbia University GSAPP
ARCH A4845: Generative design
22. Mark Burry, Sagrada Familia (1994)
Mark Burry, Architecture and Practical Design Computation. In
“Computational Design Thinking” (Achim Menges, Sean Alquist, ed.) 2011
Morphogenesis in design
Columbia University GSAPP
ARCH A4845: Generative design
23. Morphogenesis in design
Mark Burry, Sagrada Familia (1994)
Mark Burry, Architecture and Practical Design Computation. In
“Computational Design Thinking” (Achim Menges, Sean Alquist, ed.) 2011
Columbia University GSAPP
ARCH A4845: Generative design
25. 1. Variable
2. Conditional
3. Loop
4. Function
5. Object (Class)
5 elements of computation
Columbia University GSAPP
ARCH A4845: Generative design
26. 1. Variable
5 elements of computation
Columbia University GSAPP
ARCH A4845: Generative design
27. 1. Variable x = 1
y = ‘hello world’
myList = [1, ‘b’, 3]
myDict = {’a’: 1, ‘b’: 2}
2. Loop
5 elements of computation
Columbia University GSAPP
ARCH A4845: Generative design
28. 1. Variable x = 1
y = ‘hello world’
myList = [1, ‘b’, 3]
myDict = {’a’: 1, ‘b’: 2}
for i in range(10):
# do something 10 times
for element in myList:
# do something for all elements
2. Loop
3. Conditional
5 elements of computation
Columbia University GSAPP
ARCH A4845: Generative design
29. 1. Variable x = 1
y = ‘hello world’
myList = [1, ‘b’, 3]
myDict = {’a’: 1, ‘b’: 2}
for i in range(10):
# do something 10 times
for element in myList:
# do something for all elements
if x > 10 and y > 10:
# do something
elif x > 5 or y < 5:
# do something else
else:
# do something else
2. Loop
3. Conditional
4. Function
5 elements of computation
Columbia University GSAPP
ARCH A4845: Generative design
30. 1. Variable x = 1
y = ‘hello world’
myList = [1, ‘b’, 3]
myDict = {’a’: 1, ‘b’: 2}
for i in range(10):
# do something 10 times
for element in myList:
# do something for all elements
if x > 10 and y > 10:
# do something
elif x > 5 or y < 5:
# do something else
else:
# do something else
def myFunction(input1, intput2):
# do something
return output
c = myFunction(a, b)
2. Loop
3. Conditional
4. Function
5. Object
“encapsulation”
5 elements of computation
Columbia University GSAPP
ARCH A4845: Generative design
31. 1. Data-mapping (Grasshopper)
2. Procedural (scripting)
3. Object-oriented (OOP)
Types of programming
Columbia University GSAPP
ARCH A4845: Generative design
32. GH - single variable
Columbia University GSAPP
ARCH A4845: Generative design
GH Node
(“function”)
inputs outputs
33. GH system
Columbia University GSAPP
ARCH A4845: Generative design
Variable
geometry from Rhino
Variable
data in Grasshopper
Function
transform
geometry
Function
create
data type
“data flow”
34. GH system
Columbia University GSAPP
ARCH A4845: Generative design
Function
transform
geometry
Function
create
geometry
Function
create
data type
35. GH system
Columbia University GSAPP
ARCH A4845: Generative design
Function
transform
geometry
Function
create
geometry
Function
calculate
data
Function
create
data type
display data
37. GH - multi-data streams
Columbia University GSAPP
ARCH A4845: Generative design
Function
create list
of numbers
single data
multi-data
38. GH - multi-data streams
Columbia University GSAPP
ARCH A4845: Generative design
Inherent loop
(executes once on
each piece of data)
39. GH - multi-data streams
Columbia University GSAPP
ARCH A4845: Generative design
Conditional
(creates “pattern” of
True/False booleans)
Conditional
(separates data based
on pattern)
40. GH - multi-data streams
Columbia University GSAPP
ARCH A4845: Generative design
41. GH - data trees
Mode Lab - Grasshopper Primer V3.3 [http://grasshopperprimer.com/]
Columbia University GSAPP
ARCH A4845: Generative design
42. GH - data mapping - one to one
Columbia University GSAPP
ARCH A4845: Generative design
43. GH - data mapping - one to many
Columbia University GSAPP
ARCH A4845: Generative design
44. GH - data mapping - many to many (flat list)
Columbia University GSAPP
ARCH A4845: Generative design
45. GH - data mapping - many to many (flat list)
Columbia University GSAPP
ARCH A4845: Generative design
46. GH - data mapping - many to many (data tree)
Columbia University GSAPP
ARCH A4845: Generative design
47. Limitations of Grasshopper
1. Hard to deal with variables having data structures beyond a 1-d flat list
2. Can’t make arbitrary loops (only data mapping)
3. Complex conditionals get messy because each one requires separate conditional and
dispatch nodes
4. Can’t create custom functions
5. No support for classes or object-oriented programming
Columbia University GSAPP
ARCH A4845: Generative design
49. What is a programming language?
HARDWARE
PROGRAMMING
LANGUAGE
USER
INTERFACE
SOFTWARE
Columbia University GSAPP
ARCH A4845: Generative design
50. Elements of computer programming
1. Variable x = 1
y = ‘hello world’
myList = [1, ‘b’, 3]
myDict = {’a’: 1, ‘b’: 2}
Columbia University GSAPP
ARCH A4845: Generative design
51. Elements of computer programming
1. Variable x = 1
y = ‘hello world’
myList = [1, ‘b’, 3]
myDict = {’a’: 1, ‘b’: 2}
for i in range(10):
# do something 10 times
for element in myList:
# do something for all elements
2. Loop
Columbia University GSAPP
ARCH A4845: Generative design
52. Elements of computer programming
1. Variable x = 1
y = ‘hello world’
myList = [1, ‘b’, 3]
myDict = {’a’: 1, ‘b’: 2}
for i in range(10):
# do something 10 times
for element in myList:
# do something for all elements
2. Loop
3. Conditional if x > 10 and y > 10:
# do something
elif x > 5 or y < 5:
# do something else
else:
# do something else
Columbia University GSAPP
ARCH A4845: Generative design
53. Elements of computer programming
1. Variable x = 1
y = ‘hello world’
myList = [1, ‘b’, 3]
myDict = {’a’: 1, ‘b’: 2}
for i in range(10):
# do something 10 times
for element in myList:
# do something for all elements
if x > 10 and y > 10:
# do something
elif x > 5 or y < 5:
# do something else
else:
# do something else
def myFunction(input1, input2):
# do something
return output
c = myFunction(a, b)
2. Loop
3. Conditional
4. Function
Columbia University GSAPP
ARCH A4845: Generative design
54. Elements of computer programming
1. Variable x = 1
y = ‘hello world’
myList = [1, ‘b’, 3]
myDict = {’a’: 1, ‘b’: 2}
for i in range(10):
# do something 10 times
for element in myList:
# do something for all elements
if x > 10 and y > 10:
# do something
elif x > 5 or y < 5:
# do something else
else:
# do something else
class MyClass:
def __init__(self, input1):
self.localVar = input1
def myMethod(self, input2):
# do something
return output
classInstance = MyClass(a)
c = classInstance.myMethod(b)
2. Loop
3. Conditional
4. Function
5. Object
def myFunction(input1, intput2):
# do something
return output
c = myFunction(a, b)
“encapsulation”
Columbia University GSAPP
ARCH A4845: Generative design
55. Elements of computer programming
1. Variable x = 1
y = ‘hello world’
myList = [1, ‘b’, 3]
myDict = {’a’: 1, ‘b’: 2}
for i in range(10):
# do something 10 times
for element in myList:
# do something for all elements
if x > 10 and y > 10:
# do something
elif x > 5 or y < 5:
# do something else
else:
# do something else
2. Loop
3. Conditional
4. Function
5. Object class MyClass:
def __init__(self, input1):
self.localVar = input1
def myMethod(self, input2):
# do something
return output
classInstance = MyClass(a)
c = classInstance.myMethod(b)
def myFunction(input1, intput2):
# do something
return output
c = myFunction(a, b)
Columbia University GSAPP
ARCH A4845: Generative design
57. Control types
1) Morphological
AdvantageDisavantage
2) State-change 3) Rule-based 4) Behavioral
• good top-down control over
design
• can create discontinous
design spaces
• control over individual
elemenst
• L-system, shape grammers,
1d CA (single-state)
• object-oriented, agent-based
behavior models (dynamic)
• continuous measures • choices, categories
• reduced number of inputs
(abstraction of inputs into
rule sets)
• can create complexity
• reduced number of inputs
(abstraction of inputs into
agent behaviors)
• can lead to emergence
• only top-down control
• can’t control individual
behavior
• can’t create emergence
• potentially redundant or
incomplete design space
• little intuitive control over
macro design
• potentially redundant or
incomplete design space
• can usually only generate
simple and design spaces
• many inputs (each element
needs to be controlled
seperately)
Columbia University GSAPP
ARCH A4845: Generative design