3D图形学学习总结(八)—简单光照

原文链接:http://www.nicemxp.com/articles/25

游戏中通常会通过光照的原理来模拟计算光照,越逼真的光照需要的计算越复杂,但是在基于软件渲染的条件下只能模拟一些简单的基础光照,让游戏看起来更自然些。下面记录些简单光照模型。

一、环境光

环境光是世界中来自四面八方的光,它没有确切的来源,而是各种光经过各种物体反射后的结果,我们正常能看见物体就是因为环境光在物体上被反射到我们眼中,从而我们可以看到物体。

在游戏中,物体的颜色我们可以认为是材质或者纹理的颜色,光照在物体上,光照颜色与物体颜色进行调制后就是物体最终反射到我们眼中的颜色,如光照颜色Iambient = RGB(80, 80, 80), 物体某个像素点的颜色即物体表面的反射颜色Kambient = RGB(198,217,98),那么环境光经过物体反射后的最终颜色Ires = (80 * 198 / 255,80 * 217 / 255,80 * 98 / 255),光照只是对物体颜色进行调制,并不能真的让物体变得更亮,最大值1也只是显示物体的本来颜色,正常光照计算中颜色值都是用0-1之间的值来表示的,这里为了清晰表示为0-255的格式,所以我们有环境光照射物体的计算公式为:

Ires = Iambient * Kambient

颜色分量的格式为0-1,下面是分别在环境光(80,80,80)和蓝色环境光(0,0,255)条件下vs中的截图(gouraud着色下,光照颜色与物体纹理颜色作用后的结果):

很明显左侧的箱子比较暗因为光比较弱,右侧箱子呈蓝色因为蓝色光照射箱子后箱子表面只反射蓝色分量。

二、散射光

散射光是各种光照直接作用在物体身上后反射的结果,散射光与观察者的位置无关,沿所有方向均匀的散射,但是散射的强度取决于物体表面的面法线与光源向量之间的夹角,跟夹角的余弦呈正比。计算公式与环境光类似,只是乘以一个余弦值。公式为:

Ires = Idiffuse * Kdiffuse * (n·l)

Idiffuse为散射光强度,Kdiffuse 为物体反射散射光颜色,n为面法线向量,l为点到光源的向量,均为单位向量,所以n·lnl的夹角余弦值。

物体反射散射光源有几种:

直射光,直射光的光照强度跟距离无关,所以直射光照射到物体上后的光照强度(颜色)Idiffuse就是直射光源的初始颜色.

点光源,点光源的光照强度随距离递减,通常用3个因子来模拟,常量衰减因子kc,线性衰减因子kl,二次衰减因子kq,公式为:

Idiffuse = Ipoint / (kc + kl * d + kq * d^2),Ipoint为光源初始强度(颜色)

只存在直射光环境中的vs运行截图:

因为没有环境光,所以物体只有物体被照射的地方有颜色。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值