LoCoSplat: Real-Time Feed-Forward 3D Gaussian Splatting with Minimal 3D Reasoning
Organizations: Georgia Institute of Technology
Abstract
Feed-forward 3D Gaussian Splatting (3DGS) increasingly aggregates multi-view evidence with heavy learned 3D networks. We propose LoCoSplat (Local-Context Splatting), motivated by the observation that a Gaussian is a local primitive: once depth is predicted, what the 3D stage must add (scale, rotation, opacity) depends on the point cloud around each anchor, and a fixed local average of that neighbourhood is enough to supply it, no heavy network required. LoCoSplat realises exactly this average: it splats a 16-d linear projection of the point features into a fine and a coarse grid and reads both back at each anchor with a 0.14M-parameter pointwise MLP; with no learned 3D network and no dynamic sparse computation, its whole encoder runs as one fp16 CUDA graph. On RealEstate10K, LoCoSplat outperforms every prior feed-forward method on PSNR, SSIM, and LPIPS at 6, 12, and 24 views, with a margin that widens as views densify (+3.3 PSNR over VolSplat, the prior voxel-aligned state of the art, at 24 views) and grows further under zero-shot transfer to ACID and fine-tuning on ScanNet. It reconstructs a 6-view scene in 33 ms on one NVIDIA RTX PRO 6000 GPU, the fastest of seven feed-forward methods and faster than the previous state of the art, trains faster ( at 24 views), and uses less inference memory.
Figures & tables
| Method | 6 views | 12 views | 24 views | ||||||
| PSNR | SSIM | LPIPS | PSNR | SSIM | LPIPS | PSNR | SSIM | LPIPS | |
| pixelSplat ( Charatan et al., 2024 ) | 28.95 | 0.900 | 0.163 | OOM | OOM | OOM | OOM | OOM | OOM |
| MVSplat ( Chen et al., 2024 ) | 29.13 | 0.924 | 0.091 | 26.97 | 0.912 | 0.101 | 26.23 | 0.903 | 0.108 |
| TranSplat ( Zhang et al., 2025 ) | 29.62 | 0.928 | 0.084 | 28.00 | 0.920 | 0.089 | 26.65 | 0.884 | 0.115 |
| DepthSplat ( Xu et al., 2025 ) | 30.52 | 0.931 | 0.079 | 28.54 | 0.919 | 0.088 | 26.26 | 0.880 | 0.115 |
| GGN ( Zhang et al., 2024 ) | 26.68 | 0.879 | 0.133 | 25.83 | 0.870 | 0.142 | 23.86 | 0.840 | 0.171 |
| Method | PSNR | Params train. / total | Inference (ms) | Recon. FPS | Peak mem. (MB) | Train (it/s) | Train wall-clock |
| pixelSplat | 28.95 | 119.0 / 119.0 M | 238.5 | 4.2 | 31,869 | 1.05 | 39.6 h |
| MVSplat | 29.13 | 12.0 / 12.0 M | 93.8 | 10.7 | 3,528 | 2.92 | 14.3 h |
| DepthSplat | 30.52 | 120.7 / 120.7 M | 81.2 | 12.3 | 7,204 | 2.44 | 17.1 h |
| GGN | 26.68 | 12.1 / 12.1 M | 177.0 | 5.6 | 3,489 | 2.25 | 18.5 h |
| AnySplat ‡ | 25.37 | 886.4 / 1,190.7 M | 85.5 | 11.7 | 3,774 | — | — |
| WorldMirror ‡ | 29.20 | 1,263.3 / 1,263.3 M | 90.8 | 11.0 | 5,673 | — | — |
| Model | (rel.) | PSNR | SSIM | LPIPS | Paired PSNR vs. LoCoSplat | LoCoSplat better | |
| 12 views | |||||||
| LoCoSplat, (pre-reg.) | 256 | 0.23 | 28.39 | 0.895 | 0.109 | 99% | |
| LoCoSplat | 64 | 0.92 | 31.49 | 0.943 | 0.073 | — | — |
| 24 views | |||||||
| VolSplat (retrained) | 128 | 0.22 | 27.24 | 0.881 | 0.127 | 98% | |
| LoCoSplat, | 128 | 0.22 | 28.08 | 0.888 | 0.114 | 98% | |
Appendix figures & tables13 assets
Supplementary material from the paper’s appendix.
Appendix
| Method | Encoder (ms) | Encoder-only FPS | Encoder + render, FPS | ||||||
| 6v | 12v | 24v | 6v | 12v | 24v | 6v | 12v | 24v | |
| pixelSplat | 238.5 | — | — | 4.2 | — | — | 4.0 | — | — |
| MVSplat | 93.8 | 303.9 | 1111.7 | 10.7 | 3.3 | 0.9 | 9.6 | 3.1 | 0.9 |
| DepthSplat | 81.2 | 149.8 | 306.4 | 12.3 | 6.7 | 3.3 | 11.1 | 6.1 | 3.0 |
| GGN | 177.0 | 483.8 | 1451.7 | 5.6 | 2.1 | 0.7 | 5.4 | 2.0 | 0.7 |
| AnySplat ‡ | 85.5 | 116.6 | 209.0 | 11.7 | 8.6 | 4.8 | 10.5 | 7.6 | 4.3 |
| Method | Render 8 views (ms) | Peak memory (MB) | #Gaussians (mean) | ||||||
| 6v | 12v | 24v | 6v | 12v | 24v | 6v | 12v | 24v | |
| pixelSplat | 10.4 | — | — | 31,869 | — | — | 393,216 | — | — |
| MVSplat | 9.9 | 17.2 | 31.7 | 3,528 | 7,277 | 24,341 | 393,216 | 786,432 | 1,572,864 |
| DepthSplat | 8.4 | 13.4 | 23.8 | 7,204 | 13,912 | 27,330 | 393,216 | 786,432 | 1,572,864 |
| GGN | 9.2 | 9.3 | 9.8 | 3,489 | 7,158 | 24,010 | 176,837 | 238,445 | 319,885 |
| AnySplat ‡ | 10.4 | 14.9 | 23.8 | 3,774 | 4,199 | 5,106 | 343,347 | 640,670 | 1,145,219 |
| Configuration | Encoder (ms) | PSNR |
| Two-grid model ( Section 3.5 ), original code | 94.4 | 31.63 |
| + fused ops (SDPA, packed voxel unique, fused gathers) | 87.4 | 31.63 |
| + fp16 image-side autocast | 83.8 | 31.63 |
| + runtime type-checking removed | 74.4 | 31.63 |
| + CUDA-graphed 2D image side | 67.4 | 31.63 |
| graph-native retrain (pointwise head, fine-from-base, ) | 52.0 | 31.60 |
| Stage | PSNR | LPIPS | Enc. (ms) |
| VolSplat (sparse 3D U-Net, 17M) | 30.93 | 0.078 | 137.0 |
| 8-level grid + MLP | 31.64 | 0.073 | 118 |
| 2 levels | 31.63 | 0.072 | 94.4 |
| pointwise head, | 31.60 | 0.073 | 58.9 |
| ViT-B/narrow iface, DWConv (= LoCoSplat) | 31.51 | 0.074 | 33.0 |
| Model (12 views) | 3D stage | PSNR | SSIM | LPIPS | PSNR |
| VolSplat (retrained) | sparse 3D U-Net | 30.86 | 0.939 | 0.077 | — |
| LoCoSplat | two-level grid + MLP | 31.47 | 0.942 | 0.073 | vs. retrained (paired) |
| Coarse source | Learned? | PSNR | Paired vs. ref. |
| Learned re-splat (reference, 2 runs, same seed) | ✓ | 31.60 / 31.63 | — |
| Fine field, hard box pooling | 31.58 | (tie) | |
| Fine field, Gaussian low-pass | 31.59 | (tie) | |
| Fine field, anchor-centered radius mean | 31.53 | ||
| Geometry-only statistics (no appearance) | 31.63 | (tie) |
| Config | Scales | PSNR | SSIM | LPIPS | PSNR vs. LoCoSplat |
| 1 level (fine only) | 31.38 | 0.941 | 0.075 | ||
| 2 levels (LoCoSplat) | 31.51 | 0.942 | 0.074 | — | |
| 2 levels (LoCoSplat, second seed) | 31.50 | 0.941 | 0.074 | (tie) | |
| 2 levels (LoCoSplat, third seed) | 31.50 | 0.941 | 0.074 | (tie) | |
| 4 levels ( ) | – | 31.50 | 0.941 | 0.074 | (tie) |
| 8 levels ( ) | – | 31.49 | 0.941 | 0.074 | (tie) |
| Model | Views | (px) | (bins) | Modal-bin share | MV depth err. | Status | ||
| LoCoSplat | 6 | 64 | 0.110 | 0.42 | 7 | 13% | 1.8% | healthy |
| LoCoSplat | 12 | 64 | 0.050 | 0.51 | 8 | 14% | 2.0% | healthy |
| LoCoSplat, | 12 | 256 | 0.012 | 0.000 | 1 | 100% | 48% | collapsed |
| LoCoSplat, | 24 | 32 | 0.047 | 0.51 | 5 | 19% | 1.5% | healthy |
| LoCoSplat | 24 | 64 | 0.023 | 0.47 | 8 | 14% | 3.2% | healthy |
| LoCoSplat, | 24 | 128 | 0.012 | 0.000 | 1 | 100% | 46% | collapsed |