光源文件(Source File)
光源文件中光线的坐标、余弦和强度都是在用户提供的文件中进行定义的。必须将包含光线数据的文件名称放置在物体的注解列中。文件扩展名可以是DAT、SDF或TM25RAY,而且必须将文件放在<data>\Objects\Sources\Source Files文件夹中(参见"文件夹")。推荐使用SDF或TM25RAY扩展名,只在需要向后兼容的情况下,才支持DAT。文件格式可以为文本或二进制,两种格式都在下文进行了介绍。
扩展名为CRS的特定光线也可以用作光源文件对象。 有关详细信息,请参见特定光线生成器中的讨论。
参数如下:
参数# | 定义 |
1-5 | 请参见"所有光源物体通用的参数"。 |
6 | 随机?:如果设置为零,则通常按照文件所列顺序追迹光线。如果设置为非零,当读取文件,或NSC编辑器中光源物体的任何参数发生变化和更新光源时,则可以随机选择一次光线顺序。随机功能只有在文件中的光线总数小于内存中保存的光源光线的最大数时才可用。超过保存在内存中的光源光线的最大数的文件由于文件太大而无法保存在内存中,并且无法随机化。如下所述,按照要求应部分读取这些大文件。保存在内存中的光源光线的最大数是用户自定义参数;请参阅"内存中的最大文件型光源的光线数"。 |
对于参数7、8和9,显示的数据仅基于从光源文件读取的分析光线条数,可以小于文件中的光线总数。 | |
7 | 能量/流明 在文件中:该参数值仅供参考,在读取文件时由OpticStudio设置,用户不应更改或设置。如"二进制光源文件格式"中的定义,本场的行为对于"光通量专用"格式和"光谱颜色"格式而言是不同的。对于光通量专用格式文件:本参考值是总能量,采用由文件中的光线定义的当前光源单位表示。只考虑对分析的光线数执行此能量计算。如果当前光源单位为光度单位(流明),则应将光源文件中的能量(以瓦为单位)转换为在参数4值中为光源文件定义的单色波长的光度单位。注意,如果光源为多波长,则没有办法将能量(以瓦为单位)转换为流明,因为波长是随机分配的,如在"所有光源物体通用的参数"中所述。如果光源为多波长,则可以将本参数设置为零。每条光线的实际能量由上面的参数3(追迹光线的数量)定义,每条光线的相对能量在光源文件中定义。对于光谱颜色格式文件:每条光线的波长在文件中定义,而且,无论非序列模式元件编辑器中的波长参数如何设置,这些波长都将用于追迹。即使此光源为多色光源,能量/流明值仍将有效,并且在文件中定义的实际光通量和波长用于确定当前光源单位下的总能量。 |
8-9 | 这些值仅供参考,在读取文件后由OpticStudio设置,且用户不得更改或设置。这些参考值是光源的最小和最大波长(以微米为单位)。对于光谱颜色格式文件,这些值从文件中读取。对于仅通量格式文件,这些值由为光源定义的系统波长或颜色光谱(如果有)确定。请参阅"定义光源颜色和光谱含量"。 |
文本与二进制格式文件
目前,允许文本文件的最大光线数为1,000,000。如果在文本光源文件中定义的光线数超过1,000,000,则OpticStudio将自动把文本格式文件转换为二进制格式文件。将采用".OLD"扩展名重命名原始文件,并将使用与原始文件相同的名称创建新二进制SDF文件。转换完成后,可以选择保存或删除旧文件。即使追迹数十亿条光线,执行此转换可节省磁盘空间(二进制文件的大小只有文本文件的约30%)、加载时间(二进制文件读取速度比文本文件快约20倍)和系统内存(可以将大的二进制文件保留在磁盘上,因此需要很少的RAM)。
光源文件物体的内存要求
对于文本和二进制格式文件,如果要追迹的光线总数小于内存中的光源光线最大数,则OpticStudio将光线存储在系统内存中以最大限度提高速度。这需要为每条光线提供大约32字节的内存,或者对于1,000,000条光线最多需要32 Mb的内存。如果光线的总数大于内存中的光源光线的最大数,OpticStudio将光线数据保存在磁盘上,并根据需要读取文件。这需要较少的内存,并允许OpticStudio追迹大量的光线,光线数量只由系统文件存储容量限制。保存在内存中的光源光线的最大数是用户自定义参数;请参阅"内存中的最大文件型光源的光线数"。
关于选择光线数量的限制
在使用光源文件时,对输出光线和分析光线的数量值存在限制:
- 分析光线的数量必须等于或大于输出光线的数量。将分析光线的数量设置为在NSC编辑器中输入的两个数字中的较大值。
- 分析光线和输出光线的数量不得超过在文件中定义的光线数量。
二进制光源文件格式
二进制光源文件包含标题结构,格式如下:
typedef struct { int Identifier; // Format version ID, current value is 1010 unsigned int NbrRays; // The number of rays in the file char Description[100]; // A text description of the source float SourceFlux; // The total flux in watts of this source float RaySetFlux; // The flux in watts represented by this Ray Set float Wavelength; // The wavelength in micrometers, 0 if a composite float InclinationBeg, InclinationEnd; // Angular range for ray set (Degrees) float AzimuthBeg, AzimuthEnd; // Angular range for ray set (Degrees) long DimensionUnits; // METERS=0, IN=1, CM=2, FEET=3, MM=4 float LocX, LocY,LocZ; // Coordinate Translation of the source float RotX,RotY,RotZ; // Source rotation (Radians) float ScaleX, ScaleY, ScaleZ; // Currently unused float unused1, unused2, unused3, unused4; int ray_format_type, flux_type; int reserved1, reserved2; } NSC_RAY_DATA_HEADER;
数据类型float、int和unsigned int都是32位类型。标识符定义文件格式,目前为1010。尽管OpticStudio仅以当前格式写入文件,但OpticStudio通常还可以读取旧格式。OpticStudio只使用NbrRays、DimensionUnits、ray_format_type和flux_type参数。忽略其它数据。
NbrRays定义的文件中的最大有效数为40亿(4,000,000,000条光线)。超过此数字可能会导致OpticStudio读取数据文件出现问题。对于仅通量格式,ray_format_type必须为0;对于光谱颜色格式,ray_format_type必须为2(下面定义了两种格式)。不支持其它格式类型。当且仅当ray_format_type为0,则flux_type为0表示瓦,为1表示流明。对于光谱颜色格式,光通量必须以瓦为单位,波长必须以微米为单位。下面定义了在光线结构中使用的光通量和波长的值和单位。
请注意,使用光谱颜色格式时,无论怎样定义系统波长,OpticStudio将始终以文件中定义的波长追迹光线。
标题后面紧跟NbrRays光线结构。光线结构格式取决于光线格式类型。对于仅通量格式,光线结构为:
typedef struct { float x, y, z; float l, m, n; float flux; } FLUX_ONLY; 对于彩色光谱颜色格式,光线结构为: typedef struct { float x, y, z; float l, m, n; float flux, wavelength; } SPECTRAL_COLOR;
OpticStudio可以读取仅通量格式或光谱颜色格式。当根据光线追迹数据生成光源文件时,OpticStudio仅使用光谱颜色格式(参阅"光线数据库查看器"部分中的"保存物体n上的光线"有关详述)。
文本光源文件格式
文本光源文件包含一行标题数据,其中仅具有的两个整数,结构如下:
number_of_rays dimension_flag
number_of_rays表示文件中的光线的总数。dimension_flag为0表示米,为1表示英寸,为2表示厘米,为3表示英尺,为4表示毫米。
文件中的剩余行的格式如下:
x y z l m n intensity wavelength
假设以"!"符号为开头的任何行都为注释行,且将其忽略。可以使用文本格式在单个文件中定义任意数量的光线。但是,如果光线的数量超过1,000,000,OpticStudio会在第一次打开光源文件物体的文件时会自动将文件转换为二进制格式。有关该转换的详述,请参见"文本与二进制格式文件的比较"。但如果波长参数为可选,将始终以定义的、以微米为单位的波长追迹光线,而且光源文件将按二进制文件格式详述中的光谱颜色格式所述处理。
光源文件中的强度归一化
每条光线可以具有不同的相对强度。如果每条光线的相对强度值不是1.0,则会发生归一化,如下所述。
当第一次将光源文件加载到内存时,会将每条光线的强度进行相加,然后归一化到平均强度。如果将光源的总通量定义为一定数量(以瓦为单位),则可以追迹一部分光线,并且其强度将生成近似值,但并不完全是总通量。生成任意部分的光线都需要归一化为所需的总光通量的近似值。
读取TM-25光线文件
从Zemax OpticStudio 2024 R2开始,OpticStudio将支持读取和写入TM-25光线文件,其扩展文件名为".tm25ray"。数据格式按标准文档ANSI/IES Tm-25-20定义。数据格式可支持偏振多波长,但不强求。如果文件不包含波长或偏振数据,OpticStudio将使用"物体属性">"光源"部分指定的用户设置。请注意,并非TM-25标准的所有格式都支持。在将无效文件加载至OpticStudio中时,不仅会显示一条错误消息,而且还会导出相应的日志,文件名为"sourcefilename.tm25ray.log",所在的文件夹与TM-25源文件相同。
写入TM-25光线文件
如果TM-25光线文件从OpticStudio导出,则会为每条光线添加相位和电场数据。如果用户需要将文件加载回OpticStudio,进一步进行相干分析或偏振分析,这很实用。请注意,如果在光线追迹过程中没有勾选"使用偏振",或者如果原始ZRD文件未包含偏振数据,则不会添加偏振信息。
对于自行解析光线文件的用户,相位和电场数据按每条光线8个以上的数据添加,如下所示。
"phase"、"phase_dbl_err":该数据的意义与在光线数据库文件(.ZRD)中使用的starting_phase相同。数据以光程为单位,单位为µm。要获得以弧度为单位的数据,用户只需将该值乘以"2*pi/波长"即可,其中波长的单位为µm。用户只需读取"phase",即可使用。或者,用户可以将这两个数据都按"double"类型读取,然后将其相加,以提高准确性。
"exr"、"exi"、"eyr"、"eyi"、"ezr"、"ezi":该数据的意义与光线数据库文件(.ZRD)中同名数据相同。
另请参见"ZRD未压缩完整数据格式(UFD)(The ZRD Uncompressed Full DataFormat(UFD))"
读取TM-25光线文件(光谱注意事项)
有三刺激值中的Y值(光通量) | 有三刺激值中的X值和Z值 | 有辐射通量 | 有波长 | 处理 | |
---|---|---|---|---|---|
1 | 是 | 是 | 否 | 否 | 不支持,因为存在三刺激值X、Y、Z意味着背后可能存在任意光谱,我们无法恢复它。 |
2 | 是 | 否 | 否 | 否 | 我们只有三刺激值Y值,也就是光通量。通过查找发光函数,我们可以使用系统波长将三刺激值Y值转换为辐射通量。 |
3 | 是 | 任何 | 是 | 否 | 我们不能仅靠辐射和光通量的数据来确定波长。在这种情况下,我们将使用辐射通量和下降光通量。 |
4 | 是 | 任何 | 否 | 是 | 通过三刺激值Y值和波长值的计算,并查找发光函数,我们可以得到辐射通量数据。 |
5 | 否 | 否 | 是 | 否 | 我们有辐射通量,但没有波长。我们将使用系统波长。 |
6 | 任何 | 任何 | 是 | 是 | 我们获得了所有需要的数据(辐射通量和波长)。 |
读取TM-25光线文件(偏振)
在Zemax OpticStudio中,偏振以电场的形式保存,电场是三维空间中的复矢量(Ex, Ey, Ez)。当导出TM-25光线文件时,我们将它们转换为Stokes参数,以便其他软件可以读取。导出Stokes参数的方式是,长轴将始终位于Stokes参数定义所在的局部坐标的x轴上。在程序中,它们的计算方法如下。
- 在全局坐标下计算偏振椭圆长轴矢量
。
- 在全局坐标下定义
为光线矢量。
- 在全局坐标下计算短轴矢量
。
- 在长轴
上投射电场。
- 在短轴
上投射电场。
- Stokes参数计算如下所示
虽然在Zemax OpticStudio中,我们为局部坐标选择了长/短轴。这个局部坐标实际上可以是任意的,因为长轴数据是写在TM-25上的,任何其他软件都可以找到正确的局部坐标来恢复全局坐标。当加载TM-25时,从Stokes参数恢复到三维空间的电场如下所示
- 计算偏振通量:
- 在[0,1]中生成随机数rd。
- 如果
,随机化一个偏振态。
- 如果
,则偏振椭圆上的电场计算如方程式所示
- 从TM-25光线文件加载全局坐标偏振椭圆长轴矢量
。
- 由E(S)计算Ap如下所示,
其中
- 通过绕光线方向
以角度Ap旋转
,在全局坐标中获得局部x轴
。
- 注意,我们已经在全局坐标中有了局部z轴
,也就是光线方向。
- 在全局坐标下计算局部y轴矢量
- 在全局坐标下计算电场
上述恢复可用于任何遵循标准文档的TM-25光线文件。注意,如果TM-25光线文件是由Zemax OpticStudio生成的,由于它准确地保存了电场(Ex,Ey,Ez),我们将不使用Stokes参数的数据,但为了方便,我们只加载这些电场数据。
光线文件中的数据准确性
当在OpticStudio中进行光线追迹时,位置、方向、光通量等光线数据都以双精度浮点格式保存。但是,在导出光线文件(包括DAT、SDF和TM25RAY)时,这些数据以单精度浮点格式保存。因此,如果我们在系统中间保存数据,重新加载并回复,结果可能总是不同的。这种差异非常小,除非用户通过查看文本数据或从宏、操作数或API中检索原始系统和重现系统之间的数据,仔细比较每个像素的确切值,否则不会注意到这种差异。
使用LightningTrace
光源的角分布通过在第一次读取文件后为光源创建远场图来确定。此图存储在位于与光源文件相同的文件夹的FFD文件中。该映射使用光源中的所有光线创建,因此随机值(参数6)不会对LightningTrace结果产生任何影响。光源的大小和空间分布被忽略。
下一部分: