(转)透明光照模型与环境贴图之基础理论篇(折射率、色散、fresnel定律) .

摘要:
折射率较大的介质称为光密集介质,折射率较小的介质称光稀疏介质。根据菲涅耳定律计算的数据称为菲涅耳系数。严格来说,菲涅耳系数分为菲涅耳反射系数和菲涅耳折射系数。一般来说,菲涅耳系数是指“反射系数”。
 摘抄“GPU Programming And Cg Language Primer 1rd Edition” 中文名“GPU编程与CG语言之阳春白雪下里巴人”  

材质和光的交互除了反射现象,对于透明物体还存在透射现象。模拟光的透射现象通常是一个比较头痛的问题,因为需要至少计算光的两次透射方向,首先计算光从介质一进入介质二的透射方向,然后计算光从介质二进入介质一的透射方象。此外,光在透明物体内穿越的距离以及被穿越的材质,直接关系到光的衰减程度;加上,还有很复杂的透明材质的次表面散射现象,即光线渗透到透明材质中,在内部发生散射,最后射出物体并进入视野中产生的现象。总而言之,不论在 CPU 上还是在 GPU 上,想要精确完善的模拟光透现象是一件相当复杂的事情。

我们常听说的光线跟踪算法,虽然可以跟踪模拟出光透现象,但是对于次表面散射的模拟无能为力,并且基于 CPU 的光线跟踪算法是无法达到实时要求的。基于 GPU 的光线跟踪算法已经得到实现,不过我并不打算在本书中进行阐述,而是转而讲解较为基础的简单透明光照模型,以及其基于 GPU 的实现方法。待读者掌握了这个基础实现后,我会在本套书的第二版中再阐述基于 GPU 的复杂光透模拟的相关算法。

在一个场景中,光滑的物体表面往往会映射出周围环境,想象一下,一款赛车游戏中,当你的车呼啸而过时,车身同时映射出周围的景色,流光飞扬。为了达到这样的效果,通常使用环境贴图技术。

本章中,首先给出与光透现象相关的两个重要光学定律: Snell 定律和 Fresnel 定律;然后阐述如何使用环境贴图方法模拟光滑表面对周围场景的映射效果,并给出 GPU 实现代码;最后讲解简单透明光照模型,并给出 GPU 实现代码。这些技术非常有用,在大家所玩的 3D 游戏中,为了在效率和效果上达到平衡,百分之百是采用这些技术或者这些技术的变体。

 

11.1 Snell 定律与 Fresnel 定律

11.1.1 折射率与 Snell 定律

光在真空中的速度 与在透明介质中的速度 之比,如公式( 11-1 )所示,称之为该介质的绝对折射率,简称折射率。光在真空中的折射率等于 1 ,通常我们认为光在空气中的折射率也近视为 1 。

(转)透明光照模型与环境贴图之基础理论篇(折射率、色散、fresnel定律) .第1张                            

折射率较大介质的称为光密介质,折射率较小的介质称为光疏介质。下面给出一些常用介质的折射率,如表所示。

材质

折射率值

真空 / 空气

1.0/ 1.0003

1.333

玻璃

1.5-1.7

钻石

2.417

1.309

表 9 常用介质折射率表

Snell 定律描述光线从一个介质传播到另一个介质时,入射角、折射角和介质折射率的关系。如图 28 所示,假设光线从空气射入水面,入射角度为 ,空气对光线的折射率为Ni ,折射率角度为 ,水对光线的折射率为Nt ,则存在:

(转)透明光照模型与环境贴图之基础理论篇(折射率、色散、fresnel定律) .第2张                   

通过 snell 定律,我们可以根据入射光的方向向量求取折射光的方向向量

 (转)透明光照模型与环境贴图之基础理论篇(折射率、色散、fresnel定律) .第3张

 

需要注意:折射率和下面将要阐述的 fresnel 折射系数并不是同样的东西。折射率本质上反映的是光在介质中的运行速度,以及折射方向;而 fresnel 折射系数反映的是,光在透明介质表面被折射的光通量的比率。

11.1.2 色散

色散分为正常色散和反常色散,通常我们所说的色散都是指反常色散,即,对光波透明的介质,其折射率随着波长的增加而减小。1672 年,牛顿利用三棱镜将太阳光分解为光谱色带(红橙黄绿蓝靛紫),这是人类首次所做的色散试验。天空中的彩虹也是由于光与水蒸气交互形成的色散现象(图 29 所示)。法国数学家柯西在1936 年首先给出了正常色散的经验公式,称为柯西公式。

(转)透明光照模型与环境贴图之基础理论篇(折射率、色散、fresnel定律) .第4张 

 

 

计算机中的颜色是三原色,即只有红、绿、蓝三种颜色,给出光的红、绿、蓝分量的不同折射系数,可以近似模拟色散效果。

11.1.3 Fresnel 定律

光线照射到透明物体上时,一部分发生反射,一部分进入物体内部并在介质交界处发生折射,被反射和折射的光通量存在一定的比率关系,这个比率关系可以通过 Fresnel 定律进行计算。

  根据 Fresnel 定律计算得出的数据称为 Fresnel 系数。严格而言, fresnel 系数分为 fresnel 反射系数和 fresnel 折射系数,通常我们所说的 fresnel 系数指 “ 反射系数 ” 。例如,实时计算机图形学第二版 139 页中写到: fresnel 系数,如果 fresnel 为 0.7 ,那么被反射光线就减少奥 70% ,穿过表面的折射光线则是 30% 。下文中我们用 Kr表示 fresnel 反射系数,用Kt 表示 折射系数,如果不做详细说明,则通常所写的 fresnel 系数指反射系数。

一个完整的 fresnel 公式依赖于折射率、消光率和入射角度等因素,该公式的推导本质上是属于物理光学的部分,在《 3D 游戏与计算机图形学中的数学方法》一书的 117 页给出了 Fresnel 系数的简易推导方式,有兴趣的可以阅读。

schlick 给出了 Fresnel 反射系数的一个近似,精度在 1% 范围内:

(转)透明光照模型与环境贴图之基础理论篇(折射率、色散、fresnel定律) .第5张                       

Fo为入射角度接近 0 (入射方向靠近法向量)时的 Fresnel 反射系数, V是指向视点的观察方向, H为半角向量。 观察公式 ( 11-3 ) ,可以得出一个结论:随着入射角趋近 90 ,反射系数趋近 1 ,即擦地入射时,所有入射光都被反射。

在 fresnel equations-Wikepedia 中列举了当入射角度接近 0 时的 fresnel 反射系数的计算方法:

(转)透明光照模型与环境贴图之基础理论篇(折射率、色散、fresnel定律) .第6张                                 

求出 fresnel 反射系数后,用 1 减去该系数,就得到了折射系数,所以 当入射角度接近 0 时的 fresnel 折射系数的计算方法为:

(转)透明光照模型与环境贴图之基础理论篇(折射率、色散、fresnel定律) .第7张                            

综合公式( 11-3 )和公式( 11-4 ), fresnel 反射系数的 计算公式为:

(转)透明光照模型与环境贴图之基础理论篇(折射率、色散、fresnel定律) .第8张       

计算公式( 11-6 )比较消耗时间,所以通常在程序中使用入射角接近 0 时的 fresnel 系数。下面的公式( 11-7 )计算精度不高,但是胜在计算速度快,利于硬件实现,所以如果想动态的计算 fresnel 系数,而又不希望消耗太多的时间,可以采用公式( 11-7 )。

(转)透明光照模型与环境贴图之基础理论篇(折射率、色散、fresnel定律) .第9张                               

普通玻璃的反射系数大约是 4% 。

 
 
链接 http://www.cnblogs.com/guoyiqi/archive/2011/08/01/2137117.html
 

免责声明:文章转载自《(转)透明光照模型与环境贴图之基础理论篇(折射率、色散、fresnel定律) .》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇自己动手开发编译器(二)正则语言和正则表达式Android-自己定义PopupWindow下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

随便看看

jenkins 配置 ssh连接远程服务器并执行相关命令

5、配置完成后,点击TestConfiguration返回Success即证明Jenkins所在宿主机可以正常链接到待部署机。...

ERROR [IM002] [Microsoft][ODBC 驱动程序管理器] 未发现数据源名称并且未指定默认驱动程序

使用C#生成应用程序以及读取和写入dbfs时,打开方法error[IM002][Microsoft][ODBC驱动程序管理器]中发生错误。找不到数据源名称,也未指定默认驱动程序。这个程序以前使用得很好。升级和修改后,在测试中发现了问题。为了追踪来源,我曾经是一个32位操作系统。现在我安装了一个win764位操作系统。从控制面板到管理工具再到ODBC驱动程序,...

Ubuntu 18.04 安装微信(附企业微信)

Ubuntu软件市场也是有的,所以安全性不用担心开源地址:https://github.com/geeeeeeeeek/electronic-wechat下面介绍几种安装的方式:1.直接解压运行先选择你系统版本:解压一下:tar-zxvfxxx.tar.gz算了,还是简单为新手分析一下==》tar命令可以解包.tar和.tar.gz。为啥我的没有微信图标?...

pycharm最新版本激活码(永久有效) python安装教程

输入python以查看当前版本的python。您可以输入“print'helloworld”并单击下载以启动PyCharm://pan.baidu.com//1eVdm4dUPKn3ZY_Xj kqNXw提取代码:l83f2,下载破解补丁(版本2018.3.5)下载链接至地址:...

node 访问第三方API

如果没有提供头,将检测文件后缀,并在PUT请求中设置相应的内容类型。...

LaTeX表格tabular背景色添加技巧 [转]

我们所用的宏包为colortbl,这个宏包可以设置表格中数据、文本、行、列、单元格前景和背景以及边框的颜色,从而得到彩色表格。同时需要array和color两个宏包的支持。宏包提供了一组着色命令,经常用到是列着色命令,其格式为:\columncolor[色系]{色名}[左伸出][右伸出]。常用色系有三原色rgb灰度gray和四色cmyk三种;被预定义的色名有...