首页/文章/ 详情

工业软件研发中处理超大模型(2)

2年前浏览1121

做如下测试:

在软件中建立圆柱,长方体,球体,圆台,多面体各一个,然后阵列100*100,也就是总共5万个模型,测试编辑性能。事实上,绝大部分商业软件都无法在台式机上流畅的编辑该模型。从实际应用角度看,这还只是一个中小规模的模型。

我们知道三维模型显示起来直观,能表达很多信息,但是数据量也会很大。在很多设计行业,比如服装,零件,建筑草图等最初的设计都在二维进行,一方面是便于出图加工,另一方面也是因为可以轻松处理大模型数据。在桥梁,船舶等设计中,通过多次取三维的二维切面,也可以得到满足设计需求的三维模型信息,在结构分析中以一维和二维单元为主,显示又以面片为主,整体框架实际需求中对三维造型要求并不高。

对于三维模型的显示数据,都是三角形面片为主,再包括点或者面的法向以及UV材质贴图等信息。这些数据采用索引引用,文件可以压缩得很小。

BIM和EDA行业的模型有一个共同特点:模型中存在大量相同的小几何模型。比如一栋楼的窗户或者大门形状完全相同,只是位置不同。EDA设计中的存在大量形状完全一致的电容电阻焊盘过孔等器件,也只是位置不同。

在处理这类模型时,引用模型可以起到很好的提升性能的作用。即创建一个原始模型,其它的模型通过对引用原始模型 转换矩阵生成。不仅可以大幅提升性能,还可以减少存储数据,如果网格也能引用,生成网格阶段也能节省不少时间。当然对于特殊建筑(“鸟巢”),精密仪器,发动机之类,这种方法并没有什么效果。

高频操作是超大模型的一大性能瓶颈。高频体现在模型操作的方方面面。以最简单的显示鼠标为例,当我们在视图上移动鼠标时,需要动态显示鼠标当前放在哪个对象上,然后高亮显示。有两种计算方法,一种是计算好模型渲染数据的像素点所在位置,再用鼠标当前屏幕坐标做比较;另一种是将鼠标坐标转成世界坐标,求鼠标位置和模型的交点。无论哪种计算方法都是有计算开销的,针对超大模型,这种开销非常敏感,处理不当都是秒级的相应时间,再加上要一直响应鼠标移动事件,用户体验大概率就是操作起来相当卡顿。解决的原则也很简单,一是通过限定局部视图,树结构,渲染深度过滤等加快单个事件的处理性能;另一个减少鼠标响应频率,比如设定鼠标移动消息为3秒接受一次或者当鼠标悬停之后再处理鼠标高亮消息事件。选择也有类似的机制,比如当我们选择一个对象时,需要将哪个对象选中的消息发送出去,对于多选如果简单的调用单选的方法,选择100个对象则要发送100次,小模型的开销很难察觉,但大模型的开销则相当明显,最好的处理方法是选择完成后统一发送一次消息。

对象过滤是一种有效的提升性能的方法,其思想是只处理当前用户关心的对象,而让其它对象失效。比如一栋建筑我们关心一扇门时,我们可以将其它对象全部隐藏,或者从视图里过滤掉,这样要处理的数据量就会减少。

这种过滤分几个层次,一个是通过用户操作过滤;二个是在算法层面主动过滤,比如当缩放视图时,根据业务需求只截取当前视图里的对象,如果对象之间有遮挡,只处理最前面的对象。三是根据业务过滤,比如常用的LOD方法(Level Of Details)可以根据模型的大小,像素,来选择是否显示或处理。模型的对象上可以赋上各种属性,通过属性来加速过滤操作,类似AutoCAD里的图层信息。

缓存 更新也是处理大数据的有效方法之一,主要用于需要频繁耗时的动态计算逻辑里,数据计算后之后进行保存,需要的时候直接拿取无需再重新计算;只有当业务出现更新时,才重新计算再保存,从而减少计算次数。

现有软硬件环境下,分治仍然是对整体模型操作加速最有效可行的方法,让用户在整体模型处理上进行分治是一件比较困难的事,只能在程序层面进行。一篇文章入门仿真软件性能优化一文中对分治也有介绍,后续再详细介绍。

开发组件的选择:开发中一般会使用各种第三方组件。

在处理大模型时,组件性能瓶颈也就是程序的性能瓶颈。早期选择三维模型转换组件,最好的和最差的性能瓶颈相差接近一个数量级。而这种组件一旦选定使用后,因为商务和开发周期的原因,一般很难再改。所以早期要做好充分评估。

本文聊了下工业仿真软件中关于大模型的前处理,细心的朋友可能已经注意到了,一般的通用前处理或者CAD软件乃至行业标杆软件在处理超大模型时是没有优势的,在面对实际工业行业应用时也有很多无法满足性能要求。所以很多行业有专门的二维三维设计软件,通过各种针对行业的优化,以及变通方法来满足超大模型的处理需求。

科普其他软件
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2022-06-14
最近编辑:2年前
多物理场仿真技术
www.cae-sim.com
获赞 123粉丝 304文章 220课程 0
点赞
收藏
未登录
还没有评论
课程
培训
服务
行家
VIP会员 学习 福利任务 兑换礼品
下载APP
联系我们
帮助与反馈