Texturing Terrain in Houdini COPs: Placing Materials with Masks, Not a Brush
I textured an entire desert, a lava field and an icy mountain without once picking up a brush. Not a single pixel was hand-painted. Every colour landed where it did because a mask told it to, and each mask was computed from the terrain's own shape. That was the moment texturing stopped feeling like painting and started feeling like giving instructions.
This is the texturing strand of EREMUS. In the previous post I formed the three Terrain Handbook biomes, but forming them only gave me grey geology. This post is how that geology gets its colour, and the surprising part is how little of it is manual. Following Nikola Damjanov's COPs texturing chapters I textured all three biomes the same way, and again the most useful lesson was not any single look. It was building one colouring machine and pointing it at three different worlds.
Texturing without a brush
A heightfield in Houdini carries far more than height. Every erosion pass I ran in the last post quietly wrote extra layers alongside it: where water flowed, where cavities sit in shadow, where debris settled, how sharply each edge curves. Those layers are masks, red selections painted across the terrain by the simulation rather than by me. On top of them sits one node, heightfield maskbyfeature, that can invent a fresh mask from the terrain's own features, by slope, by height, by curvature, by which direction a face points, by ambient occlusion. So before I choose a single colour I already hold a stack of selections that know where the water ran and where the peaks catch the light. To hand-paint over that would be to throw it all away.
It is just Photoshop layers
To turn those masks into colour I move the terrain into COPs, Houdini's image context. One node, SOP Import, carries every heightfield layer across as a 4K image plane. From there the workhorse is the composite node, and the moment it clicked was realising it is exactly a Photoshop layer stack: a foreground colour, a background, and a mask deciding where the foreground shows through. The blend mode is the entire vocabulary. Over to place a colour, screen to lighten an edge, multiply to sink an occluded pocket, subtract for a little grain. I stack a dozen of these, each one adding a single material exactly where one mask says it belongs, and a quickshade node previews the result live on the terrain as I tune it.
The same stack, three biomes
The graph is nearly identical for all three biomes: import the layers, build a base colour from a ramp, run a long chain of composites, then preview. What changes is the palette, which mask drives which material, and one biome-specific mask each. That is the whole trick, and it is why one method makes three worlds.
The desert is the reference build and the most layered. A warm brown ramp sets the base, then debris lifts the settled sand to a paler beige, curvature paints white highlights onto the ridge edges and black into the crevices, ambient occlusion sinks a deep red into the shadowed pockets, and a fine noise pass, masked to the flats so it never touches the peaks, adds a grain that also feeds render-time detail. It reads as layered, wind-worked sand, and none of it was drawn.
The lava world keeps the exact same chain and only swaps the palette hotter and adds one mask at the front. I isolate the flow and water layers, rename them both to lava, and blend them with a composite set to minimum, which pools the mask into the river banks where lava would collect while keeping some erosion striation. When I sampled the base colours from a reference I deliberately picked the stones, not the lava, because the glow itself is added later in the shader. Ambient occlusion then reddens the banks and curvature brightens the rocky edges. Same machine, opposite temperature.
The icy mountains swap in snow logic. A slope mask drives near-white snow across most of the surface, then a height band built from a spline ramp lets me dirty the snow at the base with a multiply while leaving the peaks pristine. A flow-direction mask adds a pale ice-blue that reads like ice running down the slopes, and debris dirties the snow in patches. As with the lava, the softest part of the snow is not painted in COPs at all; the mask decides where, and the shader does the rest.
Why masks instead of a brush
The reason to work this way is not speed, it is that the erosion already knew everything. Flow, occlusion, debris and curvature are, as Damjanov puts it, a very nice set of masks we got for free from the simulation. They already know where water ran and where edges sit, so letting them place the materials keeps the whole thing procedural: change the terrain and the texture re-derives itself, with no repainting. It also stays resolution-independent, because a mask is a rule, not a grid of pixels. The blend-mode choices are simply intent written down: lighten here, darken there, vary gently over there.
It clicked slowly, over a dozen layers, when I stopped seeing the composite node as Houdini magic and recognised the Photoshop layer stack I already knew, until I trusted the masks more than my own eye.
Where it fought back
Building three of these back to back, the friction was rarely the big idea and almost always the plumbing. Twice a layer came out wrong because a composite was set to the wrong blend mode, and a reddish-yellow mess turned correct the instant I set it back to multiply. More than once a composite did nothing at all until I renamed a plane so both inputs shared a name, the kind of invisible rule you only learn by hitting it. And a stylised contour-line pass threw an intermittent error even the tutorial's author could not fully explain, worked around by copying a single channel into a fresh alpha plane. A lot of terrain texturing turned out to be quietly babysitting blend modes and foreground weights rather than any grand technique.
Mine was chasing a wrong blend mode far too long before spotting a single dropdown set to the wrong thing
What I carried into EREMUS
EREMUS is a desert, so the dusty texture is my working template, and the parts I kept are specific. The mask-driven base means the outpost's ground can be re-textured the moment I reshape the terrain around it, without repainting anything. The habit of reading the erosion layers as ready-made selections is now simply how I think about colouring any heightfield. And the biggest shift is the quietest: a texture is not a picture I paint, it is a set of decisions about where each material belongs.
I am trying to read the erosion masks before I make any colour choices, because that keeps the material placement tied to the heightfield rather than to a painted guess. Once those masks have done the first pass of deciding where things belong, the colour becomes a layer stack I can keep tuning, instead of a flat image I would have to remake every time the terrain changes.
This is the texturing groundwork for the terrain strand. The formation post shows how these three biomes were shaped in the first place, and the next post packages the EREMUS terrain into a tunable, tiling HDA, so this whole forming-and-texturing chain becomes one reusable generator.
If you are reading this as part of my Major Study, this post is the texturing learning strand: I textured all three Terrain Handbook biomes with the same mask-driven COP method to understand how procedural materials are placed, before texturing my own EREMUS ground, and set it down in the order I actually learned it.
















