Light Field / Lumigraph 光场
📃

Light Field / Lumigraph 光场

Tags
GAMES101
Published
May 11, 2022
Author
 
首先从我们看这个世界是什么说起。
我们坐在屋子里,看着树,能看到下图右的图像。
notion image
notion image
如果我们把一个房间中间加一块幕布,幕布能严格模拟之前看到的光线,显示的之前的图像。那么我们坐在原地看着幕布,是体会不到和真实世界有区别的,就好像是之前坐在椅子上看窗户一样。
💡
这就是虚拟现实的原理。如果把所有的信息都记录在一个平面上,考虑平面任意一个点往任意一个方向发出的光,并把这些信息都记录起来,被人能看到,这个与人看真是场景是一样的。

The Plenoptic Function(全光函数)

全光函数,我们可以描述人可以看到什么东西。
notion image
Q: What is the set of all things that we can ever see? A: The Plenoptic Function (Adelson & Bergen) 全光函数就是我们所能看到的所有东西。
 
Let's start with a stationary person and try to parameterize everything that he can see...

Grayscale snapshot

notion image
假设我站在场景里面,位置固定,可以往四面八方去看,我可以定义看的方向,用极坐标 来表示,我们可以定义一个函数,往任意方向看,可以看到一个什么样的值,其最后的结果是一个数。
is intensity of light
  • Seen from a single view point
  • At a single time
  • Averaged over the wavelengths of the visible spectrum (can also do P(x,y), but spherical coordinate are nicer)

Color snapshot

notion image
我们可以将这个函数改进一点,引入波长的概念,波长就是引入了不同的颜色。有颜色就是因为光有各种不同的波长,如果我将每一个能看到的波长对应的光都记录下来,就能看到一个彩色的世界。
is intensity of light
  • Seen from a single view point
  • At a single time
  • As a function of wavelength

A movie

notion image
我们再扩展一个时间 t,这就是电影,不同的时间显示的东西不一样。
is intensity of light
  • Seen from a single view point
  • Over time
  • As a function of wavelength

Holographic movie

notion image
前面人的位置是固定的,现在考虑人的位置、摄像机的位置可以在三维中任意位置移动,这样我们看到的就是全息电影。
is intensity of light
  • Seen from ANY viewpoint
  • Over time
  • As a function of wavelength

The Plenoptic Function

还可以再改进一步。我们把函数不当作电影来看,理解成任何位置,往任何方向看,在任何时间,看到不同颜色,这就是典型的我们能看到的所有东西。也就是说我们的世界是一个七个维度的函数。
  • Can reconstruct every possible view, at every moment, from every position, at every wavelength
  • Contains every photograph, every movie, everything that anyone has ever seen! it completely captures our visual reality! Not bad for a function...

Sampling Plenoptic Function (top view)

光场的概念就是从这里开始的。
notion image
上图就是一个简单的情况,所有点都在二维情况下,方向都是一维的。这样我们能从全光函数提取一部分信息出来,用来表示更复杂的光。
我们平常在一个点,往任意一个方向看,记录的光的信息是什么?就是来自各个方向的光的信息。光场就是相当于记录多一点的信息,是全光函数的一个小部分。

Ray

定义光场之前,先来定义光线,
Let's not worry about time and color:
notion image
我们发现前面定义一个光线需要一个起点和方向。
光还有其他的定义的方式,例如取光线任意两个点和方向(负的或者正的)也能定义光线。
notion image
因此我们想要定义光线,只需要二维的位置和二维的方向。

Only need plenoptic surface

notion image
对于任意一个物体,这个物体可以放在某个盒子里面,可以认为是个包围盒。如果我想定义它的表面,我看向这个物体,无非是从任何位置,任何方向来看。
反过来,根据光路的可逆性,如果我想要描述这个物体所能被看到的所有情况,只要把这个物体在包围盒上任何一个位置往任何一个方向过去的光线都能描述清楚,我就能得到我从任何一个位置看向物体的长的样子。
因为从任何一个位置看向任何一个物体,就相当于包围盒上有个点,观测位置也有个点,这样能确定光线和方向。我们知道包围盒上的位置和其方向,就能查询我们记录的函数。
这个函数记录了物体的表面不同的点不同的位置,往各个不同的方向的发光情况。如果我们把这个信息记录下来,这就是我们要的光场
光场就是任何一个位置,往任何一个方向去的光的强度。
光场是全光函数的一个小部分,只是二维的位置和二维的方向。
 
三维世界中,三维物体的表面其实在二维的空间中。可以理解为纹理映射用两个数就能表示 uv,任何一个位置。方向也是,任何一个空间中的方向都能用 来表示,也就是两个数表示方向,两个数表示位置,这就是光场。
 
notion image
光场的好处:我从任意一个地方都可以看向一个物体,看到物体就能找到往各个点看的方向,各个方向就能从四维的光场查询到之前的值,也就是光的强度。也就是从任意位置向任意方向看,我都知道能看到什么。
 
notion image
notion image
光场定义在物体表面,前面说把一个物体放在一个盒子里面,我们不需要知道物体是什么,只需要盒子上任何一个点往任何一个方向记录下来即可。也就是说,我不需要知道光场要表示的是什么东西。只需在黑盒的表面知道任何一个方向过去的光线,就可以记录其光场,前提是这里的观察点要在包围盒外面。
 
notion image
我们还能理解为,取一个平面,平面右是发光的物体,发光物体会发光穿过平面,平面右边物体可以忽略,我只要知道左边的物体就可以了。也就是说我只需知道对于平面上任意一个点 S 的方向 θ 即可。
notion image
前面说光线可以通过位置和方向来定义,也可以通过两个点和正负方向来定义。那也就是说我可以通过两个平面来定义任意一个光场。
notion image
uv st 就是对光场的参数化的过程,因为其本身本来就是四维函数,只是取决于我们怎么描述四维函数而已。假设我们知道我们关心的东西在右边,那么我们就知道光线的正负方向,任意两个点就能得到光线,并把光线的值记下来就可以了。那我可以将所有 uv, st 组合就行了。
下面是两个平面参数化的另一种理解方式。
notion image
我们有 st 平面和 uv 平面,那么我可以有不同的理解方式,例如 st 平面上取一个点,然后取所有 uv 看长什么样。那么在 st 平面取不同的点,uv 平面长得肯定都不一样。
 
下图中,如果我们在 uv 平面取固定一个点,取所有 st 平面,这就好像是没有光场一样。因为看向世界,就像是一个针孔摄像机看到的东西一样,我们能看到一个完整的图。uv 平面换一个点看 st 平面,又像是从另外一个角度看的东西一样。
反过来不太好理解。固定 st 平面的一点,往 uv 平面上看,能看到什么?整个世界在 st 平面右边,我们可以认为是 uv 平面任意一个点都看向 st 平面固定的一点,就能看到一个物体的不同方向是什么。换种说法就是从不同角度看一个点,能看到什么。也就是打到任何一个像素上,不同方向的光是什么(radiance)。
notion image
对于上图(a)的方式,斯坦福就有人这么做了:
notion image
这就是我们对光场的理解,相当于我们在不同的位置对场景拍不同的图。每个位置对应一个 uv,拍到的照片是 st,这就是四维的。每个相机成像出来是个二维的图,相机本身也是二维的,因此得出来就是四维的。
 
我们其实更关心上图(b)的理解,这种理解也更困难一点。
notion image
自然界有一些生物,比如说苍蝇,有复眼。苍蝇眼睛的成像原理其实就是成像一个光场。
我们盯着一个照片看,照片的任何一个像素,上面记录的是 irradiance,irradiance 就是不区分来自任何方向的光,并将其平均到一块。可以参考上一节的 Why Not Sensors Without Lenses? 部分。
对于光场的另一种理解方式,先把 lensiet 当作某一个像素,其接收的光有来自左边的蓝色,正上方的绿色,右方的红色。如果是普通的相机就把这个像素记录下来了,记录的是蓝绿红的平均。如果我有办法将其分开,例如光打到像素的时候不立刻记录它,而是将像素变成一个小的透镜,其作用就是将各个方向的光分到不同的位置上去。分到不同的位置就会发现,我把实际的感光元件放在背后,用前面一个小的透镜,经过分光之后,就能把打到原本像素上各个方向的光分别记录在不同的位置(分成像素中的红蓝黄传感器)。本质上说,记录的不再是一个像素的 radiance 了,记录的是往这个世界不同方向看到的 radiance。这也是光场照相机的基本原理。
我们看着一个像素,其实是相当于看着穿过这个像素的不同方向的光。

Light Field Camera 光场照相机

notion image
这个人创建了公司,使光场照相机真正进入消费者层级中。
它的原理就是微透镜原理(Microlens design),将一个像素替换成一个透镜,这个透镜可以把来自于不同方向的光分开,然后记录下来。
它的功能就是支持后期的重新聚焦。我们可以拿着光场照相机先拍一张照,然后再考虑聚焦的问题,改变光圈大小、动态调节各种虚拟的焦距等。
下面是真实的实例,拍一张照片,然后改聚焦的平面。
notion image
notion image
notion image
notion image
notion image
notion image
光场照相机的原理其实就是光场。
notion image
对于上图右,原本我们照相机的成像平面会放在黄色透镜的那平面上,成像一个聚焦的结果。对于普通的相机,这就是我们的像素,任何一个像素,会接收到来自各个方向的光,然后平均起来,这也是 irradiance。
光场照相机的原理,就是把原本像素换成微透镜。微透镜就会把来自各个方面的光给分散到不同的方向上去,再在后面记录下来(右边的黑线处)。也就是说相当于把成像平面往后拿了一点,让不同方向的光经过透镜之后,正好分散在一片区域上。
两者的区别就是,原本普通相机要记录一个像素,光场照相机就要记录一块像素。
上图左下角就是光场照相机直接照下来的图,就是原本一个像素现在变成一个圆。任何一个圆内部,如果平均起来,就是以前传统照相机得到的结果。圆的内部记录的就是不同的方向。
💡
小孔不是也可以把像给分开吗? 没这么容易,这是很理想化的情况,实际上用透镜只会更加复杂。
从一个透镜向左边看,其实就是一个光场。我们有不同透镜的位置,每个透镜都可以往不同方向去,并且记录下来。
💡
那么我们有了光场照相机拍出来原始的图,这个图想得到普通相机拍出来的相机,怎么做呢?
用光场照相机之前,每个微透镜原本都是一个像素。如果我们把每个微透镜各个方向的光选一条,假设光线都是从一个方向进来的,然后把这些同方向的光线都记录在一个像素的结果上。也就是说一个像素对应的都是一个值了,就可以得到一张原始的照片了。这就好像我们把照相机放在某个位置,然后往一个方向去看。
更进一步思考,如果不是取的右图的箭头方向的光线,而是取的水平方向的光线,这就好像我们把相机放在正中间,然后往左边方向看。
取不同方向的光线,就好像我们在移动照相机的位置。
Computational / digital refocusing
  • Same idea: visually changing focal length, picking the refocused ray directions accordingly
重新聚焦用的是完全一样的道理,因为我们拥有整个光场。如果我们把交平面离得非常远或者非常近,那么移动的过程中我们就知道光线的变化,因为我们记录了所有光线的方向,位置,我们就知道如何查询更新了的光线应该查哪一条。我们查(计算)出来要什么方向的光线,就按需从光场里取光线。
notion image
 

总结

为什么我们可以移动相机的位置,也可以重新聚焦?因为光场照相机记录了整个光场,包括位置和方向。
In all, all these functionalities are available because
  • The light field contains everything
Any problems to light field cameras? 缺点
  • Insufficient spatial resolution (same film used for both spatial and directional information)
    • 分辨率不足,例如我们一个小块是 10*10,这个小块记录的是原本普通相机对应的一个像素。如果我们用的相同的胶片,现在要用 100 个像素来记录原本的一个像素的信息,因此光场照相机要求胶片的分辨率非常高。
  • High cost (intricate designation of microlenses)
    • 为了让光场照相机达到以前一样照片的分辨率,我们就需要高分辨率的胶片。
    • 微透镜原理简单,但实现起来不简单,这是超级精密的仪器,设计会有各种问题。
  • Computer Graphics is about trade-offs
    • 从分辨率上看,如果我们要记录更精密的方向信息,那么位置的信息就丢失的更多,留给我们记录像素的数量就更小了。拿复眼举例,如果我们圆圈特别大,那么记录的圆圈数就更少了。
    • 计算机图形学就是关于各种方面的权衡。最重要的目标就是,我们提升很多方面,都可以同步得到提升是最好的,这是进步的思路。