Network Culling (LOD)
Per-pair broadcast-rate rings so distant entities cost less bandwidth — honoured by every broadcaster (server-authoritative Movement and the client-authoritative Motor relay alike, so Movement is NOT required). Off by default.
Configuration 1
Every tunable lives in an options object — there are no magic numbers to hunt for.
CullingOptions
Configurable culling parameters (defaults here; never inlined in logic).
-
bool Enabled { get; set; }Master switch — off by default so composing the piece changes nothing until it is explicitly turned on (Crossplay:Culling:Enabled / env Crossplay__Culling__Enabled=true, or AddCrossplayCulling(o => o.Enabled = true)). Off = full rate for every pair.
-
int FarTickDivisor { get; set; }Send divisor for pairs beyond FullRateRadius: an observer receives every Nth broadcast tick of a far subject (at the default 20 Hz tick, 4 → 5 Hz far updates). 1 disables the reduction; the client's interpolation buffer absorbs the sparser timeline automatically. Default 4; raise it for more far-pair savings (coarser far updates), lower it toward 1 for smoother distant motion.
-
float FullRateRadius { get; set; }Observers within this distance (world units) of a subject receive every broadcast tick. Beyond it — but still inside the interest radius — they receive every FarTickDivisorth tick. Size it to where per-tick fidelity stops being visible in your game (typically well inside the interest radius). Default 40 units; raise it for fast/precise action, lower it to save more bandwidth.