Mac Pro Texture in Grasshopper – Student Project Review

Mac Pro Grille Texture in Grasshopper: Student Project Review & Tutorial
Recreating the iconic Apple Mac Pro “Cheese Grater” texture in Grasshopper is an interesting exercise in parametric modeling, staggered patterns, and Boolean operations.
Download File
In this first episode of our Student Project Review series, we explore a project submitted by Connor Harris, a student from our LIVE Grasshopper and Advanced Parametric Texture courses.
We'll break down his Grasshopper definition, explain how the perforated geometry was constructed, and share a few improvements to make the script simpler and more efficient.
Step 1: Creating the Base Geometry

The process begins with a simple box in Grasshopper.
Connor extracts the four corner edges and applies a 4 mm fillet to soften the geometry. He then offsets the solid inward to create two separate volumes: the external body and the internal volume.
Next, he extracts the front surface, scales it slightly inward, and uses the LunchBox Quad Panels component to generate a staggered grid. The centroids of these panels become the reference points for the perforation pattern.
Step 2: Constructing the Mac Pro Perforations

The distinctive Mac Pro grille is created using a series of overlapping spherical cuts. Connor first generates spheres at the staggered centroid points and subtracts them from the base geometry using Solid Difference.
To create the internal cutting shapes, he calculates the radius of a circle passing through three neighboring points. This radius is then used to reposition additional spheres along the Z-axis. A second Boolean Difference produces the interconnected internal geometry responsible for the grille's characteristic appearance.
Step 3: Adding a Parametric Attractor Effect

Rather than keeping every perforation identical, Connor introduces a curve-based attractor to control the sphere sizes. Using Curve Closest Point, he calculates the distance between each centroid and the attractor curve.
These distances are then remapped to a defined radius range, such as 0.8–1.8 mm, allowing the perforations to gradually change size across the surface. By reversing the remapped values, the attractor effect can also be inverted.
Step 4: Improving the Grasshopper Script

During our review, we identified a few opportunities to simplify Connor's original definition without changing the intended geometry.
1. Simplifying Point Positioning
Instead of deconstructing the brep, we can simply use the Area Component to find the centroid as well as the area of the panels and compare them against a number to filter the corner panels that has smaller areas.
2. Calculating the Radius Parameter
Connor originally used Partition List and Sub List components to extract the points to make the Circle.
By using Closest Points, we can extract the three closest corner point and use the Circle Fit componet to get the radius value.
3. Combining Boundary Filtering
Connor originally filtered points near the upper and lower boundaries separately.
By using Pull Point with multiple boundary curves, we can evaluate both boundaries simultaneously and remove unwanted points using a single Cull Pattern operation.
Learn Parametric Texturing with Cademy
This project demonstrates how Grasshopper can be used to develop complex surface textures through procedural geometry, attractors, and Boolean operations.
In our LIVE Grasshopper 3D Masterclass and Advanced Parametric Texture Workshop, you'll learn these techniques through practical exercises, interactive instruction, and personalized project feedback.
