Back to Devlog
    v0.9.20
    RendererJuly 23, 2026Release notes

    Eighteen Cylinders Replaced By One Quad

    A procedural GPU beam for the Voltaic, procedural health and armor pickups, Babylon 9 with 3,020 KTX2 sidecars, and WebGPU demoted back to an opt-in.

    The Voltaic Beam

    A new procedural GPU beam renderer — an analytic single-quad shader plus a thin-instanced batch for remote and chain beams — replacing the old 18-cylinder re-jittered bolt.

    The server emits a voltaic_beam event (id 16) carrying the exact damage ray, contact point, surface normal and impact kind. lasergun was collapsed into voltaic everywhere: canonical IDs, classname and ammo aliases, pickups, registration, bot profiles. Beam wander retuned from a ~7Hz spin to a slow deterministic meander. Design in docs/research/VOLTAIC_DESIGN.md.

    Electrobolt Became A Rail

    An analytic-helix GPU rail — cold blue-white core, twin helix, muzzle crack, terminal nucleus — driven by an electro_rail wire event for local and remote shooters. It used to be anchored at the eye origin, which put a near-camera smear across the screen. Plus shared procedural muzzle flashes for every weapon, with per-weapon styles: burst, fiery plume, electric arcs. GLB weapons shipped no _flash model, so before this only the light flickered.

    Pickups Became Sculptures

    Runtime-generated health and armor, replacing MD3 models, with no change to gameplay, active masks, respawn timing, ids or map networking. A new engine seam PickupVisual behind PickupOptions.visualFactory, a recipe family covering all 9 tiers, and a r_pickupProcedural toggle on by default. Health is a scrolling-gradient energy core with a cross emblem; armor is dark hex plates with glowing rims.

    Babylon 9, And Why WebGPU Is Off

    Babylon 9.17 with clustered dynamic lights and default-on PK3-aware KTX2 — 3,020 generated and validated sidecars plus local decoder workers. A KTX1 audit fixed backend-independent upload of 56 alpha-only legacy textures.

    WebGPUEngine sits behind ?renderer=webgpu only. Real lobby testing exposed invalid WGSL pipeline layouts and white frames, so WebGL2 is again the default. Re-testing confirmed a hard 12-UBO vertex-stage adapter ceiling where a pipeline needs 14. Plan in docs/research/BabylonJS-9-upgrade.md.

    That is a downgrade recorded honestly rather than hidden behind a flag that nobody was testing.

    The Bot Foundation And The Autsprite Post-Mortem

    BSP-fingerprinted, schema-versioned nav graphs under .cache/bots/maps, invalidated by BSP hash, schema, trigger resolver and movement-profile fingerprint. Typed A\* steps, bounded 125Hz rollouts against the authoritative movement model, npm run bot:analyze, and a deterministic sequence director with a final line-of-fire gate that suppresses friendly fire.

    The bug report worth quoting:

    Babylon 9.17 leaves scene.activeCamera pointing at the last-rendered weapon
    camera, which is parented to the eye, so its .position is a fixed local ~0;
    billboards froze "at a fixed angle". Only the camera it was fed was wrong.

    Also landed: textured area lights (r_arealights_max default 4), god rays on, GlowLayer default off, SSR default off, m_sensitivity 2 → 1, r_bsp_freeze on by default, and GPU particle rain and snow.

    text
    164 files / 1601 tests, checksum 2768943778 unchanged

    Known Unverified Items

    Voltaic beam appearance in first person and remote, tag_flash muzzle alignment, chain-arc versus decorative-fork read. Electrobolt helix visibility, turns and palette. Muzzle flash size and style per weapon — remote-player flashes are v1 local-first-person only. Procedural health and armor still wants an in-map pass. Post-match diorama framing and team podium. Carried from v0.9.19: WO9, WO13, WO7, showcase fullbright 0.6, lobby rematch flow.