GAMES101-现代计算机图形学入门(六)——Cameras、Lenses、Light Fields、Color and Perception
写在前面:
写本系列(自用)的目的是回顾已经学过的知识、记录新学习的知识或是记录心得理解,方便自己以后快速复习,减少遗忘。课程是b站GAMES101-现代计算机图形学入门-闫令琪。
九、Cameras、Lenses、Light Fields
1、成像
之前提到的成像方式有两种,光栅化成像和光线追踪成像。这两种方式都是一种合成的方式。

最简单的成像方式就是捕捉Capture,摄像机拍照就是一种捕捉方式。常见的相机有小孔成像的相机和透镜的相机。

对于传感器而言,任何一个点记录的都是一个irradiance。如果没有小孔或者透镜,那么任意一个点都能接受来自四面八方的光,看到的就是糊的。

2、针孔相机Pinhole Image Formation
(1)Field of View视场
视场的意思就是能看到多大的范围。以针孔摄像机为例,我们传感器的长h(一般称为高度),传感器到针孔的距离为焦距f。利用相似三角形的原理,就可以得到视场的范围。也可以发现,相同h,f越小,视场范围越大。

不同的视场会得到不同的拍照结果。由于视场同时受传感器大小和焦距影响,因此人们定义视场都是以35mm胶片(传感器大小固定)为基准的。


(2)Exposure曝光
T:进来多长时间,E:进来多少光,H:曝光度

影响曝光的因素:光圈大小、快门速度、感光度(ISO增益,简单理解为后处理,将最后接收到的能量乘以某个数)

改变不同属性造成的影响:

①IOS(Gain)
ISO能提高曝光度,但ISO过大时很容易出现噪点。


②光圈
F数是焦距/光圈直径。


③快门
快门开启时间长,会出现运动模糊,曝光度会提高。

但运动模糊也不一定是坏事,某些情况下,运动模糊可以表达物体运动的很快。

相机快门是不可能瞬间打开的,它有一个打开的过程,当物体运动的速度大于或者等于快门打开的速度,就会出现Rolling shutter问题。对于超级高速的物体比如螺旋桨,就会造成扭曲。
3、薄透镜Thin Lens Approximation
对于理想的透镜,平行光穿过透镜,一定会被反射到一个点上去,这个点就是焦点,焦点到透镜的距离称为焦距。我们知道,光线具有可逆性,因此过焦点的光线穿过透镜一定会变为平行光。我们假设透镜的焦距可以随意调节。

此外,透镜还有一些物理性质。例如过透镜中心的光的方向一定不会改变。物距为z0,像距为zi,焦距为f,满足如下薄透镜公式:

(1)Defocus Blur
Coc弥散圈指的是,假如你有一个平面Focal Plane,这个平面上的点通过透镜都会到成像平面上(最锐利的那个平面)。如果物体不在Focal Plane上,一个点穿过透镜变成了一个圆,就会出现模糊。并且这个模糊程度和透镜本身的大小成正比。

之前提到,光圈的F数是焦距/光圈直径。结合以上公式可以得到,Coc与f数成正比,那么假如我们想拍不模糊的图像,就要用小光圈。

①Ray Tracing Idel Thin Lenses
我们知道光线如何和薄透镜作用,那么我们就可以用模拟透镜来渲染。首先定义成像平面大小,透镜的焦距,光圈大小。然后定义透镜离场景中需要拍摄的平面有多远(物距z0),这样,根据透镜公式,就可以知道相距zi。
我们在Sensor成像平面上选一个点,透镜上选一个点,给这两个点连线。这样,我们就会知道这条光线会打到哪个点。算出这条线的radiance,记到初始点上即可。
②景深Depth of Field
景深指的是,在场景中存在一段深度,这段深度经过透镜之后的Coc是足够小的。


4、Light Field/Lumigraph光场
(1)全光函数
"全光函数" 是一个在计算机视觉和图形学中用来描述"一个人在任何位置、任何时间、从任何方向所能看到的所有光线"的数学模型。

我们可以逐步定义这个函数。首先是θ和Φ,它们可以定义任何一个方向,表示我们在这个方向上能看到什么值。λ代表的是在这个方向上对应波长的光,这就让我们能看到彩色的世界了。t代表时间,不同时间看到的东西是有变化的。Vx,Vy,Vz是我们的位置,这就类似于一个全息世界,我们可以在全息世界里移动。

(2)光场
接下来就可以定义光场。在定义光场前,先定义光线。两个点可以定义一条光线,光线定义如下:

如果我们希望定义一个物体的表面,可以将这个物体放在盒子里。可以将这个问题转化为描述这个物体能被看到的所有情况:这个物体在它的包围盒上,它在任何一个位置,往任何一个方向过去的光线。把这些信息记录起来,就是光场。光场就是在任何一个位置,往任何一个方向去的光的强度。光场只是全光函数的一小部分:二维的位置,二维的方向。

光场的好处:可以给我们任意一个观测的方向能看到的结果。

当然,更简单的是,我们不需要知道这个物体是什么,只需要知道它的包围盒。想象一下你要记录一个场景,传统的方法是拍一张照片(2D),或者创建一个3D模型。但光场采用了一种不同的、更直接的思想:我们不需要知道物体“是什么”,我们只需要记录所有可能到达观察者眼睛的“光线”。只要我拥有了所有光线的信息,我就能通过重组这些光线,来模拟出从任意视角观看这个场景的效果。这就是光场技术的精髓。

可以进一步简化,我们可以取一个平面,平面右侧是一些发光的物体,这些物体会发出各种光,光会穿过这个平面。我们不需要知道物体是什么,只需要知道平面上一点s以及这点处光线的方向即可。要描述一条穿过这个平面的光线,你需要两个信息:光线穿过了平面的哪个点 (s, t)。光线穿过这个点时的方向 (θ, φ),可以用水平角和垂直角表示。这样,一条光线就用 4个参数 (s, t, θ, φ) 定义了。这就是一个 4D 光场。存储所有这4个参数的组合,就相当于存储了整个视觉空间。

之前我们提到,两个点也可以确定一条光线,所以也可以取两个平面,那么两个平面上的点一相连,就可以确定一条光线,这么做的原因是:用“一个点 + 一个方向”来描述光线在数学上很直观,但存储和计算起来不方便。一个更聪明的方法是:用两个点来确定一条直线(光线)。

我们放置两个平行的平面(比如UV平面和ST平面)。一条光线会先后穿过这两个平面。那么,对于光场,我们只需要找到所有的uv、st的组合就可以了。现在,描述一条光线只需要 两个2D位置:(u, v) 和 (s, t)。

如下分别是从uv的某个点看st和从st的某个点看uv:

(3)光场照相机
光场照相机可以做到先拍照,再聚焦

传统相机:一个镜头成像,传感器记录一张2D图片。每个像素只记录“总共多少光”到达这一点,丢失了光线的方向信息。光场相机:在传统相机的传感器前面,紧贴着放置一个微透镜阵列。这个设计使得相机能同时记录光线的位置和方向。

将所有像素记录的光线都取同一个方向的那一条光线,就可以还原出一张照片了。

当然光场照相机也有问题,它通常都有分辨率不足的问题,原来的相机是用一个像素记录一个像素的信息,但是现在需要100个像素才能记录一个像素的信息,因为不同的方向被分开了。在方向上记录的信息更多,就会挤压位置上的记录。并且造假昂贵。
十、Color and Perception
1、Physical Basis of Color
可见光光谱分布在400nm到700nm之间,研究光谱时引入谱功率密度SPD,可以描述光在不同波长下的分布。

如下:


(1)颜色
颜色是人的感知,和物理上的光谱是不一样的。

眼睛作为摄像机,视网膜上的感光细胞(锥形细胞)负责感知颜色。

感光细胞有三种,s、m、l,分别感知小波长、中间波长、长波长。

不同的人眼睛里的这三种细胞的占比是不同的。

人类感知颜色是通过三种细胞对不同波长光的响应,形成sml三个数值,而不是直接感知光的光谱。感知结果通过两个函数计算,结合光线强度spd和感知曲线sml进行积分,得到最后的结果。人类看到的颜色由SML决定。

(2)color matching
同色异谱指的是,不同的光谱可能产生相同的颜色。color matching可以通过调和不同光谱,使得最后得到的颜色和另外某个颜色相同,而不需要二者光谱相同。color matching做的是颜色混合。那么颜色如何混合呢。
计算机采用的是加色系统:有几种不同的颜色,把这些颜色乘上不同的颜色,然后将其混合起来。

如下:给每个颜色一个系数,使得三种颜色能混合出指定颜色。

当然,这个混色的系数可能是负的。

对于现实世界中不同波长的光,通过实验进行测量,得到不同波长颜色的匹配函数,也可以发现红色曲线有负值。

那么现在给你任意一个spd函数(光在不同波长下的分布),我们就可以得到这个spd函数表示的颜色(光)。这就是RGB系统。

2、颜色空间
(1)CIE XYZ
人造的颜色匹配系统,颜色匹配的曲线都是人为定义的。其中y表示的是亮度。

接下来,就可以将xyz表示的颜色进行可视化。首先将xyz归一化,这样,只需要固定y(亮度)显示前面两个维度表现的是什么图(xz)就可以。

下图就是色域。色域包含了一个颜色空间能表示的所有颜色。

(2)HSV
当然还有其他的颜色空间比如hsv。

色调决定了它选什么颜色,饱和度决定偏白还是偏这个颜色,亮度决定偏黑还是偏这个颜色。

(3)CIELAB
CIELAB有三个轴,任何一个轴的极限两端都是互补色。

关于为什么红色和绿色是互补色,这与人眼有关。颜色本身是相对的,颜色是人脑感知的。
3、减色系统CMYK
把颜色混合在一起会越混越黑,在打印上很好用,因为可以调出各种不同的颜色。

