带反射和折射的Fresnel函数

参考文献:Reflections and Refractions in Ray Tracing - Stanford Graphics

一、考虑反射和折射的Fresnel公式

反射部分的计算公式为:
R(θi)=R⊥(θi)+R∥(θi)2R(\theta_i)=\frac{R_\perp(\theta_i)+R_\parallel(\theta_i)}{2}R(θi​)=2R⊥​(θi​)+R∥​(θi​)​
其中,
R⊥(θi)=(η1cos⁡θi−η2cos⁡θtη1cos⁡θi+η2cos⁡θt)2R_\perp(\theta_i)=(\frac{\eta_1\cos \theta_i-\eta_2 \cos \theta_t}{\eta_1\cos \theta_i+\eta_2 \cos \theta_t})^2R⊥​(θi​)=(η1​cosθi​+η2​cosθt​η1​cosθi​−η2​cosθt​​)2
R∥(θi)=(η2cos⁡θi−η1cos⁡θtη2cos⁡θi+η1cos⁡θt)2R_\parallel(\theta_i)=(\frac{\eta_2\cos \theta_i-\eta_1 \cos \theta_t}{\eta_2\cos \theta_i+\eta_1 \cos \theta_t})^2R∥​(θi​)=(η2​cosθi​+η1​cosθt​η2​cosθi​−η1​cosθt​​)2
cos⁡θt=1−sin⁡2θt\cos \theta_t=\sqrt{1-\sin^2 \theta_t }cosθt​=1−sin2θt​​
折射部分的计算公式为:
T(θi)=1−R(θi)T(\theta_i)=1-R(\theta_i)T(θi​)=1−R(θi​)

当考虑全反射情况时,完整的计算公式为:
RSchlick2(θi)={R⊥(θi)+R∥(θi)2⇔notTIR1⇔TIRR_{Schlick2}(\theta_i)= \begin{cases} & \frac{R_\perp(\theta_i)+R_\parallel(\theta_i)}{2} \Leftrightarrow not \ TIR \\ & 1 \Leftrightarrow TIR \end{cases} RSchlick2​(θi​)={​2R⊥​(θi​)+R∥​(θi​)​⇔not TIR1⇔TIR​

二、Fresnel公式的近似

PBR中,常见的Schlick Fresnel近似公式为:
RSchlick(θi)=R0+(1−R0)(1−cos⁡θi)5R_{Schlick}(\theta_i)=R_0+(1-R_0)(1-\cos{\theta_i})^5RSchlick​(θi​)=R0​+(1−R0​)(1−cosθi​)5
其中
R0=(η1−η2η1+η2)2R_0=(\frac{\eta_1-\eta_2}{\eta_1+\eta_2})^2R0​=(η1​+η2​η1​−η2​​)2

而当考虑到折射和全反射时,近似公式应为:
RSchlick2(θi)={R0+(1−R0)(1−cos⁡θi)5⇔η1≤η2R0+(1−R0)(1−cos⁡θt)5⇔(η1>η2)∧notTIR1⇔(η1>η2)∧TIRR_{Schlick2}(\theta_i)=\begin{cases} & R_0+(1-R_0)(1-\cos{\theta_i})^5 \Leftrightarrow \eta_1 \leq \eta_2 \\ & R_0+(1-R_0)(1-\cos{\theta_t})^5 \Leftrightarrow (\eta_1 > \eta_2) \wedge not\ TIR \\ & 1 \Leftrightarrow (\eta_1 > \eta_2)\wedge \ TIR \end{cases} RSchlick2​(θi​)=⎩⎪⎨⎪⎧​​R0​+(1−R0​)(1−cosθi​)5⇔η1​≤η2​R0​+(1−R0​)(1−cosθt​)5⇔(η1​>η2​)∧not TIR1⇔(η1​>η2​)∧ TIR​

【Graphics·二】带反射和折射的Fresnel函数相关推荐

  1. openGL GLSL GLSL.Refract Reflect Diffraction 反射、折射、衍射Fresnel Effect

    一.Refract & Reflect   Snell定律描述了光线从一个介质传播到另外一个介质时,入射角.折射角以及介质折射率的关系.通过snell定律,可以根据入射光的方向向量求取折射光的 ...

  2. 【Unity3d】(二) Unity3D--光的反射与折射实现

    Unity3D--光的反射与折射实现 最近做老师的科研项目,主要方向是虚拟现实,重点是研究光学物理实验.在这里写一些自己开发过程中想法和实现细节,方便自己回顾和分享给需要的小伙伴! ☆☆☆☆☆☆☆☆☆ ...

  3. 【Unity3D】反射和折射

    1 前言 立方体纹理(Cubemap)和天空盒子(Skybox)中介绍了生成立方体纹理和制作天空盒子的方法,本文将使用立方体纹理进行采样,实现反射.菲涅耳反射和折射效果.另外,本文还使用了 GrabP ...

  4. 物理光学4 反射与折射中的一些特殊现象

    物理光学4 反射与折射中的一些特殊现象 第一种情况:n1<n2n_1<n_2n1​<n2​ 也就是入射端的折射率小于折射端的折射率(也就是从光疏介质到光密介质,可以类比从空气中传播到 ...

  5. UnityShader---高级纹理(反射、折射、菲涅尔反射、镜子\玻璃效果)(内置渲染管线)---11

    反射:代码里有阴影和衰减计算 Shader "Unlit/17" {Properties{_Color("Color",Color)=(1,1,1,1)_Ref ...

  6. OpenGL基础37:反射与折射

    前置:OpenGL基础20:镜面光照 一.反射 不一定所有的光源都是简单的白光,不仅如此,光线也是可以多次反射的,例如一面镜子,可以从中看到远处的风景,一些金属材质的物体表面也会反射周围物体的光 这主 ...

  7. 反射,折射,菲涅尔反射总结

    立方体纹理(Cubemap)最常见的是用于天空盒子以及环境映射,通常被用作具有反射,折射属性物体的反射源.Lighting-Environment中添加对应的材质. 材质对应贴图的类型要选择Cube. ...

  8. 反射,折射,菲涅尔反射Shader实现

    反射 - 对物体表面进行反射处理 折射 - 对物体表面进行折射处理 菲涅尔反射 - 对物体入射角越小的反射效果越好,越大的边界反射亮度越大.(大概就是这样,具体查百度) 菲涅尔反射的效果跟接近现实中环 ...

  9. UA PHYS515A 电磁理论V 电磁波与辐射4 反射与折射

    UA PHYS515A 电磁理论V 电磁波与辐射4 反射与折射 假设平面z=0z=0z=0是两种不导电介质的交界面,z<0z<0z<0的空间中介质的介电常数与磁导率为ϵ1,μ1\ep ...

最新文章

  1. JAVA编程TXT文件_java开发之读写txt文件操作的实现
  2. 七牛云上传文件之表单上传文件
  3. redis 正则匹配value_Redis 获取匹配所有的key
  4. idea调试debug技巧_被我用烂的DEBUG调试技巧,专治各种搜索不到的问题
  5. Android之平时遇见的异常和错误总结(不断更新)
  6. 天梯赛 喊山 bfs
  7. jdk12 switch_玩JDK 12的Switch表达式
  8. webpack系列-plugin
  9. 微信分享JS-SDK示例页面
  10. 利器:服务器与CST时间误差8小时的修复方法——timedatectl
  11. Oracle 分组拼接字符串
  12. cad在线转换低版本_别再傻瓜式操作了,工作效率上不去?这6个小技巧带你玩转CAD...
  13. Botanical Dimensions:借助第九代智能英特尔® 酷睿™ 处理器实现独特沉浸式体验...
  14. 项目经理的五大核心技能
  15. GB2312、GBK、UTF-8 如何转换
  16. 超简单!使用jQuery实现登录页面的“记住密码”功能
  17. 免校准的电量计量芯片_电能计量专用芯片CS5460A
  18. android 看图片tv版,易图浏览_易图浏览TV版APK下载_电视版 for 安卓TV_ZNDS软件
  19. 行癫:只有合作伙伴和客户成功,才是阿里云的成功
  20. CCT Camera Tuning

热门文章

  1. Jsdoc-to-markdown
  2. java后台识别二维码的方法
  3. 新加坡行前——上海一日游 13/09/2012
  4. Uniport数据库介绍与使用
  5. VMware 安装win11
  6. 我的2022年度状态总结(Formal ver. )
  7. winetricks
  8. 安装vue-cli出现的错误并用其创建项目
  9. [MATLAB学习tip3]geotiff(tif/tiff)文件读取、使用与保存
  10. STM32 低功耗睡眠模式(SLEEP)事件(EVENT)唤醒实现及优化