2. 散射属性库概览:FRED内置散射库介绍、散射库的调用与管理、散射数据格式
好,我们正式开始接触FRED的散射属性库。这一章说白了,就是带大家认识FRED自带的那些散射模型,以及怎么把它们用起来。很多初学者一上来就想着自己写散射数据,其实FRED内置的库已经覆盖了绝大多数工程场景。我个人习惯是先翻一遍内置库,实在找不到合适的,再考虑自定义。
核心观点:FRED的散射库是光学仿真的“弹药库”。你不需要每次都从零造轮子,学会调用和管理现成的散射模型,能省下大量时间。
2.1 FRED内置散射库介绍
FRED内置的散射模型,我按用途分成了三大类。你想想看,一个光学系统里,散射无非来自几个地方:表面粗糙度、材料内部的颗粒、或者镀膜界面的微结构。FRED正好对应了这三类。
| 散射模型类别 | 典型模型 | 适用场景 |
|---|---|---|
| 表面散射 | ABg、Harvey-Shack、K-correlation | 粗糙表面、镜面反射元件 |
| 体散射 | Mie、Rayleigh、Henyey-Greenstein | 透明材料内部颗粒、生物组织 |
| 镀膜/界面散射 | BSDF数据表、用户自定义 | 多层膜、增透膜、分光膜 |
这里我重点说一下ABg模型。它是我在项目中用得最多的一个。为什么?因为它参数少,物理意义明确。A代表总散射量,B和g控制角度分布的形状。我曾经在一个激光雷达接收光学系统的项目中,用ABg模型拟合实测BSDF数据,拟合优度达到了0.98以上。嗯,这里要注意,ABg模型对前向散射占主导的场景特别有效,但如果你的散射在各向同性上很强,那可能需要考虑Harvey-Shack模型。
我的经验:新手容易犯的一个错误是,不管什么表面都用ABg。其实Harvey-Shack模型在描述光学表面的“尾部”散射(大角度散射)时更准确。我建议你手头常备这两个模型,根据实测数据来选。
2.2 散射库的调用与管理
FRED的散射库管理,说白了就是通过“Scatter Library”对话框来操作。我习惯把它叫做“散射仓库”。你可以在菜单栏的 Tools -> Scatter Library 找到它。
调用一个散射模型,步骤很简单:
- 打开Scatter Library对话框。
- 在左侧树形列表中选择模型类别(比如“Surface Scatter”)。
- 双击模型名称,或者右键选择“Apply to Selected Surface”。
- 在表面属性编辑器中调整参数。
但管理才是关键。我见过不少同事,模型调用多了以后,库里面乱七八糟,自己都找不到哪个是哪个。所以我建议你养成几个好习惯:
- 命名规范:用“项目名_表面名_散射模型”的格式,比如“Lidar_RX_Mirror_ABg”。
- 分组管理:在库中创建子文件夹,按项目或按元件类型分类。
- 定期清理:项目结束后,把不再使用的模型删除或归档。
避坑指南:我曾经有一次,因为没注意模型名称重复,结果把A项目的散射参数误应用到了B项目的表面上。仿真结果出来完全不对,排查了整整一天才发现是库里的模型被覆盖了。所以,每次修改模型参数后,记得另存为一个新名称,不要覆盖原模型。
2.3 散射数据格式
FRED支持导入外部BSDF数据。这个功能非常实用,尤其是当你手头有实测数据或者来自其他软件(比如LightTools、Zemax)的散射数据时。
FRED接受的BSDF数据格式,我总结了一下,主要有两种:
| 格式类型 | 文件扩展名 | 数据排列方式 | 注意事项 |
|---|---|---|---|
| 角度-角度格式 | .bsdf, .txt | 入射角、散射角、BSDF值 | 角度单位必须为度 |
| 角度-空间频率格式 | .bsdf, .dat | 入射角、空间频率、PSD值 | 常用于Harvey-Shack模型 |
这里我重点讲一下角度-角度格式。它的标准结构是这样的:
# BSDF Data File
# Incident Angle: 0.0 deg
# Wavelength: 550 nm
# Format: Theta_i, Theta_s, BSDF
0.0, 0.0, 1.0e0
0.0, 0.5, 8.5e-1
0.0, 1.0, 6.2e-1
...
嗯,这里要注意几点:
- 文件头部的注释行以
#开头,FRED会自动忽略。 - 数据列的顺序必须是:入射角、散射角、BSDF值。
- 角度单位必须是度,不是弧度。
- BSDF值可以是绝对值,也可以是相对值(归一化到1)。
我的技巧:如果你从其他软件导出的数据格式不匹配,别慌。我通常用Python写一个简单的脚本,把数据重新排列成FRED能识别的格式。核心就是三列:入射角、散射角、BSDF值。你想想看,这比在FRED里手动输入几百个数据点要快得多。
导入数据后,FRED会自动生成一个插值表。我个人建议,在导入后一定要检查一下插值曲线是否平滑。如果数据点太少或者分布不均匀,FRED的插值可能会产生振荡,导致仿真结果出现假象。
最后,我想强调一点:散射库不是越大越好。我见过有人把几百个BSDF文件都塞进库,结果每次加载都要等半天。我的建议是,只保留当前项目需要的模型,其他的可以放在外部文件夹里,需要时再导入。这样FRED的启动速度和库的响应速度都会快很多。