成像

计算成像有两种方法

  • 光栅化成像
  • Ray Tracing 成像

都是合成的方法
19. Cameras, Lenses and Fields - 图1

Camera 相机

基础知识

镜头

小孔成像和透镜
image.pngimage.png

Sensor 光传感器

image.png
Sensor记录的是irradiance,需要首先有个镜头把光线分离才能成像
image.png
买相机基本就是机身越大越好,镜头越大越长越好
价格也随之上升

Field of View 视场角 FOV

是跟焦距有关的,
image.png
固定一个传感器尺寸,视场角和焦距成反比

在标定参数的时候,固定默认是以35mm传感器为准
image.pngimage.png
所以手机上28mm焦距指的是胶片为35mm等效28mm,实际上是小很多的。
为了在更小的传感器上保持这个FOV,用了短焦镜头,同时细节也丢失了很多。

焦距越,视场越窄,看到的东西越
image.png
如果固定镜头,对于不同尺寸的传感器,画面大小不同,视场角也不同
image.png

sensor 传感器
film 胶片
对于相机来说,sensor就是一一对应记录到film上
对于渲染来说,sensor就是记录irradiance,最后储存成什么格式是film

Exposure 曝光

辐照irradiance 照射时间 time
image.png
*如何调整曝光

image.png

  • Aperture size 光圈
    • 通过控制 f-stop 来修改光圈大小,控制入光量
    • 光圈就是相机的瞳孔
    • f数越小,光圈越大。f = 焦距/光孔直径
      • 光圈大,景深小,主体醒目,图片越亮
      • 光圈小,景深大,环境清晰,图片越暗
    • 景深产生的原因:弥散圈
  • Shutter Speed 快门

    • 改变光照的时间
    • image.png
    • 产生运动模糊

      • 当物体移动的时候,快门开启需要一个时间(机械快门),这时间内留在传感器上的光平均后就有了运动模糊
      • 这就是为什么摄像机记录的信息是连续的 :::info 深刻理解反走样与运动模糊
        image.png
        如果用很快的相机(90fps)把运动过程拍下一系列图片(游戏的方法),每张图都没有运动模糊,
        再用一个比较慢的相机(24fps)把运动过程拍下一系列的图片(电影的方法),每张图都带有一定的运动模糊
        播放出来后,前者会比较卡而且没有运动感。后者却很自然。
        因为前者是离散的采样丢失了很多信息,后者是连续的,模糊保存了连续的信息。
        这就是为什么游戏需要很高的帧率还会卡,但是电影却只需要24帧。 :::
    • Rolling shutter 图中螺旋桨变形了。因为不同像素记录了不同时间的光。(也是跟快门打开需要时间有关的)

      • image.png
  • ISO gain (感光度)
    • 把sensor值乘一个amplification(可以是硬件也可以是软件实现),输出给digital image value。
    • 属于后处理,区别光圈。
    • 容易产生噪声点,因为噪声也被同时放大了
    • 线性的,ISO200 就是 ISO100 的两倍

平衡F数和快门达到相同的曝光度
因为不变的是人眼接收到的亮度:曝光度
image.png
这里需要trade off 的就是 景深 vs 运动模糊

高速摄影就是很快的快门加上很大的光圈。
image.png
低速 /延迟摄影 就是运动模糊。用很小的快门,很小的光圈
image.pngimage.png

针孔相机Pinhole Camera

是最早的成像方式
image.png
因为人身上每个点都会往四面八方发射光线,只有到小孔的光线是固定的一条(束),所以这样就可以成像。
否则成像平面每个点收到的都是来自四面八方的光线,合在一起就是白色了。这里收集的是Irradiance
我们成像需要的是radiance
image.png
特点:

  • 没有深度可言,任何东西都是实的,没有虚的。虚化是由棱角的存在才有的
  • 做光线追踪的时候也是用的这种原理,所以没有景深的效果

透镜摄像机

现代的透镜摄像机都是用透镜组来成像,非常复杂
成组可以方便改焦距,让它表现为一个薄透镜
image.png

理想化的薄透镜 Ideal Thin Lens

  • 平行光都过焦点 Focal Ray Parallel Ray
  • 过透镜中心的光不会被改变方向 Chief Ray
  • 光路可逆性
  • 焦距可变

image.png
z0 物距
z1 像距
f 焦距
计算公式:高斯定理/薄棱镜公式
image.png
动态演示 : http://graphics.stanford.edu/courses/cs178-10/applets/gaussian.html

失焦模糊 Defocus Blur

image.png
弥散环Circle of Confusion CoC
image.png
左图,物体不在焦平面附件,当他经过透镜汇聚后,光线在感光器前方,光线继续运动,落在感光器上是被放大的,
光圈的大小影响了CoC,一个点到成像平面变成了一个圆,就不能区分信息是从哪个点来的, 所以就模糊了。 (对于给定发光点,zi是定值)
image.pngimage.png(D是光圈直径大小)
N :光圈的F数,由公式可以知道要拍清楚的照片,要用小光圈,大F。

薄透镜光线追踪 Ray Tracing through Thin Lens

之前默认的是用小孔成像去做,其实也可以用薄透镜去做
image.png
就是利用透镜公式从着色点打出光线计算折射到的场景位置。
image.png

景深 Depth of Field

就是用的Defocus Blur 的原理
用大光圈和小光圈区别在于影响了模糊的范围,因为总是由于一个范围内像是不模糊的
image.png
那么这个范围是什么
image.png
就是因为成像平面是一个个像素,像素不是点是有大小的
当这个像素大小大于成像平面附件一定范围内CoC的大小时,我们认为看到的内容还是清晰的。
这么一段范围就叫做景深:场景中的一段深度,经过透镜到达成像平面附件的CoC比较小
image.png
这个深度就是Df-Dn
即光圈越小,模糊范围越小
光圈越大,模糊范围越大
image.pngimage.png
unity使用了基于物理镜头的参数来控制DoF,我们可以看到他的接口:
image.png
里面包含了焦距和光圈级数[1]的设置.从shader中可以看出,Unity算CoC[2]的公式是:
image.png
并且使用了35mm全画幅相机的格式.但是Unity这个公式做了改变,加入了一个玄学值来计算最大CoC半径,所以这一点让我觉得”I can’t understand math, I just get used to it.”.
接下来我们看看UnrealEngine 4(UE4[8]),它的DoF分了3种,分别是:
image.png
游戏内推荐使用Gaussian DoF, 同时也是最常规的一种做法.它计算CoC的公式是:
image.png
它的用户接口是酱紫的:
image.png
除了提供一些基于物理的接口,同时也提供了一些方便美术调整的参数.顺便值得一提的是,UE4针对游戏中DoF常见的articfact,提供了一种解决方法.常规做法都会遇到下图的问题:
image.png
UE4使用了被称作Adaptive DoF的技术:
image.png