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

Three Physical Material

Glass, car paint and soap bubbles without a texture artist

By WASasquatch·Created 3 years ago·Updated 4 days ago· 1,844
Three Physical Material
  • map
  • normal_map
  • roughness_map
  • metalness_map
  • transmission_map
  • specular_intensity_map
  • specular_color_map
  • clearcoat_map
  • bump_map
  • displacement_map
  • ao_map
  • emissive_map
  • alpha_map
  • material
color#ffffff
roughness0.25
metalness0.00
clearcoat0.00
clearcoat_roughness0.00
transmission0.00
thickness0.00
ior1.500
dispersion0.00
iridescence0.00
anisotropy0.00
opacity1.00
transparentfalse
sidefront
specular_intensity1.00
specular_color#ffffff
normal_scale1.00
bump_scale1.00
displacement_scale0.10
ao_intensity1.00
emissive#000000
emissive_intensity1.0
sheen0.00
sheen_roughness1.00
sheen_color#ffffff
attenuation_color#ffffff
attenuation_distance0.0

Standard Material gets you plastic, metal and cloth. The moment your subject is a glass bottle, a lacquered car body, or a soap bubble, you need effects those surfaces don't have - real refraction, a clearcoat layer, hue-shifting iridescence. WASThreePhysicalMaterial is Standard Material plus exactly those effects, and it's the node that makes the Three family capable of "product render" instead of "game asset." Everything extra starts at 0.0, so it behaves exactly like a standard material until you turn the effects on.

What it does

The headline features, each with its own honest description:

  • transmission - the glass one. Makes a surface see-through by refracting light rather than going transparent, which is why it looks like glass instead of tinted air. It wants friends to read as a solid: a thickness, an index of refraction (ior), and an attenuation_color (with an attenuation_distance) to read as tinted. Thin panes want side double so both walls refract.
  • clearcoat / clearcoat_roughness - a second glossy layer over the base, the lacquer on a car.
  • sheen - the soft rim velvet has. Uses sheen_color and sheen_roughness.
  • iridescence - hue shifts with viewing angle. Soap bubbles, oil slicks.
  • anisotropy - directionally-stretched reflections, for brushed metal.
  • emissive / emissive_intensity - gives off its own light. This one matters beyond looks: Three Path Trace Render treats emissive surfaces as lights in their own right, so an emissive panel genuinely illuminates a traced scene.

You get the full standard-material toolkit underneath - color, roughness, metalness, opacity, transparent, side, normal/bump/displacement maps, specular intensity and color - plus maps for the new channels (transmission, clearcoat, specular, and so on).

What actually matters in practice

Start with the workhorse settings and add one effect at a time, because the failure modes are easy to misdiagnose:

  • Glass that looks like plastic = transmission on but thickness and ior never set. The description is blunt: transmission "wants a thickness and an index of refraction to read as a solid."
  • Glass that looks tinted when it shouldn't = attenuation_color is doing its job. Attenuation is tint, so clear glass wants a neutral color and a generous attenuation_distance.
  • Metal that reads black = no environment to reflect. This is true on Standard too, but worth re-checking here since the specular sheen multiplies the effect.

Where it fits

It's a drop-in THREE_MATERIAL for Three Mesh, and it's also an excellent partner to Three Environment - real reflections are half the reason to use physical materials at all. The cost note in the description is honest: everything at 0.0 behaves like a standard material "at a higher cost," so don't slap Physical on every mesh in a big scene just because it's the shiniest option. Reach for it where the effect is on screen.

Install

WASThreePhysicalMaterial ships with WAS Node Suite v3. Install via ComfyUI Manager (search WAS Node Suite v3) or:

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

Restart after. Requires ComfyUI 0.14.0+ and Python 3.10+. If the node's missing from Add Node, check features.threejs in <ComfyUI user dir>/was-node-suite/config.yaml - on by default in current releases.

CategoryWAS Suite/Three

Inputs (40)

NameTypeDefaultDescription
colorSTRING#ffffffBase colour as hexadecimal. `#ffffff` is white, `#d8b24a` gold.
roughnessFLOAT0.250–1How scattered reflections are. 0.0 is a mirror, 0.25 lacquer, 1.0 chalk.
metalnessFLOAT0.000–1How metallic the surface reads. 0.0 for glass and paint, 1.0 for bare metal.
clearcoatFLOAT0.000–1Strength of a glossy layer over the base. 0.0 is off, 1.0 is full lacquer.
clearcoat_roughnessFLOAT0.000–1How scattered the clearcoat is. 0.0 is glassy, 0.3 reads as worn lacquer.
transmissionFLOAT0.000–1How much light passes through. 0.0 is solid, 1.0 is clear glass.
thicknessFLOAT0.000–100000How deep the glass is, in scene units. 0.0 is a thin shell, 1.0 a solid block.
iorFLOAT1.5001–2.333Index of refraction. 1.5 is glass, 1.33 water, 2.42 diamond, 1.0 bends nothing.
dispersionFLOAT0.000–10How far colours split through the glass. 0.0 is off, 1.0 gives a prism edge.
iridescenceFLOAT0.000–1Strength of an angle-shifting film. 0.0 is off, 1.0 is a soap bubble.
anisotropyFLOAT0.000–1How far highlights stretch, as on brushed metal. 0.0 is round, 1.0 fully stretched.
opacityFLOAT1.000–1How solid the surface is, once transparent is on. 1.0 is opaque, 0.35 is glassy.
transparentBOOLEANfalse`true` honours opacity; `false` draws solid. Transmission works either way and usually looks better with this off.
sideCOMBOfrontWhich faces are drawn. 'front' for closed shapes, 'double' for glass seen through both walls.
specular_intensityFLOAT1.000–10Strength of the non-metal highlight. 1.0 is normal, 0.0 kills the sheen entirely.
specular_colorSTRING#ffffffTint of that highlight, as hexadecimal. `#ffffff` leaves it uncoloured.
normal_scaleFLOAT1.00-10–10How strongly the normal map bends the surface. 1.0 is as authored, 0.0 flat, -1.0 inverted.
bump_scaleFLOAT1.00-10–10How deep the bump map reads. 1.0 is as authored, 0.2 is a subtle grain.
displacement_scaleFLOAT0.10-100–100How far the displacement map moves vertices, in scene units. 0.1 is gentle relief.
ao_intensityFLOAT1.000–10How strongly the ambient occlusion map darkens. 1.0 is as authored, 0.0 off.
emissiveSTRING#000000Light the surface gives off, as hexadecimal, on top of what falls on it. `#000000` gives off none, `#ff5522` a hot ember.
emissive_intensityFLOAT1.00–1000How strongly the emissive colour reads. 1.0 matches it, 8.0 makes the surface a light bright enough to lift what is around it.
sheenFLOAT0.000–1Strength of a soft rim of light at grazing angles, as on velvet and brushed cloth. 0.0 is off, 1.0 is full.
sheen_roughnessFLOAT1.000–1How scattered the sheen is. 1.0 is a broad cloth rim, 0.3 a tight silky one.
sheen_colorSTRING#ffffffColour of the sheen, as hexadecimal. `#ffffff` keeps the base colour, `#8899ff` gives cloth a cool rim.
attenuation_colorSTRING#ffffffColour left after light has travelled through the glass, as hexadecimal. `#88ccaa` is bottle green. Needs transmission above 0.0.
attenuation_distanceFLOAT0.00–10000How far light travels through the glass before it takes on the whole attenuation colour. 0.0 absorbs nothing, 0.5 tints a thick pane deeply.
mapoptTHREE_TEXTUREAlbedo texture. Its colour replaces the colour swatch per pixel.
normal_mapoptTHREE_TEXTURETangent space normals, as the usual blue-violet image. Fakes surface detail without geometry.
roughness_mapoptTHREE_TEXTURERoughness per pixel, read from the green channel. Black is a mirror, white is chalk.
metalness_mapoptTHREE_TEXTUREMetalness per pixel, read from the blue channel. Black is dielectric, white is metal.
transmission_mapoptTHREE_TEXTUREHow much light passes through, per pixel. Black stays solid, white is fully clear.
specular_intensity_mapoptTHREE_TEXTUREHighlight strength per pixel, read from the alpha channel. Black is matte, white is full sheen.
specular_color_mapoptTHREE_TEXTUREHighlight tint per pixel, read as colour. Multiplied by specular_color.
clearcoat_mapoptTHREE_TEXTUREClearcoat strength per pixel, read from the red channel. Black is bare, white is fully lacquered.
bump_mapoptTHREE_TEXTUREHeight as greyscale, faked in the shading alone. Cheaper than a normal map and softer.
displacement_mapoptTHREE_TEXTUREHeight as greyscale, moving real vertices. Needs a geometry with segments to move, such as 64 by 64.
ao_mapoptTHREE_TEXTUREBaked shadow in creases, read from the red channel. Black is fully occluded, white is open.
emissive_mapoptTHREE_TEXTUREEmitted light per pixel, multiplying the emissive colour. Black gives off none.
alpha_mapoptTHREE_TEXTUREOpacity as greyscale, read from the green channel. Black is clear, white is solid. Needs transparent on.

Outputs (1)

NameTypeDescription
materialTHREE_MATERIALThe surface, for the material socket on Three Mesh.