体散射(Bulk scattering)

物体体散射方法在物体属性窗口的"体散射"一节中设置。  体(体积)散射可对光线通过实体物体传播时的随机散射进行建模。OpticStudio支持3种实体物体体散射模式:无体散射、角度散射和DLL定义散射。

无体散射

如果选择无体散射,光线将在不散射的情况下通过实体传播。

角度散射

角度散射使用一个简单的模型来模拟实体内的散射。光线在介质中传播x距离的综合散射概率通过以下公式计算得出:

,其中

符号M是平均自由路径,以镜头单位表示。请注意,随着x的增加,光线发生散射的概率逐渐接近1.0。在0.0~1.0之间随机选取一个值赋予上述公式并求解出x,然后会生成具有正确统计信息的随机生成路径长度。如果该路径长度大于光线传播到下一个与物体交汇点的距离,就不会发生散射。否则,沿光线传播方向的某一具体位置,光线将发生散射。

一旦位置确定,就可以通过选择新光线方向来对散射进行建模。对于角度散射,需要选定一个随机角度,以便新光线方向均匀分布在与当前光线方向成一定角度的圆锥体内。圆锥体的半角是模型的其中一个参数,该参数应在0.0~180.0度之间取值。当角度为180.0度时,光线将在任一方向上随机发生散射。一旦光线发生散射,OpticStudio将自动调整偏振矢量并随机处理散射光线的相位。

DLL定义的散射

如果角度散射模型不能满足要求,可通过称为动态链接库(DLL)的外部程序定义更复杂的体散射函数。OpticStudio中提供了DLL示例及其源代码。使用合适的编译器可轻松创建新DLL。另请参阅"关于DLL的注释(Comments About DLLs)"。

定义物体以使用DLL定义的体散射

如果要使物体使用DLL定义的体散射函数,请从物体属性对话框中选择体散射选项卡,然后选择模型:"DLL定义的散射"。所提供的DLL函数随后将在"DLL:"控件中列出。

要查看每个DLL的输入和输出数据,请查阅:体散射、衍射、表面散射DLL的数据[]值(Data[] values for Bulk Scatter, Diffraction, Surface Scatter DLLs)

DLL参数

每一个DLL参数可以使用0到16个用户自定义数值作为计算介质属性的参数。这些参数由DLL定义并且只能在DLL中使用。

创建新的DLL

DLL必须包括两个函数:

  • UserBulkDefinition
  • UserParamNames

当光线追迹通过使用DLL定义的体散射物体时,OpticStudio会将当前沿光线方向的传播长度、不同光线数据值以及用户定义的其它参数数据传递给UserBulkDefinition函数。然后UserBulkDefinition函数需要确定光线是否会在沿传播长度的某个点发生散射。如果光线将发生散射,则UserBulkDefinition必须确定以下数值:

光线发生散射的位置、光线的新方向余弦、光线的衰减、如果有可选的新电场矢量(如未提供该值,OpticStudio将做出合理猜测)

这些值将返回到OpticStudio并用于继续进行光线追迹。UserParamName函数用于定义所有已使用参数的名称。这些名称将显示在物体属性对话框的体散射选项卡中。体散射DLL必须放在<data>\DLL\BulkScatter文件夹中。请参阅"文件夹(Folders)"。

示例体散射:Poly_bulk_scat.DLL

示例体散射文件poly_bulk_scat将散射概率定义如下:

其中,θ为散射光线针对非散射光线方向的极角。OpticStudio提供源代码文件poly_bulk_scat.c将作为示例文件。

示例体散射:Henyey-Greenstein-bulk.DLL

Henyey-Greenstein体散射模型将散射概率定义如下:

其中,θ为散射光线针对非散射光线方向的极角。参数g可为-1~0.9999之间的任何值。如果g的输入值小于-1,则g设置为-1。如果g的输入值大于0.9999,则g设置为0.9999。如果|g|的输入值小于1.0e-4,则g设置为1.0e-4。OpticStudio提供源代码文件Henyey-Greenstein-bulk.c作为示例文件。

示例体散射:Rayleigh.DLL

瑞利体散射(Rayleigh bulk scattering)模型根据瑞利准则(Rayleigh theory)将非偏振输入光束的散射概率定义如下:

其中,θ为散射光线相对于非散射光线方向的极角,λ为波长。DLL的输入为参考波长(即与平均路径输入值相关的波长)和透射(在各个发生散射的时刻允许损失的能量)。如欲了解更多详情,请参阅OpticStudio知识库中标题为"体散射与瑞利模型(Bulk Scattering with the Rayleigh Model)"一文。OpticStudio提供源代码文件Rayleigh.c作为示例文件。

示例体散射:Mie.DLL

米氏体散射模型根据米氏理论(Mie theory)定义散射概率。OpticStudio中使用的算法摘自Craig F. Bohren和Donald R. Huffman所著的《小颗粒对光的吸收和散射》(Absorption and Scattering of Light by Small Particles),(约翰·威利父子出版公司,1983年)一书。DLL的输入包括颗粒指数、颗粒大小(单位为微米)以及颗粒密度(单位为cm-3)。如欲了解更多详情,请参阅OpticStudio知识库中标题为"如何利用米氏模型仿真大气散射(How to simulate atmospheric scattering using a Mie model)"一文。源代码文件未随OpticStudio一起发布。

示例体散射:Phosphor.DLL

荧光体散射模型是指可以同时发生荧光和散射的荧光材料。特定波长范围内(定义为"蓝色")的光可进入应用DLL的介质,而且该光也可转换为其它波长(即经受荧光)或仅为体散射。当输入光线经受荧光时,所产生的光会以相同的概率发射成180度的锥角(即输入光线根据角度散射模型进行"散射")。当输入光线通过荧光散射时,它会根据米氏分布(Mie distribution)进行散射。荧光(或不在"蓝色"波长范围内的任何其它输入光)也可根据米氏分布散射。DLL的输入包括荧光的平均自由路径、定义"蓝色"波长范围的波长范围,以及与米氏分布相关的粒子参数等。如欲了解更多详情,请参阅OpticStudio知识库中标题为"使用荧光对白色光源进行建模(Modeling a White Light Source using a Phosphor)"一文。源代码文件未随OpticStudio一起发布。

下一部分: