《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(一)
《Real-Time Rendering》第四版学习笔记——Chapter 9 Physically Based Shading(二)
十、布料的BRDF
由于纤维的类型特点,会有高度重复的编织微结构,和垂直于表面伸出的线头。所以需要特殊的着色模型,如各向异性的高光、粗糙的散射、随视角变化的颜色变动。
大部分纤维有高频的空间变化。
布料的BRDF模型有三大类:通过观察的经验模型、基于微表面理论的模型、微柱体(micro-cylinder)模型。
10.1 经验布料模型
游戏《Uncharted 2》模型:
f
d
i
f
f
(
l
,
v
)
=
ρ
s
s
π
(
k
r
i
m
(
(
v
⋅
n
)
+
)
α
r
i
m
+
k
i
n
n
e
r
(
1
−
(
v
⋅
n
)
+
)
α
i
n
n
e
r
+
k
d
i
f
f
)
f_\\mathrmdiff(\\mathbf l,\\mathbf v)=\\cfrac\\rho_\\mathrmss\\pi\\left(k_\\mathrmrim\\left((\\mathbf v\\cdot\\mathbf n)^+\\right)^\\alpha_\\mathrmrim+k_\\mathrminner\\left(1-(\\mathbf v\\cdot\\mathbf n)^+\\right)^\\alpha_\\mathrminner+k_\\mathrmdiff\\right)
fdiff(l,v)=πρss(krim((v⋅n)+)αrim+kinner(1−(v⋅n)+)αinner+kdiff)
其中
k
r
i
m
,
k
i
n
n
e
r
,
k
d
i
f
f
k_\\mathrmrim,\\ k_\\mathrminner,\\ k_\\mathrmdiff
krim, kinner, kdiff是用户控制的标量,分别用来控制轮廓光项、照亮前向(内部)表面的项、朗伯项;
α
r
i
m
,
α
i
n
n
e
r
\\alpha_\\mathrmrim,\\ \\alpha_\\mathrminner
αrim, αinner用于控制轮廓、内部项的衰减;
《Uncharted 4》根据布料类型,使用微表面或微柱体模型来计算高光项,使用“包围光(wrap lighting)”经验次表面散射近似来计算漫反射项目:
f
d
i
f
f
(
l
,
v
)
(
n
⋅
l
)
+
⇒
ρ
s
s
π
(
c
s
c
a
t
t
e
r
+
(
n
⋅
l
)
+
)
∓
(
n
⋅
l
+
w
)
∓
1
+
w
f_\\mathrmdiff(\\mathbf l,\\mathbf v)(\\mathbf n\\cdot\\mathbf l)^+\\Rightarrow\\cfrac\\rho_\\mathrmss\\pi\\left(\\mathbf c_\\mathrmscatter+(\\mathbf n\\cdot\\mathbf l)^+\\right)^\\mp\\cfrac(\\mathbf n\\cdot\\mathbf l+w)^\\mp1+w
fdiff(l,v)(n⋅l)+⇒πρss(cscatter+(n⋅l)+)∓1+w(n⋅l+w)∓
在BRDF中,使用箭头右侧代替左侧,
c
s
c
a
t
t
e
r
\\mathbf c_\\mathrmscatter
cscatter是用户定义的散射颜色,
w
w
w是取值范围
[
0
,
1
]
[0,1]
[0,1]的参数,用于控制包围光的宽度。
Disney加入一个光泽项到漫反射BRDF项,来模拟粗糙散射:
f
s
h
e
e
n
(
l
,
v
)
=
k
s
h
e
e
n
c
s
h
e
e
n
(
1
−
(
h
⋅
l
)
+
)
5
f_\\mathrmsheen(\\mathbf l,\\mathbf v)=k_\\mathrmsheen\\mathbf c_\\mathrmsheen\\left(1-(\\mathbf h\\cdot\\mathbf l)^+\\right)^5
fsheen(l,v)=ksheencsheen(1−(h⋅l)+)5
10.2 微表面布料模型
游戏《The Order: 1886》使用的天鹅绒NDF:
D
(
m
)
=
χ
+
(
n
⋅
m
)
π
(
1
+
k
a
m
p
α
2
)
(
1
+
k
a
m
p
exp
(
(
n
⋅
m
)
2
α
2
(
(
n
⋅
m
)
2
−
1
)
)
(
1
−
(
n
⋅
m
)
2
)
2
)
D(\\mathbf m)=\\cfrac\\chi^+(\\mathbf n\\cdot\\mathbf m)\\pi(1+k_\\mathrmamp\\alpha^2)\\left(1+\\cfrack_\\mathrmamp\\exp\\left(\\frac(\\mathbf n\\cdot\\mathbf m)^2\\alpha^2\\left((\\mathbf n\\cdot\\mathbf m)^2-1\\right)\\right)\\left(1-(\\mathbf n\\cdot\\mathbf m)^2\\right)^2\\right)
D(m)=π(1+kampα2)χ+(n⋅m)⎝⎛1+(1−(n⋅m)2)2kampexp(α2((n⋅m)2−1)(n⋅m)2)⎠⎞
其中,
α
\\alpha
α控制逆高斯的宽度,
k
a
m
p
k_\\mathrmamp
kamp控制其振幅;其完整的布料BRDF为:
f
(
l
,
v
)
=
(
1
−
F
(
h
,
l
)
)
ρ
s
s
π
+
F
(
h
,
l
)
D
(
h
)
4
(
n
⋅
l
+
n
⋅
v
−
(
n
⋅
l
)
(
n
⋅
v
)
)
f(\\mathbf l,\\mathbf v)=\\left(1-F(\\mathbf h,\\mathbf l)\\right)\\cfrac\\rho_\\mathrmss\\pi+\\cfracF(\\mathbf h,\\mathbf l)D(\\mathbf h)4\\left(\\mathbf n\\cdot\\mathbf l+\\mathbf n\\cdot\\mathbf v-(\\mathbf n\\cdot\\mathbf l)(\\mathbf n\\cdot\\mathbf v)\\right)
f(l,v)=(1−F(h,l))πρss+4(n⋅l+n⋅v−(n⋅l)(n《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