Whether two masks share a layer — the one predicate every §46 consumer runs
(§64's stage 2, §47's camera visibility, §48's viewport selection, §71's
candidate filter).
layersMatch(node.layers, camera.layers); // does this camera see this node?
Deliberately symmetric and total: it is a set intersection test, it never
throws, and it has no notion of which argument is the object and which is the
view. That is what lets the same call filter a render list, a picking
candidate list, and a physics interaction pair without three spellings.
Whether two masks share a layer — the one predicate every §46 consumer runs (§64's stage 2, §47's camera visibility, §48's viewport selection, §71's candidate filter).
Deliberately symmetric and total: it is a set intersection test, it never throws, and it has no notion of which argument is the object and which is the view. That is what lets the same call filter a render list, a picking candidate list, and a physics interaction pair without three spellings.