​菲涅尔反射(Fresnel Reflection)​理论概要

    离线渲染中,通常可以用kd,ks,kt(分别代表物体的漫反射系数,镜面反射系数,透射系数)来简单地描述一个物体的基本材质,例如,我们将一个物体设置为:kd=0,ks=0.1,kt=0.9,即代表一束光击中该物体表面后,其中的90%发生透射(折射),另外10%被表面反射回来。这代表了无论光线以何种角度击中物体表面,它的反射率和透射率都是一样的。但是实际生活中是否是这样的呢?

    试想,你站在湖边,低头看脚下的水,你会发现水是透明的,反射不是特别强烈;如果你看远处的湖面,你会发现水并不是透明的,反射非常强烈。简单的讲,就是视线垂直于表面时,反射较弱,而当视线非垂直表面时,夹角越小,反射越明显。如果你看向一个圆球,那圆球中心的反射较弱,靠近边缘较强,这就是“菲涅尔效应”。不同材质的菲涅尔效应强弱不同,导体(如金属)的菲涅尔反射效应很弱,就拿铝来说,其反射率在所有角度下几乎都保持在86%以上,随角度变化很小,而绝缘体材质的菲涅尔效应就很明显,比如折射率为1.5的玻璃,在表面法向量方向的反射率仅为4%,但当视线与表面法向量夹角很大的时候,反射率可以接近100%,这一现象也使得金属与非金属看起来不同。

    在图形学中,我们也可以加入菲涅尔反射效应,以使玻璃,瓷器,水面等物体的反射显得更真实。菲涅尔反射的方程可以由麦克斯韦电磁学方程推导出来(因为本质上讲菲涅尔反射就是用波动的理论来解释光的反射)。对于透明物体而言其结果为:

   

公式中的kr与kt分别代表了最终求得的反射率与折射率,η代表了该物体的相对折射率,θi和θt分别代表了入射角与折射角。可以看出对于透明物体而言,有多少光能被折射是跟物体的相对折射率以及入射角度都是相关的,值得注意的一点是,当发生全反射的时候这个公式并不适用。

    除此之外,菲涅尔反射效应也是可以用于漫反射等其他非透明材质之上的,用来描述其在各个入射角方向上的反射率,不过这种情况略微复杂一些,通常难以直接求解,但是它却可以用有理多项式来逼近,比如在处理次表面散射(Subsurface scattering)的时候会加入Fresnel项:

    不过,我在代码中加入了针对透明物体的菲涅尔反射,并对同一个场景做了测试,发现貌似区别并不明显(晕+_+)。

                                                                     未加入菲涅尔反射:

                                                                       加入菲涅尔反射:

原文:菲涅尔反射(Fresnel Reflection) - 星光下的守望者 - 博客园

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
菲涅尔反射系数是描述光线从介质A射向介质B时,发生反射和折射的现象的物理量。在光的折射和反射中,菲涅尔反射系数用于描述光的入射波和反射波之间的关系。 Matlab是一种常用的科学计算和数据可视化工具,可以用来计算菲涅尔反射系数。我们可以利用Matlab中的物理光学库或者自定义函数来计算菲涅尔反射系数。 首先,我们需要确定介质A和介质B的折射率nA和nB。然后根据入射角度和折射角度的关系,可以使用Fresnel公式计算出垂直入射光的反射系数。 具体计算步骤如下: 1. 在Matlab中定义介质A和介质B的折射率nA和nB。 2. 输入入射角度θ,可以使用matlab函数sind和cosd将角度转换为弧度。 3. 根据Fresnel公式计算反射系数: - 入射波的振幅反射系数r_perpendicular = (nA * cos(θ) - nB * sqrt(1 - (nA/nB)^2 * sind(θ)^2)) / (nA * cos(θ) + nB * sqrt(1 - (nA/nB)^2 * sind(θ)^2)) - 入射波的振幅透射系数t_perpendicular = (2 * nA * cos(θ)) / (nA * cos(θ) + nB * sqrt(1 - (nA/nB)^2 * sind(θ)^2)) 4. 计算垂直入射光的反射系数R = r_perpendicular^2 和透射系数T = t_perpendicular^2。 通过以上步骤,我们可以得到菲涅尔反射系数R和透射系数T。在Matlab中,我们可以输入不同的折射率和入射角度,计算不同介质间的反射系数。 此外,我们还可以使用Matlab绘制出折射率和反射系数之间的关系图,以更好地理解光在不同介质中的传播过程。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值