skip to main content
← back to writing

Voxelizing a mesh, and the four UX calls I had to make

When I started on the mesh-import feature for Minecraft Editor, I had a working voxelization algorithm by week two. The shipping work — what took us from “it works” to “millions of players use it” — was four UX decisions that shaped the whole flow.

Preview-then-place beat drag-to-place

Our first prototype let you drag the mesh around the world and place it on release. Felt native. Felt like Minecraft. The problem: when a player misplaced a 12,000-block mesh, undo took 30 seconds and the cursor was now five chunks away. Drag-to-place produced more “oh no” moments than placements.

The fix was a preview pane. See the voxelized mesh, dial in resolution, then place. One extra click. Zero “oh no” moments. We picked it.

Opinionated palettes over a full picker

A full per-mesh block picker would have been the powerful call. But 80% of imports were silhouette work — players wanted “stone-ish” or “wood-ish,” not “map this 0xF0F0F0 to spruce-planks.” Five named palettes (Stone, Wood, Wool, Concrete, Terracotta) covered most use cases with zero configuration.

Predictable defaults over smart auto-fit

Auto-fit kept producing unrecognizable blobs on small meshes and chunk-eating monsters on large ones. A predictable default (32×32×32) that players could nudge beat “smart” behavior they couldn’t reason about. Defaults are policy.

Hollow voxelization by default

Solid is what most voxelizers do. Hollow saves 60-80% of the block budget, which matters because players are working in real worlds where every block hits the live mesh. Hollow also maps better onto how Minecraft players actually edit imported builds afterward — they sculpt the surface, not the interior.

info

Hollow voxelization is also the standard format for player-shared builds — every “how I made this” YouTube tutorial shows the build going up by layer, which only makes sense if the build is hollow to start with. v1 ships hollow as default and solid as a toggle in the advanced panel.

See it in action

Two minutes of footage will say it faster than the rest of this post. The clip below is the v1.1 build doing a full import-to-place loop — teapot, swords, then a tower silhouette from a single OBJ file.

🟡 screenshot — the resolution slider in the right rail; 16 / 32 / 64 marked as anchor steps
The slider with named anchor steps. Most players nudge by one step in either direction from the default. A few players pin it to 64 for single-block details.
warning

The v1 importer assumes triangulated meshes. Quads and n-gons get auto-triangulated on import, but the resulting voxel surface can show seams. Pre-triangulate in Blender before importing if you care.

note

This post will get screenshots and additional code samples post-launch. Wave 2 wires the components; Wave 3 swaps the placeholder figure for the real shipped UI screenshot.

Together, visitors have mined

blocks · since the world opened, jun 2026