An introduction to the field of computational design, along with an overview of its main tools and applications

This guide will introduce you to the exciting field of computational design and show you some of the tools you can use to create your own computational workflows.

Computers have been integral to the design profession since the emergence of the personal computer in the early 1980s. Nowadays, nearly all design professionals rely on specialized software like AutoCAD, Revit, Solidworks, and Rhino to do their day to day work. These applications offer graphical user interfaces (GUIs) which abstract away the underlying computer code, making the software easier to use but also limiting its flexibility.

Computational design goes one step further. Beyond just using off-the-shelf software packages, computational designers write code or use other programming tools to either customize existing tools or create entirely new ones tailored to specific design needs. While computational design requires some level of programming knowledge, you don't have to be a coding expert to get started. You also don't need to code an entire CAD software just to test out an idea. These days, most CAD software allow for running custom code through virtual code editors and custom plugins, so you can start creating computational design workflows without a single line of code (or with just a single line of code). Once you learn the basics, you can decide whether you want to invest more time to learn more and become a better programmer, at which point the opportunities and resources available to you are almost boundless.

Computational design is a rapidly evolving field with various applications across the architecture, engineering, and construction industries. Some of the most prominent use-cases include:

Traditional design software represent designs as fixed two- or three-dimensional objects. With parametric design, we represent the process to create a given geometric solutions as a sequence of smaller operations (this sequence of steps is sometimes called a "workflow"). Representing a design this way allows the designer to expose certain parameters that can be used to adjust the design. This means the model can be adapted to changing conditions or requirements without needing to rebuild the entire model, which can save a great deal of time and effort.

Traditional design tools require you to model the geometric form of a design manually using a set of tools. This means there is a limit to the formal complexity that can be represented, and each design needs an equal amount of effort to generate. With computational design, instead of manually playing out a set of operations for each design, we encode those operations using a computer programming language like Python or a visual programming tool like Grasshopper. This allows us to run a large number of operations quickly and automatically, which can be used to generate designs of much higher formal complexity than what can be efficiently created by manual methods. If an approach is generalizeable, it can even be developed into a custom tool that can be applied to any input geometry (for example the triangulated facade system in the image below).

Computational design workflows can be used to automate repetitive tasks in a design process, allowing for more efficient workflows. Advanced algorithms like optimization and machine learning can even generate and analyze a large number of potential designs and automatically deliver the best solutions.

Computational design methods allow for seamless integration with another application of computation for design - computer-driven simulation. Connecting a computational workflows to a simulation software can allow for exciting applications such as automatically optimizing the form of a building to maximize daylighting while minimizing solar gain, or optimizing the structure of a tower based ona set of forces.

To start to utilize computational design in your own design process, you need a new set of tools, as well as a new set of skills. Although there are now a variety of different tools out there you can use for computational design, in this set of guides we will focus on the 3d modelling tool Rhino and Grasshopper - a visual programming language built for Rhino.

Rhino and Grasshopper are industry standard software used across a number of design disciplines from jewelry design to interior and building design. One big reason for Grasshopper's popularity is that it does not require writing any code, which can be daunting for designers starting out with computational design. This makes it easy to get started with simple workflows before committing the effort to learning a more robust programming language like Python.

While being a relatively easy tool to get started with, Grasshopper is also extremely flexible and extensible. Not only does it support the development of custom plugins but the integration of code in several languages including Python. This means Grasshopper can be both the first tool you learn, as well as the platform that continues to support your projects as they grow in complexity. These features have made Rhino and Grasshopper the go-to platform for computational design in both research and practice (and is the reason the author has been using these tools for over a decade).

Forgetting design for a moment, let’s consider how we could use visual programming to describe a simple formula: `y = 2x + 3`

:

Going in the order of operations, you first pass a variable x and the number 2 into a function that multiplies them together. Then you take the result of that function and the number 3 and pass them into another function that adds them together. The result of this function will be the solution to the formula, y. In Grasshopper, the definition would look like this:

Pretty straight forward, huh? It’s amazing that all Grasshopper definitions are composed of only these two types of elements: *components* that define small operations that do stuff, and connecting *wires* that pass information between the components.

Since Grasshopper is a design tool, it cannot be limited to simple mathematical operations. Luckily, since Grasshopper is built on the 3d modeling software Rhino, it has access to all of the geometric functions contained within Rhino, and allows us to access these functions within our definitions. The combination of its intuitive visual programming interface with Rhino’s best-in-class geometry library makes Grasshopper a powerful tool for computational design and by far the most popular computational design tool used today.

When you first learned how to model geometry in a CAD software, you probably used a visual UI to perform many of the operations. For example, if you wanted to make a box, you would run the "box" command, which would give you a series of instructions to follow for making the box. First, you would click on a point in space to specify the first corner of the box, then click another point to specify the other corner of the base, and finally use your mouse to visually define the height of the box. This is a very visual and intuitive way of making geometry in the computer, and matches the traditional way of working with physical materials by hand to create form.

*Box created in Rhino using the visual interface*

If you wanted to be more precise about the geometry, you could start to enter exact values for some of the dimensions. For example, you could specify exact coordinates for the base point of the box. You could also use the desired width and length of the box to calculate the second corner point, and finally enter an exact height for the box. Now the box is precisely defined through data, without relying on any intuitive input. Most designers use a combination of these two methods:

- Intuitive visual modeling for generating initial concepts, and then
- Adjusting exact dimensions as the model is refined

*Box created in Rhino based on exact dimensions*

When you work with computational models, you have to define everything about your design through data and functions, without relying on a visual UI at all. Creating form this way can be a challenge for many designers, since it requires not only knowledge of computational design tools such as Grasshopper, but a good working knowledge of fundamental geometric concepts such as vector math and trigonometry, which are not typically taught as required courses in design schools.

*Box created in Grasshopper by defining a system of variables and operations*

The goal of this guide is to give you a basic introduction to Grasshopper so you can continue to develop your knowledge over time with more intermediate and advanced courses. However, once you get past the initial technical learning curves, true success with computational design relies not just on knowing the tools, but also in a change in how you think about design itself.

Traditionally, design was a highly intuitive and visual process, where the designer started with a base material and crafted it through a series of operations while getting direct visual feedback about what they were designing. With computational design, things are a bit different. Since computational design involves designing systems and not objects directly, there is not always the direct physical input or visual feedback to guide the process. Instead, computational design requires the designer to think of design problems *systematically*, break them down into smaller solvable parts, and then solve those smaller problems using the computational tools (such as Grasshopper) that they have at their disposal.

Because of its reliance on math and connection to computer programming, computational design is often thought of as more analytical and less intuitive than traditional design methods. However, there is still a large amount of intuition and creativity involved with designing computational models properly to ensure that they achieve the desired outcomes. This change of mindset, or learning to think through design problems analytically, systematically, and computationally, is often called *Computational Design Thinking*. This new way of thinking about design relies on learning some new technical tools such as computational geometry and computer programming, but it goes far beyond that. Learning the tools and techniques of computational design will not only make you a more skilled designer, but will give you a new way of thinking about design and your creative process.

The following guides will introduce you to the basics of both Grasshopper and Python, focusing specifically on their applications for computational design. Here are some guides and webinars you can check out next: