Streaming multi-GB CT scans in the browser with WebGPU
Multi-GB CT scans render in browser when VTK.js requires server-side preprocessing.
A WebGPU-native out-of-core rendering system for large virtualized volumetric data.
Virtual texture indirection for volume data in the browser—genuinely clever approach to streaming multi-GB datasets.
Medical imaging researchers, scientific visualization engineers, high-performance graphics developers
Cesium.js (for 3D geospatial) · VTK.js · BrainVISA
I’ve been interested in volume rendering for many years, and once WebGPU became widely available, I wanted to explore how multi-GB volumetric datasets can be streamed and rendered interactively in the browser — without downloading the entire volume up front.
Kiln is a virtualized volume renderer for WebGPU with out-of-core streaming and a fixed VRAM budget.
Many WebGPU volume rendering examples assume the data is compact enough to be downloaded in full before rendering begins and kept fully resident during interaction.
Kiln instead streams multi-GB datasets over HTTP and renders them using a fixed-size GPU page cache and virtual texture indirection. The renderer is fully compute-shader-based and targets WebGPU directly (no WebGL fallback).
Kiln expects the volume to be available as multi-resolution bricks (either preprocessed into its custom format or provided via a chunked format such as OME-Zarr). At runtime, only bricks relevant to the current view are fetched via HTTP range requests, decompressed asynchronously in worker threads, and uploaded to VRAM, while old entries are evicted via LRU.
The logical brick layout is decoupled from physical GPU memory. A compact indirection texture maps logical brick coordinates to atlas slots, and each ray sample resolves this indirection before performing the density lookup inside the brick.
This architecture allows large datasets to become interactive quickly, with a short time-to-first-render and a constant, modest VRAM footprint.
The renderer is format-agnostic. Currently there are two data providers: a simple custom sharded binary format and an experimental OME-Zarr integration, both using the same rendering core.
Happy to discuss architectural decisions or performance trade-offs.
Multi-GB CT scans render in browser when VTK.js requires server-side preprocessing.
Desktop-grade DICOM volume rendering in Chrome with WebGPU—no installation needed.
Inverse material rendering in browser that's faster than m-xr's marso and academic papers.
Renderer-agnostic core swaps WebGL/Canvas/WebGPU without touching state — rare architectural discipline.
PyMOL's 1000x faster core in Rust—same commands, modern GPU rendering, no legacy C++ baggage.
Terminal chart rendering shines, but D3 and Three.js dominate the web graphics space.