← All tutorials

Export to Roblox

Beginner · 5 min · Roblox

AxoGeo exports Roblox natively. You get an .rbxmx model and a generated Luau runtime that keeps driving it — so the parameters you built the asset with are still there, as live Instance Attributes, after it lands in your game.

No Blender. No format conversion.

1. Turn on Mesh & Image APIs (once per experience)

In Studio: Game Settings → Security → Allow Mesh & Image APIs → On.

Do this first. Without it your meshes render as a pink and blue checkered placeholder, and it looks like the export failed when it did not. You only need to do it once per experience.

2. Export from AxoGeo

Open the Export dialog and choose Roblox (.rbxmx).

Before you download, the dialog runs the real exporter and shows you any warnings it produced — things like a node that has no Roblox equivalent yet, or a material that will be approximated on this target. Read them. They are the same warnings you would otherwise discover in Studio.

Leave animation on if your graph is animated; turn it off to export a statue of the current frame.

3. Bring it into Studio

Drag the .rbxmx into the Studio viewport, or right-click Workspace → Insert from File and pick it.

The model arrives with its script inside. Geometry builds once when the script initialises — so re-triggering an effect later costs nothing, and the parts only build inside Workspace.

4. Tune it live

Select the model and look at the Attributes section at the bottom of the Properties panel. Every parameter you exposed in the graph is there.

Change one while the game is running. The runtime re-reads its attributes every frame, so a radius, a colour, a rate or a count updates immediately — no re-export, no going back to the browser.

This is the part worth playing with. It is the difference between shipping a mesh and shipping an asset.

5. Drive it from your game

Attributes are the API. Anything your code can set, the asset responds to:

local effect = workspace.MyEffect
effect:SetAttribute("Glow", 2.5)
effect:SetAttribute("Radius", 12)

And because every part composes onto the model's root frame each frame rather than writing absolute world coordinates, one PivotTo moves the whole thing:

effect:PivotTo(CFrame.new(target.Position))

Good to know

Next

Another engine Export to Godot →