Nodes/WAS Node Suite v3/Three Material Mix
ComfyUI Node Runs on cloud

Three Material Mix

Stack two materials under one mask

By WASasquatch·Created 3 years ago·Updated 4 days ago· 1,844
Three Material Mix
  • base
  • top
  • mask
  • material
opacity1.00
invert_maskfalse

Texturing a 3D object without a UV paint program is normally a pain. You either get one uniform material or you go hunting for an external texturing tool. WASThreeMaterialMix is the pack's answer to "I want a scratched metal plate, not just metal": it paints one material over another through a mask, the way a texture tool stacks layers, and it does it entirely inside the graph.

How it works

You feed it three things: a base material, a top material, and a mask (the ComfyUI MASK type, so any mask from your graph works - an image-to-mask pass, a hand-drawn region, whatever). The mask is read in UV space, which is the key mental model: black shows the base, white shows the top, and grey mixes them at 0.5 an even blend.

Here's the part that makes it feel like a real layer stack: every channel is mixed by the same mask. Color, roughness, metalness, normals, emission, ambient occlusion, bump and displacement all follow it. If one side has a normal map and the other doesn't, the blank side is mixed against the other's plain setting, so nothing pops weirdly.

The inputs that matter

  • base / top - both take a THREE_MATERIAL, from Three Standard Material, Three Physical Material, or even another mix.
  • mask - where the top shows, in UV space.
  • opacity - how strongly the top layer comes through overall. 1.0 uses the mask as-is; 0.35 fades the whole layer back, which is great for a subtle weathering pass.
  • invert_mask - swaps which side is which.

The output is a single material - and here's the trick that makes the node genuinely powerful: the result is a normal material. Feed it back in as the base of another mix and you stack a third layer, and a fourth. Scratches over rust over a base coat, each with its own mask, none of it baked into a texture file.

Where it fits

It sits at the material stage of the standard Three pipeline: geometry + material into Three Mesh. Instead of wiring one material into the mesh, wire the mix's output there. Give your plane or sphere enough segments if you're displacing - the geometry needs vertices to move - and remember masks are UV-space, so the model needs a sane UV layout for the mask to land where you expect.

Install and gotchas

WASThreeMaterialMix is one of 43 Three-family nodes in WAS Node Suite v3. Install through ComfyUI Manager by searching WAS Node Suite v3, or:

cd ComfyUI/custom_nodes
git clone https://github.com/WASasquatch/was-node-suite-comfyui.git

Restart afterwards. ComfyUI 0.14.0+ and Python 3.10+ are required; nothing extra installs. Two things trip people up. First, if your mask lands on the wrong part of the object, you're almost always looking at a UV problem, not a mask problem. Second, the whole Three family is gated by features.threejs in <ComfyUI user dir>/was-node-suite/config.yaml - if the node is missing from Add Node, that switch is where to look.

CategoryWAS Suite/Three

Inputs (5)

NameTypeDefaultDescription
baseTHREE_MATERIALThe material underneath, showing wherever the mask is black.
topTHREE_MATERIALThe material painted over it, showing wherever the mask is white.
maskMASKWhere the top material shows, in UV space. White is all top, black all base, 0.5 an even mix.
opacityFLOAT1.000–1How strongly the top layer comes through overall. 1.0 uses the mask as it is, 0.35 fades the whole layer back.
invert_maskBOOLEANfalse`true` swaps which side the mask shows, so black becomes the top material.

Outputs (1)

NameTypeDescription
materialTHREE_MATERIALThe blended surface, for Three Mesh or as the base of another mix.