• Stars
    star
    510
  • Rank 84,055 (Top 2 %)
  • Language
    TypeScript
  • License
    Apache License 2.0
  • Created 10 months ago
  • Updated 3 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

WebGPU viewer for Gaussian Splatting nerfs

Image

This repository contains the source for an interactive web viewer of NeRFs crated with the code available from INRIA. The app with instructions is hosted at jatentaki.github.io.

Building

This project has been created using webpack-cli. Before the first build, go to the code directory and execute npm install to install dependencies.

Afterwards, you can use

npm run build

to bundle the application or

npm run serve

to have a live-updating server.

Browser compatibility

The official compatiblity table of WebGPU can be found here. In practice, the following are known to work:

MacOS: works with recent (version 115+) Chrome/Chromium browsers.

Windows: works with Edge 116+, most likely with Chrome/Chromium as well (it's the same thing but I was not able to test).

Ubuntu: works with Chrome dev version and custom flags. The steps are as follows:

  1. Download and install Chrome dev.
  2. Launch from command line with extra flags: google-chrome-unstable --enable-features=Vulkan,UseSkiaRenderer.
  3. Go to chrome://flags/#enable-unsafe-webgpu and enable webgpu. Restart the browser for the change to take effect, make sure to use the flags from the previous step as well.
  4. The Gaussian viewer should work.

Firefox: the nightly channel is supposed to support webGPU experimentally but in practice it fails on parsing my shaders across MacOS/Ubuntu.

If you succeed with any other configuration or fail with the ones described above, please open an issue and tell us.

Architecture

Unlike the original paper, this code doesn't use computer shaders to compute each pixel value independently but instead maps the problem to a standard rasterization technique, where each Gaussian is a flat rectangle facing the camera, with the actual content drawn via a fragment shader. I found this approach to yield substantially better framerates than compute shaders, although both are available in WebGPU.

This was my first substantial webdev project, therefore the code is far from idiomatic. I'm happy to receive PRs both to improve performance and to clean up the codebase.

More Repositories

1

LIFT

Code release for the ECCV 2016 paper
Python
486
star
2

disk

Disk code release
Python
287
star
3

EPnP

EPnP: Efficient Perspective-n-Point Camera Pose Estimation
MATLAB
247
star
4

MeshSDF

Code for "MeshSDF: Differentiable Iso-Surface Extraction", NeurIPS2020, SpotLight
Python
213
star
5

tf-lift

Tensorflow port of LIFT (ECCV 2016), with training code.
Python
196
star
6

segmentation-driven-pose

Segmentation-driven 6D Object Pose Estimation. CVPR 2019.
Python
177
star
7

MeshUDF

Fast and Differentiable Meshing of Unsigned Distance Field Networks
Cython
114
star
8

voxel2mesh

Voxel2Mesh: 3D Mesh Model Generation from Volumetric Data
Python
113
star
9

single-stage-pose

Single-Stage 6D Object Pose Estimation, CVPR 2020
Python
102
star
10

Power-Iteration-SVD

Backpropagation-Friendly-Eigendecomposition
Python
71
star
11

sketch2mesh

Reconstructing and Editing 3D Shapes from Sketches
Python
68
star
12

pyKSP

This is a Python wrapper for the K-Shortest Path tracking algorithm.
C++
66
star
13

social-scene-understanding

Source code for the CVPR 2017 paper
Python
63
star
14

log-polar-descriptors

Public implementation of "Beyond Cartesian Representations for Local Descriptors", ICCV 2019
Jupyter Notebook
59
star
15

wide-depth-range-pose

Wide-Depth-Range 6D Object Pose Estimation in Space, CVPR 2021
Python
56
star
16

detecting-the-unexpected

Detecting the Unexpected via Image Resynthesis
Python
55
star
17

balltracking

Tracking of the ball and the players in team sports
MATLAB
46
star
18

perspective-flow-aggregation

Perspective Flow Aggregation for Data-Limited 6D Object Pose Estimation. ECCV 2022.
Python
34
star
19

LabelGrab

Annotation tool for semantic and instance segmentation, with automated help from the GrabCut implemented in OpenCV.
Python
28
star
20

densecrf

a fork of the densecrf package implementing alternative inference scheme
C++
27
star
21

multiview_calib

Single and multiple view camera calibration tool
Jupyter Notebook
26
star
22

deepdesc-release

Code for the ICCV 2015 paper "Discriminative Learning of Deep Convolutional Feature Point Descriptors"
Lua
25
star
23

adv_param_pose_prior

Adversarial Parametric Pose Prior
Python
23
star
24

multicam-gt

Our Webapp to annotate multi-camera pedestrian detection datasets.
JavaScript
19
star
25

diff-nrsfm

MATLAB
18
star
26

cvlab-kubernetes-guide

Instructions and utilities for use of EPFL's compute cluster.
Python
15
star
27

MVFlow

Python
13
star
28

PA-net

Probabilistic Atlases to Enforce Topological Constraints
Python
9
star
29

mot3d

Fast Single View and Multiview Multi Object Tracking Using Minimum Cost Maximum Flow Formulation
Jupyter Notebook
7
star
30

MVAug

Python
7
star
31

gecco

Code release for GECCO: Geometrically-Conditioned Point Diffusion Models
Python
7
star
32

erasing-road-obstacles

Detecting Road Obstacles by Erasing Them
6
star
33

UCLID-Net

Implementation of UCLID-Net (NeurIPS 2020)
Python
5
star
34

zigzag

Official code for "ZigZag: Universal Sampling-free Uncertainty Estimation Through Two-Step Inference" (TMLR 2024)
Jupyter Notebook
4
star
35

n-queens-benchmark

C++
3
star
36

mf-mrf

Parallel mean-field inference web page
HTML
2
star
37

MARMOT

Multi-Aspect Reconstruction and Multi-Object Tracking
Jupyter Notebook
1
star
38

MAGE

Multi-Aspect Groundplane Estimation
Python
1
star
39

UDA-Hand-Object

Unsupervised Domain Adaptation with Temporal Consistency for 3D Joint Hand-Object Reconstruction
Python
1
star