3D Gaussian Splatting in Python with NVIDIA Warp
September 5, 2025 Β· View on GitHub
This project reimplements the core ideas of 3D Gaussian Splatting in a clean, minimalist Python codebase using NVIDIA Warp. It runs on both CPU and GPU with no CUDA setup, focuses on clarity and parallelism, and is designed as a practical entry point for learning modern graphics and differentiable rendering.
Why This Implementation?
β CPU & GPU with Zero Hassle
Thanks to Warp, the same kernel code runs seamlessly on both CPU and GPU β no need to deal with CUDA setup, driver issues, or device-specific kernels. Just flip one config line.
π§ Learn Modern Graphics the Easy Way
Explore differentiable rendering and parallel graphics through clean, readable Python β no pricey GPUs, complex toolchains, or heavy C++/CUDA boilerplate needed.
π¦ Minimalist & Educational
This isnβt another massive codebase. Itβs designed for clarity and experimentation. Strips away complexity so you can focus on understanding how Gaussian Splatting really works.

Quick Start
Installation
# Clone the repository
git clone https://github.com/guoriyue/3dgs-warp-scratch.git
cd 3dgs-warp-scratch
# Install dependencies
pip install warp-lang==1.7.0 numpy==1.26.4 matplotlib==3.9.2 imageio==2.34.1 tqdm==4.66.5 plyfile torch==2.6.0
Download Example Data
# Download the Lego dataset
bash download_example_data.sh
Rendering
# Render 3 Gaussian points β a minimalist example
python render.py
You should see 3 Gaussian points like:
Training
# Train on Lego dataset (CPU by default)
# For GPU training, change DEVICE in config.py to "cuda"
python train.py
Project Structure
βββ forward.py # 3DGS: Forward pass (reimplementation of graphdeco-inria/gaussian-splatting)
βββ backward.py # 3DGS: Backward pass (reimplementation of graphdeco-inria/gaussian-splatting)
βββ train.py # Main training loop
βββ render.py # Rendering script to validate outputs; confirms forward pass correctness
βββ config.py # Configuration and training parameters
βββ loss.py # Loss functions for training (includes depth loss, though unused in this repo)
βββ scheduler.py # Learning rate scheduler
βββ optimizer.py # Adam optimizer and densify & prune logic
βββ utils/
β βββ camera_utils.py # Load camera intrinsics and extrinsics from training data
β βββ point_cloud_utils.py # Point cloud I/O utilities (e.g., saving to .ply)
β βββ math_utils.py # General math utilities (e.g., transformation matrices)
β βββ wp_utils.py # Warp utilities for math operations and device transfer
βββ data/ # Contains the NeRF-synthetic 'Lego' dataset
forward.py and backward.py are based on graphdeco-inria/gaussian-splatting. The original pure CUDA version is now reimplemented in Nvidia Warp, easy to understand, set up, and run.
Densification and pruning logic is based on yzslab/gaussian-splatting-lightning, but restructured here with minimal data preparation and simplified training logic.
License
This project is licensed under the GNU Affero General Public License v3.0.
See the LICENSE file for details.