光模拟基础(1) 基本光照模型

1.基本光照模型:

sufaceColor = emissive + ambient + diffuse + specular

以下是公式各个项的解析:

 

(1)emissive放射光

    它是独立于所有光源的,是单纯由物体材质产生的光(说句废话,不能作为光源照亮其他物体,其实在shader实现里很明确)

    emissive = Ke;

    这个公式明显可以看出,光照颜色完全取决于材质

(2)ambient环境光

    它也是独立于单一光源的,毕竟环境二子,应该体现了这个概念只与物体所在的环境有关,可以想象成其他光经过多次折射后就造成了物体四面八方受到了同等强度的光.

    ambient = Ka * globalAmbientLightColor;

    这个公式表示了顶点的颜色取决于自身材质与环境光.

(3)Diffuse漫反射

    它与一个独立光源相联系,它对于人的眼睛位置来说无关,与灯的位置有关,因为一块粗糙的黑板,无论你在哪个角度看某个点的光强都是一样的,但是如果移动光源就不一样了,光源越相比某点越倾斜,某点接受的入射光越少.

    diffuse = Kd * max( N*L, 0 ) * lightColor;

    这个公式多了一个max( N*L, 0 )概念,也这里是表示点的法线与光的入射角的夹角越小,光越强( max函数是为了表示如果照在顶点背面,那么就应该没有光照 ).

(4)Specular镜面反射

    与漫反射不同,镜面发射的反射光集中于一个区域,如果眼睛越离开这个区域去观察受光点,那么光照作用就越不明显.而且,表面光泽度越好的物体,高光区越少(也就是反射光越集中).

    specular = Ks * lightColor * facing * pow ( ( max( N * 眼睛与入射光到点的中间向量, 0 ) ), shininess );

    公式难理解的就是为什么用pow ( ( max( N * 眼睛与入射光到点的中间向量, 0 ) ), shininess )来模拟高光区的效果,我的理解是,眼睛能观察到的光在入射光根据顶点法线的反射光附近最强,也就是说眼睛带顶点与入射光的中间向量与法线的点积越小,光的强度越大.至于为什么要用shininess次方,纯粹是为了控制高光区域的大小,因为shininess越大,则随着夹角增大光强下降越快,那么高光区域就越大,反之越小.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值