/**
 * Lazy monotonic registry mapping layer name → unique bit. Lets pair
 * filtering use a single `(a.collidesWithMask & b.layerBit)` check
 * instead of `Array.includes` on every collision pair.
 *
 * One registry per dimension (2D and 3D) — user-defined layer namespaces
 * are independent, so bits should not be shared across systems.
 *
 * Maximum 32 layers per registry (one per bit in a 32-bit signed int).
 * Crossing the limit throws on the next `getLayerBit` call.
 */
export interface LayerBitRegistry {
    getLayerBit(layer: string): number;
    /** OR of `getLayerBit` for every entry. Cached by array reference. */
    getCollidesWithMask(collidesWith: readonly string[]): number;
}
export declare function createLayerBitRegistry(label: string): LayerBitRegistry;
