API v1 checking… · p50 — · 0 installs/hr
v0.10.0
Project
View on GitHub
zachdrouin

GaussianSplatViewer

New
12 0

View and explore 3D Gaussian Splatting scenes in immersive VR on Meta Quest 3. Load PLY files directly from device storage with high-performance GPU rendering, adaptive quality scaling, and native VR interaction including locomotion and file browsing. Built for Unity 6 with Burst-compiled async loading and OpenXR support.

Unity Project

Download the source from GitHub

Download 0

README

Rendered from GitHub

Gaussian Splat Viewer for Quest 3

A high-performance VR application for viewing 3D Gaussian Splatting (3DGS) scenes on Meta Quest 3. Load and explore PLY files generated from tools like ml-sharp directly in immersive VR.

Unity Platform License

Features

  • Native Quest 3 Support — Optimized for standalone VR with OpenXR
  • High-Performance Rendering — GPU compute shaders for real-time splat processing
  • Burst-Compiled Loading — Fast async PLY parsing with Unity Burst
  • VR File Browser — Browse and load PLY files directly from device storage
  • Adaptive Quality — Automatic performance scaling to maintain frame rate
  • 6DoF Locomotion — Smooth/snap turn and continuous movement

Requirements

  • Unity 6 (6000.0.x LTS)
  • Meta Quest 3 (Quest 2 and Quest Pro also supported)
  • Android SDK with API Level 29+

Quick Start

1. Clone the Repository

git clone https://github.com/zachdrouin/GaussianSplatViewer.git

2. Open in Unity Hub

  1. Open Unity Hub
  2. Click AddAdd project from disk
  3. Select the cloned folder
  4. Open with Unity 6 (6000.0.x LTS)

3. Build & Deploy

  1. Go to File → Build Settings
  2. Select Android and click Switch Platform
  3. Connect your Quest 3 via USB
  4. Click Build and Run

See SETUP_GUIDE.md for detailed configuration instructions.

Project Structure

Assets/GaussianSplatViewer/
├── Runtime/
│   ├── Core/                    # PLY loading & data structures
│   │   ├── GaussianSplatAsset.cs
│   │   ├── GaussianSplatRenderer.cs
│   │   ├── PLYLoader.cs
│   │   └── CoordinateConverter.cs
│   ├── Rendering/               # URP render pipeline integration
│   │   ├── GaussianSplatPass.cs
│   │   ├── SplatSorter.cs
│   │   └── SplatCuller.cs
│   ├── VR/                      # XR interaction & locomotion
│   │   ├── VRRigController.cs
│   │   └── VRLocomotion.cs
│   ├── UI/                      # VR file browser UI
│   │   ├── VRFileBrowser.cs
│   │   └── FileSystemAccessor.cs
│   ├── Optimization/            # LOD & streaming
│   │   ├── SplatLODManager.cs
│   │   └── ChunkStreamingManager.cs
│   └── GaussianSplatViewerApp.cs
├── Shaders/
│   ├── GaussianSplat.shader     # Main splat rendering shader
│   ├── GaussianSplatting.hlsl   # Shader includes
│   ├── GaussianSplatCompute.compute
│   └── RadixSort.compute
└── Scenes/
    └── SceneSetupGuide.cs

Architecture

Rendering Pipeline

PLY File → PLYLoader (Burst) → GaussianSplatAsset → GPU Buffers
                                                         ↓
Camera → GaussianSplatPass → Preprocess Compute → Sort → Draw Instanced
  1. PLYLoader — Parses binary PLY files using Burst-compiled jobs
  2. GaussianSplatRenderer — Manages GPU buffers and rendering state
  3. GaussianSplatPass — URP ScriptableRenderPass for the render pipeline
  4. Compute Shaders — Preprocess splats, frustum cull, and radix sort by depth

Key Components

Component Description
GaussianSplatViewerApp Main application controller, coordinates all systems
GaussianSplatRenderer Core renderer, handles loading and GPU buffer management
PLYLoader High-performance binary PLY parser with Burst
GaussianSplatPass URP render pass for splat rendering
VRRigController XR Origin management and tracking
VRFileBrowser World-space UI for file selection

Usage

Loading PLY Files

Transfer PLY files to your Quest via ADB:

adb push /path/to/scene.ply /sdcard/Download/

In the app:

  1. Press the Menu button (left controller) to open file browser
  2. Navigate to your PLY file
  3. Select to load

Controls

Input Action
Left Thumbstick Move
Right Thumbstick Turn (snap/smooth)
Left Menu Button Toggle file browser
A Button Reset view
Trigger UI selection

Performance

Optimized for Quest 3's Snapdragon XR2 Gen 2:

  • Target: 72 FPS (90 FPS mode available)
  • Max Splats: 400,000 visible (configurable)
  • Adaptive Quality: Auto-adjusts splat scale based on frame time
  • Single-Pass Stereo: Efficient VR rendering

Performance Tips

  • Keep PLY files under 1M Gaussians for best performance
  • Use binary PLY format (ASCII not supported)
  • Reduce Max Visible Splats in renderer settings if needed

Dependencies

Package Version Purpose
Universal RP 17.0.3+ Render pipeline
XR Interaction Toolkit 3.0.7+ VR interactions
OpenXR Plugin 1.14.0+ XR runtime
Meta OpenXR 2.1.0+ Quest support
Burst 1.8.18+ High-performance jobs
Input System 1.11.2+ New input handling

Troubleshooting

Black Screen on Quest

  • Verify OpenXR is enabled in XR Plug-in Management
  • Check Meta Quest Support feature is enabled
  • Ensure Vulkan is the only Graphics API

Splats Not Rendering

  • Add GaussianSplatRendererFeature to URP Renderer Asset
  • Assign compute shaders and material in the feature settings
  • Check that GaussianSplatRenderer component is in scene

Poor Performance

  • Reduce Max Visible Splats to 200,000
  • Disable MSAA in URP settings
  • Lower render scale to 0.8

License

MIT License — see LICENSE for details.

Acknowledgments

Changelog 0 releases

No changelog entries yet. Run the admin Changelog & Version Scanner to pull from the repository's CHANGELOG.md.

Comments

No comments yet. Be the first!