ZEMAX | 如何使用米氏散射模型模拟环境中的散射现象

本文介绍了利用光学全息图降低单透镜像差的方法。在描述了表示全息图构造光束的两个 ZMX 文件之后,本文演示了如何在重现文件中设置 OFH。然后解释了如何轻松地从重现文件中访问任何结构造光束变量,以实现衍射受限单透镜的设计。(联系我们获取文章附件)


简介


根据麦克斯韦方程式,光线入射球型粒子会产生散射的现象,而米氏散射理论为此提供了解析解。此理论可推广至任意大小的粒子,因此可适用在所有"粒子半径对入射波长比"的情况。这对于模拟白云中的散射现象1时很有帮助,同时也有助于解释光线入射特定物质,如牛奶和生物组织时所产生的变化。在 OpticStudio 的非序列模式中,我们可以用体散射(bulk scattering)的追迹方式建立这类的模型。此外,Bohren 和 Huffman 的研究为此现象的模拟提供了计算的依据。


这篇文章将说明模型在模拟系统中的表现,同时也会以一个大气中的散射现象作为例子,此模拟将运用到米氏理论的 DLL 。


参数模拟


为了在非序列模式中的对象上套用米氏散射分布的设定,如下图所示,我们需先开启该物件的属性字段(Object Properties),并在下方的 Volume Physics 项目中勾选 DLL 定义散射(DLL Defined Scattering),最后在 DLL 字段选择 MIE.DLL。



为了使这个 DLL 正常运行,我们需要输入5项参数。


折射系数


我们在这个字段设定散射粒子的折射系数(实数部分),而环境介质的折射系数,则是在材质(Material)栏位设定。若在粒子与环境有相同折射系数的情况下(或两者的差异在10-6以下),则此时粒子无法自环境中被区分,散射的现象将不会发生。另外,当粒子的折射系数被设定小于0.0,此时也不会有散射发生,DLL 将会被忽略。


尺寸(微米)


此处指的是球型粒子的半径(r)大小。若数值被设定为≤ 0.0,则不会有散射现象发生,DLL 将被忽略。半径的最大值将取决于标准化的球体大小(x = 2πrn/λ,n为环境的折射率),一般情况下默认为1934。若数值超过此数值,则散射不会发生。对于如此大的球体粒子,直接在 OpticStudio 中模拟球体本身会是一个较理想的方式,不建议使用球体的等效散射分布设定。


密度和平均自由路径


散射粒子在对象中的密度。若数值小于0.0,则散射不会发生,DLL 会被忽略。若数值大于0.0,则此时程序会将数值搭配散射截面(σs)进行计算,最后求得散射平均自由路径(mean-free path)为λmfp = 1/nsσs。若密度等于0.0,则此时的平均自由路径会与上方"平均路径(Mean Path)"栏位等值。而当密度大于0.0时,平均路径的数值将被忽略。此外,若平均路径的数值为0,则 DLL 将被忽略。注意,平均路径字段无法输入负值。


最小阈值


OpticStudio 中的散射计算会涉及机率密度函数(Probability density function)的积分。一般而言,在极坐标(polar direction)上积分的范围是由0到π,在方位角(azimuthal direction)上取0到2π。但对于分布较集中的情形而言,计算积分的过程会涵盖大量机率为零的范围,减低计算过程的效率。为了解决这样的问题,通过修改最小阈值,我们可以降低极坐标积分的上限。此上限值是由机率分布峰值中一小部分区域在极坐标空间中的位置所决定。举例而言,假如我们将最小阈值设定为0.01,则此时极坐标积分的上限就会是机率分布为0.01的位置坐标乘以峰值的机率。若输入值小于≤0.0或者≥0.5,则数值将会变为预设的0.001。


我们必须审慎看待最小阈值的设定。一般来说,在粒子较大的案例中,机率分布会更集中。设计者为了得到更好的结果,可能会将最小阈值设为更大的数值。但由于散射计算中的角分辨率为定值(0.1度),所以当机率分布更加集中时,相邻角度的机率变化会更加剧烈。因此在这个案例中,为了确保能有足够的数据点用于积分,降低最小阈值是必要的。


我们可以通过比较模拟结果的方式找到合适的最小阈值。输入值由0.01开始,并逐次将前一次的数值乘上0.1。若发现结果产生明显的变化,则继续递减数值直到结果收敛。当我们得到这个最佳值后,可以发现往后即使再减少最小阈值也无法增加计算的准确性,只是徒然的增加运算时间而已。


透射率


这是一个衰减因子,可降低任何经历散射事件的光线的强度。当射线散射在散射体积内时,其强度乘以此因子。例如,如果传输设置为 0.89,则散射射线的强度将是散射前强度的 0.89 倍。此因子允许用户考虑散射球体中能量的吸收。背景介质中能量的吸收将由卷"材料"列中指定的材料的传输属性确定。


虽然散射粒子折射指数的假想成分会影响吸收——这可以以传输输入 DLL 为特征——该组件也会影响散射的概率分布。但是,只有当假想组件的大小为 +10-2 或更大,对应于高度吸收粒子时,概率分布才会受到影响。因此在模拟米氏散射时,我们可以先忽略折射系数虚部造成的影响。


额外考量


最后,DLL 中不会使用到"角度"这个参数,但如果将这个参数值设为≤ 0.0或> 180.0,则散射的现象不会发生(DLL 将被忽略)。


米氏散射的分布主要由两个无因次的参数所描述:散射粒子和背景介质的折射率比值(m =nparticle /nbackground)以及归一化的球体尺寸(x =2πrnbackground/λ)。米氏散射的分布会以每一对(m, x)为目标进行计算,一旦完成这些计算的过程,且结果储存在内存中之后,则任意数量的光线就可被用于追迹。DLL 至多可储存10,000对的(m, x)值。一旦超过这个上限,则系统不会再储存任何的米氏散射数据,其余的(m, x)输入将不会产生散射的现象。对于大多数的用户而言,10,000的输入上限值是非常足够的。


范例:大气中的散射现象


接下来我们会使用一个简单的范例验证米氏散射的程序(联系我们获取文章附件中的范例)


在范例中,我们使用一个椭圆光源(Source Ellipse)模拟太阳,光源的光谱分布由它的黑体温度决定。



如上图,我们将温度设为 5780 K 以模拟太阳的表面。


同时使用矩形对象代表大气环境,我们可以发现大气的颜色是由颜色探测器(Detector Color object)所决定。我们使用另一个颜色探测器观察太阳的光谱信息。注意,这个示例的结果并未按比例尺绘制,只是单纯的展示如何将米氏散射的程序于系统中进行模拟。


范例中的系统包含了两个不同的结构,在结构1中,对象的参数是依据瑞利极限(Rayleigh limit)的条件进行设定的,确保 DLL 可以产生符合预期的散射现象(此时归一化的球体尺寸<< 1)。



在粒子折射率方面,我们以1.33表示水的折射系数。此外,我们将矩形对象的材质字段留白,代表该物件可视为空气。由此,我们建立了光线因空气中的水滴而发生散射的等效模型。


每个水滴的大小为7 nm。对可见光波长(介于0.4至0.7之间)而言,因此归一化的球体大小介于0.063和0.11之间(<< 1,符合瑞利极限的条件)。而粒子密度方面,我们需要设定适当的数值,使系统的平均自由路径可保持约几毫米长(这项数据并不会显示在结果中,但会受到程序变更的影响)。


在追迹 1,000万条光线后,我们可以发现大气显现的结果为蓝色,这是因为瑞利极限中散射的现象与入射波长(1/λ4)有很强的关联性所致。



此处的颜色可根据色坐标进行定义,如下图我们可在优化函数中选择 NSDE 操作数来达成目的。



将结果产生的数值与优化函数中的太阳光谱(上图的第7、8行)进行比较,我们可以轻易的观察到瑞利散射发生时颜色产生的位移。


在结构2中,散射粒子的尺寸明显增加了,在这样的情况下讨论的范畴将由瑞利极限变更至米氏散射的领域。



为了使散射的平均自由路径与结构1相似(几毫米长),粒子的密度必须降低。


而这项数据同样不会显现在结果中,但仍会受到程序的影响。


同时,最小阈值也必须降低,确保在粒子尺寸如此大的情况下,机率分布仍能够充分的被采样。


完成 1,000万条光线的追迹后,我们可以发现显现的颜色结果和光源的光谱是十分接近的。



在优化函数部分,我们同样加入 NSDE 操作数使结果能更明确的表示:



最后得到的结果显示,在米氏散射的条件下,散射的分布与入射波长的关联性极低,这个结果与文献的结论是一致的4。这样的现象解释了为何太阳周围的光线看起来是白色的,和太阳本身的颜色一样。同时,这也解释了天空中的云为什么看起来同样是白色的。这是因为构成白云的水滴尺寸远大于大气中的粒子(在本范例中,我们以液态水代表这些粒子,但实际上这些粒子多半是氮气和氧气分子)。因此,我们可以观察到当阳光在白云周围产生散射时,并不会有颜色的偏移,但当光线在大气中散射时却是有的。