PBR反射率公式推导过程 | 您所在的位置:网站首页 › 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⋅ω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+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 |
CopyRight 2018-2019 实验室设备网 版权所有 |