A maker on Hacker News hit a wall that a lot of new 3D-printer owners will recognize. AI can generate a convincing Super Mario figurine, but ask it for a simple wedge ramp so a robot vacuum can climb a step, and it falls apart. According to Hacker News, the fix wasn’t a better prompt or a fancier model. It was a method: break the part into ordered steps and let an agent build them in Blender.
What stands out here is the core insight. LLMs are bad at 3D spatial reasoning but good at structured code. So you convert the first problem into the second. Here’s how to do it.
Quick Start
You’ll learn a repeatable way to get usable, printable functional parts out of AI instead of unadjustable blobs. You need: a 3D modeling tool (the original used Blender), the blender-mcp bridge so an agent can drive it, and an AI agent that writes and runs code. Reference implementation: the spec-3d-model project on GitHub.
Step 1: Skip the “describe it and get a model” tools
The author tried text-to-3D generators first. The output was unusable. You can’t adjust it, and it’s never quite what you meant. This matters because those tools optimize for looks, not function. A ramp that isn’t watertight or the right angle is worthless, even if it renders fine.
Step 2: Don’t ask an agent to freehand the geometry
Next he had an agent write Python to build geometry directly. It topped out at simple primitives. The lesson: a single open-ended request forces the model to hold the whole shape in its head at once, which is exactly the spatial reasoning it’s weak at. Asking for more just produces more mush.
Step 3: Decompose the part into ordered, grouped steps
This is the move that finally worked. Take the complex part and break it into a sequence of smaller pieces, grouped and ordered. A wedge ramp becomes a base, a sloped face, a lip, and so on. Each piece is small enough that the geometry is obvious. You’re doing the spatial thinking; the AI does the building.
Step 4: Write each step as a small spec
Describe each piece as a short, precise spec. Dimensions, position, how it relates to the previous piece. Small specs remove ambiguity. The narrower the instruction, the less room the model has to guess wrong, which is where the earlier attempts failed.
Step 5: Let the agent execute each spec in Blender via blender-mcp
Hand each spec to an agent that runs it in Blender through blender-mcp. Because each step is a concrete geometric operation, the agent is now writing structured code, its strong suit, instead of imagining a shape. Executing in order means every step builds on a known, correct state.
Step 6: Understand why this generalizes
The author found the process abstracts into a small engine. That’s the real takeaway: you’ve turned spatial reasoning into structured code the LLM handles well. Once you have the pattern, it applies to any functional part, not just one ramp.
Why functional parts are still so hard
The post raises an open question worth sitting with. Why is “functional part” generation so much weaker than “figurine” generation? Three suspects:
- Data: there are few parametrized-CAD training sets, unlike the flood of aesthetic 3D assets.
- Representation: meshes suit sculptures; engineering wants B-rep (solid, editable geometry).
- Evaluation: nobody really benchmarks “does it print” or “is it watertight,” so models never learn to care.
That gap explains why Mario is easy and a load-bearing ramp is not. Aesthetic generation gets rewarded for looking right. Functional generation needs to be right.
Next steps
Start small. Pick one part you actually need and write out the decomposition by hand before you touch an agent. Try the spec-3d-model repo as a template for structuring your steps. Then push the method: batch several parts, or wire the spec format into a reusable script so you’re not rewriting the scaffolding each time. If you care about the deeper why, the full discussion and the author’s open questions are worth reading at the original source.