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: setcoat.openPBRSurface: setcoatWeight.
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
- Connect the texture
outColorR→multiplyDivide.input1X. - Set the clearcoat multiplier in
multiplyDivide.input2X. - Connect
multiplyDivide.outputX→shader.coat(orcoatWeight).
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
Rawcolor 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). StingrayPBSdoes not exportKHR_materials_clearcoat.