4. 表面属性与散射模型:镜面反射与透射、朗伯散射、ABg散射模型、Harvey-Shack散射模型、表面粗糙度设置
好,咱们进入第四章。表面属性,说白了就是光打到零件上之后,它到底会怎么走。是乖乖地反射、透射,还是到处乱窜变成杂散光?
我刚开始做杂散光分析时,总觉得只要把镜片形状画对就行了。结果有一次,一个看似简单的镜头系统,鬼影怎么都消不掉。折腾了两周,最后发现是镜筒内壁的散射模型选错了。嗯,从那以后,我对表面属性这块再也不敢马虎了。
4.1 镜面反射与透射:理想世界的基础
FRED里最基础的表面行为,就是镜面反射和镜面透射。这对应着理想光学表面——光线按斯涅尔定律走,能量完全遵循菲涅耳公式。
设置路径很简单:选中表面,在表面属性面板里,把散射模型设为None,然后在镀膜/涂层里定义反射率和透射率。
关键点:即使你用了镜面反射/透射,FRED依然会计算菲涅耳损耗。如果你想要“完美反射镜”,记得把镀膜设为“Ideal Mirror”。
我个人习惯把镜面表面当作“基准线”。先跑一遍理想情况,确认光路正确,再逐步引入散射。这样出了问题,能快速定位是光路错了,还是散射参数设错了。
4.2 朗伯散射:最简单的漫反射模型
朗伯散射,说白了就是“均匀地向各个方向散射”。它的亮度与观察角度的余弦成正比,但辐射强度在半球内是均匀的。
什么时候用?
- 粗糙表面:比如磨砂玻璃、喷砂处理的金属
- 涂层表面:比如黑漆、无光涂料
- 内壁表面:镜筒内壁、遮光罩内壁
在FRED里设置朗伯散射很简单:
1. 选中目标表面
2. 打开 Surface Properties → Scattering
3. 散射模型选择 "Lambertian"
4. 设置 Total Scatter (TIS) 值,比如 0.05 表示5%的能量被散射
5. 如果表面同时有镜面反射,勾选 "Include Specular"
我的经验:朗伯模型虽然简单,但非常实用。我曾经做一个星敏感器遮光罩分析,内壁全部用朗伯散射模型,结果和实测数据吻合得很好。关键是TIS值要准——这个值通常来自供应商的实测数据或BRDF测量。
4.3 ABg散射模型:工程界的标准
ABg模型是目前光学工程界最常用的散射模型。它用三个参数来描述散射的角分布:
| 参数 | 含义 | 典型值范围 |
|---|---|---|
| A | 散射幅值(总散射能量) | 10⁻⁴ ~ 10⁻¹ |
| B | 散射宽度(角度分布的半宽) | 0.001 ~ 0.1 |
| g | 散射衰减指数(下降速度) | 1.0 ~ 3.0 |
ABg模型的数学形式是:
BRDF(θ) = A / (B + |sinθ - sinθ₀|^g)
其中θ₀是镜面反射方向,θ是散射方向。
为什么ABg这么流行?因为它能很好地拟合实测BRDF数据。你想想看,实际表面的散射分布往往不是均匀的——靠近镜面方向能量强,远离镜面方向能量迅速衰减。ABg模型正好能描述这种“有方向性的散射”。
避坑指南:我曾经遇到一个案例,用ABg模型拟合某黑漆的BRDF数据,g值设成了2.5。结果仿真出来的杂散光比实测高了10倍。后来发现,供应商给的BRDF数据是在小角度范围内测的,外推到30°以上完全不准确。所以,ABg参数的有效范围一定要和你的仿真角度范围匹配。
4.4 Harvey-Shack散射模型:物理更严谨的选择
Harvey-Shack模型(简称HS模型)是从表面粗糙度理论推导出来的。它假设散射是由表面微观起伏引起的,因此散射分布和表面功率谱密度(PSD)直接相关。
HS模型的数学形式:
BRDF(θ) = b₀ / [1 + (sinθ / L)^s]
其中:
- b₀:零角度散射值(镜面方向)
- L:散射宽度参数
- s:衰减指数(通常接近2)
HS模型和ABg模型有什么区别?
| 特性 | ABg模型 | Harvey-Shack模型 |
|---|---|---|
| 物理基础 | 经验拟合 | 表面粗糙度理论 |
| 参数数量 | 3个(A, B, g) | 3个(b₀, L, s) |
| 适用场景 | 工程通用 | 抛光表面、超光滑表面 |
| 大角度外推 | 可能不准确 | 更可靠 |
我个人更倾向于:如果表面是抛光过的(比如透镜表面、反射镜),用HS模型;如果是粗糙表面或涂层,用ABg模型。当然,如果你有实测BRDF数据,哪个拟合得好就用哪个。
4.5 表面粗糙度设置:从加工参数到散射模型
很多时候,我们拿到的不是BRDF数据,而是表面粗糙度参数——比如Ra、Rq、RMS。怎么把这些参数变成FRED里的散射模型?
FRED提供了一个很实用的工具:Surface Roughness to Scattering。你输入RMS粗糙度,它能自动生成对应的HS模型参数。
操作步骤:
1. 打开 Tools → Surface Roughness to Scattering
2. 输入 RMS 粗糙度(单位:nm 或 Å)
3. 输入波长(单位:μm)
4. 选择表面类型(抛光、研磨、车削等)
5. 点击 Calculate,FRED自动生成 b₀, L, s 参数
6. 点击 Apply,参数自动填入表面属性
重要公式:总散射量 TIS ≈ (4π·σ·cosθᵢ / λ)²,其中σ是RMS粗糙度,θᵢ是入射角,λ是波长。这个公式告诉你:粗糙度越大、波长越短、入射角越接近正入射,散射越强。
我记得有一次做激光雷达系统分析,客户只给了镜片的RMS粗糙度(0.5 nm)。我用这个工具生成了HS模型参数,仿真结果和后来实测的BRDF数据对比,误差在15%以内。对于前期设计阶段,这个精度完全够用。
4.6 知识体系总览
下面这张图总结了本章的核心逻辑:从表面类型出发,选择对应的散射模型,最终在FRED中完成设置。
4.7 实战建议:如何选择散射模型
说了这么多,到底该怎么选?我总结了一个简单的决策流程:
- 有没有实测BRDF数据?
- 有 → 用ABg或HS模型拟合,哪个残差小用哪个
- 没有 → 进入下一步
- 表面是抛光还是粗糙?
- 抛光(RMS < 10 nm)→ 用HS模型,或从粗糙度转换
- 粗糙(RMS > 100 nm)→ 用朗伯模型
- 介于中间 → 用ABg模型,参考类似表面的文献值
- 分析目的是什么?
- 初步评估 → 朗伯模型足够
- 详细设计 → ABg或HS模型
- 最终验证 → 必须用实测BRDF数据拟合的模型
一个小技巧:如果你不确定参数,可以在FRED里做一个参数扫描。比如ABg模型的g值从1.0扫到3.0,看看杂散光结果的变化范围。这样你能知道“参数不确定性对结果的影响有多大”。我每次做关键项目都会跑一遍这个扫描,心里才有底。