Gaussian Splatting v2: 1-Minute 3D Scanning

Needed to 3D scan products for e-commerce. Traditional photogrammetry took hours and required a professional setup. Gaussian Splatting v2 changed everything - grabbed my phone, walked around the object, and got a usable 3D model in under a minute.

Problem

Scanned a coffee cup from 50 photos. Reconstruction worked, but had noticeable artifacts: floating blobs, weird shadows, and the handle wasn't connected properly. Model looked "ghostly" with transparency issues.

Warning: High splat variance in regions [x,y,z]

What I Tried

Attempt 1: Took 100 more photos - made artifacts worse, not better.
Attempt 2: Changed lighting conditions - introduced new artifacts.
Attempt 3: Tried denoising parameters - model lost detail.

Actual Fix

The issue was poor photo coverage and inconsistent camera angles. Gaussian Splatting v2 is sensitive to capture quality. The fix: 1) Use the camera guide to ensure even coverage, 2) Enable adaptive density control, and 3) Use the "refine" pass which was added in v2 specifically for this.

# Improved reconstruction setup
from gsplat import GaussianSplattingPipeline

pipeline = GaussianSplattingPipeline(
    device="cuda",
    refine_iterations=5000,  # v2: refinement pass
)

# Training with artifact reduction
output = pipeline.train(
    image_dir="photos/coffee_cup/",
    config={
        # Adaptive density control
        "adaptive_density": True,
        "density_thresh": 0.5,

        # Refinement pass (v2 feature)
        "refine": {
            "enabled": True,
            "iterations": 3000,
            "lambda_dssim": 0.2,  # Perceptual loss
            "lambda_normal": 0.5,  # Surface normal consistency
        },

        # Splat pruning
        "prune": {
            "enabled": True,
            "threshold": 0.01,  # Remove weak splats
            "frequency": 100,    # Prune every 100 iterations
        },

        # Camera optimization
        "optimize_cameras": True,
        "camera_refinement": True,
    }
)

# Export clean model
output.export("coffee_cup_clean.ply")

Problem

Used iPhone 14 Pro for scanning. Quality was noticeably worse than DSLR examples.

What I Tried

Attempt 1: Enabled ProRAW mode - too slow, processing took forever.
Attempt 2: Tried 4K video instead of photos - better but motion blur issues.
Attempt 3: Used telephoto lens - couldn't focus close enough.

Actual Fix

Mobile phone issues come from: small sensor noise, lens distortion, and rolling shutter. The v2 mobile mode specifically addresses these. Also, the video frame extraction quality parameter needs to be higher than default.

# Mobile-optimized configuration
pipeline = GaussianSplattingPipeline(
    mode="mobile",  # v2 mobile mode
    mobile_config={
        # Video processing
        "video_fps": 60,  # Higher FPS for better coverage
        "extract_quality": "high",  # Not "medium"
        "frame_skip": 2,  # Extract every 2nd frame

        # Mobile-specific corrections
        "rolling_shutter_correction": True,
        "lens_distortion_correction": True,
        "noise_reduction": {
            "enabled": True,
            "strength": 0.3,
        },

        # Image enhancement
        "sharpening": 0.2,
        "contrast_enhancement": 1.1,
    }
)

# For best results, use video + photo hybrid
# 1. Capture 10-second video circling object
# 2. Add 10-15 static detail photos
# 3. Process together

What I Learned

Production Setup

# Install Gaussian Splatting v2
git clone https://github.com/nerfstudio-project/gsplat.git
cd gsplat

# Install dependencies
conda create -n gsplat python=3.10
conda activate gsplat

pip install -r requirements.txt

# For mobile scanning
pip install opencv-python-headless pillow

# Test installation
python -c "from gsplat import GaussianSplattingPipeline; print('OK')"

Related Resources