samuelm2/svraster-webgl

基于 WebGL 的查看器,用于可视化来自 Nvidia Sparse Voxels Rasterization paper 的稀疏体素场景。 此查看器提供了一种交互式方式,可以通过 web 探索和可视化体素辐射场。 您可以在 vid2scene.com/voxel 试用该查看器。 渲染效果与参考 CUDA 实现不完全相同,但非常相似。

功能特性

如何运行

前置条件

在运行项目之前,您需要安装 Node.js 和 NPM(Node Package Manager):

  1. 安装 Node.js 和 NPM:
  2. 验证安装:
node --version
npm --version

运行项目

要在本地运行此项目:

  1. 克隆仓库:
git clone https://github.com/samuelm2/svraster-webgl.git
cd svraster-webgl
  1. 安装依赖:
npm install
  1. 启动开发服务器:
npm run dev

这将启动 Vite 开发服务器,通常位于 http://localhost:5173

实现和性能说明

您可以通过 URL 参数 ?samples=X 调整片段着色器中每条射线的密度采样数。 默认值为 3,但可以通过降低此值来获得相当不错的性能提升,但代价是渲染精度略有降低。

URL 参数

查看器支持一些 URL 参数来自定义其行为:

如何生成自己的场景

如果您有自己的 SVRaster 场景,并且想在此 WebGL 查看器中进行可视化,可以使用此 SVRaster 的 fork 版本,该版本支持 PLY 导出:

  1. 克隆 forked SVRaster 仓库: github.com/samuelm2/svraster
  2. 使用 SH 1 阶运行 SVRaster,以创建一个与此查看器兼容的模型:
python train.py --source_path /PATH/TO/COLMAP/SFM/DIR --model_path outputs/pumpkin/ --sh_degree 1 --sh_degree_init 1 --subdivide_max_num 600000

PLY 文件将自动保存在您的 outputs model_path 目录中。

  1. 对于先前训练的现有 SVRaster 模型,可以使用 convert_to_ply.py 脚本:
python convert_to_ply.py outputs/pumpkin/ outputs/pumpkin/pumpkin.ply
  1. 打开 WebGL 查看器,并使用 URL 参数或文件上传 UI(或修改代码本身)加载您的自定义 PLY 文件

注意:此过程生成的 PLY 文件非常未优化且未压缩,因此它们可能会很快变得非常大。 我通常使用上面的 subdivide_max_num 标志将体素数量保持在 60 万到 100 万的范围内。

其他说明

这个项目大量使用了 AI 辅助(“vibe coded”)。 我想看看它在图形相关的事情上会怎么样。 我的一些简要想法:它对于样板代码(定义/绑定缓冲区、uniforms 等)非常有用。 我能够在几个小时内获得简单的渲染。 但是,在解决更难的图形错误时,好处要小得多。 有很多次它会朝着完全错误的方向发展,我不得不手动重写部分内容。 但总的来说,我认为对于像这样的较小项目来说,这绝对是一个净收益。 在更复杂的图形引擎/生产环境中,目前的好处可能不太明显。 我对其他人的想法很感兴趣。