Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
73 changes: 62 additions & 11 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,25 +2,76 @@

**University of Pennsylvania, CIS 565: GPU Programming and Architecture, Project 5**

* (TODO) YOUR NAME HERE
* Tested on: (TODO) **Google Chrome 222.2** on
Windows 22, i7-2222 @ 2.22GHz 22GB, GTX 222 222MB (Moore 2222 Lab)
* Cindy Wei
* Tested on: **Google Chrome 128.0** on
Windows 11, i7-13700K @ 5.4GHz 32GB, RTX 4080 16GB (Personal Machine)

### Live Demo
https://chapiniwei50.github.io/Project5-WebGPU-Gaussian-Splat-Viewer/
### Demo Video/GIF

[![](img/thumb.png)](http://TODO.github.io/Project4-WebGPU-Forward-Plus-and-Clustered-Deferred)
https://youtu.be/IgWtlDe2ayY

### Demo Video/GIF
## Project Description
This project implements a real-time 3D Gaussian Splat Viewer using WebGPU, based on the 3D Gaussian Splatting technique. The viewer loads and renders pre-trained Gaussian scene files with sorting and basic rendering. **Note: We were unable to achieve smooth surfaces and proper blending - the implementation currently renders as discrete particles rather than continuous surfaces.**

## Features Implemented

### Part 1: Point Cloud Renderer
- MVP calculation in vertex shader
- Point cloud visualization

### Part 2: Gaussian Splat Renderer
- **Preprocessing Compute Shader**:
- View frustum culling with 1.2x bounding box
- 3D covariance computation from rotation and scale
- 2D conic and quad size calculation in NDC space
- Spherical harmonics color evaluation
- Storage of 2D Gaussian data for rasterization

- **Rendering Pipeline**:
- Depth-based sorting using radix sort
- Indirect draw calls with dynamic instance count
- Quad reconstruction in vertex shader
- Basic fragment shader implementation
- **Implementation Limitation**: Failed to achieve proper conic-based splat evaluation and smooth surface blending

## Screenshots

**Point Cloud**
![Point Cloud Rendering](images/pointcloud.png)

**Gaussian**
![Gaussian Splat Rendering](images/gaussian.png)

## Performance Analysis

### 1. Renderer Comparison
- **272K Gaussians**: Point Cloud ~60 FPS, Gaussian Renderer 58-61 FPS
- **1.06M Gaussians**: Point Cloud ~60 FPS, Gaussian Renderer 14-19 FPS
- Gaussian rendering provides color but at significant performance cost with larger scenes

[![](img/video.mp4)](TODO)
### 2. Gaussian Count Scaling
Performance scales inversely with Gaussian count:
- **272K Gaussians**: 58-61 FPS
- **1.06M Gaussians**: 14-19 FPS
- 4x more Gaussians results in 3-4x performance drop

### (TODO: Your README)
### 3. View-Frustum Culling Effectiveness
- **Bonsai Scene**: 96.6% of Gaussians rendered (3.4% culled)
- **Bicycle Scene**: 100% of Gaussians rendered (0% culled)
- Current culling implementation is largely ineffective

*DO NOT* leave the README to the last minute! It is a crucial part of the
project, and we will not be able to grade you without a good README.
### 4. Performance Characteristics
- **Bonsai (272K)**: Average frame time 16-17ms
- **Bicycle (1.06M)**: Average frame time 60-62ms
- Major bottleneck is Gaussian processing and sorting overhead

This assignment has a considerable amount of performance analysis compared
to implementation work. Complete the implementation early to leave time!
## Technical Challenges
- **Conic Evaluation**: Unable to properly implement the conic matrix evaluation in the fragment shader
- **Blending Pipeline**: Challenges with alpha blending and proper transparency sorting
- **Surface Continuity**: Failed to achieve smooth surface reconstruction from individual splats
- **Culling Optimization**: View-frustum culling requires improvement for better performance

### Credits

Expand Down
Binary file added images/gaussian.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added images/pointcloud.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
1 change: 1 addition & 0 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading