其他分享
首页 > 其他分享> > PBR反射率公式推导过程

PBR反射率公式推导过程

作者:互联网

反射率公式

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⋅ωi​dω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​=kd​flambert​+ks​fcook−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​+ks​4(ωo​⋅n)(ωi​⋅n)DFG​)Li​(p,ωi​)n⋅ωi​dωi​

标签:frac,推导,PBR,cdot,反射率,alpha,Delta,theta,omega
来源: https://blog.csdn.net/men_tou/article/details/109991473