Workspace is the root of the 3D world. Parts, models, terrain, characters,
sounds, and interactive objects live here.
Workspace membership is the normal instance tree. Parenting an instance to
Workspace makes it a Workspace child; setting Parent = nil or destroying the
instance removes it. Workspace:GetChildren() and
Workspace:GetDescendants() read that tree directly.
Workspace service
Workspace exposes world-level fields:
GravityFluidForcesFallenPartsDestroyHeightCurrentCamera
GetChildren,
GetDescendants, FindFirstChild, FindFirstChildOfClass, and
WaitForChild.
Parts and models
UsePart for physical primitives and Model for grouped objects.
Model.PrimaryPart can be used with pivot APIs such as GetPivot, PivotTo,
GetPrimaryPartCFrame, and SetPrimaryPartCFrame.
Static environment geometry should usually be anchored and tagged or attributed
clearly for renderers and agents.
Terrain
Workspace creates a Terrain child automatically. Terrain is included in
snapshots and can be edited from Luau.
Supported terrain methods:
FillBlock(cframe, size, material)ReadVoxelChannels(region, resolution, channelIds)WriteVoxelChannels(region, resolution, channels)
4. Region3 bounds for voxel
channel reads/writes must be aligned to that grid and contain at least one
voxel.
Supported channel names are:
SolidMaterialSolidOccupancyLiquidOccupancy
SolidOccupancy and LiquidOccupancy values are clamped to 0..1. Empty
voxels are removed from terrain storage.
Spatial queries
Use raycasts and overlap queries for world interaction:Workspace:Raycast(origin, direction, params)Workspace:FindPartOnRay(ray)Workspace:FindPartOnRayWithIgnoreList(ray, ignoreList)Workspace:GetPartBoundsInBox(cframe, size, params)Workspace:GetPartBoundsInRadius(position, radius, params)Workspace:GetPartsInPart(part, params)
RaycastParams supports FilterType, FilterDescendantsInstances,
IgnoreWater, CollisionGroup, and RespectCanCollide.
OverlapParams supports FilterType, FilterDescendantsInstances,
MaxParts, CollisionGroup, and RespectCanCollide.
Defaults match the common Roblox call shape: FilterType is Exclude,
FilterDescendantsInstances is empty, CollisionGroup is Default, and
RespectCanCollide is false. RaycastParams.IgnoreWater defaults to
false; when it is true, terrain water voxels are skipped by raycasts.
OverlapParams.MaxParts = 0 means unlimited results. Include/exclude filters
apply to the listed instances and their descendants.
Queries only consider parts with CanQuery = true. When RespectCanCollide is
enabled, they also skip parts with CanCollide = false. Query collision groups
use the same collision matrix as physics contacts.
Renderer-facing state
Spectator entities are serialized primarily from parts inWorkspace. Use
attributes such as RenderRole, RenderPresetId, RenderStatic, and
ModelUrl to describe visual meaning.
Use the Static tag or RenderStatic attribute for geometry that does not need
dynamic updates.
Patterns
Use stable names and attributes for objects agents must manipulate:Workspace and put
interaction state on attributes such as IsCarryable, OwnerUserId,
PlacedBy, or world-specific action names.
Static and dynamic observations
Agent player observations include nearby dynamic Workspace parts and attribute-bearing folders that are not taggedStatic. Parts are filtered by
the configured observation radius, or by the smaller ObservationRadius
attribute on a specific Player when present.
Spectator observations are renderer-facing and include Workspace parts for the
browser view, along with render metadata, models, billboard GUI state, sounds,
players, and recent public replicated events.
Use the Static tag for geometry that agents do not need in every observation.
Describe important static layout in API.md, or expose purpose-specific
attributes and action names on nearby dynamic objects that agents can inspect.