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.

Factor-only clearcoat connection for standardSurface
standardSurface factor-only clearcoat setup.

Factor-only clearcoat connection for aiStandardSurface
aiStandardSurface factor-only clearcoat setup.

Factor-only clearcoat connection for openPBRSurface
openPBRSurface factor-only clearcoat setup.

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).

For a dedicated grayscale clearcoat image, outColor, outColorR, outColorG, or outColorB all export equivalently because the image carries the same value in every RGB channel. The examples above use outColorR to mirror glTF's clearcoat channel.

Texture-only clearcoat connection for standardSurface using file and place2dTexture
standardSurface texture-only clearcoat setup with file and place2dTexture.

Texture-only clearcoat connection for aiStandardSurface using file and place2dTexture
aiStandardSurface texture-only clearcoat setup with file and place2dTexture.

Texture-only clearcoat connection for openPBRSurface using file and place2dTexture
openPBRSurface texture-only clearcoat setup with file and place2dTexture.

Factor + texture

glTF computes: clearcoatFactor × clearcoatTexture.R

For a dedicated grayscale clearcoat map, any one multiplyDivide lane can be used:

  1. Connect the grayscale clearcoat texture into one lane of multiplyDivide.input1X, input1Y, or input1Z.
  2. Set the matching clearcoat multiplier on multiplyDivide.input2X, input2Y, or input2Z.
  3. Connect the matching multiplyDivide.outputX, outputY, or outputZshader.coat (or coatWeight).

For true grayscale sources, outColor, outColorR, outColorG, or outColorB can feed that lane. The exporter follows the real upstream source plug, so lane choice does not need to be X unless you are intentionally mirroring glTF's packed clearcoat channel layout.

The multiplier exports as clearcoatFactor.

Clearcoat factor plus texture connection for standardSurface using file and place2dTexture
standardSurface factor-plus-texture clearcoat setup with file and place2dTexture.

Clearcoat factor plus texture connection for aiStandardSurface using file and place2dTexture
aiStandardSurface factor-plus-texture clearcoat setup with file and place2dTexture.

Clearcoat factor plus texture connection for openPBRSurface using file and place2dTexture
openPBRSurface factor-plus-texture clearcoat setup with file and place2dTexture.


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. One texture node feeding both channels is supported, and multiple texture nodes pointing to the same file path are also supported. One shared multiplyDivide node or separate multiplyDivide nodes are both supported.

For packed clearcoat, the source-channel rule is strict even when the multiplyDivide lane is flexible:

  • Clearcoat intensity must come from the source texture's R channel.
  • Clearcoat roughness must come from the source texture's G channel.
  • The B channel is ignored for clearcoat export.

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

For true grayscale source images, outColor, outColorR, outColorG, or outColorB are all accepted for either attribute, because the exporter follows the real upstream source plug and grayscale data is identical across RGB. Those grayscale signals can pass through any one multiplyDivide lane (X, Y, or Z) on a shared node or on separate nodes.

If both clearcoat intensity and clearcoat roughness use separate grayscale textures, the exporter generates a packed RG clearcoat texture on export. Both source images must share the same dimensions.

If only one grayscale texture is present, the exporter keeps the original source image as-is:

  • Clearcoat intensity only: exports the original grayscale image directly as clearcoatTexture.
  • Clearcoat roughness only: exports the original grayscale image directly as clearcoatRoughnessTexture.

Factor + texture

glTF computes: clearcoatRoughnessFactor × clearcoatRoughnessTexture.G

For a dedicated grayscale roughness map, the factor can live on any matching multiplyDivide lane. Use the same pattern as clearcoat intensity: connect the grayscale source to one lane of input1*, set the matching scalar on input2*, and route the corresponding output* to coatRoughness.

If the source is a packed RG clearcoat texture, lane choice is still flexible, but the source texture channel must remain G for roughness.


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.
  • For true grayscale source images, the exporter is permissive about RGB output choice (outColor, outColorR, outColorG, outColorB) and multiplyDivide lane choice.
  • For packed clearcoat images, the exporter is strict about source-channel meaning: R = clearcoat intensity, G = clearcoat roughness, B = unused.
  • 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.