BVC is the volumetric pillar of the Bitruvius Suite, built by the team behind TurboLEPCC and TurboSPZ.

Explore the Suite
Bitruvius Volumetric Codec | BVC Coming Soon Patent Pending

Splats. Point clouds. One codec, at GPU speed.

BVC compresses the two formats 3D actually ships in, lidar point clouds and Gaussian splats, into lossless files smaller than the incumbents' lossy ones, then adds the axes they can't reach: GPU decode, browser decode, exact data.

Performance

Three numbers
that matter.

Every figure on this page is reproduced by committed benchmark harnesses on public test data, on two reference machines, a 24-core Intel workstation and an Apple M3 Max, producing byte-identical files on both.

Peak read throughput
0.00B pts/s

billion points per second at scale

Apple M3 Max, 16 cores, the read dial of the same wire

vs Esri LEPCC (streaming standard)
−0.0%

our lossless file vs their lossy one

they degrade the data and still lose on size

vs LAZ (archive standard)
0×

faster reads on a single core, in a 34% smaller file

a 10.65M-point survey: ~4 s as LAZ, 16 ms as BVC flagship at scale

Head-to-Head

Same data. Same machine.
Smaller files.

Identical input, identical tiling, measured against the strongest implementation of each competing format, including our own Turbo line, which already outperforms the format owners' shipping libraries. Shorter bar wins.

Gaussian splats · bytes per splat (786K-splat capture, full color detail)

BVC · compact (SH compressed) compact tier · smallest here, better measured color than SOG
14.32
SOG (post-hoc) lossy · k-means SH compression
14.57
Qualcomm L-GSC lossy · own quant grid + zlib, private bitstream (compLevel 2)
18.27
BVC · exact (bit-lossless) every attribute bit-exact · and still smaller than SPZ’s lossy file
22.49
Niantic SPZ lossy · quantizes on ingest, degrades on every re-encode
23.09

SOG and SPZ are both lossy, and only lossy. BVC is the only splat codec here with a bit-exact mode, and even that exact file undercuts SPZ's lossy one, so it beats SPZ without dropping a bit. The compact tier goes smaller still, at a declared fidelity. "Single-digit bytes per splat" headlines elsewhere require retraining the splat model, a different product category. Among encoders that compress what you already have, BVC leads at every fidelity point.

Point clouds · bytes per point (the exact files in the live race below, 1.06M-pt Autzen tile)

BVC · crown (palette-256) single-pass 256-color palette · smallest file of the field
5.78
BVC · lossless flagship dial · full color, exact data
6.80
Esri LEPCC · lossy posterized color · no gps_time (can’t encode it)
6.87
Draco · lossless Google · same 1 cm grid
7.02
meshopt · lossless Khronos codec · same grid
7.18
LAZ · lossless archive standard
8.87

Head-to-Head Performance

Encode and decode.
Versus the field, on every chip.

Same data, same machine, same number of threads. Point clouds on a 10.65-million-point survey, splats on a 786K-splat capture. Bars are single-core where the format allows nothing more; chips show what each codec does when given the whole machine.

On the GPU · end-to-end decode, million points per second

whole-file decode including all transfers · verified bit-exact on both stacks

NVIDIA RTX (Vulkan)

Decode straight to renderer (zero readback)
129.6
GPU-resident incl. readback to CPU
71.5
Cold decode to CPU memory
44.6

Apple M3 Max (Metal)

GPU-resident incl. readback to CPU
71.8
Decode straight to renderer (zero readback)
60.7
Cold decode to CPU memory
54.7

Where are the competitor bars? There are none, no GPU decoder ships for LAZ, LEPCC, SPZ, Draco, or the KHR_meshopt bitstream. Those formats were designed for serial CPU decode (chained arithmetic coding, serial compressed streams), and a decade of GPU hardware hasn't produced one: Draco's own tracker closed “Run Draco on GPU?” without a path. GPU dequantization of CPU-decoded output is not bitstream decode, and meshoptimizer decompresses on the CPU by design (its experimental GPU meshlet decoder targets a different format, not the KHR bitstream). BVC is the only format of the six designed for GPU decode, and the only one with a shipping, bit-exact GPU decoder on both major APIs. The empty column is the result.

In a renderer, buffers persist and decode runs at kernel rate, billions of values per second. Compressed tiles also move 2.5× less data over the bus than raw points.

Now in the browser · decode on the page's own GPU (WebGPU)

Resident decode, million points/s · output stays in GPU storage buffers (zero readback) · SHA-256 digest-gated byte-identical, all 214 Autzen tiles

Chrome · Apple M3 Max · Metal via Dawn 292.7 Mpts/s
292.7
Safari · Apple M3 Max · WebKit WebGPU · independent impl, bit-identical 203.1 Mpts/s
203.1
Chrome · NVIDIA RTX PRO 5000 · Vulkan via Dawn 69.5 Mpts/s
69.5

The wire decodes on the browser's GPU in both Chrome (Dawn) and Safari (WebKit), two independent WebGPU implementations agreeing bit-for-bit with the reference. Apple's unified memory runs it ~4× the NVIDIA readback-walled path. It's the same bytes proven identical across seven environments: x86, ARM, WASM-CPU, native GPU, and browser WebGPU on both vendors. No LAZ / LEPCC / SPZ / Draco / meshopt path decodes on the browser GPU at any setting.

And Gaussian splats, too, on the browser's GPU

Resident splat decode, million splats/s · hornedlizard 786K-splat capture (deg-3 SH) · SH-compressed GPU wire (22.6 B/splat) · zero readback · per-tile SHA-256 digest-gated + packed arena byte-identical to the CPU packer

Chrome · Apple M3 Max · Metal via Dawn · 2.9× the same-run WASM-CPU decode 72 Mspl/s
72
Chrome · NVIDIA RTX PRO 5000 · Vulkan via Dawn 19.6 Mspl/s
19.6

The splat's entropy stage runs on the page's own GPU: channels and SH leaf indices land in GPU storage buffers a renderer reads directly (the codebook is sampled as a resident texture at shade time). Digest-gated byte-identical on both Apple Metal and NVIDIA. On Apple's unified memory the resident path beats the same-run WASM-CPU decode by 2.9×, more than the RTX's 1.1×, since there's no readback wall. The bit-exact tier decodes resident at 40.2 (M3) / 10.3 (RTX) Mspl/s. No SPZ / SOG / L-GSC path decodes a splat on the browser GPU at any setting.

Encode, too · faster than the full-machine CPU

read-dial GPU encode vs the full multi-core CPU encoder · byte-identical · 1.06M-point tile

NVIDIA RTX PRO 5000 · Vulkan · vs full 24-core CPU 1.49× CPU
1.49×
Apple M3 Max · Metal · vs full 16-core CPU 1.17× CPU
1.17×

Dashed line = full-CPU parity (1.0×). Both backends beat their own full multi-core CPU encoder, byte-identical, and the lead widens with tile size (M3 Max reaches 1.35× at 4M points). BVC is the only point-cloud codec that encodes on the GPU; every other format's encoder is CPU-serial.

Prove It

Race it yourself. Right here.

BVC against the field, live in your browser. A 786k-splat Gaussian capture, BVC vs Niantic SPZ, and a ~1.06M-point LiDAR scan decoded and rendered georeferenced: BVC crown (palette-256), the LEPCC fidelity class, vs Esri's LEPCC head-to-head. Same data, different containers; watch the size and the clock. Swap in the flagship or read-dial BVC lanes, or Google's Draco and the Khronos meshopt codec, from the dropdown.

WebGPU 3D Loading Showcase · 10.65M points decoded on YOUR GPU · live in your browser open full screen ↗
loading demo…
WebGL2 Splat Codec Race · BVC vs Niantic SPZ · live in your browser open full screen ↗
loading demo…
WebGL2 Point-Cloud Codec Race · BVC palette-256 vs Esri LEPCC · live in your browser open full screen ↗
loading demo…

The Moat

The volumetric format
built to decode on the GPU.

LAZ, LEPCC, SPZ, Draco, and meshopt were designed for serial CPU decode, a property of the file formats themselves. No implementation can fix them; for LAZ, LEPCC, and SPZ we built the fastest decoders in existence and hit each format's ceiling personally. BVC is what you design after that: a wire format whose decode splits across CPU cores, browser threads, and GPU workgroups natively, the only one of the six with a shipping, bit-exact GPU decoder.

Start-to-finish GPU decode

A real BVC file decodes end-to-end on the GPU, including the entropy stage every competing format must run on a CPU. Verified bit-exact on both major GPU ecosystems: NVIDIA (Vulkan) and Apple (Metal). In a renderer, decode runs at kernel rate, billions of values per second.

2.5× less bus traffic

Compressed tiles move 2.5× less data across the bus and through GPU memory than raw points, the multiplier that decides how many assets stream at once. The incumbents cannot run this experiment at all.

A 258 KB browser decoder

The same decoder ships for the web: 258 kilobytes of WebAssembly, SIMD-accelerated, both profiles. The same file serves archive, server, browser, and GPU, no transcode step anywhere in the pipeline.

One wire. Every operating point.

Maximum compression, fastest reads, fastest writes, or fully GPU-native files, every trade-off is an encoder-side dial recorded in the file. One format, one decoder, the whole frontier. The GPU-native dial costs just 7.7% over maximum compression.

Why the other five can't follow

Each incumbent decodes its bitstream with a serial primitive — a coder whose next symbol depends on the state left by the last one. That maps to a CPU core, not thousands of GPU lanes. They can dequantize or rasterize already-decoded points on the GPU; the decode itself stays on the CPU.

LAZ / COPC
Per-symbol arithmetic (range) coder over a 50,000-point prediction chain — each symbol waits on the previous decoder state.
Draco
Serial rANS entropy plus EdgeBreaker prediction. Its own tracker closed “Run Draco on GPU?” with no path — none ships today.
meshopt
A per-vertex delta-prediction chain in the KHR_meshopt_compression attribute stream, decoded on the CPU by design. (meshoptimizer's GPU meshlet decoder targets a different bitstream.)
Esri LEPCC
Canonical Huffman plus fixed-width bit-stuffing plus delta prefix-sums — serial per block.
Niantic SPZ
General-purpose LZ entropy — gzip/DEFLATE, and six Zstandard frames in v4 — with back-references into already-decoded output. CPU-bound.

GPU dequantization or rasterization of CPU-decoded points is not bitstream decode. No shipping or experimental GPU decoder of these five bitstreams exists as of July 2026 — BVC is the only one of the six that runs the entropy stage on the GPU.

Data Integrity

Your data, exactly.
Or bounded, and declared.

The incumbents lose data silently, and offer no alternative. Esri's LEPCC posterizes color; on the industry-standard test cloud it altered 98.6% of all points. SPZ and SOG are lossy-only: SPZ quantizes on ingest and degrades every re-encode, like re-saving a JPEG; SOG's k-means SH compression has no lossless setting. BVC offers true lossless for both point clouds and splats, and where loss is chosen, it is a declared dial with a guaranteed worst-case error written into the workflow, never a surprise.

Bit-exact, everywhere

Every supported platform: Intel, AMD, Apple Silicon, WebAssembly, and two GPU stacks, produces and verifies byte-identical files, enforced by cryptographic hash gates in continuous testing.

Better custody than the source

Measured and committed: SPZ cannot round-trip its own files, every pass moves every color coefficient. BVC ingests once and never degrades again. It preserves SPZ content better than SPZ preserves itself.

Numbers that survive diligence

Every claim traces to a committed harness on public data. When a measurement flaw was found that flattered us, every published number was corrected the same day, and still won every column.

Coming Soon

Not a paper. A product.

Command-line tools

LAS/LAZ in, BVC out, one command, quantization metadata carried end to end.

SPZ converter

Round-trips real Gaussian-splat files with positions, opacity, scale, and color exact, 33% smaller on disk.

Browser package

The 258 KB WebAssembly decoder, with a MapLibre rendering SDK in active development.

GPU decode library

Both profiles on Vulkan and Metal, parity-locked against the CPU decoder.

Bounded-accuracy dials

Survey-grade tolerance controls: centimeter-bounded geometry, declared color precision.

Language bindings

Python, Node, JVM, .NET, and C, one core, every runtime.

Access

Free decoder. Paid encoder.

Ahead of general availability, BVC is onboarding a limited cohort of design partners: teams whose workloads match the codec's strengths: petabyte-scale lidar archives, streaming 3D platforms, Gaussian-splat pipelines. Participation is by application and qualification, and includes direct engineering access and a voice in the roadmap.

Decoder

Free

Anyone who needs to read BVC-encoded data can pull the decoder from the Bitruvius Developer Hub: desktop, browser, and GPU. Compiled binaries for every supported platform; no source. The adoption flywheel is intentional.

Encoder + Decoder

Commercial license

Production encoding requires a paid license. Tiers, seats, transactions, and OEM redistribution are listed on the pricing page. All artifacts are compiled binaries.

Compiled-only distribution is intentional: it keeps the patent-pending novelty out of source and protects implementation IP across the supply chain.

The volumetric format
the GPU was waiting for.

The incumbents' speed limits are wire-format facts; fixing them means breaking every existing file. Any response starts from zero, years behind, against a moving target. Early access is limited and by qualification.

See Pricing

Esri, ArcGIS, I3S, and LERC are trademarks of Environmental Systems Research Institute, Inc.; Niantic and SPZ are trademarks of Niantic, Inc. / Niantic Spatial, Inc. These names are used solely to identify the products and formats being compared; no affiliation, sponsorship, or endorsement is implied. The live demos run Esri's unmodified LEPCC reference decoder (Apache 2.0) and Niantic's unmodified libspz reference decoder (MIT) under their respective licenses, alongside laz-perf (Apache 2.0). Benchmark data: the Autzen Stadium LiDAR scan, the openly distributed benchmark dataset popularized by the PDAL project, and sample capture scenes © Niantic from the open-source libspz repository (MIT). BVC is an independent Bitruvius format and implementation. Performance comparisons reflect our own measurements under the stated methodology; results vary by workload and hardware. Full third-party notices: Attributions.