Skip to main content

Gaussian Splatting Tutorial: From Photos to Interactive 3D Scene

Updated Mar 2026

This tutorial walks through creating a Gaussian Splatting scene from scratch — from taking photos to viewing an interactive 3D reconstruction in your browser. We will use a real example throughout: a park bench captured with 83 photos from an iPhone 15, trained with Nerfstudio on an RTX 3060 in 25 minutes, producing a 1.1 million Gaussian scene that renders at 90 fps. The raw PLY output was 178 MB; after SPZ compression at polyvia3d.com, it was 14.6 MB with no visible quality loss. You do not need prior experience with 3D reconstruction. You do need: a camera (any smartphone works), a computer with an NVIDIA GPU for training (or a free-tier cloud service), and about 2 hours for your first run. If you just want to view or convert existing 3DGS files without training your own, see our beginner guide instead.

Tools used in this guide

Step-by-Step Guide

  1. 1

    Step 1: Capture your scene (15-30 minutes)

    The golden rule of 3DGS capture: every surface must be visible from at least 3 different viewpoints. Walk around your subject in overlapping orbits — imagine you are tiling the scene with photographs where each photo overlaps its neighbors by 60-70%. For a single object (statue, furniture): 50-80 photos in a single orbit at eye level, plus 10-20 from above. For a room: 150-300 photos walking along each wall, plus corners. For an outdoor scene: 200-500 photos. Use your phone's default camera app — no special settings needed, but avoid HDR mode (it creates ghosting artifacts) and panorama mode (SfM cannot handle stitched images). Keep ISO low (100-400) to minimize noise, and avoid motion blur by pausing briefly before each shot. Overcast days produce the most uniform lighting, which helps reconstruction quality.

  2. 2

    Step 2: Run COLMAP for camera estimation (20-60 minutes)

    COLMAP is the standard Structure-from-Motion tool that estimates where each camera was when each photo was taken and produces an initial sparse point cloud. Install COLMAP from github.com/colmap/colmap (available for Windows, Mac, Linux). Create a project directory, put your photos in an images/ subfolder, then run: `colmap automatic_reconstructor --workspace_path . --image_path images`. On our 83-photo bench scene, COLMAP ran for 18 minutes on a Ryzen 7 5800X. The output is a sparse/ directory containing cameras.bin, images.bin, and points3D.bin — these are the camera parameters and initial point cloud that the 3DGS training will use. Common COLMAP failure: if your photos have too little overlap or too many repeated textures (like a brick wall), COLMAP will fail to register all cameras. The fix is usually more photos with more viewpoint diversity.

  3. 3

    Step 3: Train your Gaussian Splatting model (20-90 minutes)

    We recommend Nerfstudio for beginners — it wraps the training loop with sensible defaults and good visualization. Install: `pip install nerfstudio`. Then: `ns-train splatfacto --data . --output-dir outputs/`. Training starts by initializing a Gaussian at each COLMAP point, then iteratively optimizes Gaussian parameters by comparing rendered images to ground-truth photos. You will see the loss decrease rapidly in the first 5,000 iterations, then plateau around 15,000-30,000. Our bench scene trained for 30,000 iterations in 25 minutes on an RTX 3060 (6 GB VRAM). If you have an RTX 4090, expect about 8 minutes. Training VRAM requirements: 6 GB for scenes under 500 photos, 8-12 GB for larger scenes. If you hit VRAM limits, reduce image resolution with --downscale-factor 2.

  4. 4

    Step 4: Export as PLY

    After training, export the Gaussian Splatting scene as a PLY file. In Nerfstudio: `ns-export gaussian-splat --load-config outputs/splatfacto/config.yml --output-dir exports/`. This produces a point_cloud.ply containing all Gaussian parameters. Our bench scene exported as a 178 MB PLY with 1,102,847 Gaussians. If you used the original 3DGS implementation (INRIA) instead of Nerfstudio, the output is at point_cloud/iteration_30000/point_cloud.ply. If you used gsplat, check the output directory configured in your training script. The PLY file is your master copy — archive it. All downstream conversions (SPZ, SPLAT, etc.) can be regenerated from the PLY, but the PLY cannot be regenerated without re-training.

  5. 5

    Step 5: View in your browser

    Drag your PLY file into polyvia3d.com/splat-viewer/ply. The viewer automatically detects that this is a Gaussian Splatting PLY (not a mesh PLY) by checking for properties like f_dc_0, opacity, rot_0, and scale_0 in the file header. Our 178 MB bench scene loaded in 6.2 seconds on an M1 MacBook Air and rendered at 55 fps. Controls: left-click drag to orbit, scroll to zoom, right-click drag to pan. If your scene appears upside down, some training frameworks export with Z-up while the viewer expects Y-up — this is purely cosmetic and does not affect the data. Check the viewer's axis settings or flip the scene in your training tool's export config.

  6. 6

    Step 6: Compress to SPZ (the most important step)

    Go to polyvia3d.com/splat-convert/ply-to-spz and upload your PLY. SPZ compression uses vector quantization on Gaussian parameters and arithmetic coding on the result, achieving typical 10-12x compression with negligible quality loss. Our 178 MB bench PLY compressed to 14.6 MB SPZ — 12.2x compression. Processing took 9 seconds in the browser. The SPZ file preserves spherical harmonics (view-dependent color), unlike SPLAT format which strips them. This means your scene retains the realistic lighting shifts as you orbit around it. For web delivery, SPZ is the only format that makes sense: a 15 MB file loads in 1-2 seconds on broadband, while a 178 MB PLY would take 30+ seconds. SPZ is also on the Khronos glTF standardization track, ensuring long-term viewer support.

  7. 7

    Step 7: Share and embed

    With your SPZ file, you have several options. For quick sharing: host the SPZ on any web server or CDN (Cloudflare R2, S3, even GitHub Pages) and share the polyvia3d.com/splat-viewer/spz URL with instructions to drag-and-drop the file. For embedding on your website: use gsplat.js (~180 KB gzipped) with a simple script tag and canvas element. Or generate an iframe pointing to the polyvia3d viewer with your hosted file URL. For game engine integration: Unity and Unreal Engine both have 3DGS import plugins that accept PLY files — see our Unity/Unreal guide. For archival: keep the original PLY. For everything else: use SPZ.

Frequently Asked Questions

Can I train Gaussian Splatting without a GPU?
Local training requires an NVIDIA GPU with 6+ GB VRAM. If you do not have one, cloud services are the best alternative: Polycam and Luma AI both offer free tiers where you upload photos and receive a PLY output. Vast.ai and RunPod offer GPU rentals starting at $0.20/hour — an RTX 3060 instance for 30 minutes of training costs about $0.10. Google Colab's free tier can also work with the T4 GPU, though training will be slower (60-90 minutes for a typical scene).
How many photos do I need?
It depends on scene complexity. Single object: 50-80 photos. Small room: 150-250 photos. Large room or outdoor area: 300-500 photos. More photos generally produce better results up to a point — beyond 500, returns diminish rapidly and training time increases linearly. Quality matters more than quantity: 80 well-captured photos with good overlap outperform 200 blurry or poorly-spaced shots.
Why does my scene have floating artifacts?
Floating Gaussians (random colored blobs in empty space) are the most common quality issue. They usually come from: (1) insufficient photo coverage — areas seen from only 1-2 viewpoints produce unreliable Gaussians, (2) moving objects in the scene (people walking, cars, wind-blown foliage), (3) reflective surfaces that confuse the color optimization. The fix is usually more photos from more angles. For post-processing cleanup, SuperSplat offers region selection and deletion tools.
Nerfstudio vs original 3DGS vs gsplat — which should I use?
For beginners: Nerfstudio. It has the best documentation, sensible defaults, and a built-in web viewer for monitoring training progress. For research and maximum quality: the original INRIA 3DGS implementation. For custom pipelines and integration with PyTorch projects: gsplat, which is the most modular and Pythonic. All three produce PLY output that you can view and convert at polyvia3d.com.

Related Tools

Related Format Guides