Daylight – Design|Deformation parameter [Computational design]

•June 4, 2011 • 9 Comments

The architectonic qualities of our built environment, throughout history, have been a direct consequence of our ability to “compute”. These “computational constraints” do not suggest an inability to handle complex mathematics (calculation). However, on the contrary, they indicate an inability to iterate beyond a certain stage (time), the complex outcome, seemingly arising from a possibly uncomplicated relationship defined between uncomplicated elements.

This project is an attempt to generate, and describe geometric objects in computational terms. The point of departure would be a set of “simple” constraints to generate the basic geometry and then a more “complex” constraint (daylight in this case) to manipulate and affect the base geometry.

Geometric constraints:
Span a canopy between a 4 sided polygon on the outside and a circle on the inside (similar to the ‘British Museum great court roof’).

External constraints:
Deform the geometry of the canopy in an attempt to either “cut-off” or “let-in” maximum daylight for a specific range of hours specified for any particular day in a year.

Advisor: Panagiotis Michalatos Course: Computational design – Numerical descriptions as design tools (Fall 2010, GSD, Harvard).

Parametric[+]Generative. Modeling Topologically complex surfaces.

•October 25, 2010 • 3 Comments

Series of surface studies have been undertaken with an aim to describe topologically complex surfaces based on generative geometric principles, two of which are shown here.

While the first set was an attempt to describe a knot surface (topologically complex) by subjecting two 3dimensional splines through a series of operations (rules) that are inherently simple in nature; the second set of surfaces was an attempt to embed parametric intelligence within the generative geometric model (in this case, the surface developed was an “approximation” of a  triply periodic minimal surface from the batwing family). This facilitates the study of variations within the surface so built and hence a deeper understanding of the volumetric variations that could perhaps lead to a possible architectural intervention. The surface after being discretized, was subjected to a simple modular population act which at its local scale was also embedded with parametric intelligence. This allowed for a powerful model of a complex topological surface that owing to its ability to be controlled at both its global and local scales with a different set of parameters, facilitated its easy “taming”.

The above set of operations were implemented within the Digital Projects interface (Geometric modeling + Powercopies + Knowledge Patterns).
Advisor : Andrew Witt;  from the course 2107m1 (Fall 2010, GSD Harvard)

Knot Surface.

Triply Periodic Minimal Surface – Batwing family.
For more info : Schoen’s batwing surface

Surface construction sequence

Parametric Variations
knot_01

Physical model

Module Population

Recursive Protocols

•May 29, 2010 • 5 Comments

This was an exercise in scripting a fine balance between the high levels of complexity generated by recursive logic and the relatively lower levels of complexity necessitated by fabrication methods. Recursive logic coupled with curated curves, sets the stage for multiple branching structures to “interact” with each other in an attempt to lend stability and facilitate growth. This attempt, currently semi automated, informs the next step in complete automation that will negate prescribing curves. Shown here are diagrams representing the outputs from scripting recursive protocols and fabricating partial mockup of the structure.

Rhino Scripting + Rhino Nest + Microsoft Excel + MasterCam + RobotMaster

Random info :
25 Sheets of Black coated aluminum 3’x4’x0.03″ cut into 560 pieces
25 Sheets of Plywood 3’x4’x0.25″ used to support aluminium on the waterjet bed
90 hrs (including re-cut pieces) waterjet cutting on 5 axis robot
Couple of thousand rivets
20 hrs assembling time

Team Credits : Karthik Dondeti, Fai Au, Jeremy Keagy, Evangelos Kotsioris, Yin Xiao

Course : 2408 InOrganic Assemblies (Spring 2010, GSD Harvard)
Instructor : Marc Fornes (http://www.theverymany.net/)

Thermal Analysis Visualization Tool 1.0 Alpha 1

•April 28, 2010 • 4 Comments

A sequence of Energy simulation tools were adopted to analyse the thermal performance of an office building. While Design Builder was the preferred choice for building geometry and setting up the necessary parameters for affecting a Thermal Analysis, Energy Plus was the engine used to simulate the performance.

The ability to simulate performance is more often undermined by the lack of tools that facilitate a clear and efficient analysis of the data outputted. Hence a custom visualization tool was built in Processing, that allows users to plugin  simulation data from Energy Plus. The tool presents a series of interactive graphic displays of the energy performance for the target space. This would allow a user to comprehend the complexity of simulation results with much ease and facilitates a clear understanding of the performative potential of the building. The current version is the first in the development of this tool and possibly, a couple of iterations down, a much wider repertoire of interactions will be facilitated.

Vodpod videos no longer available.

more about “Thermal Analysis Visualization Tool 1…“, posted with vodpod

Parametric modelling + Digital Manufacturing

•March 10, 2010 • 8 Comments

An investigation into the inter-relatedness among the three seemingly different disciplines of geometric development, material behavior and digital manufacturing processes, manifests into this series of six beer mugs. Each of these are unique in form and encapsulate a complex interlocking ability, which enables them to be carried all together when held at the ends by pressing against each other.

Such is the potential of parametric geometry, that allows issues of function, form, ergonomics, aesthetics, and most importantly, the ability to manufacture with high precision of accuracy, all to be tackled simultaneously.

Geometry creation : Digital Projects, Fabrication : MasterCam + CNC milling of hardwood

Team work. Credits : Karthik Dondeti, Fai Au, Evangelos Kotsioris, Jeremy Keagy

Simple Recursion Study

•February 21, 2010 • Leave a Comment

This is an initial attempt to build recursive code on Rhino.  “Recursion, in mathematics and computer science, is a method of defining functions in which the function being defined is applied within its own definition; specifically it is defining an infinite statement using finite components.” Perhaps the most interesting definition, “To understand recursion, one must first understand recursion” – Wikipedia.

Wouldn’t take long to realize the potential of recursion in its ability to generate relatively high levels of complexity from relatively few lines of code. Immediate objective of this exercise is to develop subdivision strategies (work in progress) for surfaces. Shown here are the sequential progress of recursive iterations developed starting from a simple rectangular grid of points.

Code is inefficient and unclean, and I am far too lazy to correct it, nevertheless, it works 😉

Option Explicit
'Script written by <karthik.dondeti>
'Script copyrighted by <yet.another.script>
'Script version Wednesday, February 17, 2010 10:48:30 AM

Call Main()
Sub Main()

	f_face array(0,0,0),array(0,1,0),array(0,0,0),-90
	f_face array(0,0,0),array(1,0,0),array(0,0,0),90
	f_face array(0,0,0),array(1,0,0),array(0,0,180),0

	arrObjects = rhino.AllObjects
	rhino.UnlockObjects arrObjects
End Sub

Function f_face (arrBase,arrAxis,arrMove,angle)
	Dim arrCrvPt,gridPt,count,index,arrObj
	Dim strCrv,i,j,iMax,jMax,k,height,n
	n=10:iMax=n:jMax=n:index=0:height=0
	ReDim arrCrvPt(3),gridPt(iMax-1,jMax-1)

	For i=0 To iMax-1
		For j=0 To jMax-1
			If i=0 Or j=0 Or i=iMax-1 Or j=jMax-1 Then
				gridPt(i,j)=array(i*20,j*20)
			Else
				gridPt(i,j)= array(i*20+rnd*20,j*20+rnd*20)
			End If

			If i>0 And j>0 Then
				arrCrvPt(0)=gridPt(i,j)
				arrCrvPt(1)=gridPt(i-1,j)
				arrCrvPt(2)=gridPt(i-1,j-1)
				arrCrvPt(3)=gridPt(i,j-1)
				count = int(rnd*5)+2
				f_recurse arrCrvPt,count,index,0
			End If
		Next
	Next
	arrObj = rhino.AllObjects (True)
	arrObj = rhino.SelectedObjects
	rhino.RotateObjects arrObj,arrBase,angle,arrAxis
	rhino.MoveObjects arrObj,arrBase,arrMove
	rhino.LockObjects arrObj
End Function

Function f_recurse (arrPts,count,ini_index,height)
	Dim index,strSrf,k
	index= int(rnd*4)
	k = (rnd*(1/2))+(1/4)

	Dim midPt,arrCrv,arrCentro,strCrv,arrCrvPt,i
	ReDim midPt(3),arrCrv(3),arrCrvPt(3)

	For i=0 To 3
		If i<3 Then
			arrCrv(i)=rhino.AddCurve (array(arrPts(i),arrPts(i+1)))
			midPt(i)=array((1-k)*arrPts(i)(0)+k*arrPts(i+1)(0),(1-k)*arrPts(i)(1)+k*arrPts(i+1)(1))
		Else
			arrCrv(i)=rhino.AddCurve (array(arrPts(i),arrPts(0)))
			midPt(i)=array((1-k)*arrPts(i)(0)+k*arrPts(0)(0),(1-k)*arrPts(i)(1)+k*arrPts(0)(1))
		End If
	Next
	strCrv = rhino.JoinCurves (arrCrv)
	strSrf = rhino.ExtrudeCurvestraight (strCrv(0),array(0,0,count-2),array(0,0,count))
	rhino.CapPlanarHoles strSrf
	rhino.MoveObject strSrf,array(0,0,0),array(0,0,height)
	rhino.DeleteObjects arrCrv

	arrCentro = rhino.CurveAreaCentroid (strCrv)
	arrCrvPt(0)=arrCentro(0):arrCrvPt(1)=midPt(index)
	If index<3 Then
		arrCrvPt(2)=arrPts(index+1):arrCrvPt(3)=midPt(index+1)
	Else
		arrCrvPt(2)=arrPts(0):arrCrvPt(3)=midPt(0)
	End If
	count=count-1
	height=height+2
	If count>0 Then
		f_recurse arrCrvPt,count,index,height
	End If

End Function
Option Explicit
‘Script written by <karthik.dondeti>
‘Script copyrighted by <yet.another.script>
‘Script version Wednesday, February 17, 2010 10:48:30 AMCall Main()
Sub Main()
Dim arrObjects
arrObjects = Rhino.AllObjectsIf IsArray(arrObjects) Then
Call rhino.DeleteObjects (arrObjects)
End Ifrhino.ViewDisplayModeEx, “Wireframe”f_face array(0,0,0),array(0,1,0),array(0,0,0),-90
f_face array(0,0,0),array(1,0,0),array(0,0,0),90
f_face array(0,0,0),array(1,0,0),array(0,0,180),0

arrObjects = rhino.AllObjects
rhino.UnlockObjects arrObjects
Rhino.ViewDisplayModeEx, “ghosted”
End Sub

Function f_face (arrBase,arrAxis,arrMove,angle)
Dim arrCrvPt,gridPt,count,index,arrObj
Dim strCrv,i,j,iMax,jMax,k,height,n
n=10:iMax=n:jMax=n:index=0:height=0
ReDim arrCrvPt(3),gridPt(iMax-1,jMax-1)

For i=0 To iMax-1
For j=0 To jMax-1
If i=0 Or j=0 Or i=iMax-1 Or j=jMax-1 Then
gridPt(i,j)=array(i*20,j*20)
Else
gridPt(i,j)= array(i*20+rnd*20,j*20+rnd*20)
End If

If i>0 And j>0 Then
arrCrvPt(0)=gridPt(i,j)
arrCrvPt(1)=gridPt(i-1,j)
arrCrvPt(2)=gridPt(i-1,j-1)
arrCrvPt(3)=gridPt(i,j-1)
count = int(rnd*5)+2
f_recurse arrCrvPt,count,index,0
End If
Next
Next
arrObj = rhino.AllObjects (True)
arrObj = rhino.SelectedObjects
rhino.RotateObjects arrObj,arrBase,angle,arrAxis
rhino.MoveObjects arrObj,arrBase,arrMove
rhino.LockObjects arrObj
End Function

Function f_recurse (arrPts,count,ini_index,height)
Dim index,strSrf,k
index= int(rnd*4)
k = (rnd*(1/2))+(1/4)

Dim midPt,arrCrv,arrCentro,strCrv,arrCrvPt,i
ReDim midPt(3),arrCrv(3),arrCrvPt(3)

For i=0 To 3
If i<3 Then
arrCrv(i)=rhino.AddCurve (array(arrPts(i),arrPts(i+1)))
midPt(i)=array((1-k)*arrPts(i)(0)+k*arrPts(i+1)(0),(1-k)*arrPts(i)(1)+k*arrPts(i+1)(1))
Else
arrCrv(i)=rhino.AddCurve (array(arrPts(i),arrPts(0)))
midPt(i)=array((1-k)*arrPts(i)(0)+k*arrPts(0)(0),(1-k)*arrPts(i)(1)+k*arrPts(0)(1))
End If
Next
strCrv = rhino.JoinCurves (arrCrv)
strSrf = rhino.ExtrudeCurvestraight (strCrv(0),array(0,0,count-2),array(0,0,count))
rhino.CapPlanarHoles strSrf
rhino.MoveObject strSrf,array(0,0,0),array(0,0,height)
rhino.DeleteObjects arrCrv

arrCentro = rhino.CurveAreaCentroid (strCrv)
arrCrvPt(0)=arrCentro(0):arrCrvPt(1)=midPt(index)
If index<3 Then
arrCrvPt(2)=arrPts(index+1):arrCrvPt(3)=midPt(index+1)
Else
arrCrvPt(2)=arrPts(0):arrCrvPt(3)=midPt(0)
End If
count=count-1
height=height+2
If count>0 Then
f_recurse arrCrvPt,count,index,height
End If

End Function

Geometric response to audio. Real time. Grasshopper : Version 1

•January 10, 2010 • 36 Comments

This is an attempt to program geometric manipulations based on feedback from audio in real time. Been curious since some time now, about the ability to “attach” a physical connotation to audio [like music for instance]. As part of this experiment, the first stage was an attempt to script a simple visualization in VVVV that responds to audio played back on the computer.

Audio input is analysed using the Fast Fourier Transform algorithm within VVVV [fft node]. Audio frequency scales up the height of boxes. ‘Low mid out’ value scales the boxes along the base plane. ‘High mid out‘ value is responsible for the color change and finally the ‘high out‘ value controls the rotation of the boxes about the vertical axis.

Audio played back is by the artist Zero and the song’s called PSP 12′.

Vodpod videos no longer available.

more about “Realtime response to audio“, posted with vodpod

The next stage in this process was to stream the frequency values from VVVV into a text file that is being updated continuously in real time. This text file was further read inside grasshopper using a ‘Read File‘ component. These values are then utilized to manipulate the height of boxes inside rhino in real time. Currently, the test was attempted under simple conditions involving just the height of boxes. There seems to be a major jump in the processing power absorbed by rhino while attempting to update changes in real time. The setup seems to be clunky and slightly less responsive in updating the heights continuously.

Vodpod videos no longer available.

more about “Realtime audio response in Grasshopper“, posted with vodpod

The second artist performing here apart from Zero is Darude and piece is called “Sandstorm”.

All attempts so far have been directed towards studying responses in real time. However, it might be feasible to “record” audio input response on geometry as a static exercise, which would mean the possibility of attaching a physical connotation “form” to audio signals . It is quite early at this point of time to speculate whether this could have any architectural implications. However, what is definitely feasible (and this currently is already being implemented) is the development of an interactive response to audio signals in the real world.