Canvas · Intermediate · Tutorial 2 of 3
Six channels, one material,
and the tab nobody opens.
Everything Canvas can do to a surface, in the order you would actually do it, and the reasons professional texture artists work that way. Written for the modder who has a mesh and wants it looking like it belongs in Ascent of Ashes by tonight.
What this course is
Canvas paints in six PBR channels at once, with a layer stack per channel, non-destructive masks, and curvature-driven wear that reads your mesh's own geometry. That combination is what separates it from a paint program that draws on a model, and it is the part most people never switch on, because nothing on screen tells you it is there.
This page is the missing instruction. Every control named here exists in the shipping build and every number is one you can type in. Where a technique comes from wider practice rather than from Canvas, it is marked as such and sourced at the end.
Before you start
Canvas installs from the Hub like every other suite tool and, like every other tool, it opens from the Hub rather than from its own shortcut. Windows, the Linux AppImage and the update feed are all live.
One habit worth bringing: save the .canvas project before every
bake and every resolution change. Those are the two operations that clear undo.
UVs
A mesh that can hold paint
Painting is UV-bound. Canvas picks the triangle under your cursor, converts the hit to a UV coordinate, and stamps into the texture there. No UVs, no paint — so the first thing to settle is whether your model has a usable layout.
Open one with Open Model…. If it arrives without UVs, Canvas says so in the status line. Fix it from the Auto-UV menu, which offers five routes.
| Route | What it does | Reach for it when |
|---|---|---|
| xatlas | Industry-standard atlas packer, best overall quality. | This is the default answer. Start here. |
| Smart (angle-based) | Splits charts on angle thresholds. | Organic or faceted shapes where xatlas over-fragments. |
| Box projection | Six-way projection into a 3×2 grid. | Crates, panels, anything essentially cuboid. |
| Planar — Top (Y) | Single-axis projection. | Flat ground pieces, decals, signage. |
| Planar — Front (Z) / Side (X) | As above, on the other axes. | Wall panels and façades. |
Auto-UV changes nothing you can see, because it rewrites coordinates rather than pixels. That is why Canvas switches the UV Checker on automatically when it finishes. Read the checker before you paint a single stroke: squares should be square, and roughly the same size everywhere. Stretched squares mean stretched texture, and squares that shrink on one part mean that part gets less resolution than its neighbours.
That second reading is texel density — pixels per unit of world space — and keeping it uniform across an asset is what makes a set of props look like they come from one world rather than a bring-and-buy sale. Ascent of Ashes is played at a fixed isometric distance, which is a gift: you can pick one density and hold it everywhere, because nothing is ever inspected from twenty centimetres away. Set it by what the camera actually resolves, not by what looks crisp in the viewport with your nose against it.
The mental model
Six channels, one material
This is the idea everything else hangs off. Canvas does not have “a texture”. It has six independent layer stacks, each compositing over its own neutral base into its own image, and all six feed one material at the same time.
Figure 01 — six stacks, one material Why nothing happens when you paint the wrong channel. The Channel selector at the top of the side panel decides which stack your brush writes into, and every layer operation acts on the active channel only. Each channel composites over a different neutral, which is why an empty Roughness reads mid-grey while an empty Metallic reads black.
Two controls make the stack legible while you work:
- Isolate Channel shows the active channel unshaded, as raw data. This is how you check that a roughness map actually has variation in it, rather than trusting a glossy highlight.
- Shading in the Scene tab offers PBR (lit), Unlit (flat) and Matcap (clay). Unlit judges base colour with lighting removed; Matcap reads form and silhouette with texture removed.
PBR values
Values that don't lie
PBR is a physical model and it punishes invented numbers. Albedo that is too dark starves global illumination, and metallic sitting at 0.5 describes a material that does not exist. The ranges below come from measured references, translated into what you actually type into Canvas.
| Channel | Paint with | Working range | The rule |
|---|---|---|---|
| Albedo | Colour | sRGB 50–240 | Nothing in nature is pure black or pure white. Charcoal bottoms out near 50; fresh snow tops out near 240. |
| Metallic | Grayscale | 0 or 255 | Binary in practice: a surface is metal or it is not. Mid-greys appear only where metal is partly covered by paint, rust or grime — and then the mask does the blending, not the value. |
| Roughness | Grayscale | 25–235 | Your busiest channel. Perfect mirrors and perfect diffusers are both rare, and variation here sells a surface faster than albedo detail. |
| Normal | Raw RGB | 128,128,255 is flat | Do not hand-paint this. Paint height in grayscale and use Height → Normal. |
| AO | Grayscale | White is open | Contact shadow only. Use Bake AO rather than painting it. |
| Emissive | Colour | Black is off | Only what actually emits light. Bright albedo is not emission. |
Do not paint lighting into albedo. Highlights, shading and baked-in shadow belong to the renderer rather than to the base colour.
If you paint a bright streak along the top edge because it looks good in your current viewport, it will still be there when the light moves, and it will look wrong from every angle but one. Albedo answers the question “what colour is this material”, and nothing else.
The feature worth learning Canvas for
Smart material layers
This is the feature worth learning Canvas for, and it sits two clicks deep in a tab most people never open.
A material layer, added by clicking a card in the Materials tab, is not a flood fill. It creates a linked fill layer in every channel the preset defines, and gives all of them one shared mask, black. Black means hidden, so the material is loaded into all six channels at once and invisible.
Then you paint the mask, and the entire PBR material appears where you brush — colour, roughness, metalness, all together, with everything underneath untouched.
Figure 02 — one mask, every channel Because the mask is shared by reference, a single stroke reveals the material's colour, roughness, metalness and occlusion together — physically coherent by construction. Deleting the layer removes it from every channel atomically, so a channel can never be left holding half a material.
Read this before you expect too much of the library. The eight cards are flat per-channel values rather than textures. “Rough Stone” is a brown at roughness 0.9 with metallic 0; “Brushed Metal” is a grey at low roughness with metallic 1. There is no stone grain in one and no anisotropic brushing in the other, and most presets define four channels rather than all six.
So the mechanism is the professional part and the library is eight starting points. Every scrap of character comes from what you brush on top, which is what the next four steps are for. Set your expectations there and the workflow makes sense; expect a texture library and you will wonder why your stone looks like brown plastic.
There is also currently no way to save your own. MaterialPresets is a
fixed list compiled into the program with no load-from-disk path, so a recipe you love is one
you rebuild by hand next time.
Driving it
- Clicking a material card switches you to its first channel and turns on Edit mask automatically. You are already painting the mask, so just start brushing.
- In mask editing, Paint reveals and Erase conceals. Everything else still applies: tip shape, hardness, opacity, flow, symmetry.
- Only the channel you are viewing updates live during a drag. Release the mouse and the siblings catch up. Do not chase it — that is by design rather than lag.
- Stack them. Rough Stone as a base coat, Brushed Metal masked into the panels, Gold masked into the trim: four coherent PBR value-sets you can reveal independently. Treat each as a primed surface to paint into rather than a finished material.
Curvature
Wear that reads as history
Uniform grunge looks like noise. Believable wear is positional: it appears where physics puts it. Edges and corners get knocked and rubbed until the material underneath shows through, and recesses collect dust that nothing wipes out.
Canvas computes both from your mesh's own geometry. Edge Wear and Cavity Dirt bake a curvature estimate — comparing each vertex normal against its neighbours — into a UV-space map, then composite your brush colour through it.
Figure 03 — geometry decides where the story goes The curvature bake is cached per mesh, so the second click is instant. Both buttons composite into the active layer of the active channel, which means you can run Edge Wear into a mask just as easily as into colour — and that is usually the better move.
The professional move
Do not run Edge Wear directly onto albedo. Add a material layer for the material underneath — bare metal under paint, say — then run Edge Wear into that layer's mask with Edit mask on. Now the worn edges reveal a full PBR material rather than a paler colour: the exposed metal is genuinely metallic and genuinely smoother, because it is a real material showing through rather than a lighter shade pretending.
Then break the perfection. Curvature wear applied at full strength wraps every edge evenly, which reads as machine-made. Set the brush to Erase with the Noise (grunge) tip and knock holes in the wear mask, so the wear becomes intermittent — heavy where a hand or a crate would actually strike, absent where nothing reaches.
The brush
The brush bench
Eight modes, four tips, and the sliders that decide whether a stroke reads as a stroke or as a surface.
| Mode | What it does | Texturing use |
|---|---|---|
| Paint / Erase | Deposit or remove. | Everything. In mask editing, reveal and conceal. |
| Clone | Copies from an offset source; Ctrl+click sets it. | Repairing a seam, or repeating a detail without re-painting it. |
| Smudge | Picks up and drags colour. | Streaks, drips, and pulling grime downward with gravity. |
| Blur / Sharpen | Softens or crispens what is there. | Blur a mask edge to kill a hard cut; sharpen a worn edge to make it bite. |
| Dodge / Burn | Lightens or darkens existing pixels. | Value variation without recolouring. Superb on roughness. |
Tips
- Round — radial falloff shaped by Hardness. The default, and usually right.
- Square — box falloff. Panel edges and hard-surface masking.
- Airbrush — grainy, centre-weighted, and builds up as you pass over it. Soft dust accumulation.
- Noise (grunge) — procedural FBM noise sampled in texture space, driven by Noise scale. The most valuable tip in the program for game textures, because it breaks up anything uniform and never repeats.
The four sliders that matter
| Control | What it changes | Setting it |
|---|---|---|
| Opacity | The ceiling of a single dab. | Low, 10–25%, for anything you want to build up in passes. |
| Flow | Rate of deposit per dab. | Low flow with high opacity gives airbrush-like build-up along a stroke. |
| Spacing | Gap between dabs, as a fraction of radius. | Tight for solid strokes; wide turns any tip into a scatter stamp. |
| Stabilizer | Smooths cursor jitter. | Raise it for long panel lines and cable runs, lower it for organic grime. |
Two more are worth switching on: Pen pressure, which maps independently to opacity and size if you have a tablet, and Preset, which saves a brush you have dialled in so you can recall it later. A grunge brush you tuned once and named is worth more than any single texture you will paint with it.
Symmetry, stencils and decals
- Symmetry mirrors across local X, Y and Z — combinable — or radially around an axis. Each mirrored copy re-picks its own UV from the mirrored 3D point, so it works on any UV layout, including atlas-packed ones where the two halves are nowhere near each other in texture space.
- Load Stencil… with Use stencil turns the brush into a stamp shaped by an image. Drag with wide spacing to repeat it.
- Project From View projects that stencil from the current camera onto the surface, which is how you get logos, stencilled numbering and poster decals to sit correctly across curvature. Turn on Occlude hidden faces so it does not print through to the back.
- Load Decal… followed by Place Decal gives you the same idea with position, size, rotation and opacity adjustable before you commit, and Show placement preview to line it up.
Bakes
Let the mesh do the work
Two bakes turn geometry into texture data, and both save hours of hand-painting.
Bake07
Bake AO
Casts rays per vertex to measure how occluded each point is, and writes the result into the AO channel.
Run it once, early, after your UVs are final. It is synchronous and dense meshes take a moment — that is raytracing rather than a hang.
Bake07b
Height → Normal
Reads the active layer's luminance as a height field and converts it to a tangent-space normal map with a Sobel filter, controlled by Height strength.
Paint rivets, panel gaps, scratches and weld beads in grayscale — bright is raised, dark is recessed — then convert. Painting normal maps by hand is a losing game; painting height is intuitive.
The last ten percent
The grime pass
This is what separates a texture set from a texture. When an asset carries three or four materials, each individually correct, it still reads as parts bolted together — because nothing has happened to them as one object.
One unifying pass, on top of everything
- Add a new layer at the top of the Albedo stack. it has to sit above every material boundary to cross them
- Set its blend mode to Multiply and its opacity low, around 10–20%. this is a veil, not a coat
- Pick a desaturated, slightly warm dark — the colour of the world's dust, not black. black deadens everything underneath instead of tinting it
- Paint with the Noise (grunge) tip at large size across the whole model, ignoring material boundaries entirely. ignoring them is the entire point of the pass
- Add the same pass to Roughness. dirt is rougher than what it lands on, and this is the half most people skip
Because it crosses every material boundary, the pass makes the object read as one thing that has sat in one place. For Ascent of Ashes specifically, this is also where you pull a bright asset back into the game's muted, grounded palette. A warm grey multiply at 15% does more to make a prop belong than any amount of albedo tweaking.
Review
Judge it honestly
A texture that looks great under one light is a texture you cannot ship. The Scene tab exists to stop you fooling yourself.
Check09a
Change the light
Cycle the environment presets and the bundled HDRIs. Studio Softbox and Venice Sunset are deliberately different in temperature and contrast, so anything that only works under one of them is not finished.
HDRI rotation sweeps the key light around without changing anything else.
Check09b
Take things away
Unlit (flat) reveals what you have actually painted into albedo. Baked-in highlights are glaring here and invisible in PBR.
Matcap (clay) shows form alone, which is the check for whether your normal map is doing anything or lying.
- Check each channel raw. Run Isolate Channel through all six. Roughness should have visible structure, Metallic should be near-binary, and AO should look like contact shadow and nothing else.
- Ground, Shadows and Reflections add contact and environment response. Turn Reflections on when judging metal, since metal is almost entirely reflection.
Export
Ship it
Set Texture resolution in the Scene tab before the final pass — 1024, 2048 or 4096. Changing it resamples every layer and mask across all channels with Lanczos filtering, but it also clears undo history, so decide before you are deep in.
| Export | Produces | Use it for |
|---|---|---|
| Export GLB… | A self-contained .glb with textures embedded. |
Handing the asset to anything that reads glTF. |
| Export Texture Maps… | Six PNGs, one per channel. | Taking the maps into another engine or tool. |
| Export as Mod… | A full mod folder: manifest, scene, model. | The straight line from Canvas to a loadable mod. |
| Export Per-Surface… | Separate GLB and PNGs per original mesh part. | Multi-part models that need independent materials. |
| Send to Crucible… | Exports, then launches Crucible on it. | Seeing it in a real scene immediately. |
Reference
Shortcuts and rescue
| Key | What it does |
|---|---|
| Alt + click | Eyedropper. Samples the composited colour under the cursor into the brush, in any mode. Use it constantly to keep a palette tight. |
| Ctrl + click | Sets the clone source, in Clone mode only. |
| Ctrl + Z | Undo, twenty deep, covering strokes, fills, bakes, smart masks and adjustments. |
| Ctrl + Y · Ctrl+Shift+Z | Redo. |
Adjust Active Layer… gives brightness, contrast, hue, saturation and invert with live preview. The values apply as you drag and revert cleanly if you cancel, so it is safe to explore. Invert is the quickest fix in the program: a mask revealing exactly the wrong areas is one click from correct.
.canvas projects keep every channel's layer stack, masks, fill layers,
material-layer links and groups. Exported textures are the output; the .canvas
file is the work. Save it before every bake and every resolution change, because those are the
two operations that clear undo.Sources
Where this comes from
Canvas specifics on this page were checked against the shipping source. The general craft — value ranges, texel density, positional wear, the unifying grime pass — is standard practice across the industry, and these are good places to go deeper.
- PBR — From Rules to Measurements — why the albedo and roughness ranges are what they are, from measured data rather than convention.
- Iri Shinsoj — PBR, Colour Space and Albedo Chart — a reference chart of real-world albedo values worth keeping open while you paint.
- Texel Density Basics — the clearest short explanation of picking a density and holding it across a set.
- Hanoi Intersection — Games Artist — an environment breakdown showing layered grunge and a final unifying dirt pass on a full scene.
- Advanced Texture Paint: Masks and Layers — the masks-over-fills discipline, in a different tool, which is the point.
Companion to Mod Kit Accelerated — that course builds the crate, this one textures it.
Next
Before You Paint
There is a third tier, and it belongs before this one in practice. Everything on this page is recoverable — repaint a layer, change a material, step back. Before You Paint covers the handful of decisions that are not: changing the texture resolution empties your entire undo history, and a single model part without UVs silently makes every stroke land on every part. Both are settled in the first minute after loading a model, and both are free to avoid if you know about them.
