muse-engine-32 / docs /HOWTO-AUTODESK.md
axonis22's picture
Muse Engine 32: your FBX/GLB scene as the level, skinned characters, Model check, save/load setup
6c78aa4 verified
|
Raw History Blame Contribute Delete
15.2 kB

HOWTO: Maya and 3ds Max exports for Muse Engine (Engine 32 RC)

This page is for artists who work in Autodesk Maya or 3ds Max and want to bring a scene (it becomes the level you walk around in) or a rigged, animated character (it becomes the enemies) into Muse Engine.

The short version:

Scene (level) Character (enemies)
Format FBX 2014 to 2020, binary (or glTF binary .glb); any FBX 2011+ (7.x) loads FBX 2014 to 2020, binary (or .glb)
Units / up axis keep your scene's own (cm + Y-up in Maya, Z-up in Max are fine) the same
Must include geometry, materials, Embed Media geometry, Skins, Bake Animation, Embed Media
Names that matter PlayerStart, UCX_…, …_col, …nocol… take names Idle, Walk, Run, Shoot, Death
Limits about 300k triangles is comfortable; 1.5M vertices max 60 skinned bones, 4 weights per vertex, about 100k triangles

After loading, press Tab and open Model check. It lists what the engine found in your file (units, up axis, bones, takes with fps and length, triangles, colliders, textures) and every problem it spotted, each with the fix. The table at the end of this page explains every warning.

FBX is an Autodesk format; Muse Engine reads it with three.js FBXLoader (MIT). glTF is an open Khronos standard. Nothing here needs an Autodesk plug-in beyond the FBX exporter that ships with Maya and 3ds Max.


1. Units and up axis: leave them alone

Muse Engine reads UnitScaleFactor and UpAxis from the FBX and converts everything to metres, Y-up itself.

  • Maya: the default working units are centimetres and Y-up. Both are fine. Z-up scenes are fine too.
  • 3ds Max: Z-up is fine. Any system unit (cm, m, inches) is fine as long as it is written to the file.
  • In the FBX export dialog: under Advanced Options › Units, keep Automatic ticked. Under Axis Conversion, keep your scene's up axis (Y or Z). Do not rescale by hand.
  • glTF / GLB is always metres and Y-up by definition.

If a model still comes in at the wrong size or lying on its side, Model check says "No unit information in the file" or "No up-axis information". Pick Units and Up by hand in the panel, next to the load button. The choice is saved in your setup file.

2. Exporting a scene (becomes the level)

Maya: File › Export All (or Export Selection), file type FBX export. 3ds Max: File › Export › Export (or Export Selected), type Autodesk (*.FBX).

In the FBX export options:

  • Geometry: Smoothing Groups on. Triangulate is optional (the engine triangulates anyway).
  • Animation: off for static scenes.
  • Cameras / Lights: off. They are ignored.
  • Embed Media: on. Textures travel inside the FBX. Otherwise select the texture files together with the FBX when you load it.
  • FBX File Format: Binary, version FBX 2014 to FBX 2020. FBX 2010 and older (FBX 6.x) are rejected with the message Old FBX 6.x: re-export as FBX 2011+ or GLB (see Old FBX 6.1 files below).

Names that change how objects behave

Name objects (or their parent group) like this in the Outliner / Scene Explorer:

Name Effect in the engine
PlayerStart (also spawn, SpawnPoint) where the player starts. Maya: a locator or empty group. 3ds Max: a Dummy or Point helper. It is snapped onto the floor below it.
UCX_…, …_col, col_… collision only: invisible, but you collide with it. Use simple boxes around detailed meshes. Unreal-style UCX_ names work as they are.
…nocol… (for example fence_nocol) visible, no collision. Use it for detail meshes, wires and hanging signs.
grass…, foliage…, plant…, bush…, flower…, decal…, leaf… (small objects) visible, no collision

Everything else becomes floor (surfaces facing up, slopes up to about 45°) or wall (everything else). Model check shows the collider triangle count and how many are walkable. "No walkable floor found" almost always means a wrong up axis, or floors named _nocol.

Heavy scenes

  • Up to about 300,000 triangles runs well on most PCs. Model check warns above that and flags an error above 1,000,000.
  • Parts: every mesh × material is one draw part. The engine batches parts that share a material and texture, and skips parts outside the view. Combining meshes by material before export still helps.
  • For dense geometry, add a few UCX_ boxes and mark the detail nocol. Collision on millions of triangles is slow to build.
  • Reduce polygons with Maya: Mesh › Reduce, 3ds Max: ProOptimizer modifier.

Old FBX 6.1 files (3ds Max / Maya 2006 to 2010)

3ds Max 2006 to 2010 and Maya of the same years write FBX 6.1 (file version 6100, binary or ASCII). Engine 32 reads FBX 7.x only (FBX 2011 and later), so an FBX 6.1 file stops with:

Old FBX 6.x: re-export as FBX 2011+ or GLB. name.fbx is FBX 6.1 (version 6100, binary / ASCII, written by 3ds Max / Maya 2010 or earlier) …

What to do:

  • 3ds Max / Maya 2011 or later: open the scene and export again with FBX File Format › Version FBX 2014/2015 (or later) and Type Binary.
  • Only the old .fbx file, no newer Max: open it in Blender (2.79 reads FBX 6.x ASCII files) and export FBX 7.4 or glTF Binary (.glb). The test pack's fbx6/ folder has a small FBX 6.1 prop set (ASCII and binary) so you can see the message.

3. Exporting a rigged character (becomes the enemies)

Rig and skin

  • Export from the bind pose. Maya: Skin › Go to Bind Pose. 3ds Max: Skin modifier with Always Deform on, character in its reference pose.
  • Stand the character on the origin, facing +Z in Maya or −Y (the Front view) in 3ds Max. Both arrive facing +Z. If one comes in turned, set Faces in the panel.
  • 4 weights per vertex. Maya: Skin › Bind Skin options, Max Influences: 4 with Maintain max influences on. 3ds Max: Skin modifier › Advanced Parameters › Bone Affect Limit: 4.
  • One skinned character per file. Props parented to bones (a rifle on the hand) follow the bone.

The 60-bone limit

The engine skins on the GPU with up to 60 bones (fewer on some old GPUs). Rigs with more bones still load. The smallest leaf bones (finger tips, toe ends, twist and helper bones, Max Nub bones) are merged into their parents, while the head, neck, spine, hips, arms and legs are always kept. Model check lists every bone and marks the merged ones.

To avoid merging, skip finger and twist joints on export, or keep helper bones unskinned.

  • HumanIK (Maya): the full HIK skeleton with fingers is over 60 bones; the finger ends get merged, which is usually invisible in-game.
  • Biped (3ds Max): use 1–2 finger links or none, and no ponytail or extra spine links, to stay under 60. Biped names work as they are: Bip001 Pelvis is the hips, Bip001 Head carries the head hitbox (not Bip001 HeadNub), Bip001 L Foot / Bip001 R Foot are the feet, and the …Nub and Bip001 Footsteps bones are the first to be merged. The test pack's swat-biped-max.fbx (79 Biped-named bones, 5 takes named Idle_Rifle, Walk, Run_Rifle, Fire_Rifle, Death_KnockDown) loads with all five takes mapped and 20 bones merged; Model check shows BONES_OVER_LIMIT with the merged names.
  • CAT (3ds Max): limit the digits the same way.

Namespaces such as Character1: or mixamorig: are fine.

Animation: bake it, one take per action

  • Tick Bake Animation in the FBX exporter (Animation › Bake Animation, step 1, your full range). 30 fps is typical; 24, 25 and 60 are fine too. Model check shows the key rate of every take and warns below 15 fps or at odd rates.

  • Deformations: Skins on (Blend Shapes / Morphs are ignored).

  • Several takes in one FBX are all read. Name them so the engine maps them automatically. Namespaces and prefixes such as Character1:Reference|Walking or Take 001 are ignored:

    Role Names that match
    idle idle, stand, breathe, rest
    walk walk, stroll
    run run, jog, sprint
    shoot shoot, fire, attack
    death death, die, dead, dying
    • Maya: define clips in the Game Exporter (File › Game Exporter › Animation Clips) or the Time Editor.
    • 3ds Max: use the FBX exporter's take options or the Motion Mixer.
    • Exporter versions differ, so load the file and check the Takes table in Model check. It lists every take that arrived, with its fps, frames and length.
  • Anything the matcher can't place appears in the clip picker under the character slot. Pick a clip for any role there (or none). Your picks are saved in your setup file.

Root motion

Many mocap and Max Biped walk takes move the whole character forward. The hips, or a root bone above them, travel several metres per cycle. In a game that makes the character slide away from its own hitbox and snap back when the loop restarts.

Strip root motion (on by default, in the character section of the panel):

  • finds the moving root bone (the hips or the first moving bone above them);
  • measures how far each take travels (the Model check root motion column, in metres);
  • removes only the forward drift, keeping the hip sway and bob. The engine moves the character itself.

Untick it to play the raw takes. For the cleanest result, export in-place walks and runs:

  • Maya: zero the root/hips translation on X/Z before baking.
  • 3ds Max / Biped: use In Place Mode.

Textures

  • Embed Media in the FBX, or select the texture files together with the FBX when you load it.
  • PNG or JPEG textures are the safest. Model check lists every texture it could not find ("texture(s) not found"); those materials fall back to their base colour.
  • Big textures: the engine uploads every texture at at most 1024 px per side (resized to a power of two, with mipmaps). 4K maps (4096 px) still load, but each one costs about 64 MB while decoding and slows loading, for no visible gain. Model check warns with LARGE_TEXTURES above 2048 px, and TEXTURE_MEMORY when all textures together need more than 256 MB. 3ds Max: resize the bitmaps (or Render to Texture at 1024 / 2048) before exporting; Maya: resize the file textures.
  • For .gltf (text) files, select the .bin and images together with the .gltf, or export a single glTF Binary (.glb) instead.

4. Loading, and sharing a setup with a colleague

  • Drag and drop files onto the game view. The left half loads a scene, the right half loads a character. Drop the .fbx / .gltf together with its .bin and textures.
  • Tab › Setup › Save setup (.json) writes one small file with the scene, the character, units / up / faces, clip picks, the look and every toggle.
  • Load setup… (or dropping the .json on the game view) restores it:
    • Models that were loaded from a URL load again by themselves.
    • Models loaded from your disk can't be read back by the browser. Drop the .json together with those model files and they are matched by file name.
  • Loading shows a progress bar (download, parse, textures, build). Errors say what is wrong and what to do.

Common error messages:

Message What to do
.obj / .blend / .max / .ma / .mb files are not supported Export FBX (binary 2014–2020) or glTF binary (.glb)
Old FBX 6.x: re-export as FBX 2011+ or GLB The file is FBX 6.1 or older (3ds Max / Maya 2010 and earlier). Re-export as FBX 2014–2020 binary, or as .glb
Damaged or truncated .glb / looks damaged or truncated The export or copy did not finish. Export again
Missing x.bin next to model.gltf Select the .bin (and textures) together with the .gltf, or use .glb
Draco-compressed glTF is not supported Export without Draco mesh compression
too heavy Reduce polygons, or split the scene

5. Model check warnings

Code Meaning Fix
NO_SKIN the "character" has no skinned mesh / skeleton, so it is drawn as a static model with no animation export with Skins / Deformations on, mesh bound to the skeleton
BONES_OVER_LIMIT more than 60 bones; minor leaf bones were merged (they are listed) skip finger / twist / helper bones, or accept the merge
NO_CLIPS skinned, but no takes tick Bake Animation and include the takes
ROOT_MOTION takes move the character forward (metres shown). Note level when stripped, warning when not keep Strip root motion on, or export in-place takes
UNMAPPED_ROLES no clip found for idle / walk / run / shoot / death rename the takes, or pick clips in the clip picker
LOW_FPS / ODD_FPS takes keyed below 15 fps, or at an unusual rate bake every frame at 24 / 25 / 30 / 60 fps
ODD_SIZE a character under 0.5 m or over 3 m tall, or a scene under 2 m or over 5 km across set Units in the panel, or export with unit metadata
NO_UNITS_INFO / NO_UP_INFO the file has no unit / up-axis data, so the engine guessed FBX: keep Units: Automatic and set the up axis on export
MISSING_TEXTURES texture files not found (listed) Embed Media, or select the textures together with the model
HEAVY_MESH many triangles for WebGL1 Mesh › Reduce (Maya) / ProOptimizer (Max)
MANY_PARTS over 400 mesh × material parts combine meshes that share a material
NO_FLOOR no walkable floor: you would fall check the up axis / units, and that floors aren't named _nocol
NO_SPAWN no PlayerStart, so the player spawns on the nearest open floor add a locator / Dummy named PlayerStart
LARGE_TEXTURES textures over 2048 px (for example 4K maps); the engine shrinks every texture to 1024 px anyway export 1024 or 2048 px maps
TEXTURE_MEMORY all textures together need more than 256 MB while loading fewer or smaller textures, or one shared atlas
NPOT_TEXTURES note: textures that are not a power of two (for example 1000 × 600) are resized on upload and may blur slightly use 512, 1024 or 2048 px sizes

6. Try it with the test pack

assets/testpack/muse-engine-32-testpack-cc0.zip (also linked in the panel and the sidebar) contains:

  • a small test level, as FBX (Z-up, cm, Autodesk-style, with a PlayerStart) and GLB;
  • an animated test character, as FBX (Z-up, cm, Character1: namespace, 11 takes baked at 30 fps) and GLB;
  • the same character with 3ds Max Biped bone names (swat-biped-max.fbx, FBX 7.4, 79 bones, 5 takes);
  • fbx6/: a small prop set as FBX 6.1 (ASCII and binary, inches, like 3ds Max 2008), to see the Old FBX 6.x message.

All of it is CC0 (Kenney and Quaternius; see LICENSE-TESTPACK.md inside). Load them, then compare the Model check results with your own exports.

Models you load stay under their own licence. Loading a model does not relicense it; you are responsible for having the rights to use it.