Unity3D Shader之光照模型——理论与实践:用两种方式来实现漫反射Diffuse Reflection

漫反射原理解析

众所周知,漫反射即光线射到粗糙的物体表面时发生的反射现象,入射光线为平行光线,而出射光线为各个方向。光在空气中以直线传播,光线的反射也遵守物理规则。如下图所示:

这里写图片描述
图片来源于网络。

上图左侧入射方向的是平行光,反射光也是平行光,这种现象称为镜面反射。而左侧反射光不平行无规则的则为漫反射。

这里写图片描述这里写图片描述
图片来源于网络。

上图左侧表示,入射光线与出射光线形成的夹角,被垂直于反射面的光线均分。上图右侧表示在圆弧或不规则表面时,反射平面为反射点的切线,此时反射点的法线为经过此点垂直于其切线的直线。

然而在图形处理中,实际情况是模型远远没有现实这么复杂,有的时候甚至想用简单的模型(甚至是完全平面的模型)来表现出复杂或是特殊材质的物体。对于漫反射而言,不可能真的去做出具有无数个顶点,表面具有极其细微的凹凸不平之处的模型,如果真这样做,无论是人力还是计算机的处理能力都是非常有限的。因此就要使用一定的算法来模拟漫反射。

根据反射的规则和实际生活情况可知,入射光线与反射光线的夹角越小,则反射强度越大。并且物体表面越粗糙,那么反射后的亮度越弱,这是因为粗糙的表面将光线反射到了各个地方去。因此,我们要模拟的就是:

  • 反射规则:入射光线与反射光线的关系
  • 光线逸散:反射后由物体表面粗糙的原因导致光线光线逸散,反射后光线亮度变低

结合上两点,在实际生活中观察到的漫反射现象是: 入射光线与法线的夹角越小,则反射后的光线亮度越大。于是便采用 入射光线与法线的点积来 来计算反射系数,因为点积的几何意义是:点积的值越大,则两个向量的方向越相近。


结合我前面的文章《Unity3D内建参数文档翻译与解析——Built-in shader variables》来使用两种不同的Shader形式实现漫反射。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值