计算机图形学
计算机图形学学习taab
澄清本质
目标
提问&收集信息
分解步骤
标准化
https://www.zhihu.com/question/41468803
http://www.kevinbeason.com/smallpt/
基于物理着色:BRDF - 知乎.pdf1.66 MB
辐射通量(Radiant Flux)或者通量(Flux),指单位时间内通过表面或者空间区域的能量的总和
用符号\Phi 表示,定义\Phi=\frac{dQ}{dt} 。 Q是能量
辐照度(Irradiance),指单位时间内到达单位面积的辐射能量,或到达单位面积的辐射通量,也就是通量对于面积的密度。用符号E表示。定义为E=\frac{d\Phi}{dA} 。
辐出度(Radiant Existance),也称为辐射出射度、辐射度(Radiosity),用符号M表示。辐出度与辐照度类似,唯一的区别在辐出度衡量的是离开表面的通量密度,辐照度衡量的是到达表面的通量密度。辐照度和辐出度都可以称为辐射通量密度(Radiant Flux Density)。
也就是说通量密度与距离的平方成反比,离光源越远,通量密度越低,这也是为什么光的衰减与距离的平方成正比。
辐射强度(Radiant Intensity),指通过单位立体角的辐射通量。用符号 I 表示,定义为I = \frac{d\Phi}{d\omega} 。之所以引入辐射强度,是因为有时候要度量通过一个点的通量的密度,但因为点的面积是0,无法使用辐照度,所以引入辐射强度。辐射强度不会随距离变化而变化,不像点光源的辐照度会随距离增大而衰减,这是因为立体角不会随距离变化而变化。
辐射率, (入射辐射率)是衡量照在微分面积上的来自微分立体角的光线的辐射通量的物理量 L=\frac{d\Phi}{d\omega dA^\bot}
(出射辐射率)从一个微小面积表面出发,射向某个微小立体角的通量
辐射率不会随距离变化而衰减,这和我们日常感受一致,在没有雾霾的干扰时,我们看到的物体表面上一点的颜色并不会随距离变化而变化。为什么辐照度会随距离增大而衰减,但是我们看到的颜色却不会衰减呢?这是因为随着距离变大,我们看到的物体上的一块区域到达视网膜的通量密度会变小,同时这块区域在视网膜表面上的立体角也会变小,正好抵消了通量密度的变化。
BRDF(Bidirectional Reflectance Distribution Function)就是描述表面入射光和反射光关系的。
f(l,v)=\frac{dL_0(v)}{dE(l)}
其中[InvalidCharacterError: "SPA<SPAN" did not match the Name production] class="formula-content">f 就是BRDF,l 是入射光方向,v 是观察方向,也就是我们关心的反射光方向。
dL_0(v) 是表面反射到v 方向的反射光的微分辐射率。特指来自方向ll 的入射光贡献的反射辐射率。
表面反射到v 方向的反射光的辐射率为L_0(v) ,来自于表面上半球所有方向的入射光线的贡献,
dE(l) 是表面上来自入射光方向l 的微分辐照度。特指来自于方向l 的入射光。
表面接收到的辐照度为E(l) ,来自上半球所有方向的入射光线的贡献.
L_i(l) = \frac{d\Phi}{d\omega_i dA^\bot} = \frac{d\Phi}{d\omega_i
dA\cos\theta_i } = \frac{dE(l)}{d\omega_i \cos\theta_i}
dE(l) = L_i(l)d\omega_i \cos\theta_i
dL_0(v) = f(l,v) \bigotimes dE(l) = f(l,v) \bigotimes L_i(l) d\omega_i \cos\theta_i
表示按向量的分量相乘,因为 和 都包含RGB三个分量
要计算表面反射到v 方向的来自上半球所有方向入射光线贡献的辐射率,可以将上式对半球所有方向的光线积分:
L_0(v) = \int_\Omega f(l,v) \bigotimes L_i(l) d\omega_i \cos\theta_i
上式称为反射方程(Reflectance Equation),用来计算表面反射辐射率。
对于点光源、方向光等理想化的精准光源(Punctual Light),计算过程可以大大简化。我们考察单个精准光源照射表面,此时表面上的一点只会被来自一个方向的一条光线照射到。则辐射率:
L_0(v) = f(l,v) \bigotimes E_L \cos\theta_i
对于多个精准光源,只需简单累加就可以了:
L_0(v) = \sum_{k=1}^n f(l_k,v) \bigotimes E_{L_k} \cos\theta_{i_k}
微表面理论(Microfacet Theory)认为我们看到的表面上的一点是由很多朝向各异且光学平的微小表面组成。
如下图:是表明上一个点的微表面。
我们用法线分布函数(Normal Distribution Function,简写为NDF)D(h) 来描述组成表面一点的所有微表面的法线分布概率,现在可以这样理解:向NDF输入一个朝向 h,NDF会返回朝向是 h 的微表面数占微表面总数的比例, 比如有1%的微表面朝向是 h ,那么就有1%的微表面可能将光线反射到 v 方向。
下面左边的图有一部分入射光线被遮挡住,这种现象称为Shadowing。
下面中间的图,一部分反射光线被遮挡住了,这种现象称为Masking。
下面右边的图,光线在微表面之间还会互相反射,这可能也是一部分漫射光的来源,在建模高光时忽略掉这部分光线。
Shadowing和Masking用几何衰减因子(Geometrical Attenuation Factor)[InvalidCharacterError: "S<" did not match the Name production] 来建模,输入入射和出射光线方向,输出值表示光线未被遮蔽而能从 l 反射到 v 方向的比例。
光学平面并不会将所有光线都反射掉,而是一部分被反射,一部分被折射,反射比例符合菲涅尔方程(Fresnel Equations)[InvalidCharacterError: "S<" did not match the Name production] 。
Torrance-Sparrow基于微表面理论,用上述三个函数建立了高光BRDF模型:
f(l,v)=\frac{F(l,h)G(l,v)D(h)}{4\cos\theta_i \cos\theta_o} = \frac{F(l,h)G(l,v)D(h)}{4(n\cdot l)(n\cdot v)}
其中n是宏观表面法线,h是微表面法线
这个模型后来由Cook-Torrance引入计算机图形学,也被称为Cook-Torrance模型。
TODO: Cook-Torrance模型公式推导