第三章 几何实体建模基础
各位同学,今天我们来聊聊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'
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 知识体系总览
下面这张图是我自己整理的,把本章的核心逻辑串起来了。你保存下来,建模时对照着看,不容易漏步骤。
这张图从左到右,从上到下,就是建模的完整流程。你先选基本几何体,然后用布尔运算拼出复杂形状,接着用变换摆好位置,最后赋予材料和颜色。每一步都别跳,跳了后面追迹就会出问题。
好了,这一章的内容就这些。几何实体建模看着简单,但真正用好需要大量练习。我建议你从最简单的球体开始,一步步加圆柱、做布尔运算、调位置,直到能搭出一个完整的透镜系统。嗯,动手试试吧。