光源DLL(Source DLL)

尽管OpticStudio提供了许多类型的内置光源,但有时对光源进行建模的最好方法是定义算法来生成具有所需属性的光线。

此外,OpticStudio还支持用户自定义光源作为光线列表;请参阅光源文件详述。

要使用程序定义光源,必须在Windows动态链接库(DLL)中编写和编译生成随机光线的算法。OpticStudio提供了大量DLL,并带有源代码。可以使用合适的编译器轻松创建新的DLL。另请参阅"关于DLL的注解"。

光源DLL参数

每个DLL参数都可以使用0到30之间的用户自定义数据值,作为光源属性计算的参数。这些数值由DLL定义,且只能由DLL使用。

创建新的光源DLL

DLL必须包括两个函数:UserSourceDefinition UserParamNames

当从DLL建模的光源发射光线时,OpticStudio会将光源参数、波长和其它数据传递到UserSourceDefinition函数。然后,使用UserSourceDefinition函数计算下列值:

x、y、z:光线的起始坐标

l、m、n:光线的起始方向余弦

i:光线的初始相对强度(请参阅下面的"关于光源DLL相对强度的注解")

这些值会返回到OpticStudio,用于启动光线追迹。UserParamNames函数用于定义所有已使用的参数的名称。这些名称显示在非序列模式元件编辑器的光源DLL物体的参数列中。

要查看每个DLL的输入和输出数据,请查阅:光源DLL的Data[]值

了解使用光源DLL的最好方法是学习现有的DLL,并根据需要进行修改。OpticStudio提供的示例DLL包括各种数据格式的文档和注解;参见任何示例源代码文件,以查看具体例子。

必须将所有光源DLL放置在<data>\DLL\Sources文件夹中。

关于光源DLL相对强度的注解

当OpticStudio追迹由DLL生成的光线时,光线的初始能量由光线总能量给出,总能量按照进行分析的光线数量平均分配,按相对权重进行缩放。为此,必须设置由DLL计算的光线的相对强度,以使所需的所有分析光线的所有相对强度的平均值为1.0。注意,应将分析光线的数量作为参数传递到DLL。需要满足此条件,因为OpticStudio在生成光线和追迹任何光线之前无法归一化所有要追迹的分析光线。

对于DLL,归一化光线的首选方法是将所有光线的相对强度设置为1.0,然后根据光源的所需概率分布选择光线。此方法意味着选择的光线(具有位置和方向余弦)越多,则与其相对应的能量越多。执行此操作的方法很简单,并且涉及在整个空间和方向空间中整合光源,并使用归一化积分和均匀随机数生成器确定光线。示例DLL FIBER1介绍了该方法。

另一种方法是使用非统一光线权重。该方法首先需要DLL计算所需的全部光线,然后在内部归一化光线以生成平均权重1.0。该方法在概念上比较简单,但通常效率不高。

使用LightningTrace

LightningTrace不支持此光源类型。

示例光源DLL

OpticStudio提供了以下示例光源DLL和源代码。

此DLL和源代码(如果提供)都在<Zemax\DLL\Sources>文件夹中。

CONE.DLL
描述 用户自定义参数

此DLL类似于Lambertian_Overfill DLL,但存在两个主要区别:1)光源分布和角分布的所有区域都把均匀角度分布和余弦(朗伯)角度分布适当地考虑在内;2)用户可根据内外锥角和起始与终止时钟角,指定关注区域。指定关注区域时,DLL将缩放发射到关注区域的光线强度,同时保留空间分布和角度分布,犹如发射了光线的完整2π半球。这允许用户有效地将光线的均匀分布或朗伯分布追迹到远离光源法向轴的小区域。有两种分布可供选择(由分布列控制):

  • 朗伯分布(data = 0)
  • 均匀半球分布(data = 1)

锥角参数应在0°到90°之间,时钟角参数应在0°到360°之间;外锥角90°和时钟终止角360°代表2π半球。时钟角从+x轴开始,逆时针旋转,背向观测者,朝向光源。

  • 光源宽度、高度:定义发射光线的椭圆或矩形区域。
  • 矩形光源?
    • 0表示椭圆
    • ≠0表示矩形
  • 分布:
    • 0表示朗伯
    • 1表示均匀
  • 内外锥角:0 - 90度
  • 时钟起始角和终止角:0 - 360度
  • 比例因子

FIBER1.DLL

描述 用户自定义参数

一种平面光纤模型。

光线从半径为R的平面发出。强度分布由以下公式给出:

I(r) = A + Br2 + C r4 ,

其中,

0.0 <= r <= R .

确定光线起始位置后,光线从表面发射到圆锥体,圆锥体的数值孔径取决于径向坐标:

NA(r) = D + Er2 + Fr4

在由数值孔径定义的角锥体内部,光线分布是均匀的。

  • R:光纤半径
  • A,B,C:定义强度分布的系数
  • D,E,F:定义数值孔径(NA)的系数

GaussianSource.dll

描述 用户自定义参数

此DLL模拟高斯光束。它用光束束腰、光束位置和M^2因子定义光线的空间分布和角度分布。真实束腰定义为

发散度等于

光源强度的空间分布由以下公式给出:

光源强度的角度分布由以下公式给出:

该DLL没有考虑光源介质的折射率。此DLL的最新版本可在社区中找到:DLL(光源):非序列模式像散高斯(您必须登录与受支持的许可证关联的账户,才能查看此页面)。

  • 束腰(半径):基本束腰半径
  • 位置:ZSourceDLL - 光源DLL局部坐标中的Zwaist
  • 如果ZSourceDLL < Zwaist,则位置<0
  • 如果ZSourceDLL = Zwaist,则位置=0
  • 如果ZSourceDLL > Zwaist,则位置>0
  • M^2:光束质量因子

LAMBERTIAN_OVERFILL.DLL

描述 用户自定义参数

这个DLL使用户能够将发出的满足朗伯分布的光线传播到一个虚拟的圆形孔径,并使光线充满这个孔径。

光线在椭圆或矩形区域内以空间均匀分布发射。虚拟目标孔径与直圆锥对应,其顶点在光源区域的某一位置。

从圆锥内均匀的角分布中选择方向作为光线方向,光线强度与圆锥的立体角成正比。圆锥体略大于目标孔径的椭圆截面,因此一些位于目标孔径外的光线可能会被终结。通常来说光线填满目标孔径内某个合适的尺寸。

使用朗伯强度分布时,统计分布可能略有偏差。这是因为给定锥角的概率取决于偏离局部Z轴的角度,因此重新瞄准光线以使用不同的标称指向矢量,将导致精度稍微降低。当光源的空间尺寸趋于0或目标距离增加到无穷大时,朗伯强度分布收敛到正确的解。用户应避免使用具有朗伯分布的过大光源和近目标距离。在使用朗伯强度时,要获得更准确的统计分布,应使用Cone.dll。

  • 光源宽度、高度:定义发射光线的椭圆或矩形区域。
  • 矩形光源?
    • 0表示椭圆
    • ≠0表示矩形
  • 目标直径:目标的直径
  • 目标距离:Source DLL到虚拟孔径的距离
  • 分布类型:
    • 0表示均匀球体
    • 1表示均匀半球
    • 2表示朗伯

SkewRaysCircular.dll

描述 用户自定义参数

这个DLL发送倾斜光线,在非序列模式下建模高斯光束传播。倾斜光线是高斯光束的有效和准确表示,可用于快速优化最佳焦点或最小化像差。它是Paul Colbourne的用户自定义表面的非序列模式等效:使用倾斜光线建模高斯光束

光源DLL将表示理想的高斯光束。如下面的示意图所示,在给定波长下,高斯光束可以使用如下任一组参数进行描述:

  • 光束束腰w0和束腰相对于光源DLL位置的位置。
  • 光束发散角θ和束腰相对于光源DLL位置的位置。
  • 光源DLL位置处的光束大小w(z)和光束发散角θ。


所有这些参数都由以下方程连接:

  • 光束束腰与光束远场发散角θ和波长λ关联。
  • 光束相对于束腰的Z位置可通过光束束腰和光束半径ω来计算:
    其中Zr是瑞利长度。瑞利长度定义为:

请注意,波长不按这个DLL中的起始介质的折射率缩放。

定义?(Definition?):可以是1、2或3。根据flag值1、2或3,它将使用下列定义之一。如果定义?不是1、2或3,将设置为1。

如果定义?= 1

  • 1.束腰(半径)以镜头单位表示
  • 1.位置以镜头单位表示。该位置表示光源DLL相对于束腰位置的位置。
  • 位置:ZSourceDLL - 光源DLL局部坐标中的ZWaist
  • 如果ZSourceDLL < ZWaist,则位置 < 0
  • 如果ZSourceDLL = ZWaist,则位置 = 0
  • 如果ZSourceDLL > ZWaist,则位置 > 0

如果定义?= 2

  • 2.角(度): 远场发散角
  • 2.位置以镜头单位表示。该位置表示光源DLL相对于束腰位置的位置。
  • 位置:ZSourceDLL - 光源DLL局部坐标中的ZWaist
  • 如果ZSourceDLL < ZWaist,则位置 < 0
  • 如果ZSourceDLL = ZWaist,则位置 = 0
  • 如果ZSourceDLL > ZWaist,则位置 > 0

如果定义?= 3

  • 3.角(度): 发散角
  • 3.尺寸(半径) 以镜头单位表示。光源DLL位置处的光束大小。

下一部分: