What's new — v0.42 → v0.47
The docs site now vendors the Verve framework GL core at v0.47.0 (up from v0.41.0). This tour covers what landed across v0.42–v0.47 and where to see it on the site. For the earlier arc, see What's new — v0.18.1 → v0.41.0.
Flagship: the Solarpunk Oasis feature piece
The headline addition is the Solarpunk Oasis — a full procedural diorama rendered by a single island: heightmapped terrain with a carved pond, instanced trees / rocks / crystal accents, a hand-shaded reflective water plane, drifting gold dust-mote billboards, three-point lighting with shadows, distance fog, and IBL. The server authors only ~0.25 KB of scalar generation parameters — no bulk arrays, no draw commands; the client chunk materializes the entire scene deterministically and streams a GL command stream per frame. See the Oasis feature-piece guide.
verve.gl — geometry & vertex compression (.vmesh v16 → v17)
Shipped mesh assets can now be compressed, transparently on decode:
- v16 — geometry (index) compression. The index buffer is stored with a pure-Zig delta + zigzag + LEB128-varint codec (
geo_codec.zig), halving the index-section size on the demo meshes. Lossless: decode reconstructs the raw u16 indices byte-for-byte, so every downstream draw / BVH pick / shader is unchanged. - v17 — vertex compression. Positions → u16 over the mesh AABB, normals + tangents → i8 snorm, UVs → u16 over the UV AABB. Combined with v16 index compression, total
.vmeshfiles shrink ~32–46%; the vertex section alone drops ~65%. - v17 — GPU-resident quantized attributes. Meshes can upload a GPU-ready half-float + snorm8 vertex blob so geometry stays quantized in VRAM — GPU vertex stride drops 48/56 B → 20/28 B (~58%), both WebGL2 and WebGPU, with no shader or UBO change (fixed-function vertex fetch dequantizes for free).
Decode is host-side in vmesh.Reader.initAlloc (into the page-persistent chunk arena) before the GPU upload, so both backends share one path. The Reader stays backward-compatible (reads v13–v17). This site keeps its existing demo assets uncompressed for simplicity; compression is opt-in at asset-gen time.
verve.gl — runtime reflection probes
A probe renders the surrounding scene into a cubemap from a fixed world position, prefilters it into a GGX roughness mip chain, and binds it as the specular IBL source — so a reflective model mirrors its actual surroundings instead of a static pre-baked environment map. Static capture-once, both backends, no PBR shader change (the über-shader's existing reflect(-V, N) → textureLod(u_prefiltered, …) sampling is reused). Wire tags 50–53; API ctx.glScene(…).probe(pos). Live demo: reflection probe.
Islands — large-binary fetch transport (verveFetchBinary)
A general transport that delivers a large binary payload to a named chunk export without touching the 8 KB per-island props scratch — it reuses the 4 MB asset region and is vid-scoped, so any island can pull a big blob (fetchBinaryToExport(url, export)). This is what lets a scene ship only tiny parameters over props and fetch bulk data (an IBL .venv, a server-authored graph) separately — exactly the pattern the Oasis feature piece uses for its 1.1 MB environment map.
verve.viz — server-authored & live-streaming canvas graphs
The canvas2d graph island can render a graph authored on the server and delivered by fetch (via the binary transport above) instead of synthesizing it in the chunk, and can now stream live updates: a ● live toggle subscribes the canvas to a push channel, the server publishes a tiny {"seq":N} ping each tick, and the canvas refetches the current graph — pan/zoom preserved across updates. See the viz demos.