• University of Michigan logo

Design Computing: 3D Modeling in Rhinoceros with Python Rhinoscript

Why should a designer learn to code? Find out with the University of Michigan and build your skills in design computing.

1,686 enrolled on this course

Design Computing: 3D Modeling in Rhinoceros with Python Rhinoscript
  • Duration5 weeks
  • Weekly study5 hours

Use Rhinoceros 3D modelling software to design complex geometric forms

As our world is increasingly impacted by the use of algorithms, designers must learn how to use and create design computing programs.

Structured around a series of fundamental design problems, this course will show you Python code in terms of its rules and syntax, and teach you what we can do with Python in its application and design.

By the end of the course, you’ll not only know the fundamentals of Python and Rhino script, but also understand them through the lens of their application in geometrically focused design lessons and exercises.


  • Week 1

    the building blocks

    • welcome to the course

      This is a brief overview of the course and the instructor. Why take this course? What is Design Computing? Why designers should learn to code? This activity also covers how to set up your programming environment.

    • introduction to python.rhinoscript

      In this activity, I introduce the coding environment, discuss what code does, and what the difference and interaction is between Rhinospace and Pythonspace and a basic introduction to inputting and outputting data and geometry.

    • variables + data types

      In this activity, I introduce variables and data types, the fundamental building blocks of code. I cover the naming conventions we use for variables and some of the problems to look out for when using them.

    • what's the point!

      In this activity I discuss the fundamental building block of geometry, points, and how in both Rhinospace and Pythonspace they have two characteristics as both an object with a specific ID and as a set of cartesian values (x,y,z).

    • points, lines, shapes

      In this activity, we'll both input and create through code basic 2D shapes. We will learn how to manipulate those shapes in code through applying basic transformations (rotate, scale, move, copy).

    • assignment_01: points | lines | shapes

      The intention of this exercise is to begin to explore the fundamentals of what code does.

  • Week 2

    the heart of code

    • tuples and lists

      In this activity I discuss Tuples and Lists, both part of the Data Structure family. In the software demonstrations, I introduce the concept of 'Bone Structures' and 'Psuedo Coding', which allows to generate more complex geometry.

    • assignment_02.1: bone structure

      In this activity you are asked to create a complex 2D geometry using some form of bone or base structure as input. Fundamental to this exercise will be the use of Tuples and Lists.

    • iteration (looping)

      In this activity, I cover Iteration or Looping which is part of the Control Flow family. I discuss two types of Iteration, Conditional and Incremental and some common situations in which we would use them.

    • operators

      In this activity, I discuss Operators, which are part of the Control Flow family. Operators are small parts of code that allow for functionality like simple arithmetic (+, -, *, /) or comparison (does this equal that?).

    • conditionals

      In this activity, I discuss Conditionals, which are part of the Control Flow family. Conditionals give us the ability to check the condition of something in the code and change behavior or 'flow' if necessary.

    • assignment_02.2: patterning

      The intention of this assignment is to begin to explore the use of iteration in coding and the generative capabilities of Python.Rhinoscript through the development of a 2D patterning system.

  • Week 3

    expanding possibilities

    • debugging

      In this activity, I cover more advanced debugging concepts and strategies, more error types you may face when coding, how to hunt down and rectify their cause and how to utilize the debugging tool in the script editor.

    • dictionaries

      I discuss how to use the dictionary structure to organize our 2D Point Matrix system into a true matrix of columns and rows which allows us to create relational or exponential based relationships impacting how we generate geometry

    • assignment_03.1: patterning dictionary

      Fundamentally, this assignment is a redo of assignment_02.2: patterning. Only now you are asked to utilize the demonstrated 2D Point Matrix Dictionary structure in your code.

    • functions

      I discuss Functions, which are part of the Control Flow family. Functions allow us to organize and structure our code into digestible chunks, a role that becomes more important as codes become longer and more complex.

    • animation

      In this activity, I use a given code to demonstrate how to output and compile a series of images from a patterning code you've been working with into a GIF animation.

    • assignment_03.2: patterning animation

      Creating a new patterning code or working with any previous one that you produced in the course, insert it into the given animation code and adapt it to produce an animation.

  • Week 4

    3 dimensional structures

    • 3D point matrix

      In this activity, I go through a process of converting the 2D Point Matrix of previous lessons into a 3D Point Matrix. This expands the possibilities of this system allowing us to create true 3D geometry using curves and surfaces.

    • planes

      Understanding the creation and use of planes is a fundamental part of being able to create the geometry we want at a precise location and orientation in space. Many Rhinoscript functions require a plane as an input parameter.

    • assignment_04: 3D matrix wall

      Utilizing the demonstrated 3D Point Matrix code with Dictionary data structure, design a system that generates a wall design that is composed of progressively variable 3D module units.

  • Week 5

    surfaces as geometry generators

    • NURB surfaces - 2D geometry

      Although we've used NURB surfaces in previous lessons, we haven't utilized them as a base geometry for creating elements with. We will generate a geometric point matrix from surface geometry and create a formal geometric system.

    • vectors

      Vectors are truly the stepping stone to creating more complex coding systems. In this lesson I cover the fundamentals of vectors and how we can apply them to the codes we've been working with.

    • NURB surfaces - 3D geometry

      In this activity, we will utilize surface vector normals to create 3D geometry and apply many of the techniques from previous lessons to produce variation in the instantiated geometric elements.

    • assignment_05: modular tower

      For the final assignment in the course you are asked to design a series of modular towers that utilize the demonstrated 3D Surface Matrix code.

    • portfolio + outro

      Throughout this course, you’ve created a variety of designs, reflected on your process, and solicited feedback from your peers. As a final activity, you'll be compiling each of your Gallery Tool submissions and reflecting on them.

When would you like to start?

  • Date to be announced

Add to Wishlist to be emailed when new dates are announced

What will you achieve?

By the end of the course, you‘ll be able to...

  • Apply the fundamentals of Python including: Control Flow [module importing, conditionals, iteration(looping), operators, functions, comments, booleans] and Data Structures [strings, variables, lists, tuples, dictionaries]
  • Apply the fundamentals of Rhinoscript to create geometric systems and produce variable geometric form, in 2D and 3D, rendered in still and animated formats
  • Utilize search and help commands for Rhinoscript and Python command libraries.
  • Apply the practice of de-bugging.
  • Produce code that produces variable geometric form (in 2D and 3D) in still image and animated formats.
  • Produce coded geometric systems that are reactive to changes in input parameters and attractor geometries (points, curves, surfaces)

Who is the course for?

This course is designed for any students and practitioners who use the 3D modeling software Rhinoceros and want to design more complex geometric forms through structuring and implementing coding logics.

This course will be helpful to designers (architectural, industrial, product, web, furniture), artists (multimedia, digital, sculpture), and programmers.

By completing the course, students can decide if they’d like to study more advanced computing topics through further education, such as recursion, agents, and complex generative systems.

What software or tools do you need?

  • This course integrates with a 3rd party website called the Gallery Tool, which was created by the University of Michigan in order to support collaboration between learners. You will need to make sure that Javascript is enabled in your browser and check that you are using Chrome, Firefox, or Edge. Safari and Internet Explorer are not supported.

  • Learners will need access to Rhinocerous 3D which offers a free, full version, 90-day trial for Windows and Mac. After 90 days a purchased license will be required to save files or use plug-ins. We walk you through how to install Rhinocerous 3D in the course.

Who will you learn with?

I'm an associate professor of architecture at the University of Michigan’s Taubman College of Architecture and Urban Planning, where I conduct research/courses in computation and digital fabrication.

Who developed the course?

University of Michigan

As the #1 public research university in the United States, U-M has been a leader in research, learning, and teaching for more than 200 years, with 102 Grad programs in the top 10 — U.S. News & World Report (2019).

  • Established1817
  • LocationAnn Arbor, Michigan, USA
  • World rankingTop 30Source: Times Higher Education World University Rankings 2020

Learner reviews

Get a taste of this course

Find out what this course is like by previewing some of the course steps before you join: