DocsReference

What lands in a Roblox export, and what your scripts can reach

Export to Roblox writes one .rbxmx model file. Drag it into Studio, or use Insert, then Model from File. Inside it are three things: a Root part, a GeometryData module holding the baked vertex data, and a Runtime script that builds the geometry when the game starts and drives it every frame.

Nothing in the file is a mesh asset. There is no upload, no moderation wait and no asset id. The geometry is constructed on the player's machine from the baked data.

Finding the parts by name#

Every set the graph produces is named after the node's label, with anything that is not a letter or digit stripped. A node labelled "Wall Shards" lands as WallShards. Two nodes with the same label get a number: Shards and Shards2.

Where a set sits depends on what it is. A single static mesh is a MeshPart directly on the model, named <SetName>. A fractured object is N MeshParts on the model, <SetName>_1 through <SetName>_N. Particles, curve instances and grids each sit inside a Folder named after the set, with the parts inside. So model:GetChildren() finds static and shard sets, and a pooled set is one level down: read the Folder by name.

Match on the exact name or on <SetName>_<digits>, not on a prefix.

The attributes your game writes#

Every exposed knob in the graph becomes an Attribute on the model, read live every frame:

lua
model:SetAttribute("Compare_Threshold", 2)

The defaults ship in the file and the runtime only fills in attributes that are missing, so a value you set in Studio wins.

Four attributes ship on every ordinary export. Animation_Enabled decides whether the clock advances. Animation_FPS is the playback rate. Animation_Loop is "repeat", "pingpong" or "once". Model_Scale scales the geometry, the motion and every distance threshold together, so an asset made at one size works at another. A staged export ships only Model_Scale and Stage_Value, and your code owns the clock.

Distance nodes also ship an ObjectValue named <Name>_Target. Drop any BasePart, Model or Attachment into its .Value and the asset reacts to it.

Two things to know before you script against it#

The runtime is a client script. Each player's client builds and animates its own copy, so a server script cannot see the built parts; it sees Root, GeometryData and Runtime. Attributes replicate from the server to every client, so setting one on the server changes what every player sees. Setting one on a client changes it for that player only.

The clock is per client too. It starts when that player's script starts, so a player who joins later sees the animation from its beginning. The shape is identical for everyone, because the random numbers are seeded and the maths is the same on every client.

Pools are fixed at build time. A particle or curve set never grows or shrinks while the game runs, and a part you destroy stays destroyed.

Appearance#

Uniform sets reapply their material only when the graph's colour, material, fade or reflectance changes, so a Transparency you set by hand is kept until the graph changes it. Per-instance sets write Color and Transparency every frame and will overwrite yours.

A part has no emissive channel, so a glowing material tints the part colour toward the emissive colour and switches to Neon at higher Emissive Intensity. Glass on a single part stays real refractive Glass; on a multi-part set it becomes smooth plastic, because Roblox Glass does not render anything transparent behind it.

Open the editor and try it