Zihao Ding¹, Cheng‑Tse Lee², Mufeng Zhu¹, Tao Guan¹, Yuan‑Chun Sun², Cheng‑Hsin Hsu², Yao Liu¹
¹ Rutgers University | ² National Tsing Hua University
| Webpage | Full Paper
Abstract: 3D Gaussian Splatting (3DGS) is an emerging media representation that reconstructs real-world 3D scenes in high fidelity, enabling 6-degrees-of-freedom (6-DoF) navigation in virtual reality (VR). However, developing and evaluating 3DGS-enabled applications and optimizing their rendering performance, require realistic user navigation data. Such data is currently unavailable for photorealistic 3DGS reconstructions of real-world scenes. This paper introduces 👁️NavGS (EyeNavGS), the first publicly available 6-DoF navigation dataset featuring traces from 46 participants exploring twelve diverse, real-world 3DGS scenes. The dataset was collected at two sites, using the Meta Quest Pro headsets, recording the head pose and eye gaze data for each rendered frame during free world standing 6-DoF navigation. For each of the twelve scenes, we performed careful scene initialization to correct for scene tilt and scale, ensuring a perceptually-comfortable VR experience. We also release our open-source SIBR viewer software fork with record-and-replay functionalities and a suite of utility tools for data processing, conversion, and visualization. The 👁️NavGS dataset and its accompanying software tools provide valuable resources for advancing research in 6-DoF viewport prediction, adaptive streaming, 3D saliency, and foveated rendering for 3DGS scenes. The 👁️NavGS dataset is available at: 👁️NavGS: 6-DoF Navigation Dataset for 3DGS in VR.
@article{ding2025eyenavgs,
title={EyeNavGS: A 6-DoF Navigation Dataset and Record-n-Replay Software for Real-World 3DGS Scenes in VR},
author={Ding, Zihao and Lee, Cheng-Tse and Zhu, Mufeng and Guan, Tao and Sun, Yuan-Chun and Hsu, Cheng-Hsin and Liu, Yao},
journal={arXiv preprint arXiv:2506.02380},
year={2025}
}
The 👁️NavGS (EyeNavGS) software is an open-source tool built on the SIBR viewer, designed for recording and replaying user navigation in 3D Gaussian Splatting (3DGS) scenes in VR (OpenXR). It directly supports the 👁️NavGS dataset collection and offers:
- Real-time VR viewing (Desktop and Headset modes).
- Per-frame trace recording of head pose, field-of-view, and eye gaze.
- Offline session replay to reproduce captured VR experiences and generate stereoscopic video.
- Utility tools for coordinate conversions, format interoperability (CSV ↔ JSON), and eye-gaze visualization.
This software lets you visualize, record, and replay 6-DoF user navigation sessions within high-fidelity, photorealistic 3DGS environments.
Before proceeding, ensure you have a Windows 10 or Windows 11 machine (Linux support for Headset Mode via SteamVR is also available). You'll need the following:
-
Visual Studio 2019 (with C++20 support)
-
CMake 3.16+
-
Python 3.8+
-
Doxygen 1.8.17+
-
CUDA 10.1+
-
An NVIDIA GPU
-
Clone the repository:
git clone https://github.com/symmru/EyeNavGS_Software.git
-
Verify requirements are in your PATH:
python --version doxygen --version nvcc --version cmake --version
-
Generate Visual Studio project with CMake-GUI:
-
Open CMake GUI.
-
Set “Where is the source code” to the repository root.
-
Fix Compatibility: Click Add Entry, set Name to
CMAKE_POLICY_VERSION_MINIMUM, Type toSTRING, and Value to3.5. (This prevents errors with legacy libraries likexatlas). -
Click Configure, choose Visual Studio 2019 Win64, then click Generate.

-
Ensure the following options are enabled:
-
BUILD_SIBR_OPENXR: ON -
BUILD_gaussian_viewer: ON
-
-
-
Compile using Visual Studio:
-
Open
build\sibr_projects.slnin Visual Studio. -
Important - Set OpenXR Language Standard: Before building, you must manually set the C++ standard for the OpenXR module:
- In the Solution Explorer, expand the
corefolder. - Right-click the sibr_openxr project and select Properties.
- Navigate to Configuration Properties > General.
- Change C++ Language Standard to ISO C++20 Standard (/std:c++20).
Note: Do not change the C++ standard for the rest of the parts. The rest of the core libraries must remain at their default (C++14) to ensure compatibility.
- In the Solution Explorer, expand the
-
Select the
ALL_BUILDtarget and build (C++ 20). -
Then build the
INSTALLtarget. -
The executables (e.g.,
SIBR_gaussianViewer_app_d.exe) will be placed ininstall/bin. -
Add
install/binto your PATH for convenience.
-
The SIBR VR Viewer allows users to visualize 3D Gaussian Splatting scenes either in a Desktop (non-VR) environment or through a VR headset using OpenXR.
For more detailed documentation on the SIBR core system, please refer to the original SIBR Core section and documentation.
The SIBR VR viewer supports two primary modes:
-
Function: Monocular 2D viewer on PC monitor (no headset).
-
Use Case: Quickly inspect 3DGS scenes, save camera paths, and record traces without VR hardware.
-
Launch Command:
SIBR_gaussianViewer_app_d.exe -m <path_to_3DGS_scene> --rendering-mode 0
-
Interaction:
-
Mouse: rotate, pan, and zoom
-
Keyboard (WASD): move camera
-
-
Function: Stereoscopic VR experience via [OpenXR](Khronos OpenXR Registry - The Khronos Group Inc). Supports Meta Quest Pro, Quest 2/3, HTC Vive Pro, etc.
-
Use Case: Immersive navigation and real-time trace collection.
-
Prerequisites (for Meta Quest headsets):
-
Install Meta Quest Link (Oculus Link) or SteamVR for Linux.
- Meta Quest Link – enable Developer Mode and Eye Tracking permission
-
(If eye-tracking available) Calibrate headset’s eye-tracking before recording.
-
-
Launch Command (no initial settings):
SIBR_gaussianViewer_app_d.exe -m <path_to_3DGS_scene> --rendering-mode 2
-
Launch Command (with scene initialization):
SIBR_gaussianViewer_app_d.exe \ -m <path_to_3DGS_scene> \ --rendering-mode 2 \ --initial-position <X> <Y> <Z> \ --initial-quaternion <QX> <QY> <QZ> <QW> \ --initial-scale <S>
-
--initial-position <X Y Z>: Headset origin in world units. -
--initial-quaternion <QX QY QZ QW>: Scene tilt correction. -
--initial-scale <S>: Scale of the scene
-
-
Command Example:
SIBR_gaussianViewer_app_d.exe -m D:\projects\sibr\scenes\models\truck --rendering-mode 2 --initial-position 0 2.1 -4 --initial-quaternion -0.0896, 0.0000, 0.0000, 0.9960 --initial-scale 0.76
-
Controller Mapping: (OpenXR)
Function Controller Input Elevate / lower camera position Left controller’s vertical stick (↑ / ↓) Strafe camera position left / right Right controller’s horizontal stick (← / →) Move camera position forward / backward Right controller’s vertical stick (↑ / ↓) *Rotate scene (around user) Right trigger + stick drag *Move scene (drag translation) Left trigger + stick drag Note: Some commands are also available via the in-app UI (
OpenXR > Configuration).Movement speed in the scene can be adjust with the dedicated slider. Press “Save VR configuration” to store
vr.json, which auto-loads on subsequent launches.
EyeNavGS captures per-frame, per-eye data:
-
ViewIndex (0:left, 1:right)
-
FOV1–FOV4: left/right/top/bottom field of view (radians)
-
PositionX, PositionY, PositionZ: head position (world coordinates)
-
QuaternionX, QuaternionY, QuaternionZ, QuaternionW: head orientation
-
GazeQX–GazeQW: eye-gaze orientation quaternion
-
GazePosX, GazePosY, GazePosZ: eye-gaze position (world coordinates)
-
elapsed_ms: milliseconds since the
recordbutton click -
iso_time: [ISO-8601](ISO 8601 - Wikipedia) format time in local timezone
-
Launch viewer in Desktop Mode (
--rendering-mode 0). -
In the viewer window, click Record → Stop → Save path.
-
The resulting CSV (e.g.,
output0.csv) appears in the chosen folder.
-
Launch viewer in Headset Mode (
--rendering-mode 2). -
In the desktop companion window, press Save Traces → Stop Saving.
-
Each eye’s trace is saved as
output<number>.csvin the working directory.-
To quickly run different scenes in VR mode on
Windows, useutils\WinSceneSelector\scene_select.batto choose your desired scene. Once the viewer launches in Headset Mode (--rendering-mode 2), press Start Trace Recording then End Trace Recording in the OpenXR tab in the SIBR viewer to save user's trace.
-
Each CSV row corresponds to one rendered frame (left eye then right eye). Example columns:
| ViewIndex | FOV1 (rad) | FOV2 (rad) | FOV3 (rad) | FOV4 (rad) | PosX | PosY | PosZ | QuatX | QuatY | QuatZ | QuatW | GazeQX | GazeQY | GazeQZ | GazeQW | GazePosX | GazePosY | GazePosZ | elapsed_ms | iso_time |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | -0.9424 | 0.6981 | -0.9424 | 0.7330 | -3.669 | -3.657 | 4.657 | 0.494 | 0.294 | 0.123 | 0.808 | 0.250 | 0.085 | 0.023 | 0.964 | -3.668 | -3.656 | 4.657 | 4.505 | 2025-05-20T16:06:35.004-05:00 |
| 1 | -0.6981 | 0.9424 | -0.9424 | 0.7330 | -3.513 | -3.561 | 4.588 | 0.494 | 0.294 | 0.123 | 0.808 | 0.245 | 0.104 | 0.045 | 0.963 | -3.513 | -3.561 | 4.589 | 8.251 | 2025-05-20T16:06:35.008-05:00 |
Without Eye Tracking: “GazeQX–GazePosZ” fields are all zeros or default (0, 0, 0,1).
Replay imports a recorded CSV and overrides HMD pose data during rendering.
SIBR_gaussianViewer_app_d.exe \
-m <path_to_3DGS_scene> \
-in <trace_file.csv> \
--rendering-mode 4 \
--rendering-size <width> <height>- Default size: 1200 × 789 (per eye).
# Without reinitialization
SIBR_gaussianViewer_app_d.exe \
-m <path_to_3DGS_scene> \
-in <output0.csv> \
--rendering-mode 3 \
--rendering-size <width> <height>
# With original init settings (match recording)
SIBR_gaussianViewer_app_d.exe \
-m <path_to_3DGS_scene> \
-in <output0.csv> \
--rendering-mode 3 \
--initial-position <X> <Y> <Z> \
--initial-quaternion <QX> <QY> <QZ> <QW> \
--initial-scale <S>- Default size: 2064 × 2272 (per eye).
To replay a headset CSV in Desktop Mode (side-by-side), use --rendering-mode 4 --rendering-size 2064 2272 (or your headset's openxr resolution)
Pretrained 3DGS models can be downloaded from:
https://repo-sam.inria.fr/fungraph/3d-gaussian-splatting/datasets/pretrained/models.zip
Extract the file to your preferred path. To test with a Common initialization:
| Scene Name | Initial Position (X Y Z) | Quaternion (X Y Z W) | Scale |
|---|---|---|---|
| truck | -2 1.8 -4 |
-0.0872 0.0000 0.0000 0.9962 |
0.8 |
These values apply to Headset Mode only. If replaying a trace recorded with specific settings, use identical
--initial-*flags to avoid misaligned output.
For detailed initialization Parameters, please refer to Table 1 in the paper 👁️NavGS or the scene_setting.csv in the EyeNavGS_Rutgers_Dataset .
-
Example command for starting the SIBR viewer in desktop mode with the scene downloaded:
SIBR_gaussianViewer_app_d.exe -m C:\User\SIBR\models\truck--rendering-mode 0
-
Example command for starting the SIBR viewer in Headset mode with the scene downloaded and initialization:
SIBR_gaussianViewer_app_d.exe -m D:\projects\sibr\scenes\models\truck --rendering-mode 2 --initial-position 0 2.1 -4 --initial-quaternion -0.0896, 0.0000, 0.0000, 0.9960 --initial-scale 0.76
Located in utils/, these utilities support post-processing and integration with other frameworks :
-
AddEyeGazeTracking/ -
JsonCsvTraceConvert/- Converts EyeNavGS CSV traces to JSON (4×4 homogeneous pose matrices) compatible with other viewers (e.g., NeRFstudio, SGSS).
- Converts JSON traces (in external coordinate system) back into EyeNavGS CSV (undoing coordinate transforms).
-
WinSceneSelector/- For Windows, this script let user to easily launch various scenes in VR mode.
-
WorldCoordConvert/- Converts recorded “virtual world coordinates” back to 1:1 “physical stage coordinates” by applying the inverse of initialization transforms (tilt, scale, translation).
These tools ensure interoperability, reproducibility, and easy visualization of collected 👁️NavGS traces.
SIBR is a System for Image-Based Rendering.
It is built around the sibr-core in this repo and several Projects implementing published research papers.
For more complete documentation, see here: SIBR Documentation
This SIBR core repository provides :
-
a basic Image-Based Renderer
-
a per-pixel implementation of Unstructured Lumigraph (ULR)
-
several dataset tools & pipelines do process input images Details on how to run in the documentation and in the section below.
If you use this code in a publication, please cite the system as follows:@misc{sibr2020, author = "Bonopera, Sebastien and Esnault, Jerome and Prakash, Siddhant and Rodriguez, Simon and Thonat, Theo and Benadel, Mehdi and Chaurasia, Gaurav and Philip, Julien and Drettakis, George", title = "sibr: A System for Image Based Rendering", year = "2020", url = "https://gitlab.inria.fr/sibr/sibr_core" }This branch supports headed-mounted displays through OpenXR.
Note: The current release is for Windows 10 only. Please not that Visual Studio with c++20 standard is required to compile. We are planning a Linux release soon.
The easiest way to use SIBR is to download the binary distribution. All steps described below, including all preprocessing for your datasets will work using this code. Download the distribution from the page: https://sibr.gitlabpages.inria.fr/download.html (Core, 57Mb); unzip the file and rename the directory "install".
-
Python 3.8+ for shaders installation scripts and dataset preprocess scripts
-
Doxygen 1.8.17+ for documentation
-
CUDA 10.1+ and CUDnn if projects requires it Make sure Python, CUDA and Doxygen are in the PATH If you have Chocolatey, you can grab most of these with this command:
choco install cmake 7zip python3 doxygen.install cuda ## Visual Studio is available on Chocolatey, ## though we do advise to set it from Visual Studio Installer and to choose your licensing accordingly choco install visualstudio2019community
-
Checkout this repository's master branch:
## through HTTPS git clone https://gitlab.inria.fr/sibr/sibr_core.git -b master ## through SSH git clone git@gitlab.inria.fr:sibr/sibr_core.git -b master
-
Run Cmake-gui once, select the repo root as a source directory,
build/as the build directory. Configure, select the Visual Studio C++ Win64 compiler -
Select the projects you want to generate among the BUILD elements in the list (you can group Cmake flags by categories to access those faster)
-
Generate
-
Open the generated Visual Studio solution (
build/sibr_projects.sln) -
Build the
ALL_BUILDtarget, and then theINSTALLtarget -
The compiled executables will be put in
install/bin -
TODO: are the DLLs properly installed?
-
Open the generated Visual Studio solution (
build/sibr_projects.sln) -
Build the
DOCUMENTATIONtarget -
Run
install/docs/index.htmlin a browserSome scripts will require you to install
PIL, andconvertfromImageMagick.## To install pillow python -m pip install pillow ## If you have Chocolatey, you can install imagemagick from this command choco install imagemagick
We will track bugs and issues through the Issues interface on gitlab. Inria gitlab does not allow creation of external accounts, so if you have an issue/bug please email
sibr@inria.frand we will either create a guest account or create the issue on our side.if you are the first to use a very recent Cmake version, you will have to update
CHECKED_VERSIONin the rootCmakeLists.txt.you probably selected the 32-bits compiler in Cmake-gui.
make sure Python is installed and in the path.
build and install each project separately by selecting the proper targets.
make sure CUDA >= 10.1 (first version to support VS2019) is installed.
For more details, please see the documentation: http://sibr.gitlabpages.inria.fr Download a dataset from: https://repo-sam.inria.fr/fungraph/sibr-datasets/ e.g., the sibr-museum-front dataset in the DATASETS_PATH directory.
wget https://repo-sam.inria.fr/fungraph/sibr-datasets/museum_front27_ulr.zipOnce you have built the system or downloaded the binaries (see above), go to install/bin and you can run:
sibr_ulrv2_app.exe --path DATASETS_PATH/sibr-museum-frontYou will have an interactive viewer and you can navigate freely in the captured scene. Our default interactive viewer has a main view running the algorithm and a top view to visualize the position of the calibrated cameras. By default you are in WASD mode, and can toggle to trackball using the "y" key. Please see the page Interface for more details on the interface. Please see the documentation on how to create a dataset from your own scene, and the various other IBR algorithms available.
-
The new SIBR rendering mode
OpenXRRdrModesupports Headed-Mounted dislay (HMD) OpenXR devices. -
The GaussianViewer can use this rendering mode with
--rendering-mode 2option to render 3D Gaussian Splatting scene to two-view headset display through OpenXR stack. -
This mode works on Windows and Linux (through the SteamVR OpenXR runtime). Two VR experience modes are available:
-
Free world standing: you can walk freely in a rectangular play space
-
Seated: you can look around but only move within the space with controllers (the origin is world-locked)
How to test:
Windows (Meta Quest 1/2/3/Pro):
-
Install the Desktop PC Oculus Application: https://www.meta.com/en-gb/help/quest/articles/headsets-and-accessories/oculus-rift-s/install-app-for-link/
-
Setup Quest Link: https://www.meta.com/en-gb/help/quest/articles/headsets-and-accessories/oculus-link/set-up-link/
-
The headset should be in the Oculus AirLink Home screen (white background)
-
Run
gaussianViewer -m <dataset_path> --rendering-mode 2 -
You can try
Free world standingandSeatedVR experiences -
If you are experiencing lags in the headset, try to lower the rendering resolution by changing the
Down scale factorslider value.
Linux (through Steam):
- Install Steam and SteamVR
- Make SteamVR the OpenXR default runtime (Settings > OpenXR > SET STEAMVR AS OPENXR RUNTIME)
- Restart SteamVR
- Run
gaussianViewer -m <dataset_path> --rendering-mode 2
Tested with an HTC Vive Pro with beta - SteamVR Beta Update on Ubuntu distribution and Meta Quest 2 with Oculus on Windows 11.
If you use this 👁️NavGS datase in your research, please cite:
@article{ding2025eyenavgs,
title={EyeNavGS: A 6-DoF Navigation Dataset and Record-n-Replay Software for Real-World 3DGS Scenes in VR},
author={Ding, Zihao and Lee, Cheng-Tse and Zhu, Mufeng and Guan, Tao and Sun, Yuan-Chun and Hsu, Cheng-Hsin and Liu, Yao},
journal={arXiv preprint arXiv:2506.02380},
year={2025}
}
This repository is a modified fork of the SIBR (System for Image-Based Rendering) software.
It includes both:
-
Original code from SIBR, licensed under its own terms (see the
LICENSEfile), and -
New components and modifications developed by the 👁️NavGS project, licensed under the Apache License, Version 2.0. (see
LICENSE_EYENAVGS.mdfile)
You may obtain a copy of the Apache License at:
Unless required by applicable law or agreed to in writing, the software distributed under this license is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
Please refer to the NOTICE and LICENSE_EYENAVGS.txt files for details on which parts are covered under Apache 2.0.
Thank you for exploring 👁️NavGS software. We welcome contributions, issue reports, and feedback via the GitHub repository’s Issue Tracker.






