Skip to content

Grid Placement v6.0

Smooth Placement

Smooth (non-grid) placement mode in Grid Placement 6.0.

Status
Current
Version
v6.0
Source updated
2026-09-04
Generated on
2026-09-06

SMOOTH placement uses exact world-space positions instead of snapping objects to the grid.

Use it for furniture, clutter, rocks, vegetation, or other objects where the grid should not determine the final position. Use GRID for grid-aligned structures and CELL/EDGE/FACE/CORNER mounts.

Enable SMOOTH

Coordinate mode is per session:

session.placement_coordinate_mode= PlacementEnums.PlacementCoordinateMode.SMOOTH

Switch back with PlacementCoordinateMode.GRID.

Coordinate mode is separate from place, move, and demolish actions.

Configure a footprint

Every SMOOTH placeable needs a non-zero world footprint:

entry.footprint_2d= Vector2(32,32)
entry.footprint_3d_world= Vector3(2,2,2)

If the footprint is missing, SMOOTH placement rejects the target because it cannot determine whether the object overlaps committed placement occupancy.

Validation model

SMOOTH placement uses plugin-owned occupancy as its main record of object overlap.

A commit normally checks:

  1. Selected entry and configuration.
  2. Target world position and footprint.
  3. Overlap against committed placement occupancy.
  4. Optional physics obstacles or support when configured.
  5. Final commit and stable placement identity.

Physics can add environment checks, but it does not replace Grid Placement's committed occupancy record.

2D and 3D

Capability 2D 3D
World footprint footprint_2d footprint_3d_world
Primary overlap shape rotated 2D bounds yaw-rotated 3D bounds
Optional physics obstacles supported supported
Ground/support sampling project-specific targeting/physics path optional ground/support ray/path
World-space object sockets supported, opt-in

3D ground/support

3D SMOOTH can optionally use physics to resolve or validate the supporting surface. Keep this separate from GRID slope/support rules:

  • GRID support checks whether a grid footprint or structure can use the target support.
  • SMOOTH support checks whether the free world-space target has acceptable ground or environment evidence.

If a configured support check misses, placement should reject instead of inventing a surface.

3D world-space sockets

SMOOTH sockets provide object-to-object joins without using GRID mount keys.

PlacementSnapProfile3D can publish or consume socket roles such as:

  • ENDS — end-to-end pieces such as fences;
  • PERIMETER — edge or perimeter joins;
  • FACE — provider face points;
  • UP — upward or top points.

The consumer's snaps_with still controls which provider families it accepts. Socket snapping is opt-in; a zero snap radius or no published sockets leaves the object in free SMOOTH mode.

For socket-enabled consumers, attachment_requirement = REQUIRED rejects both preview and commit if no compatible socket is within the snap radius. OPTIONAL snaps nearby but permits free placement otherwise. INHERIT uses the host-bound GRID service's ObjectPlacementSettings3D default, including changes to that shared resource. A standalone SmoothPlacementService3D can set its attachment_settings resource directly; without one, the default is OPTIONAL. Explicit profile values override the shared default.

Example uses

  • fence panel → fence panel;
  • free-positioned floor → wall;
  • wall/floor perimeter → ceiling/platform piece.

A SMOOTH socket is not a GRID CELL/EDGE/FACE/CORNER mount. Grid Placement 6.0 does not define a generic GRID TOP mount; an UP socket does not create one.

Move and demolish

SMOOTH objects use the normal placement lifecycle:

  • Move: validate the new footprint while excluding the object being moved; update occupancy only after validation succeeds.
  • Cancel: keep the committed object and occupancy unchanged.
  • Demolish: remove the placement record and its occupancy together.

Rotation

SMOOTH occupancy is rotation-aware. The overlap bounds use the rotated footprint, so a long object rotated 90° does not keep its original unrotated occupancy shape.

Save and restore

SMOOTH objects receive stable placement identity and use the same coordinated restore path as GRID objects and mounts.

Do not rebuild a standalone SMOOTH occupancy registry separately from the saved placement records. Use the restore coordinator for the dimension you are working in.

See Save and Load.

Optional physics obstacles

Set the relevant occupied/collision mask when game-world physics bodies should also block a SMOOTH target. Leave the optional physics check disabled when placement occupancy alone is the intended rule.

Keep collision masks explicit. Do not weaken placement occupancy rules to compensate for a misconfigured physics mask.

Common failures

Symptom Check
“No footprint configured” Set footprint_2d or footprint_3d_world.
Preview is blocked over empty-looking ground Inspect placement occupancy and optional physics masks.
3D object has wrong Y Check the configured ground/support path and collision mask.
Socket snap never activates Check provider socket roles, consumer snaps_with, snap radius, and provider identity.
Duplicate join is rejected Expected when the target socket is already occupied.
Restore creates conflicts/duplicates Use coordinated placement-world restore instead of rebuilding one registry independently.