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

3D files smaller than the competition's. With nothing lost.

BVC is one codec for the two kinds of 3D data the industry ships: lidar point clouds and Gaussian splats. Its lossless files are smaller than the incumbents' lossy ones, and it decodes on the GPU, in the browser and on every CPU.

Built by the team behind TurboLEPCC and TurboSPZ, the fastest decoders for the formats it replaces.

34%
smaller than LAZ, losslessly
LAZ is the lidar archive standard. BVC keeps every point exact and is even 6.5% smaller than Esri LEPCC's lossy file.
11.8×
faster to read than LAZ
On a single core, from the smaller file, with the same points and attributes.
3.16billion
points read per second, at scale
Apple M3 Max, 16 cores, the fastest-read setting of the same codec.
On the GPU
where the competition can't decode
LAZ, LEPCC, SPZ, Draco and meshopt all decode on a CPU, one value after another. BVC decodes on the graphics card.

Every figure 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.

The 60-second version

3D data is huge, and today's codecs read it one value at a time.

Point clouds

Measured 3D

Billions of 3D points measured by lidar from aircraft, cars and drones: the raw material for maps, construction, mining, utilities and self-driving.

Gaussian splats

Photoreal 3D

Lifelike 3D scenes built from ordinary photos or video. The newest way to capture places and products, and now streaming on the web.

The incumbents

Five codecs, one bottleneck

LAZ for archives, Esri LEPCC for streaming, Niantic SPZ for splats, Draco and meshopt for 3D assets. The lossy ones change your data, and every one decodes one value after another on a CPU before it can be loaded to the GPU.

The fix

One codec for both

BVC stores point clouds and splats smaller, keeps every value exact if you want it, and splits decoding across CPU cores, browser threads and the GPU.

Watch it

Race it yourself, in this tab.

BVC against the field, live in your browser: 10.65 million lidar points decoded on your own GPU, a 786K-splat capture against Niantic SPZ, and a 1.06M-point lidar scan against Esri's LEPCC at matched color fidelity. Same data, different codecs; watch the file size and the clock. The dropdowns swap in other BVC settings, Google's Draco and the Khronos meshopt codec.

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…

What it means for the bill

Smaller archives, instant reads, more on screen.

3D archives run to petabytes and every viewer waits on decode. Here is what the measured figures mean in practice.

660 TB
for every petabyte stored as LAZ
Lossless, every point exact, and read 11.8× faster.
16 ms
to read a 10.65M-point survey
About 4 seconds as LAZ. BVC's smallest-file setting, read on every core.
2.5×
less data sent to the GPU
Compressed tiles cross to the GPU and decode there, so more 3D streams at once.

The archive figure is illustrative arithmetic on the measured size difference. A pilot measures yours.

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.

BVC settings, all one codec: flagship makes the smallest lossless file, balanced trades a little size for speed, read is tuned for the fastest reads and fast for the fastest writes. Any BVC reader opens all of them.

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). Unlike all five, BVC is designed for GPU decode, and it is 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 codec's encoder is CPU-serial.

Why the others can't follow

BVC decodes on the GPU.
The competition can't.

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. None of those five has a shipping GPU decoder; BVC has a bit-exact one.

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 file, any trade-off you choose

Maximum compression, fastest reads, fastest writes, or fully GPU-native files, every trade-off is an encoder-side dial recorded in the file. One codec, 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 runs the entropy stage on the GPU; none of the five can.

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.

How this was measured

  • Machines: a 24-core Intel workstation (Windows, AVX2) and an Apple M3 Max (16 cores), each codec run on the same machine with the same data. Both machines write byte-identical BVC files.
  • Point clouds: the public Autzen Stadium lidar scan, 10.65 million points, plus the 1.06M-point tile used in the live race and the size bars. Splats: a 786K-splat capture with full color detail.
  • Each competitor is its own reference library (Esri LEPCC, LAZ, Google Draco, Khronos meshopt, Niantic libspz, Qualcomm L-GSC) on the same tiles. Single-thread and full-machine results are reported apart.
  • Captures from July 2026, committed with the harnesses; each cell is the best of median-of-3 runs. The live races decode in your browser, so their numbers are yours, not ours.

Bring five of your point clouds or splat captures.

Ahead of general availability, BVC is onboarding a limited cohort of design partners: petabyte-scale lidar archives, streaming 3D platforms, Gaussian-splat pipelines. Participation is by application, with direct engineering access and a voice in the roadmap.

See pricing

BVC is licensed through the Bitruvius Developer Hub and ships as compiled binaries only, which keeps the patent-pending techniques out of source.

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 codec and implementation. Performance comparisons reflect our own measurements under the stated methodology; results vary by workload and hardware. Full third-party notices: Attributions.