第三章 内置散射模型:从朗伯到实测数据
散射模型这东西,说白了就是描述“光打到粗糙表面后往哪儿跑”的数学工具。FRED 里内置了五种常用模型,我一个个拆开讲。每个模型都有它的脾气,选对了事半功倍,选错了……嗯,我吃过亏。
核心观点:没有万能的散射模型,只有最合适的。理解每个模型的物理假设和适用场景,比背公式重要得多。
3.1 朗伯散射模型
这是最基础的模型。它假设表面是理想漫反射体——光向各个方向均匀散射,跟观察角度无关。说白了,就是“磨砂玻璃”的效果。
数学形式:散射强度与 cos(θ) 成正比,其中 θ 是散射方向与表面法线的夹角。
FRED 里的设置:直接选 Lambertian,给个总散射率(TIS)就行。简单粗暴。
我的经验:朗伯模型最适合描述粗糙度远大于波长的表面,比如白漆墙面、硫酸钡涂层。但用在光滑表面(比如抛光金属)上,误差会很大——我见过有人拿它模拟镜面反射,结果完全对不上。
3.2 高斯散射模型
这个模型假设散射能量集中在镜面反射方向附近,呈高斯分布。适合描述“有点粗糙但还不算太糙”的表面。
关键参数:
- σ(标准差):控制散射角的展宽。σ 越大,散射越分散。
- TIS:总散射率。
适用场景:光学元件表面的微粗糙度散射、部分透射元件的体散射。
避坑指南:高斯模型在散射角较大时衰减太快,不适合描述大角度杂散光。我曾经用它模拟一个透镜边缘的散射,结果低估了杂散光水平,后来换成 ABg 模型才校准。
3.3 ABg 散射模型
这是工程中最常用的模型,没有之一。它用三个参数(A、B、g)拟合实测散射数据,适用范围很广。
数学形式:
BSDF = A / (B + |sin(θ) - sin(θ₀)|^g)
其中 θ₀ 是镜面反射方向,θ 是散射方向。
参数含义:
| 参数 | 作用 | 典型范围 |
|---|---|---|
| A | 控制散射峰值高度 | 10⁻⁴ ~ 10⁻¹ |
| B | 控制峰值宽度(拐点位置) | 10⁻⁶ ~ 10⁻³ |
| g | 控制衰减速度(斜率) | 1.0 ~ 3.0 |
我的习惯:拿到实测数据后,先用 ABg 模型做拟合。如果拟合残差大,再考虑 Harvey-Shack。ABg 的拟合工具在 FRED 里自带,省事。
3.4 Harvey-Shack 模型
这个模型基于线性系统理论,把散射过程看作一个空间频率滤波器。它比 ABg 更物理,但参数也更难调。
核心公式:
BSDF = b₀ / (1 + (sin(θ) / L)^s)
其中 b₀ 是峰值,L 是拐点,s 是斜率。
与 ABg 的区别:
- Harvey-Shack 在低频段(小角度)更平滑,适合描述抛光表面。
- ABg 在高频段(大角度)更灵活,适合描述粗糙表面。
我记得:有一次做星载光学系统的杂散光分析,客户要求用 Harvey-Shack 模型。因为它的物理基础更扎实,评审专家更认可。虽然拟合过程折腾了两天,但最终结果确实更准。
3.5 实测数据模型
这是最直接的方法——把测得的 BSDF 数据直接导入 FRED,用插值或表格方式使用。不需要任何假设,但数据质量决定一切。
导入步骤:
- 准备 CSV 或 TXT 文件,格式为:角度(度)、BSDF 值。
- 在 FRED 的散射属性库中,选择“Import Measured Data”。
- 设置插值方式(线性、样条、对数)。
- 检查导入后的曲线是否平滑,有没有异常跳点。
我曾经:导入一批实测数据,没仔细检查,结果在 45° 附近有个毛刺。仿真出来的杂散光分布完全不对,排查了两天才发现是数据问题。所以,导入后一定要画图看一眼。
3.6 模型选择决策流程
我画了一张图,帮你快速决策:
3.7 实战对比:五种模型在同一个表面上的表现
我用一个粗糙度 0.1μm 的铝反射镜做测试,入射角 30°,波长 632.8nm。结果如下:
| 模型 | 峰值 BSDF (sr⁻¹) | 半高全宽 (°) | 大角度 (60°) 值 | 适用性评价 |
|---|---|---|---|---|
| 朗伯 | 0.32 | 180 | 0.32 | 严重高估大角度散射 |
| 高斯 | 2.10 | 8 | 0.001 | 低估大角度散射 |
| ABg | 1.85 | 12 | 0.015 | 与实测吻合最好 |
| Harvey-Shack | 1.92 | 10 | 0.008 | 小角度区域更准 |
| 实测数据 | 1.88 | 11 | 0.012 | 基准参考 |
结论:对于这个案例,ABg 模型与实测数据的偏差最小(<5%)。Harvey-Shack 在小角度区域更准,但大角度偏差稍大。朗伯模型完全不能用。
3.8 我的个人工作流
说了这么多,分享一下我现在做散射仿真的标准流程:
- 先查数据:有没有现成的实测 BSDF?有就直接导入。
- 没有数据?根据表面粗糙度选模型。粗糙表面用朗伯,微粗糙用高斯,抛光表面用 Harvey-Shack。
- 拿不准?用 ABg。它最通用,拟合工具也方便。
- 验证:仿真结果跟实验对一下,偏差大就换模型或调参数。
- 归档:把最终用的模型和参数记下来,下次直接复用。
小技巧:FRED 的散射属性库支持“模型叠加”。比如,你可以用朗伯模型模拟体散射,同时用 ABg 模型模拟表面散射,两者叠加更接近真实情况。
嗯,以上就是五种内置散射模型的全部内容。每种模型都有它的位置,关键是理解背后的物理意义。下次做仿真时,别急着选默认,先想想你的表面长什么样。