CAD几何引擎和图形引擎的关系

近年来,国家开始大力发展工业基础软件,工业软件大有兴起之势。总体来说,国家的扶持对行业的发展有很大促进作用,同时也会吸引更多的人才进入该领域,这是一件值得令人欣慰的事情。但是,相比于互联网软件,工业软件是有门槛的,想要发展工业软件需要有行业知识,以及行业经验规范的积累。但同时也绕不开的一个关键问题,那就是需要有成熟的几何引擎。

1.几何引擎

为什么离不开几何引擎呢,因为大部分的工业软件都需要造型或者对模型进行编辑修改的功能,比如常见的三维CAD软件NX、Catia等,BIM软件Revit,仿真分析软件Ansys等。几何引擎的内核我们之前也说过,目前主流使用的主要还是Acis和Parasolid,比较流行的开源引擎是OCC。目前国内的相关公司也在自研自己的引擎,但都局限于自己内部使用,国内还没有看到一款可以通用并且工具化的几何引擎出现。

CAD几何引擎和图形引擎的关系_第1张图片

图1.几何引擎应用于CAD行业的各个领域

几何引擎主要是用来进行产品造型设计,是在计算机上用基本几何图元以及参数化的曲线曲面,进行布尔运算从而完成造型的过程。整个几何引擎的运算是非常复杂的,包括大量的自由曲面求交求并等计算。一款成熟的几何引擎不仅需要准确的计算,而且还要满足计算精度的要求,同时还需要有成熟的容错机制以及模型构造历史信息的管理。这就大大的提高了入门的门槛,这也就是为什么市面上很少有几何引擎的原因。关于几何引擎,作者本人目前也还处于研究中!

2.图形引擎

好了,回到本文的主题,那么几何引擎和图形引擎是什么关系呢。刚接触CAD的朋友,可能觉得两者是一起,其实不然。两者是分开的两个概念,只不过在CAD软件中几何引擎和图形引擎都是成对出现的,几何引擎用来驱动造型数据的产生,图形引擎则用来对模型展示渲染,满足用户交互的需求。

前面我们也介绍了,我们常说的图形渲染主要是指绘制模型的点,线,面。很显然这些信息来源于几何引擎,目前主流的几何引擎都是采用是BRep边界表达的方式,一个BODY表示一个对象,BODY中又有很多FACE组成。几何实体的FACE转化成图形引擎可以显示的离散三角面片需要有个三角化的过程。目前常用的三角化算法是采用Delaunay网格划分算法。如下图所示:一个简单的立方体三角化的过程,立方体的六个面分别转换成二个三角形,对于曲面,三角化后则是由一堆三角形组成。

CAD几何引擎和图形引擎的关系_第2张图片

图2 几何面三角化的过程

2.1 图形引擎中的合并

BREP面转化后并显示,有个需要注意的点就是我们需要针对每个模型来合并所有的面,合并后把所有的面作为一个图形对象来显示。这样做的目的是可以减少大量的Drawcall从而提高显示性能。同样的,模型中的所有边和所有的顶点也需要进行合并。大家可以想想,比如绘制一个立方体,一个立方体由6个面,8个顶点和12条边组成。如果不进行合并,那就需要26个Drawcall进行绘制,这对Drawcall的消耗是超大的。

但是如果进行了合并,则面只需要绘制一次,边绘制一次,点再绘制一次,只需要3个Drawcall就可以搞定。当一个模型很复杂时,这种合并可以大大的提高显示效率。目前部分图形引擎做到了面的合并,但并没有做点和线的合并,其实在CAD系统中,点和线的数据量也很大,这部分也需要被考虑进去。关于合并高效显示,作者在自己的base3引擎中实现了,下文会介绍。    

合并真的很高效,但是合并后会面临一个问题,就是所有的面和所有的边还有点都合并到一起,用户该如何进行选择交互呢。比如我们该如何选中一个边或者一个面呢。这就需要引擎内部进行处理了,处理的方法其实也很简单,需要进行一次映射匹配。原理如下:

  1. 在进行三角化时需要记住当前每个FACE中包含的最小三角形和最大三角形的索引。

  2. 在进行高亮选择时,我们每次选中的最小单元是三角形。如果选中的三角形处于某个FACE的Min-Index和Max-Index之间,则表明当前选择的就是改FACE。

  3. 因为该FACE被合并了,所以我们需要根据原始FACE的信息,重新构造高亮的几何对象。

  4. 对于合并后的线和合并后的点,也是同样处理。

2.2 Base3引擎中图形合并后的高亮

       作者在自研的Base3引擎中实现了该方式,可以很好的工作,并且图形的绘制性能也有很大的提升。我录制了一个视频如下:

,时长01:07

视频1:Base3中的高亮选择

      上述视频中有对模型对象的高亮,也有对象中的面和线的高亮,可以看出来合并并没有影响对原始实体中对象的高亮。我们依旧可以高效的选中几何实体中的自由曲面、圆弧面、柱面以及直线,圆弧,参数曲线等。视频中也可以看到fps的变化,目前压力测试还没有去做,但是可以肯定的是Drawcall的减少肯定会带来性能的大幅度提升。

        2.3 实体模型的编辑

        图形引擎终究是为几何引擎进行服务。比如我们在进行草图设计时,如果要拉伸一个面。主要操作步骤:先选中面,设置拉伸距离,执行拉伸算法,再次三角化的过程。几何引擎每一次对模型的修改都会再次三角化并驱动图形引擎进行渲染,同时在图形引擎中的交互也需要和几何引擎中的实体进行一一映射。

3. 总结

       几何引擎和图形引擎是组成三维CAD软件不可或缺的两部分,两者相互配合的完成工作。一款成熟稳定的三维软件既要求几何引擎准确高效的计算,还需要图形引擎进行高性能的展示和交互。开发一款能够被大众认可并广泛使用的CAD软件是一件比较难且有意义的事情,期待国内能够出现更多这样的产品。

今天的内容就介绍到这里了,感谢大家的关注,如果大家有什么疑问或建议,可以在公众号后台留言,谢谢大家!

获取最新文章更新,请关注公众号

         CAD几何引擎和图形引擎的关系_第3张图片

 

你可能感兴趣的:(几何学,图形学,cad)