Hands-on texturing course
Texture like a pro.
Six maps, one material, one crate.
Not a feature tour — a course you do. You will take one untextured mesh from bare grey to a game-ready PBR asset, drilling each technique on a throwaway first, then applying it to the capstone. Every module ends with a gate you can check. Finish with an exported GLB that renders correctly in the game, and the habits to texture the next one without a guide.
How this course works
Each module teaches a cluster of techniques, then makes you use them. You drill the move on a scratch object, apply it to the capstone, read the failures it tends to produce, and pass a checklist before moving on.
The through-line is one object — the Standard Cargo Pod, the same crate the Mod Kit course builds. If you did that course, texture what you modelled. If you did not, any hard-surface mesh with UVs works; Module 05 covers what to do when it has none.
Before you start
Open Canvas from the Hub. You want a mesh in .glb form and about an hour a sitting.
A graphics tablet is optional — pressure is supported but off by default, and every drill
works with a mouse.
One habit to bring: Canvas paints into whichever channel is selected. More lost work comes from painting colour into Roughness than from any other mistake in this course. Check the channel before every stroke until it is automatic.
Module one
Land a stroke where you meant to
Painting in 3D fails in a way painting in 2D does not: the stroke lands somewhere you did not look. Before any technique, you need the camera in your hands and a clear idea of what a "channel" is, because everything after this is that same stroke aimed at a different map.
The camera is three gestures. Left-drag paints. Right-drag orbits. Middle-drag pans, and the scroll wheel zooms. That split is why you never accidentally orbit mid-stroke — the paint button is not the camera button.
Six channels, one material. The channel selector at the top of the side panel chooses which PBR map your strokes go into: Albedo, Normal, Roughness, Metallic, AO, Emissive. Each keeps its own independent layer stack over its own neutral base, and all six feed a single material on the model.
Isolate Channel shows the active map on its own, unshaded. Use it constantly. A roughness map that looks right on a lit model is often a mess when you look at it flat.
DrillA · ~10 min
Prove the stroke lands where you point
- Open Canvas. It starts on a UV sphere — that is your scratch object.
- Set the brush small (radius ~8) and paint a single dot at the very top of the sphere.
- Orbit underneath and paint another. Confirm both landed at the cursor tip, not offset.
- Turn on Isolate Channel and look at the Albedo map alone. Turn it off.
Done when you can put a dot on any point of the sphere first try, from any camera angle, without hunting.
BuildB · ~20 min
Base-coat the Cargo Pod
- Open Model… and load your crate.
- On Albedo, use Fill Layer to flood a mid-grey base. Resist the urge to detail.
- Switch to Roughness. Fill it fairly rough — most crates are not glossy.
- Switch to Metallic. Fill it black. Painted steel is not bare metal.
Done when the pod reads as one consistent painted-metal object with no detail on it at all, and toggling Isolate on each of the three channels shows a flat, deliberate value in each.
| Symptom | Cause | Fix |
|---|---|---|
| Strokes do nothing at all | The mesh has no UVs | Run Auto-UV — see Module 05. Canvas shows a hint on load when this is the case |
| The whole model turned shiny chrome | Metallic filled white | Metallic is a mask, not an amount of "metal look". Black = not metal. Fill it black and put metal only where bare metal is |
| Colour went in but nothing changed on screen | Painting a channel you are not looking at | Check the channel selector; use Isolate to confirm the map received it |
Module two
What each map is actually for
Six channels sound like six paintings. They are not. Three of them are single numbers wearing a colour picker, one is a direction vector, and only two are pictures. Treating them all as "colour" is what makes a first PBR asset look like plastic.
Albedo is base colour with no light in it. If you paint a highlight or a shadow here, it will be wrong from every other angle. Bake nothing into albedo — that is what the other maps do.
Roughness, Metallic, AO are scalar. Only brightness matters, so pick a grey. Roughness: black = mirror, white = chalk. Metallic: black = dielectric (paint, plastic, stone, rubber), white = bare metal, and almost nothing lives in between. AO: darkens crevices where ambient light would not reach.
1 on purpose, so the metallic texture is what decides
metalness. That is why a white metallic fill instantly chromes the whole model — you have told
every texel it is bare metal.Normal is a vector map, and you should rarely paint it by hand. The channel takes raw RGB, so brushing colour into it writes nonsense directions. Paint your surface detail as grayscale height on a layer instead — white raised, black recessed — then use Height → Normal with the strength slider to convert it into a correct tangent-space normal map. That is the whole reason the button exists.
Emissive is light the surface emits regardless of the scene. Black everywhere except the parts that glow. It is the fastest channel to overdo.
DrillA · ~15 min
Learn the scalar channels by feel
- On the scratch sphere, paint four vertical bands into Roughness: near-black, dark grey, mid grey, near-white.
- Turn Isolate off and orbit. Watch where the highlight survives and where it dies.
- Now paint one band into Metallic as white. Notice it does not just "shine" — it changes colour behaviour entirely, because metal tints its reflection.
Done when you can predict, before painting, which grey gives you "worn rubber", "scuffed paint" and "polished steel".
BuildB · ~30 min
Give the pod real surface detail
- Add a new layer on Albedo and paint the panel seams and a stencilled label.
- Make a new layer and paint those same seams as grayscale height — dark for recessed grooves.
- With that layer active, set Height strength and press Height → Normal. Canvas bakes it into the Normal channel and switches you there.
- Go back to Roughness and make the seams slightly rougher than the panels.
Done when the seams catch light from a grazing angle — orbit until the light rakes across them — and the pod reads as panelled metal rather than a picture of panels.
| Symptom | Cause | Fix |
|---|---|---|
| Normal map makes the model look oily and wrong | Colour brushed straight into the Normal channel | Delete that layer. Paint height in grayscale and use Height → Normal |
| Asset looks flat and lifeless in every light | Roughness is one uniform value | Real surfaces vary. Break it up — even subtly. Roughness variation reads as age and use |
| Everything glows faintly | Emissive was filled dark grey instead of black | Fill Emissive pure black, then paint only the glowing parts |
Module three
Layers, masks, and never repainting
The difference between an hour of texturing and an evening of it is whether you can change your mind. Layers and masks are how. This module is short on techniques and long on habits, and it is the one that will save you the most time.
Every channel has its own stack. Adding a layer on Albedo does not add one on Roughness. Layers carry visibility, opacity and a blend mode — Normal, Multiply, Screen, Add, Overlay — and you can reorder them by dragging a row or nudging with the arrows.
A mask is a layer's own stencil. Add mask attaches a white (fully revealed) mask. Turn on Edit mask and your strokes stop painting colour and start painting the mask instead: Paint reveals, Erase hides. Because the dab shape drives it, every brush tip, falloff and smart-mask in this course can shape a mask.
Fill layers and gradients. + Fill makes a solid layer of the brush colour, and Gradient Fill lays a two-colour ramp along a direction you choose. Both are far better starting points than brushing a base by hand, and both take masks.
DrillA · ~15 min
Paint something twice without repainting it
- On the scratch sphere, add a Fill layer in a strong colour.
- Add mask, then Clear it to hide the fill entirely.
- Turn on Edit mask and paint the colour back in as a band.
- Now Erase on the mask to cut a hole in that band. Nothing was ever repainted.
Done when you can hide and reveal any part of that fill at will, and you understand that the colour underneath never changed.
BuildB · ~25 min
Restructure the pod so it is editable
- On Albedo, separate your work into layers: base, seams, label, dirt.
- Give the dirt layer a mask and reveal it only where dirt would collect.
- Try the label layer on Multiply versus Normal and keep the one that sits into the surface rather than on top of it.
- Save the project (Save…) — masks and fills persist in the
.canvasfile.
Done when you can change the crate's base colour without touching a single mark you painted on top of it.
Module four
Material layers — the shortcut that is not a cheat
Everything so far has been one channel at a time. A material layer is the move that makes Canvas fast: it drops a complete PBR material into every channel at once, hidden behind a single shared mask, and you paint the material in where you want it.
The eight built-in presets are Matte Plastic, Glossy Plastic, Polished Metal, Brushed Metal, Gold, Rough Stone, Rubber and Emissive Glow. Treat them as starting points to mask in and then adjust, not as finished looks.
Deleting is group-aware. Removing a material layer removes it from every channel at once, so you never end up with the roughness half of a material you thought you deleted.
BuildA · ~35 min
Bare metal through the paint
- On the pod, open the Materials tab and click Brushed Metal. The model will not change — that is correct, the mask is hidden.
- Paint along the crate's edges and corners. The metal appears, correct in every channel.
- Switch the brush to Erase and pull back anywhere it reads as too much.
- Add a second material layer — Rough Stone or Rubber — and mask in a scuffed patch on one face.
Done when the worn edges show real metal — reflective, tinted, rougher than the paint — and you did not touch the Metallic channel by hand once.
| Symptom | Cause | Fix |
|---|---|---|
| Clicked a material and nothing happened | Working as designed — the mask starts black | Just paint. Your strokes reveal it |
| Strokes reveal material when you wanted colour | Edit mask is still on from the material layer | Turn Edit mask off, or select a different layer |
| Only one channel updated while dragging | Sibling channels recomposite on mouse-up | Release the stroke and look again — the others catch up |
Module five
Let the mesh do the work
Wear happens where geometry says it happens: edges rub, cavities collect dirt, contact points darken. Canvas can read that from the mesh itself, which is both faster and more convincing than guessing with a brush.
Edge Wear and Cavity Dirt estimate curvature from the mesh and composite your brush colour into convex edges or concave crevices respectively. They are one click and they are the single fastest way to make an asset look used.
Bake AO computes real ambient occlusion by raycasting the mesh and writes it into the AO channel. It is synchronous — a dense mesh will make the app sit still for a moment. That is the bake working, not a hang.
When the mesh has no UVs, painting is impossible and Canvas tells you so on load. The Auto-UV menu generates them: xatlas (best quality) first, Smart (angle-based) as an alternative, and Box or Planar Top/Front/Side projections for simple shapes. Because new UVs are invisible on the model, Canvas turns on the UV Checker automatically so you can see the result.
DrillA · ~15 min
Rescue a mesh with no UVs
- Load any mesh that has no UVs — Canvas will hint at it on load.
- Try to paint. Confirm nothing lands.
- Run Auto-UV → xatlas. The UV Checker turns on by itself.
- Read the checker for stretching, then try Box projection and compare the two.
Done when you can look at a checkered model and say which parts will paint cleanly and which will smear, before painting anything.
BuildB · ~25 min
Age the pod with its own geometry
- Pick a light, slightly desaturated grey and run Edge Wear.
- Pick a dark brown-grey and run Cavity Dirt.
- Run Bake AO and give it a moment. Toggle the AO channel's layer to see the difference it makes with and without.
- Mask back any wear that landed somewhere a real crate would never rub.
Done when the pod's wear follows its form — and you had to remove some of it, because the automatic pass always overreaches somewhere.
Module six
Game-ready, and out the door
An asset that looks right in Canvas and wrong in the game is not finished. This module is about judging it honestly and then getting it out in the right shape.
Judge it under more than one light. The Scene tab carries the environment presets and bundled HDRIs, an exposure slider, and rotation for loaded HDRIs. Metals in particular are reflection-driven — a metal judged against one sky is not judged at all. Turn the ground plane and shadows on to see contact, and use the Shading selector to drop to Unlit (flat albedo, no lighting to hide behind) or Matcap (clay, for reading form).
Resolution is a Scene-tab setting — 1K, 2K or 4K per channel. Work at 1K or 2K and raise it near the end: changing resolution resamples every layer and clears undo history.
BuildA · ~20 min
Ship the Cargo Pod
- Cycle every environment preset and fix anything that only worked under one.
- Check it in Unlit — if the albedo has baked-in shadows, you will see them now.
- Raise the resolution to 2K and do a final pass on the seams.
- Export GLB…, then Send to Crucible… and look at it in a real scene.
Done when the crate reads correctly in the Crucible under lighting you did not choose, and nothing about it surprises you.
Practice
The Practice Gym
Reps to run on scratch objects once the course is done. Each is deliberately small enough to finish in a sitting.
- Five materials, one sphere. Rubber, gold, wet stone, painted steel, glowing panel — using only channel fills and one material layer each.
- Grunge pass. Set the brush tip to Noise (grunge) and weather a clean asset using nothing else. Learn what the noise scale slider actually does.
- Symmetry drill. Turn on X mirror and paint an insignia that has to line up on both sides. Then do it with radial copies.
- Decal placement. Load Decal…, use Show placement preview, and land a label squarely on a curved surface with Occlude hidden faces on.
- Effect modes. Take a finished texture and use only Blur, Sharpen, Dodge and Burn to improve it. No new colour.
- Steady hand. Raise the stroke stabilizer and draw a long clean panel line freehand.
Appendix
Tool Map — what is where
The side panel is two tab groups. Brush and Materials on one side, Layers and Scene on the other, with the channel selector and Isolate pinned above them so they are reachable from any tab.
| You want to… | Where | Notes |
|---|---|---|
| Paint, erase, clone, smudge | Brush tab — tool grid | Clone: Ctrl+Click sets the source point first |
| Blur, sharpen, dodge, burn | Brush tab — tool grid | These modify pixels already there rather than adding colour |
| Change the tip shape | Brush tab — Tip | Round, Square, Airbrush, Noise (grunge) |
| Sample a colour off the model | Anywhere — Alt+Click | The eyedropper |
| Smooth a shaky stroke | Brush tab — stroke stabilizer | The brush follows the cursor on a leash |
| Mirror or repeat strokes | Brush tab — Symmetry | X/Y/Z combine; radial overrides mirror |
| Stamp an image / place a decal | Brush tab — Stencil | Load Stencil… to stamp; Load Decal… + Place Decal to project from view |
| Save brush settings | Brush tab — presets | Save, recall and delete named presets |
| Use a tablet's pressure | Brush tab — Affects opacity / Affects size | Off by default; a mouse reads as full pressure |
| Apply a whole PBR material | Materials tab | Adds a masked layer in every channel — paint it in |
| Add, reorder, mask layers | Layers tab | Drag rows to reorder; Add mask / Clear / Edit mask |
| Adjust a layer's colour | Layers tab — Adjust Active Layer… | Brightness, contrast, hue, saturation, invert — previews live |
| Solid or gradient fills | Layers tab — + Fill / Gradient Fill | Both accept masks |
| Edge wear, cavity dirt, AO, height | Layers tab — Smart Material | Bake AO is synchronous; Height → Normal reads the active layer's brightness |
| Lighting, HDRI, exposure | Scene tab — Environment | Presets, bundled HDRIs, or Load HDRI…; rotation applies to loaded HDRIs |
| Ground, shadows, reflections | Scene tab | SSR is off by default |
| PBR / Unlit / Matcap | Scene tab — Shading | Unlit is the honest check on albedo |
| Texture resolution | Scene tab | 1K / 2K / 4K — changing it clears undo history |
| Generate UVs | Top bar — Auto-UV | xatlas, Smart, or Box/Planar projections; turns on the UV Checker |
| Inspect the UV layout | Top bar — UV Layout / UV Checker | Islands over the active channel, or a checker on the model |
| Export anything | Top bar — Export ▾ | GLB, Texture Maps, Per-Surface, as Mod, Send to Crucible |
| Undo / redo | Top bar, or Ctrl+Z / Ctrl+Y | 20 steps, pixels only — layer add/delete is not tracked |
| Reopen the guide | Top bar — Help | The getting-started overlay |
