Squintin‘, lookin‘, doin‘.

Amos Dudley's blog about level design, environment modeling, and 3D.

Blog | Archive | Resume Home

Stochastic Part Packing for 3D Prints

06 Sep 2017 | self-Amos, computation, fabrication, architecture, packing, SLS

(Or how to make lots of different stuff, all at once)


If the idea of 3D printing hundreds of baseball-sized parts seems daunting, slow, and expensive, you’re probably making two big assumptions: that each part is printed sequentially, and that they are printed with supports. SLS (powder) printing solves the second issue by eliminating the first.

A person can save time by filling the largest percent of each print layer with parts as possible. Why? Printing objects sequentially is the same as adding Z height to your print, and building on the Z axis of a 3D print is considerably slower than on the X and Y axes. By using a powder-based printer we can print without support material, and nest parts close together vertically and horizontally to give the best possible ratio of part to empty space per layer. This is called 3D part packing.

We took an unusual approach to 3D part packing for the Fuse Pavilion, which used 144 unique nylon joints 3D printable in a single build volume. Here’s how to pack hundreds of high-detail STL models very quickly with a physics sim and open source software.

Physically simulating 3D packing

Imagine pouring a bunch of toys into a toy chest. If there are too many toys, the chest will overflow and the lid won’t close… but that doesn’t mean that all the toys couldn’t fit into the chest if they were oriented correctly.

This scenario is almost identical to what we can do in Blender! We used Blender’s physics engine to pour parts into a virtual volume, then exploited its collision-avoidance behavior to re-sort them into a tight 3D packing optimized for overlapping concavity.

Set up the scene:

Run the simulation:

Now, your parts will fall into the print volume naturally by gravity, and collisions will be determined by simplified proxy objects. See what happens:

Compress objects into the volume:

Allowing parts to fall into the volume results in a somewhat loose pack, even though the parts are now nesting together. Let’s compress them further.

When objects in the Blender physics engine are forced to intersect, they will fly apart. This behavior is normally annoying, but it’s actually useful in this case - it automatically jitters the pack until there’s no overlap between parts.

Instead of simply falling into the volume, the parts are now compressed to the point where they start intersecting. In Blender’s collision model intersection is kind of a ‘high energy’ state, and the parts will wiggle around semi-randomly until they find a ‘lower energy’ state where they don’t intersect. If there is no low-energy position for a part to land, it will simply continue to wiggle.


Tips & Tricks:

Pavilion1 A handful of the space frame connectors printed on Fuse 1 beta hardware


If your parts are simple convex shapes, you will probably get a better packing by simply stacking or arraying them. If you have large concave regions or significant geometric variation between parts, automatic part packing quickly becomes worthwhile. This physics solution isn’t fully automated - it’s a somewhat naive solution that doesn’t detect when your parts are packed or exactly how many can ultimately fit. It is very fast and effective for a certain part packing scenario (ours). I’d love to hear if you test this out for a particular application and find it works better or worse than other methods.

This blog post is a technical follow up about the FUSE Pavilion, a 15-foot installation designed and 3D printed in June 2017 with the help of Aashman Goghari.


comments powered by Disqus

Older · View Archive (8)

SLO: 3D Printed Camera