NeRF学习笔记(三):基于NeRF的三维内容生成
Why NeRF Succeeded
Why 3D content creation from images
What are 3D contents
3D内容是形状和外观模型的组合,可以从不同的视点渲染为2D图像。
Rendering and inverse rendering
计算机图形学主要是假设我们有了这些3D内容,即形状、材质和光照,我们如何设计更高效和高质量的渲染操作来生成图片。
从计算机视觉的角度来说的话,我们给定了一堆图片,可以是从真实世界中拍摄的图片,也可以是渲染出来的图片,通过反渲染的操作去生成这些3D内容。
下文主要讨论的是Inverse Rendering技术。
3 key factors in inverse rendering
What shape representations to use?
这部分可以参考几何的隐式表示与显示表示。
在Inverse Rendering中,非常关键的就是选择合适的形状表征方式,不同的方式有不同的优化特点,会影响我们反渲染的难度。
What appearance representations to use?
第一种方法,上面的材质纹理贴图是把3D的形状展开成2D的平面,在每个图片上存储对应3D点的性质,比如世界地图就是2D平面上表示了3D的地球;下面的环境光可以用下面这样的全景图来记录。根据材质纹理贴图和环境光就可以渲染
第二种方法叫做Radiance field(辐射场),早期的时候叫做surface light field(2000年的文章)。 他的定义比较简单,物体中的每个点,从不同的角度看会有不同的内容(颜色)。
两种方法的对比:
- 左边这种方法将材料和光照分开了,而右边没有给材料和光照分开处理。
- 左边的方法是非常理想的,很容易编辑材质或者更换光照,但同时又是非常难解决的。
- 右边这种方法非常简单,但是很难去编辑,很难把物体放到新的环境去观察它的外观,因为新的环境光照会变化很多,导致物体的外观也变化了。
What rendering operator to use?
Why NeRF is a big thing
Break NeRF into 3 components
Shape:NeRF使用Soft opacity field表示形状,这种方式非常soft,类似于把物体表示成一种雾。
Appearance:NeRF使用Radiance field表示。
Randering:NeRF渲染的过程中,会在同一条ray上sample很多点,再把这些点结合起来,得到最后这条ray的颜色。(讲座的录屏里面有视频介绍)
Take-home messages from NeRF
soft shape
NeRF初始化的时候,类似于虚空的状态,什么也没有,然后在优化的过程中,image loss会在需要的位置生成需要的三维模型。
与hard geometry相比较:
- 不需要object segmentation mask,不会面临genus的问题。对于hard geometry,如果initial shape是一个球,没有object segmentation mask的话,需要把它变成圆环是一个非常困难的操作。
- 没有boundary discontinuity,容易做differentiable rendering。
- 渲染的代价很大,比如之前一条ray的颜色是一条ray上很多点的颜色结合起来的,而hard geometry里面只需要找到相机的ray与表面的交点即可渲染。
- 对于soft shape,目前还没有非常好的工具去编辑它。
soft shape相关的新工作:
Fourier features fixes the spectral bias of MLPs
这里讲座讲的东西没太听懂,有几个英文单词没听过,,,
不过这个部分NeRF论文里面讲了,就是通过高维变换让MLP可以学习高频函数
neural fields for inverse rendering
Compact:neural fields指的是用神经网络表示信号,这种表征方式特别袖珍。比如每隔NeRF的内容只有10MB
Continuous:这种表示方式他的场景没有被discretized,因为它是连续的,可以表示更加高质量的信号
Flexible and easy for optimization:这个神经网络本身有一些非常平滑的表示方式,所以很好优化。
NeRF++
从这里开始介绍自己的工作了,NeRF++扩展了NeRF到360 capture of unbounded scenes,解决的是NeRF只能够对没有背景的物体进行建模的问题,实现了既能够重建前景,也能够重建背景。
5 Capture scenarios
- 360 Inward-facing:物体在中间,相机绕着物体拍。对于NeRF,这种情况没有背景,背景是白色的,但这种情况相对于真实情况是很困难的。
- Forward-facing:相机在一个很小的范围内运动,相机基本朝着一个方向,NeRF很擅长这种场景。
- 360 Outward-facing:类似于拍摄全景图。
- Unconstrained 360 Outward-facing:类似于360 Outward-facing,但分布更加不规则
- 360 capture of unbounded scenes:360 Inward-facing与360 Outward-facing的结合,更贴合实际的情况,去拍摄一个实际的物体,既能够拍摄到处于中央的物体,也会拍摄到背景图。
Core idea
Separate foreground/background
NeRF有一种很好的compositional性质,它的一条ray上面sample了很多的点最后再把这些点结合起来得到ray的颜色,这些点在结合的过程中就可以被分成前景和背景。
Symmetry between 360 inward-facing and 360 outward-facing captures
上面还没有解决resolution问题,因为背景很大,ray可能会延申到很远。
可以画一个球,把场景包围起来,也可以画一个球把相机包围起来,如下图所示。从这里可以看出360 inward-facing 和 360 outward-facing是有对称关系的。
可以通过映射的方式,把outward-facing capture这个非常大的场景map成一个Bounded unit cube。
下面这个球里面,离中心越远的地方,在cube中就更密,而距离中心更近的地方,在cube中更稀疏。
如下图所示,对于前景,它的空间没有受到任何的挤压,而对于外面的背景,通过上面的Inverted sphere parametrization方式,映射到了Bounded unit cube里面,空间会受到挤压。
这样,Foreground和Background都定义在一个unit cube中,就可以用普通的NeRF去model它了。(NeRF就是compositional的,很容易得到结果)
NeRF++ vs NeRF
- NeRF faces resolution issue for 360 captures of unbounded scenes
- NeRF++ separates foreground/background modelling, as NeRF is compositional
- NeRF++ uses inverted sphere parametrization to establish symmetry between 360 inward-facing and 360 outward-facing captures
Future works
Questions
Q:三维重建与反渲染的关系?
A:三维重建广义上也可以说是反渲染,他可以说是反渲染的特例。三维重建更注重shape,没有特别关注Appearance的部分。
Q:如何理解辐射场?
A:TODO
Q:为什么NeRF只用没有空间信息的MLP?
A:TODO