Skip to content

Clearcoat

glTF extension: KHR_materials_clearcoat
glTF properties: clearcoatFactor · clearcoatTexture · clearcoatRoughnessFactor · clearcoatRoughnessTexture · clearcoatNormalTexture

Clearcoat simulates a thin, glossy, transparent layer on top of the base material (e.g., car paint, lacquered wood). Requires KHR_materials_clearcoat to be enabled in the export options.

Shader Clearcoat intensity Clearcoat roughness Clearcoat normal Notes
standardSurface, aiStandardSurface coat coatRoughness coatNormal
openPBRSurface coatWeight coatRoughness geometryCoatNormal Different intensity attribute name
StingrayPBS not supported not supported not supported

In glTF, clearcoat intensity and clearcoat roughness share one texture image:

Channel Data
R Clearcoat intensity
G Clearcoat roughness

The clearcoat normal is always a separate texture.


Clearcoat intensity

Factor only

Set the clearcoat attribute directly on the shader. The exporter only writes clearcoat data when the value is greater than 0.0.

  • standardSurface, aiStandardSurface: set coat.
  • openPBRSurface: set coatWeight.

Exports as clearcoatFactor.

Texture only

Color space: Raw

standardSurface · aiStandardSurface:
  aiImage.outColorR  →  shader.coat
  file.outColorR     →  shader.coat

openPBRSurface:
  aiImage.outColorR  →  shader.coatWeight
  file.outColorR     →  shader.coatWeight

Exports as clearcoatTexture (R channel of the combined clearcoat image).

Factor + texture

glTF computes: clearcoatFactor × clearcoatTexture.R

  1. Connect the texture outColorRmultiplyDivide.input1X.
  2. Set the clearcoat multiplier in multiplyDivide.input2X.
  3. Connect multiplyDivide.outputXshader.coat (or coatWeight).

The multiplier exports as clearcoatFactor.


Clearcoat roughness

Clearcoat roughness always uses the same texture image as clearcoat intensity, with roughness stored in the green channel. The two can share the same source file (packed) or come from separate grayscale files that the exporter combines automatically.

Factor only

Set coatRoughness directly on the shader. Roughness is only written when clearcoat is also active (factor > 0 or texture present).

Exports as clearcoatRoughnessFactor.

Packed texture (same image as clearcoat intensity)

Use the same source file for both attributes, connecting the appropriate channel to each.

Color space: Raw

standardSurface · aiStandardSurface · openPBRSurface:
  texture.outColorR  →  shader.coat        (or coatWeight)
  texture.outColorG  →  shader.coatRoughness

The exporter detects that both attributes share the same file and exports it directly as the combined clearcoat texture. Exports as clearcoatTexture and clearcoatRoughnessTexture pointing to the same image.

Separate textures (auto-combined)

Connect different grayscale images to each attribute. The exporter repacks them into a single combined image: clearcoat intensity in R, clearcoat roughness in G.

standardSurface · aiStandardSurface · openPBRSurface:
  textureA.outColorR  →  shader.coat           (or coatWeight)
  textureB.outColorG  →  shader.coatRoughness

Both maps must share the same dimensions.

Factor + texture

glTF computes: clearcoatRoughnessFactor × clearcoatRoughnessTexture.G

Add a multiplyDivide node between the roughness texture and coatRoughness, same pattern as clearcoat intensity.


Clearcoat normal map

The clearcoat normal is always its own separate texture. It works exactly like the base normal map — route the texture through an aiNormalMap node.

Color space: Raw

standardSurface · aiStandardSurface:
  aiImage.outColor  →  aiNormalMap  →  shader.coatNormal
  file.outColor     →  aiNormalMap  →  shader.coatNormal

openPBRSurface:
  aiImage.outColor  →  aiNormalMap  →  shader.geometryCoatNormal
  file.outColor     →  aiNormalMap  →  shader.geometryCoatNormal

aiNormalMap.strength exports as clearcoatNormalTexture scale.

Green-channel inversion is handled the same way as the base normal map — if any of invertY, flipY, invert_y, invertGreen, or invertG is enabled on the aiNormalMap node, the exporter generates an inverted-green image.


UV transform

file nodes: set repeat, wrap, mirror, offset, and rotation on the connected place2dTexture.
aiImage nodes: wrap, scale, and offset export natively; rotation requires a place2dTexture.

UV set: assign via Maya's UV Set Editor or UV Linking — see UV Set Selection for node-type differences.

When clearcoat intensity and roughness use a combined texture, the UV transform is read from whichever texture node is found first.


Notes

  • All clearcoat data is non-color. Always use Raw color space for every clearcoat texture.
  • Clearcoat intensity and roughness share one glTF texture (R = intensity, G = roughness). Use the packed workflow or separate grayscale files — the exporter combines them automatically.
  • The clearcoat normal is always a separate texture from the combined clearcoat image.
  • Clearcoat roughness is only exported when clearcoat intensity is also active (coat / coatWeight > 0, or a clearcoat texture is present).
  • StingrayPBS does not export KHR_materials_clearcoat.