Resolution Where It Counts:
Hash-based GPU-Accelerated 3D Reconstruction
via
Variance-Adaptive Voxel Grids
ACM Transaction on Graphics
- Sapienza, University of Rome
MrHash is a GPU-accelerated 3D reconstruction pipeline
that uses variance-adaptive
voxel hashing
for efficient TSDF fusion with optional 3D Gaussian Splatting rendering.
Abstract
Efficient and scalable 3D surface reconstruction from range data remains a core challenge in computer graphics and vision, particularly in real-time and resource-constrained scenarios. Traditional volumetric methods based on fixed-resolution voxel grids or hierarchical structures like octrees often suffer from memory inefficiency, computational overhead, and a lack of GPU support. We propose a novel variance-adaptive, multi-resolution voxel grid that dynamically adjusts voxel size based on the local variance of signed distance field (SDF) observations. Unlike prior multi-resolution approaches that rely on recursive octree structures, our method leverages a flat spatial hash table to store all voxel blocks, supporting constant-time access and full GPU parallelism. This design enables high memory efficiency, and real-time scalability. We further demonstrate how our representation supports GPU-accelerated rendering through a parallel quad-tree structure for Gaussian Splatting, enabling effective control over splat density. Our open-source CUDA/C++ implementation achieves up to 13× speedup and 4× lower memory usage compared to fixed-resolution baselines, while maintaining on par results in terms of reconstruction accuracy, offering a practical and extensible solution for high-performance 3D reconstruction.
Resolution Comparisons
σ = 0.001
σ = 0.005
σ = 0.01
3D Reconstruction - Newer College
Drag to rotate, right-click to pan, scroll to zoom
Runtimes Comparison
| Method | ScanNet | Replica | Oxford-Spires | Newer College | ||||
|---|---|---|---|---|---|---|---|---|
| Time [ms]↓ | FPS↑ | Time [ms]↓ | FPS↑ | Time [ms]↓ | FPS↑ | Time [ms]↓ | FPS↑ | |
| VDBFusion | 17.45 | 5.71 | 519 | 1.93 | 40.31 | 24.65 | 103.62 | 9.61 |
| PIN-SLAM | 67.15 | 14.80 | 68 | 14.7 | 75.99 | 13.15 | 113.68 | 8.79 |
| N3Mapping | 184.67 | 5.40 | — | — | 255.44 | 3.91 | — | — |
| NKSR | — | — | — | — | 16.05 | 62.28 | — | — |
| Voxblox | 132.06 | 7.57 | 373 | 2.68 | 61.72 | 16.17 | 162.47 | 6.14 |
| Supereight2† | 73.94 | 13.53 | 100.87 | 9.92 | — | — | — | — |
| Supereight2‡ | 79.52 | 12.55 | 98.11 | 10.20 | — | — | — | — |
| Ours (single) | 15.11 | 64.30 | 20.45 | 48.9 | 14.27 | 68.86 | 30.18 | 21.6 |
| Ours (multi) | 16.79 | 59.34 | 37.50 | 26 | 16.39 | 61 | 28.17 | 35.25 |
Supereight2† uses a single-resolution grid, Supereight2‡ a multi-resolution grid. Our single-resolution variant is 2×–13× faster than prior work across datasets.
3D Reconstruction Results
| Method | Metric | RGB-D | LiDAR | Average | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0000 | 0010 | 0059 | 0106 | 0109 | 0181 | 0207 | quad | math | cloi | RGB-D | LiDAR | Overall | ||
| RGB-D | LiDAR | Averages | ||||||||||||
| PIN-SLAM | Acc. [cm]↓ | 2.680 | 4.069 | 5.789 | 6.540 | 2.802 | 4.161 | 4.004 | 9.942 | 10.271 | 9.082 | 4.292 | 9.765 | 5.934 |
| Comp. [cm]↓ | 1.078 | 1.060 | 1.464 | 1.732 | 0.862 | 1.648 | 1.085 | 13.764 | 13.960 | 14.584 | 1.276 | 14.103 | 5.124 | |
| C-L1↓ | 1.879 | 2.565 | 3.626 | 4.136 | 1.832 | 2.905 | 2.544 | 11.853 | 12.116 | 11.833 | 2.784 | 11.934 | 5.529 | |
| F-score [%]↑ | 97.966 | 94.486 | 87.775 | 83.363 | 96.209 | 93.494 | 93.496 | 83.724 | 83.596 | 82.431 | 92.398 | 83.250 | 89.654 | |
| VDBFusion | Acc. [cm]↓ | 2.217 | 2.473 | 4.615 | 5.472 | 1.603 | 4.090 | 2.874 | 6.511 | 8.669 | 6.511 | 3.336 | 7.230 | 4.504 |
| Comp. [cm]↓ | 0.925 | 0.707 | 1.122 | 0.885 | 0.516 | 0.928 | 0.779 | 11.645 | 12.684 | 12.657 | 0.837 | 12.329 | 4.285 | |
| C-L1↓ | 1.571 | 1.590 | 2.869 | 3.179 | 1.059 | 2.509 | 1.826 | 9.078 | 10.677 | 9.584 | 2.086 | 9.780 | 4.394 | |
| F-score [%]↑ | 97.052 | 95.687 | 88.896 | 85.161 | 97.659 | 89.723 | 94.692 | 89.532 | 87.157 | 87.963 | 92.696 | 88.217 | 91.352 | |
| Voxblox | Acc. [cm]↓ | 2.120 | 2.718 | 4.156 | 4.137 | 2.583 | 4.246 | 2.678 | 9.824 | 8.619 | 9.284 | 3.234 | 9.242 | 5.037 |
| Comp. [cm]↓ | 1.759 | 6.168 | 2.145 | 2.304 | 9.045 | 2.638 | 3.817 | 17.083 | 14.756 | 26.207 | 3.982 | 19.349 | 8.592 | |
| C-L1↓ | 1.939 | 4.443 | 3.150 | 3.220 | 5.814 | 3.442 | 3.247 | 13.453 | 11.688 | 17.746 | 3.608 | 14.296 | 6.814 | |
| F-score [%]↑ | 96.076 | 89.194 | 89.313 | 88.593 | 84.653 | 91.204 | 91.329 | 79.400 | 83.699 | 63.518 | 90.052 | 75.539 | 85.698 | |
| Supereight2† | Acc. [cm]↓ | 2.151 | 2.364 | 5.354 | 4.781 | 2.064 | 4.221 | 3.151 | fail | fail | fail | 3.441 | — | — |
| Comp. [cm]↓ | 1.457 | 1.294 | 2.002 | 1.484 | 1.183 | 1.983 | 1.470 | fail | fail | fail | 1.553 | — | — | |
| C-L1↓ | 1.804 | 1.829 | 3.678 | 3.132 | 1.623 | 3.102 | 2.310 | fail | fail | fail | 2.497 | — | — | |
| F-score [%]↑ | 97.478 | 97.399 | 87.040 | 88.131 | 97.073 | 91.905 | 95.252 | fail | fail | fail | 93.468 | — | — | |
| Supereight2‡ | Acc. [cm]↓ | 1.955 | 2.364 | 5.250 | 4.176 | 2.064 | 3.834 | 3.096 | fail | fail | fail | 3.248 | — | — |
| Comp. [cm]↓ | 1.452 | 1.296 | 2.011 | 1.464 | 1.182 | 1.954 | 1.476 | fail | fail | fail | 1.548 | — | — | |
| C-L1↓ | 1.704 | 1.830 | 3.631 | 2.820 | 1.623 | 2.894 | 2.286 | fail | fail | fail | 2.398 | — | — | |
| F-score [%]↑ | 98.168 | 97.394 | 87.454 | 90.752 | 97.075 | 93.458 | 95.445 | fail | fail | fail | 94.250 | — | — | |
| N3Mapping | Acc. [cm]↓ | fail | 1.705 | 2.338 | 3.374 | 1.706 | 2.134 | 1.786 | fail | fail | fail | 2.174 | — | — |
| Comp. [cm]↓ | fail | 1.335 | 1.664 | 1.390 | 1.133 | 2.616 | 1.222 | fail | fail | fail | 1.560 | — | — | |
| C-L1↓ | fail | 1.520 | 2.001 | 2.382 | 1.420 | 2.375 | 1.504 | fail | fail | fail | 1.867 | — | — | |
| F-score [%]↑ | fail | 98.811 | 96.398 | 93.671 | 98.076 | 97.034 | 97.293 | fail | fail | fail | 96.880 | — | — | |
| Ours | Acc. [cm]↓ | 0.963 | 1.587 | 2.981 | 2.822 | 1.364 | 2.789 | 1.701 | 7.134 | 9.061 | 7.015 | 2.030 | 7.737 | 3.742 |
| Comp. [cm]↓ | 1.053 | 1.079 | 1.414 | 1.202 | 0.961 | 1.968 | 1.234 | 11.898 | 13.116 | 14.208 | 1.273 | 13.074 | 4.813 | |
| C-L1↓ | 1.008 | 1.333 | 2.198 | 2.012 | 1.162 | 2.379 | 1.366 | 9.516 | 11.088 | 10.612 | 1.637 | 10.405 | 4.267 | |
| F-score [%]↑ | 99.674 | 98.408 | 94.124 | 94.200 | 98.079 | 96.183 | 97.246 | 89.503 | 85.811 | 84.815 | 96.845 | 86.710 | 93.804 | |
Supereight2† uses a single-resolution grid, Supereight2‡ a multi-resolution grid. Both Supereight2 variants and N3Mapping fail on all LiDAR sequences; averages in red are computed only where reconstructions succeed.
Citation
If you want to cite our work, please use:
@article{10.1145/3777909,
author = {De Rebotti, Lorenzo and Giacomini, Emanuele and Grisetti, Giorgio and Di Giammarino, Luca},
title = {Resolution Where It Counts: Hash-based GPU-Accelerated 3D Reconstruction via Variance-Adaptive Voxel Grids},
year = {2025},
publisher = {Association for Computing Machinery},
address = {New York, NY, USA},
issn = {0730-0301},
url = {https://doi.org/10.1145/3777909},
doi = {10.1145/3777909},
journal = {ACM Trans. Graph.},
keywords = {Surface Reconstruction, Novel View Synthesis, Gaussian Splatting}}
Acknowledgements
The website template was borrowed from Michaël Gharbi and MipNeRF360.