图7 如图1所示的茶壶案例的光线路径。注意到有三条路径到达了茶壶主体(.teapot7.Body.B-Spline Surface 4),它们是该系统中的路径1,2和8,显示为在第2行到最后一行。路径数2是从探测器通过透镜然后传播到茶壶本体的直线路径。注意一下这两个路径每个的功率差异,第1条路径的0.25448和第2条路径的0.000227487。第2条路径是该路径的散射部分;第1条路径是直接热贡献。还可以查看该路径的定义;示于图9. 图8 通过透镜追迹的第二条路径 图9 示于图8中路径的光线路径信息
5. FRED如何显示辐照度或热辐射图?
默认条件下,FRED使用3图颜色面板显示辐照度或热成像图。左上图是一个等距的伪彩色图,显示了在选择的分析面上单位面积的功率。右边有一个比例尺显示了图中的功率等级。右上角和右下角的面板是左上角面板的横截面。点击左上图的任何部位会在水平和垂直方向创建三维图的一个横截面;该位置处的位置和辐照度信息显示在左上角面板的左下角处。茶壶系统的辐照度图如图10所示。 图10 茶壶系统的辐照度图 只考虑一个面板,在那个面板上双击鼠标左键可以放大该图。上面板正处于****图模式,为了创建一个二维图,点击鼠标右键弹出绘图选项,选择perspective view来创建一个如图11所示的二维图。 图11茶壶的热影像二维图模式 6. FRED在热应用中如何定义散射表面?
散射体文件夹包含了默认的和可选择的用户输入的散射模型,可以应用到FRED中的任何表面。每个模型计算出合适的基于光入射角和局部表面法向方向的三维的双向散射分布函数(BSDF)。BSDF可替换的定义是双向反射分布(BRDF)和双向透射分布函数(BTDF)。 FRED具有三个默认散射模型:黑朗伯(4%反射率漫射黑色),白朗伯(96%反射率漫射白色)和Harvey-Shack(抛光表面)。此外,参数化散射模型在FRED中同样是可用的:黑色涂料(TIS),ABg,表面颗粒(Mie)和Phong。不止一个散射模型类型可以应用到一个表面。图12是创建一个自定义散射定义的对话框菜单,注意到FRED最新的散射定义是一个脚本化的BSDF函数,在这里用户定义了一个散射方程。FRED允许或禁止每个当前应用到该表面的光线追迹控制的反射和透射的散射元件。每个散射表面必须具有至少一个散射方向,这可以使用菜单栏选项Tools: Determine Scatter Importance Sampling进行自动设置,或者从表面对话框的散射标签手动设置。每个散射方向应用到分配到该表面的每个散射模型。设置一个表面的重点采样的对话框如图13所示。通过在一个特定的或反射的方向、朝向一个特定的实体、闭合曲线、空间中的一点或一个椭圆体上定义目标,我们可以定义多个重点采样目标。 图12散射对话框显示了多种方法定义散射
图13重要性采样的菜单选项应用到一个特定表面。如图所示,多个散射属性可以应用于多个重要性采样目标。注意到在该图中指定了一个米散射散射体属性和一个Harvey Shack抛光表面散射体,另外定义了两个重要性采样目标,一个是指定了一个方向,另一个朝向一个表面-焦平面。 7. FRED如何记录热散射路径
在高级光线追迹完成后,当选择保持光线历史选项,FRED就具有了一个可得到的杂散光报告。然后我们就可以从工具菜单请求一个详述鬼像和散射路径如何到达任何表面的杂散光报告。图14显示了具有创建/使用光线历史文件选项和确定选择的光线路径选项的高级光线追迹对话框。图15显示了一个简单Cassegrain望远镜的杂散光报告,该报告详述了从一个光源以离轴5度角进入望远镜的杂散光。从报告中我们可以看到,在离轴5度角处的最大的杂散光光源是偏离第二个支架的侧面,因为该路径的功率的73%到达了探测器。总功率如第4列所示,表明只有0.00197290w从该路径到达了探测器。 图14 具有创建/使用光线历史文件选项和确定选择的光线路径选项的高级光线追迹对话框 图15 显示了杂散光报告电子表格,可以用于追迹任何级次的散射和鬼像路径。所示的报告部分显示了详述每个报告路径的路径数、光线数、功率百分比和总功率。 8. FRED如何在探测器上穿过多个像素点迭代来创建热图?
FRED具有一个内置的可编译的Basic脚本语言。从Visual Basic脚本语言里,几乎所有用户图形界面(GUI)命令是可用这里的。FRED同样具有自动的客户端和服务器能力,它可以被调用和并调用其他可启动程序,如Excel。因此可以在探测器像素点上定义多个离轴光源,及在FRED Basic脚本语言里的For Next loops语句沿着探测器像素点向上和向下扫描来反向追迹光线。注意到在图16中写了功率信息到数据文件中,这样可以使用三维图表查看器调用和查看数据。 图16 FRED Basic脚本语言创建茶壶的热成像'script for calculating thermal image map'edited rnp 4 november 2005'declarationsDim op As T_OPERATIONDim trm As T_TRIMVOLUMEDim irrad(22,22) As Double 'make consistent with samplingDim temp As DoubleDim emiss As Double'setupnx = 21ny = 21numRays = 1000minWave = 7 'micronsmaxWave = 11 'micronssigma = 5.67e-14 'watts/mm^2/deg k^4Print ""Print "THERMAL IMAGE CALCULATION"detnode = FindFullName( "Geometry.detector.Surf 1" )Print "found detector array at node " & detnodesrcnode = FindFullName( "Optical Sources.DiffDetArea" )Print "found differential detector area at node " & srcnodeGetTrimVolume detnode, trmdetx = trm.xSemiApedety = trm.ySemiApearea = 4 * detx * detyPrint "detector array semiaperture dimensions are " & detx & " by " & detyPrint "sampling is " & nx & " by " & ny'reset differential detector area dimensions to be consistent with samplingpixelx = 2 * detx / nxpixely = 2 * dety / nySetSourcePosGridRandom srcnode, pixelx / 2, pixely / 2, numRays, FalsePrint "resetting source dimensions to " & pixelx / 2 & " by " & pixely / 2'zero out irradiance arrayFor i = 0 To ny - 1For j = 0 To nx - 1irrad(i,j) = 0.0Next jNext i'main loopEnableTextPrinting( False )ypos = dety + pixely / 2For i = 0 To ny - 1xpos = -detx - pixelx / 2ypos = ypos - pixelyEnableTextPrinting( True )Print iEnableTextPrinting( False )For j = 0 To nx - 1xpos = xpos + pixelx'shift sourceLockOperationUpdates srcnode, trueGetOperation srcnode, 1, opop.val1 = xposop.val2 = yposSetOperation srcnode, 1, opLockOperationUpdates srcnode, false'ray traceCreateSource srcnodeTraceExisting 'draw'radiometryFor k = 0 To GetEntityCount()-1If IsSurface( k ) Thentemp = AuxDataGetData( k, "temperature" )emiss = AuxDataGetData( k, "emissivity" )If ( temp <> 0 And emiss <> 0 ) ThenProjSolidAngleByPi = GetSurfIncidentPower( k )frac = BlackBodyFractionalEnergy ( minWave, maxWave, temp )irrad(i,j) = irrad(i,j) + frac * emiss * sigma * temp^4 *ProjSolidAngleByPiEnd IfEnd IfNext kNext jNext iEnableTextPrinting( True )'write out fileOpen "C:\Documents and Settings\teapotimage.dat" For Output As #1Print #1, "GRID " & nx & " " & nyPrint #1, "1e+308"Print #1, pixelx & " " & pixelyPrint #1, -detx+pixelx/2 & " " & -dety+pixely/2maxRow = nx - 1maxCol = ny - 1For rowNum = 0 To maxRow ' begin loop over rows (constant X)row = ""For colNum = maxCol To 0 Step -1 ' begin loop over columns (constant Y)row = row & irrad(colNum,rowNum) & " " ' append column data to row stringNext colNum ' end loop over columnsPrint #1, rowNext rowNum ' end loop over rowsClose #1Print "all done!!"