# 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: ```text 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: ```text 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: 1. **Cantilever tip load**: fixed face at x=0, downward force at free tip. 2. **Motor mount**: bolt holes fixed, radial/axial motor load at boss, optional torque couple. 3. **Chair/seat support**: fixed feet or base, downward distributed load on seat surface. 4. **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: ```json {"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: ```json {"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: ```json {"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: ```json {"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: ```json { "valid": true, "changed_parameters": ["base_thickness_mm"], "geometry_status": "buildable", "warnings": [] } ``` After FEA: ```json { "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: ```json { "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: 1. Current experiment: GPT-5.4 structured design + Three.js viewer. 2. Add 3D tetrahedral linear elasticity solver. 3. Add load manager for cantilever/motor-mount/torque defaults. 4. Add trace view for tool calls and simulator responses. 5. Save per-iteration artifacts. 6. Convert to OpenEnv API. 7. Add baseline inference. 8. 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.