Mesh operations
geometryReshape solid objects in Roblox Studio: union, subtract, intersect, fragment, sweep, mirror, and segment parts—build complex shapes without importing meshes.
Instructions
Every operation that reshapes solid geometry, in one place.
Boolean - union merges parts into one solid, subtract cuts the with parts out of path, intersect keeps only the overlap. This is how to build a shape that is not a box without importing a mesh.
Breaking apart - fragment shatters a part into random debris, for destruction. segment is the opposite kind of break: it cuts a MeshPart into parts you NAME, so a solid car mesh becomes a body and four wheels a script can find and turn. Use fragment for rubble and segment for articulation.
Motion - sweep builds the volume a part passes through as it moves, which is the only real answer to 'does this door hit the wall when it opens'. Give to for a slide, or spin degrees with a pivot for a hinge. Pass checkAgainst and it reports what the swept volume overlaps; with keep: false it measures and cleans up after itself, leaving nothing behind.
subtract and intersect need the parts to actually overlap, and they fail differently when they do not. intersect returns nothing, which comes back as an error rather than a silent no-op. subtract returns the subject UNCHANGED - a full-size copy of it, reported as a created part - because cutting nothing out of something legitimately leaves it whole. So a subtract that succeeds is not proof that anything was cut: check the positions overlap with inspect first, or compare the result's size against the original.
Results keep the original's material, colour, texture and anchoring. Roblox returns bare grey MeshParts, so a brick wall with a hole cut in it would otherwise come back as a grey slab - correct geometry that looks like a mistake.
mesh reads the real triangle and vertex counts of MeshParts, which is the only way to tell a 40,000-triangle tree from a 400-triangle one — they are identical in the Explorer and in Properties, and the difference is whether the place runs on a phone. It also reports mesh size against part size: the same triangles stretched over a bigger object is the usual reason a model costs more than it looks like it should.
mesh only works on meshes the signed-in Studio user or the experience owner OWNS. Roblox refuses to open anyone else's, so a model inserted from the Creator Store cannot be measured this way — the tool says which parts were skipped rather than failing the whole batch.
mirror flips instances across a plane and has no engine API behind it — Studio simply cannot do this, which is why people ask for it. Mirroring about the middle of the selection is the default, because mirroring a building at x=200 about the world origin puts it 400 studs away rather than flipping it in place. It COPIES by default; pass copy: false to flip the originals. MeshParts move and rotate correctly but their meshes are not remade, so an asymmetric mesh still reads the same way round.
segment runs Roblox's Cube model and takes tens of seconds; the rest are fast. Each call is one undo step.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| op | Yes | 'union' merges, 'subtract' cuts `with` out of `path`, 'intersect' keeps only the overlap, 'fragment' shatters into debris, 'sweep' builds a motion volume, 'segment' cuts a mesh into named parts. | |
| to | No | sweep only: slide to this position, e.g. "0, 10, 0". | |
| axis | No | sweep: axis to spin around, e.g. "0, 1, 0" (defaults to up). mirror: which axis to flip across — "X", "Y" or "Z", defaulting to X. | |
| copy | No | mirror only: leave the originals and add mirrored copies. True by default — that is what builds a symmetrical structure from half of one. False flips the originals in place. | |
| keep | No | sweep only: leave the volume as a part. Off measures and cleans up. | |
| name | No | Name for the result. Defaults to the original's. | |
| path | Yes | The part being operated on - the one cut from, for subtract. | |
| spin | No | sweep only: rotate this many degrees. Use with `pivot` for a hinge. | |
| with | No | The other parts. Required for union, subtract and intersect. | |
| about | No | mirror only: the plane position, e.g. "0, 0, 0". Defaults to the middle of what is being mirrored, which flips it in place. | |
| paths | No | mesh only: the MeshParts to read geometry from. | |
| pivot | No | sweep only: the hinge point. Defaults to the part's own centre, which spins it in place - a door needs its hinge edge here. | |
| steps | No | sweep only: how many samples along the motion. Too few cuts corners off an arc. | |
| anchor | No | segment only: anchor every part. | |
| groups | No | segment only: the part names to cut into, e.g. ["body", "lid"]. Overrides `schema`. | |
| parent | No | Where to put the result. Defaults to the original's parent. | |
| pieces | No | fragment only: roughly how many pieces to break into. | |
| schema | No | segment only: a built-in split. 'Car5' gives a body and four wheels under fixed names; 'Body1' gives one mesh. Ignored when `groups` is set. | |
| scaleTo | No | segment only: scale so the longest side is this many studs. | |
| position | No | segment only: where to place the result. Defaults to where the source was. | |
| studioId | No | Target Studio; omit for the active one. | |
| positions | No | sweep only: an explicit path of positions to sweep along. | |
| splitApart | No | Return disconnected chunks as separate parts rather than one. | |
| checkAgainst | No | sweep only: report what the volume overlaps. An empty array checks against everything; a list checks only those. | |
| keepOriginal | No | segment only: leave the source MeshPart in place instead of replacing it. | |
| transparency | No | sweep only: how see-through the volume is. | |
| keepOriginals | No | Leave the input parts in place instead of consuming them. | |
| collisionFidelity | No | How exactly the result collides. Precise is expensive - raise it only for a surface players walk on. | Default |