【转载】一篇文章入门三维几何内核
转载:一篇文章入门三维几何内核
在三维建模软件和仿真软件中,我们经常能听到到“几何内核”一词。
本文就以三维几何为题,从仿真的角度讨论以下几方面内容:
-
几何内核是什么,有什么作用
-
几何内核和仿真的关系
-
现状
-
作为仿真类公司,有无必要开发几何内核
1. 几何内核是什么,有什么作用
从最简单的三维基本实体“长方体”说起
一个三维长方体,在笛卡尔坐标系中至少有以下种表达方式:
-
给出长方体的两个顶点坐标即可确定长方体;
-
给出长方体8个顶点坐标;
-
给出初始点坐标以及长,宽,高;
-
如果一条边由2个点确定,给出12条边即可确定;
-
如果一个面由四个顶点确定,给出6个面即可确定;
-
给出一个函数表达式,限定任意一点坐标在长方体限定范围内;
1,2表达是同一方法,可以理解为常规表达,3是参数表达,4和5是最广泛使用的边界表达Boundary Representation(简称B-Rep结构),6则是约束表达,通常在建模过程中使用;
在实际应用中,我们可能还会有如下需求:
-
编辑修改长方体(修改长宽高,并执行undo和redo操作)
-
离散面片化长方体用来显示和划分网格
-
网格化长方体供仿真使用
-
长方体与别的物体进行布尔(并,减,差)运算;
-
移动,缩放,旋转长方体
-
根据业务需求找到理想的长方体长宽高参数,需要多次自动调整参数
-
复制,阵列,变换该长方体
-
点/线/面/实体 到长方体的距离/夹角
-
赋值属性(颜色,材料,边界条件,荷载等)到长方体,或者长方体的面/线/点上
10.需要对长方体进行切割加工;
11.将几何导出为中间格式,供第三方软件使用
12.计算长方体本身的属性(质量,体积,面积,重心)
稍微介绍一下B-Rep结构,主流的几何内核都使用B-Rep结构,主要原因是这种几何表达信息丰富,可以满足几乎所有对几何数据的要求,但缺点也显而易见,数据过多冗余,在大规模数据上,性能是一个很大的问题。B-Rep就像是工具中的瑞士军刀,什么都能做。
B-Rep 边界表示方法,把所有的三维实体都通过封闭的边界面表示,比如长方体可以用过六个面表达。
开源Opencascade的拓扑结构表达如下:
ACIS的拓扑几何定义类似:
更多边界表示法(Boundary Representation)B-Rep的详细信息可以百度谷歌。
由此可见,几何内核的作用在于表达,处理几何对象,对外提供接口。以两个长方体的布尔运算为例,如果只知道顶点坐标信息,布尔运算无法进行,顶点也无法表达出计算结果。只有知道了边/面,位置等足够信息后才能进行,几何内核的实体表达可以提供这些信息。
此外,好的几何内核提供了约束建模,参数建模,驱动建模,事务等各种底层机制,方便了上层CAD应用的开发。
2. 几何内核和仿真的关系
在数值计算仿真中,求解器的输入是离散的网格数据,网格数据来自于几何。好的几何内核可以提供足够的信息给网格划分引擎。
对于二维和三维的网格,网格引擎需通常要将几何离散的三角面片作为输入,或者要拿到面的拓扑几何数据,也就是面,边,顶点或者环和shell信息。在网格生成过程中有几个地方需要注意:
-
几何数据需要保证正确,如果几何有错误,比如有非常细长的面片(最长比最小大于1000),实体几何之间有干涉,即相互重叠,存在自由面片,几何拓扑不完整不连续等等。这些会导致网格划分出现错误,或者网格划分出来也不能用于仿真计算。
-
几何属性和网格属性的映射。即把几何实体上的所有属性信息也要赋值到网格的属性上。比如材料信息,边界荷载等相关信息。对于复杂的几何,属性查找会带来性能问题,需要在网格划分过程中做好这件事。
-
几何网格映射参数化。通常情况下我们需要修改几何,由此带来网格的改动。在参数驱动和自动化过程中,几何会多次改动造成整体几何变动以及网格频繁变化,这就要求几何和网格的接口要足够稳定。
-
网格参数设置。合理的参数设置可以在保证仿真精度的前提下大幅提高仿真效率,目前大部分网格划分需要人工干预,或者进行自适应网格加密等,网格划分参数智能化是一个很有挑战的技术,也是人工智能,深度学习在仿真领域应用的一个技术点。
3. 现状
目前主流的商业三维几何内核商业有ACIS,Parasolid,这两个三维内核同宗同源,只是两个发展分支,ACIS的Spatial公司被达索收购,而Parasolid经历多次收购现收归西门子。现在的两个商业内核除了加强底层内核功能,ACIS更偏向于CAD/CAE/EDA/CAM等客户应用领域,而Parasolid更偏向于加强西门子自身业务的支撑,在CAD功能上,Parasolid要优于ACIS。
目前市面上的大多数三维CAD软件,和拥有三维几何造型仿真软件几何内核都采用ACIS或者Parasolid。
目前开源的几何内核有法国公司推出的Opencascade,对于小型项目的开发是个不错的选择。
国内的中望,广联达公司拥有自主开发的三维几何内核,主要用作支撑其自身业务。
不少开源类库都有其自己的几何定义,但是仅仅用作自己业务,没有通用性,算不上几何内核,比如Gmsh,CGAL等等。
俄罗斯作为一个科技大国,自然也有其开发的几何内核,但是技术生态圈封闭,在和主流CAD软件数据文件交互中问题不少,开发的话只能用其部分功能。
4. 作为仿真类公司,有无必要开发几何内核
从笔者自身开发经验看,如果长期在自己的仿真领域深钻,几何内核开发是绕不开的。
笔者用过ACIS/Parasolid/OCC,并有过开发几何内核的经验。但从表面上看,几何内核开发没有太多技术瓶颈,已有的功能需求都有解决方案,但实际问题是几何内核涉及的内容过多,而且作为底层技术支持,对稳定性,可靠性要求非常高,短期内无法开发出像样的产品,所以开发几何内核需要经过实际迭代,长期技术积累,研发前期投入巨大。
前面讲过BRep结构就类似瑞士军刀,似乎什么都能做,但对于很多业务来说,数据冗余度很高。根据自身业务定义几何拓扑结构更高效,比如Solibri公司的产品,通过自定义三维几何结构,将解析显示三维IFC文件做到了全球最快,如果使用ACIS的话,时间是其几十倍。
而类似OCC的开源产品,无论从功能,稳定性,性能上,都难以用于大规模的实际商用,而且一旦出了问题,几乎没有解决方法。
在当前国内大力自主发展技术,知识产权保护趋严的背景下,几何内核作为工业软件的一项基本底层技术,应该被拿到产业链的战略地位上来,否则永远只能在国外产品基础上开发,利润大头送给他人。