渲染公式推导辐射度方程和形状因子(修订版)

王朝other·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

我们首先来看看渲染公式的推导,渲染公式表示如下

L(x->x1) =∫(L(x2->x)*BRDF(x2->x,x->x1)*G(x2,x)*dA(x2)

其中L(x->x1)表示x到x1的光的强度,L(x2->x)表示x2到x的光的强度, BRDF(x2->x,x->x1)表示从x2->x,x->x1的BRDF,G(x2,x)=vis(x,x2)*cos(N)*cos(N2)/r^2,N1,N2分别为x,x2的法线和连线的夹角,vis(x,x2)表示x,x2的可视关系,r是x2到x的距离.

我们首先从x2->x的能量传递开始,我们知道从x2到x辐射的能量是:

dP(x2->x) =L(x2->x)*dA(x2)*vis(x,x2)*cos(N2)*dω(x2->x)

根据立体角的定义我们有

dω(x2->x) =cos(N)*dA(x)/r^2;

dω(x->x2) =cos(N2)*dA(x2)/r^2

于是我们就可以得到

dP(x2->x) =L(x2->x)*dA(x)*vis(x,x2)*cos(N)*dω(x->x2)

x2对于x的照度

dE(x2->x) =L(x2->x)*vis(x,x2)*cos(N)*dω(x->x2)

我们知道L=E*BRDF,也就是说亮度=照度*双向反射分布函数,于是我们有:

dL(x->x1) =dE(x2->x)*BRDF(x2->x,x->x1)

=L(x2->x)*vis(x,x2)*cos(N)*dω(x->x2)*BRDF(x2->x,x->x1)

我们在整个半球积分后得到:

L(x->x1) =∫L(x2->x)*vis(x,x2)*cos(N)*BRDF(x2->x,x->x1)*dω(x->x2)

我们把dω(x->x2)使用(cos(N2)/r^2))*dA(x2)替换得到

L (x->x1) =∫(L(x2->x)*BRDF(x2->x,x->x1)*vis(x,x2)*(cos(N)*cos(N2))/r^2*dA(x2)

我们把vis(x,x2)*(cos(N)*cos(N2))/r^2使用G(x2,x)替换这样就得到了最初的渲染公式

L(x->x1) =∫(L(x2->x)*BRDF(x2->x,x->x1)*G(x2,x)*dA(x2)

然后使用我们推导出来的渲染公式来推导辐射度方程,我们知道辐射度方程是在假设整个环境都是理想的Diffuse表面情况下建立的,也就是说在这种假设下BRDF=ρ/PI,并且有B=I*PI;所以我们可以得到在理想Diffuse表面情况下的渲染公式是:

L(x->x1) =∫(L(x2->x)*ρ/PI*G(x2,x)* dA(x2)

PI*L(x->x1) =PI*∫(L(x2->x)*ρ/PI*G(x2,x)* dA(x2)

B(x) =ρ*∫(L(x2->x)*PI*(G(x2,x)/PI)*dA(x2)

B(x)*dA(x) =ρ*∫(L(x2->x)*PI*(G(x2,x)/PI)*dA(x2)*dA(x)

基于我们在辐射度算法中对于环境的假设我们能够得到:

∫B(x)*dA(x)=ρ*∫∫(L(x2->x)*PI*(G(x2,x)/PI)*dA(x2)*dA(x)

B(x)*Ax =ρ*L(x2->x)*PI*∫∫((G(x2,x)/PI)*dA(x2)*dA(x)

=ρ∑B(x2)*∫∫((G(x2,x)/PI)*dA(x2)*dA(x)(这里的dA(x2)只是对片面的积分)

B(x)=ρ∑B(x2)*(1/Ax)∫∫((G(x2,x)/PI)*dA(x2)*dA(x)

这里G(x2,x使用vis(x,x2)*cos(N)*cos(N2)/r^2代替于是有

B(x)=ρ∑B(x2)*(1/Ax)∫∫((vis(x,x2)*cos(N)*cos(N2)/(r^2*PI))*dA(x2)*dA(x)

而∫∫((vis(x,x2)*cos(N)*cos(N2)/(r^2*PI))*dA(x2)*dA(x)就是我们上面提到的形状因子F(x,x2),于是就有:

B(x)=ρ*∫∑B(x2)*F(x,x2)

这样我们就得到了形状因子的表达式和辐射度方程的推导过程。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航