13. A Parametric Object

In this exercise, you will author code to produce a parametrically-defined object.
We will be using OpenSCAD — a programming language for solid CAD objects.
Thanks to Martin Schneider (@bitcraftlab) for the inspiration for this assignment.

Jason Salavon, Form Study #1 (2004)


A parametric object is a “meta-form”: a mutable object, produced by a set of rules, whose properties are governed or articulated by the values of certain variables or parameters. Change the values of the variables, and the form changes in response. Generative design is the activity of authoring such rules (i.e., the code) that generate parametric objects.


  • In this exercise you will write OpenSCAD code which generates a parametrically-variable object. Resources for getting started with OpenSCAD have been prepared for you, here.
  • To get your juices flowing, we will first look at a small number of world-class examples of generative objects in art and design, and then some examples of what’s possible in OpenSCAD; for each of these examples, consider what are the “knobs” that make these designs parametric, and what makes these designs memorable or culturally relevant.
  • After you create your OpenSCAD code, you will be asked to document your project in a variety of ways.

Select two requirements: {Interesting, Beautiful, Useful}.
Be prepared to defend how your project meets those criteria.

Learning Objectives.
Upon completion this exercise, you will be able to:

  • Recognize and demonstrate awareness of basic generative 3D design principles;
  • Use algorithmic techniques to control constructive solid geometry operations;
  • Create generative forms computationally using the OpenSCAD language.
  • Format the documentation of generative objects for optimal sharing with relevant communities of interest.

Inspirations I: Parametric Objects in the work of Jason Salavon

Let’s consider parametric objects in the work of computational new-media artist, Jason Salavon, who has created some generative forms that are both beautiful and provocative. Here is Salavon’s ambiguously suggestive Form Study #1 (2004), a near-infinite collection of generated objects designed to tickle the eye and, perhaps, the body. (Also see the online “toy version“):

In 2007, Salavon created a photo-realistic “dynamic painting” of parametrically-modifiable glassware, in his Still Life II (Glassware). Note that the documentation video below is significantly accelerated; here it is shown at 50x speed. In ordinary observation, the changes would be almost imperceptible:

More recently Salavon has made a parametric mammal skull, in his Still Life (Vanitas), 2009:


Jason Salavon, Generic Mammal Skull (13% baboon, 36% bear, 46% human, 5% wild boar).

The above example is sped up 500 times (1 second becomes nearly an hour), revealing the subtle transformations that take place over the course of days. Jason Salavon’s work is produced at a high level of craft. Apart from their surface beauty, however, what makes these works interesting, memorable, or provocative? What strategies does Salavon use to do this? What visual languages does he engage?

Inspirations II:

Algorithmic strategies for form generation are widely used in architecture, industrial design and the decorative arts. We will assuredly be delving into this much more substantially later in the semester. Rather than attempt to consider this comprehensively at the moment, let us instead ‘go narrow’, and examine just a couple of case studies in decorative and utilitarian objects. First: here are two different approaches to the design of parametrically defined jewelry. Both are browser-based web services that allow user-customizable ring designs to be fabricated by direct digital manufacture.


It is worth pointing out that Nervous System is (just) a two-person company, Jessica Rosencrantz and Jesse Louis-Rosenberg. Both are designer/coders with strong mathematics backgrounds. 

In a more utiltarian vein, pushing the limits of what can be achieved with today’s 3D printers, Amanda Ghassaei has developed Processing code (and this Instructable) to generate CAD models for 3D-printed “vinyl” records from any audio file:

Finally, an example of my own, a parametric system for generating rubber stamps from any logo, extensible to wheels and (even) shoes:

Inspirations III: Parametric Objects with OpenSCAD

Generative art and design are large fields with many different approaches, and many tools that support different objectives and workflows. Widely-used algorithmic modeling environments include Processing , PLaSM, and Grasshopper. For the purposes of this assignment, we will constrain ourselves to the use of OpenSCAD, a C-style scripting language and CSG compiler.

OpenSCAD is free software and available for GNU/Linux, MS Windows and Mac OSX. It provides two main modeling techniques: First, constructive solid geometry (CSG) and second, extrusion of 2D outlines. Autocad DXF files are used as the data exchange format for the 2D outlines. In addition to 2D paths for extrusion, it is also possible to read design parameters from DXF files. In addition to reading DXF files, OpenSCAD can also read and create 3D models in the STL file format, which is commonly used for 3D printing.

OpenSCAD is ideal for creating parametric objects, such as a chain that can have any number of links, or a snowflake ornament with a changeable pattern. Here, perhaps, is the simplest and most introductory example, a customizable box: http://www.thingiverse.com/thing:72070.

OpenSCAD has been used to create a variety of useful parametric objects:


It has also been used to create a variety of more fanciful and whimsical ones.

If you enjoy information visualization, it is also possible to use OpenSCAD to generate sculptures that represent data. Below is a 3D-printable “prism map” of the USA; given a data file representing data for each state (e.g. population, number of Starbucks, etc.) a different sculpture is generated:


OpenSCAD models can be imported into MakerBot’s user-oriented Customizer software, which exposes OpenSCAD variables as sliders in a browser-based GUI for easy shape generation. (In other words, it serves as a front-end GUI for your code.) Here are some galleries featuring more examples of parametric OpenSCAD objects, many of which are associated with Customizer:

Assignment Statement

Create a parametric object in OpenSCAD.
Per your inclination, choose 2 of the following 3 goals: {Beautiful, Interesting, Useful}.
Disrupting the depersonalizing effects of mass production can be liberating. If you are hunting for a concept, it may be helpful to think of things in the world around us which are mass-produced, but which could be personalized.

Give consideration to the potential of your parametric object to operate as a cultural artifact. How might it somehow attain special relevance by generating things which address a real human need or interest? Does your generative object have a perspective? Is it possible for an object to be critical? Tactical? (What could those terms mean when applied to generative objects?) Can it be funny, surprising or unexpected? (Remember, you can import any .STL file… yielding some potentially insane mashups.)

Here are some guidelines:

  • Remember to SKETCH FIRST. (You’ll be asked to show your sketches.)
  • Download and install OpenSCAD. Instructions and resources for getting started with OpenSCAD are herehttp://golancourses.net/2014/resources/tools-and-libraries/openscad/.
  • Spend 15-30 minutes just tinkering with OpenSCAD in an open-ended way. Try all of the examples (under File>Examples).
  • When you create your own .SCAD file, be sure to use Git and upload your work to GitHub. (You’ll be asked to present a link to your GitHub project.)

Now it is time to document your work. Anything worth making is worth documenting well, so that others can find it, appreciate your brilliance, and build on your effort. Do the following:

  • Create a blog post in this WordPress site. This will be the locus for your documentation. Categorize your blog post with the Category, 13-Parametric-Object. (Categorizing your posts is important, as it facilitates searching later.)
  • At the top of your blog post, write a tweetable summary or abstract sentence, which is absolutely no longer than 110* characters. Consider writing this in one of the the following formats, or something similar: “ProjectTitle by @yourname is a generative noun for verbing”, “A customizable #OpenSCAD noun by @yourname”. (*As you know, tweets are up to 140 characters long; we reserve 30 extra characters so that a tweet can contain a URL link to your project.)
  • Write a 100-200 word narrative that describes your project. Discuss where your inspiration came from; some of the problems you had to solve in developing it; and an evaluation of your results, considering what you could have done better, and what you think you did well.
  • Document your project in renderings. (You can use the Design>ExportAsImage operation in OpenSCAD.) Present one high-resolution image (at least 1600×1200) and two or three smaller images which show your object’s variability. Optionally, You can also experiment with the Animation feature of OpenSCAD if you’d like to present an animated GIF.
  • In the code of the blog post, include your OpenSCAD code using the WP-Syntax plugin for pretty code formatting. (Tell WP-Syntax to parse your code as Java, which is close enough.)
  • Register for a user account on Thingiverse, an important global clearinghouse for 3D designs. Create a new Thing for your project. Upload your project (including SCAD files) into the Thing. Give our Thing good tags and a clear, descriptive title so that others can find it. In your blog post, provide a link to your Thing.
  • (Optionally) You’ll get a gold star if you can 3D print your object and include a photograph of the print. Warning: 3D printers can be a soul-sucking black hole of despair when they aren’t working properly, which is most of the time.

Quick Checklist.
As a recap, your blog post should present all of the following:

  1. A blog post, labeled with the Category, 02-Parametric-Object.
  2. A tweetable summary (described above).
  3. A written narrative, of approximately 100-200 words.
  4. An image (scan or photograph) of your sketches.
  5. An image of [one instance of] your project, linking to high-resolution version.
  6. 2 or 3 more renderings of your parametric object, demonstrating its variability.
  7. Code for your project, embedded in the post using the WP-Syntax plugin.
  8. A link to your project’s OpenSCAD code in your Github account.
  9. A link to your Thing on Thingiverse.
  10. Optionally, an animated GIF showing your project rotating or evolving.
  11. Optionally, a photograph of a real 3D print of your object.