Getting Started with Grasshopper
- 1 Download Grasshopper
- 2 Starting Grasshopper
- 3 TOI Course Material Levels Grasshopper
- 4 Introduction
- 5 The Interface
- 6 Modules
- 7 Geometry in Grasshopper
- 8 Working with Data
You can download grasshopper for from the Official Grasshopper website. This site also offers a lot of tutorials, forums and links to other websites.
Starting Grashopper can be done by typing grasshopper in the Rhino command line. Grasshopper will open on top of Rhino.
TOI Course Material Levels Grasshopper
INTRODUCTORY: Introducing basic concepts of Grasshopper, such as:
- Interface & Navigation
- Simple Setup of Definitions
BEGINNER: Learning materials cover all basic concepts of Grasshopper without great depth, such as:
- Basic Geometry (such as Points, Curves, Surface, Breps)
- Data Trees Explanation
INTERMEDIATE: Learning materials cover intermediate concepts of Grasshopper both in breadth and depth.
- Complex Geometry (more complexity than Basic Geometry)
- Parametric Relations (Attractor and Distance-based)
- Data Trees Manipulation
ADVANCED: Learning materials cover advanced concepts of Grasshopper, including:
- Complex Geometry (more complexity than at Intermediate Level)
- Parametric Relations (Performance-based)
- Rationalization & Optimization
- Data Trees Coupling
MASTER: Learning materials cover concepts of Grasshopper at the level of the Master-Thesis, including:
- Complex Geometry (more complexity than at Advanced Level)
- Advanced Data Extraction
- Computational Intelligence
- Exchange of Data using other Softwares (such Revit, ModeFrontier, Finite Element Analysis & Light Simulation Analysis Software, etc.)
Rhino doesn't always keep track on how the model was constructed. Some other 3D modeling application 'remember' for example from which set of curves a surface was created. When you change these curves, the surface will change accordingly as if it was newly created. This is called a history. Software such as Maya and 3DS Max implement the concept of history. It supports the design process by enabling you to go back to earlier steps of the modeling process and change them, thereby changing the end result. Rhino is limited in its support for history.
To address this, the concept of Explicit History was developed for Rhino. This formed the basis of what is now the Grasshopper plug-in.
Explicit History differs from the traditional modeling history in that you explicitly construct the History and thereby the object instead of being the result of a set of commands generating an object. This can be effective in the design process as it enables you to specify complex relationships between components.
Each Grasshopper definition consists of a network of components connected using connections and with sliders as input. Grasshopper uses the Rhino viewport to display the result of the definition.
List of important terminology
This article uses some specific Grasshopper terminology. Here is a brief explanation of the most important terms that are used throughout this article:
- a building-block that performs a specific action
- a special component that contains data (values) instead of performing an action
- a utility that allows the user to choose numeric values using a slider
- a utility that allows the user to define or display numeric values or text
- a network of grasshopper components - your Grasshopper 'model'
To start the Grasshopper plug-in in Rhino, type 'Grasshopper' in the command line. Grasshopper will start up and open an interface window as shown in the example.
The interface contains:
- a row of pull-down menus
- Tabs with Components
- the main workspace or canvas
The canvas is used to create your definition. The definition creates the geometry - your model - in the Rhino viewports. Note that all geometry generated by Grasshopper can't be selected and modified in Rhino. Geometry created in Rhino however can be used by Grasshopper. We'll get back to this later.
Navigation in the Grasshopper Canvas:
- Pan (move sideways & up/down): RMB click + drag
- Zoom: CRTL + RMB / scrollwheel
Navigation in Rhino viewports:
- Pan: Shift + RMB
- Zoom: Ctrl + RMB
- Orbiting around the model: RMB click + drag= Orbiting around the model (only possible in a 3D view, ie. Perspective)
Grasshopper uses a common layout with a pull-down menu bar at the top. You'll find a menu structure that is used by most software (File, Edit, View, Window). These menu's provide functions to open and save files, control how definitions are displayed and more. We'll get to these later. Right now the only menu that you need to worry about is the File menu.
The file menu contains the traditional options for saving and opening files. Note that Rhino and Grasshopper files are always separated. You save your definition in the Grasshopper window. If you have used Rhino geometry as a basis for your definition, you have to save the Rhino model separately in the Rhino window!
In the Edit option we have the standard copy, paste and selection options as well as the options of grouping. Grouping is essential when the complexity of the network increases
- The group is often a set of parameters / components / specials which generate a well defined function within the network. The group can also be defined by selecting the parameters , components and/or specials and press CRTL+G on your keyboard. Right clicking with your mouse in the box of the group gives you access to the appearance settings of the box.
View contains the display settings of the interface. It enables you to alter the appearance of the interface. Zoom options can be found also in the menu.
Display contains the display settings of the workspace. It enables you to customize the appearance of the construct and the geometry.
The Solution menu contains the settings for the calculation of the geometry generated by Grasshopper and made visible in Rhino.
- There is a direct link between Grasshopper and Rhino which results in a real-time update of the geometry in Rhino, this is called the preview. This however can be problematic if the complexity of the geometry results in to extensive calculations for the update of the geometry. In this case the update can be disabled.
- To finalize the work in Grasshopper geometry has to be converted into Rhino geometry. This is called baking. The geometry will be completely editable in Rhino after baking. Although the link with Grasshopper still exists the baked geometry is a copy of the Grasshopper geometry at the moment of baking. Any alterations in Grasshopper will result in alterations of the Grasshopper geometry not of the baked geometry.
The components (building blocks) are arranged in tabs:
- Vector, Curve, Surface and Mesh
We'll cover these in more detail later on.
Grasshopper is actively being developed, the naming and structure may change from version to version.
Each tab is divided into sections to group similar building blocks. Each section shows the most-used blocks. The arrow at the right-hand side of the black section title bar allows you to expand the section to show all available blocks.
The Canvas Toolbar
The icons bar beneath the Tabs contain the functions for representation of the definition and its related geometry in Rhino.
Basic navigation is mostly done by the mouse and keyboard, which was covered in the previous section. Navigating the canvas is also supported by various zoom and pan tools in the toolbar.
The right-most icon allows you to save the current view or restore previously saved views.
Most Grasshopper components create new geometry, which is displayed in the Rhino viewports. This is called the Preview. In a larger definitions, most components only create intermediate geometry, which you don't need or which may even clutter the end result. Generating previews uses a lot of processing power, so when possible, disabling preview of components is recommended.
The large window contains the canvas on which the definition is built. Geometry is not visible in this window. The geometry will be represented as a Brep in Rhino. Navigation in Grasshopper is similar to Rhino.
Grasshopper uses a variety of modules which can be interconnected to generate the Explicit History. There a 3 types of modules.
- The parameter
- The component
- The utility or special
When you design in Grasshopper you will use these modules to generate the geometry. There are a wide range of modules available which can be combined in various ways with each other. Within all the possible modules you can use are modules which allow you to define values for a range of inputs for modules. This will give you the possibility to steer the final result of the definition (your network of modules) which is the geometry.
As mentioned earlier in the introduction you construct the generation of the geometry step by step. That means that when you start using Grasshopper you will often first analyze on how to build the required geometry. What steps do you have to make. Keep in mind many functions in Rhino like drawing a curve are supported by manual input of the mouse. Or settings of that curve can be changed in the command line. In Grasshopper you don't have that option. You will have to define every step of the process of generating geometry with the help of the modules. Drawing a line is not selecting the curve function and then click with the mouse to define the curve, instead it is a process of defining the points of the curve and then generate a curve from those point. This will take some additional effort, however it allows you to define the points in such a way that you can easy alter them afterwards, in this case with the help of a set of number sliders.
To see what functions the parameter icons represent please go to the link above.
The organization of the tabs follows the logic of constructing geometry within Grasshopper. The first Tab is the Parameter Tab. The Parameter tab enables you to define geometry and primitives. The specials contain parameters like the number slider and the panel. These specials are defined to support the workflow. The Parameter divers from the components of the other tabs because a parameter primarily contains data. A parameter doesn’t modify the stored data it will only define the stored data in the network. It works like a filling cabinet.
Parameters primarily contain data, they don't perform actions. This data can either be used to serve as input for other components or it can be displayed (Panel, Graph). Data can be existing geometry (from Rhino), numbers, text or colors. Geometry parameters are used when you want to use existing Rhino geometry in your definition.
Defining the parameter
When a parameter is placed on the canvas the colour is orange, the parameter is empty. The parameter can be dragged onto the canvas or selected in the tab and clicked in the canvas. When the parameter is placed on the canvas it doesn’t contain any information. To define the parameter geometry or a primitive has to be defined. It is possible to define one or multiple similar types of geometry or primitives within the parameter. To define a single or multiple geometrical objects, right click on the parameter and use the selection option.
To define the parameter click on the Select one or multiple objects depending on the amount of objects you want to define in the parameter. There are two options of creating content for the parameter. It can be defined in Rhino or in Grasshopper. This will depend on the mathematical description of the geometry in Grasshopper. If this is similar to Rhino the geometry can be defined in Rhino. If it not similar , for example with the definition of a circle, the geometry is made within Grasshopper.
Parameter defined in Rhino or Grasshopper
The geometry of the Parameters can be defined in Grasshopper or Rhino. A circle for example has to be defined within Grasshopper because the definition of a circle in Rhino differs from the parametric definition of the Grasshopper circle. This difference in definition will depend on what Parameter is defined. A point for example can be defined in Rhino as well in Grasshopper. This difference in definition will dictate the possibility of changing the geometry later in Rhino and not only in Grasshopper. Although this seems trivial, it will greatly influence the design process and the capacity to effectively alter your design geometry. If the content of the parameters is defined in Grasshopper, the options of modifying the geometry in Rhino itself will be lost. If however the content of the parameter is based on Rhino geometry the geometry can be altered in Rhino resulting in a modification of the whole Grasshopper geometry.
The curve is made in Rhino, the loft in Grasshopper. Altering the curve in Rhino will alter the loft which was generated in Grasshopper.
Each component performs a specific action. Most components require an input and provide an output.
For example: the Loft component creates a surface between two or more curves. So it has an input to specify which curves should be used for the loft. The output specifies the surface (or surfaces) that is created by the component's action.
The output of a component can be connected to another component to serve as an input. In our Loft example, the output (a surface) can be the input for the Divide Surface component, that subdivides any given surface. Or it could be fed into a Move component creates a moved instance of the input geometry.
This is in essence how designing your Grasshopper definition works. You use components (inputs and actions) and connect them to other components to generate or manipulate geometry. A Grasshopper definition is in essence a cookbook that represents your design idea.
Hovering with the cursor over the input or output of the component displays the properties of the input or output. If you want to change the settings of the input or output RMB-click on the input or output. RMB-click on the components name to switch a component on/off or to switch the Preview on/off.
To connect a component to another component, LMB-click the output and drag to the input of another component. To disconnect use the CRTL + LMB and drag the connection in the opposite direction. Alternatively you can RMB-click an input and use the context-menu to disconnect.
The result is a network of relations and parameters defining the design geometry. The network can be edited and extended during the design process. The design geometry will change accordingly.
The specials contain a variety of functions which support the easy access and manipulation of the network. We can in some cases also use a Special for the input or output of a component. The most used are the
- Number slider
- The Panel
The number slider will enable you to define a number within a certain range and type. If you want to be able to move a curve of a loft , you can add a transform component to the curve and manually define the transformation with the help of the slider.
The panel will give you feedback on the output of the components. This can be of use when you want to explore the list you want to edit. Using Panels to display data is very useful to debug you definition. If something doesn't work properly of behaves differently than you expected, you can use Panel components and connect them to the output of components at various locations in your definition to try to understand what is going on.
Geometry in Grasshopper
Please look at the page of the Introduction Grasshopper Geometry. On this page you will find essential information of the geometry which you will use in Grasshopper. It is important that you know the terms used in defining the components of the geometry, because you will often build geometry from scratch.
Grasshopper is used to create definitions which produce 3D models, represented by geometry in Rhino. So to work with Grasshopper you need to have at least some basic understanding of geometry in Rhino. Grasshopper primarily uses NURBS geometry. NURBS geometry is not unique to Rhino and is used in various other software packages like Maya, Catia etc. NURBS geometry is mathematically defined, therefor very suitable for use in a parametric system. It enables you to get information on each point or part of the geometry. The strength of Grasshopper is that it can extract accurate data from geometry for analyses or for generation of additional geometry. Of course you need to know what you can extract from the geometry. Therefore knowledge about the components of the geometry is crucial. There is also another issue you will have to content with. You will have to define every step in making the geometry in Grasshopper. That also means that rotation, moving and scaling an object also requires an accurate description of direction, axis or starting points and amount.
Working with Data
A Grasshopper definition is all about components, their actions and the connections between components. These connections carry information throughout the definition. This can be simple numerical values, or references to geometry such as points, lines and surfaces.
Of course it's crucial to carry information from one component to the next, but there is a little more to it. The way this information is organized, is crucial for Grasshopper's understanding of how to interpret the data.
For example: If you have a list of 10 points and you want to create a line, the most obvious solution would be to create a line through all these points. But those 10 points could also be used to create 5 lines, each between a set of two points.
Grasshopper doesn't use names for it objects, it will use a list of numbered objects. It is sometimes hard to see what object a number in a list represents. These list however have a mayor advantage. Because they objects are defined in the lists
A computer won't magically know what to do, so organization of the data is crucial. The information has to be structured. Grasshopper uses data-trees and lists to structure data.
How the data is structured can be seen in the way the connections between modules are displayed . Yhe connections can be displayed in three ways:
- a single line
- the connection carries a single value
- a double line
- the connection carries a list of values
- a double dashed line
- the connection carries a list of lists
As you will discover, this is a key part of Grasshopper. For more complex definitions you really need to grasp the principles of data trees. But don't worry. In this stage we will try to avoid all but the simplest manipulation of data trees and lists.