Last Updated: 2026-02-05
This guide explains how Construct scenes are organized and how different node types work together to create complex 3D shapes.
Construct uses a hierarchical scene graph where each node has a specific role:
Primitives are the basic building blocks that generate SDF geometry:
Each primitive has parameters (radius, dimensions, etc.) that control its shape.
CSG (Constructive Solid Geometry) operators combine multiple shapes:
| Operator | Effect |
|---|---|
| Union | Combines shapes (add) |
| Subtract | Removes second shape from first (carve) |
| Intersect | Keeps only overlapping parts |
| Union smooth | Combines with rounded blend |
| Subtract smooth | Removes with rounded blend |
| Intersect smooth | Intersects with rounded blend |
| Union chamfer | Combines with a beveled seam |
| Subtract chamfer | Removes with a beveled seam |
| Intersect chamfer | Intersects with a beveled seam |
CSG operators accept two or more children.
Transform operators modify position before evaluating children:
| Operator | Effect |
|---|---|
| Translate offset | Move by a vector |
| Translate axis | Move a distance along a direction |
| Rotate euler | Rotate by Euler angles about a pivot (the origin by default), composed Z, then Y, then X |
| Rotate euler XYZ / XZY / YXZ / YZX / ZXY | The same angles composed in another order. An item's rotation mode picks which of the six the scene compiles to |
| Rotate axis | Rotate by an angle about an axis through a pivot |
| Rotate quaternion | Rotate by a unit quaternion (vector and scalar parts) about a pivot; edited with the Arcball |
| Scale uniform | Uniform scaling about a pivot |
| Scale per-axis | Per-axis scaling about a pivot (not an exact distance field) |
| Mirror axes | Reflect across one or more axes |
| Repeat linear | Copy along a line |
| Repeat radial | Copy around an axis |
| Repeat grid | Copy in a 2D/3D grid |
Transform operators typically accept one child.
Distance modifiers adjust the SDF distance after evaluating children:
| Modifier | Effect |
|---|---|
| Round | Add rounded edges |
| Onion | Create hollow shell |
| Elongate | Stretch geometry |
Alongside the SDF nodes above, a scene can hold bounding volumes — boxes that frame regions for measurement, cutaway inspection, and export. A volume is a first-class item: named, parametric (center, size and rotation can hold expressions), and it carries independent visible / cutaway / active / locked flags. It contributes no geometry — it never appears in a render or a mesh except as the region boundary.
Parenting sets scope. A volume at the scene root frames the scene; a volume parented under an item follows that item's transform and its fit actions default to that subtree. Moving the parent moves the box. At most one volume per scene is active — the one the cutaway follows and the one an export uses when no volume is named explicitly.
A Construct scene is a tree of nodes:
smooth_union (CSG)
├── sphere_1 (Primitive)
└── translate (Transform)
└── box_1 (Primitive)
In this example:
smooth_union operatorCSG operators can have any number of children:
union (CSG)
├── sphere_1
├── sphere_2
├── sphere_3
└── box_1
All children are combined with the same operation.
Transforms can wrap other transforms or operators:
linear_repeat (Transform)
└── rotate (Transform)
└── smooth_union (CSG)
├── sphere_1
└── torus_1
This creates repeated copies of a rotated blended shape.
Drag nodes to change their parent. This is useful for:
Select a node and press Delete. Children are also removed.
Expanding a mesh or tet-volume row shows its provenance — the file it was imported from, the format, and how big it is. It reads on the row that describes the item rather than in a separate panel, and it is read-only: it records what was imported, so there is nothing there to edit.
Begin with a single primitive and gradually add complexity:
Smooth CSG operations (smooth_union, smooth_subtract) create more organic results than their hard-edged equivalents.
Use CSG operators to logically group related geometry. This makes the scene easier to understand and modify.
Apply transforms at the appropriate level: