Games101-光场、颜色与感知

Light Field / Lumigraph

在这里插入图片描述
在这里插入图片描述
如果在房间中间加一个幕布,幕布显示之前看到的画面。就是虚拟显示的原理
在这里插入图片描述
全光函数:描述人可以看到什么东西。就是所能看到的所有东西
在这里插入图片描述
假设场景里,往四面八方看,可以定义任何一个方向用极坐标表示。可以定义一个函数,往任意一个方向看,可以看到什么值。即可以表示在某个地方,往某个方向看,可以看到什么
在这里插入图片描述
改进函数,引入一个波长(色彩信息)
在这里插入图片描述
再扩展一个时间t,最终就是一个电影

在这里插入图片描述
进一步扩展,人的位置可以移动x,y,z。看到的就是全息电影
在这里插入图片描述
把函数不当做电影来看。理解成,在任何位置,往任何方向看,并且在任何时间看到的都是不同的颜色

整个世界是一个7个维度的函数(全光函数)
在这里插入图片描述
可以从全光函数提取部分信息,用来表示更复杂的光
平常一个点,往各个方向看,记录的是来自各个方向的信息。
光场就是全光函数的小部分
在这里插入图片描述
光线:一个起点,一个方向
在这里插入图片描述
可以取光线上任意两点定义
只需要2维的位置和2维的方向
在这里插入图片描述
描述一个物体的视觉信息,只要找出它的包围盒,并记录包围盒表面任意一点向任意方向的发光情况即可。光场就是在任何一个位置往任何一个方向去的光照强度。光场只是全光函数的一小部分,二维的位置,二维的方向。
3d空间中,3d物体的表面是在2维的空间中,任何一个空间中的方向都可以有两个数(极坐标)表示。
在这里插入图片描述
有了光场后,从任意位置都可以看向这个物体,有了视点和看向的方向,查询4D的函数就可以查询到记录的值。即在任意位置都能得到任意方向物体的观测
在这里插入图片描述
有了包围盒之后,就可以忽略光场内部的细节,只要记录包围盒表面的任何位置任何方向的光照信息即可
在这里插入图片描述
可以用S和θ \thetaθ得到任意一条光线。
可以理解为取一个平面,平面右边是一些发光的物体,发光物体会发出各种各样的光,穿过平面。平面右边的物体可以忽略,只需要知道平面的左边是什么。对于平面上任意一点,知道任意一个方向就行。
在这里插入图片描述
光线还可以用2个点来确定,那就可以用2个平面来定义一个光场
可以定义2个相互平行的平面,2个平面上各自任取一个点(2个点都是2维的),2个点一连就可以知道对应的光线。这就是为什么光场中会用到u、v和s、t(对光场参数化的过程)
在这里插入图片描述
只要找到所有的u、v和s、t的组合,就可以描述所有的不同的位置和不同方向出来的光线
在这里插入图片描述
在这里插入图片描述
在u、v上取一个固定的点,看向所有的s、t平面
如上图,在u、v上取一个点,整个世界的右边是我们关心的东西,这就好像一个针孔摄像机所能看到的东西,所以能看到一个完整的物体的图。u、v上不同的位置出发,就相当于从不同的角度看向这个世界。
有很多摄像机,从某一个角度看向世界,拍一张图,然后将所有图都组织到一块,就是整个光场

固定s、t平面上一个点,然后往u、v平面上看
整个世界还是在s、t平面的右边,从u、v上的任何一个点都看向s、t上的同一点。就好像盯着同一个点,从不同的角度去看,会看到很多类似不同高光的东西。
也可以理解成当你的摄像机拍了一张图之后,一个像素上存的是Irradiance,那通过这种方式,可以将像素上的Irradiance给展开成Radiance,可以看到打到任何一个像素上不同方向的光
在这里插入图片描述
摄像机的矩阵,相当于在不同的位置对场景拍不同的图,每个位置对应一个u、v,拍到的照片是s、t
在这里插入图片描述
苍蝇的眼睛叫复眼,它眼睛的成像原理就是在成像一个光场。我们盯着原本拍出的一张照片来看,那照片上的任何一个像素记录的是Irradiance(不区分来自各个方向的光,将其平均)
如上图,将lenslet当做某一个像素,对于最左边的像素来说,它接收到的光有左边的蓝色,正上方的绿色,和右边的红色,普通相机记录下来的就是蓝色、绿色、红色的平均。如果有办法可以把它分开,比如这个光打到像素点时不立刻记录它,而是把这个像素变成某个小的透镜,把来自于各个方向的光给分到不同的位置上去(分光)。把实际的感光元件放在底下,就可以将它们分别记录到不同位置,所以本质上记录的不是Irradiance,而是Radiance了

也就是说我看着一个像素,其实是相当于看着穿过像素的不同方向的光

Light Field Camera

在这里插入图片描述
原理:Microlens design(上面谈到的微透镜)。将一个像素替换成一个透镜,让这个透镜可以把来自于不同方向的光分开并记录下来
功能:Computational Refocusing,支持后期的重新聚焦(拿到照相机后,先拍张照,然后再考虑聚焦等问题。如光圈大小等,可以动态调节虚拟焦距)
在这里插入图片描述
可以拍一张很糊的照片
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
动态调焦
在这里插入图片描述
原理就是光场的原理。将原本的像素换成了微透镜,这些微透镜可以把来自各方向的光分散到不同的方向上去,在后面再将它记录下来(也就是说把感光元件往后拿一点,让不同方向的光经过透镜后正好分散在一片区域上)。原本记录一个像素,现在记录一块像素
光场照相机照出来的最原始的图实际上是原本的一个像素变成了一个圆。任何一个圆内部平均起来就是以前普通的照相机得到的结果,在一个圆的内部各个像素其实就是记录了各个不同的方向。
小孔可以将像分开,但没有那么容易,这是一个非常理想化的情况
不同的透镜对应不同的位置,每一个位置可以往不同的方向上去,并且可以把它记录下来。从透镜向左边看就是一个光场
在这里插入图片描述
从光场相机拍的图还原到普通相机照的照片
在使用光场照相机之前,上图中的透镜原本是像素,从透镜中各个不同的光线中选一条,都选最下面那条,并将结果记录在对应的一个像素上,现在透镜就对应了一个值
那每一个透镜都取中间这条光线,那就好像把相机放在正中间往左边去看
如果都取最上面的往左下方打的光线,相当于相机在上面
相当于有了光场后,取不同方向的光线,就可以虚拟的移动摄像机的位置
重新聚焦利用的是完全一样的道理。因为拥有整个光场,如果把焦平面离得非常远或非常近,移的过程中对应的光线应该如何变化,因为在四维的光场中记录了所有可能的光线的位置和方向信息,那就可以查询更新了之后的光线应该查哪一条,那就对于不同的透镜查的可能并不是同一个位置,你算出来应该查询哪一个方向就去查询哪一个方向
在这里插入图片描述
为什么可以移动照相机的位置?为什么可以动态的做聚焦?因为光场照相机记录了整个光场的信息,而整个光场就是所有进到相机的信息(包括位置和方向)
问题
分辨率不足。原本成像平面在透镜的位置,现在成像平面在后面,每一个小块记录的是原本的普通相机对应的一个像素,如果都用相同的胶片,那原本一个像素记录一个像素的信息,现在要用100个像素记录一个像素的信息(假设是10x10的),因为把不同的方向分开了。也就是说胶片的分辨率现在变成了一个空间上的分辨率(原本照片上的分辨率乘以方向上的分辨率),那现在方向上记录的多,那在照片本身记录的分辨率就低
高成本。对胶片的分辨率要求非常高,这样就造成另外一个问题,高成本。体现在为了让光场照相机达到和以前一样的空间上的分辨率(或者照片上的分辨率),就要用超级大分辨率的实际的胶片。并且微透镜的原理很简单,但实现起来并没有这么简单,它是一个超级精密的仪器

从分辨率上看,如果需要记录更精密的方向信息(比如觉得10X10不够,要记录100X100),这样位置信息其实就丢失得更多,就相当于是剩下来记录像素的数量就更少了

Physical Basis of Color

在这里插入图片描述
一束白光穿过一个棱镜,它会被分解成各个不同的颜色(彩虹的颜色)。不同的颜色可以合成其他的颜色,将所有的颜色合在一起又会形成白色
在这里插入图片描述
不同的波长对应不同的折射率,某一种光一定对应某一种光谱(光谱是光线的能量在不同的波长上的分布。光谱是一个很长的范围,但图形学中关心的是可见光的光谱,即分布在波长在400nm到700nm之间)
在这里插入图片描述
光谱更准确的定义是谱功率密度SPD(光线在不同的波长强度是多少)
单位:辐射单位/纳米(例如瓦特/nm),也可以是无单位的

当绝对单位不重要时,通常使用缩放到最大波长的“相对单位”进行波长比较
在这里插入图片描述
如上图,可以看到图中某一个地方的能量是多少,对于蓝天部分,可以发现更多的能量集中在高频(小波长)的地方会看出蓝颜色;对于阳光,又是另外一种SPD
在这里插入图片描述
各种各样不同的光有各种不同的SPD
在这里插入图片描述
SPD有线性性质。比如有一个能记录光强度的东西,用某一种光照亮它,得到右边的某一种分布,另外一种光照亮它,得到另外一种分布;两种光同时照亮它,这个分布其实就是它们2个对应的SPD之和

开很多盏灯,会越来越亮
在这里插入图片描述
颜色是人的感知,和人有光,和实际光的分布其实并不一样

Biological Basis of Color

在这里插入图片描述
人的眼睛其实就是一个摄像机:
人眼的瞳孔可调节大小,对应着光圈;晶状体对应透镜,可通过肌肉的拉扯调节焦距;视网膜进行成像
在这里插入图片描述
视网膜是光线最终到达的地方,能看到东西是因为有感光细胞

棒状细胞(视杆细胞)(Rod cells):很多(~120 million),可以用来感知光的强度,不感知颜色(用这个棒状细胞可以得到一个灰度的图)
锥形细胞(视锥细胞)(Cone cells):少很多(~6-7 million),可以用来感知颜色(为了研究颜色是怎么回事,应该去研究锥形的细胞)。锥形细胞内部分成S、M、L这3种不同的锥形细胞(因为这三种细胞对三种类型的波长的响应各不相同)
S类型:感知的是小波长(高频率)
M类型:对中间波长的感知更灵敏
L类型:感知的是长波长对应的光
在这里插入图片描述
在这里插入图片描述
不同的人以上这三种细胞的分布非常不一样,如下12幅图对应12个人眼睛里这三种视锥细胞的分布(分布很不一样,而且数量上有严重的个体差异)

Tristimulus Theory of Color

在这里插入图片描述
我们定义了光在不同波长上的分布(SPD),又知道某一种细胞对于某一个波长的响应是多少。感知的函数就是这2个函数对应的位置相乘积分起来(相当于给你某一个波长,知道光线的强度是多少,将其和相应的感知的曲线的强度相乘,将每一个不同的波长都考虑进去)
给定任何一种类型的光线(有任何的SPD),人眼看到的是上面S、M、L这3个数,而不是光线本身的SPD
在这里插入图片描述
光线的光谱经过人的眼睛,反应到视网膜上,然后被三种不同的细胞感知到形成3个数,这3个数送到人的脑袋中,人就会认为看到了一个什么样的颜色

Metamerism/同色异谱

在这里插入图片描述
看到的不是光谱,而是光谱和各种各样的曲线积分出来的结果,那是有可能出现下面的现象的
同色异谱现象:2种光线具有的光谱不相同,可是被我们看到的结果却是相同的
不同的信号进来后,通过积分得到3个数是相同的
颜色匹配:利用这种现象给人们呈现各种不同的颜色,这个过程叫颜色匹配(通过调和不同的光谱,得到某一种颜色,使得这一种颜色和我看到的另外一种颜色一样。并不需要2个光的光谱一样,只需要最后的颜色一样)
在这里插入图片描述
上图是一些实际的光谱,它们的SPD完全不同,但被人感知之后(通过3个曲线积分之后),可以得到三个完全相同的结果
在这里插入图片描述
拍了太阳的一张照片,希望在显示器上可以显示出来,那么应该用什么样的颜色?
通过不同的调节方式,使得人看上去下面这2个颜色一样,但混合出来的光谱可以和之前的光谱长得完全不一样

Color Reproduction / Matching

在这里插入图片描述
计算机的成像系统是加色系统(Additive):有几种不同的原色(如下图,以最常见的RGB三种颜色为例),将各自不同的颜色乘上一个强度,将其混合起来,可以得到一种颜色,用它们各自混合的系数(强度)RGB这3个数来表示颜色
加色系统:如果在计算机中将RGB的值都调到最高255,得到白色。(在真实的世界里,不同的光照到同一个位置上,它们混合后会变强)
这个和画画不一样,如果调和不同的颜料,会越调越黑,就叫减色系统
在这里插入图片描述
加色系统就可以使用上面的线性组合基本颜色的方式来匹配任何给定的颜色。如上图是一个基本的例子,给你任何一个颜色,希望用3种不同的颜色去混合匹配得到相同的额颜色
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
左边是给定的颜色,右边是混合出的颜色,每一个颜色有一个系数(强度),将右边的颜色混合得和左边一样
在这里插入图片描述
在这里插入图片描述
有时候对于左边的颜色右边无法混合出来
可以将左边给定的颜色往上加一个颜色(这就好像对应在右边减这个颜色,但因为用的加色系统无法减,最小是0)
如果通过几种不同的颜色去混合得到一种颜色,这个不同的系数其实可能是负的
在这里插入图片描述
CIE是一个组织,它们定义了RGB的系统,这个系统要做颜色匹配,那给定的任何一个颜色是单波长的颜色(某种激光),光线的SPD是一个单一的Δ函数(或者理解成某一种曲线)
要用3种同样是单色的光(在频谱上分布非常集中,如上图)
在这里插入图片描述
对于单波长的目标颜色做颜色的匹配,给你任何一个固定的波长,比如取450,从图中我们可以看出波长为450时分别对应的蓝色、绿色、红色的值,如果要匹配出这个颜色就要将3个颜色使用对应的强度混合起来
在这里插入图片描述
**对于实际的光(多个波长)**一个实际光的光谱(SPD),就要使用积分考虑每一个波长所需要的红、绿、蓝,然后混合在一块
这3个颜色每一个积分出来会得到3个数

Color Spaces

在这里插入图片描述
RGB是广泛使用的一个标准的系统,它更准确名字应该叫标准RGB(或sRGB)

RGB颜色空间形成的色域是有限的
在这里插入图片描述
CIE XYZ系统也定义了一个颜色匹配函数,但这个颜色系统不是实验测出来的,而是人造的,先定义好3种曲线(虚拟的)
可以看到绿色曲线的设计覆盖得比较全面,分布比较对称,所以绿色对应的y函数匹配出来的数Y在一定程度上可以表示颜色的亮度
红色有2个峰值,没有负数,所有的这些函数都分布在可见光的范围内

CIE XYZ和RGB的区别就在匹配函数
在这里插入图片描述
X、Y、Z是三维的,如何在二维中进行可视化?
将X、Y、Z先进行归一化(这里使其加起来等于1),得到x、y、z
因为三个数加起来等于1,那只要显示前面2个维度能得到一个什么样的图就可以了,而且既然知道Y表示的是亮度,那可以将其固定成某一个数,让X、Z发生变化,图中显示x、y
改变大写的Y,也只是改变它们的亮度
在这里插入图片描述
可以看到上面的边界是扇形的,这个就是色域,整个颜色空间可以显示的颜色
如上图,这个色域有一个中心(白色,白色是由各种颜色混合起来的,所以白色是最不纯的颜色,纯的颜色都在边界上)
在这里插入图片描述
不同的颜色空间表示的颜色范围是不一样的
在这里插入图片描述
sRGB只能表示上图很小的三角形部分的色域

Perceptually Organized Color Spaces

在这里插入图片描述
在这里插入图片描述
HSV广泛应用于颜色拾取器
可以选择各种不同的色调(Hue)、饱和度(Saturation)、Brightness(亮度)/Value(值)
色调:不同类型的颜色
饱和度:更接近白色,还是更接近颜色本身的纯色
亮度:从黑色一直到某种颜色
在这里插入图片描述
LAB色彩空间和感知有关
L轴表示的是亮度(0为黑,100为白);
a轴上红和绿分别在两端;
b轴上蓝和黄在两端
在这里插入图片描述
在这里插入图片描述
LAB空间认为任何一个轴上两端都是互补色(比如可以理解成白色的反义词是黑色,它们两个就是互补色,像红色和绿色,蓝色和黄色互补是通过实验得到的)
互补色理论人的大脑对互补色是有一个定义的(比如我们可以想象有一个浅绿、深绿、黄绿、蓝绿,但不能想象一个偏红的绿色)
在这里插入图片描述
在这里插入图片描述
先看第一张图,之后会看到它的互补色,再看第二张灰度图,这样你会将互补色加到灰度图上,可以看到忍者神龟变绿
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
把除A、B之外的其他地方都挡住,会发现A和B颜色是一样
在这里插入图片描述
在这里插入图片描述
会觉得左边的更亮,2个颜色其实是完全一样的

说明颜色完全是一个人脑感知的问题
在这里插入图片描述
减色系统CMYK
减色系统在生活中应用得更加广泛(如打印、印刷)
给你不同的颜色,将其混合到一块,会越混越黑
CMYK:Cyan(蓝绿色)、Magenta(品红色)、Yellow(黄色)、Key(黑色)

混合C、M、Y本来就可以得到黑色,那为什么还需要黑色?
因为在印刷上要考虑成本,正常情况下打印东西以黑色居多,而且黑色的墨水好制作,便宜,C、M、Y这三种带颜色的墨水不容易制作,那用这三种颜色混合得到黑色,成本就比直接用黑色高

  • 11
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值