Neural Radiance Caching
论文链接
视频链接
这是 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。
那么如何训练这个网络呢?实际上渲染每帧的时候做了两件事:
- 渲染阶段。先正常地做实时光追渲染,用上 Radiance Cache,同时也可以用上 ReSTIR 等等的 trick
- 训练阶段。挑出一小部分渲染阶段中的 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:=ηt1−α⋅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相关推荐
- 【CVPR 2022】Deblur-NeRF: Neural Radiance Fields from Blurry Images
Deblur-NeRF: Neural Radiance Fields from Blurry Images 论文简介: 论文介绍: 具体实现: 基本概念 实现细节 Deformable Sparse ...
- NeRF论文解析 - Neural Radiance Field
摘要 NeRF 的基本思想是用神经网络作为一个 3D 场景的隐式表达,代替传统的点云.网格.体素.TSDF 等方式,同时通过这样的网络可以直接渲染任意角度任意位置的投影图像. 其主要工作如下: 1)提 ...
- 火爆科研圈的三维重建技术:Neural radiance fields (NeRF)
如果说最近两年最火的三维重建技术是什么,相信NeRF[1]是一个绝对绕不过去的名字.这项强到逆天的技术,一经提出,就被众多研究者所重视,对该技术进行深入研究并提出改进已经成为一个热点.仅仅过了不到两年 ...
- 【CVPR 2021】pixelNeRF: Neural Radiance Fields from One or Few Images
pixelNeRF: Neural Radiance Fields from One or Few Images 论文简介: 论文介绍: Image-conditioned NeRF: Single- ...
- [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 本文是针 ...
- [非卷积5D中文翻译及学习笔记] 神经辐射场 NeRF: Representing Scenes as Neural Radiance Fields for View Synthesis
不使用3D建模,使用静态图片进行训练,用(非卷积)深度网络表示场景的5D连续体表示,再通过ray marching进行渲染. 本中文翻译使用"机器学习+人工校准/注解"的方式完成. ...
- 一文搞懂 神经辐射场(Neural Radiance Fields,NeRF)
NeRF 简介 输入输出 优缺点 原理 结构 pytorch实现 第三方库进行 NeRF 的实现 自行实现 相关名词解释 辐射场 多层感知机(MLP) 点的密度 体积渲染 体积纹理 渲染方程 简介 神 ...
- 【论文笔记 - NeRFs - ECCV2020】NeRF: Representing Scenes as Neural Radiance Fields for View Synthesis
NeRF: Representing Scenes as Neural Radiance Fields for View Synthesis 0背景介绍 用神经辐射场来表征场景,用于新视角图像生成任务 ...
- 【论文阅读】NeRF: Representing Scenesas Neural Radiance Fieldsfor View Synthesis
NeRF是一篇发表在ECCV 2020的一篇文章,并获得了当年Best Paper称号.该技术一经提出就惊艳了众人,NeRF目前也是计算机视觉领域一个非常有趣并且火热开展的研究方向.博主本人后续的研究 ...
最新文章
- mail 发送email
- 扎克伯格成美国科技巨头里最后一位在任创始人CEO
- python django mysql安装_Django+Nginx+uWSGI+Mysql搭建Python Web服务器
- 了解这些电源知识能提高机房供电可靠性
- SQL语句:建表语句、插入语句、查询语句、增加列、删除列、查询语句like、修改语句
- Windows 下的批处理脚本基础——网络相关命令(用户操作命令、用户组操作命令)
- 应用机器学习视频教程,哥伦比亚大学 2020版
- QT之Tcp数据发送测试工具
- 晒晒自己写的C++小程序(初学,书上的题目)
- CSDN中用Markdown如何给文本加下划线(可延长下划线)
- 手写SSH2服务器连接池
- 差分数组(简单易懂)
- pinned memory or page locked memory)
- tftp linux 配置管理
- 一张图看懂自动驾驶的分级
- CString查找子字符串
- HttpWebRequest 介绍
- 产品经理应该如何学习
- 归并排序 (递归+非递归)
- 腾讯云优惠券-腾讯云优惠券领取