Skip to content

games101 六、相机

视场(FOV)

FOV(Field of View),视场与焦距 \(f\) 和传感器尺寸 \(d\) 相关,满足以下关系(利用小孔成像原理很容易推导出来):

\[\mathrm{FOV} = 2\arctan\left(\frac{d}{2f}\right)\]

简单来说,传感器尺寸越大,焦距越短,视场越大。

以 35mm 全画幅相机为例,它的传感器尺寸为 36mm x 24mm,当焦距为 50mm 时,这组参数称为标准镜头,视场大约为 46.8°,这个角度是用传感器对角线长度计算的

曝光(Exposure)

H = T × E

Exposure = Time × Irradiance(时间乘以光线接收功率)

相机的曝光控制

光圈大小:控制相机的进光量,光圈越大,进光量越多,曝光越亮,光圈变大还会让景深变浅,光圈一般为 F/N 的形式,F 表示焦距,N 表示光圈数值,F 除以 N 得到的是光圈直径,所以光圈数值越小,光圈越大。

快门速度:控制光线照射传感器的时间,快门速度越慢,曝光越亮,快门速度越快,曝光越暗,快门速度越快,成像越清晰。

感光度(ISO):控制传感器对光线的敏感度,ISO越高,曝光越亮,但噪点也越多。调节 ISO 其实就是对图像的亮度整体放大或缩小,因此也会把噪声放大。

透镜成像

透镜利用光的折射,可以把平行入射的光线聚焦到一个点上,从这个点继续传播,最终落在传感器上,还是成的倒像,成像的结果和小孔成像是类似的,但是原理完全不同。

lens-imaging.png

透镜的焦距用 \(f\) 表示,物距用 \(u\) 表示,像距用 \(v\) 表示,它们满足以下关系:

\[\frac{1}{f} = \frac{1}{u} + \frac{1}{v}\]

透镜成像 FOV 计算

透镜成像的相机,FOV 的计算方式和小孔成像完全相同,都是根据传感器尺寸和焦距计算的,这个怎么理解呢?

这个基于两个事实,首先,不是所有的光线都会被聚焦到焦点上,只有平行入射的光线才会被聚焦到焦点上,如果光线穿过透镜的中心点,光线的传播路径是不会发生偏折的,这样来看,透镜的成像模型就已经简化成了小孔成像模型,此时,FOV 的计算方式为

\[\mathrm{FOV} = 2\arctan\left(\frac{d}{2v}\right)\]

这时,FOV 还不是用焦距计算的,而是用像距计算的,接下来,我们需要证明像距和焦距之间的关系。

这里需要引入第二个事实,相机成像是需要对焦的,只有当满足上面的透镜成像公式 \(\frac{1}{f} = \frac{1}{u} + \frac{1}{v}\) 时,才能对焦,此时我们看到的物体是清晰的,如果物距和像距不满足这个关系,那么成像就会模糊,我们需要调整透镜的前后位置来满足这个关系,这样才能对焦。

现在我们动用一下极限思维,如果有一个距离相机无限远的物体,它清晰的成像时,它在画面上是什么?是一个点,对不对?而物体的距离为无限远时,物体发出的光可以看作是平行光,平行光会被透镜聚焦到焦点上,因此,无限远物体会刚好在焦点上成像,把像距设置为焦距,就能让一个无限远的物体成像为一个点,所以我们得出结论,当对焦距离为无限远时,像距等于焦距,此时 FOV 的计算方式就变成了

\[\mathrm{FOV} = 2\arctan\left(\frac{d}{2f}\right)\]

我们在衡量一个相机的视场时,通常是以对焦距离为无限远时的视场来衡量的,这样就得出了透镜成像 FOV 计算方式和小孔成像完全相同的结论。

对焦和景深

刚才提到了对焦,那为什么会出现对焦、失焦的现象呢?

这是因为当物距和像距满足透镜成像公式 \(\frac{1}{f} = \frac{1}{u} + \frac{1}{v}\) 时,物距上的任意一点,都能在像距上形成一个清晰的点,换句话说,物距上的一点,它的所有光线在穿过透镜后,到了像距的位置,都会汇聚到一点上,其他距离上的点会在像距上形成一个圆,这个圆被称为散焦圆(Circle of Confusion, CoC),散焦圆越大,成像就越模糊。

而人眼的分辨能力是有限的,当散焦圆的直径小于人眼的分辨能力时,我们就认为这个点是清晰的,这个时候我们就说这个点在景深范围内,景深范围内的点都是清晰的,景深范围外的点都是模糊的。

光圈越大,相当于透镜尺寸越大,散焦圆越大,景深越浅。

同样,焦距也会影响景深(光圈本身就是由焦距除以光圈值定义的),物距不变的情况下,焦距越长,散焦圆越大,景深越浅,但如果物距足够远,焦距的影响就不明显了。

而焦距变长以后,由于 FOV 变窄,我们摄像的物距通常也会增加,焦距对景深的影响会被物距抵消掉,所以我们通常认为主要是光圈影响景深。

光线追踪模拟对焦和失焦

depth-of-field.png

在光线追踪中模拟对焦和失焦的现象,我们需要模拟一个透镜成像的相机模型,将透镜、传感器、物距、像距都定义出来,然后根据透镜成像公式 \(\frac{1}{f} = \frac{1}{u} + \frac{1}{v}\) 来计算出像距,然后在渲染时,根据物距和像距的关系来判断一个点是清晰的还是模糊的,如果一个点的物距和像距满足透镜成像公式,那么这个点就是清晰的,否则就是模糊的。

thin-lens-render.png

计算景深

depth-of-field-calculation.png

给定散焦圆的直径 \(C\),只要散焦圆不大于这个值,成像就是清晰的,我们只需要根据这个条件找到两个最远的成像点,再根据透镜成像公式、光圈计算公式、散焦圆计算公式(散焦圆和光圈直径成正比),就能计算出对应的物距范围,得到景深范围。

光场

Light Field / Lumigraph

全光函数

如果在人周围环绕一个球形屏幕,将人眼看到的所有景象都记录到这个球上,当人看着这个屏幕的时候,就好像看到了整个场景一样,这个球面上实际上记录了场景中所有向人眼发出的光线信息,球面上所有的光线信息就构成了全光函数(Plenoptic Function)。

\[ P(\theta,\phi,\lambda,t,V_x,V_y,V_z) \]

全光函数是一个七维函数,\(\theta\)\(\phi\) 表示光线的方向,\(\lambda\) 表示光线的波长,\(t\) 表示时间,\(V_x\)\(V_y\)\(V_z\) 表示人眼的位置。

光场是全光函数的一个特例,从球面退化为一个平面,光场是一个四维函数,位置和方向都是二维的,表示在一个平面上所有向外发出的光线信息,光场可以看作是全光函数在空间位置上的一个切片。

光场相机可以用来采集光场,下面是一个光场相机示例,光场相机是一种阵列式的相机,里面的每个小相机都能采集一张完整的图片,代表一个采样位置上收集到的所有光线信息:

light-field-camera-array

昆虫的复眼就是一种光场相机。

光场相机拍到的照片可以在后期观看的时候调整焦距,甚至调整视角,这些都是因为光场相机采集了场景中所有向外发出的光线信息,我们可以根据这些信息来计算出不同焦距、不同视角下的图像。