As a Roblox developer, it is currently too difficult and costly to toggle whether Instances are rendered.
The two existing approaches are:
- Approach A: Iterating over all descendants and manually setting Transparency / Visible / Enabled properties. This is slow, requires bookkeeping, and isn’t reliable for large models.
- Approach B: Moving Instances far away so they no longer render. This is hacky, unintuitive, and still wastes processing.
Neither option is performant, ergonomic, or sustainable at scale. They’re workarounds, not solutions.
There are numerous applications where developers today rely on costly workarounds that this property pairing would solve cleanly:
- World/Environment Unloading: In games like Car Crushers 2, systems unload parts of the world when players don’t need to see them (e.g., building interiors or exterior chunks). Currently this is done by iterating transparency or reparenting, which wastes performance. With CanRender, developers could exclude large sections of the environment from rendering without disrupting collisions or physics.
- NPC/Mob Culling: In games like Aftermath, NPCs outside a reasonable range are forcefully teleported to prevent rendering. With CanRender, mobs could remain simulated in place — colliding, pathfinding, and interacting — while being visually excluded until needed.
- Character Culling: In games where players occupy the same space but shouldn’t see each other (e.g., private houses, instanced events, or layered worlds), developers currently have to reparent character models or hack around with transparency and property modifications. With CanRender, characters could be hidden instantly without disrupting gameplay logic, physics, or networking.
- Cutscenes/Transitions: Developers often need to temporarily de-render props, backgrounds, or set pieces without deleting them or breaking welds. CanRender would make this efficient and predictable.
- Helper Volumes: Trigger volumes, bounding/anchor parts, or spatial query-only regions should never draw, but must still exist in the world for collision or queries. Today, this requires managing transparency or special-case models. With CanRender, these can remain entirely excluded from rendering while retaining function.
The goal of this feature request is to address the concerns raised here and to properly standardize the expected behavior explicitly.
The proposal is to introduce two new properties:
- CanRender (bool, default true)
Explicit developer-controlled toggle for whether an Instance (and its descendants) are eligible for rendering. - Renderable (read-only bool)
Indicates whether the Instance is actually renderable — i.e., CanRender is true on it and all of its ancestors.
This mirrors the existing CanX property style (CanCollide, CanQuery, CanTouch), giving developers predictable, narrowly scoped control.
In the original thread, there was ambiguity raised about a more vaguely named property “Visible” — would it affect physics, selection, audio, welds, effects, hierarchy, etc.? By scoping the proposal narrowly to rendering only, all of those become non-issues:
- Physics → Already controlled by CanCollide, Anchored, Massless, etc.
- Selection / raycasts → Tied to physics, not rendering.
- Audio → Unaffected, sounds continue to play.
- Welds & assemblies → Stay intact; only visuals are hidden.
- Effects → Emitters still simulate, but visuals are not drawn.
- Hierarchy → Renderable resolves ancestry automatically, so no manual tree-walking is needed.
This provides a clear, predictable contract: developers can be confident that CanRender affects only rendering — never physics, audio, or selection.
For example, this allows Volumes to still be collided with or act as Spatial Querying Volumes while still being excluded from the Render Pipeline, which would not be possible if collision or querying properties were bound to this new property and functioned off the principle of being “Visible”.
By introducing CanRender and Renderable, Roblox would give developers fine-grained, performant, and predictable control over rendering — without the ambiguity of a Visible property and without entangling physics, audio, or selection systems.
This follows Roblox’s established CanX property convention, solves longstanding pain points, and enables better LOD, streaming, and optimization patterns that are critical for large-scale Roblox experiences. By giving developers precise control over rendering, Roblox empowers them to build more performant, scalable, and visually dynamic games.