简介

论文地址:https://arxiv.org/pdf/2012.03927.pdf

从一组已知但不受约束的照明场景的输入图像中优化了神经反射率和可见度场(NeRV)的3D表示。NeRV表示可以在训练中没有看到的任意光照条件下,从新颖的视角进行渲染。这里,将两个场景的示例输入数据和渲染可视化。每个场景的前两个输出渲染图像来自同一个视点,每个都由不同位置的点光照明,最后一个图像来自不同的视点,在随机彩色照明下。

NeRF只对一个位置的出射光量进行了建模——事实上,这个出射光是入射光和底层表面材料属性之间相互作用的结果,而这个事实被忽略了,论文中NeRV考虑直接反射和one bounce反射,输入是一个3D位置,输出是该输入位置的以下场景属性:体积密度、表面法线、材料参数、到任何方向上的第一个表面交叉点的距离,以及任何方向上的外部环境的可见性


与näıve raymarching相比,NeRV可视化了“神经可见性场”如何减少体积渲染带有直接(上)和一次反弹间接(下)照明的相机射线的计算负担,以及每个解决方案的计算复杂度(n是沿着每条射线的样本数量,`是光源的数量,d是采样的间接照明方向的数量)。黑点表示在某一位置对体积密度的形状(shape)MLP进行评估,红色箭头表示在某一方向上对可见性(visibility)MLP进行评估,蓝色箭头表示在某一方向上某一位置对光线的预期终止深度进行可见性(visibility)MLP评估(可见性(visibility)MLP的输出可见乘数和终止深度以文本形式显示)。通过NeRF的体积表示和näıve raymarching(左)进行弱力轻传输模拟是棘手的。通过在形状(shape)MLP旁优化的神经可见域(右)近似可见性,NeRV能够使复杂照明的优化变得易于处理。

实现流程


(a)给定任何连续的3D位置作为输入,例如青色“x”处的点,NeRV输出体积密度以及:(b)场景周围球形环境地图的能见度,乘以©该点的直接照度,并加上(d)该点的估计间接照度,以确定全部入射照度。然后乘以(e)预测的BRDF,并对所有入射方向进行积分,以确定该点的出射亮度。在下面一行中,可视化了整个渲染图像的这些输出:(f)表面法线,以及(g)漫射反照率和(h)镜面粗糙度的BRDF参数。可以使用预测的能见度来计算在任何位置实际入射的总照度的比例,可视化为(i)阴影图。如果它只被(j)直接和(k)间接照明照亮,也显示相同的渲染视点。

NeRF公式

考虑反射模型,就要对空间的反射参数进行估计。NeRV改写Nerf的公式为

视相关的发射项 Le(x(t), ωo) 被替换为球面S上入射方向的积分,即从任何方向入射的辐亮度 Li 与反射函数 R (在体渲染中通常称为相位函数,这里使用标准microfacet BRDF反射函数)的乘积,R 描述了从方向 ωi 到方向 ωo 的光的数量

NeRF中的辐射场MLP,替换为输出体积密度σ的“形状”(shape)MLP、输出任何输入3D点的BRDF参数(3D漫射反照率a和一维粗糙度γ)的“反射率”(reflectance)MLP: MLPθ: x→σ, MLPψ: x→(a, γ)

Light Transport via Neural Visibility Fields


在场景中使用蛮力采样在一次反弹的间接照明下渲染一条光线将需要千万亿次的计算,而场景需要在训练过程中渲染大约10亿条光线,显然消耗过大,因此用学习近似代替几个蛮力体积密度积分

这里引入“可见性”(visibility)MLP,在任何输入位置沿任何输入方向发出环境照明可见性的近似,以及相应射线的期望终止深度的近似:MLPφ:(x, ω)→(Vφ,Dφ),使用这些mlp近似的数量来代替它们的实际值

将损失放在可见性MLP输出(Vφ,Dφ)上,以鼓励它们类似于(V, D)对应于形状MLP的当前状态

目标渲染公式

这里对公式进行修改,反射亮度Lr(x, ωo)分解为直接和间接光照分量,定义Le(x, ωi)为光源从ωi方向到达点x的亮度,L(x, ωi)是来自方向ωi在x位置的估计入射亮度,入射光Li分解为Le + L(直接光加间接光)

为了计算入射直接照明Le,我们必须考虑(已知)环境图E由于沿入射照明射线的体积密度ωi的衰减:

V表示从点到光源之间的衰减系数,与场景几何相关。E表示光源入射到该点的光度值。可以通过调整E来重新设定光源

使用可见性(visibility)MLP的近似V~φ,而不是通过体积计算V的另一个线积分。由此,对相机光线亮度L(c, ωo)的直接照明分量的完整计算简化为:

在计算由于直接照明导致的像素颜色时,通过近似从相机光线上的每个点到每个环境方向的光线积分,已经将使用直接照明的渲染的复杂性从每条光线的样本数量的二次型降低到线性型

接下来,使用间接照明来加速渲染的计算,对于这一点,使用蛮力方法将与每条光线的样本数量成立方体。论文使用了两个近似来减少这个棘手的计算。首先,用单点评估近似最外面的积分(沿着射线的每一点反射到相机的累积亮度),通过将体积视为位于预期终止深度t ’ = D(c,−ωo)的硬表面。注意,在这里不使用可见性MLP的t '近似,因为已经沿着相机射线采样σ(x)。这减少了L(c, ωo)在单点x(t’)处对球积分的间接贡献:

为了简化L在这个积分内的递归计算,限制了单个反弹的间接贡献,并再次使用硬表面近似来避免沿着每个入射方向的射线计算积分:

其中t " =D~φ(x(t '), ωi)是沿x ’ (t ‘’) = x(t ') + t " ωi的期望交点深度,用可见性MLP近似。因此,由间接照明引起的相机射线辐照度分量L(c, ωo)的表达式为:

在每个次要交点完全展开入射的直接辐亮度Le(x ’ (t ‘’), ω ’ i)得到:

最终结合公式9和13得到最终渲染公式为:

Rendering

为了渲染通过NeRV的摄像机射线x(t) = c−tωo,使用以下步骤估计公式14中的体积渲染积分:

  1. 沿着射线绘制了256个分层样本,并查询了每个点的体积密度、表面法线和BRDF参数的形状和反射率,σ = MLPθ(x(t)), n = ∇xMLPθ(x(t)), (a, γ) = MLPψ(x(t)).
  2. 估计方程9中的积分,用直接光照遮蔽光线上的每个点。首先,通过在围绕每个点的球体上的方向ωi的12 × 24网格上采样已知环境照明来生成E(x(t),−ωi),然后,将其乘以预测可见性V~φ(x(t), ωi)和microfacet BRDF值R(x(t), ωi, ωo)在每个采样ωi,并在球面上对这个乘积进行积分,以产生直接照明贡献
  3. 通过估计方程13中的积分,沿着光线对每个点进行间接照明。首先,使用步骤1中的密度样本计算期望的相机射线终止深度t ’ = D(c,−ωo),然后,在x(t’)处对上半球的128个随机方向进行采样,并查询沿每条射线 t’‘=D~φ(x(t’),ωi) 的期望终端深度的可见性MLP,以计算二次曲面交点 x’(t’‘)= x(t’)+ t’‘ωi。然后按照步骤2的步骤用直接照明遮蔽这些点。这估计了x(t’)处的间接照明入射,然后将其乘以microfacet的BRDF值R(x(t’),ωi, ωo),并在球体上积分以产生间接照明贡献。
  4. 沿着相机射线Lr(x(t) ωo)的每一点的总反射亮度是步骤2和步骤3的量的和。沿着光线合成这些元素,使用与NeRF中使用的相同的求积法则来计算像素颜色:

    其中δ为样品间沿射线的距离。

Training and Implementation Details

没有直接将3D坐标x和方向向量ω传递给MLPs,而是使用NeRF的位置编码来映射这些输入,3D坐标的最大频率为27,3D方向向量的最大频率为24。形状和反射率MLPs每个使用8个全连接的ReLU层,256个通道。可见性MLP使用8个全连接的、每个256个通道的ReLU层将编码后的3D坐标x映射到一个8维特征向量上,该特征向量与编码后的3D方向向量ω连接,由4个全连接的、每个128个通道的ReLU层进行处理。

从头开始为每个场景训练单独的NeRV表示,这需要一组RGB图像和相应的照明环境。在每次训练迭代中,从输入图像中随机抽取一批512像素的射线R,并使用前面描述的过程从当前的NeRV模型中渲染这些像素。此外,在每个训练迭代中对256条相交于体积的随机射线R '进行采样,并计算每个位置和沿每条射线的任意方向的可见性和预期终止深度,用于监督可见性MLP。尽量减少三个损失的总和:

其中τ (x) = x/1+x是一个色调映射算子[13],L®和L®是地面真值和预测相机射线辐射值(地面真值只是输入图像像素的颜色),Vφ®和D~φ®是我们的可见性(visibility)MLP给定其当前权重的预测可见性和期望终止深度,Vθ®和Dθ®是给定其当前权重的形状MLP隐含的可见性和终止深度的估计θ,λ = 20是鼓励可见性MLP与形状MLP一致的损失项的权重

可见性(visibility)MLP不使用任何“地面真实”能见度或终端深度进行监督-它只优化与NeRV的当前场景几何估计一致,通过使用形状(shape)MLPθ发射的密度σ评估方程5和6

效果


29、NeRV: Neural Reflectance and Visibility Fields for Relighting and View Synthesis相关推荐

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

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

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

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

  3. 论文笔记:NeRF: Representing Scenes as Neural Radiance Fields for View Synthesis

    目录 文章摘要 1 Neural Radiance Field Scene Representation (基于神经辐射场的场景表示) 2 Volume Rendering with Radiance ...

  4. 文献翻译阅读-NeRF: Representing Scenes as Neural Radiance Fields for View Synthesis

    目录 信息 简介 相关工作 神经3D表示 视角合成和基于图像的渲染 方法 体渲染技术(用离散形式表示连续积分) 优化神经场的技术 位置编码 分层体积抽样 实施细节 结果 结论 参考 信息 NeRF,即 ...

  5. 读论文12——NeRF:Representing Scenes as Neural Radiance Fields for View Synthesis

    目录 Abstract Introduction Related Work Neural Radiance Field Scene Representation Volume Rendering wi ...

  6. 29、数据结构笔记之二十九数组之硬币抛掷模拟

    29.数据结构笔记之二十九数组之硬币抛掷模拟 "人生是各种不同的变故.循环不已的痛苦和欢乐组成的.那种永远不变的蓝天只存在于心灵中间,向现实的人生去要求未免是奢望.-- 巴尔扎克" ...

  7. NeRF拜读:Representing Scenes as Neural Radiance Fields for View Synthesis

    神经辐射场 非显式地将一个复杂的静态场景用神经网络来建模.训练完成后,可以从任意视角渲染出清晰的场景图片. 过程 大量已知相机参数的图片作为输入 通过输入训练MLP神经网络,隐式地学习静态3D场景 利 ...

  8. 【MAPBOX基础功能】29、mapbox地图基础工具 - 获取当前地图层级

    前言 官网指引,生成accesstoken,下载相关依赖请翻阅[https://blog.csdn.net/weixin_44402694/article/details/125414381?spm= ...

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

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

  10. Block-NeRF: Scalable Large Scene Neural View Synthesis 可扩展的大场景神经视图合成

    目录 Block-NeRF: Scalable Large Scene Neural View Synthesis 可扩展的大场景神经视图合成 Abstract 1. Introduction 2. ...

最新文章

  1. 程序是一座城,八年来我深陷其中
  2. canvas画柱状图 和饼图
  3. YII2 随笔 视图最佳实践
  4. php 异常 重试,Python中异常重试的解决方案详解
  5. bash 别名_Linux的10个方便的Bash别名
  6. Project 'king.commons' is missing required library: 'lib/plweb.jar' Build path Build Path Problem
  7. 关于VC中的时间函数讨论
  8. 谷歌正式推出在线云储存服务Google Drive
  9. python中bytes用法_Python中BytesIO的使用场景,什么时间应该使用BytesIO?
  10. CentOs上docker安装nginx、tomcat、redis
  11. Python数据可视化交互基本
  12. 【TWVRP】粒子群算法求解带时间窗的车辆路径规划问题(总成本最低)【含Matlab源码 2590期】
  13. 第四章、Tibbo Basic
  14. Linux命令zip:压缩文件夹时,排除指定文件或文件夹
  15. TiDB数据库schema设计之表结构设计
  16. Python版股市情感分析源代码,提取投资者情绪,为决策提供参考
  17. c语言初级小游戏 · 闯关小鸟 | 激发你的编程兴趣(115行左右代码)
  18. 英雄联盟 无法服务器未响应,Win7英雄联盟登陆服务器未响应的解决方法
  19. 000.塔木德 Talmud
  20. 计算机专业岗位竞聘词,2017年计算机专业组长竞聘演讲稿(3000字)

热门文章

  1. 面试复盘系列:从象棋提升之道趣说面试提升之法
  2. CSS学习18:CSS选择器二
  3. 是什么限制了你的成功?
  4. Linux学习笔记(1)--Linux的发展史
  5. dellt130服务器做系统,戴尔Dell R330;T130安装系统后键盘鼠标不能使用
  6. 德鲁克《管理的实践》读后感-总结
  7. 2015阿里巴巴校招网上笔试
  8. cubieboard mysql_Cubieboard开发笔记
  9. python colormap_Python matplotlib的使用并自定义colormap的方法
  10. matlab中eval函数作用6,Matlab中eval函数的使用方法