4. 几何物体创建与编辑:标准几何体、布尔运算与属性控制

各位好,欢迎来到第四章。这一章我们聊聊非序列模式里最基础、也最容易被忽视的东西——几何物体。说白了,你在软件里搭的光路,本质上就是一堆几何体的组合。球体、圆柱、矩形体,再加上布尔运算,就能拼出你想要的任何形状。

我记得刚入行那会儿,总觉得画个透镜嘛,用标准库里的透镜元件拖出来就行了。后来做激光雷达的接收光学系统,才发现很多时候标准库根本不够用。你得自己动手,从零开始搭几何体。嗯,这一章就是帮你打好这个底子。

4.1 标准几何体:球体、圆柱、矩形体

非序列模式里,标准几何体是构建一切复杂结构的基础砖块。我习惯把它们分成三类:旋转对称体(球、圆柱)、棱柱体(矩形体、多边形体)和特殊体(圆锥、环面)。今天先讲最常用的三种。

4.1.1 球体(Sphere)

球体是最简单的几何体。你只需要定义半径和位置。但这里有个坑——球体默认是实心的。如果你只想用球面做反射镜,记得把材质设为“Mirror”或者把内部挖空。

我的习惯:做球面反射镜时,我通常用“球体+布尔减一个同心的稍小球体”来生成一个薄壳。这样既省内存,又不会在光线追迹时产生多余的折射路径。

4.1.2 圆柱(Cylinder)

圆柱体有两个关键参数:半径和长度。注意,这里的长度是沿着圆柱轴线的总高度。我见过不少新手把长度设成半径的两倍,结果圆柱变成了一个扁盘。

圆柱体默认也是实心的。如果你想要一个空心管(比如做光纤的包层),需要把“Inside/Outside”属性设为“Inside”,或者用布尔运算挖掉内部。

4.1.3 矩形体(Rectangular Volume)

矩形体就是长方体。三个方向的尺寸:X半宽、Y半宽、Z长度。这里我特别提醒一句:矩形体的定位点默认在几何中心,而不是角点。如果你想把矩形体的一角放在原点,需要手动偏移位置。

几何体类型 关键参数 默认定位点 常见用途
球体 半径 球心 透镜、反射球、散射体
圆柱 半径、长度 底面中心 透镜、光阑、光纤
矩形体 X半宽、Y半宽、Z长度 几何中心 探测器、棱镜、基底

4.2 布尔运算:合并、相减、相交

布尔运算才是几何体编辑的灵魂。没有布尔运算,你只能做简单的球、柱、方块。有了它,你就能做出任意复杂的结构。

我曾经做过一个项目,需要模拟一个带有微透镜阵列的探测器。每个微透镜是球面凸起的,但基底是平面的。如果用标准透镜元件,根本没法做这种“部分球面+部分平面”的结构。最后就是用布尔运算——一个矩形体和一个球体相减,再和另一个矩形体合并,搞定了。

4.2.1 合并(Union)

合并就是把两个或多个几何体粘在一起。注意,合并后的物体是一个整体,内部没有交界面。光线穿过合并体时,不会在原来的交界面上发生折射或反射。

避坑指南:我曾经把两个透镜用合并操作拼在一起,结果光线追迹时发现透过率不对。后来才意识到——合并操作会消除内部交界面。如果你希望两个透镜之间有一个空气间隙,千万别用合并,用“组合(Group)”或者直接叠放。

4.2.2 相减(Subtract)

相减是从一个物体中挖掉另一个物体。这个操作非常实用。比如你想做一个带孔的挡板:先画一个矩形体,再画一个圆柱体(代表孔),然后用矩形体减去圆柱体。

相减的顺序很重要。A减B和B减A,结果完全不同。我习惯先选“被减物体”,再选“减去的物体”。

4.2.3 相交(Intersection)

相交只保留两个物体重叠的部分。这个操作用得相对少一些,但在做特殊形状时很管用。比如你想做一个球冠(球体的一部分),可以用一个球体和一个平面相交。

布尔操作 结果 典型应用
合并(Union) 两个物体合为一体,内部无交界面 复合透镜、多面体
相减(Subtract) 从A中挖掉B 打孔、开槽、挖空
相交(Intersection) 只保留A和B重叠的部分 球冠、棱镜切角

4.3 物体材质与表面属性

几何体搭好了,接下来就是给它“穿衣服”——赋予材质和表面属性。这一步决定了光线遇到物体时会发生什么:折射、反射、吸收,还是散射?

材质和表面属性是两个不同的概念。材质定义的是体属性(折射率、吸收系数),表面属性定义的是面属性(反射率、粗糙度、镀膜)。

4.3.1 材质(Material)

材质决定了光线在物体内部的传播行为。常用的材质参数包括:

  • 折射率(Index):可以是常数,也可以是波长相关的色散公式(如Schott公式)。
  • 吸收系数(Absorption):单位是1/cm。数值越大,光线衰减越快。
  • 散射系数(Scattering):用于模拟体散射,比如毛玻璃、浑浊介质。

关键点:如果你只定义了材质,但没有定义表面属性,软件会默认使用材质的折射率来计算折射和反射。但如果你同时定义了表面属性(比如镀了增透膜),表面属性会覆盖材质默认的界面行为。

4.3.2 表面属性(Surface Properties)

表面属性控制的是光线在物体表面的行为。常用的表面属性包括:

  • 反射率(Reflectance):可以是常数,也可以是角度相关的。
  • 透射率(Transmittance):与反射率互补。
  • 粗糙度(Roughness):模拟表面散射。数值越大,散射越强。
  • 镀膜(Coating):可以调用预设的膜层数据,比如增透膜、高反膜。

我建议你养成一个习惯:每次定义表面属性后,都做一次简单的光线追迹验证。看看反射率、透射率是否符合预期。我曾经因为忘记勾选“Apply Coating”选项,导致模拟结果和实测差了20%。

4.4 物体位置与旋转

最后,我们聊聊物体的位置和旋转。这部分看似简单,但实际操作中很容易出错。

4.4.1 位置(Position)

每个物体都有一个参考点。球体的参考点是球心,圆柱的参考点是底面中心,矩形体的参考点是几何中心。你设置的X、Y、Z坐标,就是参考点在全局坐标系中的位置。

如果你想让物体相对于某个参考点偏移,可以用“Tilt About”功能。比如,你想让一个圆柱绕着它的底面边缘旋转,而不是绕着底面中心旋转。这时候就需要先平移参考点,再旋转。

4.4.2 旋转(Rotation)

旋转有三个轴:X、Y、Z。旋转顺序很重要。软件默认的旋转顺序是:先绕X轴,再绕Y轴,最后绕Z轴。如果你改变了旋转顺序,结果会完全不同。

我的经验:在做多轴旋转时,我习惯先用“Tilt About”把旋转中心移到物体的一端,然后再旋转。这样更容易控制物体的姿态。比如做扫描振镜,我就是把旋转中心设在镜面的中心,而不是镜子的几何中心。

4.4.3 参考坐标系

非序列模式支持局部坐标系。你可以为每个物体定义一个局部坐标系,然后在这个坐标系下设置子物体。这样,当你移动父物体时,子物体会跟着移动。

这个功能在做复杂装配体时非常有用。比如做一组透镜阵列,你可以先定义一个局部坐标系,然后把所有透镜都放在这个坐标系下。调整阵列位置时,只需要移动父坐标系,所有透镜一起动。

几何物体创建与编辑知识体系 几何物体创建与编辑 标准几何体 布尔运算 材质与表面属性 位置与旋转 球体 圆柱 矩形体 合并 相减 相交 材质 表面属性 位置 旋转 参考坐标系 核心逻辑:标准几何体 → 布尔运算组合 → 赋予材质与表面属性 → 定位与旋转

好了,这一章的内容就到这里。几何体的创建和编辑,说白了就是搭积木。标准几何体是积木块,布尔运算是拼接方式,材质和表面属性是积木的颜色和纹理,位置和旋转是积木的摆放位置。把这四步练熟了,你就能搭出任何你想要的光学结构。