Document 8: Agentic 3D Engineering Environment
Date: 2026-04-24
Honest Product Definition
The winning product is not:
LLM generates a 3D model.
The winning product is:
An AI engineering agent that turns natural-language physical requirements into parameterized CAD, runs simulation and manufacturability checks, optimizes the design, and outputs manufacturable files with a safety-factor report.
For fixtures:
Given load, material, envelope, mounting constraints, print/manufacturing process, and target safety factor, generate a manufacturable bracket/fixture and prove it with FEA.
For motors:
Given magnets, bearings, shaft, voltage/current limits, printer/process, and target torque/RPM, generate a printable axial-flux BLDC motor kit and prove it with EM/thermal/structural simulation.
The fixture path is more commercially useful and shippable. The motor path is more fun and demo-worthy. Together, they are a strong long-term research/product direction.
Hackathon Choice
For the next 24 to 26 effective hours, pick:
Option A: 3D structural motor-mount/bracket/fixture design with real 3D linear elasticity.
Why:
- It is doable fast.
- It is visual.
- It is objectively verifiable.
- It supports 300+ step agentic loops.
- It can expand later to thermal, dynamics, NVH, and motor design.
Do not start with full axial-flux motor EM unless structural MechForge is already working. MotorBench should be the long-term second stage.
Agent Loop
The environment should run this loop:
prompt
-> parse requirements
-> ask/assume missing boundary conditions
-> generate 3-5 design families
-> create parametric CAD/actions
-> run 3D FEA
-> identify stress concentrations and deflection
-> add fillets/ribs/thickness or move holes
-> re-run FEA
-> optimize mass/safety/deflection/manufacturability
-> export CAD/STL + simulation report
In OpenEnv terms:
reset(task_seed)
-> observation: design brief, constraints, materials, available tools
step(action)
-> environment applies CAD/tool action
-> if requested, simulator runs
-> reward components returned
-> observation includes metrics, warnings, hotspots, artifacts
done
-> when agent commits a design or exceeds step budget
Missing-Information Handling
A naive LLM will fail because it will not know boundary conditions.
The environment must either ask for or infer:
- Is 120 Nm a torque around a shaft?
- Is it a force through a hook/tip/load face?
- Where is the fixture mounted?
- What are the bolt holes?
- Static, cyclic, or impact load?
- Desired safety factor?
- Material ambiguity, e.g. "601 aluminum" likely means 6061 aluminum.
- Manufacturing process: 3D print, CNC, sheet metal, casting.
- Temperature or thermal expansion constraints.
For hackathon speed, the environment should include default load templates:
- Cantilever tip load: fixed face at x=0, downward force at free tip.
- Motor mount: bolt holes fixed, radial/axial motor load at boss, optional torque couple.
- Chair/seat support: fixed feet or base, downward distributed load on seat surface.
- Torque fixture: equal/opposite force couple around a shaft axis.
If the user explicitly tells where the load goes, that overrides defaults.
Tool Calls
Use incremental tool calls rather than one huge CAD file.
Design tools:
{"tool": "create_design_family", "family": "ribbed_cantilever_bracket"}
{"tool": "set_material", "material": "aluminum_6061"}
{"tool": "set_envelope", "length_mm": 100, "width_mm": 45, "height_mm": 30}
{"tool": "add_mount_hole", "id": "m1", "center": [10, -15, 0], "radius_mm": 2.6}
{"tool": "add_rib", "id": "r1", "start": [12, -15, 4], "end": [92, -4, 22], "width_mm": 5}
{"tool": "add_lightening_hole", "id": "h1", "center": [55, 12, 2], "radius_mm": 4}
{"tool": "set_base_thickness", "value_mm": 4.5}
Load/boundary tools:
{"tool": "set_fixed_region", "region": "left_face"}
{"tool": "set_fixed_region", "region": "mounting_holes"}
{"tool": "set_force", "region": "tip_boss", "vector_n": [0, 0, -120]}
{"tool": "set_torque", "axis": "x", "origin": [90, 0, 10], "torque_nm": 120}
{"tool": "set_temperature", "region": "motor_face", "temperature_c": 80}
{"tool": "set_heat_source", "region": "motor_face", "power_w": 12}
Simulation tools:
{"tool": "build_cad"}
{"tool": "mesh_geometry", "target_size_mm": 5}
{"tool": "run_fea", "physics": "linear_elasticity"}
{"tool": "run_thermal", "physics": "steady_state_heat"}
{"tool": "inspect_hotspots", "field": "von_mises_stress"}
{"tool": "export_artifacts", "formats": ["json", "stl", "step", "vtu", "png"]}
Optimization tools:
{"tool": "propose_revision", "objective": "reduce_mass_keep_sf_above_2"}
{"tool": "sweep_parameter", "name": "base_thickness_mm", "values": [3.5, 4, 4.5, 5]}
{"tool": "optimize_parameters", "method": "cma_es", "budget": 40}
{"tool": "commit_design"}
Environment Responses
After a design action:
{
"valid": true,
"changed_parameters": ["base_thickness_mm"],
"geometry_status": "buildable",
"warnings": []
}
After FEA:
{
"method": "3D linear tetrahedral elasticity",
"nodes": 240,
"elements": 620,
"max_von_mises_mpa": 138.4,
"max_principal_strain": 0.0021,
"max_displacement_mm": 2.7,
"safety_factor": 2.0,
"mass_g": 51.2,
"hotspots": [
{"region": "fixed_root", "severity": 0.50},
{"region": "rib_root_r1", "severity": 0.42}
],
"constraints": {
"safety_factor_above_2": true,
"mass_below_45g": false,
"tip_deflection_below_2mm": false
}
}
After commit:
{
"final_score": 0.82,
"reward_breakdown": {
"safety": 0.30,
"stiffness": 0.22,
"mass": 0.12,
"manufacturability": 0.10,
"invalid_action_penalty": 0.0
},
"artifacts": {
"design_json": "runs/.../design.json",
"stl": "runs/.../geometry.stl",
"report": "runs/.../report.md"
}
}
Long-Horizon Step Design
A 300-500 step episode is plausible if the environment exposes detailed action space:
- 20-50 requirement parsing and constraint-confirmation actions.
- 30-80 design family generation and selection actions.
- 100-250 geometry edits.
- 50-100 simulation/inspection actions.
- 50-100 optimization sweeps and revisions.
- 10-20 final export/report actions.
Training goal:
- Baseline model takes many invalid or inefficient steps.
- Trained model learns good action order:
- clarify/assume loads,
- create feasible design family,
- run simulation early,
- inspect hotspots,
- revise local features,
- avoid over-lightening,
- commit only after constraints pass.
The story becomes:
RL teaches engineering workflow discipline, not just CAD generation.
24-Hour MVP
Build in order:
- Current experiment: GPT-5.4 structured design + Three.js viewer.
- Add 3D tetrahedral linear elasticity solver.
- Add load manager for cantilever/motor-mount/torque defaults.
- Add trace view for tool calls and simulator responses.
- Save per-iteration artifacts.
- Convert to OpenEnv API.
- Add baseline inference.
- Run short training or at least repeated benchmark showing improvement.
What To Say In The Pitch
We built an OpenEnv for engineering design agents. The agent receives physical requirements, infers boundary conditions, creates parametric CAD actions, runs real 3D FEA, reads stress/deformation feedback, and iteratively improves the design. This is a foundation for simulation-trained engineering models across fixtures, mounts, thermal constraints, and eventually motors.