The blending mode a layer of type will ACTUALLY render with.
For mesh this is not the composed value: volumetric has no meaning for a
zero-thickness surface, so the mesh material maps it to opaque and stamps the
RESOLVED mode into userData.blendingMode (spec §6.3). Storing the unresolved value
in LayerInfo made the panel disagree with the render in two visible ways at once —
it showed the Absorption slider (which no mesh shader reads) and HID the Alpha-cutoff
slider precisely when the cutout was active. The pick pass reads the material's
resolved mode, so it was correct and the UI was not.
Resolved at the point of STORAGE rather than at each display gate, so every consumer
of LayerInfo.blendingMode — the Blend dropdown's own displayed value included — sees
the mode that renders. A user who explicitly picks volumetric on a mesh sees the
dropdown snap back to opaque, which is honest: it is what the surface is doing, and
it matches the one-time warning the loader already emits.
The blending mode a layer of
typewill ACTUALLY render with.For mesh this is not the composed value:
volumetrichas no meaning for a zero-thickness surface, so the mesh material maps it toopaqueand stamps the RESOLVED mode intouserData.blendingMode(spec §6.3). Storing the unresolved value inLayerInfomade the panel disagree with the render in two visible ways at once — it showed the Absorption slider (which no mesh shader reads) and HID the Alpha-cutoff slider precisely when the cutout was active. The pick pass reads the material's resolved mode, so it was correct and the UI was not.Resolved at the point of STORAGE rather than at each display gate, so every consumer of
LayerInfo.blendingMode— the Blend dropdown's own displayed value included — sees the mode that renders. A user who explicitly picksvolumetricon a mesh sees the dropdown snap back toopaque, which is honest: it is what the surface is doing, and it matches the one-time warning the loader already emits.