← All Work
Matchstick
Fabrication

Matchstick

POETIC/INDIVIDUAL 2025

SDF 3D-printed flame sculpture


Three materials — translucent white resin for the flame, clear for the air dissolving around it, dark for the stick — printed as one object that looks like it's about to go out. A voxel grid is populated with two volumes (a sphere for the match head, a conical swept curve for the flame tip) and the SDF measures each voxel's distance to the nearest surface. Cubes instantiated at voxels inside the flame are scaled proportionally to their SDF value — creating a soft, continuous boundary, the mathematical equivalent of how real flames blur into air. Exported as separate STLs per material layer for multi-material resin printing. One surface left unsanded after noticing the print striations create a moiré effect that makes the flame appear to flicker.

Matchstick

Capture something ineffable and organic in a physical medium. Use code to do it. Create a recognizable object. Leave an imprint of the process on the final result.

Voxel grid

First, create a 3D grid of voxels, or volumetric pixels, in Grasshopper.

Matchstick

Flame shapes

Then create some 3D objects based on a real match flame — a sphere around the match head, and a conical piped curve for the flame tip.

Matchstick

Signed distance field

Create a signed distance field that measures the distance of every voxel in our grid to the nearest point on the surface of our two shapes. Find the smooth union between the two shapes to blend them. Then create a cube for every voxel in the grid that has a _negative_ sign, because that means it is inside the flameshape.

Modulate the size of each cube based on its distance to the surface of the flame. This creates a smooth transition between the flame and the air around it, like a real flame.

Matchstick

Into Blender

After baking out the mesh, I exported the flame and brought it into Blender because goodness gracious I had no idea how to use Rhino to do these next steps. I'm 100% certain it's doable, but you have to choose the tools that cause the least friction for your creativity.

First I massively simplified the mesh of cubes using a remesh modifier so it wouldn't put Blender in a blender. Then I modelled a matchstick and subtracted it from the flame's cubes using a boolean modifier. You can see the little hole.

Matchstick

Boolean magic

Then I made a clear bounding box and subtracted both the matchstick and the flame from it using another boolean modifier. It's not the cleanest way to do any of this, and it left some artifacts that would be noticeable at a larger scale, but it worked great for this project and only crashed Blender seven times.

Finally I exported each layer — the matchstick, the flame, and the clear bounding box — as their own STL and sent it to the resin printer for fabrication.

Matchstick

Grasshopper definition

Most of these components are credit to Jose Luis, but the one on the far right is my C# script that generates the flame cubes.

Matchstick

Kidding, the resin printer was not the final step. The final step was sanding it for two hours. I left one surface unsanded because I liked the way the resin's natural striations amplify the moiré and cause the flame to almost flicker.

So many parts of this project blew my mind — how strangely intuitive signed distance fields are, how comfortable Grasshopper feels when you jump back into it after 5 months away, how important it is to do test prints beforehand to understand the way light moves through different materials. It's also just magic that we can turn silly ideas into physical objects with math and code and effort.

Wyatt Roy Designer, Engineer
Jose Luis Garcia Del Castillo y Lopez Grasshopper Definitions
← Previous
PigeonBelt
PigeonBelt
Next →
HandMove
HandMove