BM-002 — Gaussian Splat Budgets · bm-002-splat-budget
Owner directive (2026-07-10), canonical. "For now, generate with the Holonprint Loop with gaussian splatting, lenis, tailwind, react, next, use webgl (…) scroll video control, 3D animated elements, physics model as gravity, wave, sparks of electricity, hitbox…" [src: wiki/development/prompts-archive/by-topic/knowledge-management-and-concept-modeling.md:498] — under the device bound "doesnt matter the device, 15 years old mobile" [src: :463].
Content
BM-002 fixes the resource budgets for every gaussian-splatting scene rendered by the spark-renderer under the holonprint loop — the Royal Orbit spatial-site sceneries, letterform scenes and behavior overlays. Like bm-001-web-perf, the numbers are squad-eggtech's (RUN-017) quantitative encoding of the owner's mandate; recalibration requires measured evidence logged in the run heartbeat (sop-003-run-dispatch). BM-002 composes with BM-001: staying inside these budgets is how the FPS/heap gates stay green.
Splat-count budgets
| Budget | Desktop | Mobile / old-phone |
|---|---|---|
| Resident splats (total in memory, all live slices) | ≤ 700 k | ≤ 300 k |
| Behavior overlays (extra splats per chapter for loop-driven behaviors: sand, sparks, wave, life) | ≤ 20 k per chapter | ≤ 20 k per chapter |
| Letterform scenes (old-arabic letters forming scenarios [src: :481]) | ≤ 60 k per letterform | ≤ 30 k per letterform |
CPU frame budgets (main thread, per frame)
| Workload | Desktop | Mobile |
|---|---|---|
| Behavior loops (routines, physics events on scenery elements) | ≤ 2.0 ms | ≤ 1.0 ms |
| Morphs (letterform / scene transitions) | ≤ 1.5 ms | ≤ 1.5 ms |
| Flourishes (non-essential effects; first to degrade) | ≤ 0.7 ms | ≤ 0.7 ms |
Degradation order under pressure: flourishes → behavior overlay density → letterform LOD. Resident-splat and morph budgets never degrade silently — exceeding them is a refused delivery.
Wire-size budgets per tier
Loading may be long [src: :652], but wire size still bounds it. Budgets assume compressed splat streams (≈16–32 B/splat effective) delivered progressively per chapter.
| Tier | Total splat payload (all chapters) | Per-chapter chunk | First-interactive payload |
|---|---|---|---|
| desktop-high | ≤ 24 MB | ≤ 4 MB | ≤ 6 MB |
| mobile | ≤ 10 MB | ≤ 2 MB | ≤ 3 MB |
| old-phone | ≤ 6 MB | ≤ 1.5 MB | ≤ 2 MB |
Measurement procedure
- Per scene: dump live splat counts (resident, overlay, letterform) from the spark-renderer debug hooks; per frame: profile behavior/morph/flourish timings on both reference tiers.
- Per build: record chunk sizes from the cb-vite build manifest + asset pipeline.
- Log all values in the RUN-017 heartbeat; dispatch accepts/refuses per sop-003-run-dispatch step 5; refused rows retry under sop-001-loop-execution.
Composition
- uses: gaussian-splatting / spark-renderer / holonprint (what is being budgeted) · cb-spark · cb-threejs (implementation cookbooks) · bm-001-web-perf (the downstream FPS/heap gates)
- used-by: gear-sets (
splat-authoringgate) · squad-eggtech (owner) · squad-instance (scenery deliveries) · okrs-2026-h2 (KR2) · pb-001-spatial-site-loop (row acceptance criteria) · schema-genome-spatial-strand (tier parameters serialized per instance)
See also
- bp-001-spatial-site — the blueprint staging these scenes
- cb-patterns-royal-orbit — proven splat-scroll patterns within budget