从0开始用javascript和HTML5的canvas编写光线追踪渲染器<二>

局部光照模型简介:

在上一节,介绍了光线追踪算法的基本框架,里面提到了两个新的概念,其中一个是局部光照模型(phong模型),另一个是光线投射算法。光线投射算法我会在下一节介绍,本节主要介绍什么是phong局部光照模型。


局部光照模型,顾名思义就是只考虑光线在该物体上的作用,而不用考虑物体之间光能的传递。

phong模型分为三大部分,漫反射分量diffuse, 镜面反射分量reflection,环境光常量e。


漫反射在phong模型中是这样描述的。

diffuse = I*cosa    其中a是光线和法线之间的夹角,I是入射光的亮度。如果夹角越大,也就是入射光入射角度越倾斜,漫反射的亮度越低。这也叫做余弦发光体,又名朗博体表面散射模型。用文言文描述这一现象是:日初出沧沧凉凉,及其日中如探汤。。。。

镜面反射和漫反射的一个差异就是,物体上某个点的光亮度不光和光源位置有关,还和视点有关。

reflection = I*(cosb)^n   其中cosb是反射光线 和 视线的反向射线 之间的夹角的余弦,n表示光滑程度,由于cosb是(0-1)之间的小数,n越大相同的b会导致镜面反射结果越小,也就使得光斑的面积越小,也就说明越光滑。


  

这里采用的局部光照模型是phong模型,属于一种经验模型,所以为了表现不同物体的材质十分困难,需要繁杂的参数调教。在目前业界已经普遍采用基于物理的渲染,即pbr,我希望在之后的迭代过程中可以引入。


下面给出已知入射光线求反射光线的解法以及公式,都是高中立体几何知识。具体推导很简单,我这里只给出了结果。

直线入射点(a,b,c),方向向量(l,m,n)
x = l*t+a
y = m*t+b
z = n*t+c


法线 方向向量( o,p,q )
x = o*t+a
y = p*t+b
z = q*t+c


可以求入射向量的反方向向量(-l, -m, -n )关于法向量( o, p, q )的对称向量
令ol + pm + qn = A, o^2 + p^2 + q^2 = B
对称向量为(-2Ao/B+l, -2Ap/B+m, -2Aq/B+n), 又已知入射点(a,b,c),所以易得反射光线。


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值