Procedura: Agentic 3D Modeling with Procedural Control
Youtian Lin, Yikang Yang, Zhanpeng Hu, Mengqi Zhou, Feihu Zhang, Xun Cao, Jiaheng Liu, Yao Yao
cs.CV, cs.GR
2026-08-27
Procedura has a frozen LLM write CSG assemblies with typed mates. It scores 0.828 on MechBench versus TRELLIS.2 at 0.810, with 2.6× the sharp-edge length of the next code method.
Native 3D generators now recover a plausible mesh from a single image. What they ship is still a soft, scan-like surface: no named parts, no dimensions, no parameter a user can turn. Post-hoc segmentation cuts geometry, not meaning, so it will not tell you which triangles are the left index finger. LLMs can emit Three.js or Blender code, which is editable in principle, but a single shot that commits every part at once tends to misplace subassemblies and stay low-poly.
Machines, vehicles, and tools need something else: sharp creases, functional parts, and a bore whose mate updates when you edit the diameter. Mesh generators do not emit that. One-shot code generation does not hold a many-part assembly together.
Procedura writes the object as a program. Each part is a named parametric CSG module. Parts join through typed mates: nine static features such as bolt-pattern, peg-socket, flange, and snap-tab, plus revolute, prismatic, and spherical joints. Both halves of a mate share one nominal dimension and a signed fit offset, so editing one side cannot orphan the other.
A frozen Gemini 3.7 Flash, with no 3D training, runs three stages. It synthesizes a reference view, plans a part list and mate graph, and may only add parts, never merge or drop them. The build then emits one part per call. The model authors geometry and mate frames; the rigid placement is solved in code. Each commit must pass an OpenSCAD compile, a contact-area and penetration check, and a span-based connectivity gate. Three quality attempts, then a warned commit; a part that never compiles is skipped.
A decoupled vision critic, in a separate call, diagnoses the draft. Code enforces one edit per fresh diagnosis, holding the diagnose-to-edit ratio near 1:1. Connectivity thresholds bounding-box span, not volume: a thin panel has almost no enclosed volume and still spans most of the model. After geometry freezes, the same graph carries per-part PBR materials and a joint tree exported to OpenUSD and URDF, then validated headless in Isaac Sim.
MechBench-36 is a frozen set of 36 many-part hard-surface objects, judged blind under one grey-clay rig. The Gemini 3.7 Flash pipeline scores 0.828 overall, against TRELLIS.2 at 0.810 and Adam CAD at 0.799. Geometry 0.799 and aesthetics 0.827 lead the table. Semantics is crowded, 0.775 to 0.861; Adam CAD and TRELLIS.2 share the top at 0.861.
Edges follow the representation. Sharp-edge length above a 60° dihedral is 158.08 for Gemini and 185.18 for GPT-5.6-sol, 2.6× and 3.1× Adam CAD at 57.35. TRELLIS.2 reaches 134.02 in length but only 73.1° at the 95th-percentile dihedral; Procedura sits at 98.0° and 105.3°. Paired against a single Gemini call, aesthetics rises +0.105 (20 wins, 7 losses, sign test p=0.019). The GPT-5.6-sol arm’s +0.059 is not significant.
On P3D-Bench’s 203 assembly cases, Gemini scores 0.590±0.009 and GPT-5.6-sol 0.575, against 0.524 for GPT-5.5, the strongest published entry that covers the full set. Geometry is 0.490 versus 0.392. A single Gemini prompt already reaches 0.566, so some of the published gap is base-model strength; the agent supplies the rest.
Ablations: drop refine and the composite falls 0.828→0.800; drop planning 0.791; drop per-part 3D feedback 0.819. Of 18 articulated assets, 14 pass every dynamics phase and 9 of those also clear advisory asset rules. Four fail outright: one would not load, three actuators never traverse.
The deliverable is a program you can reopen, not a pretty skin. Parts have names, dimensions are parameters, mates go through a compiler, joints drop into a simulator. That is closer to what games, robotics, and factory pipelines actually need than a higher CLIP score.
The engineering is incremental: a frozen LLM, solved placement, a gated critic. The MechBench gap over TRELLIS.2 is 0.018 on the composite. Sharp edges and editability are the real separation. Single-shot GPT-5.6 already scores 0.790 on geometry against the pipeline’s 0.799, so the assembly loop adds less when the base model is already strong.
The agent sees the build only through renders, so occluded interiors and fine contacts can hide. CSG is a poor fit for organic surfaces. The mate vocabulary is rigid joints; an undeclared mate cannot be checked.
The judge is Gemini 3.7 Flash in high-reasoning mode, the same family as the generator, blinded by hash. MechBench is a homemade 36-case set. On P3D, a single frontier prompt already clears the published board, so method gain and model gain need to be read apart. Articulation is reported on 18 objects. There is no quantitative paint metric.