贾浩楠 发自 凹非寺
量子位 报道 | 公众号 QbitAI
2D变3D,还不用建模,今年谷歌用NeRF做到了以假乱真的程度:
感觉就像是视频里截出来的是不是?神经网络只需要几张静态照片就能生成这样的结果。
但,总感觉离真实的场景还差点什么?
没错,缺的就是光影变换效果,NeRF只高度还原了空间,没有给人时间上的直观感受:
上面的结果,同样是用几张2D照片作为输入,但有实时光影效果的生成结果,更加逼真生动,让人有些“斗转星移”的错觉。
这项让2D照片变“4D”的研究,是谷歌团队联合MIT、UC伯克利对之前的NeRF做出的重要改进,称为NeRV,即用于照明渲染和视图合成的神经反射场和可见光场。
下面我们尝试用最简洁易懂的方式介绍NeRV,除了最关键重要的推导,尽量少做数学推理,让你一文看懂。
谷歌“升维”打击
光影变幻给了我们对于场景直观的时间感受,而研究团队实现这个效果的方法,就是在原先的NeRF上,添加了光模拟过程。
在NeRF中,没有将场景建模为吸收和发射光的连续的3D粒子场,而是将场景表示为吸收和反射外部光源定向粒子3D场。
这样的模型模拟光传输是低效的,并且无法扩展到全局照明的场景。
研究人员引入神经能见度场参数来弥补这一点,它允许有效查询模拟光传输所需的光线和像素点之间的能见度。
具体来说,NeRV网络还原4D效果有3步,分别对应着3D场景生成、光影效果模拟、渲染。
神经反射场
NeRF并没有将入射光线的效果与表面的材料属性分开。
这意味着NeRF只能在输入图像中呈现的固定光照条件下呈现场景的视图。
修改NeRF以实现动态光照是很直接的:将场景表示为反射入射光的粒子场。
给定一个任意的光照条件,就可以用一个标准的体积渲染积分来模拟光在粒子反射时在场景中的传输:
其中,方程(1)中的视图相关发射项Le(x, ωo)被替换为物体表面S上,光射入方向的积分,即来自任何方向的进光辐射度Li和反射函数 R的乘积,它描述了从某一个方向ωi入射的光有多少被反射到方向ωo。
神经可视场的光传输
虽然修改NeRF实现一定程度的光照效果是很直接的,但对于像NeRF这样的连续体积表示法,一般照明场景的体积渲染积分,在计算上是有难度的。
上图直观地展示了模拟光照场景的缩放特性,这使得模拟体积光传输特别困难。
即使只考虑从光源到场景点的直接照明,对于超过单点光源的情况下,暴力计算的方案也很吃力,因为它需要沿着从每个场景点到每个光源的路径,反复查询形状MLP的体积密度。
暴力采样渲染一束间接照明下的单条光线将需要一个petaflop的计算量,而训练过程中渲染大约十亿条光线。
所以团队通过用学习的近似值替换几个体积密度积分来改善这个问题:引入一个 “能见度 “多层神经网络,它可以对任意输入方向的照明能见度给出近似值,以及相应光线的预期终止深度的近似值。
这种方法,大大降低将直接照明和间接照明的计算复杂度,使得在优化连续照明场景表示的训练循环中,可以同时模拟直接照明和其反弹的间接照明。
渲染
假设现在有一条通过NeRV的相机射线x(t)=c tωo,使用以下过程来渲染:
1) 沿射线绘制256个分层样本,并查询每个点的体积密度、表面法线和BRDF(双向反射分布函数)参数的形状和反射神经网络。
2)沿射线对每个点进行直接照明的遮挡。
3) 用间接照明对射线沿线的每个点进行遮挡。
4) 沿着摄影机光线的每个点的总反射辐射度 Lr(x(t), ωo)是步骤 2 和步骤 3 的数量之和。将这些沿射线复合起来,用同样的正交规则计算像素颜色。
通俗的说,就是对一条入射光线在整个场景所有像素点上的反射情况分别计算,然后整合起来。
测试结果
在最后的测试结果上,NeRV的表现远远超过了NeRF和NLT:
团队分别在不同的数据集上训练模型,然后对雕像、推土机、热狗三个图像进行还原。
从结果中可以看出,峰值信噪比(PSNR)、MS-SSIM(多尺度结构比)损失函数这两个指标,普遍优于之前的方法。
对于个人视频制作者、游戏开发人员,以及缺乏3D建模经验的动画公司来说,这类技术的成熟,可谓“福音”。
通过AI技术,让3D效果的实现进一步简化,这也是Facebook、Adobe及微软等公司纷纷投入这方面研究的原因所在。
最后,研究人员透露,这个算法即将开源.
这是最近最酷的3D图片方面的突破了。
如果你有更酷的,也欢迎留言分享~~