《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/sr⋅m2
其中,辐亮度(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/(sr⋅m2)光度学单位光通量(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=1−x−y
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