type: studio-doc
kind: howto
area: texture
status: current
roles:[3d-artist]summary: Maps, resolution, folders and the material that reads them.
Make a Texture Set
A texture set is every map of one thing (albedo, normal, roughness and whatever else) sharing a
name and a folder. The set is the unit you browse; the role suffix tells the files inside it apart.
1. Pick the category
Six categories, and they are not one axis, so this is a ladder, not a lookup. Read top to
bottom, stop at the first yes.
Which texture category
Id
Rule
Severity
Value
CAT002
Texture is not in the category the texture ladder puts it in
info
Read top to bottom and stop at the first yes.
#
Ask
Then it is
1
Is it drawn in screen space, like UI, an icon, or a 2D element with no world surface behind it?
Sprite
2
Is it read by a particle system or a VFX graph rather than by a surface shader?
Effect
3
Does it carry no colour of its own? Is it a mask or a lookup a shader reads OVER another texture?
Mask
4
Is it one sheet a whole kit maps bands of, rather than a texture for one object?
Trim
5
Does alpha cut its silhouette? Would it read as a rectangle without it?
Cutout
6
Anything still here.
Surface
Two answers still standing: take the one HIGHER on the ladder, the same as for models.
The texture category does not follow the model category and never has. A TTrim sheet on an SMKit piece is the normal case, and a Prop can carry a Cutout.
A map's ROLE is not its category. Albedo, Normal, Roughness and the rest are the RoleSuffix. Every category ships the maps it needs, and T_Surface_Wallpaper_01_Normal is a Surface texture whose role is Normal.
Ask what reads it, not what it shows. The same painted leaf is Cutout on a foliage card, Effect as a flipbook frame in a leaf-fall effect, and Mask if a shader only ever samples one channel of it.
A texture with no colour of its own, read over another one: damage, edge wear, RGB tint masks, blend masks.
Test. Does a shader read a CHANNEL of it to modulate something else, rather than showing it?
Includes. Damage and wear masks · Edge masks · RGB tint masks (see texture.rgbMask) · Blend and vertex-blend masks · Opacity masks read separately from a surface
Not. A packed PBR texture is not a Mask. It is part of a surface and ships as TSurface_01_Packed. Mask is for a map read on its own, over a material it is not part of.
Authoring. requiredMaps none, sRGB false
Trim
One sheet a whole modular set shares, laid out in strips that pieces map bands of.
Test. Do several different meshes map different bands of this one sheet?
Authoring. texelDensity trim, sharedPerSet true
Cutout
A surface whose silhouette is cut by alpha. Without the alpha it reads as a rectangle.
Test. Is the shape of the thing in the alpha channel rather than in the mesh?
Includes. Leaf and foliage atlases · Grass and fern cards · Ivy and vine sheets · Chain-link, grating and lattice · Torn paper, netting, lace · Cobwebs
Not. A leaf sheet a particle system drives is Effect, because step 2 caught it first. A leaf texture a shader only samples one channel of is Mask.
Authoring. texelDensity as declared, requiredMaps Albedo, Roughness, Normal, alpha opacity only
Surface
An ordinary opaque surface. The default, and the one every other category is defined against.
Test. Anything the five questions above did not claim.
Includes. Tiling material surfaces: brick, plaster, grain, cobblestone · Baked object textures for a single mesh · Anything opaque, mapped to geometry, read by a surface shader
Authoring. texelDensity by tier, requiredMaps Albedo, Roughness, Normal
Settled texture edge cases
Thing
Category
Why
Leaf atlas, foliage card, grass card
Cutout
Alpha cuts the silhouette. Step 5 before step 6, so it is never Surface.
Falling-leaf flipbook for a particle system
Effect
Step 2 catches it before the alpha question is asked. What reads it decides.
Bark, tree trunk surface
Surface
Opaque. The silhouette is the mesh's.
Leaf colour-variation mask
Mask
No colour of its own; a shader samples a channel of it over the albedo.
Smoke, fire, spark sheet
Effect
Read by a VFX graph. TEX008 owns its grid.
Noise field, gradient ramp, distortion map
Effect
Same reason. The role suffix says which, the category says who reads it.
Kit-wide strip sheet
Trim
Several meshes map bands of one sheet. Named for the Set.
Baked texture for one prop
Surface
An ordinary surface that happens to be unique to one mesh. T_Surface_OldChair_01_Albedo.
Packed metallic/AO/detail/roughness map
Surface
Part of a surface, not a mask over one. Its role suffix is Packed.
Rust, grime, damage overlay
Mask
Read over a base material. T_Mask_Rust_01 over a steel material, never T_Surface_Rust_01 standing alone.
UI button, icon, frame, crosshair
Sprite
Screen space. Lives in Exported/Images/UI, not in the texture roots.
Decal texture (blood, poster, grime patch)
Cutout
A projector needs the alpha to know where the decal stops. The MESH it projects onto is the Effect category; the texture is not.
Chain-link fence, grating, lattice
Cutout
The holes are in the alpha, not in the geometry.
Skybox, cubemap
Surface
Nothing above claims it, and step 6 is the catch-all. It declares its own resolution; the density formula does not apply and nothing pretends it does.
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, Effect is what reads it.
The question everyone asks: a leaf is Cutout. Alpha is what gives it its shape. A leaf sheet
driven by a particle system is Effect, because that step caught it first. A leaf tint mask is Mask. What
reads the texture decides, not what it shows.
T_Surface_Wallpaper_01_Albedo
│ │ │ │ └── RoleSuffix: which map this is
│ │ │ └───── Num
│ │ └──────────────── Descriptor: the set
│ └──────────────────────── Category: a capitalised word
└────────────────────────── Type: T_
Every map in the set shares everything but the suffix.
3. Work out the resolution
resolution = size_m × density, rounded to the nearest power of two. Density is texels per metre
of world-space surface, by tier:
texelDensity (px/m)
tiers
Key
Value
hero
1024
standard
512
background
256
trim
512
byCategory
Key
Value
Trim
trim
settings
Key
Value
exemptCategories
Sprite, Effect
Default: standard
Tolerance: 0.25
Tier
Applies to
Hero
Player hands and weapons, close-inspection props, key story objects
Standard
The default: props, kit pieces, characters
Background
Large structures, distant terrain, skyline geometry
Two assets that will be seen next to each other must share a tier. This is the one rule on this
page no tool can check, because nothing in the pipeline knows what ends up beside what. For a kit,
the owner declares the tier once for the whole set.
Every material ships Albedo, Roughness and Normal. The rest are optional. The full list of role
suffixes is in Naming Conventions > Role-Suffix.
Two things worth deciding now rather than later:
Channel packing. We pack where we can, and the shader supports both. A packed texture is named _Packed:
Channel
Type
R
Metallic
G
AO
B
Detail
A
Roughness
RGB masking, if this thing needs colourways. Paint the base in values only, black and white,
then a separate mask where each channel maps to one of the material's colours: R primary, G
secondary, B tertiary. One set of textures, any number of colour schemes, and changing a colour theme
is changing a material rather than repainting a texture.
Category folder named exactly as the token: Surface, not Surfaces or the old SURF. One folder per set, holding
every map of it. The folder does not repeat the prefix: Surface/Wallpaper_01, not Surface/T_Surface_Wallpaper_01.
Sprite is the exception. It lives under Exported/Images/UI, split Shared and Specific.
UI art has its own pipeline.
6. Let Unity import it
You do not touch the inspector. Unity reads the role suffix in the file name and applies the
right import settings automatically. _Normal gets normal-map settings, and so on. That is what
makes "we import textures separately for maximum control" true rather than aspirational.
importSettings
Key
Value
Albedo
sRGB: true; compression: high
Roughness
sRGB: false; channel: SingleChannel
Normal
sRGB: false; type: NormalMap
AO
sRGB: false; channel: SingleChannel
Metallic
sRGB: false; channel: SingleChannel
Emissive
sRGB: true; compression: high
Height
sRGB: false; channel: SingleChannel
Damage
sRGB: false; channel: SingleChannel
EdgeMask
sRGB: false; channel: SingleChannel
Packed
sRGB: false; compression: high
Flipbook
sRGB: true; compression: high
Noise
sRGB: false; channel: SingleChannel
Gradient
sRGB: true; compression: none
Distortion
sRGB: false; compression: high
MotionVector
sRGB: false; compression: high
A texture whose name the rules don't recognise is left completely alone. A typo doesn't produce
a wrong setting, it produces no setting, which is much easier to spot.
Genuinely need different settings? Add it to exceptions.json. That suppresses the warning and
stops the importer rewriting it.
7. Make the material
Named for the texture set it is built from, not the mesh it lands on:
T_Surface_Wallpaper_01 → M_Surface_Wallpaper_01
One wallpaper material goes on a wall, a screen and a scrap of torn paper. Naming it after any one of
the three would be naming it after an accident. Swap the prefix to find the pair.
A tint variant is the base name plus one PascalCase word naming the variation, not where it was
first used: M_Surface_Wallpaper_01_Cream, never ..._Tavern.