第三章 几何实体建模基础

各位同学,今天我们来聊聊ASAP里最基础也最核心的内容——几何实体建模。说实话,我见过不少新手一上来就急着跑光线追迹,结果模型建得歪七扭八,追出来的结果根本没法看。嗯,这章我们就把地基打牢。

3.1 基本几何体:从球体到圆锥

ASAP里的几何体,说白了就是光线的「舞台」。光线怎么走、在哪反射、在哪折射,全看你怎么搭这个舞台。

3.1.1 球体(SPHERE)

球体是最简单的三维实体。我个人的习惯是,但凡涉及点光源或朗伯体散射,优先用球体做验证。

! 创建一个半径为5的球体,中心在原点
SPHERE Z 0 5
OBJECT 'my_sphere'

这里要注意,Z 0表示球心在Z=0的平面上,5是半径。你可能会问:「为什么是Z方向?」因为ASAP默认光轴沿Z轴,这是约定俗成的规矩。

我的小技巧: 球体做透镜时,记得把材料属性设成玻璃,不然光线穿过去啥事没有,白忙活。

3.1.2 圆柱(CYLINDER)

圆柱在光学系统里太常见了——镜筒、支架、光纤,哪哪都有它。

! 创建一个半径为3、长度为10的圆柱,沿Z轴放置
CYLINDER Z 0 3 10
OBJECT 'tube'

参数含义:Z 0是起始位置,3是半径,10是长度。我曾经犯过一个低级错误——把长度设成负数,结果圆柱朝反方向长,找了半天bug。

避坑指南: 圆柱的端面默认是平的。如果你需要球面端面(比如光纤端面),得用布尔运算切出来。

3.1.3 平面(PLANE)

平面是最简单的实体,但也是最容易被忽视的。我见过有人用无限大平面做探测器,结果光线追迹跑了一整天——因为光线在无限大平面上来回反射,永远停不下来。

! 创建一个位于Z=10的矩形平面,尺寸20x20
PLANE Z 10 RECTANGLE 20 20
OBJECT 'detector'

记住:平面一定要限定尺寸。除非你明确需要无限大反射面,否则别偷懒。

3.1.4 圆锥(CONE)

圆锥在照明系统里很常用,比如反光杯、聚光器。

! 创建一个圆锥,底部半径5,顶部半径2,高度8
CONE Z 0 5 2 8
OBJECT 'reflector'

参数顺序:起始位置、底部半径、顶部半径、高度。嗯,这里有个坑——如果顶部半径比底部半径大,那就变成倒锥了,光线走向完全不一样。

3.2 布尔运算:把简单几何体拼成复杂结构

单个几何体能做的事有限。真正的光学系统,比如手机镜头、车载激光雷达,都是几十个几何体拼出来的。布尔运算就是干这个的。

3.2.1 并集(UNION)

把两个实体合并成一个。我做过一个项目,需要把两个圆柱并起来做异形镜筒,用并集一步搞定。

! 合并两个圆柱
CYLINDER Z 0 3 5
OBJECT 'cyl1'
CYLINDER Z 5 2 5
OBJECT 'cyl2'
UNION 'cyl1' 'cyl2' 'combined'

3.2.2 交集(INTERSECT)

取两个实体重叠的部分。这个用得少,但一旦用上就是神来之笔。比如你要切出一个六边形透镜,用平面和球体做交集就行。

! 球体和立方体的交集
SPHERE Z 0 10
OBJECT 'sphere'
BOX Z 0 10 10 10
OBJECT 'cube'
INTERSECT 'sphere' 'cube' 'lens'

3.2.3 差集(SUBTRACT)

从一个实体里挖掉另一个。这是我最常用的操作——做透镜的凹面、挖孔、开槽,全用它。

! 从圆柱里挖掉一个球体,做成凹面镜
CYLINDER Z 0 5 10
OBJECT 'base'
SPHERE Z 5 3
OBJECT 'tool'
SUBTRACT 'base' 'tool' 'concave_mirror'
核心要点: 布尔运算的顺序很重要。A减B和B减A,结果完全不同。我建议每次做差集前,先在脑子里过一遍:「谁被谁挖?」

3.3 坐标系与变换:让实体动起来

实体建好了,但位置不对怎么办?别急着删了重建,用变换。

3.3.1 平移(SHIFT)

! 把球体沿X轴移动5个单位
SHIFT OBJECT 'my_sphere' X 5

3.3.2 旋转(ROTATE)

! 把圆柱绕Y轴旋转45度
ROTATE OBJECT 'tube' Y 45

我记得有一次,客户要求把探测器倾斜30度放置。我直接用ROTATE搞定,省了重新建模的功夫。

3.3.3 局部坐标系

复杂系统里,我强烈建议用局部坐标系。比如你要在镜筒的不同位置放多个透镜,每个透镜用独立的坐标系,改起来方便得多。

! 创建局部坐标系并放置透镜
SHIFT OBJECT 'lens1' Z 10
SHIFT OBJECT 'lens2' Z 20
SHIFT OBJECT 'lens3' Z 30
我的习惯: 每个光学元件单独一个坐标系,这样后期调整间距时,改一个数字就行,不用重新算全局坐标。

3.4 实体属性:材料、颜色、透明度

几何体建好了,但ASAP不知道它是玻璃还是空气。你得告诉它。

3.4.1 材料属性

材料决定了光线怎么和实体交互。反射、折射、吸收,全看材料。

! 给透镜设置玻璃材料
MEDIA
  1.5 'BK7'  ! 折射率1.5,材料名BK7
OBJECT 'lens1'
  INTERFACE 0 1  ! 0表示外部空气,1表示内部BK7

这里INTERFACE 0 1的意思是:光线从外部(介质0,空气)进入内部(介质1,BK7)。顺序反了,光线就出不来了。

3.4.2 颜色与透明度

颜色和透明度不影响光线追迹,但影响你调试时的视觉体验。我习惯把不同功能的实体设成不同颜色——透镜用蓝色,反射镜用红色,探测器用绿色。

! 设置实体颜色和透明度
OBJECT 'lens1'
  COLOR 0 0 1  ! RGB颜色,蓝色
  TRANSPARENCY 0.5  ! 半透明,方便看内部结构
注意: 透明度只影响显示,不影响光线。别以为设了半透明光线就能穿过去——那得靠材料属性。

3.5 知识体系总览

下面这张图是我自己整理的,把本章的核心逻辑串起来了。你保存下来,建模时对照着看,不容易漏步骤。

几何实体建模核心流程 基本几何体 布尔运算 坐标系与变换 实体属性 球体、圆柱、平面、圆锥 SPHERE / CYLINDER PLANE / CONE 每个实体需指定位置和尺寸 并集、交集、差集 UNION / INTERSECT SUBTRACT 注意操作顺序! 平移、旋转、局部坐标系 SHIFT / ROTATE 局部坐标系管理 每个元件独立坐标系 材料/颜色 MEDIA COLOR 透明度 组合成完整光学系统 几何体 + 布尔运算 + 变换 + 属性 = 可追迹的模型 光线追迹与分析

这张图从左到右,从上到下,就是建模的完整流程。你先选基本几何体,然后用布尔运算拼出复杂形状,接着用变换摆好位置,最后赋予材料和颜色。每一步都别跳,跳了后面追迹就会出问题。

好了,这一章的内容就这些。几何实体建模看着简单,但真正用好需要大量练习。我建议你从最简单的球体开始,一步步加圆柱、做布尔运算、调位置,直到能搭出一个完整的透镜系统。嗯,动手试试吧。


专注资料整理