Have you ever watched leaves scatter randomly on a windy day or admired the spontaneous pattern of raindrops on a window? Nature has a way of introducing chaos that results in beauty. In the world of digital design, harnessing such randomness can add depth, spontaneity, and uniqueness to our creations.
Enter the Random component in Grasshopper, a command that brings the serendipity of nature into the precision of design, allowing us to sprinkle in unpredictability to our well-structured digital worlds.
Curious about how this magical component can elevate your designs? Let’s dive in!
Adding the Random component
Let’s start with the basics – adding the component to your Grasshopper script. Find the ‘Random’ component in the ‘Sets‘ component tab, in the ‘Sequence‘ group. Select it and click anywhere on the canvas to add it to your script.
If you prefer to use the component search bar, simply double-click on the Grasshopper canvas where you want the component to be placed, and type “random” into the search bar. Then click on the first result to add the component.
Inputs and Outputs explained
The Random component in Grasshopper generates a sequence of randomized numbers. There are three ways we can influence these numbers, as controlled by the three inputs:
The Range (R) input controls the numerical domain the generated numbers should be in.
The Number (N) specifies the number of random values to generate within that domain.
And the Seed (S) controls the “starting point” of the randomly generated numbers.
By default, the Random component comes with a predefined Range of 0 to 1.00, and a number of values to generate of 1. In the example below we get the random number 0.771094.
The generated numbers aren’t truly random because generating genuine randomness computationally is impossible. In programming the kind of output we are ‘pseudo-random’ numbers. In practical terms, the random numbers we get are randomized, but still quite evenly distributed. Which is actually a good thing for most design applications!
Controlling the Range of Random Numbers
The Range of random numbers is controlled using a ‘Domain’. In Grasshopper, a domain is defined by two values: the minimum and maximum value. To create a domain, use the ‘Construct Domain’ component located under the ‘Maths’ tab in the section titled ‘Domain’.
The component has two inputs: the Domain Start (A) and Domain End (B) values of the domain. These represent the minimum and maximum values of a numerical range. In Grasshopper, its output, representing a domain, appears as:
0.3 To 1.5
Note: A domain is its own datatype in Grasshopper – we can’t just feed two numbers into an input that requires a domain. It needs to be constructed with the ‘Construct Domain’ component.
You can input any numerical values, not just whole numbers, into the Start and End inputs.
Once connected to the ‘Range (R)‘ input of the Random component, the domain controls the range the randomly generated number(s) must fall within. In the example below, the Number (N) of values to be generated is still at the default of ‘1’.
The Seed input explained
To generate the numbers, the Random component takes the ‘Seed (S)’ input (which is simply a number), and then runs an algorithm that generates a set of randomized numbers within the defined domain. The Seed is the starting point – hence the name.
Why control the Seed? Well, in most cases, we don’t need to. But it comes in handy when we aren’t happy with a set of random values: we can add a number slider and change the ‘Seed’ number, to get a different set of random values.
In addition, the Seed input is also a powerful tool to control how many sets of random numbers to create. For instance, sometimes we want multiple sets of random numbers within a domain, not just one. Adding several seed numbers and grafting the input, will result in several lists, all with different sets of random values. Quite handy!
Now let’s see how to use this component in an example!
The Random component is a powerful tool to create variation within a field of objects. Here’s an example of how you might use the Random component:
Imagine we want to create the following effect: We want to generate circles of randomized sizes in a grid. The parameter we’ll want to define is the range of the largest and smallest circle.
The basic setup is as follows. I referenced a surface modelled in Rhino to a Surface container component. In the example the surface is 30 units high, and 45 units wide. The surface is then ‘divided’ with the ‘Divide Surface’ component, which generates a grid of points on the surface. The number of points in the U and V direction can be controlled by a number input in the U and V inputs. For this example I’m sticking with the default value of 10 for both.
The Points (P) output contains the grid of points, organized in lists by row. Next I added a ‘Circle’ component, which asks for the center point of the circle, and a radius. The grid points will be the center points, and for now the output shows circles with the default radius of 1.
Finally I turned the closed planar curves into a surface, by connecting it to a surface data container (to get a shaded circle).
Using the Random Component to Generate Variation in Grasshopper
Now let’s add the Random component to introduce some variation in the size of the circles.
We’ll also add a ‘Construct Domain‘ component to define our minimum and maximum values for the radius, which we’ll control with two Number Sliders. We’ll connect this domain to the ‘Range (R)’ input of the Random component.
At this stage we are generating a single random value within the Domain we specified. As a result, all the circles are still the same size: they share the same radius of 1.225313.
Creating the Right Amount of Random Values
To generate as many random radius values as we have circles, we need to first get the number of points we have in our grid. Let’s use the ‘List Length‘ component and get the list length of the Points (P) output. And connect it to the Number of Steps (N) input of the Range component.
The output doesn’t quite show what we wanted: we are getting random circle sizes, but the same values repeat for each list in the grid’s point output.
Why is that?
The reason is that the List Length component returns the length of every one of the lists in the Point (P) output (a length of 11). Since these identical lengths are stored in separate lists, we are asking the Random component to generate 11 values within the Range we specified, but here is the crucial part: using the same Seed (S) input. This means that for every one of the 11 random values, the same starting point is used, leading to the same output.
There is two ways to fix that: we can either generate as many different Seed (S) input numbers as we have lists, or we combine all the points in a single list, that way one Seed (S) value will be enough.
In this example, it’s easier to combine the points into a single list. To do so, right-click on the Point (P) output of the Divide Surface component, and click on ‘Flatten’.
Once the point list is flattened, the List Length component returns the total number of points, which in turns gives the Random component the instruction to create 121 random values.
We’ve successfully implemented the Random component to create variation!
The Random Component in Grasshopper – Final thoughts
Embracing randomness, as we’ve discovered, can be the breath of fresh air that revitalizes our digital designs. The Random component in Grasshopper allows us to elevate our designs by introducing a controlled unpredictability, mirroring patterns in nature.
If you’ve found this article helpful and you’re eager to dive deeper, our Grasshopper Pro online course is the perfect next step. Fast-track your learnings and harness the full power of Grasshopper, tailored especially for architects ready to elevate their designs. Join us, and let’s create wonders together!