Motivation - 采用Unity作为孪生技术栈的经历?
最开始想要利用Ansys的Twin Builder模块来进行数字孪生的开发,但是Ansys 的Twin Builder在部署的时候,需要license,要获得license所要花费的价格是难以接受的。 后来想要利用QT+VTK的方式来进行开发,因为QT是用来开发GUI程序比较常用的框架,加上自己所要研究的对象需要实时反映三维的应力应变的情况,VTK是一个专门做可视化的包,也在网上查到Paraview这个非常强大的科学可视化的软件就是基于VTK所编写的,我还专门去研究了一下paraview的源码编译过程,发现最后虽然实现了paraview的编译,但是想要从paraview当中实时拆解一些我所需要的模块进行使用的时候,几乎不可能,可能是自己的水平还不到家。在使用QT开发的过程中,发现要达到自己所想要的孪生的效果所需要的时间成本是非常大的。后面再B站上以及跟进大工宋学官老师的研究,发现有不少人在使用Unity来进行数字孪生模型的构建,自己就尝试使用Unity来进行了,从11号下载Unity完毕到今天15天的时间里,也稍微做一个总结。
Unity有什么优势?
Unity 作为一个游戏引擎,他最直接的优势就是为我提供了一个平台或框架,让我很多东西是不用从0开始的。比如说他的UGUI系统,游戏物体挂载代码来实现对应的行为,动画效果等等。入门是具有一定的成本,但是相较于可以实现的效果来说,是值得去探索和尝试一下的。
现在实现地怎么样了?
首先放几个动图:
(1) 首先是可视化的界面
主要是甲方还是想要一些比较炫酷的效果,想要我给对方做一个demo,这张图只是一个前端,主要是购买了unity官方商店的一个数据可视化的包,就很容易实现,大概花了一天的时间就行,后面接入真实的数据就可以了。 但官方商店太贵了,┭┮﹏┭┮,几百大洋就没了。
想着可以回点血,我也将资源放在淘宝上了, 有需要的小伙伴可以自取(勿喷,一个学生拿将近一个月工资买了也真的很心疼呜呜,之前的插件其实也是花几百大洋买的,但都是免费分享的):
【淘宝】https://m.tb.cn/h.5nncs1Yn6yWUUal?tk=fqssWTelLsU CZ3457 「Unity3D 可视化素材」
点击链接直接打开 或者 淘宝搜索直接打开
另外给大家避个坑,这家店卖的不是Unity里面要用的包,而是一些psd资源,后面还是需要自己码代码,基本上没什么用。
好了,广告就到这里了。
(2)应力应变实时可视化
由于我的电脑跑整个机架的模型还是有点太慢了,就将其中的一个零件单独拿出来。上面一张图是Abaqus这根零件的变形云图,我将相关的数据抽取出来在unity当中重建了模型,并根据节点的数值大小重新进行了一下渲染,如下面第二张图所示,可以看到在Unity当中重建还是可以接受的。
上面的图则说明顺利地完成了从Abaqus模型转换到Unity的过程。
下面两张动图则是为了验证在Unity当中能够顺利完成实时地渲染。第一个动图则是在mesh节点所有数据上加了一个正弦函数,所以有了一个明暗的变化。
下面的动图则是将四个不同分量进行一个实时地转换,这个倒是比较简单。
经过上面的试验,至少说明在Unity当中已经具备实时显示的基础了;如果不再考虑训练代理模型来进行实时数据更新,最粗暴的方式就是在数据库当中储存一定数量的云图数据案例,按照加载情况进行实时地调用就是(虽然这应该不算是真正的数字孪生)。
以上就是目前的进展了,而后续也打算研究一下代理模型的一些研究。
当前的进展当中遇到了哪些难点?
首先是需要熟悉和了解unity的运行机制,如怎么理解在一个Gameobject上挂代码?如何控制Unity的相机、动画、Shader等等,这些跟着B站的一些教程走还是比较容易地。
其次是Abaqus模型怎么导入到Unity当中.如果只是外观模型的话,可以首先导入solidwork里面,然后再导入到3dmax转化为fbx模型;但是,总有个但是,如果需要渲染应力应变的云图的话,那就需要根据有限元仿真数据和Unity的模型构建机制来重构模型的顶点和三角面,并且编写Unity的Shader代码来根据模型节点上的分析数据(如应变数据)来对模型进行一个实时渲染。
总结一下工作流程
- 首先提取Abaqus当中的节点信息;
- 编写脚本解析提取出来的文本信息;
- 根据解析的数据来构建unity的mesh,里面包含顶点位置、顶点数值和面片信息;
- 编写Shader来根据顶点数值进行模型的渲染,完成在Unity当中模型的重构。
如果有需要相关的源码借鉴和参考的小伙伴可以私信,不过稍微有偿噢~