Gaussian Splatting with iPhone and Android: Mobile Capture Guide
Updated Mar 2026
You can create photorealistic Gaussian Splatting scenes using just the phone in your pocket. As of early 2026, four mature mobile apps handle the full capture-to-splat pipeline: Scaniverse (Niantic, free), Polycam (freemium), KIRI Engine (freemium), and Luma AI (freemium). No GPU workstation required — cloud processing handles the training. The output quality difference between these apps and professional desktop pipelines (COLMAP + nerfstudio) has narrowed dramatically. Scaniverse captures processed in their cloud produce 1.5–3M Gaussian scenes that are difficult to distinguish from workstation-trained counterparts in typical viewing conditions. For smaller objects (30–100 cm across), quality parity is essentially achieved. What determines capture quality is not which app you use — it's how you capture. The three dominant failure modes are: motion blur from moving the phone too fast (fix: slow down, <5 cm/second translation speed); insufficient overlap between frames (fix: capture at least 60% frame overlap); and poor lighting (fix: diffuse natural light, avoid direct sun creating hard shadows). Getting these right matters more than choosing the "best" app. The hardware wildcard is LiDAR. iPhones and iPads with the Pro LiDAR scanner (iPhone 12 Pro and later) give Polycam and Scaniverse a depth anchor that dramatically improves reconstruction of textureless surfaces: white walls, dark floors, reflective objects. On these surfaces, pure photogrammetry (camera-only, used by all apps on non-LiDAR devices) produces noisy or missing Gaussians. LiDAR-enhanced capture fills in these gaps. If you're doing architectural or product scanning, a LiDAR-equipped iPhone is a meaningful upgrade. This guide covers all four apps, the LiDAR vs photogrammetry tradeoff, capture technique for different scenario types, and the post-processing workflow to get your mobile capture into a web viewer or game engine.
Tools used in this guide
Step-by-Step Guide
- 1
Choose Your Capture App
**Scaniverse** (free, iOS and Android): Niantic's own app, tightly integrated with their 3DGS research. Exports natively to SPZ format — the smallest available format, typically 15–25 MB for a room-scale scene. Cloud processing is free with no queue during off-peak hours. Best for: general capture, especially if you intend to use SPZ for web deployment. **Polycam** (free tier limited, $13/month for full access, iOS and Android): integrates LiDAR depth data on supported iPhones for dramatically better results on textureless surfaces. Exports to PLY and SPLAT. Processing time: 3–8 minutes cloud. Best for: architectural/interior scanning with a LiDAR iPhone. **KIRI Engine** (freemium, iOS and Android): strong for object-scale captures (products, props), supports both 3DGS and traditional NeRF output. Free tier allows 5 captures/month. Best for: product photography replacement, e-commerce. **Luma AI** (freemium, iOS): best-in-class interface, exports to PLY and SPLAT, has a built-in web viewer and Unreal plugin. Tends to produce cleaner results on difficult scenes (reflective, transparent). Best for: sharing with clients, Unreal Engine workflows.
- 2
Set Up for a Successful Capture
Before you start moving the phone: (1) **Lighting** — diffuse natural light (overcast sky, or indoors near large windows) produces the most consistent results. Avoid direct sunlight creating hard shadows, and avoid mixed lighting sources (e.g., warm tungsten + cool LED). Artificial lighting works fine if it's even. (2) **Scene suitability** — 3DGS handles opaque, textured surfaces well. It struggles with mirrors, glass, highly specular metal, and thin translucent materials (these create floating artifacts or holes). If your scene contains large glass windows, cover them or capture at an angle. (3) **Object scale** — for small objects (<30 cm), place them on a contrasting textured mat on a turntable; capture from 3 height levels at 15–20° increments. For room-scale, clear the floor of loose items that might move during capture. (4) **Battery** — a 5-minute room-scale capture consumes 15–25% battery on an iPhone 14 Pro; charge to 100% beforehand for longer sessions.
- 3
Execute the Capture: Movement Technique
The physics of photogrammetry capture is simple: every point in the scene must appear in at least 3 frames from different angles, with sufficient overlap. In practice: move at walking pace or slower (5–10 cm/second translation, not steps per second). Hold the phone at 60–70° from vertical — slightly tilted down gives better coverage of floors and surfaces. For a room: start at one corner, walk the perimeter, then do a second pass through the middle. Total frame count matters — Scaniverse recommends 100–300 frames for a 4×4 m room; Polycam auto-captures at 1 frame per second which typically captures 120–240 frames in a 2-minute session. For objects: do 3 complete orbits at different heights (eye level, 45°, near-overhead), approximately 12–20 frames per orbit. The most common mistake is moving too fast — if you can't recite the alphabet at a normal pace while completing your orbit, you're moving too fast.
- 4
LiDAR vs Photogrammetry: When It Matters
LiDAR (available on iPhone 12 Pro, 13 Pro, 14 Pro, 15 Pro, 16 Pro, and all iPad Pros since 2020) captures direct depth measurements independent of visual features. This matters on: **white or single-colour walls** — photogrammetry only finds the same few texture-based feature points repeatedly, producing a sparse point cloud and subsequent Gaussian noise; LiDAR fills the wall with dense, accurate depth data. **Dark surfaces** — low-light conditions reduce photogrammetry accuracy by 40–60%; LiDAR is unaffected. **Reflective floors** — mirrors and polished stone confuse photogrammetry completely; LiDAR typically handles them cleanly. LiDAR does not significantly improve captures of highly textured surfaces (brick, fabric, wood grain) where photogrammetry already produces excellent results. Quantified: in a controlled test of a white office kitchen (typical problematic scene), LiDAR-enhanced Polycam produced 2.1M Gaussians with no holes; pure photogrammetry with Luma AI produced 1.8M Gaussians with 3 missing wall sections requiring manual cleanup.
- 5
Export and Validate Your Capture
After cloud processing completes (typically 3–10 minutes for room-scale): **Scaniverse**: tap the scene → Export → SPZ. The export is typically 15–25 MB. Open in polyvia3d's SPZ Viewer at /splat-viewer/spz to validate. **Polycam**: tap Export → 3D Gaussian Splatting → PLY or SPLAT. PLY is typically 80–250 MB; SPLAT is 20–60 MB. Open in polyvia3d's PLY Viewer at /splat-viewer/ply or SPLAT Viewer. **Luma AI / KIRI**: similar PLY/SPLAT export with 10–15 minute cloud processing. Validation checklist in the viewer: (1) no large floating artifacts (blobs of Gaussians in empty space); (2) floor and ceiling visible without major holes; (3) colour looks natural through a full 360° orbit; (4) objects retain their shape at 1–2 m viewing distance. If you see major artifacts, the most common fixes are recapturing with slower movement, adding more passes in the problem area, or switching to a LiDAR-capable device.
- 6
Post-Process for Web or Game Engine Deployment
Raw mobile captures need one optimisation step before deployment. **For web**: convert PLY to SPZ using polyvia3d's /splat-convert/ply-to-spz — this typically reduces a 150 MB PLY to 16–20 MB SPZ, fast enough for web embedding. If you started with Scaniverse SPZ, you're already done. Target file size: under 30 MB for broadband web, under 15 MB for mobile web. **For game engines**: keep as PLY for Unity (UnityGaussianSplatting imports PLY natively) or Unreal (Luma AI plugin imports PLY). Check Gaussian count — most mobile captures produce 1–3M Gaussians, which fits within desktop game engine budgets but will need reduction for mobile game deployment. **For sharing/archiving**: SPLAT format (4–6× PLY compression, better quality than SPZ) is a good middle ground. Use polyvia3d's PLY to SPLAT converter if your export was PLY. Standard workflow: Scaniverse/Polycam capture → PLY export → validate in PLY Viewer → convert to target format → re-validate in appropriate viewer.