问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

CG专栏之——菲涅尔方程与折射率

创作时间:
作者:
@小白创作中心

CG专栏之——菲涅尔方程与折射率

引用
1
来源
1.
https://www.freezetheflame.cc/2024/04/27/cg%E4%B8%93%E6%A0%8F%E4%B9%8B-%E8%8F%B2%E6%B6%85%E5%B0%94%E6%96%B9%E7%A8%8B%E4%B8%8E%E6%8A%98%E5%B0%84%E7%8E%87/

菲涅尔方程是计算机图形学中描述光反射和折射现象的重要理论基础。本文从日常生活中的现象出发,深入浅出地解释了菲涅尔效应,并详细介绍了菲涅尔方程的数学推导和应用,包括S偏振光和P偏振光的菲涅尔方程、布儒斯特角的概念以及Schlick近似法。

研究这个内容的契机在于应学长的指导去理解dieletric material相关的代码内容,即导体材料的渲染。之前只学习过简单的渲染方程,其实至今也没办法保证徒手写出来的渲染方程的正确性,可能还有很多的不熟练与不了解,所以这一部分的内容也出现了很多新问题,菲涅尔方程就是其中之一。究竟什么是菲涅尔方程?在渲染中占据什么样的地位?应该如何应用这样一个基础理论并且助力于真实性渲染?接下来的内容就是为了解决这样的问题。

菲涅尔效应在我们的日常生活中无处不在,下面来个例子三连:

  • 去公园的池塘喂鲤鱼,当爆米花丢的比较近的时候,可以看见水底下成群的鲤鱼在抢吃的。但是当把爆米花丢的很远时,却看不见水底下那些如狼似虎的鲤鱼,只能看见水面上的倒影。

  • 近处可以看清水下,远处则能看见倒影

上面这些生活中常见的现象就是菲涅尔效应

那么如何用更科学的术语来描述这些现象呢?能够看见水底下或者玻璃后的东西,那肯定是光线发生了折射所导致的。而对于水面上的倒影或者是玻璃变得像镜子一样这些都是因为光线发生了反射所导致的。通过前面的现象,可以发现,当人眼离物体表面(玻璃,水或者桌子等)比较近时,此时视线几乎与表面垂直,可以看见更多折射过来的光(水底的鱼,玻璃外的东西)。而当人眼离物体表面比较远时,此时视线几乎与表面平行,可以看见更多反射过来的光(倒影)

那么在渲染的时候,自然要把这个现象给考虑进去,才能够达到以假乱真的目的。因此需要一个公式,能够描述出在不同入射光的情况下,反射光与折射光所占的比例,这个公式就是菲涅尔方程

菲涅尔方程

当光线碰撞到一个表面的时候,菲涅尔方程会根据观察角度告诉我们被反射的光线所占的百分比。利用这个反射比率和能量守恒原则,可以直接得出光线被折射的部分以及光线剩余的能量。将其应用在BRDF当中,就可以更加精准的计算出渲染方程中的值

假设入射光与法线的夹角为 𝜃𝑖 ,折射光与法线的夹角为 𝜃𝑡 。由于折射还和介质的折射率有关,例如空气中的光射入水中,需要知道空气和水分别对应的折射率,再假设入射光所在介质的折射率为 𝑛1 ,物体的折射率为 𝑛2 。由于光的偏振(极化)现象,可以得到S偏振光P偏振光分别对应的菲涅尔方程,如下:

$$R_s = \left| \frac{n_1\cos\theta_i -n_2\cos\theta_t}{n_1\cos\theta_i +n_2\cos\theta_t}\right|^2$$

$$R_p = \left| \frac{n_1\cos\theta_t -n_2\cos\theta_i}{n_1\cos\theta_t +n_2\cos\theta_i}\right|^2$$

这里先停一停,以上是跟着知乎菲涅尔方程(Fresnel Equation) – 知乎 (zhihu.com)进行的思考流程,不过对于这里的偏振概念似乎还要进一步探究

把视野放到brown University的介绍中,

What happens when light,propagating in a uniform medium, encounters a smooth interface
which is the boundary of another medium (with a different refractive index)?
指的就是光在接触另一种介质的边界时会发生什么?

首先做出一些定义or规约

  • 入射面Plane of incidence和接触面Plane of the interface

  • Plane of incidence(in this illustration, the yz plane) is the plane that contains the incident and reflected k-vectors.

  • Plane of the interface(y=0, the xz plane) is the plane that defines the interface between the two materials

“S” and “P” polarizations

一个关键问题:电场指向哪个方向?有两种截然不同的可能性。

  • “S” polarization is theperpendicular polarization, and it sticks up out of the plane of incidence

  • “P” polarization is theparallel polarization, and it lies parallel to the plane of incidence.

In other words, The component of the E-field that lies in the xz plane is continuous as you move across the plane of the interface. Here, all E-fields are in the z-direction, which is in the plane of the interface.

换言之,当在界面平面上移动时,位于 xz 平面中的 E 场分量是连续的。在这里,所有电子场都在 z 方向上,即在界面的平面上。

具体的推导过程略(可见lecture13_0.pdf (brown.edu))

这个时候可以试着使用反射定律修改上面的菲涅尔方程

$$R_s = \left| \frac{n_1\cos\theta_i -n_2\sqrt{1-\left(\frac{n_1}{n_2}\sin\theta_i\right)^2}}{n_1\cos\theta_i +n_2\cos\theta_t}\right|^2$$

$$R_p = \left| \frac{n_1\sqrt{1-\left(\frac{n_1}{n_2}\sin\theta_i\right)^2} -n_2\cos\theta_i}{n_1\sqrt{1-\left(\frac{n_1}{n_2}\sin\theta_i\right)^2} +n_2\cos\theta_i}\right|^2$$

如果不考虑偏振的情况,那么菲涅尔方程即是上面两者的平均值:

$$R= \frac{R_s+R_p}{2}$$

通过理论计算以及实验证明,在通常情况下,当反射光垂直于折射光时,反射光中平行于入射面的振动会完全消失,只剩下垂直于入射面的振动。也就是说此时反射光变成了振动方向垂直于入射面的线偏振光。

此时的入射角被称为布儒斯特角,记为 𝑖𝐵

由图,根据折射定律可知

$$\frac{n_1}{n_2} = \frac{\sin i_B}{\sin i_\gamma}=\frac{\sin i_B}{\cos i_B}=\tan i_B$$

利用菲涅尔方程,可以画出 R 与 𝜃𝑖 的对应关系图:

图中代表的是折射率为1.5的绝缘体(例如某种玻璃)的反射情况。可以发现当夹角为0时,即入射光垂直于表面,反射光的比例只有4%左右,而当夹角为90度时,即入射光平行于表面,反射比例将近100%,符合前面所说的菲涅尔效应。

再来看一个导体(比如铜镜)的关系图:

可以发现即使光线垂直于导体表面,但是依旧有90%的光被反射。这也证实了为什么可以用铜来做镜子,却没法使用玻璃来做镜子。

比起菲涅尔方法,有一些更加简洁快速的近似方式,称之为:

Schlick近似法

从上面两个关系图中,可以发现,反射比例和夹角的关系,基本上都是由基础反射率以某种类似的曲线增长到1

其中基础反射率的值很好求得,因为此时 cos⁡𝜃𝑖=1 ,带入前面的公式可得:

$$R_0 = \left( \frac{n_1-n_2}{n_1+n_2}\right)^2$$

例如水的折射率为1.333,对应的 𝑅0 即为(0.333/2.333)²=0.02。接下来的问题就是怎么用一个简单的函数使得反射率能随着 𝜃𝑖 的增长以类似某种指数增长的方式从基础反射率变为1,这里Schlick为我们提供了一种近似方程

$$R=R_0 + (1-R_0)(1-\cos\theta_i)^5$$

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号