Iridescence
glTF extension: KHR_materials_iridescence
glTF properties: iridescenceFactor · iridescenceTexture · iridescenceIor · iridescenceThicknessMinimum · iridescenceThicknessMaximum · iridescenceThicknessTexture
Iridescence simulates thin-film interference effects that produce rainbow-like color shifts depending on viewing angle (e.g., soap bubbles, oil slicks, beetle wings). Requires KHR_materials_iridescence to be enabled in the export options.
| Shader | Weight attr | Thickness attr | IOR attr |
|---|---|---|---|
standardSurface, aiStandardSurface |
thinFilmWeight (custom — added by plugin) |
thinFilmThickness |
thinFilmIOR |
openPBRSurface |
thinFilmWeight (native) |
thinFilmThickness |
thinFilmIOR |
StingrayPBS |
not supported | not supported | not supported |
In glTF, iridescence weight and thickness share one texture image:
| Channel | Data |
|---|---|
| R | Iridescence weight (factor) |
| G | Iridescence thickness |
Iridescence intensity
Factor only
openPBRSurface: Set thinFilmWeight directly on the shader.
standardSurface, aiStandardSurface: The plugin automatically adds a thinFilmWeight attribute (float, 0–1) to all standard surface shaders on load. It appears in the Extra Attributes section of the Attribute Editor. Set it there.
Note
thinFilmWeight is a plugin-managed export attribute for standardSurface / aiStandardSurface — it has no effect on the Maya viewport or Arnold rendering.
Only exported when the value is greater than 0.0. Exports as iridescenceFactor.
Texture only
Color space: Raw
standardSurface · aiStandardSurface · openPBRSurface:
aiImage.outColorR → shader.thinFilmWeight
file.outColorR → shader.thinFilmWeight
Exports as iridescenceTexture (R channel).
Factor + texture
glTF computes: iridescenceFactor × iridescenceTexture.R
- Connect the texture
outColorR→multiplyDivide.input1X. - Set the weight multiplier in
multiplyDivide.input2X. - Connect
multiplyDivide.outputX→shader.thinFilmWeight.
The multiplier exports as iridescenceFactor.
Iridescence IOR
Set thinFilmIOR directly on the shader.
Exports as iridescenceIor. Only written when the value differs from the default 1.3 by more than 0.01.
Iridescence thickness
The glTF thickness texture stores normalized 0–1 values that map to a nanometer range defined by iridescenceThicknessMinimum and iridescenceThicknessMaximum. In Maya, the mapping is set up through a remapValue node.
Min / max only
Set thinFilmThickness directly on the shader. Without a texture, both minimum and maximum export to the same value (the thickness is constant across the surface).
Exports as iridescenceThicknessMinimum and iridescenceThicknessMaximum.
Thickness texture with min / max range
Color space: Raw
Connect a texture through a remapValue node:
standardSurface · aiStandardSurface · openPBRSurface:
aiImage.outColorG → remapValue.inputValue
remapValue.outValue → shader.thinFilmThickness
Set the nanometer range in the remapValue node:
remapValue.outputMin→iridescenceThicknessMinimum(nm)remapValue.outputMax→iridescenceThicknessMaximum(nm)
The texture exports as iridescenceThicknessTexture (G channel).
openPBR thickness units
openPBRSurface stores thinFilmThickness in micrometers. The exporter automatically converts to nanometers (×100) before writing to glTF.
Packed texture (weight + thickness in one image)
Use the same source file for both weight and thickness, connecting the correct channel to each:
standardSurface · aiStandardSurface · openPBRSurface:
texture.outColorR → shader.thinFilmWeight
texture.outColorG → remapValue.inputValue → shader.thinFilmThickness
The exporter detects that both attributes share the same file and exports it directly as the combined iridescence texture. Exports as iridescenceTexture and iridescenceThicknessTexture pointing to the same image.
Separate textures (auto-combined)
Connect different grayscale images to weight and thickness. The exporter repacks them into a single combined image: weight in R, thickness in G.
standardSurface · aiStandardSurface · openPBRSurface:
textureA.outColorR → shader.thinFilmWeight
textureB.outColorG → remapValue.inputValue → shader.thinFilmThickness
Both maps must share the same dimensions.
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 weight and thickness use a combined texture, the UV transform is read from the weight texture node.
Notes
- All iridescence textures are non-color. Always use
Rawcolor space. - Iridescence weight and thickness share one glTF texture (R = weight, G = thickness). Use the packed workflow or separate grayscale files — the exporter combines them automatically.
iridescenceIoris only written when the value differs from the default1.3.iridescenceFactoris only written when the value is greater than0.0.- Thickness texture values (
0–1) map to the nanometer range set in theremapValuenode. - For
standardSurfaceandaiStandardSurface,thinFilmWeightis a custom attribute added by the plugin (visible in Extra Attributes). It is removed when the plugin is unloaded.thinFilmThicknessandthinFilmIORare native Arnold attributes. - For
openPBRSurface, all three iridescence attributes (thinFilmWeight,thinFilmThickness,thinFilmIOR) are native shader attributes. StingrayPBSdoes not exportKHR_materials_iridescence.