《Real Time Rendering 4th》9.5 章读书笔记

经典的折射和反射定律

光通过两个不同介质的界面的时候,会发生反射和折射现象。反射是指光从另一个路径离开界面,折射是指光通过界面进入了另一种介质中。其中满足条件:

  1. 反射角等于入射角
  2. 折射角与入射角满足斯涅尔定律

sinθ1sinθ2=n2n1\frac{sin\theta_1}{sin\theta_2} = \frac{n2}{n1} sinθ2​sinθ1​​=n1n2​

其中 n1, n2 是两个介质的折射率

菲涅尔公式

入射光的电场振动方向可以取与光的传播方向垂直的任意方向。我们可以将电矢量分解为与光的入射面(入射界面法线与光线构成的面)垂直和平行的两个分量,并分别记为 Es (垂直)和 Ep (平行)。

根据电磁场的边值关系我们可以得到关于这两个分矢量在反射,折射中与入射时的比值关系:
rs=A1s′A1s=−sin(θ1−θ2)sin(θ1+θ2)ts=A2sA1s=2sinθ2cosθ1sin(θ1+θ2)rp=A1p′A1p=tan(θ1−θ2)tan(θ1+θ2)tp=A2pA1p=2sinθ2cosθ1sin(θ1+θ2)cos(θ1−θ2)\begin{aligned} r_s & = \frac{A'_{1s}}{A_{1s}}=-\frac{sin(\theta_1-\theta_2)}{sin(\theta_1+\theta_2)}\\\ \\ t_s & = \frac{A_{2s}}{A_{1s}}=\frac{2sin\theta_2cos\theta_1}{sin(\theta_1+\theta_2)}\\\ \\ r_p & = \frac{A'_{1p}}{A_{1p}}=\frac{tan(\theta_1-\theta_2)}{tan(\theta_1+\theta_2)}\\\ \\ t_p & = \frac{A_{2p}}{A_{1p}}=\frac{2sin\theta_2cos\theta_1}{sin(\theta_1+\theta_2)cos(\theta_1-\theta_2)}\\\ \\ \end{aligned} rs​ ts​ rp​ tp​ ​=A1s​A1s′​​=−sin(θ1​+θ2​)sin(θ1​−θ2​)​=A1s​A2s​​=sin(θ1​+θ2​)2sinθ2​cosθ1​​=A1p​A1p′​​=tan(θ1​+θ2​)tan(θ1​−θ2​)​=A1p​A2p​​=sin(θ1​+θ2​)cos(θ1​−θ2​)2sinθ2​cosθ1​​​

其中:

  • rs :s 波的反射系数
  • ts :s 波的透射系数
  • rp :p 波的反射系数
  • tp :p 波的透射系数
  • A :对应电矢量的振幅

这四个公式合称 菲涅公式,它描述了两件事情:

  1. 入射光的电矢量的两个分量,即 sp 在发生反射和折射时,能量的再分布规律不同
  2. 两个电矢量分量在发生反射和折射时,其振幅与入射时的振幅之比满足以上关系

当入射角很小的时候,有:
tanθ≈sinθ≈θsinθ1sinθ2≈θ1θ2≈n2n1=ntan\theta\approx sin\theta\approx\theta\\\ \\ \frac{sin\theta_1}{sin\theta_2}\approx\frac{\theta_1}{\theta_2}\approx \frac{n2}{n1} = n tanθ≈sinθ≈θ sinθ2​sinθ1​​≈θ2​θ1​​≈n1n2​=n
于是得到菲涅尔公式在接近垂直入射的情况下的近似公式:
rs=−n−1n+1ts=2n+1rp=n−1n+1tp=2n+1\begin{aligned} r_s & =-\frac{n-1}{n+1}\\\ \\ t_s & =\frac{2}{n+1}\\\ \\ r_p & =\frac{n-1}{n+1}\\\ \\ t_p & =\frac{2}{n+1}\\\ \\ \end{aligned} rs​ ts​ rp​ tp​ ​=−n+1n−1​=n+12​=n+1n−1​=n+12​​
根据菲涅尔公式可以得到一个很重要的物理结论,就是当入射光是从光疏介质进入光密介质(n1 < n2)时,在入射角很小的情况下会发生反射部分发生“半波损失”。但对渲染更重要的是关心反射光,透射光和入射光的能量占比,其中反射能量和入射能量的比值称为反射率,而透射部分与入射部分的能量比值称为透射率,这些都可以从菲涅尔公式推导出来的:

R=A1′2A12T=n2cosθ2n1cosθ1A22A12=n⋅cosθ2cosθ1A22A12\begin{aligned} R &= \frac{A'^2_1}{A^2_1}\\\ \\ T &= \frac{n2cos\theta_2}{n1cos\theta_1}\frac{A_2^2}{A_1^2} = n\cdot\frac{cos\theta_2}{cos\theta_1}\frac{A_2^2}{A_1^2} \end{aligned} R T​=A12​A1′2​​=n1cosθ1​n2cosθ2​​A12​A22​​=n⋅cosθ1​cosθ2​​A12​A22​​​
其中:

  • R:反射率
  • T:透射率

并且根据能量守恒定律有:
R+T=1R+T=1 R+T=1

将菲涅公式带入反射率和透射率方程,可以得到 s 波和 p 波的反射率和透射率。

Rs=A1s′A1s=sin2(θ1−θ2)sin2(θ1+θ2)Ts=n2cosθ2n1cosθ1(A2sA1s)2=n2cosθ2n1cosθ14sin2θ2cos2θ1sin2(θ1+θ2)Rp=A1p′A1p=tan2(θ1−θ2)tan2(θ1+θ2)Tp=n2cosθ2n1cosθ1(A2pA1p)2=n2cosθ2n1cosθ14sin2θ2cos2θ1sin2(θ1+θ2)cos2(θ1−θ2)\begin{aligned} R_s&=\frac{A'_{1s}}{A_{1s}}=\frac{sin^2(\theta_1-\theta_2)}{sin^2(\theta_1+\theta_2)}\\\ \\ T_s&=\frac{n_2cos\theta_2}{n1cos\theta_1}(\frac{A_{2s}}{A_{1s}})^2=\frac{n2cos\theta_2}{n1cos\theta_1}\frac{4sin^2\theta_2cos^2\theta_1}{sin^2(\theta_1+\theta_2)}\\\ \\ R_p&=\frac{A'_{1p}}{A_{1p}}=\frac{tan^2(\theta_1-\theta_2)}{tan^2(\theta_1+\theta_2)}\\\ \\ T_p&=\frac{n_2cos\theta_2}{n1cos\theta_1}(\frac{A_{2p}}{A_{1p}})^2=\frac{n2cos\theta_2}{n1cos\theta_1}\frac{4sin^2\theta_2cos^2\theta_1}{sin^2(\theta_1+\theta_2)cos^2(\theta_1-\theta_2)}\\\ \\ \end{aligned} Rs​ Ts​ Rp​ Tp​ ​=A1s​A1s′​​=sin2(θ1​+θ2​)sin2(θ1​−θ2​)​=n1cosθ1​n2​cosθ2​​(A1s​A2s​​)2=n1cosθ1​n2cosθ2​​sin2(θ1​+θ2​)4sin2θ2​cos2θ1​​=A1p​A1p′​​=tan2(θ1​+θ2​)tan2(θ1​−θ2​)​=n1cosθ1​n2​cosθ2​​(A1p​A2p​​)2=n1cosθ1​n2cosθ2​​sin2(θ1​+θ2​)cos2(θ1​−θ2​)4sin2θ2​cos2θ1​​​

两个波的反射率和透射率又分别满足能量守恒定律:
Rs+Ts=1,Rp+Tp=1R_s + T_s=1,\ R_p+T_p=1 Rs​+Ts​=1, Rp​+Tp​=1

对于自然光,s 波和 p 波的能量相等,可以得到自然光的反射率:
Rn=12(Rs+Rp)=12[sin2(θ1−θ2)sin2(θ1+θ2)+tan2(θ1−θ2)tan(θ1+θ2)]\begin{aligned} R_n &= \frac{1}{2}(R_s+R_p)\\ &=\frac{1}{2}[\frac{sin^2(\theta_1-\theta_2)}{sin^2(\theta_1+\theta_2)}+\frac{tan^2(\theta_1-\theta_2)}{tan^(\theta_1+\theta_2)}] \end{aligned} Rn​​=21​(Rs​+Rp​)=21​[sin2(θ1​+θ2​)sin2(θ1​−θ2​)​+tan(θ1​+θ2​)tan2(θ1​−θ2​)​]​

当入射角很小的时候,有:
Rn=(n−1n+1)2R_n = (\frac{n-1}{n+1})^2 Rn​=(n+1n−1​)2

在《Real Time Rendering 4th》中,这个值被记作 F0,即接近0°入射角时的菲涅尔反射率。当入射角等于90°时,透射率为0,反射率为1。从0°增大到90°的过程中,反射率的变化规律随不同材料,不同波长的光而有所不同。

一个很有趣的事情是,对于不导电的介质而言,它的反射率变化几乎与光波无关,正如左下图所示。而对于良导体,例如金属而言,不同波长的光的反射率变化有较大区别,甚至不是单调的。这与金属的特性有关,即金属中存在大量的自由电子,且这些自由电子一般只分布在金属表面上。这些自由电子在表面层形成表层电流,而金属内部电荷体密度为0。

这两个性质影响着电磁场的边值关系,从而也影响着菲涅尔公式的推导。依赖新的边值关系我们可以得出只有当赋予金属一个复折射率才可以将绝缘介质中得到的折射和反射方程搬到金属这里来。然而,金属这个复折射率还依赖于光的频率,所以对于不同波长的光,它在金属表面的反射特性就表现得不同。也正是因为如此,在渲染中我们可以用一个数字为一个绝缘体指定反射率,但是需要三个数字(RGB)来为金属指定反射率。

上图分别描绘了从空气进入:玻璃,铜,铝三种材料的反射率变化规律。下图则截取了红绿蓝三原色的截面。可以看出,因为铜的红光反射率很高,所以铜表面呈现偏红的色泽,而铝对于不同波长的光的反射率区别比较小,所以表面呈白色/银色。

实际渲染中,我们无法直接计算这么负责的反射率方程,所以书中给出了简化的版本,同时考虑到人眼的透视效应,自变量从入射角折射角的θ,变成了法线 n 和 入射矢量 l
F(n,l)≈F0+(1−F0)(1−(n,l)+)5F(\textbf{n},\textbf{l})\approx F_0 + (1 - F_0)(1-(\textbf{n},\textbf{l})^+)^5 F(n,l)≈F0​+(1−F0​)(1−(n,l)+)5

或者,还提出,在某些程序中会使用以下更通用的版本:
F(n,l)≈F0+(F90−F0)(1−(n,l)+)1pF(\textbf{n},\textbf{l})\approx F_0 + (F_{90} - F_0)(1-(\textbf{n},\textbf{l})^+)^{\frac{1}{p}} F(n,l)≈F0​+(F90​−F0​)(1−(n,l)+)p1​
这个式子不同的地方在于,F90 可以不为1,用来处理一些菲涅尔方程不能很好地进行描述的材料。

【实时渲染】菲涅尔反射率相关推荐

  1. 【实时渲染】实时渲染中的光与颜色

    文章目录 光是一种电磁波 描述光的物理量 光谱功率分布 光度函数 光度测量 三色视觉理论 色光混合与颜色空间 用RGB色渲染 Gamma空间和线性空间 HDR 读书笔记,如有错漏,还望指正! 光是一种 ...

  2. 【实时渲染】RTR4 简要问答版

    第二章 图形渲染管线 (1)渲染管线可分为哪4个阶段? 第一个是应用程序阶段,第二个是几何处理阶段,第三个是光栅化阶段,第四个是着色阶段(Pixel Processing). (2)渲染管线分为几个阶 ...

  3. UE4实时渲染基础及深入探究

    实时渲染基础:link 实时渲染深入探究:link 目录 实时渲染基础 目标帧率与毫秒 帧时间与GPU/CPU 最常见的四大性能问题 实时渲染深入探究 延迟渲染与前向渲染 渲染之前和遮挡 CPU和GP ...

  4. 干货:实时渲染和离线渲染的区别?实时云渲染又是什么?

    常见的渲染类型有以下几种:实时渲染.离线渲染.实时云渲染.混合渲染.那么什么是实时渲染?实时渲染和离线渲染有哪些区别?各自有哪些典型应用场景...... 有没有人感觉知道了,但又没完全知道? 今天小编 ...

  5. 如何实现最佳的跨平台游戏体验?Unity成亮解密实时渲染技术!

    7月31日,2018云创大会游戏论坛在杭州国际博览中心103B圆满举行.本场游戏论坛聚焦探讨了可能对游戏行业发展有重大推动的新技术.新实践,如AR.区块链.安全.大数据等. Unity大中华区技术经理 ...

  6. 只用静态图像,就能实时渲染出丝滑3D效果 | CVPR 2021 Oral

    鱼羊 发自 凹非寺  量子位 报道 | 公众号 QbitAI 这般丝滑的美食展示,是否让跟随镜头移动的你食指大动? 再看这放大镜里流畅变化的弹簧,你敢相信,这完全是用静态图像合成的吗? 没错,这样的动 ...

  7. CVPR 2021 Oral|只用静态图像,就能实时渲染出丝滑3D效果

    作者丨鱼羊 来源丨量子位 编辑丨极市平台 [导读] 入选CVPR2021 Oral,NeX的AI,能直接把每秒渲染帧数从0.02帧提升到60帧,渲染速度比NeRF要快1000倍以上. 这般丝滑的美食展 ...

  8. 高糊视频秒变4K!Facebook发布低分辨率视频实时渲染算法,网友:是好东西,但是玩不起...

    贾浩楠 发自 凹非寺 量子位 报道 | 公众号 QbitAI 还记得那个引来巨大争议,最后把LeCun逼退推特的低分辨率图像还原算法PULSE吗? PULSE是针对低分辨率图像进行还原的,而就在PUL ...

  9. 利用GPU实现无尽草地的实时渲染

    利用GPU实现无尽草地的实时渲染 0x00 前言 在游戏中展现一个写实的田园场景时,草地的渲染是必不可少的,而一提到高效率的渲染草地,很多人都会想起GPU Gems第七章 <Chapter 7. ...

最新文章

  1. Check failed: error == cudaSuccess (8 vs. 0) invalid device function
  2. python测试开发自学教程-测试开发学习路线图
  3. github流程图_10月份Github上最热门的JavaScript开源项目
  4. 视频分类/动作识别数据库研究现状
  5. 机器学习参数优化数据改用所有数据还是训练集
  6. 《软件调试》读书笔记:第13章 硬错误和蓝屏
  7. 信息学奥赛一本通(1244:和为给定数)
  8. 唯一可译码的判定方法matlab,用c++编写程序判定唯一可译码?
  9. Power Query获取整理多来源数据
  10. 鸿蒙 OS 2.0 来了!值得开发者关注的是什么?
  11. TUXEDO运行监控命令概述
  12. 员工考勤管理系统c语言,员工考勤信息管理小程序,考勤信息管理小程序
  13. 上海计算机二级vb题目,上海计算机二级VB试题(卷).doc
  14. excel日期跳过休息日_休息一下Excel游戏
  15. SXF2019子串模糊匹配
  16. x4提示你的产品已经被禁用_win10系统注册表已被管理员禁用的解决方法
  17. Execel 中文转拼音英文字母
  18. 01-选择属于自己的相机
  19. JAVA 输出杨辉三角形
  20. java通过filter单点登陆

热门文章

  1. 一个平面设计师的异想世界|ONES 人物
  2. 2022年最新甘肃机动车签字授权人模拟试题及答案
  3. Java-OkHttp使用教程
  4. 关键字的首字母拼音和全拼搜索
  5. 粗略估计哥德巴赫猜想的成立(伯特兰-切比雪夫定理、质数密度定理)
  6. java复制屏幕文本内容_java实现文本复制功能
  7. word 里域代码显示设定
  8. HGST_DATA60 IOM固件更新方法
  9. 将.dmp文件导入Linux 机上的 Oracle数据库
  10. 二、HBase集群安装与基础架构