ACanvas / Texturing, Accelerated Hands-on · 6 modules + gym

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.

Application  AshForge Canvas Format  drill → build → diagnose → master Capstone  Standard Cargo Pod Total time  ~8–12 hrs hands-on

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.

01

Module one

Land a stroke where you meant to

Camera, picking, channels Read from the app — every control verified

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.

In Canvas
A dab is a UV pick, not a screen splat. Canvas ray-picks the triangle under your cursor, converts the hit to barycentric coordinates, resolves the UV, and stamps into the texture there. Two consequences you will feel all course: a mesh with no UVs cannot be painted at all (Module 05), and stretched UVs paint stretched — the checker in Module 05 is how you see that before you waste an hour.

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
  1. Open Canvas. It starts on a UV sphere — that is your scratch object.
  2. Set the brush small (radius ~8) and paint a single dot at the very top of the sphere.
  3. Orbit underneath and paint another. Confirm both landed at the cursor tip, not offset.
  4. 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
  1. Open Model… and load your crate.
  2. On Albedo, use Fill Layer to flood a mid-grey base. Resist the urge to detail.
  3. Switch to Roughness. Fill it fairly rough — most crates are not glossy.
  4. 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.

SymptomCauseFix
Strokes do nothing at allThe mesh has no UVsRun Auto-UV — see Module 05. Canvas shows a hint on load when this is the case
The whole model turned shiny chromeMetallic filled whiteMetallic 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 screenPainting a channel you are not looking atCheck the channel selector; use Isolate to confirm the map received it
02

Module two

What each map is actually for

Colour vs scalar vs vector The Normal channel is not like the others

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.

Under the hood
Metallic is fully driven by your map. Canvas sets the material's metallic factor to 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
  1. On the scratch sphere, paint four vertical bands into Roughness: near-black, dark grey, mid grey, near-white.
  2. Turn Isolate off and orbit. Watch where the highlight survives and where it dies.
  3. 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
  1. Add a new layer on Albedo and paint the panel seams and a stencilled label.
  2. Make a new layer and paint those same seams as grayscale height — dark for recessed grooves.
  3. With that layer active, set Height strength and press Height → Normal. Canvas bakes it into the Normal channel and switches you there.
  4. 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.

SymptomCauseFix
Normal map makes the model look oily and wrongColour brushed straight into the Normal channelDelete that layer. Paint height in grayscale and use Height → Normal
Asset looks flat and lifeless in every lightRoughness is one uniform valueReal surfaces vary. Break it up — even subtly. Roughness variation reads as age and use
Everything glows faintlyEmissive was filled dark grey instead of blackFill Emissive pure black, then paint only the glowing parts
03

Module three

Layers, masks, and never repainting

Non-destructive habits Undo is 20 deep — masks are forever

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.

Why it matters
Undo will not save you. History is 20 steps of pixel snapshots, it is cleared when you change model, and structural layer operations are not tracked at all — deleting a layer is not undoable. Work on masks and separate layers so that "undo" is a thing you rarely need rather than a safety net you are leaning on.

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
  1. On the scratch sphere, add a Fill layer in a strong colour.
  2. Add mask, then Clear it to hide the fill entirely.
  3. Turn on Edit mask and paint the colour back in as a band.
  4. 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
  1. On Albedo, separate your work into layers: base, seams, label, dirt.
  2. Give the dirt layer a mask and reveal it only where dirt would collect.
  3. Try the label layer on Multiply versus Normal and keep the one that sits into the surface rather than on top of it.
  4. Save the project (Save…) — masks and fills persist in the .canvas file.

Done when you can change the crate's base colour without touching a single mark you painted on top of it.

04

Module four

Material layers — the shortcut that is not a cheat

One mask, six channels The biggest workflow win in the app

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.

How it actually works
Clicking a card in the Materials tab adds a fill layer to every channel the preset defines — albedo, roughness, metallic and so on — and gives all of them one shared mask, filled black, so the material starts completely hidden. Canvas then switches you to the first affected channel and turns mask editing on for you. Your very next stroke reveals the whole material at once. Because the mask is shared by reference, painting it in one channel reveals it in all of them.

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
  1. On the pod, open the Materials tab and click Brushed Metal. The model will not change — that is correct, the mask is hidden.
  2. Paint along the crate's edges and corners. The metal appears, correct in every channel.
  3. Switch the brush to Erase and pull back anywhere it reads as too much.
  4. 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.

SymptomCauseFix
Clicked a material and nothing happenedWorking as designed — the mask starts blackJust paint. Your strokes reveal it
Strokes reveal material when you wanted colourEdit mask is still on from the material layerTurn Edit mask off, or select a different layer
Only one channel updated while draggingSibling channels recomposite on mouse-upRelease the stroke and look again — the others catch up
05

Module five

Let the mesh do the work

Smart masks, bakes, UVs Where texturing stops being painting

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.

Read the checker
Even squares of even size mean even texel density. Stretched squares mean stretched paint. Wildly different square sizes mean one part of your model gets far more texture than another. Fix it here — no amount of careful brushwork survives a bad unwrap. The UV Layout viewer shows the islands themselves over the active channel.

DrillA · ~15 min

Rescue a mesh with no UVs
  1. Load any mesh that has no UVs — Canvas will hint at it on load.
  2. Try to paint. Confirm nothing lands.
  3. Run Auto-UV → xatlas. The UV Checker turns on by itself.
  4. 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
  1. Pick a light, slightly desaturated grey and run Edge Wear.
  2. Pick a dark brown-grey and run Cavity Dirt.
  3. Run Bake AO and give it a moment. Toggle the AO channel's layer to see the difference it makes with and without.
  4. 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.

06

Module six

Game-ready, and out the door

Resolution, preview, export Ends in a file the game loads

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.

Choosing an export
Export GLB gives one self-contained file with the textures embedded — the usual answer. Export Texture Maps writes the six PNGs for use elsewhere. Export Per-Surface slices a multi-part model back into parts with their own maps — note those UVs are atlas-normalized, not identical to your source. Export as Mod writes a complete mod folder, and Send to Crucible does that and opens it for testing.

BuildA · ~20 min

Ship the Cargo Pod
  1. Cycle every environment preset and fix anything that only worked under one.
  2. Check it in Unlit — if the albedo has baked-in shadows, you will see them now.
  3. Raise the resolution to 2K and do a final pass on the seams.
  4. 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.

GYM

Practice

The Practice Gym

Short reps, real judgement

Reps to run on scratch objects once the course is done. Each is deliberately small enough to finish in a sitting.

  1. Five materials, one sphere. Rubber, gold, wet stone, painted steel, glowing panel — using only channel fills and one material layer each.
  2. 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.
  3. Symmetry drill. Turn on X mirror and paint an insignia that has to line up on both sides. Then do it with radial copies.
  4. Decal placement. Load Decal…, use Show placement preview, and land a label squarely on a curved surface with Occlude hidden faces on.
  5. Effect modes. Take a finished texture and use only Blur, Sharpen, Dodge and Burn to improve it. No new colour.
  6. Steady hand. Raise the stroke stabilizer and draw a long clean panel line freehand.
MAP

Appendix

Tool Map — what is where

Read from the app Every control verified against the source

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…WhereNotes
Paint, erase, clone, smudgeBrush tab — tool gridClone: Ctrl+Click sets the source point first
Blur, sharpen, dodge, burnBrush tab — tool gridThese modify pixels already there rather than adding colour
Change the tip shapeBrush tab — TipRound, Square, Airbrush, Noise (grunge)
Sample a colour off the modelAnywhere — Alt+ClickThe eyedropper
Smooth a shaky strokeBrush tab — stroke stabilizerThe brush follows the cursor on a leash
Mirror or repeat strokesBrush tab — SymmetryX/Y/Z combine; radial overrides mirror
Stamp an image / place a decalBrush tab — StencilLoad Stencil… to stamp; Load Decal… + Place Decal to project from view
Save brush settingsBrush tab — presetsSave, recall and delete named presets
Use a tablet's pressureBrush tab — Affects opacity / Affects sizeOff by default; a mouse reads as full pressure
Apply a whole PBR materialMaterials tabAdds a masked layer in every channel — paint it in
Add, reorder, mask layersLayers tabDrag rows to reorder; Add mask / Clear / Edit mask
Adjust a layer's colourLayers tab — Adjust Active Layer…Brightness, contrast, hue, saturation, invert — previews live
Solid or gradient fillsLayers tab — + Fill / Gradient FillBoth accept masks
Edge wear, cavity dirt, AO, heightLayers tab — Smart MaterialBake AO is synchronous; Height → Normal reads the active layer's brightness
Lighting, HDRI, exposureScene tab — EnvironmentPresets, bundled HDRIs, or Load HDRI…; rotation applies to loaded HDRIs
Ground, shadows, reflectionsScene tabSSR is off by default
PBR / Unlit / MatcapScene tab — ShadingUnlit is the honest check on albedo
Texture resolutionScene tab1K / 2K / 4K — changing it clears undo history
Generate UVsTop bar — Auto-UVxatlas, Smart, or Box/Planar projections; turns on the UV Checker
Inspect the UV layoutTop bar — UV Layout / UV CheckerIslands over the active channel, or a checker on the model
Export anythingTop bar — Export ▾GLB, Texture Maps, Per-Surface, as Mod, Send to Crucible
Undo / redoTop bar, or Ctrl+Z / Ctrl+Y20 steps, pixels only — layer add/delete is not tracked
Reopen the guideTop bar — HelpThe getting-started overlay