Hi Creators,
Today, we’re taking the first step toward expanding simulation capabilities in WorldModel to support true per-world simulation control.
Our long-term goal for WorldModel is to transform it into an independent, parallel physics sandbox, opening the door to full physics simulation inside ViewportFrame GUIs and giving you more control over multi-world simulation.
To kick this off, collision group management is moving from PhysicsService to WorldRoot.
This change brings two key improvements:
- Per-World Isolation: Each
WorldModelinstance can now maintain its own independent collision group state or inherit fromWorkspacewhen desired. - Consistent Physics Queries: Spatial and physics queries, such as
Raycast,GetPartBoundsInBox, andCanCollideWith, inside aWorldModelnow fully respect collision groups, bringingWorldModelbehavior into alignment withWorkspace.
What’s Changing?
Collision Group Management Moves to WorldRoot
Every collision group management method that lived on PhysicsService is now available directly on WorldRoot. Because Workspace and WorldModel both inherit from WorldRoot, each world instance now gets its own independent budget of 32 collision groups.
Since managing collision groups was the primary responsibility of PhysicsService, PhysicsService is now deprecated in favor of these per-world WorldRoot APIs. In the table below, see which APIs are deprecated and what APIs replace them.
API Mapping
| Before (deprecated) | After (canonical) |
|---|---|
PhysicsService:CollisionGroupsAreCollidable() |
WorldRoot:CollisionGroupsAreCollidable() |
PhysicsService:CollisionGroupSetCollidable() |
WorldRoot:CollisionGroupSetCollidable() |
PhysicsService:GetMaxCollisionGroups() |
WorldRoot:GetMaxCollisionGroups() |
PhysicsService:GetRegisteredCollisionGroups() |
WorldRoot:GetRegisteredCollisionGroups() |
PhysicsService:IsCollisionGroupRegistered() |
WorldRoot:IsCollisionGroupRegistered() |
PhysicsService:RegisterCollisionGroup() |
WorldRoot:RegisterCollisionGroup() |
PhysicsService:RenameCollisionGroup() |
WorldRoot:RenameCollisionGroup() |
PhysicsService:UnregisterCollisionGroup() |
WorldRoot:UnregisterCollisionGroup() |
New Property: WorldModel.UseWorkspaceCollisionGroups
To make setup effortless when you don’t need distinct collision rules per world, we’ve added a new boolean property: WorldModel.UseWorkspaceCollisionGroups.
False(Default): Simulation and spatial queries resolve against theWorldModel’s own independent collision groups.True: Simulation and spatial queries inside theWorldModelresolve usingWorkspace’s collision groups instead, removing the need to duplicate setup logic across worlds.
Note: Reading or writing WorldModel collision groups while UseWorkspaceCollisionGroups = true will issue a Studio warning, as that specific world’s state is currently bypassed.
Touch Behavior on WorldModel
All touch detection in WorldModel now inherently respects collision groups (matching the behavior of Workspace.TouchesUseCollisionGroups = true). This is non-configurable on WorldModel, aligning with our long-term goal of making all touch events respect collision groups across all worlds.
Backwards Compatibility
These changes are fully backwards-compatible:
- No code changes required: Existing calls to
PhysicsServicewill automatically forward toWorkspace. - Zero breakage for existing worlds:
WorldModel.UseWorkspaceCollisionGroupsdefaults tofalse, preserving existing query setups. - Identical method behavior:
WorldRootmethods behave identically to their oldPhysicsServicecounterparts, with the only change being which world instance owns the state.
Studio Collision Groups Editor Update
To complement these API changes, we’re updating the Collision Groups Editor in Studio!
- World Selector Dropdown: When your place contains at least one
WorldModel, a dropdown appears at the top of the editor letting you inspect and modify the collision group matrix for any specific world. - Inheritance Checkbox: An inline “Use Workspace Collision Groups” toggle lets you sync a
WorldModeltoWorkspacerules with a single click.
What’s Next?
This is the first step toward expanding simulation capabilities in WorldModels to support more advanced per-world workflows. Looking ahead, we’re exploring next steps to expand WorldModel simulation capabilities to better match Workspace, as well as enhancing creator control over simulation in general. This includes exploring:
- Full physics simulation inside
WorldModel - Global simulation rate adjustments (enabling effects like slow-motion physics) on
WorldRoot - Exposing scriptable physics stepping on
WorldRoot
We’d love to hear which of these capabilities or workflows you are most excited to see in the future! Thank you for your continued support, and please feel free to share your feedback, report any issues, or show off what you’re building with this new WorldModel feature in the comments below.
Happy Building,
Roblox Physics Team


