《Real-Time Rendering》第四版学习笔记——Chapter 9 Physically Based Shading
Posted 董小虫
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了《Real-Time Rendering》第四版学习笔记——Chapter 9 Physically Based Shading相关的知识,希望对你有一定的参考价值。
上接文章:《Real-Time Rendering》第四版学习笔记——Chapter 9 Physically Based Shading(一)
六、微观几何
每个可见的表面点都包含了很多为表面的法线,每个法线都会将光反射到不同方向。因为这些方向都是随机的,所以可以使用统计学分布来表示。这个分布是连续的,并且在宏观表面法线处有明显峰值。分布越“紧凑”,表面越光滑;分布越“平坦”,表面越粗糙。
因微观尺度的粗糙度上升而引起的视觉效果是,使反射的环境细节更加模糊。统计形态的不同,使得聚合高光的形状也不同。
对于大部分表面,微观表面法线分布是各向同性的,也就是说是旋转对称的,无内在的方向性。而各向异性的表面在不同方向上,微观表面法线分布不同,这导致模糊和高光在不同方向上不同。
一些表面有高度结构化的微几何,这使得微法线分布和表面外观呈现出很大的不同,如纤维就是最常见的情况。
除了不同的表面法线外,微几何也会产生其他的影响,如阴影(shadowing)和遮挡(masking),如图所示:
阴影和遮挡会很大程度上改变法线分布。对于所有的表面类型,当入射角
θ
i
\\theta_i
θi增大时,宏观层面上的不规则度会降低。结合菲涅尔效应,使得在观察角度和光线角度都接近
9
0
ο
90^\\operatorname\\omicron
90ο时,表面会变得高度反光,产生类似镜面的效果。
被微表面遮挡的光线不会消失,而是可能经过多次弹射后进入眼睛。
如果微表面的尺寸大于次表面散射的距离,那么阴影和遮挡会导致逆反射(retroreflection)效应,即光线会被反射回入射方向。
七、微表面理论
微表面理论(Microfacet)是对微几何的反射率的数学分析。微表面理论的基础是,将微几何体建模为微表面的集合。
每个微表面都是平坦的,有单独的法线 m \\mathbf m m;并且根据微BRDF f μ ( l , v , m ) f_\\mu(\\mathbf l,\\mathbf v,\\mathbf m) fμ(l,v,m)单独反射光线,最后将所有的反射率相加,得到总的表面BRDF。
微表面法线分布定义为表面的法线分布函数(normal distribution function,NDF), D ( m ) D(\\mathbf m) D(m)。
对
D
(
m
)
D(\\mathbf m)
D(m)微表面法线的整个球面进行积分,可以得到微表面的面积。更常用的是,对
D
(
m
)
(
n
⋅
m
)
D(\\mathbf m)(\\mathbf n\\cdot\\mathbf m)
D(m)(n⋅m)(即
D
(
m
)
D(\\mathbf m)
D(m)在宏观表面上投影)进行积分,可以得到宏观表面的面积,等于
1
1
1。公式如下:
∫
m
∈
Θ
D
(
m
)
(
n
⋅
m
)
d
m
=
1
\\int_\\mathbf m\\in\\ThetaD(\\mathbf m)(\\mathbf n\\cdot\\mathbf m)d\\mathbf m=1
∫m∈ΘD(m)(n⋅m)dm=1
要注意的是,这里的积分域是整个球面。
更普遍的情况,会将微表面和宏观表面投影到垂直于视线方向
v
\\mathbf v
v的平面:
∫
m
∈
Θ
D
(
m
)
(
v
⋅
m
)
d
m
=
v
⋅
n
\\int_\\mathbf m\\in\\ThetaD(\\mathbf m)(\\mathbf v\\cdot\\mathbf m)d\\mathbf m=\\mathbf v\\cdot\\mathbf n
∫m∈ΘD(m)(v⋅m)dm=v⋅n
可见微表面的投影之和等于宏观表面的投影面积。在数学表达上,可以定义一个遮挡函数(masking function)
G
1
(
m
,
v
)
G_1(\\mathbf m,\\mathbf v)
G1(m,v),定义了在
v
\\mathbf v
v方向上可见的部分的法线
m
\\mathbf m
m;可得如下定义:
∫
∈
Θ
G
1
(
m
,
v
)
D
(
m
)
(
v
⋅
m
)
+
d
m
=
v
⋅
n
\\int_\\in\\ThetaG_1(\\mathbf m,\\mathbf v)D(\\mathbf m)(\\mathbf v\\cdot\\mathbf m)^+d\\mathbf m=\\mathbf v\\cdot\\mathbf n
∫∈ΘG1(m,v)D(m)(v⋅m)+dm=v⋅n
其中 G 1 ( m , v ) D ( m ) G_1(\\mathbf m,\\mathbf v)D(\\mathbf m) G1(m,v)D(m)称为可见法线分布(distribution of visible normals)。
满足条件的 G 1 ( m , v ) G_1(\\mathbf m,\\mathbf v) G1(m,v)函数并不唯一,因为 D ( m ) D(\\mathbf m) D(m)并不能完全定义微表面; D ( m ) D(\\mathbf m) D(m)只定义了法线指向特定方向的微表面数量,却没有定义如何排布。
只有Smith函数是唯一一个既符合上述公式,且是法线遮挡独立的(normal-masking independence)。在
m
⋅
v
≥
0
\\mathbf m\\cdot\\mathbf v\\ge 0
m⋅v≥0时,Smith函数不依赖于
m
\\mathbf m
m,其定义如下:
G
1
(
m
,
v
)
=
χ
+
(
m
⋅
v
)
1
+
Λ
(
v
)
G_1(\\mathbf m,\\mathbf v)=\\cfrac\\chi^+(\\mathbf m\\cdot\\mathbf v)1+\\Lambda(\\mathbf v)
G1(m,v)=1+Λ(v)χ+(m⋅v)
其中,
χ
+
(
x
)
\\chi^+(x)
χ+(x)是正特征函数;而
Λ
\\Lambda
Λ函数则对不同NDF有不同函数。
Smith函数的缺点:对于不同的实际表面结构,有不同的满足条件,甚至有些在物理上是无法实现的。
给定微BRDF
f
μ
(
l
,
v
,
m
)
f_\\mu(\\mathbf l,\\mathbf v,\\mathbf m)
fμ(l,v,m),法线分布函数
D
(
m
)
D(\\mathbf m)
D(m),遮挡函数
G
1
(
m
,
v
)
G_1(\\mathbf m,\\mathbf v)
G1(m,v),则宏观表面的BRDF可以表示为:
f
(
l
,
v
)
=
∫
m
∈
Ω
f
μ
(
l
,
v
,
m
)
G
2
(
l
,
v
,
m
)
D
(
m
)
(
m
⋅
l
)
+
∣
n
⋅
l
∣
(
m
⋅
v
)
+
∣
n
⋅
v
∣
d
m
f(\\mathbf l,\\mathbf v)=\\int_\\mathbf m\\in\\Omegaf_\\mu(\\mathbf l,\\mathbf v,\\mathbf m)G_2(\\mathbf l,\\mathbf v,\\mathbf m)D(\\mathbf m)\\cfrac(\\mathbf m\\cdot\\mathbf l)^+|\\mathbf n\\cdot\\mathbf l|\\cfrac(\\mathbf m\\cdot\\mathbf v)^+|\\mathbf n\\cdot\\mathbf v|d\\mathbf m
f(l,v)=∫m∈Ωfμ(l,v,m)G2(l,v,m)D(m)∣n⋅l∣(m⋅l)+∣n⋅v∣(m⋅v)+dm
这个积分是的积分域是
Ω
\\Omega
Ω,即
n
\\mathbf n
n侧的半球面;
G
2
(
l
,
v
,
m
)
G_2(\\mathbf l,\\mathbf v,\\mathbf m)
G2(l,v,m)是联合遮挡阴影函数(joint masking-shadowing function),从
G
1
(
m
,
v
)
G_1(\\mathbf m,\\mathbf v)
G1(m,v)推导而来。这使得BRDF引入了遮挡和阴影;缺点是没有微表面之间的内部反射,这使得渲染结果会显得更暗。
G 2 G_2 G2函数的几个版本:
- 最简单的形式:离散形式,即单独计算遮挡和阴影,最后在相乘, G 2 ( l , v , m ) = G 1 ( v , m ) G 1 ( l , m ) G_2(\\mathbf l,\\mathbf v,\\mathbf m)=G_1(\\mathbf v,\\mathbf m)G_1(\\mathbf l,\\mathbf m) G2(l,v,m)=G1(v,m)G1(l,m);前提是阴影和遮挡不相关,但在现实中是不可能的。在BRDF中使用,会导致过暗;
- 当微表面是高度场,且
G
2
(
l
,
v
,
m
)
=
min
(
G
1
(
v
,
m
)
,
G
1
(
l
,
m
)
)
,
when
ϕ
=
0
ο
G_2(\\mathbf l,\\mathbf v,\\mathbf m)=\\min(G_1(\\mathbf v,\\mathbf m),G_1(\\mathbf l,\\mathbf m)),\\ \\textrmwhen\\ \\phi=0^\\operatorname\\omicron
G2(l,v,m)=min(G1(v,m),G1(l,m)), when ϕ=0ο,那么可得:
G 2 ( l , v , m ) = λ ( ϕ ) G 1 ( v , m ) G 1 ( l , m ) + ( 1 − λ ( ϕ ) ) min ( G 1 ( v , m ) , G 1 ( l , m ) ) G_2(\\mathbf l,\\mathbf v,\\mathbf m)=\\lambda(\\phi)G_1(\\mathbf v,\\mathbf m)G_1以上是关于《Real-Time Rendering》第四版学习笔记——Chapter 9 Physically Based Shading的主要内容,如果未能解决你的问题,请参考以下文章
《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