ShapeShop is a 3D design tool that I independently developed from 2004-2008. ShapeShop started as a course project, basically I was trying to reproduce some parts of Takeo Igarashi's famous Teddy system. However I discovered that I very much enjoyed making 3D design tools, and this set me on my course to then develop Analytic Drawing, and eventually Meshmixer.

Although I stopped developing ShapeShop in 2008, it is still available for download at


2004-2005 - Sketch Interfaces and Implicit Surfaces

ShapeShop was (and remains!) novel in two main ways. The first-and-foremost is that it uses Hierarchical Implicit Surfaces as a shape representation, rather than traditional representations like triangle meshes, subdivision surfaces, or solid B-reps. Implicit Surface models are composed of basic primitives like spheres, cylinders, and simple extrudes and revolutions, which are then mathematically "blended" to create smooth organic shapes. This allows for very fast creation of surfaces that would be quite challenging to design in traditional tools. The primitives are organized into something called the "BlobTree", which was the brainchild of my MSc advisor Brian "Blob" Wyvill. Traditionally BlobTree models are quite slow to evaluate, but in an interactive tool you really want to see the shape change in realtime as you manipulate the underlying primitives. So, we invented something called Hierarchical Spatial Caching that makes this possible.

Second, ShapeShop has a sketch-based interface, where the primary interactions are via drawing rather than menus and buttons. You can still use ShapeShop with a mouse, but it is really designed for a pen. When we started out this was entirely "borrowed" from Teddy, however over time we made various contributions to the concept of sketch-based CAD tools in ShapeShop.

Figuring out how to implement Sweeps and Surfaces-of-Revolution with implicit surfaces was a major challenge. I spent a good chunk of my MSc on this, it was really the central problem in allowing the user to create a shape from a 2D curve in ShapeShop. We did publish this method at GRAPHITE, which doesn't exist anymore, but you can find the full details in my MSc thesis


click to enlarge

2006-2007 - Discrete ExpMaps and NPR

As I was fishing my MSc, Brian set me the task of figuring out how to Texture Map the BlobTree models. This is a notoriously difficult problem, because implicit surfaces do not have a natural uv-parameterization. Assisted by Cindy Grimm, I developed the Discrete Exponential Map, a local unfolding technique based on geometric propagation that has gone on to be used in many other projects. The Discrete ExpMap was one of those entirely accidental discoveries. I hacked up an odd geometric propagation scheme that would loop forever, when I realized that I had essentially implemented Dijkstra's algorithm, with a bit of geometry added. Actually implementing Dijkstra's algorithm, with the added bit of geometry, worked much better, and turned into a SIGGRAPH 2006 paper.

We used the Discrete ExpMap patches as local texture decals. The cool thing about this was that for semi-regular textures (bricks, fur, etc) you could just layer a bunch of them and it looks reasonable. This meant we could easily texture an object from images. Brian's dog Shadow was my star subject in live demos, I modeled and textured that dog hundreds of times (including a live demo at SIGGRAPH!). Decal texturing also worked really well for shape changes, because the patches could be projected onto the new surface. We could trivially texture models undergoing topological changes, like in the example below, where two objects with brick-texture are combined.

At the same time I was working on Non-Photorealistic Rendering techniques in ShapeShop, in hopes that it would be faster than marching cubes tessellation. Well, it wasn't, but it did look pretty cool

(click to enlarge)

(click to enlarge)


2007-2008 - Sketch-based Widgets and the Surface Tree

When I went to the University of Toronto for my PhD, I was planning on doing more HCI, and so I added a sketch-based 3D widgets/manipulation scheme to ShapeShop, which was designed to be quick and fluid while using a pen. Then I stopped doing HCI and switched to mesh-based modeling. With my PhD Advisor Karan Singh I added something we called the "Surface Tree", which allows you to layer mesh-based shape modifications on top of the underlying implicit surface (or, in fact, any mesh). The idea was that you would design the basic form with Hierarchical Implicits, and then use the Surface Tree to add details. Unlike 3D sculpting or push-pull modeling, though, every edit in the Surface Tree was parametric/procedural, so you could always go back and change anything, and the overlapping layers would recompute.

This layered representation of 3D edits was built on the Discrete ExpMaps, which provided stable local UV parameterizations. In the video below you can see that we could do basic mesh pasting operations. In my PhD I went on to pursue this in more depth, figuring out how to differentially deform a pasted mesh to try to preserve its shape, and this became Meshmixer. 

Both of these projects were published at Eurographics 2008, you can get the PDFs and details here: [Widgets] [Surface Tree]


One of the great things I discovered as I developed ShapeShop is that if you put software out there, people will eventually make cool stuff with it. I always find it extremely motivating when I have real users show me something cool they made in my software. The gallery below shows both some of my demo models, and things created by the users.