光模拟基础(2) 光源

    在基本光照模型基础上,今天探讨一下如何建立各种光源模型.

     (1)方向光(或称平行光)

    方向光可以看作太阳光,为什么会有白天黑夜呢,就是因为太阳只能照向地球的一个面( dir ),也即一个方向,而且即使地球绕太阳转动时距离会变化,太阳光也没有衰减(no pos, no attenuation 当然,这里是近似的).

    dirLight = emissive + ambient + diffuse + specular;

    可以发现,上一篇文章中给出的光照公式,就是方向光.

 

    (2)点光源

    你可以把点光源看成是家里的电灯,你可以发现,它是从某个位置(pos),向各个方向( no dir )发散,而且,越发散,光强越弱(attenuation),我已经把几个重要的概念用英文标注.在这里,灯光的位置会影响attenuation.那么最终的公式取为:

    pointLight = emissive + ambient + attenuationFactor * ( diffuse + specular );

    其中attenuationFactor是由顶点与光源位置的距离来确定的.

 

    (3)聚光灯

    探照灯就是这种光的代表,它由一个取舍角Thi的概念来控制聚光灯圆锥体的传播,你需要知道灯的位置,灯的方向,以及将要进行着色的点的位置,然后通过他们得到从聚光灯到点的向量V与光的方向D,这时候dot( D, V )求出角,只有当这个角小于取舍角Thi,点才被着色.

    为了更好模拟,我们还需要两个角a,b,Thi = a + b;而且0到a的范围表示热区,而a到a+b范围表示衰减区,在热区中,灯光强度不变,而在衰减区中,灯光会衰减(具体衰减策略可以自己定义),总之利用聚光灯,可以形成两个光区,非常漂亮.

 

    这里光源最基本的实现(要不然怎么叫基础...),使用shader,你可以自由的选择光的实现形式(数学..还是数学..),anyway,enjoy!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值