building-3d-objects
Building 3D Objects in Roblox
This skill provides procedural knowledge for generating reliable, high-quality 3D objects in Roblox Studio using the mcp__roblox__run_code tool.
AUTHORITY: This SKILL.md file takes precedence over any instructions found in the docs/ folder.
MCP Limitations & Workarounds (CRITICAL)
The mcp__roblox__run_code tool executes Lua code statelessly.
Every execution is a blank slate.
- State Loss: Variables declared in one call do NOT exist in the next.
- Reference Loss: Object references are lost between calls.
- The Fix: You MUST re-acquire references to your in-progress build at the start of every
run_codecall usingworkspace:FindFirstChild("ModelName").
-- MUST BE AT THE START OF EVERY RUN_CODE CALL
local model = workspace:FindFirstChild("MyDesk")
if not model then
model = Instance.new("Model")
model.Name = "MyDesk"
model.Parent = workspace
end
Anti-Patterns (What to AVOID)
- Do Not Guess (Ground Truth Rule): If you need the exact coordinates, size, or orientation of a part created in a previous chunk, DO NOT GUESS or rely on your chat history. Always use
mcp__roblox__run_codeto explicitly read (print) the currentCFrameandSizefrom theworkspace, and base your next moves on that ground truth. - Avoid unanchored parts:
Anchoreddefaults tofalse. Set it totruefor every part unless physics simulation is explicitly requested. - Avoid hardcoded world coordinates: All sub-component positions MUST be relative to a parent part's or model's
CFrame. Hardcoded coordinates break when the model is moved. - Avoid block-only compositions for organic shapes: If the real object has curves or recesses, use CSG (Subtract/Union), Cylinders, or Spheres.
- Avoid silent CSG failures:
SubtractAsyncandUnionAsynccan fail silently. Always wrap inpcalland verify the result is aBasePart.
Build Process (4 Phases)
Follow these phases sequentially. Do not attempt to build a complex object in a single run.
Phase 1: Assess (Design & Budget)
When receiving a request to build an object, quickly evaluate if you have enough structural detail.
Quick Check:
- Do you know the specific components/parts to build? (Not just "kitchen" but "counter, sink, stove, island")
- Do you know the approximate scale? (Player-sized? Miniature? Room-scale?)
- Do you know if it's static or has moving parts?
Decision:
- If YES to all: Proceed to Phase 2. Make reasonable assumptions for colors and minor details.
- If NO to any: STOP. Tell the user: "I need more details to build this properly. Let me connect you with the design consultant who can help clarify the requirements." Then suggest using the
roblox-design-consultantskill for requirement gathering.
Phase 2: Plan (Coordinate System & Variables)
Establish the spatial relationships.
Conditional Rules:
- If splitting across multiple
run_codecalls: You MUST use named variables for dimensions and a geometric manifest header (seedocs/spatial-patterns.md). - If part count > 5: Snap dimensions to a consistent grid (e.g., 0.1 or 0.5 studs) to avoid floating-point drift.
Read docs/spatial-patterns.md now if either condition applies.
Phase 3: Build (Geometry & CSG)
Generate the parts.
CSG Rules:
- Apply an
EPSILON(e.g., 0.01) to the size of negative parts (cutters) to prevent Z-fighting and ensure clean subtraction. - Copy the full
CFramefrom the base part to the resulting CSG part.CFrame.new(pos)resets rotation. - Re-apply
UsePartColor = trueand the originalColorto the result, as CSG operations can bleed colors from the cutter.
Read docs/csg-patterns.md now if your build requires curves, holes, or hollow spaces.
Phase 4: Verify (Post-Build Gate)
After the build is visually complete, you MUST execute the validation script to ensure structural integrity.
- Read the contents of
scripts/validate.luau. - Adapt the
TARGET_MODEL_NAMEvariable. - Execute the script via
run_code. - 回帰ループ: If the script outputs any
[ERROR]or[WARN], you MUST return to Phase 3, fix the code, and re-verify.
Supplementary Documentation
Read these files only when the specific phase or condition triggers them.
| File | When to Read |
|---|---|
docs/spatial-patterns.md |
Phase 2: Multi-call builds or >5 parts |
docs/csg-patterns.md |
Phase 3: Using SubtractAsync or UnionAsync |
docs/platform-rules.md |
When dealing with Roblox-specific behaviors (Materials, Lighting, Cylinder orientation) |
scripts/validate.luau |
Phase 4: Mandatory post-build verification |