高斯散射VR查看器
在SIGGRAPH 2023上,Kerbl、Kopanas、Leimkühler和Drettakis发表了论文"3D高斯散射实时辐射场渲染",与其他nerf技术相比,该论文展示了令人印象深刻的渲染速度。
Clarte在Unity原生插件中集成了差分高斯光栅化,以创建高斯散射学习模型的OpenXR查看器。这个项目是用CUDA编写的高斯散射渲染器的原始实现。该插件也可以在不使用OpenXR的情况下在Unity中渲染高斯散射。
提供了一个预编译的Windows版OpenXR查看器供测试使用。您也可以从源代码编译或打开Unity项目。
其他人也实现了自己的高斯散射渲染器。例如,aras-p为Unity实现了一个渲染器(UnityGaussianSplatting),而EPFL的CVLab则实现了一个WebGL渲染器(gaussian-splatting-web)。
在这个版本中,我们添加了:
- 同时加载多个模型
- 高斯可以在多个相机上渲染
- 与3D场景的深度混合
安装
硬件要求
- 支持VR的MS Windows电脑
- 最低GPU要求:支持CUDA的GPU,计算能力7.0+(GeForce > 2060):在此查看您的显卡
- 推荐GPU:GeForce > 4070
我们的测试硬件配置
- CPU:Intel Core i7-11700K
- 内存:16GB
- GPU:NVIDIA GeForce RTX 3060 Ti
- 显存:8GB
- Windows 10
如何开始
下载最新版本的VR查看器发布版。
连接您的头戴设备,并将其运行时设置为默认的OpenXR运行时。
启动可执行文件GaussianSplattingVRViewer.exe
,它将在OpenXR环境中启动VR应用程序。
会出现一个菜单,显示您可以加载的模型列表。
加载"default.ply",您应该看到类似这样的画面。
享受VR中的高斯散射体验。
加载其他模型
您可以显示自己的模型。例如,您可以下载原始的预训练模型(14 GB),使用Polycam服务生成模型,或使用参考工具包训练自己的模型。
为此,请复制一个 point_cloud.ply
文件,例如预训练模型压缩包中 models/bicycle/point_cloud/iteration_30000
目录下的文件,放到与 Windows 可执行文件 GaussianSplattingVRViewer.exe
相同的文件夹中,如下图所示。
运行可执行文件 GaussianSplattingVRViewer.exe
,该文件将出现在菜单列表中。你可以放置任意数量的 *.ply
文件。现在,你可以加载 point_cloud.ply 文件,而不是默认的演示模型。
再次享受 VR 中的高斯散射吧!
默认情况下,散射点的渲染分辨率为头显原生分辨率的 50%,以减少性能问题。这就是为什么显示的图像可能会有些像素化。可以在菜单中使用滑块调整渲染分辨率(见下文)。
使用方法
按住 VR 控制器的一个 握把
按钮可以旋转和移动场景。
同时按住两个 握把
按钮可以缩放场景。两个控制器之间会出现一条线,形成一个标尺,帮助你正确缩放模型。
左侧控制器上的 摇杆
可用于在场景中平移。例如,向前推动摇杆可以朝控制器指向的方向飞行。
右侧控制器上的 摇杆
可用于向左、向右或旋转 180°。
左侧控制器上的 菜单
按钮用于显示菜单。在此菜单中,你可以更改渲染分辨率,查看渲染速度和模型的总散射点数。这里你还可以查看可加载模型的列表,并锁定模型以禁用旋转和缩放功能。还有一个退出应用程序的按钮。
另外,也可以按 Esc
或 Q
键退出应用程序。
使用插件或从源代码编译
首先,使用递归子模块克隆整个项目。
git clone git@github.com:clarte53/GaussianSplattingVRViewerUnity.git --recursive
要在 Unity 中使用插件,请参阅 Unity 项目 Readme。提供的预编译 dll 可以立即使用。Unity 项目中还包含了一个 C# 包装器。
或者,也可以从源代码编译 dll。请参阅 插件编译 Readme。
性能
在"自行车"场景示例中,从下图所示的视角渲染 1024x1024 像素,在 NVIDIA GeForce RTX 3060 Ti 上得到以下测量结果:
- 官方 SiBr 查看器 / OpenGL(60° 视场角):12ms(80 FPS)
- Unity / DirectX 11(60° 视场角):15ms(67 FPS)
- Unity / OpenXR(双眼,90° 视场角):38ms(26 FPS)
在 VR 中,由于视场角为 90° 而不是 60°,渲染的散射点更多,并且需要渲染两个 1024x1024 的纹理,每只眼睛一个。
依赖项
本项目使用了Differential Gaussian Rasterization的修改版作为子模块。