Holographic sky was created by the Design Labs Houston group at the architecture and design firm Gensler. Design labs Houston is a grassroots organization that experiments and works with future technologies and practices in the design industry. The installation was created for Transwestern as part of their artist series. For more information
The Holographic Sky art installation celebrates the grandiose natural light of the architecturally iconic Pennzoil atrium by utilizing reflective, dichroic materials which introduce the vibrant colors of Houston street art into the lobby. The hanging clouds take advantage of the volume of the space while also seeking to bring the scale of the lobby down to the pedestrian level.
Digital Design – Grasshopper with Rhinoceros 3D
The installation was initiated as a way for the group to practice using computational software on a real project. The scope had to be small enough for experimentation but Design Labs Houston was insistent on using parametric software in the design and construction. Grasshopper with Rhinoceros 3D were chosen for the digital design.
We began searching for the right project and came across the artist series hosted by Transwestern in the building Gensler Houston occupies, Pennzoil Place. On being accepted as their next artist, we became inspired by the architecture and wanted to celebrate its primary asset, all of the natural light that washes the atrium.
The initial focus was to create a canopy of some sort over visitors that would give them the impression of being under a prismatic or holographic sky. We wanted to bring color into the lobby in a way that would interact with people and change throughout the day as the sun came in and out. As we further developed the design and became more comfortable with grasshopper, the group decided to move to a more organic shape that would really challenge us in construction and assembly. The new shapes were also a better representation of abstracted cloud formations hanging in the sky.
With the idea in mind, we could move on to grasshopper and begin modeling. By the time we were at the cloud design we had already modeled the first two options above in grasshopper so we were able to recycle the scripting for the fin creation and reuse it in our cloud script.
Grasshopper was an essential tool in the delivery of the project. Throughout the design, we were able to estimate the total cost of the install. Once we purchased the dichroic film material we were able to adjust the scale and density of the clouds to accommodate how much material we had to work with. The program not only helped in the design phase but also during construction.
We created a template in grasshopper for each cloud that included the frame cut, the string pattern, and the length and location for each fin. Each grid string was hand strung and every fin was hand cut… all 952 of them. We then placed all the fins along the string in their proper place and hung the clouds in the atrium. Although the next day was rainy, the sun made an appearance and we were able to see the installation in full effect.
Autodesk holds a conference every year in Las Vegas that brings together 10,000 professionals in the construction, manufacturing, architecture, engineering and media industries to learn about innovations in the industry and to share experiences.
This was my first year at the Autodesk University conference. One of my favorite sessions was the Tuesday morning talk ” Is generative design GOOD for space planning?… emphasis on the GOOD. I was excited for this talk because I do a good amount of space planning and am eager to take advantage of the benefits that generative design provides.
The session was an Oxford-style debate that posed the question of generative design in space planning. Two teams were put head to head in a For or Against competition.
Those fighting against the motion:
Lead Digital Designer at Proving Ground, Kirsten Schulte
Architect and Founding Director of the Smart Cities Institute, Mark Burry
Those fighting for the motion:
Computational Designer, Alyssa Haas
Computer chip engineer and parametric modeling specialist, Deepal Aatresh
Although I am definitely for the motion, there were a few powerful arguments from the against team.
The Against Arguments
Use the current technology to solve the problems you have right now. The technology isn’t GOOD enough to create designed space plans that we can sell to clients out of the box; so, we should focus our energy on using generative design for what its good at today such as business intelligence, area calculations, data visualization, etc…
Generative design may be useful to design but it is not GOOD for it; rather, it is dangerous for design because it could end up replacing architects. As an architect, we think beyond the plan and are required to bring so much more to the picture. Architects greatest sensibilities are around placemaking and the computer cannot, and should not, be doing this task. “Places don’t have boundaries but everything we do computationally has to have boundaries.”
The curse of standardization is threatening to architects in some ways. If generative design tools are created for developers and clients then the architect may lose business. Suburbian housing is a good example of this.
The For Arguments
Do what we can with the tangible tools that we have now. As long as architects are in control of the final output then it is ok to let the computer take on some of the work and help. There are a lot of rigid rules that can be computationally considered while space planning ex. code compliance, the program, adjacencies, light quality, building typology, and site. If we allow the computer to do some of the work then we can spend more time focusing on design.
As architects, we can’t ignore these technologies and need to figure out where we belong in it so that it doesn’t fall into the wrong hands. We need to make sure designers with good intentions are the ones who have the control. Maybe architects could take suburbia back by efficiently using computational design. Additionally, a lot of building types cannot afford an architect so generative design could be a way of democratizing good design.
“This is not a new problem, it has been solved in other industries…Why is this even a question?” Construction is at the bottom of the productivity chart and it isn’t getting any better. Considering this, we have no choice but to create new and use existing tools for generative design in space planning.
Other good points along the way
The important keys when discussing technology adoption is people and processes. If your team doesn’t adopt and use the tools properly then you get no benefit.
“There are a lot of bad repeatable buildings that are built right now that computers had absolutely nothing to do with, that people spent quite a lot of time designing.”
Hospital architects used to be considered more as systems architects because the hospital is very rigid. Typologies like this can be good for generative space plans.
The tool maker should be the tool user. We need a new generation of architects who work with code in order to make the generative design tools.
“Algorithms can supercharge any craft”
“The tools don’t make all the decisions, the humans still do. The tools get you from point A to point B really fast.”
For success with machine learning, you need good data to feed it.
Products are not bad. There are good products and bad products. Customizable good products are what’s missing in architecture
The business answer to adopting automative processes haven’t been figured out in this industry.
Conclusion: Yes, generative design is GOOD for space planning but soon it will be GREAT…
The generative design tools we already have can do a lot to supplement a good designer but there is still a way to go before they can design space plans on their own.
One of the limitations of having a computer generate designed space plans is that we are not providing it with the right type of parameters and information. For now, we can give the computer numbers and maths and it can calculate sqft and provide basic area maps, along with some other cool things; but, it isn’t designing a sellable space plan…yet. This is where machine learning, big data and AI step in.
With developments in AI, neural networks and big data we are closer than ever to being able to teach the computer how to generate options more similar to how we humans do. Today the computer generates random iterations of a variable set but we need to teach the computer how design. To do this we need to find the core values we hold in design and practice those values with an AI.
For example, in space planning adjacencies are very important. We are given some of these adjacencies by the program or the client but that only takes us so far. We can feed these adjacencies to the computer which will limit some of the options but there are still a ton more that the computer will generate and that we have to sift through. Many rules of space planning are learned with experience and human intellect. As designers, we know that the restrooms shouldn’t be placed along the glass curtain wall but the computer doesn’t. As humans, we know that the restroom is a private place so placing it in such a visible and prime location is not acceptable. We know this, not necessarily, because we were told; rather, we feel this way because it is what we have seen over and over again. By this same principle, we can teach the computer that restrooms shouldn’t be placed on the curtain wall by feeding it a lot of good space plans. And when I say a lot, I mean a big data amount i.e. 10,000, not 100. It will recognize and repeat the patterns in a similar way to how we do. The more we do it, the better it will get. It will then start to recognize patterns that we couldn’t see and eventually become a very powerful tool that knows the sensitivities of creating a good space plan.
The beauty of this in a creative industry is that each AI will be different the same way that humans are different. The AI will be a reflection of the person or dataset that is influencing it. Creativity is relative and we will still see this in an artificially augmented world.
The technologies on the rise will broaden our horizons by an order of magnitude. Although I agree that they are still a while away on a grand scale, in all four of the speakers we are seeing the grassroots projects that will pioneer the industry forward.
A popular design for walls and ceilings these days is to create a random assortment of blocks or other shapes that create depth to a previously flat surface. We will learn how to create a system like this in grasshopper.
Create and divide the boundary surface into panels
First, we need to define the extents of the wall or ceiling element by creating a surface. From here we will divide the surface into panels.
To do this with native grasshopper components we use the isotrim (SubSrf) component to create a grid of panels from our surface. Isotrim takes a base surface and a domain to calculate the new surface. Rather than constructing a new domain, which will just build another surface at the u and v dimensions within our existing surface, we want to use the divide domain^2 so that we divide the two-dimensional existing surface into equal components. After plugging in the domain to the isotrim component we can see the grid but do not have access to the individual cells so we cannot manipulate them yet. For this, we need to use the Deconstruct Brep (DeBrep) component which will output the faces, edges, and vertices of our new divided surface parts. Before moving on to the extrusion of these faces, we want to make sure we flatten the faces output so we can manipulate the faces individually. Right click on the F output variable and select Flatten. We will dive deeper into this in the extrusion section.
Using the Lunchbox components for easy paneling different panel shapes
Another and much simpler way to create panels from a surface is to use the lunchbox component which can be downloaded from the links below. Not only is it much simpler, but you can also create many different panel shapes such as diamonds, hexagons, and variable rectangles.
Randomly extrude the blocks from a list of specific depths
To create our blocks we will simply extrude the faces by a certain dimension in the direction perpendicular to the plane we are working in. The XZ plane was defined earlier when we created our initial surface so we will want to extrude in the Y direction with a Unit Y vector.
For the factor (value) input into the vector, Grasshopper has a random component which will give us a list of unique random numbers within a domain but this list will include a lot of different decimal numbers which are not easy to build. For example, if we set a domain between 1 to 6 we will get a list of numbers including 2.006, 4.739, 5.713, etc… These numbers are not easy to build to so we will want to round the output in order to get clean integer numbers.
Create a labeled diagram to show which blocks are at what depth
Now that we have our finished block wall we want to provide information to the builder on which blocks are at which depths so it can be constructed. To do this we use the Text Tag component which takes a location and text to display. For the text, we will plug in our list of depths created at the end of the last section. We will place the text at the center of each box so we will use a Polygon Center component to gather the center points of each box. Once we have a pattern that we are satisfied with we can bake the text tag component to see our numbers populate over the geometry and now we have a diagram that can aid in the construction process.
Pieces of this script can be applied to many different projects so I’d recommend saving this in a folder to access later. Also, if you’d like to try to take this project one step further and use a curve attractor to manipulate the depths of the boxes in a more strategic way, check out my tutorial on curve attractors and see if you can apply that information here!
A few months ago I was asked to create a custom wall graphic for a project and it provided the perfect opportunity to use grasshopper at work. We design spaces for this company all over the country and they always have a custom design that expresses their key values at the reception of their office space. The design always includes the same value in text and an associated logo; so, by creating a grasshopper script we will be able to design a multitude of unique options for all of the offices around the country.
One of my favorite things to experiment with in grasshopper is attractors because the concept can be applied to many different applications to provide a unique look. For confidentiality reasons, I will be using a different logo and text.
We will be creating a grid of geometry that scales based on a curve attractor in order to get a set of geometry that responds to a central set of text.
I will be using the LunchBox for grasshopper plug-in to create the grid structure which can be downloaded from either of the websites below. Grasshopper has some built-in functionality to create grid arrays but I personally prefer the lunchbox component for this.
Once you have lunchbox installed, open up Rhino and Grasshopper and let’s get started.
Create the wall boundary and grid for the array of the logo
The first thing we want to do is to define the boundary for the graphic and create a grid that will host all of the individual shapes. Because I am designing the graphic for a defined wall size and shape, I will draw this boundary in Rhino and set the curve in grasshopper. I am using a 9′-0″ x 13′-0″ rectangle. In grasshopper, I will then create a surface from my boundary curve and apply a grid to it using the lunchbox diagonal grid component. By hovering over any of the input/output variables on a component, you can figure out what type of information the variable is asking for. We will use number sliders to define how many rows and columns (U &V divisions) that we want in our pattern. Once we have our grid we will use a point component to get a list of all of our points.
Note that any surface can be used at this stage, even 3-dimensional surfaces created in Rhino.
Remove points along the edge of the boundary curve
After creating the grid of points, you will notice that some of the points fall onto the boundary of the curve. We are creating a graphic that will be printed on a material (film in this case), so we do not want any geometry on the boundary because it will be cropped when printing. To remedy this we will create a boundary cull which will delete/ignore any of the points that intersect the boundary curve.
The boundary cull does the following:
Test if the points are outside the curve (0), intersecting the curve (1) or inside the curve (2) with the points in curve (incurve) component.
Integer divide the incurve results so we are left with only 0’s & 1’s. 0 will represent false, 1 will represent true. Note: you must use integer divide rather than divide so that we get a 0 instead of a 0.5 when dividing the incurve results by 2.
Use a cull pattern component which will assign a point to the 1 (true) values and not to the 0 (false values). This, in essence, removes/ignores any point that is intersecting our boundary curve.
Draw the logo geometry in Rhino and move a scaled copy to each point
When first getting started with Grasshopper, an important thing to remember is that you don’t have to create everything in Grasshopper. For our logo, we most likely want something that is not a basic shape and is much easier to freehand draw in Rhino. This shape would take much more time to create in grasshopper and there is no reason to do so. I have drawn the bowtie shape below with a polyline but you can use any shape you’d like. When using a polyline it is easier to find the center of the geometry; however, if you need a curve or set of curves for your geometry it requires a few more steps. For this, you need to create a bounding box around your geometries and find the center point of that box for use in the next section.
Once the shape is drawn we will create a scaled copy of the geometry at each point in our grid by moving it along a vector from the center point to our list of culled points from the previous section. In the next section, we manipulate how the geometry scales to get the various sizes.
Create a curve attractor to manipulate the scaling of the geometry
Now that we have the geometry arrayed onto the grid we can use a curve attractor to manipulate how the geometry is scaled when we move it. The basic idea is that we draw a curve across the surface and the geometry will scale to be bigger or smaller depending on how close it is to the curve. We will be using domains and the ReMap component below which can get a little tricky. A domain is a range of numbers from the low point to the high point.
To create the curve attractor:
Draw a curve in Rhino that intersects the surface and use the curve closest point (Crv CP) component to associate the curve with our grid of points.
Use the bounds component to capture the domain of the distances of the points from the curve. In other words, we capture a list of how far each point is from the curve and use the closest and farthest distance to create the domain.
Construct a new domain that states the range of how big to small we want the geometry to scale to. For example, we want the smallest geometry to be .125″ (1/8″) and the largest to be .5″ (1/2″) so we construct a domain with a start of .125″ and an end of .5″. We can flip these numbers to change how the geometry reacts to the curve. If the small value is plugged into the A variable of the domain component then the geometry will be smallest at the points that are closest to the curve. If we switch and plug in the smallest value into the B variable, the geometry will be largest at the points closest to the curve.
Remap the distances gathered from the Crv CP component to the new domain constructed in the last step. We want to create a new list of scaling factors based on how far each point is from the curve. We use the ReMap component to do this by taking the smallest distance of a point from the curve and assigning it the smallest scale factor from the newly constructed domain. Additionally, we do the same thing with the farthest point from the curve and assign it to the largest scaling factor from the new domain. All of the other point distances scale relationally between those two extremes. The output of the ReMap component is this newly constructed list of scaling factors that are directly related to how far each point is from the curve. We then take this list and plug it into the scale component.
Add text in the middle of the geometry
The last item is to incorporate the key values into the design. The idea is to have text in the middle of the pattern that the geometry radiates outwards from. To do this we will repeat the same points in curve series from the boundary cull section; however, we will invert the pattern so we remove any points within the middle area of a circle where we want to have the text. Once we have our new list of points we will replace that list with any variable that was hosting our previous points list.
To get the radiating effect, we will change the curve attractor to the new circle in the middle of the graphic so the geometry is larger at the circle and gets smaller as it moves towards the edge of the wall.
Finally, we add our text in Grasshopper and the pattern is ready to bake and export to Cad, illustrator or any other file type needed.
Learning how to program teaches you how to think logically the same way that practicing architecture teaches you how to think spatially. It teaches how to approach large problems and break them down into small manageable pieces which is a skill that any profession can benefit from.
Programming parallels architecture in the sense that simplicity is best, less is more & creativity is key.
There are many reasons one should learn to program as an architect, including:
enhanced use of computational design programs like Grasshopper, Rhino, and Dynamo through the use of scripting
creation of plug-ins & macros for Revit and other BIM / Modeling programs
writing animation and other scripts for virtual reality in programs like unity
learning data visualization in order to visually explain metrics that back up the design
I have been passively learning to program for about 2 years now and although I am still not comfortably able to do most of the items above, I am getting better with each exercise and I find that often I can translate knowledge from one program to the next.
Below is a quick look at the progression of steps I’ve taken on my journey:
Learning to use parameters (Revit, Grasshopper)
I wouldn’t really call this programming but it gave me exposure to the concept of providing the computer with instructions and seeing a malleable result. This completely revolutionized the way I work. All of a sudden I’m able to create something that’s computationally precise, specifically what the client needs, and flexible for experimentation and design. This is the power of BIM (Building Information Modeling). I still remember the first parametric model I made, a parametric louver family in Revit. I was captivated by the idea the computer would automatically update the changes based on variables I had set up in real time. I could experiment with the size of the louvers, the spacing, the quantity, the material, and the shape in a non-destructive manner, meaning I could go back and forth between options just by typing in different numbers. My mind was truly blown.
Codeacademy – HTML & CSS
I went through a few other ‘start to code’ websites but this was the most effective and it kept my attention long enough for me to finish it. Again, I wouldn’t call HTML or CSS programming but it explained the way that you talk to the computer in order to get output. For example, creating a reusable template of text styles like size, bold headings, italicized quotes that I could apply holistically to a document without having to select each one and change its properties individually anytime I wanted to make a change. Additionally, I learned about text editors and what writing code is in general.
Although the markup language was a good stepping stone to learn, I was more interested in learning about functions and variables so I could start to program inside of the modeling software. Python was recommended to me as a simple language to learn and one that worked with Rhino. I found a fantastic online course through edx.com that taught the fundamentals of the language and programming in general. By the end of the class, I was able to program simple games and tools with ease.
In addition to the beginner class, I also took a course on Python for Data Science which really opened my eyes to how the computer actually translates code into vectors and shapes. This made grasshopper much easier to comprehend.
Once I learned python it was much easier to make sense of C#. By no means am I an expert at either of them; frankly, I’m still very much a beginner, but I can confidently say that I know how to program. I began to learn C# while taking an online class about Virtual Reality Development using Unity from Udacity. I have primarily used the language to program animations in unity but am excited about learning to use c# with Grasshopper and other software.
Scripting in Grasshopper
The Designalyze blog has a quick and easy intro to C# scripting tutorial set that gave me the basics of how to write simple scripts in grasshopper. If you have exposure to programming and C# this will be a breeze; if not, it may seem a bit confusing but immediate visuals help to clearly show what the code is doing. The nice thing about scripting in grasshopper is that there is a text editor directly into the C# component so if you’re new to programming you don’t have to mess around with figuring out which text editor is best and how to run that code.
At this point, I have the basic tools and knowledge to embark on those ambitious goals I mentioned previously. It’s just a matter of starting.
Grasshopper can be a very intimidating software to learn. The tool requires you to look at architecture as geometry and physics rather than as strictly form. This can be challenging because it requires a different mindset; however, if you can get past this hurdle, the tool can be extremely powerful. With Grasshopper, we can iterate infinite possibilities of our designs and strategies in a non-destructive way.
When I was first getting started with grasshopper I recognized all of this possibility but had no idea where to start and was turned off by the complexity every time I opened up the program and tried to learn. Eventually, I gave myself a project to do and committed to somehow bringing grasshopper into the process. Over time, I became more comfortable with the program but I definitely learned some lessons along the way.
There are a ton of resources online, use them.
The only way you’re going to learn is by doing so I recommend either finding a project to do like a design competition or craft object; or, by finding some tutorials online to run through for practice. In addition to the official tutorials, Youtube is a great resource for videos but there are also lots of great learning websites with more robust plans. Below are a few that I have tried and liked.
When starting do not try to create everything in grasshopper
Use rhino with grasshopper to simplify the process when just beginning to learn. Some actions are more difficult and less efficient to do in grasshopper.
example : creating a unique curve shape to use in a pattern. Sometimes with complex curves, it is easier to create them in rhino and then manipulate them in grasshopper. This can also be said for curves that will create a lofted surface. The benefit of this is that you can freely edit the shape of the curves in Rhino without having to come up with a mathematical solution for reshaping the curves.
Say what you’re trying to do out loud if you get lost
With Grasshopper, you need to really understand what you’re components are doing because you are working on a more granular scale than with other modeling software. For this reason, it is easy to get lost along the way and by saying out loud exactly what you are trying to accomplish step by step it will be easier to locate the correct component. If you’re not much for talking to yourself then making a list or mind map will suffice.
example: you want to array a curve (shaped line) along a surface at various points. When modeling you can simply draw the curves (lines) on the surface wherever you’d like and be done with it. This is easy but limiting. Say you don’t know how many instances of the curve you want on the surface, or you’re not sure what the curve shape is yet. This is where grasshopper comes in; however, to do so you have to understand all the steps to
draw the curve
create a grid on the surface
move the curve to the surface grid points using a translation vector
orient the curve to lie flat on the surface using planes or other methods
Catalog your scripts into an organized library so they can be reused when needed
Often we are using the same definitions to do many different projects. When first learning grasshopper you will most likely be doing small tutorials that teach you how to accomplish a specific goal. When doing so it is good practice to save the definition into a folder with an associated image so that you can come back to it later and recognize what the definition is doing for when you want to reuse it in another project. In doing this you will soon have a library of basic definitions that you can reuse over and over again to make future projects much quicker.
Surround yourself with inspiration and motivation to make you think about practicing as often as possible
A few ways to do this are:
Find online resources that you like and bookmark the page so you see it in your bookmarks bar regularly
add the site as an additional homepage to open everytime you open up the internet. Next time you aimlessly open the browser the blog will be present and you’ll be more inclined to check up on what the latest is if you’re looking for somewhere to start.
subscribe to the channel on youtube
my favorite, change the background on your desktop to something related to the goal so everytime you sit down at the computer you think about working on something or getting to a certain point.
The advent of the computer has changed how we design and build. It has created an infinite amount of potential for complexity and purpose in building design. Over the past few years, I have come to realize that architects and designers have no choice but to increase their digital understanding and skill sets if they want to stay relevant in tomorrow’s design age.
The software and tools that we are being introduced to will upgrade the expectations of our output exponentially in the coming years. We will be expected to deliver projects smarter, faster, and more uniquely than we ever have before and the only way to do this will be with a digital design influence. With this in mind, I’ve started the Becoming a Digital Designer series to catalog my growth as a digital designer in hopes that it might help fellow architects and designers navigate the complex and diverse world of digital design.
The core benefits that digital design brings to the AEC (architecture, engineering, construction) industry include
increased efficiency in design and construction
informed and responsive design
creative freedom to express complex form, pattern, and texture
Although there are many firms and professional independents that are boldly experimenting and developing with these emerging ideas, the full potential of this has not yet been realized in the larger industry. In the coming years, we will see a phasing out of traditional methods and an influx of digital methods from the next generation of designers who have a much deeper understanding of digital processes.
What do I mean by digital design?
In the AEC industry, there are many different ways to organize this idea. Below is a good start to understanding some of the different aspects that digital methods bring to the process.
Visualization: how we tell our story and sell our designs
BIM (building information systems)/ 3Dmodeling:: how we document and analyze our buildings
Software/add-ins: How we understand our buildings
Tools that have been developed to optimize, inform and enhance the existing software to provide unique and specific solutions for project needs.
Data capture and analysis: how we inform our designs
Computational design: how we add complexity and precision to our designs
Fabrication: how we build our designs
Electrical/ Hardware engineering (sensor/connected buildings) : how we connect our designs
Simply put, digital design is using the computer to aid and inform the design and construction process. This translates to a variety of methods during the building process from project capture to design development to construction. Below, the diagram illustrates where certain processes may come into play throughout the project.
Most of these digital services utilize new and different skill sets that step beyond traditional architectural knowledge. This will require most professionals to seek training and/or continuing education to attain these new skillsets in order to provide adequate processes and designs. In order to take full advantage of these services, we need to embed experts with these skillsets onto our project teams and get them to knowingly train people on the job. Without this, all the knowledge lives with a few key people and the projects suffer.
I’m not saying everyone has to learn everything; just that the more we learn the better everything gets.
The path to becoming a comprehensive digital designer is quite overwhelming for a beginner due to the many seemingly unrelated subjects; however, if taken one step at a time, the knowledge will develop to a level where the designer feels comfortable using diverse digital design methods at all stages of building design and construction. The hardest part is starting.