《Real-Time Rendering》第四版学习笔记——Chapter 8 Light and Color

Posted 董小虫

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了《Real-Time Rendering》第四版学习笔记——Chapter 8 Light and Color相关的知识,希望对你有一定的参考价值。

一、光的单位

用精确的方法量化光,是基于物理渲染的第一步。

  • 辐射度量学(Radiometry):关注点为光的物理传播
  • 光度学(Photometry):处理根据人眼敏感度加权的光的值
  • 色度学(Colorimetry):对于物理刺激的心理知觉

1.1 辐射度量学(Radiometry)

用于测量电磁辐射。

辐射度量学单位用于测量电磁辐射的各个方面:总能量、功率,以及参考面积、角度或二者的功率密度;下表总结了各个单位

名称 标记 单位 辐射通量  r a d i a n t   f l u x Φ w a t t   ( W ) 辐照度  i r r a d i a n c e E W / m 2 辐射强度  r a d i a n t   i n t e n s i t y I W / s r 辐亮度  r a d i a n c e L W / s r ⋅ m 2 \\beginarray|c|c|c| \\hline 名称 & 标记 & 单位 \\\\ \\hline 辐射通量\\ radiant\\ flux & \\Phi & watt\\ (\\mathrmW) \\\\ \\hline 辐照度\\ irradiance & E & \\mathrmW/m^2 \\\\ \\hline 辐射强度\\ radiant\\ intensity & I & \\mathrmW/sr \\\\ \\hline 辐亮度\\ radiance & L & \\mathrmW/sr\\cdot m^2 \\\\ \\hline \\endarray 名称辐射通量 radiant flux辐照度 irradiance辐射强度 radiant intensity辐亮度 radiance标记ΦEIL单位watt (W)W/m2W/srW/srm2

其中,辐亮度(Radiance)是眼睛、相机、传感器等测量光量的单位;所以在渲染中,辐亮度是最为首要的单位。计算着色方程的目的也是计算从表面着色点到相机方向的辐亮度。

在渲染方程中,辐亮度通常以 L o ( x ,   d ) \\mathrmL_o(\\mathbfx,\\ \\mathbfd) Lo(x, d) L i ( x ,   d ) \\mathrmL_i(\\mathbfx,\\ \\mathbfd) Li(x, d)的形式出现,表示从 x \\mathbfx x点,沿着 d \\mathbfd d方向射出或射入的辐亮度。

辐亮度的一个重要性质是,不受距离影响。也就是说,无论表面点到相机的距离如何,其辐亮度都是相同的。

1.2 光度学(Photometry)

辐射度量学是完全的物理单位,不受人眼的影响;而光度学与辐射度量学相关,但是引入了人眼的敏感度。二者之间的转换仅仅是乘一个CIE光度学曲线。

辐射度量学和光度学的单位是一一对应的,如下表:

辐射度量学单位 光度学单位 辐射通量: W 光通量( l u m i n o u s   f l u x ): l u m e n   ( l m ) 辐照度: W / m 2 照度( i l l u m i n o u s ): l u x   ( l x ) 辐射强度: W / s r 光度( l u m i n o u s   i n t e n s i t y ): c a n d e l a   ( c d ) 辐亮度: W / ( s r ⋅ m 2 ) 辉度( l u m i n a n c e ): c d / m 2 = n i t \\beginarray|c|c| \\hline 辐射度量学单位 & 光度学单位 \\\\ \\hline 辐射通量:\\mathrmW & 光通量(luminous\\ flux):\\mathrmlumen\\ (lm) \\\\ \\hline 辐照度:\\mathrmW/m^2 & 照度(illuminous):\\mathrmlux\\ (lx) \\\\ \\hline 辐射强度:\\mathrmW/sr & 光度(luminous\\ intensity):\\mathrmcandela\\ (cd) \\\\ \\hline 辐亮度:\\mathrmW/(sr\\cdot m^2) & 辉度(luminance):\\mathrmcd/m^2=nit \\\\ \\hline \\endarray 辐射度量学单位辐射通量:W辐照度:W/m2辐射强度:W/sr辐亮度:W/(srm2)光度学单位光通量(luminous flux):lumen (lm)照度(illuminous):lux (lx)光度(luminous intensity):candela (cd)辉度(luminance):cd/m2=nit

其中,辉度通常用于描述平面的亮度。

1.3 色度学

色度学处理的是光谱能量分布和颜色感知之间的关系。

人类的视网膜只有三种不同的视锥细胞。所以对于给定的光谱能量分布,人类眼睛只能感受到三种信号。

CIE通过近似单色的645nm的r,526nm的g和444nm的b三种光来模拟各种颜色,其权重范围是 [ − 1 , 1 ] [-1,1] [1,1]。颜色匹配函数(Color-matching function)是关联一组rgb权重值和特定的频率的函数。通过颜色匹配函数,可以将光谱能量分布转换为三个值。

加权的rgb三色光无法直接表示所有可见光,因为其中有负权重值。CIE使用一组假设的光源来进行颜色匹配,使得其权重可以全为正数。这些曲线是可以由原本的rgb函数线性组合。这些颜色匹配函数记为 x ˉ ( λ ) ,   y ˉ ( λ ) ,   z ˉ ( λ ) \\barx(\\lambda),\\ \\bary(\\lambda),\\ \\barz(\\lambda) xˉ(λ), yˉ(λ), zˉ(λ),其中 y ˉ ( λ ) \\bary(\\lambda) yˉ(λ)与光度学曲线相同。通过这些函数可以使光谱分布函数降至三维:
X = ∫ 380 780 s ( λ ) x ˉ ( λ ) d λ ,   Y = ∫ 380 780 s ( λ ) y ˉ ( λ ) d λ ,   Z = ∫ 380 720 s ( λ ) z ˉ ( λ ) d λ X=\\int_380^780s(\\lambda)\\barx(\\lambda)d\\lambda,\\ Y=\\int_380^780s(\\lambda)\\bary(\\lambda)d\\lambda,\\ Z=\\int_380^720s(\\lambda)\\barz(\\lambda)d\\lambda X=380780s(λ)xˉ(λ)dλ, Y=380780s(λ)yˉ(λ)dλ, Z=380720s(λ)zˉ(λ)dλ

这个XYZ定义的权重称为CIE XYZ颜色空间。这个颜色空间可以很方便的分离出亮度和色度;色度是亮度无关的颜色的特性。将颜色投影到 X + Y + Z = 1 X+Y+Z=1 X+Y+Z=1平面,可以得到二维色度;在此坐标系内到坐标为 x , y x,y x,y,根据如下公式计算:
x = X X + Y + Z ,   y = Y X + Y + Z ,   z = 1 − x − y x=\\cfracXX+Y+Z,\\ y=\\cfracYX+Y+Z,\\ z=1-x-y x=X+Y+ZX, y=X+Y+ZY, z=1xy
x , y x,y x,y色度坐标值称为CIE 1931色度图。

图中曲线勾勒出的部分是可见光的光谱所在;连接曲线两端的直线,称为紫色线(purple line);黑点指示的D65发光物的色调,通常用作“白点(white point)”,即定义白色或无色调(achromatic)。

给定一点 ( x , y ) (x,y) (x,y),从白点向该点射出一条线,直到边界;那么该点与边界的相对距离则为该颜色的激发纯度(excitation purity);边界上的点定义了主要波长(dominant wavelength)。一般情况下,会用饱和度(saturation)和色调(hue)来代替。

为了完整描述一个颜色,需要第三个维度:Y,用于表示亮度;即xyY坐标系统。

色度图上的三角形表示了显示器的色域,其三个顶点表示了显示器的主色(primary),分别是其能够显示的最饱和的红绿蓝;白点表示了当RGB三个颜色值都相等时,所混合的色度。需要注意的是,一个显示系统所能显示的全部色域是三维的体积,色度图仅仅是这个三维体积的二维投影。

在渲染领域,有多个可用的RGB空间;每个RGB空间由其R、G、B主色和一个白点定义。为了比较不同的RGB空间,一般会使用一个与之前不同的色度图,称为CIE 1976 UCS(归一化色度比例);如图所示:

图中的sRGB空间是渲染领域最常用的色彩空间。注意:此处的“sRGB色彩空间”指的是线性色彩空间,与非线形的“sRGB颜色编码”不是一回事。

从RGB颜色空间到XYZ空间的转换是线性的,并且可以用矩阵来表示;该矩阵可以从RGB主色和白点来推导出来。而且由于矩阵的可逆性和连接性质,那么从XYZ空间转换到任何RGB空间,或者不同RGB空间之间的转换矩阵是可以推导出来的。

一个经常使用的变换是将RGB颜色转换为一个灰度亮度值;而亮度值和Y系数相同,那么该转换其实就是RGB-to-XYZ中的Y部分转换,也就是变换矩阵的中间行和RGB系数的点乘。在sRGB色彩空间中,该计算为:
Y = 0.2126 R + 0.7152 G + 0.0722 B Y=0.2126R+0.7152G+0.0722B Y=0.2126R+0.7152G+0.0722B

色度学可以告诉我们两个颜色如何匹配,但是无法预测其外观。一个XYZ颜色刺激还很大程度上依赖于其他的因素,例如光照、周围颜色及前置条件。颜色外观模型(Color apperance models, CAM)就是为了解决这个问题。

1.4 使用RGB颜色渲染

严格来说,R

以上是关于《Real-Time Rendering》第四版学习笔记——Chapter 8 Light and Color的主要内容,如果未能解决你的问题,请参考以下文章

《Real-Time Rendering》第四版学习笔记——Chapter 4 Transforms

《Real-Time Rendering》第四版学习笔记——Chapter 9 Physically Based Shading

《Real-Time Rendering》第四版学习笔记——Chapter 9 Physically Based Shading

《Real-Time Rendering》第四版学习笔记——Chapter 4 Transforms

《Real-Time Rendering》第四版学习笔记——Chapter 4 Transforms

《Real-Time Rendering》第四版学习笔记——Chapter 2 The Graphics Rendering Pipeline