← Back to project

3d-generation-editing · Editing Data Engine — V1 FINAL

440K VLM-curated assets → ~750K (before, instruction, after) pairs · engine: frozen TRELLIS.2-4B · 2026-07-09
planeditingdata-enginev1-final

0 · V1 decisions (what changed since the draft)

Deliverable = plain (before.glb-ref, instruction, after.glb + renders) pairs. Engine = OFFICIAL frozen TRELLIS.2-4B — not our in-training flows (no self-distillation, no dependency on our training runs), not TRELLIS-1 (wrong fidelity). FlowEdit demoted from critical path to Phase-2 enhancer: ~70% of volume needs zero custom ML code.

1 · Task × method matrix (12 rows, the core of V1)

#Edit typeExampleGeneration method (V1 final)Idea sourceFlowEdit?PhaseTarget
E1aGlobal material change“make it brushed metal”Geometry latents FROZEN → re-sample TRELLIS.2 texture flow conditioned on the Qwen-edited view. Geometry identity is exact by construction.TRELLIS.2 native staging (“texture generation for a given shape”)170K
E1bPart-local material change“red leather cushion only”Same texture re-sample + merge texture latents by P3-SAM part mask (new inside, original outside, feathered boundary).Merge idea from Nano3D, mask from P3-SAM150K
E1cPattern-preserving / non-part-aligned appearance“keep the motif, change base color”, “add rust on one side”FlowEdit on texture flow only (velocity-difference anchoring keeps texture layout).FlowEdit (Nano3D’s use), texture-only variant is ours220K
E2Part addition“add a hat”FlowEdit on all three flows + Voxel-XOR-Merge (τ-connected components). Optional: X-Part generates the new part given a bbox (procedural-exact alternative).Nano3D; X-Part (Hunyuan3D-Part)✅ (or ❌ via X-Part)260K
E3Part removal“remove the sword”PRIMARY: procedural — delete P3-SAM part voxels/glb node, exact pair. X-Part/HoloPart-style completion for exposed interiors when judge flags them.Native-3D-Editing (procedural deletion at 109K scale); EVA01 𝒪_rigid160K
E4Part replacement“wheels → skis”FlowEdit + merge (diff region = removed ∪ added).Nano3D “Replace”; UniVerse3D scaled it to 400K250K
E5Global stylization“carved-wood look”Qwen-edited view → full TRELLIS.2-4B image-to-3D regeneration (everything changes; drift is meaningless here). ~3s/asset at 512³.EVA01 semantic track; Steer3D140K
E6Part rigid transform“longer legs”, “tilt head”Procedural: affine ops on part voxels/latents (P3-SAM mask), template+LLM-paraphrased instruction.EVA01 𝒪_rigid; Part-X-MLLM <mods>1150K
E7Duplicate / mirror part“second exhaust, mirrored”Procedural copy/mirror of part block.EVA01 𝒪_rigid150K
E8Cross-asset composition“B’s wings on A”Procedural paste of part block across assets; optional X-Part re-synthesis for seam coherence.EVA01 𝒪_topo; X-Part1100K
E9Mesh boolean / deformation“carve a cavity”Blender node ops / boolean on SketchfabV1 raw glbs → mesh→O-Voxel re-encode (<10s CPU).EVA01 𝒪_topo; P3-SAM’s connected-component label recipe150K
E10Multi-turn chains2–4 edits composedAssembly of accepted pairs on the same asset (no new generation).EVA01 interleaved format3100K traj.
DPO negativesoriginal as rejectedFree byproduct: one (instruction, original) per accepted pair.Steer3D (no-edit 18.7%→10.7%)3~650K

2 · Engine stages

StageWhatTooling (all self-hosted, all MIT/open)Unit cost
0. Part annotationgeometric part masks + names + bboxes, 440K assetsP3-SAM (~8s/obj full-auto; weights on HF) → project masks to existing 16-view renders → Qwen3.6-27B names parts (vlmcap TASK=parts)~8s + ~2s
1. Instructions3–5 typed instructions/asset, judge-axis quotasvlmcap TASK=edit_instr; holistic/texture captions + real part list in promptmerged w/ 0
2. Pair synthesisper-type methods in the taxonomy aboveTRELLIS.2-4B (frozen, official ckpt; 512³ ≈3s; mesh↔O-Voxel <10s/<100ms) + Qwen-Image-Edit-2511(+Lightning) + Blender + X-Part (optional)1–20s/pair by type
3. Verificationrender 4 views both sides → filterdual-blind LLM (Steer3D protocol) + 6-axis judge re-score (ours) + DINO sim on unedited region; procedural pairs skip blind check~2s/pair
4. Packagingpairs manifest + multi-turn + DPO negativespairs/{id}/{meta.json, after.glb, renders_before/, renders_after/} + manifest.jsonl; before stored as sha referencecheap

3 · Evidence base

PaperWhat V1 takesKey evidence
TRELLIS.2-4B (microsoft, MIT)THE engine: 3-stage flows (ss/shape/tex), texture-given-shape sampling, mesh↔O-Voxel instant conversion512³ in ~3s (H100); O-Voxel→mesh <100ms (kills Nano3D’s 4.5-min export); PBR native (basecolor/roughness/metallic/opacity)
Nano3D (2510.15019, MIT code)FlowEdit + XOR-Merge recipe for E1c/E2/E4CD 0.013 vs 0.019; 95%-vs-5% shape-preservation preference; its dataset templates are Add/Remove/Replace only — material edits were never its scope
UniVerse3D (CVPR’26)Scale precedent (400K via improved Nano3D/VoxHammer) + arch lessons for the future editor (source-token concat; VLM must see 3D)Beats VoxHammer/Instant3DiT/MVEdit end-to-end; 2:1 gen-data mixing vs forgetting
Native 3D Editing w/ Full Attention (2511.17501)Procedural deletion at scale is trainable signal; token-concat conditioning109K deletion pairs from scene-graph ops; concat ≫ cross-attn (FID 91.9 vs 169.6 VoxHammer); trained on 16–18×A800 only
EVA01 (2605.16745)Two-track split, 𝒪_rigid/𝒪_topo taxonomy, multi-turn format, ratio flip (proc-heavy→sem-heavy)3M procedural + 300K semantic (its semantic track is 2D-edit+lift, NOT FlowEdit); mask-free CD 0.018
Steer3D (2512.13678)Dual-blind verification; DPO original-as-negativeFilter −70%; DPO no-edit 18.67%→10.67%; monotone data scaling 8K→96K
P3-SAM / X-Part (Hunyuan3D-Part, open)Stage-0 segmentation engine + part generator for E2/E8/completion~8s/obj native 3D seg (SAMPart3D ~15min); mIoU 81.1; X-Part: bbox→complete part generation
VoxHammer (2508.19247)High-precision fallback (inversion+KV) — our P3-SAM masks make it free of its main costMasked PSNR 41.68 / CD 0.012, but 133s/edit → fallback only
3DEditVerse / ShapeLLM-Omni / Part-X-MLLM / 2D enginesScale ladder + cautionary tales + part-annotation recipe + 25-type taxonomy reference62K “far too few” (ShapeLLM); 116K (3DEditVerse); part grounding is the precision bottleneck (edit IoU 0.41–0.70)

4 · Compute budget

ItemVolumeCompute
Stage 0: P3-SAM + naming + instructions440K assets~1.2K GPU-h
Qwen-Image-Edit (E1/E5/E2/E4 target views)~350K edits~700 GPU-h (Lightning)
E1a/E1b texture re-sample + merge~120K~80 GPU-h (≈1s tex flow + merge)
E5 full regeneration~40K~40 GPU-h (≈3s)
E1c/E2/E4 FlowEdit~130K~550 GPU-h (≈15s/pair)
E3/E6–E9 procedural~410Kmostly CPU (m7i) + ~100 GPU-h decode checks
Verification (render + dual-blind + judge)~650K pairs~500 GPU-h
Total~650K single-turn + 100K multi-turn + 650K DPO~3.2K GPU-h ≈ 2 low-pri nodes × 8–10 days · $0 cash

5 · Phased rollout

  1. Week 0 — pilot (gate): install TRELLIS.2-4B / P3-SAM / Qwen-Image-Edit-2511; 20-asset mesh↔latent round-trip fidelity on OUR assets; 20-asset P3-SAM segmentation eyeball; 10 E1a pairs (zero custom code) + 20 procedural pairs; human review of before/instruction/after triptychs. Gate: round-trip artifacts acceptable, dual-blind pass ≥70% on E1a.
  2. Phase 1 (~470K pairs, no FlowEdit): E1a/E1b + E3 + E5 + E6–E9 at scale. All off-the-shelf components.
  3. Phase 2 (~130K pairs): FlowEdit port on TRELLIS.2 samplers → E1c/E2/E4. Fallback if port stalls: route these through 2D-edit+regen with hard filtering (Steer3D route, ~30% acceptance) — more GPU, zero blockage.
  4. Phase 3: E10 multi-turn assembly, DPO negatives, final manifest + held-out 1K eval split (procedural pairs give metric-grade exact GT). External eval: Edit3D-Bench, 3DEditVerse-test, Eval3DEdit.

6 · Model-side hooks (for the editor we train on this data)

V1 FINAL design — supersedes the 2026-07-08 draft. Engine: frozen TRELLIS.2-4B (MIT). All components self-hosted; $0 cash.