u/Practical-Dig-4052

threecrate: a point cloud + mesh library in Rust, with some honest benchmarks against Open3D.
▲ 35 r/photogrammetry+2 crossposts

threecrate: a point cloud + mesh library in Rust, with some honest benchmarks against Open3D.

Been working on this on and off for a while and finally got the benchmarks to a point where they're not decent.

threecrate does the stuff you'd normally reach for Open3D or PCL for: kd-tree search, normal estimation, ICP/GICP/NDT registration, FPFH/SHOT features, voxel downsampling, segmentation, a handful of surface reconstruction methods, a wgpu compute path, and a basic viewer. There are Python bindings too (pip install threecrate), since a lot of the point cloud world lives in Python.

I didn't want to write the usual "rewrote it in Rust, it's faster now" post, because that isn't honestly true across the board. Here's where it actually landed against Open3D 0.19 on CPU, same machine, full-resolution TUM/KITTI/nuScenes frames:

  1. Reading files: ~1.8–2.2x faster (raw float parsing; one caveat, the TUM read row isn't quite apples-to-apples and I flag that in the docs)

  2. Voxel downsampling: ~1.6–1.8x faster

  3. Normal estimation: 0.57–1.09x, so slower once clouds get big

  4. Single-scale ICP: 0.71–0.99x, also slower on big clouds

So it's clearly ahead on I/O and down-sampling, roughly a wash on compute overall, and still behind on dense normals and ICP as the cloud grows. I know why the normals are slow: the kd-tree is pointer/Box-based and thrashes cache. Swapping in a flat, array-backed tree is the obvious fix, and it's filed as a good-first-issue if anyone wants a self-contained perf problem with a number to beat.

Full tables and the repro command are in the repo, all reproducible: https://github.com/rajgandhi1/threecrate/blob/main/docs/benchmarks.md

Repo: https://github.com/rajgandhi1/threecrate

Feedback welcome, especially if I've done something dumb in the hot loops.

u/Practical-Dig-4052 — 17 hours ago