论文链接

视频链接

这是 Thomas Müller 等人在 SIGGRAPH 2021 上发表的。论文写的有点 pedantic,没有看懂,但是看了视频就懂了。

Radiance Caching

Radiance Caching 是个老算法了。主要就是把一个点辐射出的 Radiance 编码成 Spherical Harmonics,然后在实时渲染中帮助做 shading。可以作为 precomputation 算法,也可以用来加速实时光追。

Pre-convolved Radiance Caching 这篇文章里写的很清楚了:Radiance Caching (Middle row, Right) projects incoming radiance into the SH basis, for every pixel converts the BRDF into SH and
performs a dot-product between two dense vectors per pixel.

Neural Radiance Caching

首先是 Radiance Caching 在实时光追中的应用。我们知道,离线渲染的时候,一条 Ray 可以 bounce 多次,如 64;而实时光追中,往往只能 bounce 一次。或者说,离线渲染里的 path 是很长的,实时光追里的 path 是很短的。

那如果说一条光线已经完成 bounce 了,但没有 hit 到 light source 或者 skybox,没法计算能量,那就只能抛弃了,这就导致渲染图上的黑像素。当然,使用一些重要性采样算法,比如 Bitterli 的 ReSTIR 可以很好地改善:

但如果有 Radiance Cache 的加持的话,那些没有得到能量的 ray,可以直接查找最后一次交点在 Radiance Cache 上的值,就知道能量是多少了。因此 Radiance Cache 可以改善实时光追质量。

这篇文章非常 NB 地用神经网络来存储 Radiance Cache,而不是用球谐函数,就是说训练了一个黑箱 NNN,可以方便地得到点 x\mathbf{x}x 处的 Radiance LsL_sLs​:

Ls=N(x,normal,albedo,depth)L_s = N(\mathbf{x}, \mathbf{normal}, albedo, depth)Ls​=N(x,normal,albedo,depth)

也可以视作训练了一个神经网络,输入 G-buffers,输出 shading result。

最 NB 的是,这个网络是不需要预训练的,而是在渲染过程中实时地训练,文章中叫 Online Training。

效果是非常棒的,而且神经网络用了 8 层各 64 各神经元的全连接网络,开销却只有 2.6ms。

那么如何训练这个网络呢?实际上渲染每帧的时候做了两件事:

  1. 渲染阶段。先正常地做实时光追渲染,用上 Radiance Cache,同时也可以用上 ReSTIR 等等的 trick
  2. 训练阶段。挑出一小部分渲染阶段中的 ray,经过一点小处理变成训练集。具体可以看这张 slide:

这里假设渲染用到了三条 ray(三条橙色线),我们只取其中最下面那一条 ray(实际上选取比例远小于三分之一)作为训练集。之后把所有用作训练集的 ray 延长一小段,也就是比之前增加几次 bounce。论文中管增加的这一段叫 training suffix。

看图。图中橙色的线段就是第一阶段已经 trace 过的 path,蓝色阶段就是训练阶段增加的 path,也就是 training suffix

我们利用末端的那个新交点(图中粉色箭头处)查找 Radiance Cache,得到了一个 Radiance 值。我们再把这个 Radiance 值沿着光路反向传递回去,按照 path tracing 的算法计算出之前的三个 bounce 点处的能量值,就可以得到三个 training data,也就是图中的白圈 / 蓝色箭头。它们就是三个标签数据!

也就是说通过把光线多 bounce 几次,再做一遍 Radiance Cache,就可以把每个 bounce 点计算的能量值当作标签来使用了。

而把之前的三个 bounce 点的位置和 G-buffers 输入 Radiance Cache,查找出来的三个 Radiance 相当于神经网络的推理结果,现在又有了标签,那么就可以训练了!

作者提到整个训练过程很不稳定,导致输出图像不停地闪烁。于是他们还对神经网络的 weight 做了 temporal filtering,使用指数移动平均:

Wˉt:=1−αηt⋅Wt+α⋅ηt−1⋅Wˉt−1\bar{W}_{t}:=\frac{1-\alpha}{\eta_{t}} \cdot W_{t}+\alpha \cdot \eta_{t-1} \cdot \bar{W}_{t-1}Wˉt​:=ηt​1−α​⋅Wt​+α⋅ηt−1​⋅Wˉt−1​, where ηt:=1−αt\eta_{t}:=1-\alpha^{t}ηt​:=1−αt

具体可以看论文的 3.3 节。

很难想象这样的训练方法可以让网络收敛,可实验出来的结果是非常优秀的,感觉比 path tracing + denoising 要好。

Fully Fused Neural Networks

本文还大大加速了神经网络,使其能够用于实时渲染。具体可以看:https://github.com/NVlabs/tiny-cuda-nn

Neural Radiance Caching相关推荐

  1. 【CVPR 2022】Deblur-NeRF: Neural Radiance Fields from Blurry Images

    Deblur-NeRF: Neural Radiance Fields from Blurry Images 论文简介: 论文介绍: 具体实现: 基本概念 实现细节 Deformable Sparse ...

  2. NeRF论文解析 - Neural Radiance Field

    摘要 NeRF 的基本思想是用神经网络作为一个 3D 场景的隐式表达,代替传统的点云.网格.体素.TSDF 等方式,同时通过这样的网络可以直接渲染任意角度任意位置的投影图像. 其主要工作如下: 1)提 ...

  3. 火爆科研圈的三维重建技术:Neural radiance fields (NeRF)

    如果说最近两年最火的三维重建技术是什么,相信NeRF[1]是一个绝对绕不过去的名字.这项强到逆天的技术,一经提出,就被众多研究者所重视,对该技术进行深入研究并提出改进已经成为一个热点.仅仅过了不到两年 ...

  4. 【CVPR 2021】pixelNeRF: Neural Radiance Fields from One or Few Images

    pixelNeRF: Neural Radiance Fields from One or Few Images 论文简介: 论文介绍: Image-conditioned NeRF: Single- ...

  5. [CVPR2021]pixelNeRF: Neural Radiance Fields from One or Few Images

    标题:pixelNeRF: Neural Radiance Fields from One or Few Images 链接:https://arxiv.org/pdf/2012.02190 本文是针 ...

  6. [非卷积5D中文翻译及学习笔记] 神经辐射场 NeRF: Representing Scenes as Neural Radiance Fields for View Synthesis

    不使用3D建模,使用静态图片进行训练,用(非卷积)深度网络表示场景的5D连续体表示,再通过ray marching进行渲染. 本中文翻译使用"机器学习+人工校准/注解"的方式完成. ...

  7. 一文搞懂 神经辐射场(Neural Radiance Fields,NeRF)

    NeRF 简介 输入输出 优缺点 原理 结构 pytorch实现 第三方库进行 NeRF 的实现 自行实现 相关名词解释 辐射场 多层感知机(MLP) 点的密度 体积渲染 体积纹理 渲染方程 简介 神 ...

  8. 【论文笔记 - NeRFs - ECCV2020】NeRF: Representing Scenes as Neural Radiance Fields for View Synthesis

    NeRF: Representing Scenes as Neural Radiance Fields for View Synthesis 0背景介绍 用神经辐射场来表征场景,用于新视角图像生成任务 ...

  9. 【论文阅读】NeRF: Representing Scenesas Neural Radiance Fieldsfor View Synthesis

    NeRF是一篇发表在ECCV 2020的一篇文章,并获得了当年Best Paper称号.该技术一经提出就惊艳了众人,NeRF目前也是计算机视觉领域一个非常有趣并且火热开展的研究方向.博主本人后续的研究 ...

最新文章

  1. mail 发送email
  2. 扎克伯格成美国科技巨头里最后一位在任创始人CEO
  3. python django mysql安装_Django+Nginx+uWSGI+Mysql搭建Python Web服务器
  4. 了解这些电源知识能提高机房供电可靠性
  5. SQL语句:建表语句、插入语句、查询语句、增加列、删除列、查询语句like、修改语句
  6. Windows 下的批处理脚本基础——网络相关命令(用户操作命令、用户组操作命令)
  7. 应用机器学习视频教程,哥伦比亚大学 2020版
  8. QT之Tcp数据发送测试工具
  9. 晒晒自己写的C++小程序(初学,书上的题目)
  10. CSDN中用Markdown如何给文本加下划线(可延长下划线)
  11. 手写SSH2服务器连接池
  12. 差分数组(简单易懂)
  13. pinned memory or page locked memory)
  14. tftp linux 配置管理
  15. 一张图看懂自动驾驶的分级
  16. CString查找子字符串
  17. HttpWebRequest 介绍
  18. 产品经理应该如何学习
  19. 归并排序 (递归+非递归)
  20. 腾讯云优惠券-腾讯云优惠券领取

热门文章

  1. 香港科技大学(广州)刘浩老师招收数据挖掘方向全奖博士/硕士
  2. 第三次博客园作业---刘浩
  3. 英语专栏——Blog
  4. 用数据“窥探”苏州英语教师的市场情报
  5. 基于信号指纹的多旋翼无人机遥控端个体识别研究(1)
  6. C++中的exit函数
  7. 微信小程序—人脸识别
  8. cacls DOS文件提权
  9. java知识分享篇一
  10. 阿里研究院副院长谭崇钧莅临红谷滩区·高通中国·影创联合创新中心调研交流