Skip to content

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

  1. Connect the texture outColorRmultiplyDivide.input1X.
  2. Set the weight multiplier in multiplyDivide.input2X.
  3. Connect multiplyDivide.outputXshader.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.outputMiniridescenceThicknessMinimum (nm)
  • remapValue.outputMaxiridescenceThicknessMaximum (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 Raw color 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.
  • iridescenceIor is only written when the value differs from the default 1.3.
  • iridescenceFactor is only written when the value is greater than 0.0.
  • Thickness texture values (0–1) map to the nanometer range set in the remapValue node.
  • For standardSurface and aiStandardSurface, thinFilmWeight is a custom attribute added by the plugin (visible in Extra Attributes). It is removed when the plugin is unloaded. thinFilmThickness and thinFilmIOR are native Arnold attributes.
  • For openPBRSurface, all three iridescence attributes (thinFilmWeight, thinFilmThickness, thinFilmIOR) are native shader attributes.
  • StingrayPBS does not export KHR_materials_iridescence.