[计算机图形学]光场,颜色与感知(前瞻预习/复习回顾)

news2024/11/20 20:29:25

一、Light Field / Lumigraph—光场

1.我们看到的是什么

我们的眼睛能够把3D世界转换为2D的成像信号被我们感知,如上面第一幅图,这就是我们看到整个世界的过程,那么如果我们把之前记录的光的信息都完美的放在一个幕布上,那么我们是不会感受到任何异样的,因为我们接收的光没有发生任何变化,而这也是虚拟现实的原理。所以我们看到的东西实际上就是光线,我们的眼睛并不关心光线从多远进来或者从什么地方进来。

2.The Plenoptic Function—全光函数

我们可以用一个叫做全光函数的东西描述我们看到的东西,全光函数如上图解释:就是我们能够看到的所有东西。它是怎么做的呢,我们先从简单的开始说起,假设我们的函数现在是定义了我们在某一个位置往任何方向看到的东西,那么我们可以用P(θ,Φ),用一个球的极坐标表示任何一个方向,我们当然可以定义这么一个函数,接下来我们加入一个变量λ,它表示波长,也就是颜色信息,那我们就能看到彩色的东西了,于是我们的函数变成了P(θ,Φ,λ),我们再加入时间t,我们的函数就变成了P(θ,Φ,λ,t),引入时间t之后等于我们能看到动态的东西了,之前我们只能看到静帧,现在我们能看到动画/电影,也就是可以动的画面。

我们最后在加一个三维空间中的坐标,代表我们可以在空间中任何位置朝任何方向看,那也就变成了全息电影,于是函数就变成了P(θ,Φ,λ,t,Vx,Vy,Vz)。最终我们就得到了这么一个函数,它可以让我们在任何位置朝任何方向在任何时间看不同的颜色,而这就是我们看到的所有东西,一个七个维度的函数。

3.光场的定义

(1)光线

 定义光场之前,我们先来定义一下光线,那也就是一个起点一个方向,一个起点Vx,Vy,Vz。一个方向就是θΦ

当然我们不止只有一种定义光线的方式,还有其他办法比如上图中我们用两个点来定义一根光线,当然前提是我们知道方向正负。

(2)光场

那么对于我们看到的任何一个物体,我们都可以理解为它在一个包围盒里,那无非也就是我们在任何位置任何方向都能看到这个物体。又因为光路是可逆的,我们可以反过来描述一个物体在任何位置往任何方向发出的光线,把这个事情描述清楚,我们自然就可以得到我们在任何位置朝任何方向看到这个物体它的样子。这个函数记录的正是这个物体的任意一个位置朝各个方向发出光的强度,而这就是我们描述的光场。而光场正是全光函数的一小部分,因为它只有二维的位置二维的方向。二维的位置指的是物体表面的坐标(u,v),二维的方向指的是(θ,Φ)

通过一个四维的光场,我们完全可以描述我们在任何位置看到物体表面的任何光的信息,我们之前说的包围盒就是这个意思,我们可以想象用一个黑盒把物体包起来,通过我们之前记录的光场,我们完全不需要知道里面的物体是什么,这和我们一开始说的幕布是一个意思。

通过之后的介绍我们知道了,如果想描述一个光场,我们只需要给定一个平面,记录平面上每个点的位置的每个朝向的光的信息就可以了,这也符合我们之前说的第一种光线的定义,给一个点(u,v)和一个方向(θ,Φ)。那么我们也可以用第二种光线的定义来描述一个光场,我们用两个点,那也就是两个平面,两个平面上各自取一个点,就能确定一条光线,因为我们已经知道了光线一定是朝外的,两个平面的坐标分别用(u,v)(s,t)表示,我们发现这并没有本质的区别,因为它们都是四维的。

而关于这块,我们对刚才的两个平面定义的光场有两种不同的理解形式,这里用浅显易懂的话给大家解释一下,第一种情况,我们在(u,v)上取不同的坐标,看向(s,t)平面,这也就相当于假如我们不固定盯着物体的某一个点看,也就是所谓的平行眼,就像相机一样,我们举到哪里相机就拍到哪里,然后我们从各个不同的角度去看向这个物体第二种情况,从(s,t)平面的不同位置看向(u,v)平面,或者说从(u,v)平面一侧的不同方向看向(s,t)平面的某个位置,这就相当于我们看物体只盯着物体的某一个点看,即使我们移动了位置,但是我们就盯着那一个固定的点看。

当然上面说的只是一种通俗的理解,自然界中的确有从st平面看向uv平面的例子,就是苍蝇的复眼,复眼的结构非常复杂,它们由许多独立的更小的眼睛组成,这就好像有一个摄像机矩阵一样,而这种情况下我们看向一个像素,我们看到的实际是许多的Radiance而不再是Irradiance了,也就是说我们看到的一个像素实际上是穿过这个像素的来自不同方向的光。

4.光场摄像机

光场照相机就和我们前面提到的原理是一样的,简单地说,它把每个像素都替换成了透镜,那也就相当于一个摄像机里面有很多小摄像机,那么每个像素也就能记录穿过该像素的不同方向的光了,得到的信息自然也就是四维的。并且它支持后期重新调整聚焦,利用的自然也是光场。

当然,除了后期重新调焦,光场摄像机自然也有我们前面提到过的,从任何角度拍摄物体的功能,我们拍摄完一张光场照片后,如果想恢复原来的正常的照片只需在每个微透镜上都取来自同一方向的光即可,而去不同方向的光的过程和我们移动正常相机从而从不同角度拍照的过程一样,也就是说光场摄像机从一个角度和位置就可以拍摄出许多不同角度和位置的照片。当然光场摄像机也有问题,它经常有分辨率不足的问题,也就是对于分辨率的要求非常高,因为我们要用原本一个像素的大小表示更多的像素,原本二维大小的分辨率,需要再平方,也就是四维的分辨率,而微透镜也是十分精密的器件,生产起来成本很高,所以光场摄像机的成本自然也很高。

二、颜色

1.物理上的颜色基础

拿出一个棱镜可以将光折射出不同的颜色,因为不同波长的光有不同的折射率。而给定任何一种光它一定有对应的光谱光谱就是光能量在不同波长上的分布。图形学我们关心的是可见光的光谱,大概在400nm—700nm之间。

光谱的更准确定义是谱功率密度SPD,也就是光在不同的波长的能量。我们因此就可以用SPD来描述光在不同的波长的分布。如下图阳光和蓝天的分布。

 日光灯和LED灯的不同SPD

 同时SPD具有线性的性质,如上图,这也符合我们开的灯越多就越亮的生活常识。

 

 2.生物上的颜色基础

人们对颜色的感知主要来自于视网膜视网膜上有感光细胞,一种是棒状感光细胞,数量比较多,它用来感知光的强度。另一种是锥形感光细胞,它数量比较少,它可以感知颜色。

锥形感光细胞又分为三种,分别是SML型细胞。

S细胞主要感知短波长的颜光,M细胞感知相对中间波长的光,而L细胞感知长波长的光。但是,不同人的眼睛,这三种细胞的分布比例和数量差异很大。这也就说明颜色只是人感知的结果。

3.Tristimulus Theory of Color—颜色的三刺激理论

那么三种不同的细胞是如何对颜色进行感知的?我们刚才说过SPD,也就是光对应不同波长上的分布,现在又知道了感知的分布,那么我每种细胞的感知只需要将SPD和对应的感知曲线相乘再做一个积分即可。

 也就是说,人们看到的颜色并不是光谱,而是积分得到的S,M,L三个数。

4.Metamerism—同色异谱

同色异谱现象,顾名思义,虽然两种光的光谱并不相同,但是经过积分之后,我们感知到的颜色是相同的。原因也很简单,我们之前说了颜色是光谱和感知曲线乘积之后积分后得到的三个数,那么有些时候很有可能即使光谱不相同,但是被积分之后得到的S,M,L相同,这是有可能的。

因此,我们可以根据同色异谱的原理做颜色匹配,也就是说如果我们拍了一幅照片我们想把它复现在显示器上,但是想保持颜色一致,我们并不需要用相同的SPD。

5.Color Reproduction/Matching—颜色复现/匹配

通过同色异谱我们也就知道,同一种颜色可以通过不同的“颜色”混合来得到。那么如何来混合呢?在计算机种我们的混合称之为加色系统,如RGB,我们把RGB三个数乘上某一个强度然后混合在一起,假如都是255,那么得到是白色,也就是会变强。这和画画调制染料正好相反,染料如果我们都混合在一起它会变黑,这是减色系统

那么是不是用这样一套三个颜色的加色系统就能表示出任意颜色呢?并不是,有时候我们会发现无论怎么调节这三个数的线性组合,它都不能表示出正确的我们想要的颜色,而又因为我们用的是加色系统,不能用负数,那么我们就在原颜色的三个值中加上一定的值,那也就相当于我们的参数的某个值减了一个值或者是负值。如下图。

于是人们发明了CIE RGB系统,它规定了三种基础颜色的SPD如上图,然后测出我们不同波长的光分别由多少这三种颜色组成,就可以得到在波长范围内的三条曲线,如下图。

而上图右边所示的就是RGB的匹配函数。综上我们就可以通过匹配函数取匹配任何一种SPD的光,和感知类似的,我们也是做积分就可以得到相应的值。

6.颜色空间

颜色空间也称彩色模型(又称彩色空间或彩色系统)它的用途是在某些标准下用通常可接受的方式对彩色加以说明。比如我们上面所说的RGB就是一种颜色空间。这里我们介绍另一种叫做CIE XYZ颜色空间,当然它也有相应的匹配函数如上图。和RGB不同的是,XYZ并不是通过实验测量得来的一套色彩空间,它是人为定义的。它的X不会有负值。且因为Y的曲线分布特殊性,它的大小在一定程度上能表示亮度的大小。

由此,我们可以将三个数用坐标表示,但是三维的坐标可视化起来太难了,我们想到Y可以表示亮度,那么如果我们固定一个亮度,也就是Y值,调整x,y就可以得到一个二维坐标了(x,yX,Y归一化后得到的值)。我们会得到上面这么一幅图,而这幅图就叫做色域色域,也就是一个颜色空间所有可能表示的颜色。

色域图我们可以观察到很多特点,比如中心的白点,而白色往往是不纯的,也就是混合的多的颜色,纯色往往分布在边界上。

 而我们之前所说的RGB也就是sRGB空间只能表示很小的三角形内的颜色,如上图。

HSV颜色空间是另外一种颜色空间,如上图所示,它也规定了三个值,H色调S饱和度V亮度,色调也就是红黄蓝这种颜色的不同,饱和度的大小决定它是更接近本身的颜色还是接近白色,亮度自然也就是决定它黑不黑。HSV也是一种用的很广泛的颜色空间,它很适合艺术家进行创作。

CIE LAB空间,有三个轴,L表示黑白灰亮度a轴表示红和绿b轴表示蓝和黄。为什么要这么表示呢,LAB颜色空间它的任何一个轴的两端都是互补色,比如白和黑是互补色,蓝和黄是互补色,红和绿是互补色,这些并不是猜的而是根据实验得到的,这是人脑对这些颜色的互补感知决定的。比如我们知道偏黄的绿,但是我们想象不出偏红的绿,因为红和绿差的太远了。

7.颜色只是感知的错觉

 

一二幅图的A,B色块和三四幅图的黄叉,在我们收到周围环境影响的时候我们都看不出它们是一种颜色,因为这是我们感知的结果。

8.减色系统

减色系统我们之前说了是与加色系统相对的一种系统,也就是越混越黑。比较常用的一种减色系统是CMYK系统,C是青色,M是品红色,Y是黄色,K是黑色。它在打印上很常用,这也就是问什么它带上了一个K,因为打印的时候黑色的墨水比较便宜好造,直接拿来用就行,而不是花大价钱去用三种颜色混合。

 

参考:

Lecture 20 Color and Perception_哔哩哔哩_bilibili

GAMES101_Lecture_20 (ucsb.edu)

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/484242.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

第15章 信息(文档)和配置管理

文章目录 软件文档的分类(1)开发文档:描述开发过程 本身(2)产品文档:描述开发过程的 产物(3)管理文档:记录项目管理的信息 文档的质量可以分为四级(1&#xf…

第二十五章 刚体Rigidbody

在物理学中,静止和匀速直线运动是物体的平衡状态,如果给该物体施加某一个力的话,物体的平衡状态就会改变,当然这个真理的前提是理想状态。我们知道在现实世界中,由于重力和摩擦力的存在,任何一个物体都不可…

【SQL篇】窗口函数和公共表达式

1077 项目员工 III # Write your MySQL query statement below select project_id, employee_id from (select project_id, e.employee_id, rank() over(partition by project_id order by experience_years desc) as rkfrom Employee ejoin Project pon e.employee_id p.empl…

【Fluent】接着上一次计算的结果继续计算,利用计算过程中得到的物理场(温度、速度、压力等)插值Interpolate文件初始化模型的方法

一、问题背景 因为fluent中支持的初始化无非三种类型。 1、Standard initialization 标准初始化 2、Hybridinitialization 混合初始化 3、FMG initialization FMG初始化 另外,还可以用UDF通过坐标判断的方式予以初始化。 但是这些初始化方法都没办法利用以前计算过…

通关MyBatis(上)

作者:~小明学编程 文章专栏:spring框架 格言:热爱编程的,终将被编程所厚爱。 目录 什么是MyBatis 如何使用Mybatis 添加依赖 创建数据库 配置数据库连接字符串 MyBatis的操作流程 数据持久层 配置mybatis的xml文件 mapp…

Windows自动虚拟机WSL和VMware虚拟机兼容问题(此平台不支持虚拟化的 Intel VT-x/EPT)

问题背景与原因分析 在安装了WSL2之后,忽然发现VMware Workstation无法正常启动了。就是在开启虚拟机时遇到了这种情况: “ 此平台不支持虚拟化的 Intel VT-x/EPT” 问题描述:出现以上问题,发现WSL2和 VMware Workstation 是不兼…

idea使用git遇到的小问题

idea使用git遇到的小问题 前置说明颜色含义中文插件修改提交的用户名 前置说明 idea版本为2022专业版 github需要自己会科学上网 颜色含义 在idea中使用github后,会发现项目中会有各种各样的颜色,如图所示文件全为绿色 这颜色含义分别为:…

函数-函数递归及练习

目录 1、什么是递归? 2、递归的两个必要条件 3、递归的练习 3.1 接受一个整型值(无符号),按照顺序打印它的每一位 3.2 编写函数不允许创建临时变量,求字符串的长度 3.3 求第n个斐波那契数 3.4 字符串逆序&…

UG NX二次开发(C++)-建模-修改NXObject或者Feature的颜色(二)

文章目录 1、前言2、在UG NX中修改Body的颜色操作3、采用NXOpen(C)实现3.1 创建修改对象颜色的方法3.2 在do_it()中添加调用的代码3.3 测试效果 1、前言 在UG NX中,改变NXObject和Feature的操作是不相同的,所以其二次开发的代码也不一样,我们…

企业级信息系统开发讲课笔记4.1 Spring Boot入门程序

文章目录 零、学习目标一、Spring Boot框架概述(一)由Spring到Spring Boot(二)Spring Boot框架的核心功能(三)Spring Boot框架的应用 二、使用Maven方式构建Spring Boot项目(一)创建…

二维字符数组的三种输入方式浅析(scanf()、gets()和fgets())

二维字符数组的输入 目录 二维字符数组的输入1.scanf函数知识点scanf()关于回车的问题: 2.gets函数3.fgets函数参考链接 1.scanf函数 知识点 按照常规输入数组的办法,通过 for 循环实现 将整个字符串输入时,在数组名前不加&&#xff0…

Java 基础进阶篇(二)—— static 静态关键字与单例模式

文章目录 一、static 静态关键字1.1 静态成员变量与实例成员变量1.2 静态成员方法与实例成员方法1.3 static 访问注意事项1.4 内存使用情况 二、工具类三、代码块四、单例模式4.1 饿汉单例4.2 懒汉单例 一、static 静态关键字 static:代表静态的意思,可…

Java 基础进阶篇(六)—— 接口详解

文章目录 一、接口概述二、接口的基本使用三、接口从 JDK 8 开始新增的方法四、接口的注意事项(了解)补充:接口与接口的关系 一、接口概述 规范的基本特征是约束和公开。 接口就是一种规范,其约束别人必须干什么事情。 所以&…

【五一创作】Matlab 绘制风速、风向统计玫瑰花图【优化】

在之前,有个博客专门讲matlab 绘制风速、风向统计玫瑰花图;这里面存在不少细节问题,目前对该部分代码做了优化。以前的博客链接见下: Matlab 绘制风速、风向统计玫瑰花图 最近接了一个任务,需要绘制风速、风向的统计玫…

Java 基础进阶篇(五)—— 抽象类与模板方法设计模式

文章目录 一、抽象类、抽象方法概述二、抽象类的特征三、模板方法设计模式3.1使用场景3.2 实现步骤3.3 写作文案例 补充:final 和 abstract 是什么关系? 一、抽象类、抽象方法概述 在 Java 中 abstract 是抽象的意思,可以修饰类、成员方法。 abstract …

Java 基础进阶篇(七)—— 面向对象三大特征之三:多态

文章目录 一、多态的概述二、多态中成员访问特点 ★三、多态的优势与劣势四、多态下的类型转换4.2 自动类型转换(从子到父)4.2 强制类型转换(从父到子)4.3 instanceof 关键字 一、多态的概述 多态:是指执行同一个行为…

Java 基础进阶篇(四)—— 权限修饰符、final 关键字与枚举

文章目录 一、权限修饰符二、final 关键字2.1 final 作用2.2 final 修饰变量举例2.3 常量 三、枚举3.1 枚举的格式3.2 枚举的特征3.3 枚举的应用 一、权限修饰符 权限修饰符 用于约束成员变量、构造器、方法等的访问范围。 权限修饰符: 有四种作用范围由小到大 (p…

Java 基础进阶篇(三)—— 面向对象的三大特征之二:继承

文章目录 一、继承概述二、内存运行原理 ★三、继承的特点四、继承后:成员变量和方法的访问特点五、继承后:方法重写六、继承后:子类构造器的特点七、继承后:子类构造器访问父类有参构造器八、this、super 总结 一、继承概述 Jav…

机器学习之利用SMO算法求解支持向量机—基于python

大家好,我是带我去滑雪! 本期将讨论支持向量机的实现问题,我们知道支持向量机的学习问题可以化为求解凸二次规划问题。这样的凸二次规划问题具有全局最优解,并且有许多最优化算法可以用于这一问题的求解。但是当训练样本容量很大…

【C++】 探索程序 详细解读程序在运行过程中都发生了什么

目录 头文件-源代码 头文件重复包含 问题 解决方案 程序生成过程 预处理Preprocessi 编译Compilation 汇编Assembly 链接Linking 编译期-运行期 编译期确定 运行期确定 编译期错误 运行期错误 类和对象 宏 宏的其他用法 inline内联 头文件-源代码 头文件&…