计算机图形学有两种成像(Imaging)方法:
- 光栅化成像
- 光线追踪成像
这两种成像都是一种合成(Synthesis)的方法,因为这些东西自然界中不存在。成像的方法也可以通过捕捉方法(Capture)来成像,捕捉指的是真实世界中存在的东西,将其变成照片。
What’s Happening Inside the Camera?
最开始研究相机是从小孔成像现象开始的。上方的是针孔相机的原理,下方的是带透镜相机的原理。
快门可以控制光是否能够(在 1/xx 秒内)进到里面。
光进入相机中时,由传感器捕捉光。传感器上的每一个点,记录的是 Irradiance。
Why Not Sensors Without Lenses?
如果一个相机没有透镜或没有针孔,就不能再拍照了。
Each sensor point would integrate light from all points on the object, so all pixel values would be similar
人的反射光可以往任何方向反射,下图右边的传感器又不区分各个方向的光线,这样就把各个方向的能量反应到一个点上了,那收集的就是 irradiance,收集不了 radiance 信息,因此所有东西都是糊的。
i.e. the sensor records irradiance
目前有人研究传感器可以通过方向性的光,分开传感分开记录。
Pinhole Image Formation
公元前就有人发现了小孔成像的原理。
针孔相机是没有深度可言的,任何的地方都不是虚的,而是清楚的,看不到虚化的存在,景深的效果(这是因为透镜的原因,后面会说)。
如果可以模拟光线与透镜作用,那也可以做出带有景深的渲染。
Field of View (FOV) 视场
能拍的多大的范围。
Effect of Focal Length on FOV 焦距
广角镜头(上图右)意味着能拍更广的角度,视场更大。对于普通的例如 iPhone 的相机,对应的视场就窄。
那么什么能够决定视场大小呢?
小孔成像相机能通过相似三角形定理求出视场,如上图左。传感器高度 h,与小孔距离为 f,那么视场就能很容易求出来。
For a fixed sensor size, decreasing the focal length increases the field of view.
Focal Length 焦距
不同的视场会决定不同拍照的结果,这有严格的定义。
前面视场和传感器大小(前面的 h)有关系,焦距(前面的 f)也有关系。因此在定义视场的时候,人们认为以 35 毫米的胶片为基准,通过定义焦距,来定义视场。
例如 17 mm 就是短的焦距,指广角镜头。
手机也会告诉我们焦距的距离例如 28 毫米,但手机不可能有这样的焦距,这里指的是如果传感器大小为 35 毫米的胶片,其焦距为多少。对于手机来说胶片很小,对应的焦距也会更小,这里是指等效的焦距是多少。
不同角度的镜头能看到不同的效果。在同一个地方用不同焦距拍,视场越窄,能看的东西越远。
如上图,如果我们能改传感器的大小,那么小一点的传感器的视场就比较小。
前文说的传感器和胶片两者不一定一样。平常我们认为是一回事,传感器就是不同的点,对应的能量会写到对应的地方去,这里有个一一对应的关系,我们认为传感器接收到的图像就是最后成像出来的图像。但对于渲染,传感器负责收到的 irradiance 有多大,最后大家决定存成什么图像格式。因此这两个概念可以不一样,但现在混淆地说。
更大的相机有更大的传感器,因此也有更大的分辨率,好的相机都是大的相机。相机越大越好,镜头越长越大越好。
在小的传感器保持视场大小
对于小的手机,要把焦距也变小来达到相同的视场。
Exposure 曝光
- H = T x E
- Exposure = time x irradiance
- 对于一个明亮的场景拍张照能得到比较亮的照片。
- 对于一个暗的场景,曝光时间很长,也能得到比较亮的照片。
- 辐射度量学一直在说单位时间,单位时间有光打到某个表面。但照相是考虑整体的时间,曝光时间长,就有更多的光被传感器捕捉到,就会更亮,其记录的不是 power,是 Irradiance。
- Exposure time (T)
- Controlled by shutter
- Irradiance (E)
- Power of light falling on a unit area of sensor
- Controlled by lens aperture and focal length
影响照片拍出来亮度的因素
Aperture size(光圈大小)
- Change the f-stop by opening / closing the aperture (if camera has iris control)
- 最大可以开到和镜头一样大,由 f-stop(f 数)控制。光圈是仿生学设计,模仿人的瞳孔。在暗的环境下,瞳孔会自动放大,这样单位时间能接收更多光。反之瞳孔会缩小防止更多光进来。
Shutter speed(快门开放时间)
- Change the duration the sensor pixels integrate light
- shutter speed 越快,说明快门开放时间越短,意味着更少的光会进来。
ISO gain (感光度)
- Change the amplification (analog and/or digital) between sensor values and digital image values
- 可以理解 ISO 为后期处理,当感光元件已经感知到某个层级的光,例如 0.1,觉得暗就把 0.1 乘个 10 变成 1,我们只是后期为其乘个数。乘可以发生在任何地方,例如硬件上。传感器本身可以调节灵敏度来增加 ISO,也可以最后生成照片后,在照片的数字信号上调节 ISO。
因素所带来的影响
- F32 这些就是 F 数,来描述光圈大小。黑色是遮挡物,中间的圈是光圈大小。F 数越大,光圈越小,F5,6 是欧洲写法,逗号是点的意思。
- Shutter Speed 用分数来表示。1/1000 代表千分之一秒,也就是一毫秒。
- ISO 200 就是在 ISO 100 上乘了个 2。
对于实际的效果:
- 光圈越大,照片在一定区域就会很虚,光圈用的小,图片看上去就很锐利。
- 快门时间越小,就能看到一个人在跑步,开的时间长,就会看到模糊的东西。
- ISO 就是在图上乘了个数。各种信号都有噪声,如果我们对整个信号乘一个很大的数,我们能放大信号,但也会放大噪声。
- 在一个很暗的房间,用一个很小的光圈。用很小的快门时间拍了张很暗的图,但是用 ISO 来拉大使其变亮,但结果也会很 noisy,如上图右下角,因为是直接往上乘。
- 因此大家也不愿意用 ISO 来调节得到一张亮的图,小范围调可以。
为什么会有噪声?
最简单的理解就是,把光认为是光子。如果快门时间不够,进到感光元件的光子数就少,这就造成结果就很 Noisy。
ISO (Gain)
Third variable for exposure
Film: trade sensitivity for grain
Digital: trade sensitivity for noise
- Multiply signal before analog-to-digital conversion
- Linear effect (ISO 200 needs half the light as ISO 100)
如果控制其他变量,可以得到一张比一张暗的图,再用 ISO 调回来一样亮度的话,就能看到噪声。
F-Number (F-Stop): Exposure Levels
Written as FN or F/N. N is the f-number.
F 数有两种写法,一种是 F 后面跟数字,一种是 F/ 后面带数字。我们关心的是后面的数字。
Informal understanding: the inverse-diameter of a round aperture
非正式理解:F 数就是光圈直径分之一,N 越大直径越小。前面图片也能看到。
调光圈可以得到固定时间段内进入到相机的能量,因此调光圈可以得到不同的曝光度。
Physical Shutter (1/25 Sec Exposure)
快门一开始是关闭的,有一个镜子一样的东西后来会升上去,然后快门突然打开,之后又关上。这就是平常给快门多长时间让光能进去的过程。
虽然快门能很快打开,但是打开也是有一个过程的,这个过程也会造成影响。
- 可以调节曝光度的作用。
- 如果快门时间很长,就是要让光传进来更长的时间,为什么小人就模糊了呢?这种就是运动模糊。高速运动下,快门打开的时间内,物体已经发生了一些运动了,因此中间过程都会记录下来。而传感器又起到平均的作用,因此看到的就是模糊。(机械式快门)
- 如果增加快门时间,让光进来的时间更多,那么运动过程就更长,模糊更严重。
拍照为什么要稳定地架住,加三脚架?
就是要减小短时间内产生的运动模糊。
如果用更短的快门时间,那么运动模糊就会减轻,但曝光度也降低。为了达到相同的亮度,要么调 ISO,要么调光圈。
运动模糊也不一定是坏事,为了体现赛车的速度,如果没有运动模糊,就会觉得赛车特别慢。人们长久以来应用眼睛来感知世界的过程中,就会感觉到有运动模糊的一定是快的。
运动模糊怎么来的?
如果不让有运动模糊,意味着什么?如果拍视频,有不同的帧,用非常短的快门,在不同时刻记录物体的位置。但实际上物体运动是连续的,在不同的帧,不同的时间对物体的位置做了采样,这就跟反走样很像了。
如果我有一个像素,采样像素的中心的是否在三角形内,采样的三角形的信号。如果像素分隔比较开,像素跟像素有一定距离,那么采样的结果是有走样现象的。我们运用的反走样就会引入一定的模糊。道理是一样的。
只不过这里是对时间上采样。如果有运动模糊,反倒是有反走样的效果。
机械快门打开会有一个过程,如果物体运动速度更快或者差不多,这种情况下就会出问题,也就是 Rolling shutter 问题。对于超级高速运动的物体,会造成扭曲。不同位置的图像,有可能记录的是不同时间进来的光,就会造成扭曲。
一起考虑快门时间和光圈
快门时间打开的短,图片就会暗,暗了就可以提高光圈大小。提高光圈大小就可以用更小的 F 数。
表格上下对应基本可以达到相同曝光度、亮度。例如 F 数从 4.0 变到 8.0,直径减小到二分之一,对应光圈面积也减少四分之一,因此要用四倍曝光时间来补偿。
但他们不同配置拍出来的照片不一定一样。并不是,因为大光圈会引起景深问题,快门时间又会影响运动模糊问题。这两个问题是需要权衡的,要景深就不能要运动模糊,要运动模糊就不能要景深。
Fast and Slow Photography
High-Speed Photography 高速摄影
每秒钟拍更多的帧数,再按正常帧数来放。每一秒更多帧数意味着每一张照片的快门时间非常少。
但又要保证每一张照片有正常的曝光度,就要更大的光圈和更高的 ISO。
Long-Exposure Photography
我们也可以给一些照片特别长的曝光时间。那么就可以用非常小的光圈,慢慢的拍。这样拍出来就是延时摄影,拍出来叫拉丝。
Thin Lens Approximation 薄透镜近似
除了光圈和快门,最重要的部件就是镜头。
手机相机的镜头都非常复杂,现在的相机应该都不是用单个透镜来做成像的,而是用一个透镜组来组成。
Ideal Thin Lens – Focal Point 焦点
有一些透镜也不像是我们假设的透镜一样,一面凸一面平,这种就不可能把光聚到一块(Aberrations)。
因此实际的透镜会很复杂。我们研究的透镜是理想化的薄透镜,厚度忽略不计。理想化的透镜能把平行于透镜的光都集中于一个点。焦距就是焦点到透镜的中心。
光路有可逆性,如果光线经过焦点,被透镜折射之后就会变成平行的光。
对于一个设计出来的透镜来说,焦距是固定的不能改,而我们认为焦距能改,这就是现代相机透镜组的好处。透镜组可以通过各种各样的组合,使得组出来的结果就好像薄透镜能够改焦距一样。
The Thin Lens Equation 薄透镜公式
任何一个透镜都可以假设任何一个方向穿过中心,方向都不会改变,这是对称性。
我们可以定义两个距离:
物距 :物体到透镜的垂直距离
像距 :成像到透镜的垂直距离
焦距
对于一个透镜来说,如果要改变物距,像距一定要跟着改。
物距、像距和焦距之间的关系可以从几何的关系上来找。
演示软件
薄透镜已经可以解释很多问题,例如 Defocus Blur,这是能解释景深的一个问题。
为了解释模糊,我们需要引入一个概念,Circle of Confusion (CoC)。
远处有一个平面,透镜所有的光,经过透镜都会聚焦到右边某个平面上。如果一个物体不在 Focal Plane 上,例如下图的 Object 就会模糊。现实中相机也是会有一个地方清晰,其他地方模糊。
计算 CoC 大小
根据公式,可以计算出 Object 的光线经过透镜会聚焦到上图的 Image 位置,但我们的成像平面在一段距离以外的 Sensor Plane 上。但光线会继续传播,当感光元件接受到就会变成一片。二维是一条线,三维是一个圆,而这个圆就是 Circle of Confusion (CoC)。在这个圆内,就区分不了光线是从哪里来的,Image 的点外,其他地方也可以投影成一个圆,这样两个圆就叠在一块,我们不知道点在哪里。
Circle of Confusion (CoC) 的大小怎么求?
可以用相似三角形求出。
如果我们能固定 ,那么看的物体的模糊程度(CoC 大小)与透镜的大小有关,也就是 。
看的东西模糊不模糊,取决于光圈的大小。
f/1.4 大光圈就能期待看到模糊的效果,小光圈则看不到。
重新定义光圈(F 数)
之前定义光圈是直径分之一,其实是不对的。
- Formal definition: The f-number of a lens is defined as the focal length divided by the diameter of the aperture
- F 数的定义是有明确的定义的:焦距除以光圈的直径。
- Common f-stops on real lenses: 1.4, 2, 2.8, 4.0, 5.6, 8, 11, 16, 22, 32
- An f-stop of 2 is sometimes written f/2, reflecting the fact that the absolute aperture diameter (A) can be computed by dividing focal length (f) by the relative aperture (N).
光圈(N)等于焦距(f)除以光圈的直径大小(A)。
对于相机而言,知道 f 知道 D,我们就可以算出 F 数。
这样我们就将 F 数、光圈实际大小、焦距联系到一块了。
根据前面的 计算 CoC 大小 就可以得出:
CoC 和 N 有反比关系。也就是说为了拍更清楚照片,就要用小光圈。
既然我们知道光线是怎么穿过薄透镜的,那么我们就可以用薄透镜来渲染。
Ray Tracing Ideal Thin Lenses
Examples of Renderings with Lens Focus
我们可以模拟薄透镜,模拟焦距,放置在成像平面,实际做光线追踪。
首先要定义场景,那就要定义透镜各种各样的事情。这里给出一种设定方案。
(One possible) Setup:
- Choose sensor size, lens focal length and aperture size
- 首先 Sensor 有一定大小,定义透镜的属性:焦距和光圈大小。
- Choose depth of subject of interest
- 再定义透镜离场景(Subject plane)有多远,也就是物距
- Calculate corresponding depth of sensor from thin lens equation
- 根据透镜公式,知道物距 和焦距,当然能求出像距 。
这样就能做 Ray tracing 了。
现在想找些光线通过透镜打到场景里面去。那么可以在 Sensor 感光元件上找一个点 ,在透镜上找一个点 ,将两点连线,之后就知道会往另外一个地方去 。那么就能得到 到 这条线带有 radiance,记在 上。
Depth of Field 景深
两张照片用的就是不同光圈大小。大的光圈对应大的 CoC,一个点会变成更大的一个圆,就是更大的圆。但总归有些地方是不模糊的,就是在 Focal plane 上。
大光圈和小光圈会影响模糊的范围。
Set circle of confusion as the maximum permissible blur spot on the image plane that will appear sharp under final viewing conditions
Circle of Confusion for Depth of Field
在圈着的区域内,我们认为 CoC 是足够小的。景深就是指,在场景中有一段深度,这段深度经过透镜之后会在成像平面上形成一段区域,在这段区域中,可以认为 CoC 是足够小的。
因此要算景深,就是算 CoC 在这小范围内,场景看到的那一段就是清晰的。
可以这么想(虽然不是这么回事):
成像平面有各种各样的像素,像素有大小。当 CoC 大小跟像素差不多或者比像素小,都认为得出的结果是锐利的。因此成像平面附近都可以认为成像出来都是锐利的,这也就是景深所对应的范围。
景深指的是场景中的某一段深度,使得经过透镜之后到达成像平面附近,在这个范围内 CoC 都比较小。景深的范围就是 。