形状数据库教程(第 B 部分):生成 2D 图像与网格
在 第 A 部分中,你在 形状数据库里创建了一个新条目,并从一个简单的光子晶体风格图案构建了你的第一个网格。 本部分我们重点介绍这些 2D 图像最初是如何生成的,以及它们如何被转换为可用于光线追迹和器件仿真的 3D 结构。
形状数据库面向 难以用简单解析函数描述的几何:AFM 图像、粗糙界面、复杂铺砌与网格,以及导入的 CAD 部件。 这些都通过从 2D 图像出发并将其挤出到 3D 的方式进行一致处理。
1. 2D 图像功能区
打开数据库中任意条目的形状编辑器(例如第 A 部分中的 demo 形状),并切换到 2D 图像 功能区。你应当会看到一个与
?? 类似的工具栏。
每个按钮都会在形状编辑器右侧面板生成一幅新的灰度高度图: 蜂窝、光子晶体(标注为 Generate Xtal)、透镜状轮廓、 高斯斑点、锯齿波、棋盘格图案或 Perlin 噪声粗糙表面。 每次点击按钮,图像都会按当前配置重新生成。
每个生成器下方还有一个小箭头。点击它会打开该图案专用的 配置 窗口。下面我们将查看一些具体示例。
你并不限于合成图像。左侧的 图像 按钮 允许你导入真实的 AFM 数据或任何其他位图。离散化器将 图像解释为高度图: 白色像素对应最大高度,黑色像素对应最小高度,而中间灰度 产生中间高度。为获得最佳结果,AFM 数据应转换为 线性灰度颜色标尺;彩色“热图”调色板并不适用,因为其 亮度不再以简单方式编码高度。
最后,如果你在右侧图像上用鼠标左键点击,你可以将像素“涂” 成黑色以移除材料。这是一种无需重新生成整个图案就能裁剪不需要区域或切出光阑孔径的简便方法。
2. 示例:蜂窝接触图案
蜂窝结构可用作透明电极、柔性导电网格或 机械支撑。要生成蜂窝,点击 Generate Honeycomb。 右侧面板将更新为六角晶格。当你点击 Build Mesh 时,图案会被挤出为 3D 结构,如 ?? 所示。
配置窗口允许你改变 x 与 y 方向的特征间距,相对于底层网格平移图案,设置线宽并旋转 图案。这里做一些小的调整就可能显著影响网格如何嵌入器件结构,因此值得稍作实验。
当你对 2D 图案满意后,再次按 Build Mesh 来更新 3D 视图。如果网格看起来过于复杂,你可以点击 Edit mesh 并减少三角形数量。目标始终是使用能够忠实刻画几何的 最少 三角形: 每增加一个三角形都会提高光线追迹成本,而在实际中这种减速通常是超线性的而不是线性的。
3. 示例:由 Perlin 噪声生成类 AFM 粗糙度
真实界面往往是粗糙的,而能够生成具有相似统计性质的“伪 AFM”表面 用于快速光学实验很有用。OghmaNano 使用 Perlin noise,一种在计算机图形学中常用的平滑随机场 (参见 Wikipedia), 来模拟这种行为。
在 2D 图像功能区中点击 Perlin noise。右侧面板将 出现灰度噪声图案。你可以通过下拉 配置菜单调整噪声参数,并再次点击图标重新生成,直到得到你想要的粗糙度类型。
选择好图案后,按 Build Mesh 创建 3D 表面。 对于类 AFM 结构,通常更适合使用 规则 网格,而不是默认的节点简化算法。 规则网格提供更均匀的表面高度采样,并使总三角形数更易控制。你可以在 Edit mesh 对话框中切换 这些选项,并尝试不同的三角形分辨率,直到在保真度与速度之间达到良好折中。
4. 使用滤镜进行后处理
一旦生成了 2D 图像,你可以使用 Filters 功能区进一步优化它,如 ?? 所示。 这些工具在网格化之前直接作用于右侧图像。
Blur 滤镜用于平滑尖锐台阶与棱角; Normalize 选项将高度分布重缩放到受控范围; Threshold 可将灰度图案变为二值结构;而 Boundary 可在图案周围添加实心边框。它们都作用在底层图像上,因此你可以自由组合,然后按 Build Mesh 查看对 3D 表面的影响。
作为一个具体示例,从使用 Saw wave 按钮生成的锯齿波图案开始。构建网格后,你可能会看到类似 ?? 的结果。 应用模糊滤镜会软化边缘,并产生 ?? 中更平滑的表面。
通用策略始终相同:生成或导入 2D 图像,应用你所需的滤镜,然后重新构建网格。 如果生成的网格仍然过于庞大,使用 Edit mesh 在保持表面关键特征不变的同时减少三角形数量。
5. 导入 CAD 文件(Wavefront OBJ)
除了基于图像的形状,OghmaNano 还可以通过 Wavefront OBJ 格式导入简单的 CAD 模型 (Wikipedia link)。 如果你已经在外部 CAD 软件包中定义了机械设计或透镜几何,这会很有用。
要导入 CAD 模型,在形状编辑器左上角点击 Import CAD file 并选择一个 OBJ 文件。 解析器支持该格式的纯文本版本, 主要由顶点与面定义组成。其他 CAD 格式目前尚不被识别。
导入 CAD 几何时,控制三角形数量尤为重要。 一个包含数万三角形的高细节 OBJ 在可视化上可能完全没问题, 但对光线追迹而言会非常缓慢,并且很容易主导 整个仿真的运行时间。如果可能,在将网格导入 OghmaNano 之前, 先在你的 CAD 工具中对其进行简化或降采样。
6. 关于封闭曲面的一点说明
无论形状来自 2D 图像还是导入的 CAD 文件,OghmaNano 使用的所有形状 都被视为 封闭曲面。通俗地说,当一个曲面 完全包围一个体积且没有孔洞或缝隙时,它就是封闭的。在网格术语中, 网格中的每条边都应恰好属于两个三角形。
之所以有这个要求,是因为光学求解器需要明确知道 一条光线何时处于结构“内部”或“外部”。 如果网格存在开口边、缺失面片或 自相交,光线可能会从缝隙泄漏或在定义不清的区域中被困住。 这会导致数值伪影,甚至可能使光线追迹器失效。
由 2D 图像生成的网格在构造上总是封闭的:基底平面与侧壁会自动添加。 然而,CAD 导入的质量仅与原始文件一样好。 如果你在 CAD 派生形状上遇到问题,值得在 CAD 查看器中检查 该物体是否确实形成了密封外壳,并在必要时先修复后再用于 OghmaNano。