Q91:真实地模拟透明材质(Realistic Transparency)

本文介绍如何使用菲涅尔方程模拟透明材质的真实折射效果,并讨论光线在不同介质中传播的颜色过滤现象。通过C++代码实现了菲涅尔反射与折射模型,并展示了实际模拟效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

在“Q90”中,我们认为折射系数kt是一个常数,对应反射系数kr=1-kt。但是,实际情况则是:kt会因入射角的不同而变化。

 

这一章节,我们将真实地模拟透明材质。主要考虑两个问题:1,kt因入射角的不同而变化;2,透明材质对颜色的过滤

 

91.1 菲涅尔方程(The Fresnel Equations)

 

菲涅尔方程详细描述了“kt因入射角的不同而变化”的规律(注意,“菲涅尔方程”针对的是镜面反射和镜面折射)。

 






 

91.2 颜色过滤(Color Filtering)

 

当光线在介质中传播时,由于光线和介质中的分子相互作用,随着传播距离的增长,导致光线发生散射。如果这种散射和光线的波长相关,则介质会呈现相应的颜色。




当光线在介质中传播时,如下图:




 

光线在介质中的传播距离怎么求呢?

 

当光线进入介质时,即在撞击点处产生折射光线,我们要求的则是该折射光线在介质中的传播距离。这条折射光线撞击到物体的最小距离即为该光线在介质中传播的距离(如上图中的t1)。

 

当折射光线从介质内部撞击介质界面时,一方面会产生折射光线离开介质,另一方面则会产生反射光线。对于新产生的反射光线将继续在介质中传播,将继续衰减,这个传播距离怎么求呢?新的反射光线撞击到物体的最小距离即为该光线在介质中传播的距离(如上图中的r)。

 

91.3 C++代码实现

 

定义介质类“Dielectric


 

由上方类的定义,可以看出介质类对应着“菲涅尔反射模型”、“菲涅尔折射模型”,所以,接下来,我们需要定义这两个“模型”的类。

 

“菲涅尔反射模型”

 

主要代码如下:



 

 

“菲涅尔折射模型”

 

主要代码如下:



 

在定义好介质类及其对应的反射/折射模型,我们现在看看介质类的着色函数(Dielectric::shade())



 

Whitted::trace_ray()做一点点修改:

 


 

91.4 测试图形

 

相关测试代码:

 





 

输出图形:

 

91.4.1 对比测试Realistic Transparency图形、Simple Transparency图形

 

         dielectric_ptr->set_eta_in(1.6);

         dielectric_ptr->set_eta_out(1.0);

         dielectric_ptr->set_cf_in(1.0,1.0, 1.0);

         dielectric_ptr->set_cf_out(1.0,1.0, 1.0);

前边的是当前Realistic Transparency图形;后边的是之前Simple Transparency图形

  

(两张图形的差别貌似不明显,主要差异:参考Figure28.1,当入射角大于50度时,kr、kt会发生剧烈变化,而不是Simple Tranparency中那样还是保持常数。这个变化表现在介质球的轮廓附近的位置。)

 

 

         dielectric_ptr->set_eta_in(0.6);

         dielectric_ptr->set_eta_out(1.0);

         dielectric_ptr->set_cf_in(1.0,1.0, 1.0);

         dielectric_ptr->set_cf_out(1.0,1.0, 1.0);

前边的是当前Realistic Transparency图形;后边的是之前Simple Transparency图形

  

(两张图形的差别貌似不明显,主要差异:参考Figure28.2,当入射角大于30度小于41.8度时,kr、kt会发生剧烈变化,而不是Simple Tranparency中那样还是保持常数。这个变化表现在介质球刚好发射全反射时的附近位置。)

 

91.4.2 对比测试介质内外过滤颜色的图形

 

前边的是介质内部过滤颜色的图形;

         dielectric_ptr->set_eta_in(1.6);

         dielectric_ptr->set_eta_out(1.0);

         dielectric_ptr->set_cf_in(1.0,1.0, 0.0);

         dielectric_ptr->set_cf_out(1.0,1.0, 1.0);

 

后边的是介质外部过滤颜色的图形

         dielectric_ptr->set_eta_in(1.6);

         dielectric_ptr->set_eta_out(1.0);

         dielectric_ptr->set_cf_in(1.0,1.0, 1.0);

         dielectric_ptr->set_cf_out(1.0,1.0, 0.0);

   

但从这组测试来看:介质内部过滤颜色作用的是折射光线,介质外部过滤颜色作用的是反射光线。有折射光线是一定有反射光线;但是当入射角接近90度时,则接近镜面反射(只有反射光线没有折射光线)。这样一来,整体的反射光线则比折射光线多,所以介质外部过滤颜色作用的光线比介质内部过滤颜色作用的光线要多。“多的位置”即是“入射角接近90度的位置”(介质球轮廓位置)。所以,介质外部过滤颜色作用的介质球的轮廓要比介质内部过滤颜色作用的介质球的轮廓有更多的“黄色”。

 

 

前面这组测试图形“多的位置”并不明显,接下来,我们看看一组包含全反射的测试图形。

 

前边的是介质内部过滤颜色的图形;

         dielectric_ptr->set_eta_in(0.6);

         dielectric_ptr->set_eta_out(1.0);

         dielectric_ptr->set_cf_in(1.0,1.0, 0.0);

         dielectric_ptr->set_cf_out(1.0,1.0, 1.0);

 

后边的是介质外部过滤颜色的图形

         dielectric_ptr->set_eta_in(0.6);

         dielectric_ptr->set_eta_out(1.0);

         dielectric_ptr->set_cf_in(1.0,1.0, 1.0);

         dielectric_ptr->set_cf_out(1.0,1.0, 0.0);

 

  

在包含全反射的图形中,全反射部分的反射光线则全是介质外部过滤颜色作用“多出来的”。

  

91.5 其他说明

 

完整的代码,参考:http://download.youkuaiyun.com/detail/libing_zeng/9786258

 

Referrance

[1]. Kevin Suffern, Ray Tracing from theGround Up, A K Peters Ltd, 2007.


HLS(Harmonized Landsat Sentinel-2)数据集提供了一种全新的地球表面观测方式,将美国陆地卫星8/9(Landsat 8/9)上的OLI(Operational Land Imager)传感器数据与欧洲哨兵-2(Sentinel-2)卫星上的MSI(MultiSpectral Instrument)数据结合起来,以产生统一的地表反射率和大气层顶部亮度数据。由于大气校正是HLS处理流程中的关键步骤,理解其原理和应用是确保数据质量的关键。 参考资源链接:[HLS项目:统一的大地遥感与哨兵-2数据融合指南](https://wenku.youkuaiyun.com/doc/1ga9q91ho6?spm=1055.2569.3001.10343) 首先,大气校正的主要目的是去除大气层对遥感图像的影响,从而获取地表的真实反射率。HLS数据集使用先进的算法,例如6S模型(Second Simulation of the Satellite Signal in the Solar Spectrum),来模拟和纠正大气散射和吸收效应。这些算法考虑了多种大气参数,如气溶胶类型、水汽含量、臭氧浓度等,以计算出从大气顶到底部的辐射传输。 使用HLS数据集进行大气校正时,通常涉及以下步骤: 1. 从HLS产品中获取必要的大气参数,如气溶胶光学厚度和水汽含量。 2. 根据这些参数,应用6S模型进行大气校正。 3. 校正过程中,需要考虑太阳的位置(太阳高度角和方位角)。 4. 使用校正后的数据,计算大气校正后的地表反射率(Surface Reflectance)。 评估大气校正对地表反射率的影响可以通过以下方式进行: - 比较校正前后的反射率值,确保校正后的数据更加稳定和可靠。 - 分析校正前后像元值的分布变化,观察数据的离散程度。 - 使用地面实测数据进行验证,确保遥感数据反映的地表物理特性与实际相符。 在处理HLS数据集时,用户可以参考《HLS项目:统一的大地遥感与哨兵-2数据融合指南》中提供的详细信息。该指南不仅介绍了HLS数据集的结构和格式,还提供了大气校正的具体操作步骤和建议,帮助用户理解和掌握使用HLS数据集进行科学研究的整个流程。 参考资源链接:[HLS项目:统一的大地遥感与哨兵-2数据融合指南](https://wenku.youkuaiyun.com/doc/1ga9q91ho6?spm=1055.2569.3001.10343)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值