菲涅尔反射(Fresnel Reflection)

时间:2022-09-26 12:10:50

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

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

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

菲涅尔反射(Fresnel Reflection)

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

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

菲涅尔反射(Fresnel Reflection)

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

菲涅尔反射(Fresnel Reflection)的更多相关文章

  1. Fresnel Reflection - 菲涅尔反射

    [Fresnel Reflection - 菲涅尔反射] “菲涅尔”是一个人的名字,因为他发现了一个有关反射的光学现象,这个现象就用这个人的名字命名了.那么,是什么现象呢? 这就是反射/折射与视点角度 ...

  2. Fresnel Reflection Shader

    [Fresnel Reflection] One of the most used types of reflections is the Fresnel reflection. One of the ...

  3. UnityShader-菲涅尔反射(Fresnel Reflection)

    菲涅耳公式(或菲涅耳方程),由奥古斯丁·让·菲涅耳导出.用来描述光在不同折射率的介质之间的行为.由公式推导出的光的反射称之为"菲涅尔反射".菲涅尔公式是光学中的重要公式,用它能解释 ...

  4. Unity中的基础光照

    渲染包含了两大部分:决定一个像素的可见性,决定这个像素上的光照计算. 光照模型就是用于决定在一个像素上进行怎样的光照计算. 一.光源 在实时渲染中我们通常把光源当做一个没有体积的点. 1.1 辐照度 ...

  5. Unity shader学习之菲涅耳反射

    菲涅尔反射(Fresnel reflection),指光线照射物体表面时,一部分发生反射,一部分进入物体内部发生折射或散射,被反射的光和折射光之间存在一定的比率. 2个公式: 1. Schlick 菲 ...

  6. 第五章 Unity中的基础光照(1)

    [TOC] 渲染总是围绕着一个基础问题:我们如何决定一个像素的颜色?从宏观上来说,渲染包括了两大部分:决定一个像素的可见性,决定这个像素上的光照计算.而光照模型用于决定在一个像素上进行怎样的光照计算. ...

  7. games101 - 4 - Ray Tracing

    games101 - 4 - Ray Tracing 目录 games101 - 4 - Ray Tracing 为什么需要Ray Tracing Recursive (Whitted-Style) ...

  8. ThreeJS的特效合成器和后期处理通道

    最近要写个 web 交互式发光可交互的框架.没查到啥好资料,自己一个人摸索了很久,有些失望,可是毕竟是探索过的东西,所以做个记录,怀念我过去好多天掉的青丝(捂脸).我在前面那篇博客里面已经介绍了如何让 ...

  9. CSharpGL(53)漫反射辐照度

    CSharpGL(53)漫反射辐照度 本系列将通过翻译(https://learnopengl.com)这个网站上关于PBR的内容来学习PBR(Physically Based Rendering). ...

随机推荐

  1. 阿里提前批校招内推offer经历

    经过一个半月的阿里内推面试,今天终于收到了阿里的offer邮件 .阿里的内推面试一共有四轮,本人是7月19号投的内推邮件,8月28号收到了offer的邮件.首先本人谈谈内推的看法.内推是公司招聘人才的 ...

  2. android 插件化开发 开源项目列表

    开源的插件化框架 Qihoo360/DroidPlugin CtripMobile/DynamicAPK mmin18/AndroidDynamicLoader singwhatiwanna/dyna ...

  3. POJ2635——The Embarrassed Cryptographer(高精度取模+筛选取素数)

    The Embarrassed Cryptographer DescriptionThe young and very promising cryptographer Odd Even has imp ...

  4. <ASP.NET4 从入门到精通>学习笔记3

    第三部分,状态管理与缓存 何为状态管理.起始对于web而言.经过前面章节的解说.已经理解,对于web程序,就是一个无状态的程序.每次的请求与每次的响应,两者之间本身就是独立存在的,这一点对于早期的静态 ...

  5. linux —— shell 编程(整体框架与基础笔记)

    导读 关于shell编程基础的学习,网上有很多资源,如果在校图书馆应该也有一些教程,所以这里对于零碎的基础不做详细记录,而只是对一些常用的概念.命令与操作做一个简要的记录,以备方便查找. (本文所有语 ...

  6. Uubntu E: Sub-process /usr/bin/dpkg returned an error code问题的解决办法

      cd /var/lib/dpkg   sudo mv info info.bak   sudo mkdir info      apt-get --reinstall install udev m ...

  7. mac系统及xcode使用的SVN客户端升级

    mac系统及xcode使用的SVN客户端升级 当前的SVN版本已经升级到1.8.x了,但mac系统自带的以及xcode使用的SVN客户端版本没有跟着升级,还是1.6.x的版本.为了解决隐藏目录.svn ...

  8. TensorFlow实践笔记(一):数据读取

    本文整理了TensorFlow中的数据读取方法,在TensorFlow中主要有三种方法读取数据: Feeding:由Python提供数据. Preloaded data:预加载数据. Reading ...

  9. 记一次查询超时的解决方案The timeout period elapsed......

    问题描述 在数据库中执行查询语句,大约1秒钟查询出来,在C#中用ado进行连接查询,一直等待很久未查出结果,最后抛出查询超时异常. 异常内容如下: Execution Timeout Expired. ...

  10. nginx upstream的五种分配方式

    Nginx负载均衡选项upstream用法举例 1.轮询(weight=1) 默认选项,当weight不指定时,各服务器weight相同,每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器d ...