Exact math behind Clearcoat Amount + Absorption Color in CoronaPhysicalMtl (for offline flat-color baking)

I’m building an external (non-3ds-Max) tool that needs to approximate the final paint color of a CoronaPhysicalMtl as a single flat sRGB value, given only: Base/Diffuse color, Clearcoat Amount (0–1), Clearcoat IOR, and Clearcoat Absorption Color (no textures, non-metal). I don’t need full angle-dependent accuracy — a near-normal-incidence approximation is enough.

Could someone from the dev team clarify the internal model:

  1. Is Clearcoat Absorption modeled as true Beer-Lambert absorption along the refracted ray’s path through the coat (i.e. path-length/thickness dependent), or as a single-bounce multiplicative tint applied once per shading sample?
  2. How does Amount (0–1) enter the math — is it a linear blend/lerp between “0% coat contribution” and “100% coat contribution” in the final color, or does it scale the coat’s optical thickness (which would make the absorption’s effect on color non-linear/exponential rather than linear)?
  3. Does Clearcoat IOR affect only the Fresnel reflectance (specular strength/highlight), or does it also change the refraction angle used inside the absorption calculation?
  4. For near-normal viewing (ignoring grazing-angle Fresnel increase), is there a simplified closed-form expression for surface color as f(BaseColor, Amount, IOR, AbsorptionColor)?
  5. Is this documented anywhere I might have missed (changelog, dev blog, SDK reference)?

Hi @dmytromes ,

Here a breakdown from our dev team regarding how Clearcoat Absorption is calculated in CoronaPhysicalMtl:

  1. Absorption Model: It is calculated as a single-bounce multiplicative tint (multiplier), rather than a path-length/thickness-dependent Beer-Lambert model.

  2. Amount (0–1): It acts as a standard linear blend (lerp) between 0% and 100% coat contribution rather than scaling optical thickness.

  3. Clearcoat IOR: It affects Fresnel specular reflectance only; it does not alter refraction angles for absorption.

  4. Near-Normal Closed-Form Equation: Depends on clear coat roughness/base layer roughness. But let’s assume that they are equal to 0. For near-normal view, Fresnel will be close to 0 (almost nothing gets reflected) so we can also ignore IOR. Then it will be just DiffuseColor * lerp(WHITE, AbsorptionColor, Amount).

  5. Documentation: This is not currently documented anywhere.

Pozdrowienia z Bałut!