基于物理的渲染理论基础(PBR渲染)

基于物理的渲染,通俗一点说就是根据现实环境上光是如何照到物体,然后物体如何把光的颜色反射到人的眼睛的过程,通过渲染表达出来。而游戏中基于物理的渲染就是通过数学公式建模的方式来模拟(只是模拟并非完全准确)这个过程,从而达到更接近现实世界的渲染效果,显得画面更逼真。

从上面这句话的描述得知,整个物理渲染其实就用一句话最简单的话总结就是:、
求光从某个方向照射到物体后反射出来到肉眼的光。
用更具学术性的话语说就是:
求物体的双向反射分布函数,即BRDF。

因此,要在渲染上实现上面这句话,就要求我们去解开这些问题:
1、光是什么,如何用数学来量化光照。
2、物体会对光进行怎么样的反射,如何用数学来对此进行建模。
3、求出光经过物体反射后得到的光值是多少。

基于物理渲染的数学理论(推荐)

光是什么

光是一种电磁横波,以上下震荡的方式直线传播,电磁波的覆盖范围很广,但只有很小的一部分范围内(大约400到700纳米)对人类是可见的,因此着色只需要关注这部分。眼睛对光电磁波的不同频率感应为不同的颜色。
在这里插入图片描述

如何量化光

要对光进行数学量化,而光传播的本质是以电磁波辐射能量进行传播的,而辐射学(Radiometry)是用来度量电磁波辐射的学科,因此可以用辐射学来量化光的传播。

辐射学的常见基本量:

量化值 符号 单位 定义
辐射能量 (Radiant Energy) Q Q Q J J J 表面上入射的能量
辐射通量 (Radiant Flux) Φ \Phi Φ W W W J / s J/s J/s 表面上入射能量的功率
辐照度(Irradiance) E E E W / m 2 W/{\bf m}^2 W/m2 单位面积上的能量入射功率
辐射度(Radiosity) J J J W / m 2 W/{\bf m}^2 W/m2 单位面积上的能量出射功率
辐射强度(Intensity) I I I W / s r 2 W/{\bf sr}^2 W/sr2 单位立体角的辐射通量
辐射率(Radiance) L L L W / ( m 2 s r ) 2 W/({\bf m}^2{\bf sr})^2 W/(m2sr)2 每单位面积每单位立体角的辐射通量

什么是立体角:
在这里插入图片描述
立体角其实就是2D圆的弧度角扩展到3D空间的表示,如上图中 r 2 {\bf r}^2 r2即为半径为 r {\bf r} r的球的立体角,这里辐射学用的通常是单位球。用 ω {\bf \omega} ω表示立体角,单位为 s r sr sr(stereo radian)。(也有不规则的立体角,辐射学这里关注的是在单位球上形成圆边的曲面立体角)。

各个辐射学术名的关系与特点:

1、能量

能量用焦耳( J J J)衡量,光源散射光子,每个光子具有特定的波长,对应的波长携带特定的能量。所有的基本辐射量实际上都是用不同的方法对光子进行测量。一个光子在波长为 λ \lambda λ时携带的能量:
Q = h c λ Q=\frac{hc}{\lambda} Q=λhc
c c c:光速,即 299 , 472 , 458 m / s 299,472,458{\bf m/s} 299,472,458m/s
h h h:普朗克常量, h ≈ 6.626 × 1 0 − 34 m 2 k g / s h\approx6.626\times10^{-34}{\bf m}^2{\bf kg}/{\bf s} h6.626×1034m2kg/s

2、辐射通量:

Φ = Q t {\Phi}=\frac{Q}{t} Φ=tQ
d d d:微分表示符。
t t t:时间。

3、辐照度:

对于点光源, E E E有公式:
E = Φ 4 π r 2 E=\frac{\Phi}{4\pi r^2} E=4πr2Φ
在这里插入图片描述
图解:辐射通量用于测量空间上通过的能量,对于点光源,能量会随着距离的增加而递减,但总的能量保持不变。

对于平行光, E E E有公式:
E = Φ A E=\frac{\Phi}{A} E=AΦ
A A A:面积。
在这里插入图片描述

定义垂直入射光方向的辐照度:
E ⊥ = Φ A ⊥ E{_\bot}=\frac{\Phi}{A{_\bot}} E=AΦ
说明:从公式可以看出 E E E的值与面积 A A A有关,
当光线是以斜射角度入射时,光辐射同样的通量会分布到更多的面积上,根据上图有 A A A A ⊥ A{_\bot} A的关系:
A ⊥ = A c o s θ A{_\bot}=Acos\theta A=Acosθ
那么
E ⊥ = Φ A c o s θ E{_\bot}=\frac{\Phi}{Acos\theta} E=AcosθΦ
即:
E ⊥ = E c o s θ E{_\bot}=Ecos \theta E=Ecosθ

4、辐射强度:

I = d Φ d ω I= \frac{ {\bf d}\Phi}{ {\bf d}\omega} I=dωdΦ
辐射强度可以用于测量一个无限小点的辐射强度,这是指指通过单位立体角的辐射通量,所以辐射强度与距离无关。

5、辐射率:

L = d E ⊥ d ω = d Φ d ω d A ⊥ = d Φ d ω d A c o s θ L=\frac{ {\bf d}E{_\bot}}{\bf d\omega}=\frac{ {\bf d}\Phi}{ {\bf d}\omega {\bf d}A{_\bot}}=\frac{ {\bf d}\Phi}{ {\bf d}\omega {\bf d}Acos\theta} L=dωdE=dωdAdΦ=dωdAcosθdΦ
设想 ω \omega ω垂直于表面时, d A {\bf d}A dA d A ⊥ {\bf d}A{_\bot} dA在上方的投影,如下图。
在这里插入图片描述
在基于物理着色中,辐射率是最核心的量化值,上述介绍其它量化值的目的也只是为了求出辐射率。辐射率可以看成是光照射到物体后反射到眼睛的颜色值,辐射率是眼睛上最直接感受到的量化值。辐射率在传播过程中与距离无关,都能够保持数值一致,感官眼睛上最直接的感受就是在真空中,不管我们离一个物体多远,如果还在视野内,那么看到它的颜色总是保持不变的,这个颜色其实就是量化值辐射率。

BRDF

双向反射分布函数BRDF(Bidirectional Reflectance Distribution Function)
BRDF可以解释为,给定从某个方向入射的光线,BRDF给出了该光线在表面上所有反射光和散射光的分布。

眼睛观察到的物体表面的颜色,受入射光和出射光(视角)方向影响,如下图, v {\bf v} v表示出射光的单位向量, l {\bf l} l表示入射光的单位向量,BRDF函数表示为 f ( l , v ) f({\bf l},{\bf v}) f(l,v)
物体表面对光的量化函数称为BFRDF函数,在现实世界中,这个量化过程通常都是在单位半球上进行的,这样符合表面上某一点向外辐射能量的现象。那么在上述的 l {\bf l} l v {\bf v} v向量在确定某一点 p {\bf p} p上方的单位半球上则用立体角表示, l {\bf l} l v {\bf v} v分别对应 ω i \omega{_i} ωi ω o {\omega{_o}} ωo,则有
f ( l , v ) = f ( p , ω i , ω o ) f({\bf l},{\bf v})=f({\bf p}, \omega{_i},\omega{_o}) f(l,v)=f(p,ωi,ωo)
l {\bf l} l在图中这个半平面上,可以用 ϕ i \phi{_i} ϕi(方位角)和 θ i \theta{_i} θi(天顶角)确定, v {\bf v} v同理,所以有:
f ( l , v ) = f ( p , ω i , ω o ) = f ( p , ϕ i , θ i , ϕ o , θ o ) f({\bf l},{\bf v})=f({\bf p}, \omega{_i},\omega{_o})=f({\bf p},\phi{_i},\theta{_i},\phi{_o},\theta{_o}) f(l,v)=f(p,ωi,ωo)=f(p,ϕi,θi,ϕo,θo)
注意:这是一个半平面上的示意图
在这里插入图片描述
在辐射学上量化BRDF定义为出射光方向 ω o \omega{_o} ωo出射的辐射率 L o L{_o} Lo与入射光方向 ω i \omega{_i} ωi入射的辐照率 E i E{_i} Ei的比值,因此有表达式:
f ( p , ω o , ω i ) = d L o ( p , ω o ) d E i ( p , ω i ) = d L o ( p , ω o ) d E i ⊥ ( p , ω i ) c o s θ i = d L o ( p , ω o ) L i ( p , ω i ) c o s θ i d ω i f({\bf p}, \omega{_o}, \omega{_i}) =\frac{ {\bf d}L{_o}({\bf p}, \omega{_o})}{ { {\bf d}E{_i}({\bf p}, \omega{_i})}}=\frac{ {\bf d}L{_o}({\bf p}, \omega{_o})}{ { {\bf d}E{_{i\bot}}({\bf p}, \omega{_i})}cos\theta{_i}}=\frac{ {\bf d}L{_o}({\bf p}, \omega{_o})}{L{_i}({\bf p}, \omega{_i})cos\theta{_i}{\bf d}\omega{_i}} f(p,ωo,ωi)=dEi(p,ωi)dLo(p,ωo)=dEi(p,ωi)cosθidLo(p,ωo)=Li(p,ωi)cosθidωidLo(p,ωo)
所以根据BRDF求得出微分辐射率:
d L o ( p , ω o ) = f ( p , ω o , ω i ) ⊗ L i ( p , ω i ) ∣ c o s θ i ∣ d ω i {\bf d}L{_o}({\bf p}, \omega{_o})= f({\bf p},\omega{_o}, \omega{_i})⊗L{_i}({\bf p}, \omega{_i})|cos\theta{_i}|{\bf d}\omega {_i} dLo(p,ωo)=f(p,ωo,ωi)Li(p,ωi)cosθidωi
用⊗是因为 f f f L i L{_i} Li都有RBG三个分量需要分别相乘。
则物体某一点 p {\bf p} p的辐射率为:
L o ( p , ω o ) = ∫ Ω f ( p , ω o , ω i ) ⊗ L i ( p , ω i ) ∣ c o s θ i ∣ d ω i L{_o}({\bf p}, \omega{_o})=\int_\Omega f({\bf p},\omega{_o}, \omega{_i})⊗L{_i}({\bf p}, \omega{_i})|cos\theta{_i}|{\bf d}\omega {_i} Lo(p,ωo)=Ωf(p,ωo,ωi)Li(p,ωi)cosθidωi
Ω \Omega Ω:单位半球。
也称为反射方程式,用于计算物体表面的辐射率。

至此,上面给出了如何用BRDF f ( l , v ) f({\bf l}, {\bf v}) f(l,v)函数求出点 p {\bf p} p上辐射率 L o ( p , ω o ) L{_o}({\bf p}, \omega{_o}) Lo(p,ωo)。但 f ( l , v ) f({\bf l}, {\bf v}) f(l,v)的解还未定义,因此需要对 f ( l , v ) f({\bf l}, {\bf v}) f(l,v)进行数学建模,即设定它的方程。
因为 f ( l , v ) = f ( p , ω o , ω i ) = f ( p , ϕ i , θ i , ϕ o , θ o ) f({\bf l}, {\bf v})= f({\bf p}, \omega{_o}, \omega{_i})=f({\bf p},\phi{_i},\theta{_i},\phi{_o},\theta{_o}) f(l,v)=f(p,ωo,ωi)=f(p,ϕi,θi,ϕo,θo),因此点 p {\bf p} p上的BRDF函数接收4个参数,经过数学模型方程式运算输出结果。

微表面理论

用BRDF函数且相同的4个参数值,对不同的物质进行测量(比如不锈钢杯与塑料杯),得出的结果值是不一致的,最直观的结果是在眼睛看来,金属和塑料的质感很不一样。
造成相同的参数值,不同物质BRDF函数得出不同的结果值原因有三个:
1、微表面的法线分布。
在这里插入图片描述

2、微表面几何衰减。
在这里插入图片描述

3、菲涅尔反射。
在这里插入图片描述
也就是说平常我们看起来不同物质的质感不一样,主要是由不同物质以上三个因素不同造成的,因此,我们要对不同物质的以上三个因素进行数学建模。
Torrance-Sparrow基于微表面理论,用三个函数建立了高光BRDF模型:
f ( l , v ) = F ( l , h ) G ( l , v , h ) D ( h ) 4 ( n ⋅ l ) ( n ⋅ v ) f({\bf l},{\bf v})=\frac{F({\bf l},{\bf h})G({\bf l},{\bf v},{\bf h})D({\bf h})}{4({\bf n}\cdot{\bf l})({\bf n}\cdot{\bf v})} f(l,v)=4(nl)(nv)F(l,h)G(l,v,h)D(h)
F F F:菲涅尔函数。
G G G:微表面几何函数。
D D D:微表面法线分布函数。
n {\bf n} n:宏观表面法线。
h {\bf h} h:微观表面法线。
放到单位半球上的表示为(可省去点 p {\bf p} p的表示):
f ( ω i , ω o ) = F ( ω o , ω h ) D ( ω h ) G ( ω i , ω o ) 4 c o s θ o c o s θ i f(\omega{_i},{\omega{_o}})=\frac{F(\omega{_o},\omega{_h})D(\omega{_h})G(\omega{_i},\omega{_o})}{4cos\theta{_o}cos\theta{_i}} f(ωi,ωo)=4cosθocosθiF(ωo,ωh)D(ωh)G(ωi,ωo)

猜你喜欢

转载自blog.csdn.net/u012740992/article/details/121878739