Pick materials on #2992's shared TSL node graphs: ONE graph per pick
configuration (applySharedTSLGraph, materials/_shared/shared-graph-tsl.ts)
instead of one per material, so N pick materials of one configuration cost
one WebGPU node build, as their visual twins do.
The pick factories end by stamping the pick pass's fixed material state onto
the material they build into. Under the shared graph they build into a
scratch material once per configuration, so that state is re-applied here on
every material: an opaque ID buffer (no blending, depth-tested and written,
not tone mapped) whose opacity is pinned to exactly 1 — NodeMaterial
appends DiffuseColor.w *= material.opacity to every fragment, and the
element id's HIGH half rides in alpha (see the factories' comments).
Pick materials on #2992's shared TSL node graphs: ONE graph per pick configuration (
applySharedTSLGraph,materials/_shared/shared-graph-tsl.ts) instead of one per material, so N pick materials of one configuration cost one WebGPU node build, as their visual twins do.The pick factories end by stamping the pick pass's fixed material state onto the material they build into. Under the shared graph they build into a scratch material once per configuration, so that state is re-applied here on every material: an opaque ID buffer (no blending, depth-tested and written, not tone mapped) whose
opacityis pinned to exactly 1 — NodeMaterial appendsDiffuseColor.w *= material.opacityto every fragment, and the element id's HIGH half rides in alpha (see the factories' comments).