3. 表面属性定义:表面类型、粗糙度与镀膜、BRDF/BSDF 模型选择
表面属性,说白了就是光打到物体上之后会发生什么。是弹回去?穿过去?被吃掉?还是散得到处都是?TracePro 里所有的光学行为,最终都落在表面属性的定义上。我见过太多仿真翻车,根源就是这里随便选了个默认值。
这一节,我把表面属性拆成三个核心维度来讲:表面类型、粗糙度与镀膜、BRDF/BSDF 模型。你把这三点理清了,表面属性这块基本就不会踩坑。
3.1 表面类型:吸收、反射、透射、散射
TracePro 里新建一个表面属性,首先得选它的「基本行为」。四种类型,对应四种光学命运:
| 表面类型 | 物理含义 | 典型应用场景 | 我踩过的坑 |
|---|---|---|---|
| 吸收 (Absorbing) | 光线到达后完全被吸收,不产生任何出射光 | 黑体腔、消光光阑、探测器死区 | 把吸收面当「无反射」用,结果杂散光路径全断了 |
| 反射 (Reflecting) | 光线按反射定律或散射模型返回原介质 | 反射镜、反光杯、导光管壁 | 忘记设反射率,默认 100% 反射,能量永远不衰减 |
| 透射 (Transmitting) | 光线穿过表面进入另一介质 | 透镜、窗口片、分光镜 | 透射面没配对折射率,光线直接「穿墙」不偏折 |
| 散射 (Scattering) | 光线按概率分布向多个方向出射 | 漫反射白板、毛玻璃、粗糙金属 | 散射模型选错,能量分布跟实测差 30% 以上 |
3.2 表面粗糙度与镀膜设置
选完类型,接下来就是「表面长什么样」。粗糙度和镀膜,一个管微观形貌,一个管薄膜干涉。很多人只设其中一个,另一个留默认,结果仿真跟实测差得离谱。
3.2.1 表面粗糙度
TracePro 里粗糙度用 RMS 粗糙度 (σ) 和 相关长度 (τ) 来描述。你想想看,一个镜面抛光的表面,σ 可能只有 5 nm;而一块喷砂铝板,σ 能到 1 μm 以上。差别巨大。
我个人习惯的做法是:
- 有实测数据:直接用轮廓仪测出来的 σ 和 τ,输入到 TracePro 的 ABg 参数里。
- 没有实测数据:查文献或供应商 datasheet,别自己瞎猜。我见过有人把 σ 设成 0.1 μm 当「微粗糙」,结果散射角分布完全不对。
- 默认值陷阱:TracePro 新建表面时粗糙度默认是 0(理想光滑)。如果你做的是漫反射仿真,忘了改这个,光线会全部按镜面反射走,结果可想而知。
3.2.2 镀膜设置
镀膜在 TracePro 里是通过 薄膜堆栈 (Thin Film Stack) 来定义的。增透膜、高反膜、分光膜,本质上都是一层一层叠出来的。
这里有个关键点:镀膜必须配合折射率使用。你设了一个增透膜,但基底的折射率没填对,那镀膜算出来的反射率就是错的。我记得有一次帮客户排查问题,他镀膜参数完全照供应商给的填,但仿真结果就是不对。后来发现——基底的折射率他用了默认的 1.0(空气)。
| 镀膜类型 | 典型结构 | 常见问题 |
|---|---|---|
| 增透膜 (AR) | MgF₂ / SiO₂ / TiO₂ 多层 | 膜层厚度设错,中心波长偏移 |
| 高反膜 (HR) | SiO₂ / Ta₂O₅ 交替 | 层数不够,反射率达不到 99.5% |
| 分光膜 (BS) | 金属 + 介质混合 | 偏振效应没考虑,R/T 比例跑偏 |
3.3 BRDF / BSDF 模型选择
这是表面属性里最容易被忽视、但影响最大的部分。BRDF(双向反射分布函数)和 BSDF(双向散射分布函数)决定了光线在表面上的 角度分布。选错了模型,能量守恒可能都是错的。
3.3.1 常见模型对比
| 模型 | 适用场景 | 参数数量 | 我的评价 |
|---|---|---|---|
| ABg | 大多数工程表面(喷砂、抛光金属、塑料) | 3 个 (A, B, g) | 最实用,参数好拟合,我 80% 的项目用这个 |
| Harvey-Shack | 高精度光学表面(超光滑镜面) | 2 个 (b, s) | 适合镜面散射,但参数物理意义不直观 |
| Lambertian | 理想漫反射(积分球内壁、白板) | 1 个 (总反射率) | 简单粗暴,但真实表面很少是完美朗伯体 |
| User-defined | 实测数据导入 | 自定义 | 最准,但需要测角光度计数据 |
3.3.2 选模型的核心原则
我个人的经验是:能用 ABg 就别用 Lambertian。Lambertian 虽然简单,但它假设所有方向出射亮度相同,真实表面很少这样。ABg 只需要三个参数,而且 TracePro 自带了材料库,很多常见表面的 ABg 参数可以直接用。
举个例子,我做车载镜头杂散光分析时,镜筒内壁用的是 ABg 模型,A=0.01, B=0.1, g=2.0。这个组合模拟黑色塑料的粗糙表面,跟实测吻合得很好。如果你用 Lambertian,散射光分布太均匀,杂散光水平会被低估。
- 表面类型决定「有没有光」
- 粗糙度与镀膜决定「光强多少」
- BRDF/BSDF 模型决定「光往哪去」
3.4 知识结构图:表面属性定义全流程
下面这张图帮你理清表面属性定义的完整逻辑。从选择类型开始,到设置微观形貌,再到选择散射模型,每一步都有对应的坑和检查点。
3.5 实战建议:从零开始定义一个表面
最后,给你一个我常用的操作顺序,照着做基本不会漏:
- 先定类型:反射还是透射?吸收还是散射?想清楚再动手。
- 再设粗糙度:有数据用数据,没数据查资料,别用默认 0。
- 配镀膜:如果表面有镀层,把薄膜堆栈建好,别忘了基底的折射率。
- 选散射模型:工程表面首选 ABg,高精度镜面用 Harvey-Shack,只有积分球内壁才用 Lambertian。
- 验证能量守恒:跑一个简单光线追迹,看总出射能量是否等于入射能量(吸收的除外)。