常用的光照模型与面绘制算法总结

基本光照模型

漫反射模型(Lambert模型)

环境光:Iambdiff=Kd*Ia,其中Ia 表示环境光强度,Kd (0< Kd<1)为材质对环境光的反

射系数,Iambdiff是漫反射体与环境光交互反射的光强。

方向光:Ildiff = Kd * Il * cos(θ),其中Il是入射角,Ildiff是漫反射体与方向光交互反射

的光强。cos(θ)又等价于(点乘),其中是顶点的单位法向量,是顶点指

向光源的单位向量。

       最后,将环境光与方向光综合,Lambert模型可写成:

              Idiff = Iambdiff+ Ildiff = Kd* Ia+ Kd * Il*

镜面反射模型(Phong模型)

Phong模型认为镜面反射的光强与反射光线和视线的夹角相关:

Ispec = Ks * Il*

其中,Ks为镜面反射系数,Ns为高光指数,V表示从顶点到视点方向的单位向量,R表示反射光方向的单位向量。R可通过和L求出,

       R=2-L

所以最终模型为:

       Ispec=

修正镜面光模型(Blinn-Phong光照模型)

       Blinn-Phong是一个基于Phong模型修正的模型,其公式为:

Ispec = Ks * Il*

其中N是入射点的单位法向量,H是光入射方向L和视点方向V的中间向量,通

常也称之为半角向量(半角向量被广泛用于各类光照模型,原因不但在于半角向量

蕴含的信息价值,也在于半角向量是很简单的计算:H = (L +V) / |L +V| 。

漫反射与镜面反射的合并

对于单个点光源:

       I=Idiff+Ispec= Kd* Ia+ Kd* Il * + Ks* Il *

对于多个点光源:

I= Kd * Ia +

光线跟踪

     基本光线跟踪算法

      由于从光源发出的光线有无穷多条,使得直接从光源出发对光线进行跟踪变得非常困难。实际上,从光源发出的光线只有少数经由场景的反射和透射(折射)后到达观察者的眼中。为此标准光线跟踪算法采用逆向跟踪技术完成整个场景的绘制。

      光线跟踪思路:从视点出发,通过图像平面上每个像素中心向场景发出一条光线,光线的起点为视点,方向为像素中心和视点连线单位向量。光线与离视点最近的场景物体表面交点有三种可能:

1.    当前交点所在的物体表面为理想漫射面,跟踪结束。

2.    当前交点所在的物体表面为理想镜面,光线沿其镜面发射方向继续跟踪。

3.    当前交点所在的物体表面为规则透射面,光线沿其规则透射方向继续跟踪。

按以上的思路逐个将相交的面加入到一个二叉光线跟踪树中。

辐射度光照模型

基本辐射度模型:

      Bk=Ek = Ek

其中, 为表面j和k的形状因子,它是表面j到达表面k的辐射能与离开表面j的辐射能的比率。Hk为单位时间,单位面积上到达表面k的闭包内所有表面的辐射能总和。Bk为单位面积离开表面k的辐射能总速率。

逐步求精的辐射度方法:

伪代码如下:

for each patch k

       foreach patch j

{

       dRad=rho[j]*B[k]*F[j][k]*A[j]/A[k];

       dB[j]=dB[j]+dRad;

       B[j]=B[j]+dRad;

}

dB[k]=0;

明暗处理

Gouraud明暗处理:又称强度插值表面绘制。通过将在照明对象的表面上将光强进行线性插值来绘制多边形表面。使用时,需要进行以下计算:

1.    确定每个多边形的顶点处的平均单位法向量

2.    对于每个顶点根据光照模型来计算其光强度

3.    在多边形投影区域对顶点强度进行线性插值

Phong明暗处理:又称法向量插值绘制,与Gouraud方法不同,通过对法向量插值取代强度插值。其结果更精确,高光更真实,但需要更多计算。

1.    确定每个多边形的顶点处的平均单位法向量

2.    在多边形投影区域上对顶点法向量进行线性插值

3.    根据光照模型,使用插值的法向量,沿每条扫描线计算投影像素的光强

 

      

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值