Naming Conventions
They come from Asset Rules (Generated), which is written from the JSON that the Blender
add-on, the Unity postprocessor and the Bubbly Asset Editor actually enforce. A table here
cannot disagree with the tools, because it is the tools' own copy.
To change a rule, change it in the bubbly-asset-rules repo and re-run npm run docs && npm run vault.
Editing a table on this page does nothing.
Pattern
All names follow this pattern:
[Type]_[Category]_[SubCategory?]_[Set_SetNum?]_[Descriptor]_[Num]_[Action?]_[Var?]_[RoleSuffix?]
Three parts of that are worth reading twice:
Descriptorcan span up to three parts. A kit piece is usually more than one word.
Wall_Interior_HalfHeightis a single descriptor, not three tokens.Actiononly exists for the types that declare it (audio, animation, VFX, data). Without
that, a trailing part on a mesh name would be read as an action instead of a role, and the
texture importer keys on the role.Varis a two-digit number, for randomised pools. A named variant is aRoleSuffix.
Name Parts
Type
SMM_ materials live inside a .blend or .fbx and are replaced in Unity by a proper M_
material. Meshes carry SM_ so they are never confused with the prefab that usually accompanies
them. Unity treats the two almost identically in the project window.
Category
Each type draws from one list, and every category is a capitalised word (Prop, Kit,
Surface, Music). Model and texture categories are also the names of the folders the assets live
in, under Assets/Source/Meshes, Assets/Exported/Meshes and Assets/Exported/Textures.
Until 2026-10-13, texture, audio and data categories were short codes in capitals (T_SURF_,
AU_MUS_, DA_ACH_). They are now words like every other category (T_Surface_, AU_Music_,
DA_Achievement_). An old name fails NAM003, and the message says what to use instead. UI and
SFX stay in capitals because they are acronyms.
3D Models
Which one a thing is in is a ladder, read top to bottom, first yes wins. See
Naming Conventions > Which category is it below.
Textures
These are the only valid categories for textures.
They are not one axis, which is why a ladder is needed here too: Surface is what a texture is for,
Cutout is how it is authored, Trim is how it is laid out, Mask is what it carries,
Sprite is where it is drawn and Effect is what reads it. A leaf atlas answers to two of those at
once. See Naming Conventions > Which texture category is it below.
Audio Clips
These are the only valid categories for audio clips. All fall into one of these.
| Category | Note | Example |
|---|---|---|
SFX |
Sound effect | Gunshots, footsteps |
Music |
Music | |
Ambience |
Ambient sounds | Wind, rain, chatter |
VoiceOver |
Voice over | NPC dialogue, player voice |
UI |
User interface | Clicks, hovers, scrolls |
Data Assets
Ids of .bgasset files, authored in the Bubbly Asset Editor.
Sub-Category
Optional, PascalCase, free-form. A level of detail below the category. Player, Wpn, Enemy,
Menu, Forest.
Set + Set-Number
For a set, like a kit. PascalCase name, two-digit number, and the two always travel together.
A Set without a SetNum is not a valid name.
Descriptor
What the asset actually is. Player, Shotgun, Goblin, Btn, Rain. Up to three parts, so a
kit piece can say Wall_Interior_HalfHeight without inventing a token for it.
Num
Two-digit number. Always present, even for something there will only ever be one of. That way,
the day there is a second one, nothing has to be renamed.
Action/State
Optional. What the thing is doing: Fire, Reload, Hit, Hover, Loop, Open.
It sits after the number: SMA_Kit_FrontDoor_01_Open.
Variation
Optional two-digit number, for randomised pools. AU_SFX_Wpn_Shotgun_01_Fire_02.
Role-Suffix
The role a file plays in a set of files. For a texture that means the map type, from a closed list;
for a SMM_ material it is the part of the mesh it belongs to, and it is required there.
Version
Optional _V1, _V2, … for hand-kept old versions. See Project Folder Structure. The active
file is always the one without a suffix.
Examples
Which category is it
The category lists say which words are legal. They cannot say which thing is which word, and that
is the question people actually have.
Read top to bottom. Stop at the first yes.
Every category is an answer to one question: where does its origin go, and what holds it there?
The names read like a taxonomy of things, but they are not one. That mix-up is where most arguments about this
start.
Which texture category is it
Same shape of question, one level along, and the same answer: a ladder, read top to bottom, first
yes wins.
When a name is rejected
Every rule has an id, so an error message, this page and a suppression in exceptions.json all name
the same thing.
These are all warnings today. They report, they do not block. They harden to errors once the
existing backlog is cleared.
That is true of the naming rules specifically. Some mesh rules are already errors and block an
export. → Modular 3D Assets > What blocks an export