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(理想光滑)。如果你做的是漫反射仿真,忘了改这个,光线会全部按镜面反射走,结果可想而知。
💡 小技巧: 粗糙度不是越大越好。我做投影光学时,反光杯内壁需要一定的粗糙度来匀光,但太大会损失中心光强。一般从 σ = 0.2 μm 开始试,逐步往上调,直到光斑均匀度达标。

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 知识结构图:表面属性定义全流程

下面这张图帮你理清表面属性定义的完整逻辑。从选择类型开始,到设置微观形貌,再到选择散射模型,每一步都有对应的坑和检查点。

表面属性定义流程与避坑点 表面属性定义全流程与避坑点 ① 选择表面类型 吸收 反射 透射 散射 ② 设置粗糙度 (σ, τ) + 镀膜 ③ 选择 BRDF / BSDF 模型 ABg Harvey-Shack Lambertian User-defined ⚠️ 常见避坑点 • 表面类型选错 → 光线行为完全错误 • 粗糙度留默认 0 → 镜面反射,无散射 • 镀膜没配折射率 → 反射率计算错误 • 模型选 Lambertian → 真实表面很少完美漫反射

3.5 实战建议:从零开始定义一个表面

最后,给你一个我常用的操作顺序,照着做基本不会漏:

  1. 先定类型:反射还是透射?吸收还是散射?想清楚再动手。
  2. 再设粗糙度:有数据用数据,没数据查资料,别用默认 0。
  3. 配镀膜:如果表面有镀层,把薄膜堆栈建好,别忘了基底的折射率。
  4. 选散射模型:工程表面首选 ABg,高精度镜面用 Harvey-Shack,只有积分球内壁才用 Lambertian。
  5. 验证能量守恒:跑一个简单光线追迹,看总出射能量是否等于入射能量(吸收的除外)。
💡 我的习惯: 每次定义完表面属性,我都会在 TracePro 里用「单光线追迹」打一束光上去,看反射/透射/散射的方向对不对。这一步只要 10 秒,但能避免后面几小时的返工。