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ω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 ω = 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)=dωddAdϕ=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+ksfcooktorrance
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)} fcooktorrance=4(ωon)(ωin)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,α)=π((nh)2(α21)+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)=(nv)(1k)+knv
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+(1F0)(1(hv))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(ωon)(ωin)DFG)Li(p,ωi)nωidωi

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值