【ti example 投稿】Taichi 实现 Instant NGP (NeRF) 的渲染器

Taichi 实现 Instant NGP 的渲染

Instant NGP 是加速 NeRF 训练和渲染的新方法 (SIGGRAPH 2022)

本项目的主要内容:

  1. 实现了 Instant NGP 的 forward 部分,并且可以实时渲染交互,只需要1GB的显存
  2. 通过 SharedArray 实现了简单的 Fully Fused MLP
  3. 目前提供了 8 个预训练的 Blender 渲染场景

目前因为 shared memory 在 CUDA 后端有 48KB 的限制,所以本项目的 Fully Fused MLP 并不完整,后续 Taichi 实现分配更大的 shared memory 后可以提速

仓库链接 https://github.com/Linyou/taichi-ngp-renderer

GUI 界面可以实现相机的交互、深度图可视化以及控制每条光线的采样数



预训练的渲染场景



具体使用方法请到 repo 中查看

8 Likes

:grinning: 很棒的投稿哦~ 就是图有点小,可以再编辑下~~

很精彩同样也是很辛苦的工作!有几个点:

  1. 在不加 --gui 参数的时候程序似乎会报错:
line 625, in render_frame
    samples, N_alive, N_samples = self.render(max_samples=100, T_threshold=1e-4)
TypeError: NGP_fw.render() missing 2 required positional arguments: 'dist_to_focus' and 'len_dis'

  1. f16 <= f32 这个 warning 有点多,可以处理一下。

  2. shared memory 不支持 x64 架构,这个可否开头加一个检查,如果架构不符合则直接报错?

1 Like

Shared memory确实不支持x64,回头我们加上!

这个有点强… 围观一下 :rofl:

新代码已经 push 了 :grinning:

  1. 因为增加了 Depth of Field,还没有来得及更新单张图片的渲染
  2. f16 ← f32 缓解了大部分
  3. 我先直接用 ti.init(enable_fallback=False) ,因为目前除了 cuda 其他 backend 都没有跑起来 :smiling_face_with_tear:
3 Likes

来更新一下:

  1. 之前写的 MLP 做了太多的同步,导致性能和 tiny-cuda-nn 差的有点多,新的代码目前渲染的速度已经超过原版的速度了,同等设置下 Taichi 有65 fps,对比使用 Pytorch 的 Binding (可以保证数据在GPU上) tiny-cuda-nn 只有45 fps

2. 目前可以在三个平台上正常运行了,Windos 和 Linux 可以使用 CUDA 和 Vulkan,MacOS 可以使用 Vulkan
5 Likes

林同学,可以麻烦你去 taichi 的 repo 开个 PR 提交这个作品不?对 resource images 的处理可以参考这里:

2 Likes

不好意思,没有及时回复消息,目前已经提交PR :sunglasses:

2 Likes

太赞了。我们 review 的同学还需要确认一下某些机器不能跑的原因,以及是不是需要就此明确给出提示。

1 Like