Filenames inside a downloaded ZIP follow an asset name + role suffix pattern. Even when a project grows to dozens or hundreds of assets, you can keep them on a consistent naming scheme.
Quick flow
- Workspace → pick an asset → click the download icon
- Asset name: whatever you type in the "Asset name" input at the top of the popover gets substituted into the
$assettoken - Naming preset: pick a template from the dropdown (default = "Asset name")
- Download → every file inside the ZIP gets renamed consistently
Default behavior
With the default preset (Asset name) selected:
MyHero.fbx
└─ MyHero.fbm/
├─ MyHero.png ← BaseColor
├─ MyHero_n.png ← Normal
├─ MyHero_MetallicSmoothness.png ← with Unity preset
└─ MyHero_Occlusion.png ← with Unity preset
MyHero is replaced by whatever you typed in the Asset name input at download time. You can rename per-download freely.
Tokens
In Dashboard → Export Naming, you can save templates built from tokens. Click the chips next to each input to insert tokens precisely at the cursor (typing them by hand risks typos).
$asset— the value typed in the download popover's Asset name input$date— today's date (YYYYMMDD)
Example — project-prefix grouping
Template: tycoon_$asset / Download input: character01 →
tycoon_character01.fbx
└─ tycoon_character01.fbm/
├─ tycoon_character01.png
├─ tycoon_character01_n.png
└─ tycoon_character01_MetallicSmoothness.png
Example — date-based versioning
Template: $date_$asset / Input: character01 →
20260530_character01.fbx
Example — category-based presets
Separate presets for characters / environment / props:
| Preset name | Mesh template | Result (input orc) |
|---|---|---|
| Character | char_$asset | char_orc.fbx |
| Environment | env_$asset | env_orc.fbx |
| Prop | prop_$asset | prop_orc.fbx |
Role suffixes are automatic
Texture filenames get role suffixes automatically — you don't need to add them in your template.
_n— Normal map_MetallicSmoothness— Unity Lit / URP Lit packed Metallic + Smoothness_Occlusion— Occlusion map_AO/_Roughness/_Metallic— when channel-split is on
Create a preset
In the dashboard's Export Naming page:
- Preset name (e.g. "Tycoon project")
- Mesh template —
$assetor your pattern - Texture template —
$assetor your pattern - Click Create
Click the $asset / $date chips next to each input to insert tokens at the caret. Typing them by hand risks typos ($aset, $asest) that produce literal strings in filenames instead of the intended substitution.
Engine recommendations
| Engine | Pattern | Texture preset | Why |
|---|---|---|---|
| Unity | $asset (default) | Unity | Auto material wiring — Unity URP/Lit recognizes _MetallicSmoothness / _Occlusion suffixes automatically |
| Unreal | $asset | Standard | Unreal also splits BaseColor/Normal/ORM. Role suffixes serve as auxiliary identifiers |
| Blender / Godot / three.js | $asset | Standard | glTF/PBR standard workflow |
| Multi-project | <project>_$asset | Engine-specific | Auto-prefix when assets from multiple projects share a directory |
Apply at download
When downloading an asset, pick your saved preset from the Naming preset dropdown at the top of the popover. Built-in:
- Asset name — single
$assettoken (the most common case, default)
Your saved presets (e.g. Tycoon project) show up alongside built-ins in the same dropdown. Each row shows the raw template (e.g. tycoon_$asset) underneath the name so you can verify which pattern this preset stamps.
Per-format behavior
| Format | Outer filename | Inside (ZIP) |
|---|---|---|
| GLB | MyHero.glb | (textures embedded in the GLB binary) |
| STL | MyHero.stl | (no textures) |
| FBX | MyHero.fbx.zip | MyHero.fbx + every texture inside MyHero.fbm/ |
| OBJ | MyHero.zip | MyHero.obj, MyHero.mtl, every texture |
| Textures only | MyHero.zip | textures only (no model file) |
GLB and STL are single-file formats, so the template applies only to the outer filename. FBX / OBJ / textures-only also apply the template to every file inside the ZIP.
FAQ
Can mesh and texture templates be the same?
Yes. The default preset uses $asset for both, which is the most common workflow. Split them only when you need to (e.g. mesh = $asset, texture = tex_$asset).
Are non-ASCII asset names supported?
At download time, an OS-safe sanitization runs. Letters in other scripts are preserved; spaces, parentheses, question marks, and similar symbols become _ (my character → my_character).
Can I have multiple presets? Yes. Create per-project or per-engine presets and pick one at download time.
Can I batch-rename files I already downloaded? This feature applies only at download time. For files already on disk, use your OS's batch-rename tools.
Where did the material template go? Material names are almost always the same as the mesh name in practice, so the UI doesn't separate them. The mesh template is applied to material names automatically.
I picked only some channels for FBX/OBJ, but the ZIP still includes other textures. Textures wired directly into a model file's (FBX/OBJ) materials are always included regardless of the channel selection — otherwise the mesh would arrive with broken material references. Only textures that are not wired into a material (e.g. a leftover ORM source after channel split) are affected by the channel filter. If you truly want a subset of maps only, use the Textures-only format instead — it has no material dependencies and respects channel selection directly.
Troubleshooting
Filenames look mangled (special chars became _)
OS-unsafe characters (spaces, parentheses, quotes, etc.) become _. Non-ASCII letters are preserved as-is. Replace spaces yourself for cleaner output.
Preset won't save
- Preset name: letters (any script), digits, space,
_,-only. - Template body: ASCII letters, digits,
$,_,-,.only (matches the sanitization applied to substituted tokens).
Duplicate filenames inside the ZIP
Don't type role suffixes like _n or _MetallicSmoothness into the texture template. The worker appends them automatically, so doing it yourself produces double suffixes such as MyHero_MetallicSmoothness_MetallicSmoothness.png. The only tokens you can use are $asset and $date.