反射率公式
L o ( p , ω o ) = ∫ Ω f r ( p , ω i , ω o ) L i ( p , ω i ) n ⋅ ω i d ω i L_o(p,\omega_o) = \int\limits_{\Omega} f_r(p,\omega_i,\omega_o) L_i(p,\omega_i) n \cdot \omega_i d\omega_i Lo(p,ωo)=Ω∫fr(p,ωi,ωo)Li(p,ωi)n⋅ωidωi
辐射率L解析
L
i
(
p
,
ω
i
)
L_i(p,\omega_i)
Li(p,ωi)在指定方向上的单位立体角和垂直此方向的单位面积上的辐射通量。
能量
Q
=
h
c
λ
Q = \frac{hc}{\lambda}
Q=λhc
一个波长为
λ
\lambda
λ的光子携带的能量。
h
h
h:普朗克常数,
c
c
c:光速
辐射通量
在单位时间通过表面的能量
Φ
=
Δ
Q
Δ
t
\Phi = \frac{\Delta Q}{\Delta t}
Φ=ΔtΔQ
辐照度
单位面积到达表面的通量
E
=
Δ
Φ
Δ
A
E = \frac{\Delta \Phi}{\Delta A}
E=ΔAΔΦ
A 面积
任意球面的极小面积
Δ
A
=
(
r
s
i
n
θ
)
(
r
Δ
θ
)
=
r
2
(
s
i
n
θ
Δ
θ
Δ
ϕ
)
\Delta A = (r sin\theta)(r \Delta \theta) = r^2 (sin\theta \Delta \theta \Delta \phi)
ΔA=(rsinθ)(rΔθ)=r2(sinθΔθΔϕ)
极小立体角
Δ
ω
=
Δ
A
r
2
=
s
i
n
θ
Δ
θ
Δ
ϕ
\Delta \omega = \frac{\Delta A}{r^2} = sin\theta \Delta\theta \Delta\phi
Δω=r2ΔA=sinθΔθΔϕ
由前面的计算推出辐射率公式
L
(
p
,
ω
)
=
l
i
m
Δ
ω
→
0
Δ
E
ω
(
p
)
Δ
ω
=
d
d
ϕ
d
A
d
o
m
e
g
a
=
d
2
Φ
d
ω
d
A
L(p, \omega) = lim_{\Delta \omega \to 0} \frac{\Delta E_\omega(p)}{\Delta \omega} = \frac{d \frac{d \phi}{d A}}{d omega} = \frac{d^2 \Phi}{d\omega dA}
L(p,ω)=limΔω→0ΔωΔEω(p)=domegaddAdϕ=dωdAd2Φ
这里的
d
A
dA
dA应该与立体角
ω
\omega
ω垂直,所以应该乘以
c
o
s
θ
cos \theta
cosθ。所以最终的辐射率公式:
L
(
p
,
ω
)
=
d
2
Φ
d
ω
d
A
c
o
s
θ
L(p, \omega) = \frac{d^2 \Phi}{d\omega dA cos\theta}
L(p,ω)=dωdAcosθd2Φ
BRDF 双向反射分布函数
反射率公式中的
f
r
f_r
fr中是BRDF,反映了光线对平面最终反射出的光线所作出的贡献。
ω
i
\omega_i
ωi入射光,
ω
o
\omega_o
ωo观察方向,
n
n
n法线,
α
\alpha
α粗糙度
f
r
=
k
d
f
l
a
m
b
e
r
t
+
k
s
f
c
o
o
k
−
t
o
r
r
a
n
c
e
f_r = k_d f_{lambert} + k_s f_{cook-torrance}
fr=kdflambert+ksfcook−torrance
k
d
k_d
kd是入射光线中被折射部分的能量所占的比率,
k
s
k_s
ks是被反射部分的比率。
BRDF的左侧表示漫反射部分
f
l
a
m
b
e
r
t
=
c
π
f_{lambert} = \frac{c}{\pi}
flambert=πc
c
c
c表示颜色, 除以
π
\pi
π是为了对漫反射光进行标准化。
** 镜面反射部分**
BRDF的右侧是镜面反射部分
f
c
o
o
k
−
t
o
r
r
a
n
c
e
=
D
F
G
4
(
ω
o
⋅
n
)
(
ω
i
⋅
n
)
f_{cook-torrance} = \frac{DFG}{4(\omega_o \cdot n)(\omega_i \cdot n)}
fcook−torrance=4(ωo⋅n)(ωi⋅n)DFG
法线分布函数(D)(Normal Distribution Function):估算在受到表面粗糙度的影响下,取向方向与中间向量一致的微平面的数量。这是用来估算微平面的主要函数。
几何函数(G)(Geometry Function):描述了微平面自成阴影的属性。当一个平面相对比较粗糙的时候,平面表面上的微平面有可能挡住其他的微平面从而减少表面所反射的光线。
菲涅尔方程(F)(Fresnel Rquation):菲涅尔方程描述的是在不同的表面角下表面所反射的光线所占的比率。
法线分布函数
N
D
F
G
G
X
T
R
(
n
,
h
,
α
)
=
α
2
π
(
(
n
⋅
h
)
2
(
α
2
−
1
)
+
1
)
2
NDF_{GGX TR}(n, h, \alpha) = \frac{\alpha^2}{\pi((n \cdot h)^2 (\alpha^2 - 1) + 1)^2}
NDFGGXTR(n,h,α)=π((n⋅h)2(α2−1)+1)2α2
h
h
h中间向量,
α
\alpha
α粗糙度
几何函数
G
S
c
h
l
i
c
k
G
G
X
(
n
,
v
,
k
)
=
n
⋅
v
(
n
⋅
v
)
(
1
−
k
)
+
k
G_{SchlickGGX}(n, v, k) = \frac{n \cdot v}{(n \cdot v)(1 - k) + k}
GSchlickGGX(n,v,k)=(n⋅v)(1−k)+kn⋅v
k
k
k是
α
\alpha
α基于几何函数是针对直接光照还是针对IBL光照的重映射
k
d
i
r
e
c
t
=
(
α
+
1
)
2
8
k_{direct} = \frac{(\alpha + 1)^2}{8}
kdirect=8(α+1)2
k
I
B
L
=
α
2
2
k_{IBL} = \frac{\alpha^2}{2}
kIBL=2α2
菲涅尔方程
F
S
c
h
l
i
c
k
(
h
,
v
,
F
0
)
=
F
0
+
(
1
−
F
0
)
(
1
−
(
h
⋅
v
)
)
5
F_{Schlick}(h, v, F_0) = F_0 + (1 - F_0) ( 1 - (h \cdot v))^5
FSchlick(h,v,F0)=F0+(1−F0)(1−(h⋅v))5
F
0
F_0
F0表示平面的基础反射率, 利用折射指数计算所得。
反射率方程最终公式
L o ( p , ω o ) = ∫ Ω ( k d c π + k s D F G 4 ( ω o ⋅ n ) ( ω i ⋅ n ) ) L i ( p , ω i ) n ⋅ ω i d ω i L_o(p,\omega_o) = \int\limits_{\Omega} (k_d\frac{c}{\pi} + k_s\frac{DFG}{4(\omega_o \cdot n)(\omega_i \cdot n)})L_i(p,\omega_i) n \cdot \omega_i d\omega_i Lo(p,ωo)=Ω∫(kdπc+ks4(ωo⋅n)(ωi⋅n)DFG)Li(p,ωi)n⋅ωidωi