Separate from construction because side is a property of the current
displayDims epoch, not of the node: an odd-parity reflection stays
single-sided (the index post-pass restored winding) while an undecidable frame
forces double-sided regardless of the authored double_sided. So the commit path
re-applies it on every rebuild.
Guarded on change: assigning material.side unconditionally would set
needsUpdate semantics in motion on every slice move, and on the WebGPU backend a
side change forces a pipeline rebuild.
Apply the epoch's material side to a mesh object.
Separate from construction because
sideis a property of the currentdisplayDimsepoch, not of the node: an odd-parity reflection stays single-sided (the index post-pass restored winding) while an undecidable frame forces double-sided regardless of the authoreddouble_sided. So the commit path re-applies it on every rebuild.Guarded on change: assigning
material.sideunconditionally would setneedsUpdatesemantics in motion on every slice move, and on the WebGPU backend a side change forces a pipeline rebuild.