可用散射模型(Available Scatter Models)

有七种散射模型可供选择:无散射、朗伯 (Lambertian)、高斯(Gaussian)、ABg、ABg文件、BSDF和用户自定义。

以下各部分定义了每个可选的散射模型。

无散射(No Scattering)

对反射光线不做任何修改,BSDF为零且向量的大小为0。

朗伯散射(Lambertian Scattering)

对于朗伯散射,散射光线投影矢量在单位圆内等概率分布且BSDF为1/π。

散射光强与cosθs成正比。

注意,朗伯散射对于光线的入射角是相互独立的。大多数漫反射表面都近似朗伯模型。

高斯散射(Gaussian scattering)

高斯散射的形式为:

其中A为归一化常数。所产生的分布在方向余弦空间旋转对称,不考虑反射光线与表面法线方向所成的角度。无量纲值σ决定投影的平面上高斯分布的宽度。大于约5.0的值将得到近似朗伯的BSDF。因此,允许的σ最大值为5.0。

ABg模型散射(ABg Model Scattering)

ABg散射模型是一种广泛用于定义BSDF的方法。在散射主要来源为随机各向同性表面粗糙度并且该粗糙度和所散射的光波长相比较小时,此散射模型通常是一个很好的模型。这些假设通常对抛光的光学表面有效。ABg BSDF由以下公式给出:



以下是对模型参数的约束:

A必须大于或等于0.0,B必须大于1E-12,除非g = 0.0。

如果g为0.0,则B可以为0.0。

如果A为0.0,将不发生散射。

如果g为0.0(注意,g可以取任意值,正值或负值,但是一般在0.0和3.0之间),则BSDF为常量:



且所产生的散射是有效的朗伯散射模型。

对于高度抛光的表面(特别是当g >> 1.5且B << 1E-8时),散射到漫射角的功率与镜面反射功率相比可以忽略不计。这样做的结果是OpticStudio不能准确地判断较大角度的散射功率。这是由于具有高度抛光表面的系统的数值限制。

如果将A、B和g设置为相对平坦的BSDF曲线,则在数值上使用朗伯模型要快得多。

典型的ABg BSDF曲线如下图所示,其中参数A = 0.002,B = 0.005,g = 2.0。



ABg BSDF模型具有一些有趣的特性(当g不等于0时):

时,随着趋向于0,BSDF曲线变得平滑并趋向于A/B值。

时,BSDF在log-log图中变成了一条直线,斜率为-g。

曲线的平坦和倾斜部分的转折点在,其中

定义ABg数据(Defining ABg data)

经常会出现这样的情况,一个光学系统中的多个物体使用相同的ABg数据。为了避免多次输入相同的数据,简化ABg数据编辑的任务,OpticStudio提供了一个ABg数据库。它可以直接在OpticStudio中编辑,请参阅"ABg散射数据库(ABg Scatter Data Catalogs)"。注意,为了使能量守恒,所定义的ABg数据必须在所有可能的散射角上的积分且总值必须小于1.0。

OpticStudio允许针对反射和折射分别定义ABg数据。如果反射光线发生反射或折射,接着该光线会使用合适的系数进行散射。在对话框控件中出现的ABg数据名称是在ABg散射数据文件中定义的。可以通过在"系统选项(System Explorer)"窗口的"文件 (Files)"部分中选择使用ABg数据文件。

OpticStudio首先确定是否将光线散射如"散射(Scattering)"部分所述 。如果光线发生散射,散射光线将随机产生。如果大量的光线发生散射时,会得到恰当的BSDF函数,从而可产生光线的方向。

有关使用源光谱(Source Color spectrum)定义光源的散射模型的重要信息,请参阅"ABg数据的波长缩放(Wavelength scalling of ABg data)"。

ABg文件散射(ABg File Scattering)

ABg文件散射模型可用一组ABg配置文件定义表面的散射属性。在文本文件中指定了要使用的配置。文本文件必须有扩展名.ABGF,并且必须位于<data>\ABg_Data文件夹(参阅"文件夹(Folders)")。ABGF文件中指定的所有配置必须在当前加载的ABg数据文件中定义(参阅"ABg数据文件(ABg Data File)"),并且所有配置必须使用大写字母定义(不考虑ABg数据文件中配置名称的大小写)。

ABGF文件的语法为:

 
Number of profiles Weights_Are_Absolute<optional> Profile_1_Name Profile_1_Weight
Profile_2_Name Profile_2_Weight
...

文件的第一行应包含1个或2个数字:第一个数字用于定义ABGF文件包含的ABg配置文件的数量,第二个数字(可选值)用于定义一个标记,该标记表示了为每个配置文件提供的权重是相对值还是绝对值。如果省略此标记或者将其设置为零,则配置文件权重为相对值;否则,配置文件权重为绝对值。在这两种情况下,都将每个配置文件的BSDF值乘以相应的配置文件权重,再全部相加。如果配置文件权重取为相对值,则将BSDF值总和除以权重总和,由此产生的散射分布对应于所定义的考虑权重后的配置文件总和。相反,如果配置文件权重取为绝对值,则不将BSDF值的总和归一化,由此产生的散射分布对应于配置文件的绝对值总和。在后一种情况下,由用户来确定根据指定ABg配置文件的绝对值总和得到的TIS结果对任何波长或者任何入射角不超过1。

该文件的其余行包含所需计算总和的每个ABg配置文件的名称和相应的权重。输入的配置文件名称应与ABg散射数据库(参阅"ABg散射数据库(ABg Scatter Data Catalogs)")中出现的名称完全一致。每个配置文件都被视为在ABg散射模型下,(参阅"ABg模型散射(ABg model scattering)")。因此,如果在ABg散射数据库中为配置文件定义了参考波长,那么配置文件的ABg数据可以通过波长缩放调整,并且每个配置文件的ABg数据将在两个点之间插入,其入射角度为最接近于散射光线的入射角。在对所有配置文件进行求和之前,首先对ABGF文件中指定的每个配置文件进行波长缩放调整,并进行入射角插值。

在ABGF文件中可以指定的最大配置文件数为20。如果需要增加此限制数量,请联系OpticStudio技术支持部门。

BSDF散射(BSDF Scattering)

BSDF散射模型可使用表格BSDF数据来定义表面的散射属性。数据通过文本文件提供。文件必须遵循标题为"Zemax Tabular BSDF data file format"的文章中所述的Zemax Tabular BSDF数据文件格式,请查阅: Zemax Tabular BSDF数据文件格式(Zemax Tabular BSDF data file format) - 知识库

OpticStudio允许为反射率和折射率定义单独的BSDF数据。如果镜面反射光线反射或折射,则光线随后使用来自适当的输入文件中的数据进行散射。对于提供散射模型的文件,必须具有.BSDF扩展名(如介绍文件格式的文章中所示),并且必须位于<data>\Scatterdata文件夹(参阅"文件夹(Folders)")。文件名可以包含的最大字符数(包括.BSDF扩展名)为60。

标题为"How to Use Tabular Data to Define the Surface Scattering Distribution"的知识库文章中已提供有关此模型及其用途的完整描述(参阅:如何使用表格BSDF数据来定义表面散射分布(How to use tabular BSDF data to define the surface scattering distribution) - 知识库(zemax.com)),OpticStudio网站上也提供了此文章。

用户自定义散射(User Defined Scattering)

可以通过动态链接库(DLL)这一外部程序对其它常规的表面散射进行定义。OpticStudio随附提供了示例DLL,并带有源代码。可以使用合适的编译器轻松创建新的DLL。另请参阅关于DLL的注释(Comments About DLLs)

定义物体以使用DLL定义的表面散射(Defining an Object to use DLL Defined Surface Scattering)

要使物体使用DLL定义的散射函数,从"物体属性(Object Properties)"对话框选择"用户自定义(User Defined)"散射类型,然后从"DLL名称(DLL Name)"框中列出的可用DLL散射函数中进行选择。

要查看每个DLL的输入和输出数据,请查阅:体散射、衍射、表面散射DLL的数据[]值

DLL参数(DLL parameters)

每一个DLL参数可以使用多达6个用户自定义数值作为计算散射属性的参数。这些数值由DLL定义,且只能由DLL使用。

创建新的DLL(Creating a new DLL)

DLL必须包括两个函数:

  • UserScatterDefinition
  • UserParamNames

当光线散射时,OpticStudio会将表面上的局部x、y、z坐标、局部法向向量、局部反射光线向量、偏振数据和其它参数数据(parameter data)这些用户定义参数传递至UserScatterDefinition函数中。

然后,UserScatterDefinition确定下列数值:

  • 光线是否真的散射
  • 散射光线的方向余弦
  • 光线的衰减(如果有的话)
  • 可选的新电场矢量(如未提供该值,OpticStudio将做出合理猜测)
  • 可选的BSDF和TIS,且如果使用重点采样的情况下(参阅"重点采样(Importance Sampling)")

这些值将返回到OpticStudio并用于继续进行光线追迹。

如果提供了新的电场矢量,OpticStudio将执行附加检查。其将检查总后散射强度是否在10^-10的统一范围内。如果是,则OpticStudio认为该值已归一化。因此,OpticStudio将进行调整。其将观察预散射的强度,并将每个电场分量乘以该值的平方根,以实现非归一化。该"步骤"可确保电场是物理的,因为强度永远不会接近1。

UserParamNames函数用来定义所有使用的参数名称。这些名称都会在"物体属性(Object Properties)"对话框的"膜层/散射(Coating/Scattering)"选项卡中显示。表面散射DLL(Surface Scattering DLLs)都必须存放在<data>\DLL\SurfaceScatter文件夹中。请参阅"文件夹(Folders)"。

注意当选择了用户自定义散射时,将会激活"散射分数(Fraction to scatter)"控件。只有允许散射部分的能量会发送到DLL。然而,DLL可以选择不发生散射光线(请参阅下一部分的DLL示例)。

有关详细信息,请参阅OpticStudio提供的示例表面散射DLL文件的源代码。

示例表面散射(Sample surface scattering):TwoGaussian.DLL

表面散射示例TwoGaussian.DLL支持的散射模型为4个模型的叠加:镜面反射、朗伯以及2个独立的高斯模型。DLL使用参数数据定义散射能量的分数部分,其可以分别根据高斯Sigma 1、Sigma 2以及朗伯散射进行散射。如果有剩余的部分,则是镜面反射。要了解如何在DLL中实现此目的,请参阅OpticStudio中提供的Two Gaussian.c源代码。

示例表面散射(Sample surface scattering):K-correlation.DLL

表面散射示例K-correlation.DLL支持按照K-correlation分布的散射模型,如Michael G-Dittman撰写的文章"K-correlation power spectral density & surface scatter model"中所述(Proc. of SPIE Vol. 6291, 62910R, 2006)。DLL输入包括表面粗糙度(以微米为单位)、特征表面波长(乘以2π)和BSDF的对数斜率。有关详细信息请参阅OpticStudio知识库中标题为"如何通过K-correlation分布对表面散射模型进行建模(How to Model Surface Scattering via the K-correlation Distribution)"的文章。可以将OpticStudio中提供的源代码文件K-correlation.c作为示例文件。

示例表面散射(Sample surface scattering):RI_BSDF.DLL

表面散射示例RI-BSDF.DLL支持模型使用列表数据来定义一个表面的散射属性。可以将此DLL视为老旧的方式。任何希望通过表格输入数据来定义散射的用户都应使用内置的BSDF散射模型(参阅"BSDF散射(BSDF scattering)")。

下一部分: