MULTI-AGENT PARAgEN PAVILION
_INTRODUCTION 12 _RESEARCH 28 _DESIGN DEVELOPMENT 44 _PROPOSAL 04
04
INTRODUCTION
INTRODUCTION
The resulting design is the output generated through the implementation of non-linear processes, embracing the notions of undirected processes, propagated by John Frazer and Paul Coates in the early 1970s. This design proposal attempts to give birth to spatial phenomena that emerge qualities not evident in their description, thus the ethos of design methodologies promote the paradigmatic shift in science from the anatomical and problem-solving paradigm of ‘reductionism’ to the process based, associative and chaos driven paradigm of ‘complexity’. This shift has seen the re-definition of the architect, as what Coates refers to as system designer. “A person who can define spatial organisation and form as systems of feedback and morphogenesis cast in the form of instructions to a Turing machine”i. The process of design is aligned with the notion of research and exploration. Moreover the outcome is a design which is research lead, and the research which is design lead. The documentation which follows demonstrates a series of experimentations of ‘scripted’ simulations within MAYA, using the applications embedded scripting platform MEL Script.
i
Paul Coates, Programming.Architecture
INTRODUCTION
05
06
INTRODUCTION
“The role of the architect here, I think, is not so much to design a building or city as to catalyse them; to act that they may evolve.” Gordon Pask, An Evolutionary Architecture.
“We are inclined to think that this final transformation should be process-driven, and that one should code not the form but rather precise instructions for the formative process.” John Frazer, An Evolutionary Architecture.
“The highest possible stage in moral culture is when we recognise that we ought to control our thoughts” Charles Darwin, The Descent of Man.
INTRODUCTION
1
2
3
4
5
6
07
1. Nicholas Negroponte, SEEK project// 2. Biot(h)ing, exhibition at the Centre Pompidou in Paris// 3. John Frazer, The Universal Constructor// 4. Labdora, Ferral Ivy Pavilion// 5. Nicholas Pisca, GenoTower// 6. Rob Stuart-Smith, Behavioural Urbanism
08
INTRODUCTION
Context_Virtual Simulated Envrionment_
Western Elevation
Southern Elevation
INTRODUCTION
09
Axonometric
Model Credit: Graeme Mill // Renders: Patrick Drewello
_INTRODUCTION 12 _RESEARCH 28 _DESIGN DEVELOPMENT 44 _PROPOSAL 04
14
RESEARCH
Scripting Behaviors Test_ 1.0 Using a MEL script, a multi-agent behavior running iteratively was designed, based on simple local level rules of spatial proximity to neighbouring agents.
iteration_ 0001 agents_ 30 boundary_ 10*10 repel_level_ 3 random arrangement_ -10, 10
iteration_ 0001 agents_ 30 boundary_ 10*10 repel_level_ 3 random arrangement_ -10, 10
RESEARCH
iteration_ 0001 agents_ 30 boundary_ 10*10 repel_level_ 3 random arrangement_ -10, 10
iteration_ 0001 agents_ 30 boundary_ 10*10 repel_level_ 3 random arrangement_ -10, 10
15
16
RESEARCH
Scripting Behaviors Test_ 1.0_ MEL Script
//////////////////////////////////////////// //1st Loop: setup scene //Create polyspheres at randomXYZ within given range ($numbsetspheres x 10) $numbsetspheres = 0 for ($i=0;$i<$numbsetspheres;$i++) { for ($j=0;$j<10;$j++) { float $RandX = rand(1, 23); float $RandY = rand(1, 23); float $RandZ = rand(1, 23); polySphere -n “SH1”; scale -r 0.3 0.4 0.4; move -r $RandX $RandY $RandZ; currentTime $j; } } //Insert boundary $numbfloors = 1; for ($i=0;$i<$numbfloors;$i++) { polyCube -n “PC1”; scale 23 0.23 23; move 11.5 ($i*2.5) 11.5; currentTime $i; } //////////////////////////////////////////// //2nd loop: Bounding Box Loop: //What it does: creates a series of polycubes //polyCube -w 10 -d 10 -h 15 -n PB; //Insert cubes $numbcubes = 30; //Number of inserted cubes for ($i=0;$i<$numbcubes;$i++) { float $RandX = rand(1, 23); float $RandY = rand(1, 23); float $RandZ = rand(1, 23); polyCube -w 0.1 -d 0.1 -h 0.1 -n “PB”; scale $RandX $RandY $RandZ; move $RandX $RandY $RandZ; currentTime $i; }
RESEARCH
//////////////////////////////////////////// //3rd loop: Check Distance //What it does: checks distance between all boxes and moves away if needed string $box0 []= `ls -tr "PB*"`; string $box1 []= `ls -tr "PB*"`;
// list all boxes in array // list all boxes in array
for ($i=0;$i<10;$i++) { $q=0; for ($j=0;$j<100;$j++) { float $PD_coord1[] = `getAttr ($box0[$i] + ".center")`; float $PD_coord2[] = `getAttr ($box1[$j] + ".center")`; // print ($PD_coord1); // print ($PD_coord2); print ($PD_coord1[0]-$PD_coord2[0]); print ("\n"); print ($PD_coord1[1]-$PD_coord2[1]); print ("\n"); print ($PD_coord1[2]-$PD_coord2[2]); print ("\n"); float $x = $PD_coord1[0]-$PD_coord2[0]; float $y = $PD_coord1[1]-$PD_coord2[1]; float $z = $PD_coord1[2]-$PD_coord2[2]; if($x<1 || $y<1 || $z<1){ $q+=1; print ($q); } if($q!=3){ select ($box0[$j]); move 1 1 1; } // if($dis>3000){ // move 1 2 1 ($box0[$j]); // } currentTime $j; } }
//position axes //position axes
17
22
RESEARCH
Scripting Behaviors Test_ 2.0 The next script expanded the multi-agent behaviors, an additional species was added with differing rule sets to the previous species. Also time and quantity were extended.
iteration_ 0001 agents_ 500 boundary_ 20*20 repel_level_ -3, 3 attract_level_ 1, 3 random arrangement_ -20, 20
iteration_ 1453 agents_ 500 boundary_ 20*20 repel_level_ -3, 3 attract_level_ 1, 3 random arrangement_ -20, 20
RESEARCH
iteration_ 1799 agents_ 500 boundary_ 20*20 repel_level_ -3, 3 attract_level_ 1, 3 random arrangement_ -20, 20
iteration_2320 agents_ 500 boundary_ 20*20 repel_level_ -3, 3 attract_level_ 1, 3 random arrangement_ -20, 20
23
24
RESEARCH
Scripting Behaviors Test_ 2.0_ MEL Script //Author: Patrick Drewello 2010 //Manchester School of Architecture //loop to generate 2 types of species ///////////////////////////////////////////////// //stage: alpha_release currentTime 1; select -all; doDelete; //////////////////////////////////////////// //1st Loop: setup scene //Create locator/polyspheres at randomXYZ within given range ($numbsetspheres x 10) $numbsetspheres = 5; $tim = 0; for ($i=0;$i<$numbsetspheres;$i++) { for ($j=0;$j<10;$j++) { float $RandX = rand(-5, 5); float $RandY = rand(-5, 5); float $RandZ = rand(-5, 5); // polySphere -n “SH1”; spaceLocator -n”SH1”; scale -r 0.4 0.4 0.4; move -r $RandX $RandY $RandZ; $tim+=1; currentTime ($tim); } } //Insert floor planes $numbfloors = 1; for ($i=0;$i<$numbfloors;$i++) { polyCube -n “PC1”; scale 10 10 10; $tim+=1; currentTime ($tim); } //////////////////////////////////////////// //2nd loop: Bounding Box Loop: //What it does: creates a series of polycubes //polyCube -w 10 -d 10 -h 15 -n PB; //Insert cubes $numbcubes = 50; //Number of inserted cubes for ($i=0;$i<$numbcubes;$i++) { float $RandX = rand(-4, 4); float $RandY = rand(-4, 4); float $RandZ = rand(-4, 4); polyCube -w 0.1 -d 0.1 -h 0.1 -n “PB”; scale 10 10 10; move $RandX $RandY $RandZ; $tim+=1; currentTime ($tim); }
/////////////////////////////////////////////////// $tim=0; string $sphere []= `ls -tr “SH*”`; string $box []= `ls -tr “PB*”`;
// list all locators in array // list all boxes in array
for ($ii=0;$ii<1;$ii++){ for ($i=0;$i<size($box);$i++) { for ($j=0;$j<size($box);$j++) { $p=0; float $PD_coord1a[] = `getAttr ($box[$i] + “.center”)`; //position axes float $PD_coord2a[] = `getAttr ($box[$j] + “.center”)`; //position axes float $x = $PD_coord1a[0]-$PD_coord2a[0]; float $y = $PD_coord1a[1]-$PD_coord2a[1]; float $z = $PD_coord1a[2]-$PD_coord2a[2]; if($x<0){ $x=($x*-1); } if($y<0){ $y=($y*-1); } if($z<0){ $z=($z*-1); } if($x<1 || $y<1 || $z<1){ $p=1; print ($p); print “intersection_true_box”; print (“\n”); } if($p=0){ } if($p=1){
print “none”; print (“\n”);
float $RandX = rand(-2, 2); float $RandY = rand(-2, 2); float $RandZ = rand(-2, 2); select ($box[$j]); move -r $RandX $RandY $RandZ;
|| `getAttr ($box[$j] + “.translateX”)`>10){
if(`getAttr ($box[$j] + “.translateX”)`<(-10)
|| `getAttr ($box[$j] + “.translateY”)`>10){
if(`getAttr ($box[$j] + “.translateY”)`<(-10)
pointConstraint -o 0 0 0; move -r 5 0 0; }
pointConstraint -o 0 0 0;
RESEARCH
move -r 0 5 0; }
|| `getAttr ($box[$j] + “.translateZ”)`>10){
if(`getAttr ($box[$j] + “.translateZ”)`<(-10) pointConstraint -o 0 0 0; move -r 0 0 5; }
$tim+=1; currentTime ($tim); setKeyframe -t ($tim) ($box[$j]); } } } } ///////////////////////////////////////////// for ($ii=0;$ii<1;$ii++){ for ($i=0;$i<size($box);$i++) { for ($j=0;$j<size($sphere);$j++) { $q=0; float $PD_coord1[] = `getAttr ($box[$i] + “.center”)`; float $PD_coord2[] = `getAttr ($sphere[$j] + “.center”)`; float $x = $PD_coord1[0]-$PD_coord2[0]; float $y = $PD_coord1[1]-$PD_coord2[1]; float $z = $PD_coord1[2]-$PD_coord2[2]; if($x<0){ $x=($x*-1); } if($y<0){ $y=($y*-1); } if($z<0){ $z=($z*-1); } if($x<=1 || $y<=1 || $z<=1){ $q=1; print ($q); print “intersection_true_sphere_box”; } if($q=1){
select ($sphere[$j]); float $RandX2 = rand(-2, 2); float $RandY2 = rand(-2, 2); float $RandZ2 = rand(-2, 2);
move -r $RandX2 $RandY2 $RandZ2; if(`getAttr ($sphere[$j] + “.translateX”)`<(-10) || `getAttr ($sphere[$j] + “.translateX”)`>10){ pointConstraint -o 0 0 0; move -r 5 0 0;
25
}
if(`getAttr ($sphere[$j] + “.translateY”)`<(-10) || `getAttr ($sphere[$j] + “.translateY”)`>10){ pointConstraint -o 0 0 0; move -r 0 5 0; } if(`getAttr ($sphere[$j] + “.translateZ”)`<(-10) || `getAttr ($sphere[$j] + “.translateZ”)`>10){ pointConstraint -o 0 0 0; move -r 0 0 5; } $tim+=1; currentTime ($tim); setKeyframe -t ($tim) ($sphere[$j]); } } } } //////////////////////////////////////////// string $sphere []= `ls -tr “SH*”`; // list all locators in array string $box []= `ls -tr “PB*”`; // list all boxes in array for ($i=0;$i<size($sphere);$i++) { $amount = 0; for($j=0;$j<size($sphere);$j++){ float $PD_coord1b[] = `getAttr ($sphere[$i] + “.center”)`; //position axes float $PD_coord2b[] = `getAttr ($sphere[$j] + “.center”)`; //position axes float $x = $PD_coord1b[0]-$PD_coord2b[0]; float $y = $PD_coord1b[1]-$PD_coord2b[1]; float $z = $PD_coord1b[2]-$PD_coord2b[2]; if($x<0){ $x=($x*-1); } if($y<0){ $y=($y*-1); } if($z<0){ $z=($z*-1); } if($x<0.5 || $y<0.5 || $z<0.5){ if($amount <= 2){ print “drawing_line”; curve -p $PD_coord1b[0] $PD_coord1b[1] $PD_coord1b[2] -p $PD_coord2b[0] $PD_coord2b[1] $PD_coord2b[2] -n “LN”; $amount+=1; } } $tim+=1; currentTime ($tim); } }
_INTRODUCTION 12 _RESEARCH 28 _DESIGN DEVELOPMENT 44 _PROPOSAL 04
28
DESIGN DEVELOPMENT
Design_Synthesis_ The following diagrams illustrate the design development in a linear fashion, although the employment of these mechanisms upon the design ran concurrently.
Site Boundary
Volume Constraints
DESIGN DEVELOPMENT
Circulation Path
Volume Generation
29
30
DESIGN DEVELOPMENT
R
R R
R
R
R
Base Volume
Distortion
R
DESIGN DEVELOPMENT
Subtraction
Voronoi Structure
31
32
DESIGN DEVELOPMENT
Voronoi Principle_
division plane
boundary form
point
Voronoi diagram is a special kind of decomposition of a metric space determined by distances to a specified discrete set of objects in the space, e.g., by a discrete set of points. In the simplest case, we are given a set of points S in the plane, which are the Voronoi sites. Each site s has a Voronoi cell, also called a Dirichlet cell, V(s) consisting of all points closer to s than to any other site. The segments of the Voronoi diagram are all the points in the plane that are equidistant to the two nearest sites. The Voronoi nodes are the points equidistant to three (or more) sites. http://en.wikipedia.org/wiki/Voronoi_diagram
DESIGN DEVELOPMENT
Voronoi Morphologies :: MATSYS www.materialsystems.org/wp-content/myimages/2007/12/drawings_01_voronoi3d.jpg
33
34
DESIGN DEVELOPMENT
MAYA_Voronoi Development_
DESIGN DEVELOPMENT
35
36
DESIGN DEVELOPMENT
Voronoi_Nested CAD Output_
The utilization of parametric scripts will allow for the modularisation of the proposed design, with a focus on automation and digital fabrication, the realisation and construction of complex bespoke structures can be more easily achieved. Illustrated above is the process of converting a series of generated complex structures, this process is currently manual and serves as proof of concept. Moreover script can be generated to function as a macro, simply replaying a sequence of modifications on an object.
DESIGN DEVELOPMENT
37
Voronoi_ Python Script by Lars Berg 2009_ ‘’’ for this script to work your scene needs to be set to y-up. select either particles or loactors and run this script. If you’d like, after you select your particles or locators you can select a boundary mesh instead of using a bounding box (this works best with lighter tessellation). -----------------------------------------------------------The script was written by: Lars Berg 2009. larsberg@thelablab.com ‘’’ import maya.cmds as cmds import maya.mel as mel from math import * import random as random from array import array def drawBoundingBox(boundary, offset): bbox = cmds.polyCube(n = ‘voronoi_0’, ch = 0) #min cmds.move(float(boundary[0]) - offset, bbox[0]+’.f[5]’, x=1, ws = 1 ) cmds.move(float(boundary[1]) - offset, bbox[0]+’.f[3]’, y=1, ws = 1 ) cmds.move(float(boundary[2]) - offset, bbox[0]+’.f[2]’, z=1, ws = 1 ) #max cmds.move(float(boundary[3]) + offset, bbox[0]+’.f[4]’, x=1, ws = 1 ) cmds.move(float(boundary[4]) + offset, bbox[0]+’.f[1]’, y=1, ws = 1 ) cmds.move(float(boundary[5]) + offset, bbox[0]+’.f[0]’, z=1, ws = 1 ) return bbox def voronoi3D( ): pointList=cmds.ls(sl=1,fl=1) newGroup= cmds.group( em=True, name=’voronoi3D_0’ ) pos = rot = vectorBetween = [0.0, 0.0, 0.0] offSet = 1.0 posCount = 0 cmds.select(pointList[0], r=1) obj = cmds.pickWalk( direction=’down’ ) cmds.select(pointList[len(pointList) -1]) bMeshTest = cmds.pickWalk( direction=’down’ ) if cmds.objectType( bMeshTest, isType=’mesh’ ): boundMesh = pointList[len(pointList) -1] pointList.remove(boundMesh) else: boundMesh = 0 print boundMesh cmds.select(pointList, r=1) boundary = cmds.exactWorldBoundingBox() if cmds.objectType( obj, isType=’locator’ ): posCount = len(pointList)
else: posCount = cmds.particle( pointList[0], q=1, ct=1) if posCount > 50:# for larger point counts I’ve had to turn off the undo cache for (crashes), you may need to adjust this cmds.undoInfo( state=False ) posList = [ [0.0 for col in range(3)] for row in range(posCount) ] if cmds.objectType( obj, isType=’locator’ ): for i in range(posCount): posList[i] = cmds.pointPosition(pointList[i]) else: for i in range(posCount): posList[i] = cmds.getParticleAttr(pointList[0]+’.pt[‘ + str(i) +’]’, at=’position’, array=1 ) for i in range(len(posList)): bMax = 100000000.0 if boundMesh == 0: newGeo = drawBoundingBox(boundary, 1.0) else: newGeo = cmds.duplicate(boundMesh) cmds.DeleteHistory(newGeo) for j in range(len(posList)): if j != i: vectorBetween = [posList[i][0] - posList[j][0], posList[i][1] - posList[j][1], posList[i] [2] - posList[j][2] ] if sqrt(vectorBetween[0]**2 + vectorBetween[1]**2 + vectorBetween[2]**2 ) /2.0 < bMax: pos = [ (posList[i][0] + posList[j][0])/2.0, (posList[i][1] + posList[j][1])/2.0, (posList[i] [2] + posList[j][2])/2.0] rot = cmds.angleBetween( euler=True, v1=(0.0, 0.0, 1.0), v2=(vectorBetween[0], vectorBetween[1], vectorBetween[2]) ) cmds.polyCut(newGeo, pc = (pos[0], pos[1], pos[2]), ro = (rot[0], rot[1], rot[2]), df=1, ch=0) cmds.polyCloseBorder(newGeo, ch=0) cmds.DeleteHistory(newGeo) bBox = cmds.exactWorldBoundingBox() bMax = sqrt((bBox[3] - bBox[0])**2 + (bBox[4] - bBox[1])**2 + (bBox[5] bBox[2])**2 ) cmds.parent(newGeo,newGroup ) if i%10 == 0: cmds.refresh() cmds.undoInfo( state=True ) cmds.select(newGroup) if boundMesh != 0: cmds.hide(boundMesh) voronoi3D()
38
DESIGN DEVELOPMENT
Rule-Based Agent Behaviour_
The Agency operation has two primary functions. Firstly, agents operate a self-organising programme at the ‘bottom-up’ strategic scale. The logics of this collective behaviour aggregate to generate spatial form via levels of agent proximity and attractive. Secondly, repel agents form spatial configurations in direct response to existing context, a ‘top-down’ strategic observation, allows for specific contextual parameters to localise the spatial organisation of repel agents. Inherent in both species is a common repellent force, to the opposite of the species. “Being immersed in patterns we navigate between surface layers and the codes hidden behind them” Cecil Balmond, Element.
DESIGN DEVELOPMENT
1.
2.
3.
39
4.
RR
RR
RR
RR
agent_rule_ 01 proximity_radius_ 3 closest_ 2
agent_rule_ 02 centre_points_ 3
agent_rule_ 03 new centre_points_ 1 repel_level_ 5
agent_rule_ 03 repel_level_ 5 move_force_ 5
check current position. draw a radius of 3 from centre point. if other agents within radius area, select. filter, order closest two agents.
select all centre points of all agents in selection. calculate mean centre point. mean centre point = new centre point of first agent.
locate repel point. if new centre point within radius of 5. select new centre point. plot vertex between repel centre point and new centre point.
move new centre point along vertex. if distance of vertex is 5. stop. then move the agent to new centre point.
40
DESIGN DEVELOPMENT
MAYA_Voronoi_Structure Development_
DESIGN DEVELOPMENT
A context sensitive boundary form, the mutation of which is driven by the self-organisation of a sets of agents. Agents compose the spatial organisation by defining the relative centre point of each generated volume.
41
_INTRODUCTION 12 _RESEARCH 28 _DESIGN DEVELOPMENT 44 _PROPOSAL 04
44
DESIGN PROPOSAL
DESIGN PROPOSAL
DESIGN PROPOSAL
44
48
DESIGN PROPOSAL
BB
DD
AA
Plan
Elevation AA
CC
Elevation BB
DESIGN PROPOSAL
Axo
Elevation CC
Elevation DD
49
DESIGN PROPOSAL
51
52
DESIGN PROPOSAL
DESIGN PROPOSAL
53
54
DESIGN PROPOSAL
Final Presentation Board_
The proposed design was exhibited at the Manchester School of Architecture on the 24-022010. The panel was composed of members of teaching staff from the School of Architecture and staff from the Machester Museum. The design was exhibited alongside other proposals from the studio units; Re-map 2000 and Prototype #1. The design had been an exercise into digital design techniques and methodologies, thus some aspects of the environmental qualities of the spaces produced were not articulated towards more traditional design criteria. This was reflected in the feedback from the panel, to whom the development and methodology for the conception was an interesting approach, although they felt the design lacked a translations into an environment. Since the submission of this entry I have researched further into the functionality and customisation of software applications such as MAYA, Rhino and Processing. This project has expanded the depth of my dissertation research into scripting and generative design, furthermore it has enabled me to review some of the methods, techniques and theories within current digital design and apply them to a studio design project.
DESIGN PROPOSAL
55
56
DESIGN PROPOSAL
/////////////////////////////////////////////////////////////// //author: Patrick Drewello //Manchester School of Architecture //date:2010.02.16
float $loc2_coord_closest [] = `getAttr ($loc_obs[$j] + “.center”)`; vector $loc1_vec_closest = <<$loc1_coord_closest[0], $loc1_coord_closest[1], $loc1_coord_closest[2]>>; vector $loc2_vec_closest = <<$loc2_coord_closest[0], $loc2_coord_closest[1], $loc2_coord_closest[2]>>;
//function: set repel distance behaviours /////////////////////////////////////////////////////////////// string $repel_obs [] = `ls -tr “REPEL*”`; string $loc_obs [] = `ls -tr “SH*”`; string $boundary [] = `ls -tr “Boundary”`; vector $DiffVec; string $obs_closest; float $obs_closest_1; float $obs_closest_2; float $obs_closest_3; float $obs_closest_4; vector $loc_1vec; vector $loc_2vec; vector $loc_3vec; vector $loc_4vec;
//
float $repel_coord [] = `getAttr ($repel_obs[$ii] + “.center”)`;
//gets vectors for object of focus for ($i=0;$i<size($loc_obs);$i++){
float $loc_coord [] = `getAttr ($loc_obs[$i] + “.center”)`; vector $repel_vec = <<$repel_coord[0], $repel_coord[1], $repel_coord[2]>>; vector $loc_vec = <<$loc_coord[0], $loc_coord[1], $loc_coord[2]>>;
$DiffVec = $repel_vec - $loc_vec; float $distance_loc_repel = mag($DiffVec);
//print ($distance_loc_repel); print (“\n”);
//array four closest objects
for ($j=0;$j<size($loc_obs);$j++){ float $loc1_coord_closest [] = `getAttr ($loc_obs[$i] + “.center”)`;
}
$obs_closest_2 = $loc_obs[$j]; }
if ( $dis_closest > 1 && $dis_closest <= 2){
$obs_closest_1 = $loc_obs[$j];
if ( $dis_closest > 2 && $dis_closest <= 3){
//number of interations for ($ii=0;$ii<50;$ii++){
if ( $dis_closest > 3 && $dis_closest <= 4){
//get boundary box min & max vectors float $centreValue [] = `getAttr ($boundary[0] + “.center”)`; float $minValue[] = `getAttr ($boundary[0] + “.boundingBoxMin”)`; define max and min values of site boundary float $maxValue[] = `getAttr ($boundary[0] + “.boundingBoxMax”)`;
$Diff_vec_closest = $loc2_vec_closest - $loc1_vec_closest; float $dis_closest = mag($Diff_vec_closest);
$obs_closest_3 = $loc_obs[$j]; }
if ( $dis_closest <= 1){
$obs_closest_4 = $loc_obs[$j]; } } //get vectors for four closest objects
float $loc1_coord [] = `getAttr ($obs_closest_1 + “.center”)`; float $loc2_coord [] = `getAttr ($obs_closest_2 + “.center”)`; float $loc3_coord [] = `getAttr ($obs_closest_3 + “.center”)`; float $loc4_coord [] = `getAttr ($obs_closest_4 + “.center”)`;
vector $loc1_vec = <<$loc1_coord[0], $loc1_coord[1], $loc1_coord[2]>>; vector $loc2_vec = <<$loc2_coord[0], $loc2_coord[1], $loc2_coord[2]>>; vector $loc3_vec = <<$loc3_coord[0], $loc3_coord[1], $loc3_coord[2]>>; vector $loc4_vec = <<$loc4_coord[0], $loc4_coord[1], $loc4_coord[2]>>;
$DiffVec1 = $loc_vec - $loc_1vec; $DiffVec2 = $loc_vec - $loc_2vec; $DiffVec3 = $loc_vec - $loc_3vec; $DiffVec4 = $loc_vec - $loc_4vec;
float $distance_loc_loc = mag($DiffVec1); float $distance_loc_loc2 = mag($DiffVec2); float $distance_loc_loc3 = mag($DiffVec3); float $distance_loc_loc4 = mag($DiffVec4); //print ($distance_loc_loc); print (“\n”);
DESIGN PROPOSAL //plot center point of objects, plot move object of focus vector $MidVec = <<((($loc_vec.x)+($loc1_vec.x)+($loc2_ vec.x)+($loc3_vec.x)+($loc4_vec.x))/5), ((($loc_vec.y)+($loc1_vec.y)+($loc2_vec.y)+($loc3_ vec.y)+($loc4_vec.y))/5),((($loc_vec.z)+($loc1_vec.z)+($loc2_vec.z)+($loc3_vec.z)+($loc4_ vec.z))/5)>>;
} }
move -r $RandX $RandY $RandZ; $tim+=1; currentTime ($tim);
}
//Insert floor planes $numbfloors = 1; for ($i=0;$i<$numbfloors;$i++) { polyCube -n “BooleanBox”; scale 100 60 5; move 0 30 -50; $tim+=1; currentTime ($tim);
}
}
//Author: Patrick Drewello 2010 //Manchester School of Architecture //loop to generate 2 types of species ///////////////////////////////////////////////// //stage: alpha_release
//Insert site boundary $numbfloors = 1; for ($i=0;$i<$numbfloors;$i++) { polyCube -n “Boundary”; scale 40 40 40; move 0 0 0; $tim+=1; currentTime ($tim);
// //
Centroid X coord = (x1+x2+x3) / 3 Centroid Y coord = (y1+y2+y3) / 3 print $MidVec; print (“\n”);
currentTime 1; select -all; doDelete; //////////////////////////////////////////// //1st Loop: setup scene //Create locator/polyspheres at randomXYZ within given range ($numbsetspheres x 10) $numbsetspheres = 20; $tim = 0; for ($i=0;$i<$numbsetspheres;$i++) { for ($j=0;$j<10;$j++) { float $RandX = rand(-20, 20); float $RandY = rand(-20, 20); float $RandZ = rand(-20, 20); float $RandX1 = rand(-55, 55); float $RandZ1 = rand(-55, 55); float $RandX2 = rand(-25, 25); float $RandZ2 = rand(-25, 25); float $RandX3 = rand(-5, 5); float $RandZ3 = rand(-5, 5); float $RandX4 = rand(-5, 5); float $RandZ4 = rand(-5, 5); float $RandX5 = rand(-5, 5); float $RandZ5 = rand(-5, 5); float $RandX6 = rand(-5, 5); float $RandZ6 = rand(-5, 5); float $RandX7 = rand(-5, 5); float $RandZ7 = rand(-5, 5); // polySphere -n “SH1”; // curve -d 3 -p $RandX1 0 $RandZ1 -p ($RandX1 - $RandX2) 10 ($RandZ1 - $RandZ2) -p ($RandX1 - $RandX3) 20 ($RandZ1 - $RandZ3) -p ($RandX1 $RandX4) 30 ($RandZ1 - $RandZ4) -p ($RandX1 - $RandX5) 40 ($RandZ1 - $RandZ5) -p ($RandX1 - $RandX6) 50 ($RandZ1 - $RandZ6) -p $RandX1 60 $RandZ1 -k 0 -k 0 -k 0 -k 1 -k 2 -k 3 -k 4 -k 4 -k 4 ; spaceLocator -n”SH1”; scale -r 0.4 0.4 0.4;
} //////////////////////////////////////////// //2nd loop: Bounding Box Loop: //What it does: creates a series of polycubes //polyCube -w 10 -d 10 -h 15 -n PB; //Insert cubes $numbcubes = 3; //Number of inserted cubes for ($i=0;$i<$numbcubes;$i++) { float $RandX = rand(-20, 20); float $RandY = rand(-20, 20); float $RandZ = rand(-20, 20); polyCube -w 15 -d 15 -h 15 -n “PB”; move $RandX $RandY $RandZ; spaceLocator -n”REPEL”; scale 5 5 5; move $RandX $RandY $RandZ; $tim+=1; currentTime ($tim); } currentTime 1;
57
_during the research for the studio design project & the dissertation, a series of very useful website have help to inform the work presented in the documentation please review, support and add to the content of some of these sites_ [the techniques and methods employed here are recorded on the web]
RESEARCH LINKS
59
The links provided are a comprehensive collection of webpages, wikis and blog; all of which relate to 'algorithmic', 'generative' and 'parametric' architecture. In particular, processes and systems of 'novel' design solutions. morpho- onto- more- genetics Ming3D Genetic Evolution http://genetic.ming3d.com/fullscreen.htm Evolutionary Component Surface System http://www.architectural-geom.com/ecss/ ArchiKluge? http://www.armyofclerks.net/ArchiKluge/index.htm Nicholas Pisca http://www.nickpisca.com/ Alisa Andrasek http://www.biothing.org/wiki/doku.php generative- forums- linksTuong Van Ho's Links http://www.mat.ucsb.edu/~g.legrady/rsc/algo_arch.html Generator X http://www.generatorx.no/ Tropolism http://www.tropolism.com/ SuckerPunch? http://www.suckerpunchdaily.com/ case studies- interviewsTechnology at Work at Gehry Partners http://www.aecbytes.com/feature/2004/ Gehry_Study.html fab- hardware- scanners- cncZ + F UK http://www.zf-uk.com/ Supermanoeuvre http://www.supermanoeuvre.com/ Associated Fabrication http://www.associatedfabrication.com/ ModeLab? http://modelab.nu/ practice- design office- firm- researchKyle Steinfeld http://projects.ksteinfe.net/ Far From Equilibrium http://farfromequilibrium.blogspot.com/ Francis Bitonti http://www.fadarch.com/ Sheetd http://www.sheetd.com/ Marc Fornes http://www.theverymany.net/ Daniel Shiffman http://www.shiffman.net/ Axel Kilian http://designexplorer.net/ Alvatron Studio http://alvatronstudio.com/ Michael S Ashley http://www.mash-arkt.com/ Peter Macapia http://www.petermacapia.com/blog/ Labdora http://www.labdora.com/ Skylar Tibbits http://sjet.wordpress.com/ Alexander Pincus http://pinc.us/ Bureau V http://www.bureauv.com/ Kokkugia http://www.kokkugia.com/ Research Nodes http://www.researchnodes.org/ Ming Tang http://ming3d.com/ Nullthing http://www.nullthing.com/ Algorithmic Design http://blog.algorithmicdesign.net/
White Weekend Kites http://www.whiteweekendkites.com/ Robert Hodgin http://roberthodgin.com/ Flight 404 http://www.flight404.com/blog/ Archpoint http://www.archpoint.dk/ Amanda Levete Architects http://www.amandalevetearchitects.com/ Atelier Manferdini http://www.ateliermanferdini.com/ Faulders Studio http://faulders-studio.com/index.html Contemporary Architecture Practice http://www.c-a-p.net/ Common Wealth http://www.commonwealth.nu/ Mike Suriano http://aesthetechtonik.com/ 4.pli http://4-pli.com/ LDVC http://www.ldvc.net/ SoftLab? http://www.softlabnyc.com/ Minima Forms http://www.minimaforms.com/ NArchitects http://www.narchitects.com/ Theoremas http://theoremas-gabe00fab.blogspot.com/ Tronic Studio http://tronicstudio.com/ Aranda \ Lasch http://www.arandalasch.com/ Time and Space Workshop http://www.timeandplaceworkshop.com/ Erik Verboon http://www.erikverboon.com/ Ron Roseman http://www.ronrosenman.com/home.php/ Complexification http://www.complexification.net/ maya- MEL- codeDigital Toolbox (GRASSHOPPER) http://www.digitaltoolbox.info/ Cellular Aggregation http://researchnodes.org/doku.php?id=cellularaggregation:m elscripts Genr8 http://projects.csail.mit.edu/emergentDesign/genr8/index. html#moreSurfaces Nicholas Pisca GenScripting? http://www.nickpisca.com/GenScriptingSpr2008 Nicholas Pisca BLAST http://www.nickpisca.com/BLAST/ Nicholas Pisca Generative Omnibus http://www.nickpisca.com/go Nicholas Pisca UCSB http://www.nickpisca.com/ucsb http://pythonwiki.tiddlyspot.com/ http://mayamel.tiddlyspot.com/ Creative Crash http://www.creativecrash.com/maya/downloads/scripts-plugins/c/ TU Delft http://toi.bk.tudelft.nl/index.php?module=meldb Proxy Wiki http://www.proxyarch.com/wiki/ Yukie Hirashima http://ssssociety.blogspot.com/search/label/MEL Edvard Toth http://edvardtoth.com/extras/mel-scripts/ PolyExtrude? Mel Tutorials http://www.polyextrude.com/tutorials/MelScripting/ Rob the Bloke http://nccastaff.bournemouth.ac.uk/jmacey/RobTheBloke/www/ Using MEL http://caad.arch.ethz.ch/info/maya/manual/UserGuide/MEL/MELTOC. fm.html
please find enclosed CD-Rom for more material_