LearnGL - 11 - 光与颜色前置篇

49 篇文章 0 订阅
47 篇文章 0 订阅


LearnGL - 学习笔记目录

前些篇:

我们介绍了 IMGUI 系统,这是为了以后能制作一些类似引擎中方便制作、调试用的 GUI 系统。

但有点偏离了 GL 的主题,所以这篇将会的是 GL 相关话题的内容。

这篇:我们在后续几篇会开始讲到着色,但在此之前,请允许我再卖个关子(实际上还真的学习了解一下后,对光学就可以有一丢丢了解,3D渲染大多数是光学的经验模型,就是用了简化的方式来模拟的,不然现在的机器要计算比较真实的算法会卡到爆,就连我们现在最真实的PBR基于物理的渲染,或是 RT 光线追踪都只是目前光学总结的经验来计算的,随着以后对光学有了进一步的研究成果,说不了这些模型又会有所更新 )。

本人才疏学浅,如有什么错误,望不吝指出。


说到颜色,就会联系到光。

个人理解:颜色,就是我们的大脑对某种生物信号的识别,这种生物信号是由:眼球感光后的视网神经编码的生物电信号。

分不同光波
编码可见光
大脑接收解码
光子
眼球
大脑接收
呈像

光子

光是什么?是如何产生的?用通俗之言解读,让你瞬间走进光的世界 - 说的是能量溢出

也就是说光子是基本上是从一个物质上能量溢出后而喷发出来的微粒子

而光子是按一定的波形运动的微粒子,所以具有波粒二象性

而光子的波形运动的频率一般取决于它拥有的能量强度,所以能量强的光子波形运动频率很高,能量低的光子波形运动频率比较低。

用这个频率划分,我们得到一个光谱,我们人类能看见的光,在光谱中只有一部分的区域
在这里插入图片描述
在这里插入图片描述

我们平时看到的光基本是复合光,就是不是单一的频率的光子,而是有N而不同频率(波段)的光子几乎一起并排前行的光束,这在1666年,被牛顿的三棱镜实验所发现
在这里插入图片描述
三棱镜,是 按照一定的光入射角度一定的光折射率一定的光出射角度 来制作的,这样一道光入射三棱镜后,按角度和折射将复合光波(多个波段),折射角度偏差出多个不同波频的光波物质内部传递,在出射时按表面角度再折射出偏差更大的角度,这些复合光被折射出不同的单一光波,如下图所示
在这里插入图片描述

弄个GIF会更容易理解
在这里插入图片描述

目前这是以我们可见光波的散射的示意图

可以看到上面折射角度比较小的是红色的(波频比较低)的光波,折射角度比较大的是紫色的(波频比较大)的光波

所以我们日常说的:

  • 红外线:比红色可见光更低波频的光线,这些光波因为超出我们肉眼能识别的波段,所以 看不见
  • 紫外线:比紫色可见光更高波频的光线,这些光波因为超出我们肉眼能识别的波段,所以 看不见

(为何紫外线对人、或部分生物有害,因为能量大,波频大,一般物质,如我们的皮肤物质挡不了这种波频的高能光子就会不断撞击我们皮肤、血、肉、骨头,还有叫 X 射线、伽马射线 就是非常高能的光子、光线,高到可以对我们的细胞 DNA 结构进行破坏的程度,所以一般做了 X 光等高能射线的医疗设备检查是不能太长时间的,而且如果有备孕计划的话,就不要去做,如果要做,就要等至少半年以上,等一些被这些高能射线破坏的 DNA 结构的细胞慢慢的修复或是消灭了,恢复正常了,再进行造人计划,这样可以避免因高能射线引用胎儿畸形)


眼球

先来看看,我们的眼球结构
在这里插入图片描述
眼球里的 视网膜 是大量感光细胞所在的地方

人的视网膜上有两种光感受细胞,分别是视锥细胞和视杆细胞。其中,视锥细胞主要与光视觉有关,具有分辨能力高、清晰度高的特点。能分辨三种不同的视色素(红绿蓝),是识别颜色的主要细胞

目前科学实验人的眼睛最低能识别 2~7 个光子

视网膜就是下图所示的部分

在这里插入图片描述
如果一道光要射入、碰撞到我们眼球视网膜,那么肯定会经过下图的路径:

  • 空气或其他外界介质(空气或水,在水底)
  • 眼睛表面液体
  • 角膜
  • 前房
  • 瞳孔
  • 晶状体
  • 玻璃体
  • 视网膜
    在这里插入图片描述

所谓困难重重的才到达我们的眼球视网膜

每个阶段可能发生吸收、折射、等,而达到不了视网膜(看不见)

而我们的视网膜上的视锥细胞能识别的光波波段是有限的,上面有讲到,再看看下图:
在这里插入图片描述

然后眼球视网膜的视锥细胞将感受到的可见光波撞击到的强弱的信号编码处理通过 视觉神经 传输,最终传输到大脑,视觉神经如下图
在这里插入图片描述


大脑接收

大脑接收到上面的视觉神经传递过来的生物电信号后,再进行解码或处理后,最后我们就感知到整个图像


物体颜色

而不同的物体为何有何这不同的颜色呢?

按上面理解的就是这个物体的这个位置有光子向着我们的眼球撞击过来

这个光子是物体发射出来的吗?还是怎么来的?

前面有讲到,它是因为物质能的能量溢出而发射出来的,但是否这个物体本身发射出来的光子

我们可以通过开灯、关灯实验

在一个完全密封的房间里,装有一个灯管,等我们关灯后,如果还能看见的物体,那就说明这个物体本身在发光(发射光子),否则没有发光(也不一定没有发射,有可能也有发射光子,只不过这些光子波频太低,以至于超出我们肉眼视锥细胞能感光的范围)。

但为什么那些自身不发光的物体,我们开灯后它就可以看见了?而且有些还和灯光不一样的颜色。

如,我们的 灯管是白光,开灯后看到一个 红色的苹果,为何会这样呢?再关灯后,又看不见这个红色的苹果了。

那么只有一种可能,这个红色的苹果因为在接收到一个 白光(复合光)后,因为吸收了部分光线(光子) ,而没有吸收成功的,可能最终被苹果表面物质微粒子反弹了,最后这些剩余没被苹果吸收的光子反弹到我们的眼球。

而且你再细心观察苹果的每一个细小的地方你会发现,每一处的颜色都可能未必是相同的(albedo 反射率,在目前常规的 3D 渲染中,我们通常用一张纹理来表示表面的不同吸收率,或是反射率),苹果与灯光不同角度有些地方暗一些,有些地方亮一些(diffuse 漫反射),有些地方亮到和灯管发光的颜色一样(specular 反射高光),在白天时将苹果拿到户外又不一样,整体比较亮(ambient 环境光,室外的 ambient 比室内的丰富),这些都是简化过的经验光照模型 Phong,都是经过观察得到的规律总结。另外,PBR(Physical Base Rendering 基于物理的渲染) 的光照模型比较复杂。

而我们在 OpenGL 等渲染系统中,一般只会处理可见光部分(部分不可见的或超过 1 的通道光,我们会来用处理 HDR 效果,可以让一些 Bloom 数据容易,合理的提取到),在 fragment shader 着色器中,通常可以以 RGB (R红色,G绿色,B蓝色)的三个 BYTE 字节来模拟复合光,每个 BYTE 可以用 0~255 的范围,三个 BYTE 就可以模拟出 255 * 255 * 255 = 16581375,可以模拟 1658W+ 中颜色,但一般我们会有归一化的0.0~1.0的浮点数值来表示 RGB 颜色通道的值,后面也会也这个归一化的值来描述。


总结

最后思考一下,如果没有光,我们就感受不到光这种信号吗?

如果我们对这种信号数据了解足够清楚,我们可以使用机器来生成这种信号,并且对大脑信号输入了解足够清楚,我们也可以使用人机连接(大脑连接机器设备)后,用设备生成我们人类呈像的信号,传入大脑,那就不用眼球也能脑部感受到类型光子撞击我们的视网膜的生物电信息,就可以让一个人的大脑感光、呈像。


References

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值