Loading

【转载】一篇文章入门三维几何内核

转载:一篇文章入门三维几何内核

在三维建模软件和仿真软件中,我们经常能听到到“几何内核”一词。

本文就以三维几何为题,从仿真的角度讨论以下几方面内容:

  1. 几何内核是什么,有什么作用

  2. 几何内核和仿真的关系

  3. 现状

  4. 作为仿真类公司,有无必要开发几何内核

1. 几何内核是什么,有什么作用

从最简单的三维基本实体“长方体”说起

一个三维长方体,在笛卡尔坐标系中至少有以下种表达方式:

  1. 给出长方体的两个顶点坐标即可确定长方体;

  2. 给出长方体8个顶点坐标;

  3. 给出初始点坐标以及长,宽,高;

  4. 如果一条边由2个点确定,给出12条边即可确定;

  5. 如果一个面由四个顶点确定,给出6个面即可确定;

  6. 给出一个函数表达式,限定任意一点坐标在长方体限定范围内;

1,2表达是同一方法,可以理解为常规表达,3是参数表达,4和5是最广泛使用的边界表达Boundary Representation(简称B-Rep结构),6则是约束表达,通常在建模过程中使用;

在实际应用中,我们可能还会有如下需求:

  1. 编辑修改长方体(修改长宽高,并执行undo和redo操作)

  2. 离散面片化长方体用来显示和划分网格

  3. 网格化长方体供仿真使用

  4. 长方体与别的物体进行布尔(并,减,差)运算;

  5. 移动,缩放,旋转长方体

  6. 根据业务需求找到理想的长方体长宽高参数,需要多次自动调整参数

  7. 复制,阵列,变换该长方体

  8. 点/线/面/实体 到长方体的距离/夹角

  9. 赋值属性(颜色,材料,边界条件,荷载等)到长方体,或者长方体的面/线/点上

10.需要对长方体进行切割加工;

11.将几何导出为中间格式,供第三方软件使用

12.计算长方体本身的属性(质量,体积,面积,重心)

稍微介绍一下B-Rep结构,主流的几何内核都使用B-Rep结构,主要原因是这种几何表达信息丰富,可以满足几乎所有对几何数据的要求,但缺点也显而易见,数据过多冗余,在大规模数据上,性能是一个很大的问题。B-Rep就像是工具中的瑞士军刀,什么都能做。

B-Rep 边界表示方法,把所有的三维实体都通过封闭的边界面表示,比如长方体可以用过六个面表达。

开源Opencascade的拓扑结构表达如下:

图片

ACIS的拓扑几何定义类似:

图片

更多边界表示法(Boundary Representation)B-Rep的详细信息可以百度谷歌。

由此可见,几何内核的作用在于表达,处理几何对象,对外提供接口。以两个长方体的布尔运算为例,如果只知道顶点坐标信息,布尔运算无法进行,顶点也无法表达出计算结果。只有知道了边/面,位置等足够信息后才能进行,几何内核的实体表达可以提供这些信息。

此外,好的几何内核提供了约束建模,参数建模,驱动建模,事务等各种底层机制,方便了上层CAD应用的开发。

2. 几何内核和仿真的关系

在数值计算仿真中,求解器的输入是离散的网格数据,网格数据来自于几何。好的几何内核可以提供足够的信息给网格划分引擎。

对于二维和三维的网格,网格引擎需通常要将几何离散的三角面片作为输入,或者要拿到面的拓扑几何数据,也就是面,边,顶点或者环和shell信息。在网格生成过程中有几个地方需要注意:

  1. 几何数据需要保证正确,如果几何有错误,比如有非常细长的面片(最长比最小大于1000),实体几何之间有干涉,即相互重叠,存在自由面片,几何拓扑不完整不连续等等。这些会导致网格划分出现错误,或者网格划分出来也不能用于仿真计算。

  2. 几何属性和网格属性的映射。即把几何实体上的所有属性信息也要赋值到网格的属性上。比如材料信息,边界荷载等相关信息。对于复杂的几何,属性查找会带来性能问题,需要在网格划分过程中做好这件事。

  3. 几何网格映射参数化。通常情况下我们需要修改几何,由此带来网格的改动。在参数驱动和自动化过程中,几何会多次改动造成整体几何变动以及网格频繁变化,这就要求几何和网格的接口要足够稳定。

  4. 网格参数设置。合理的参数设置可以在保证仿真精度的前提下大幅提高仿真效率,目前大部分网格划分需要人工干预,或者进行自适应网格加密等,网格划分参数智能化是一个很有挑战的技术,也是人工智能,深度学习在仿真领域应用的一个技术点。

3. 现状

目前主流的商业三维几何内核商业有ACIS,Parasolid,这两个三维内核同宗同源,只是两个发展分支,ACIS的Spatial公司被达索收购,而Parasolid经历多次收购现收归西门子。现在的两个商业内核除了加强底层内核功能,ACIS更偏向于CAD/CAE/EDA/CAM等客户应用领域,而Parasolid更偏向于加强西门子自身业务的支撑,在CAD功能上,Parasolid要优于ACIS。

目前市面上的大多数三维CAD软件,和拥有三维几何造型仿真软件几何内核都采用ACIS或者Parasolid。

目前开源的几何内核有法国公司推出的Opencascade,对于小型项目的开发是个不错的选择。

https://www.opencascade.com/

国内的中望,广联达公司拥有自主开发的三维几何内核,主要用作支撑其自身业务。

不少开源类库都有其自己的几何定义,但是仅仅用作自己业务,没有通用性,算不上几何内核,比如Gmsh,CGAL等等。

俄罗斯作为一个科技大国,自然也有其开发的几何内核,但是技术生态圈封闭,在和主流CAD软件数据文件交互中问题不少,开发的话只能用其部分功能。

4. 作为仿真类公司,有无必要开发几何内核

从笔者自身开发经验看,如果长期在自己的仿真领域深钻,几何内核开发是绕不开的。

笔者用过ACIS/Parasolid/OCC,并有过开发几何内核的经验。但从表面上看,几何内核开发没有太多技术瓶颈,已有的功能需求都有解决方案,但实际问题是几何内核涉及的内容过多,而且作为底层技术支持,对稳定性,可靠性要求非常高,短期内无法开发出像样的产品,所以开发几何内核需要经过实际迭代,长期技术积累,研发前期投入巨大。

前面讲过BRep结构就类似瑞士军刀,似乎什么都能做,但对于很多业务来说,数据冗余度很高。根据自身业务定义几何拓扑结构更高效,比如Solibri公司的产品,通过自定义三维几何结构,将解析显示三维IFC文件做到了全球最快,如果使用ACIS的话,时间是其几十倍。

而类似OCC的开源产品,无论从功能,稳定性,性能上,都难以用于大规模的实际商用,而且一旦出了问题,几乎没有解决方法。

在当前国内大力自主发展技术,知识产权保护趋严的背景下,几何内核作为工业软件的一项基本底层技术,应该被拿到产业链的战略地位上来,否则永远只能在国外产品基础上开发,利润大头送给他人。

posted @ 2023-04-08 21:54  Nicander  阅读(354)  评论(0编辑  收藏  举报