1. 引言
随着蒙特卡罗粒子输运模拟在核物理、医学物理及空间辐射防护等领域的广泛应用[1] [2],复杂几何模型的精确导入已成为提升Geant4仿真效率的核心挑战。传统建模方法存在显著局限:一方面,依赖中间格式转换(如STEP [3] [4]→GDML)或商业软件(如FASTRAD、ESABASE2) [5] [6],不仅流程繁琐,还易因格式转换引入精度损失,同时商业软件的使用会增加成本负担;另一方面,现有工具的功能完整性不足——Poole等提出的CADMesh接口(CADMesh::TessellatedMesh()) [7]虽通过直接解析STL、OBJ、PLY等网格格式,实现了无商业软件依赖的CAD-Geant4集成,但其缺乏图形化操作界面与自动化建模能力,难以满足复杂场景的使用需求。在STEP→GDML转换过程中,复杂的边界表示(B-Rep)实体(如涉及复杂曲面修剪、微小缝隙或公差匹配的装配体)极易出现几何信息的丢失或畸变。具体表现为:1) 几何裂缝:本应紧密贴合的两个表面因转换精度问题产生微小间隙,导致粒子在模拟中意外进入真空区域;2) 面片丢失或扭曲:转换器对某些NURBS曲面拟合失败,造成模型局部特征缺失或变形;3) 法向不一致:转换后相邻面片的法向方向发生混乱,影响Geant4的正确性判断。这些“拓扑错误”往往难以肉眼察觉,却会对仿真结果的准确性造成致命影响。
近年来,GUIMesh [5]、MRADSIM-Converter [6]等工具虽在交互性上有所改进,提供了图形界面,但仍需借助FreeCAD、OpenCASCADE [8]进行STEP格式转换,本质上仍依赖GDML中间格式,未解决格式转换的根本局限;更重要的是,这些工具均未针对Geant4的核心导航性能进行优化,在大规模复杂模型仿真中效率瓶颈突出[9]。值得注意的是,在导航加速方面,Han等人提出的DagSolid [10]通过有向无环图(DAG)结构管理多边形网格,显著提升了导航效率。DagSolid与本系统所采用的四面体网格化方法同属“空间细分”优化策略,但二者技术路径不同:DagSolid在表面网格层面构建空间索引hierarchy,而AutoG4CAD则将模型转换为体网格(四面体集合),利用Geant4原生对体元导航的优化(如智能体素化)来加速。我们的方法优势在于能够直接利用Geant4内置的、经过高度优化的体导航机制,无需引入和管理额外的专用数据结构(如DAG),实现了与Geant4引擎更深度的集成。
针对上述问题,本文基于CADMesh开源接口,开发了一套集成可视化、材料管理与自动化建模功能的软件系统AutoG4CAD。其创新点体现在以下方面:支持STL、OBJ、PLY等轻量化网格格式直接导入,规避中间格式转换的错误风险。设计对用户友好的图形用户界面,实现模型可视化以及零件材料配置,自动生成适用于Geant4的蒙特卡罗代码DetectConstruction.cc文件,实现CAD模型到Geant4编译C++文件直接输出,降低用户门槛。引入四面体网格划分与智能体素化技术,提升复杂曲面的导航速度,为Geant4复杂几何建模提供高效、精准、易用的解决方案。
2. 软件实现
本研究设计了一种AutoG4CAD自动化建模系统。该系统可实现从CAD模型到Geant4仿真代码的端到端映射机制,其界面如图1所示。该界面[11]由四组功能模块构成,顶部菜单栏集成模型导入、四面体网格、文件导出及6种视图切换控制按钮。左侧列表实时显示几何结构信息,如顶点数、面片数、体积等信息。中央区域为三维交互视图,支持模型的平移、旋转、缩放等功能。右侧材料面板支持预定义的316种Geant4标准材料选取和自定义材料的创建,可添加具有不同原子分数或重量比的新材料,其下方为运行信息展示区。
AutoG4CAD系统在用户导入STL、OBJ、PLY文件后,通过PyVista库[12]自动解析模型,提取模型尺寸、位置等信息,提供实时交互式渲染,支持平移、旋转和缩放操作,并显示顶点数、面片数、体积等数据以验证模型完整性。系统集成CADMesh接口,通过调用CADMesh::TessellatedMesh()方法将模型的表面网格转化为G4TessellatedSolid实体,结合用户分配的材料属性,自动生成可直接用于Geant4仿真的DetectConstruction.cc代码文件。若需提升仿真速度,只需点击“四面体网格”按钮,系统会基于TetGen库将闭合表面划分为四面体单元,构建层次化空间分割结构,通过局部碰撞检测替换全局面片遍历,将全局粒子导航的射线–面片相交测试复杂度从O(n)降至O(log n)。如图2所示,系统实现五大功能:CAD格式解析、模型可视化、材料管理、四面体网格加速、代码生成,经GUI统一调度完成从CAD模型到蒙特卡罗仿真的全自动化转换。
Figure 1. Interface of AutoG4CAD
图1. AutoG4CAD界面
Figure 2. AutoG4CAD architecture diagram
图2. AutoG4CAD架构图
3. 算法设计
图3展示了AutoG4CAD系统从CAD模型导入到Geant4的蒙特卡罗代码Detect-Construction.cc文件生成的工作流程。首先加载用户输入的STL/OBJ/PLY文件,随后调用PyVista库实现模型可视化,并展示顶点、面片等数据,然后基于集成的Geant4材料库或者用户自定义的新材料,为模型分配材料属性,紧接着通过调用CADMesh将CAD模型映射为G4TessellatedSolid镶嵌实体,输出包含镶嵌实体的DetectConstruction.cc文件。如果用户需要提升导航速度,则可以选择模型四面体化,系统将离散化后的G4Tet单元通过装配体优化重新组织,输出包含四面体网格的DetectConstruction.cc文件。
在Geant4中,智能体素化、几何参数化等现有几何优化技术对镶嵌实体G4Tessellated-Solid的优化效果有限。智能体素化通过将邻近小体积分组为局部母体积加速导航,几何参数化则利用重复结构副本简化计算,但二者存在明显局限。一方面,镶嵌实体由离散三角面片构成,缺乏子体积层次结构,无法实现分组或复制;另一方面,导航器需遍历所有面片执行碰撞检测,计算复杂度达O(n),导致复杂模型的仿真性能显著下降。
针对上述问题,本研究使用四面体网格优化方法,将闭合镶嵌实体表面离散为G4Tet四面体单元,使导航时仅需检测粒子与局部四面体的交互,以局部计算替代全局面片遍历,由于四面体网格具备子体积层级,在此基础上应用智能体素化技术,将计算复杂度从O(n)降至O(log n)。本系统使用TetGen 1.5 [13]作为四面体网格生成器,通过边界保留细化与体积约束控制网格密度与质量,实现网格优化。通过约束Delaunay四面体化抑制边界面分裂,严格保持输入CAD表面拓扑。通过设置网格质量参数,生成满足封闭性要求的最简四面体单元,减少实体数量,提高计算效率。
Figure 3. Workflow of AutoG4CAD
图3. AutoG4CAD工作流程
网格转换流程如下:初始化两个TetGen输入/输出对象,输入网格通过tetgenio::load_stl()方法加载STL模型,随后调用tetrahedralize()函数执行Delaunay四面体化。输出网格中的独立四面体需通过out.tetrahedronlist向量实现,该向量每四个连续元素指示当前四面体的顶点索引号;随后基于out.pointlist向量检索对应顶点的三维坐标。在遍历out.tetrahedron-list向量过程中,为每个四面体初始化一个G4Tet实体及关联的G4LogicalVolume (此时同步分配材料属性);每个逻辑体积通过G4AssemblyVolume::AddPlacedVolume()方法添加至装配体,最后调用G4AssemblyVolume::MakeImprint()将全部四面体作为单一实体定位至用户探测器几何结构中,支持整体平移、旋转及反射变换。图4和图5分别显示了加载为镶嵌实体和四面体网格的示例用法。
Figure 4. Example usage of loading as a tessellated solid
图4. 镶嵌实体部分代码
Figure 5. Example usage of loading as a tetrahedral mesh
图5. 四面体网格部分代码
4. 结果与讨论
本研究从几何等效性和仿真性能两个方面,验证了AutoG4CAD系统对复杂几何模型转换的精度与效率优势。
4.1. 几何等效性
为验证AutoG4CAD系统的几何等效性,实验选取3个简单几何体,包括立方体、圆台、球体以及1个复杂几何体——中子活化模型,包括18,544个顶点和37,984个面片,作为测试体,分别加载为镶嵌实体和四面体网格,如图6所示。使用Geant4的OpenGL查看器对几何结构进行定性检查,检查是否存在明显的几何结构损坏,镶嵌实体和四面体网格是否正确位于其母体积内。使用Geant4内置的几何重叠命令进行测试,确保相邻体积仅边界接触而无重叠。调用G4TessellatedSolid::DumpInfo()方法存储镶嵌实体和四面体数据,提取面与顶点坐标信息,与原始CAD模型的对应数据进行逐点比对。最后,从三个正交方向向几何结构发射Geant4调试伪粒子geantinos,跟踪详细程度设置为1 mm,以便在geantinos穿过用户探测器几何结构时输出所导航的每个实体的唯一名称,对该输出进行搜索,以验证镶嵌实体和四面体网格都可导航,并作为体积包含在Geant4用户探测器几何结构中。
表1为4种测试几何体的几何等效性结果。在定性检查中,OpenGL查看器未观察到几何结构损坏,模型形态完整,正确位于母体积内,图7展示了4种测试几何体的镶嵌实体,图8展示了4种测试几何体的四面体。Geant4内置几何重叠测试显示,所有相邻体积仅边界接触而无重叠。通过G4TessellatedSolid:DumpInfo()方法报告的结果与原始CAD模型的对应数据一致,镶嵌实体和四面体网格与原始CAD模型的面、顶点坐标无差异。从三个正交方向向测试几何结构发射geantinos表明,镶嵌实体与四面体网格都正确加载到Geant4中,都可进行导航。
(a) (b) (c) (d)
Figure 6. Simple geometries and complex geometries: (a) Cube; (b) Frustum; (c) Sphere; (d) Neutron activation model
图6. 简单几何体和复杂几何体:(a) 立方体;(b) 圆台;(c) 球体;(d) 中子活化模型
Table 1. Geometric equivalence results of four test geometries
表1. 4种测试几何体的几何体等效性结果
名字 |
顶点数 |
面片数 |
OpenGL检查 |
导航 |
立方体 |
8 |
6 |
Pass |
Pass |
圆台 |
100 |
192 |
Pass |
Pass |
球体 |
628 |
1200 |
Pass |
Pass |
中子活化模型 |
18,544 |
37,984 |
Pass |
Pass |
(a) (b) (c) (d)
Figure 7. Tessellated solid of four test geometries: (a) Cube; (b) Frustum; (c) Sphere; (d) Neutron activation model
图7. 4种测试几何体的镶嵌实体:(a) 立方体;(b) 圆台;(c) 球体;(d) 中子活化模型
(a) (b) (c) (d)
Figure 8. Tetrahedral mesh of four test geometries: (a) Cube; (b) Frustum; (c) Sphere; (d) Neutron activation model
图8. 4种测试几何体的四面体:(a) 立方体;(b) 圆台;(c) 球体;(d) 中子活化模型
4.2. 仿真性能
为验证AutoG4CAD系统的仿真性能,实验通过在边长4 m的G4_AIR立方体世界中放置G4_WATER材质的中子活化模型,分别加载原生Geant4镶嵌实体和AutoG4CAD系统转换后的四面体网格,使用105个G4Gamma粒子[14]轰击并重复仿真10次以降低统计误差,图9为仿真示意图。通过记录几何加载时间和仿真总时间,以此比较镶嵌实体和四面体网格仿真性能之间的差异。
表2对比了中子活化模型的镶嵌实体与四面体网格的几何加载时间和仿真模拟时间。其中,镶嵌实体的加载时间指将所有面片添加至G4TessellatedSolid并完成在用户探测器几何结构中定位的总耗时,四面体网格的加载时间则为网格中每个四面体单元初始化G4Tet实体、添加至装配体积并在用户探测器几何结构中完成装配创建的累计时间。实验结果显示,四面体网格的加载时间为282.53秒,是镶嵌实体的91.23秒的3.1倍,这是由于四面体网格需处理更多几何基元,两者操作复杂度均为O(n)。但在仿真效率上,四面体网格的仿真时间仅为77.28秒,较镶嵌实体的15194.36秒提升两个数量级以上。从实际应用场景来看,尽管四面体网格加载时间更长,但加载过程通常仅需数分钟,而仿真模拟耗时往往以小时为单位,因此加载时间的差异对整体效率影响可忽略不计,四面体网格在大规模场景仿真中仍具备显著性能优势。
Figure 9. Simulation setting
图9. 仿真设置
Table 2. Comparison of loading time and simulation time
表2. 加载时间和仿真模拟时间对比
时间(s) |
镶嵌实体 |
四面体网格 |
加载时间 |
91.23 |
282.53 |
仿真模拟时间 |
15194.36 |
77.28 |
4.3. 系统鲁棒性与局限性分析
尽管AutoG4CAD系统在几何等效性与仿真性能上表现优异,但其处理能力在很大程度上依赖于输入CAD模型的质量。本系统主要针对STL、OBJ、PLY等网格格式,这类格式仅描述物体的表面几何,缺乏原生CAD模型中的实体信息(如边界表示B-Rep),因此其鲁棒性直接受限于网格的完整性与正确性。
在实际应用中,系统对输入网格的常见缺陷及其处理策略如下:1) 非流形几何与非闭合网格:这是导致转换失败的最主要原因。例如,存在孤立顶点/边、缺失面片或自相交面片的网格无法构成一个有效的封闭体积,因此无法被正确转换为G4TessellatedSolid实体,更无法进行后续的四面体网格划分。系统通过PyVista和底层CADMesh接口的完整性检查,能够识别并报告此类错误,提示用户“网格非实体”或“无法计算体积”,从而避免将错误几何导入Geant4导致不可预知的仿真结果。2) 面片法向不一致:STL等格式中每个三角面片的法向方向决定了实体的“内”与“外”。如果模型面片法向不一致,Geant4在导航时可能无法正确判断粒子位于体积内部还是外部。AutoG4CAD在可视化渲染阶段会高亮显示反转法向的面片(通常表现为模型内部可见而外部不可见),并集成提供了面片法向统一和翻转的功能,辅助用户进行人工修正。3) 模型尺度与单位:CAD模型文件通常不包含单位信息。一个以“毫米”为单位创建的模型若被误当作“米”导入,将导致几何尺寸相差1000倍。系统在界面中提供了显式的缩放因子设置功能(如图4代码中的SetScale方法),并强烈建议用户在导入时根据原始建模单位进行确认和调整。
本系统的核心创新之一在于规避了STEP→GDML转换链,从而避免了该过程中可能发生的精度损失和复杂B-Rep实体(如NURBS曲面)缝合失败的风险。然而,这种方式的局限性在于,几何纠错的责任从格式转换工具部分转移到了用户和建模软件端。因此,AutoG4CAD更适合于处理已知来源且经过校验的“清洁”网格模型。对于存在严重缺陷的网格,用户仍需借助MeshLab、Blender或原生CAD软件进行修复和重新导出,这也是当前大部分基于网格的仿真流程的通用局限性。
5. 总结
本文基于CADMesh开源接口,开发了集成可视化、材料管理与自动化建模功能的软件系统AutoG4CAD。支持STL、OBJ、PLY等轻量化网格格式直接导入,规避中间格式转换的错误风险。提供对用户友好的图形用户界面,实现模型可视化以及零件材料配置,自动生成适用于Geant4的蒙特卡罗代码DetectConstruction.cc文件,实现CAD模型到Geant4编译C++文件直接输出。引入基于TetGen的四面体网格划分技术,将复杂曲面模型转换为体元集合,从而能够有效利用Geant4的智能体素化机制进行加速。这种方法与DagSolid [12]等表面网格加速方案形成了不同的技术互补,为应对不同特性的复杂几何体提供了新的高性能解决方案。实验验证表明,该系统在几何等效性与仿真效率上表现优秀。
基金项目
安徽省重大培育项目:面向癌症治疗的紧凑型硼中子俘获治疗技术开发及产业应用(21KZS202)。
NOTES
*通讯作者。