一、前言
辐射度学(radiology)是一门以整个电磁波段(electromagnetic band)的电磁辐射能(electromagnetic radiation energy)测量为研究对象的科学。计算机图形学中涉及的辐射度学,则集中于整个电磁波段中的“光学谱段”(optical spectrum)中的“可见光谱段”的辐射能的计算。
光学谱段是指从波长为0.1nm的X射线到波长约为0.1cm的极远红外线这一范围内的电磁波。波长小于0.1nm的是伽马射线,大于0.1cm的则属于微波和无线电波。
光学谱段按波长分为X射线、远紫外线、近紫外线、可见光、近红外线、短波红外线、中波红外线、长波红外线和远红外线。可见光谱段即能对人眼产生目视刺激而形成光亮感和色感的谱段。可见光谱段的波长范围一般是0.38~0.76μm。
对人眼产生总的目视刺激的度量是光度学(photometry)的研究范畴。
对人眼产生色感刺激的度量是色度学(colorimetry)的研究领域。
1.1 辐射度学基本理论
辐射度学研究的电磁波的辐射能是客观独立的,与观察者无关,即测量计算者和观察者的人眼感受没有关系。辐射度学建立在几何光学的基础上,即辐射是以直线传播的,不考虑电磁波干涉、衍射等性质。
辐射通量定义为以辐射的形式发射、传输或者接受的功率,即单位时间内的辐射能,单位是W。
不同波长的光引起人对不同颜色的感知,不同的辐射通量则引起人对光的不同亮度的感知。
在空间中,光子的流动和传播遵循能量守恒定律。
1.1.1 立体角
给定一个正球体,它的半径为R。然后给定一个正圆锥体,正圆锥体的顶点和球心重合,到圆锥底面圆边上任意一点的连线,即正圆锥体斜高,它的值也为R。由正圆锥体的底面圆S所截取的那一部分球面的面积A和球体半径R的平方的比称为立体角(solid angle),其国际单位是球面度(steradian)。
1.1.2 点光源、辐射强度和辐射亮度
点光源和力学中的质点类似,只要当用来测定光的辐射的某个位置点,其与光源的距离是光源的最大尺寸的某倍时,该光源就可以被视为点光源,通常该倍数不小于15。
辐射强度(radiation intensity)定义为在给定传输方向上,单位立体角内光源发出的辐射通量。
辐射亮度(radiance)定义为辐射表面在其单位投影面积的单位立体角内发出的辐射通量。
▲ 投影面积和辐射亮度示意图
1.1.3 辐射出射度和辐射入射度
辐射出射度(radiant exitance)定义为离开光源表面的单位面积的辐射通量。
辐射入射度(irradiance,又译为“辐照度”)定义为单位面积被照射的辐射通量。
2.2 光度学基本理论
和辐射度学相比,光度学的研究对象只限于可见光范围内,并且要以人眼的视觉特性为基础。
表2-1 辐射度量和光度量的名称、符号和定义式
人眼的视觉特性有以下几种:
1. 视敏特性 2. 亮度感觉特性 3. 彩色视觉 4. 分辨力
光度量中最基本的物理量是发光强度,其单位是坎德拉(candela),记作cd。其定义为波长为555nm的光产生的辐射。
光通量的单位是流明(lumen),记作lm。1lm是指光强度为1cd的均匀点光源在1球面度内发出的光通量。
2.3 色度学基本理论
2.3.1 什么是颜色
颜色或色彩是人们通过眼部、脑部及生活经验所产生的一种对光的主观感觉效应。人的视网膜上布满了感光细胞,当有光线传入人眼时,这些细胞就会将光线的输入刺激转化为传递给视神经的电信号,最终在大脑得到解释,形成“颜色”这一种意识感觉。
2.3.2 颜色的数字化及ClE1931-RGB颜色模型
因为人眼中有3种感知色彩的视锥细胞,所以理论上用3种不同颜色的光就可以混合出自然界中任何一种颜色来。
国际照明委员会于1931年定义了一套标准:CIE1931-RGB标准色度系统。CIE1931-RGB颜色模型[插图]分别选择了波长为700nm、546 nm和436nm的这3种波长的光,作为产生三原色的基准,这3种光可称为三原色基准光,它们刺激光锥细胞,可以分别让人感觉到红、绿、蓝3原色。
2.3.3 ClE1931-XYZ颜色模型
▲图2-10 CIE1931-XYZ颜色模型的色度图
注意,图中的颜色只是一个效果示意。事实上,没有设备能把自然界中所有的颜色完全显示出来。
CIE1931-XYZ颜色模型的色度图有如下性质需要注意。
1)该色度图所示意的颜色包含了一般人可见的所有颜色,即人类可见的颜色范围。色度图的弧线边界对应自然中的单色光。图下方直线的边界则是由多种单色光混合而成。
2)在该图中任意选定两点,两点间直线上的颜色可由这两点的颜色混合成。给定3个点,3个点构成的三角形内颜色可由这3个点的颜色混合成。
3)给定3个真实光源,混合得出的色度只能是三角形框定的范围,无法完全覆盖人类视觉色域。
这就是CIE1931-XYZ标准色度学系统。该系统是国际上色度计算、颜色测量和颜色表征的统一标准,是绝大多数测色仪器的设计与制造依据。
2.3.4 ClE1931-Yxy颜色模型
CIE1931-Yxy颜色模型由CIE1931-XYZ模型衍生得来。Yxy中的Y表示光的亮度,x和y则可以依据以下公式,从CIE1931-XYZ模型换算而来:
这个模型投影到x-y平面上,即得到图2-10中的CIE1931-XYZ色度图,其中x、y分量的取值范围是[0,1]。有时该模型也被称为CIE-xyY。
2.4 伽马校正和sRGB颜色空间
韦伯-费希纳定律:由德国生理学家韦伯·费希纳所发现的描述人的心理量和物理量。
式中,k为常数;ΔI为差别阈限;I为标准刺激强度。
韦伯发现,同一个刺激差别量必须达到一定比例才能引起差别感觉,这一比例就是式(2-23)中的常数k。
2.4.1 伽马校正
人们经过大量的实践研究得到,在亮度领域,人眼的伽马值约为1/2.2,其幂函数图像也接近于指数值(伽马值)为1/2的曲线。
之所以会存在伽马校正这样一个概念,是因为:①基于韦伯-费希纳定律所揭示的原因,人对颜色暗部细节变化的感觉要比对明部细节变化敏感得多;②由于存储空间的限制,只能在有限数量的存储空间中存放尽可能多的颜色数据,而且要使得这一系列颜色变化得均匀,需要在对颜色数据进行编码时尽可能地进行调整,以保留暗部细节。该调整过程就是伽马校正。
2.4.2 sRGB颜色空间
sRGB颜色空间是惠普公司与微软公司于1996年一起开发的用于显示器、打印机及互联网图像存储的一种标准RGB颜色空间。
sRGB定义了红色、绿色与蓝色三原色的颜色,即在其他两种颜色值都为0时该颜色的最大值。
2.4.3 Unity 3D中的伽马空间和线性空间
Unity 3D有两个颜色空间(color space),即伽马空间(gamma space)和线性空间(linear space);以及基于这两种颜色空间所定义的工作流,即伽马工作流(gamma workflow)和线性工作流(linear workflow)。
选用指数值为1的线性函数对其进行变换,得到的是依然呈线性分布的主观反射率(或目标颜色),称这些目标颜色构成的颜色空间为线性空间。
选用一个指数值不为1的幂函数,把源颜色变换成目标颜色时,称这些目标颜色构成的颜色空间为伽马空间。
虽然长久以来伽马空间是标准的开发用颜色空间,但使用线性颜色空间将能得到更精确的渲染结果。
如果选择使用线性工作流,那么存储了颜色数据的纹理无论是在线性空间或伽马空间中创建的,都能正常工作。基于历史原因,图片文件中保存的颜色数据很多都已经转换到了伽马空间。而在渲染时,渲染器则需要使用基于线性空间的颜色数据,所以直接使用这些在伽马空间中的颜色数据会导致结果不准确。因此,在渲染计算时,需要使用sRGB采样器,这种采样器在对纹理采样过程中能把颜色数据从伽马空间转换到线性空间。
Unity 3D引擎的计算生成光照贴图过程始终是在线性空间中完成的,而计算结果则变换到伽马空间后存储到光照贴图文件中去,即无论当前的工作流是线性工作流或者伽马工作流,Unity 3D引擎所生成的光照纹理都是相同的。
在线性工作流下,且未使用HDR时,将使用特殊的帧缓冲器类型以支持sRGB读取和sRGB写入(读取时从伽马空间转换为线性空间,写入时则相反)。当此帧缓冲区用于混合或作为纹理绑定时,在使用之前将这些值转换为线性空间。写入这些缓冲区时,正在写入的值将从线性空间转换为伽马空间。如果以线性模式和非HDR模式进行渲染,则所有后期处理特效的源缓冲区和目标缓冲区都将启用sRGB读到和写入,以便后期处理和后期处理混合发生在线性空间中。
在线性工作流下,如果提供给渲染器的纹理文件中的颜色数据原本就是基于线性空间,那需要设置此纹理文件禁用sRGB采样。
如果当前的是伽马工作流,那么选中与取消选中sRGB(Color Texture)复选框都是没有意义的,因为在伽马工作流下是不会进行sRGB采样。另外,如果这些纹理是用来当作数据查找表,或者说是一个法线贴图,也不应对其进行校正,而是保持数据的原有值。
虽然使用线性工作流能确保得到更精确的渲染画面,但若有些平台上的硬件只支持伽马空间,就不得不需要使用伽马工作流。当使用伽马工作流时,尽管用来计算的纹理颜色数据是在伽马空间中存储的,采样器在采样过程中也不会将其转换到线性空间中去。但Unity 3D着色器的计算代码依然以计算线性空间颜色的方法去计算处理这些被编码成伽马空间中的颜色数据,而且为了确保一个最终可接受的渲染结果,引擎会在向最终显示给用户看的帧缓冲区写入颜色数据时调整一些不匹配(mismatched)的值,而且在这个调整过程中不做伽马校正。