Importing models

Bring your own 3D files into Sandbox: GLB, glTF, FBX, OBJ, STL and VOX, scaled and set on the ground automatically, animations included.

The studio reads the main 3D formats directly in the browser: no file is sent to a server for conversion. An imported model becomes an asset of kind model, placed and animated like any library model.

Supported formats

FormatExtensionBecomesMaterialsAnimations
Binary glTF.glbmodelFrom the file (PBR)Yes
glTF.gltfmodelFrom the file (PBR)Yes
FBX.fbxmodelFrom the fileYes
Wavefront OBJ.objmodelNeutral grey materialNo
STL.stlmodelNeutral light materialNo
MagicaVoxel.voxvoxelFile paletteNo (keyframe-animatable)
Sandbox asset.jsonas is—Its clips

Prefer GLB

GLB fits in a single file with its textures, PBR materials and animations. A .gltf must be self-contained (embedded data): the studio does not read .bin or texture files lying next to it. Export to GLB from Blender, Maya or your usual tool.

Importing a file

  1. Go to the Build step

    The Project assets panel on the right lists the document’s assets (96 at most); Import sits in the panel just above it, and inside the asset editor too.
  2. Click Import

    Pick a .glb, .gltf, .obj, .fbx, .stl, .vox file or a Sandbox asset .json. The button reads “Importing” while decoding; any error shows just below.
  3. Adjust the height

    The asset is added and selected. For a model, set Height in the world (0.1 to 40 units): scale and ground offset follow.
  4. Place it

    Stay on the Build step, Place tool, and click the ground. For a character, the Cast step puts it down in its role instead.

Scaling and grounding

Every tool exports in its own units: a character can be 1.8 or 180 tall depending on the software. On import, the studio measures the model’s bounding box and brings it to 1.8 units tall, then offsets it so its lowest point rests on the ground. Both values are stored in the asset; the original file is untouched.

model.format'glb' | 'obj' | 'fbx' | 'stl'required
File format; a .gltf is stored as glb.
model.datastring
The file as base64, embedded in the document (import).
model.urlstring
File URL (library, AI generation). Either data or url.
model.bytesnumberrequired
File size in bytes.
model.fitnumberrequired
Uniform scale applied to reach the target height.
model.liftnumberrequired
Vertical offset that sets the model on the ground.
model.heightnumberDefault 1.8
Height in the world, in units.
model.animationsstring[]required
Names of the animations found in the file.
model.animFromstring
URL of another GLB whose clips are played (same skeleton).

Size and weight

An imported file is embedded in the document as base64, which grows it by about a third. The maximum size of an imported file is 12 MB; above that, the import is refused with a “File too large” message. The same cap is checked server side when publishing.

A heavy document weighs on everyone

Every player downloads the whole document before playing, and your project is saved in the browser’s limited storage. Reduce polygons and texture size before importing, and prefer a library model (referenced by URL, so weightless in the document) when it does the job. The document weight is shown on the Publish step.

Animations

Animations inside a GLB, glTF or FBX are kept as they are and listed under the asset. The runtime picks the clip to play by its name:

Clip namePlayed when
walkThe entity moves (or run).
idleThe entity stands still.
jumpIt jumps.
hitIt gets hit.
attackIt attacks.

Other clips are assigned per entity in the inspector, on the Cast and Build steps. A model without animation can borrow the clips of a library character that shares its skeleton (same bone names).

File → Export → glTF 2.0, format glTF Binary (.glb). Name your actions idle, walk, run, jump, attack, hit so the runtime finds them.

MagicaVoxel files

A .vox becomes a real voxel asset, editable with every voxel editor tool. The studio reads the file’s first model, converts MagicaVoxel’s vertical Z axis to Sandbox’s Y axis, centres the model in a grid that is a multiple of 8 (64 at most), and carries its colours into the palette (255 at most). The pivot is placed at the bottom of the model.

The voxel editor

Sandbox files

A single asset

The JSON button next to an asset’s name downloads a .sandbox-asset.json file. Import it into another project with Import: it gets a new id and arrives with its parts, palette and clips.

A whole project

For a whole game, export a .sandbox.json from the Publish step (or the Projects menu) and reopen it with Import on the studio’s entry screen. The document is migrated to the current format and gets a new project id.

Text
my-game.sandbox.json          a whole project (studio entry screen)
robot.sandbox-asset.json      a single asset (Build step, Import)

Troubleshooting

SymptomLikely causeFix
“Supported: .glb .gltf …”Unrecognised extension.Convert to GLB.
“File too large”File over 12 MB.Simplify the mesh, shrink textures.
Model without texturesglTF with external files, or OBJ / STL.Export a self-contained GLB.
The character does not animateMissing or misnamed clips.Rename to idle / walk…, or borrow clips.
Nothing happensThe project already has 96 assets.Delete unused assets.