What is computational design, and how is it different from using computer programs for design?
In this guide you will get an introduction to the field and practice of computational design, both how it's defined and the tools and techniques which compose a computational designer's toolbox. If you are reading this introductory guide this may be your first interaction with computational design, or you may already be familiar with the basic concepts but hoping to acquire new skills. In either case the goal of these tutorials is to build a foundational set of skills in programming and algorithm development so you can get a sense of the day to day work of a computational designer, paired with enough theory and background to give you a sense of what's possible once you've mastered the tools and techniques of computational design.
By the end of this guide you will learn:
Computers have been integral to the design profession since the emergence of personal computers in the early 1980's. 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.
If that sounds intimidating, you should know that while computational design requires some level of programming knowledge, you don't need 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 you to integrate custom code through virtual code editors or custom plugin development, so you can start creating computational design workflows without a single line of code (or with just a single line of code).
Although computational design is still an emerging and rapidly evolving field, a set of common applications have emerged over the past few decades which often find use for a computational tools and approaches. 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 solution 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 CAD tools require you to model the geometric form of a design manually by applying a series of pre-defined operations, each of which require some manual input. This manual effort puts a limit on 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 enough, 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 a more efficient design process. 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 computational workflows to simulation software unlocks 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 on a 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, these guides will mostly focus on the 3d modeling 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. It supports the development of custom plugins using its native C# language as well as running scripts in several programming 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 and requirements. 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:
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 these guides is to give you a basic introduction to the tools of computational design 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: