Monday, April 25, 2016

ARCH 655_Final Project_Villa Nurbs, Spain






Definition:  

Algorithms and Scripting for Parametric Design

Creating more powerful model definition and better defined parametric designs, with the use of the two advanced methods: 
(1) algorithms, especially Genetic Algorithmand/or 
(2) scripting that can expend the capability of existing tools and help you create your own algorithms.

Case Study: Villa Nurbs, Spain by Architect Enric Ruiz-Geli (Cloud 9)

Goals:

In my final project, my goal is to design a new facade to Villa Nurbs with respect to the radiation values.

Parametric Modeling:

In this final project, I recreated only the body of my previous parametric modeling. In Project1 presentation, I was advised to start with points by Prof. Dr. Wei Yan.

So firstly, I drew the curves of six different etfe pillows in Rhino by using their layout. I put points in their control points and defined the points in Grasshopper. I recreated the nurbs curves in Grasshopper with the help of these points. 





For the roof of the building, I got used the curves by offsetting them; and I baked the curves. In Rhino, I joined them and created the threshold. With the "Boundary" node, the roof was generated. 


Since the form of the body is not symmetrical, I created two different sections via points.



This time, I used "Sweep 2" node for the skin instead of "Loft" node. 



"Boundary" node was used to generate the floor slab.

Ladybug Analysis:

  
Location: Gerona, Spain
Coordinates: 42° 14' 49" N, 3° 7' 28" E 

In order to achieve my goal, I needed the radiation values. I decided to use Ladybug plugin for "Radiation Analysis". Villa Nurbs is in Gerona, Spain. I visited energyplus website and downloaded the epw file (link is seen below). 



https://energyplus.net/weather-location/europe_wmo_region_6/ESP//ESP_Gerona.081840_SWEC


In addition, I assumed the Y_axis is pointing the North direction; so I rotated my model to be located as seen on Google map.  



I started with "Ladybug" node. After seeing the "Flying" message, I  used "Open Epw Weather File" node. By connecting a "Boolean Toggle" and setting it "True" makes you browse your epw file. It is important to save your epw file to a place to find easily.



Next step was to connect the epw file to the "GenCumulativeSkyMtx" node. This node also required "Boolean Toggle". CumulativeSkyMtx output was connected to "SelectSkyMtx" node and this node was connected to the "Radiation Analysis" node as seen above. Some inputs of "Radiation Analysis" were flattened as default. I used Unit Y vector for North direction. "Grid size" input could be changed parametrically. In this model, the value was"8". By setting the Boolean Toggle "True", radiation values matched with colors as in the legend and results of the analysis could be seen on the model in Rhino.



The radiation analysis seen above is correct but when I first tried it, it was incorrect. In Ladybug, I generated sun path with "Sun Path" node. When I first generated radiation analysis, the facade was all blue in the south direction which should normally gained more sun light than north facade. Therefore, "Flip" node was used to correct the normal of the skin surface. After using "Flip" node (seen in the third image from the start), radiation analysis became as above.


In the sun path diagram, conditional selection was applied (comfort zone is ignored): The location of sun was shown when the dry bulb temperature was more than 22C and global horizontal radiation was more than 630Wh/m2. 



Radiation values were required to be used as the input for the design of a new facade. My aim is to design sun shade with respect to these values. Before using the values, they had to be converted. Python node was used for this conversion. 




The numbers which were connected to x input of Python node were all decimal numbers. Since the values were in a list, x should be converted to "List Access" and for the numbers, "float" has to be chosen. This menu was accessed by right clicking the "x" input.

Weaverbird's Stellate/Cumulate node was used to generate sun shade. Converted values became the height of each pyramid. If the piece got less sunlight the height of pyramid was more. The pyramids on blue parts were sharp pointed as seen on the baked one on the left.



The bottom area of pyramids could be changed parametrically with the number slider which was used as "_gridSize_" input in the "radiationAnalysis" node. After forming pyramids, I would like to obtain the result of "Weaverbird's Picture Frame" node. This time, less sunlight should match thinner frame which meant smaller value. Therefore, the list of values generated by Python node should be reversed. In addition, there was another tricky part which was the values of matching the faces. When the first Python node was used, the number of grid was equal to the bottom number of pyramids. After pyramids were generated, the number of faces was multiplied by 4 since the pyramids have 4 faces. Each value should also be multiplied by 4 in order to match the number of faces. "Weave" node was used for this multiplication. Each value repeated itself 4 times as seen in the list.
















By deconstructing the mesh&faces and recreating them with scaled values, I obtained the void frames on each pyramidal surface. These new values were used to regenerate the mesh. "Weaverbird's Join Meshes and Weld" and "Mesh Thicken" nodes were used to create the final form. The result is seen below. (Updated on 23 May 2016_Thanks to Mr. Laurent Delrieu) 









After framing, I tried another design with the same values. My aim was to create a panel wall. However the mesh of Ladybug analysis and the grid of the panels did not match. In addition, the panels did not reflect the expected results which had to be in accordance with the analysis values. 

The second solution worked: By exploding the analysis mesh coming from Ladybug, the vertices of the panels were generated. For the mesh explosion node, I had downloaded Meshedit tools from this link http://www.food4rhino.com/project/meshedittools
With this method, I did not require to use the paneling tools and I obtained the correct result which is seen below.


















The 3D result is shown below (Updated on 03 June 2016_Thanks to Mr. Hyungsoo Kim)































References:

http://www.grasshopper3d.com/forum/topics/question-about-weaverbird-picture-frame?xg_source=activity

https://en.wikiarquitectura.com/index.php/Villa_Nurbs

http://www.ibpsa.org/proceedings/bs2013/p_2499.pdf

https://enengyplus.net/

grasshopper3d.com/group/ladybug

https://www.youtube.com/playlist?list=PLruLh1AdY-Sj_XGz3kzHUoWmpWDXNep1O

https://www.youtube.com/watch?v=AZL2lJroaNE&index=2&list=PLruLh1AdY-Sj_XGz3kzHUoWmpWDXNep1O

https://www.youtube.com/watch?v=sRfd4K3b9ew&index=3&list=PLruLh1AdY-Sj_XGz3kzHUoWmpWDXNep1O

https://www.youtube.com/watch?v=Fwe9ZJnTSH0&index=4&list=PLruLh1AdY-Sj_XGz3kzHUoWmpWDXNep1O

http://www.grasshopper3d.com/group/panelingtools

http://designalyze.com/intro-scripting-python-rhino/


Monday, March 21, 2016

ARCH 655_Project 1_Villa Nurbs, Spain

Definition:
Project 1_Parametric Modeling and Physically-based From Finding 
  • Creating parametric form (mass and skin) for the curved design by using Rhino/Grasshopper
  • Creating a parametric, physically-based model for a part of the design by using Kangaroo and Weaverbird.
  • Analyzing selected curved surfaces in the project, in terms of geometry (dimensions, areas, curve tangents, curvatures, etc. using the Analyze/Analysis functions of Rhino and Grasshopper), and physics by using Kangaroo.
Case Study: Villa Nurbs, Spain by Architect Enric Ruiz-Geli (Cloud 9)
Introduction:


Parametric Modeling:
In this case study, I create my parametric modeling in five parts:
  1. Columns (Feet)
  2. Transition Contours (Between columns & Body)
  3. Body Skin
  4. Tensile Structure on the Skin
  5. Roof Frame
  1. Columns (Feet)


I started by drawing the curves of the columns in Rhino. I used one "Curve" parameter node for both curves in Grasshopper. 



I grouped the driving parameters. "Number slider"s were used in controlling the number, movement, height and scale of the curves. Since geometry is concave I put the curves into three groups with individual parameters. For the scale and movement values, I used "Series" node to supply the numbers. By using "Item" node, I picked the last value of each list and I added the parameter value to create the first value of the next list.
"Area Moments" node was used for determining the centers of the curves. Centers were used for "Scale" node. Hence the curve parameter contains two curve values, while finding the centers "Graft" was used inside of the nodes. Centroid output of "Area Moments" and geometry input of "Scale" nodes were grafted.
After the scaling and placement of the curves, I used "Extrude", "Boundary" and "Cap Holes" nodes to generate the final form of the columns.



  1. Transition Contours (Between columns & Body)


There are transition contours between the columns and the body. I drew the outline of the curves in Rhino and connected five curves seen above to a one curve parameter node in Grasshopper.

I used "Move" node for placement of the curves. For obtaining the movement values, "Series" was used. For the final form, "Extrude" and "Cap Holes" nodes were used.

3. Body Skin

I drew the outline of the body skin in Rhino and connected the curve to Grasshopper "Curve" node. 


Firstly, I carried the curve in the z_direction above the transition contours. I made use of "List Item" and "Addition" nodes to obtain the movement value. 



Secondly, I found the centroid of the curve by using "Area Moments" node and carried the center point to the level of the curve by using "Move" node before scaling. 

Before scaling, I also made two groups of curves with different scale ranges in order to achieve the convex form skin of the building. After determining the values as two separate lists, I merged them into one list with "Merge List" node and used that list for scaling.































After scaling the curves, I created the list of movement values by using "Domain" and "Range" nodes. I used "Loft" node to get the final form of the skin.

I used the curve at the bottom for getting the base of the body. "Boundary" node was used.















4. Tensile Structure on the Skin



As seen above there are five elements in this part.
  • Horizontal wire
  • Vertical Wire
  • Diagonal Wire
  • Horizontal Pipe
  • Joint Bolts





I used the same curves as in the previous part. 
  • For the horizontal wire, I used "Pipe" node and the curves as its input. 
  • For vertical wire, I divided the curves, flipped the list and interpolate the curves and piped them. "Divide curve", "Flip Matrix", "Interpolate Curve" and "Pipe" nodes were used.
  • For the diagonal wire, curves were divided. The points obtained from the division were shifted by another list. Other list was obtained by using "Series" node. "Shift List" (with grafted Shift input), "Flip Matrix", "Interpolate Curve" and "Pipe" nodes were used.
  • For the horizontal pipes, first, the curve divisions were "Shatter"ed and  each shattered piece was divided again. In order to get rid of the first and the last pieces, "Cull Pattern" was used. For creating the pattern, "Series", "Merge"(with flattened result output) and "Shift List" nodes were used. 






For the bolts, I drew a section in Rhino, and used a curve parameter in Grasshopper for the section curve.

And I revolved it with "Revolution (RevSrf)" node in Grasshopper. 
"Orient Direction" node was used to place revolved bolts on the surface of the body and revolved surface of bolts are used as geometry input. 

Other inputs of the "Orient Direction" node are:
  • Point A(Reference point): I made a point at the center of the top circle of bolt in Rhino as seen below. It was defined with "Point" node and carried to the neck of the bolt with "Move" node. This point was used as the input value of Reference Point A in the "Orient" node. 



  • Direction A (Reference Direction): Reference Direction was defined by "Unit Y Vector" node because the revolved bolt was in the Y_direction as seen above. While orienting, scaling is also allowed. I connected the "Unit Y Vector" to a "Number Slider" for scaling while orienting. But I had to use a negative value since my vectors pointed through the center seen as below.
  • Point B (Target Point): Target points were the division points of the skin curves as below. 



  • Direction B (Target Direction): Target direction should be from surface skin to outside or inside. For this purpose, a vector and UV coordinates of points were required. "Surface Closest Points" node was used and the loft surface and division points were the inputs. After finding the UV coordinates of the division points with this node, "Evaluate Surface" node was used with UV input from "Surface Closest Points". Other input was surface and it was taken from the offset surface of the loft. The output Normal of the "Evaluate Surface" node was used defining the vector. Since the vector was directed from surface to center, I used a negative value in the "Direction A(Reference Direction)" input in order to locate the bolts correctly.




UV of points:


Vectors showing the placement direction of bolts:

Locating the bolts:

Final form of the tensile structure covering the surface skin:

4. Roof Frame

I drew these curves in Rhino at zero level. Number and height of the curves could be changed parametrically through "Number Slider"s. I used four curve parameters for the exterior curves, interior curves, closed curves and smaller closed curves.

I elevated each curve to its own level by using "Unit Z" and "Move" nodes.


I used "Extrude" and "Boundary" nodes. I did not prefer to use "Cap Holes" node here, because I wanted a hole (opening) in the middle.

Final Parametric Model (baked) 




Physically Based Part of the Modeling:

After finishing parametric model, I baked the surfaces. There are six curved Etfe Pillows on the roof. On sunny days, Etfe pillows deflate, on cloudy days they are inflated to let more sun light in. 



I made use of Weaverbird and Kangaroo engine to inflate the Etfe pillows.

Unary force amplitude could be changed parametrically through "Number Slider".


For the use of Kangaroo engine, mesh is required. I created meshes inside of the curves by recreating the curves through "Control Points" and "Nurbs Curve". For the use of "Springs Line", mesh edges are required. "Weaverbird Split Polygons" node defined the mesh edges on the curved mesh. By using "Naked Points" node, I separated the points to be anchor points and the rest to be forced by "Unary Force". By using Kangaroo engine, I inflated the Etfe Pillows both upwards and downwards (with negative value in the number slider of Unary Force amplitude).

Inflated Etfe Pillows were baked and seen above. Inflated pillows in the opposite direction are below.



Analyses:

I analyzed the skin surface by using Rhino "Curvature Analysis". Concave parts which are shown in blue make it difficult to manufacture if the body was made out of some solid material such as concrete. Therefore, using tensile structure here was a very clever solution.

Zebra Analysis: 
The skin requires more smoothness. Horizontal curves which supply basis for the loft should be modified through number sliders. The convex belt of the loft requires smoothness.

Draft Angle Analysis:




Project Movie:






References:

https://en.wikiarquitectura.com/index.php/Villa_Nurbs
http://www.ruiz-geli.com/projects/inprogress/villa-nurbs
https://vimeo.com/86344328
https://www.youtube.com/watch?v=i5Yh0GqFpA4
https://www.youtube.com/watch?v=urTqxtrzA_k
https://www.youtube.com/watch?v=rHYM_bF3nQo&list=PLov22Ah1hX_wL_U-RXBETlknIwrInLdiw&index=2
http://www.grasshopper3d.com/