一种在unity程序制作中输出模型数据的方法与流程

文档序号:33811290发布日期:2023-04-19 13:49阅读:156来源:国知局
一种在unity程序制作中输出模型数据的方法与流程

本发明涉及一种在unity程序制作中输出模型数据的方法,可应用于市政基础设施设计、bim(building information modeling)技术、三维可视化、工程管理等领域,涵盖电子计算机、土木、建筑学等专业学科。


背景技术:

1、从目前已公开的多项技术进行分析,均使用了revit模型输出成json文件,json文件将revit中建立的模型通过序列化的对象或数组进行描述,描述模型的几何信息、建筑相关的非几何信息及附着的自定义信息,再通过三维图形引擎的程序或脚本读入json数据,在图形引擎中对其进行展示和管理,实现其功能。

2、但从目前已公开的技术中,均不包含具体的操作方法,只是对上述的流程做简要的描述,在遇到一些实际问题时,从已公开的技术方案中无法获得较为全面的解决内容,这些具体的问题不仅有碍于revit的数据输出,并且也会影响后续的展示和管理。而上述问题在本发明的实施方案中得以妥善解决。


技术实现思路

1、本发明提出基础几何单元的概念,在数据上是以图元id+材质id作为基础几何单元的id,从而避免了单一图元中包含多种材质,致使输出的基础几何id区分不出不同材质的几何位置的致命问题。

2、在此基础上,本发明提供一种在unity程序制作中输出模型数据的方法,使用autodesk提供的revit二次开发接口-iexportcontext,通过编写上下文的参数和在上下文的过程中加入对数据的提取和处理等方法,进行全部目标数据的输出,包括以下步骤:

3、步骤start(),需要初始化数据字典、上下文实例,并存储项目信息、项目所有标高信息集合、项目基点信息等;

4、步骤onviewbegin(),用来设置和存储lod(模型精细度)信息;

5、步骤onelementbegin(),获得输出几何单元(构件element)的id值,即elementid,该值用以获得模型中构件的id值;

6、步骤onmaterial(),根据当前elementid所对应的模型构件获取这个构件中的所有materialnode,再根据每个node节点得到对应的material材质的uniqueid和针对材质的一系列信息;

7、步骤onfacebegin(),以facenode对象作为参数,获得face节点;

8、步骤onpolymesh(),以polymeshtopology为对象参数,获得最小物体单元的所有顶点数据、面数据、法线数据和uv数据;

9、步骤onelementend(),以elementid为参数,将完成所有输出数据的准备工作,其中包括顶点和顶点序列的数据处理、顶点法线和法线序列的数据处理、顶点uv的计算处理、自定义数据的获取;

10、步骤onviewend(),结束对view对象的调用;

11、步骤finish(),将所有已经准备好的数据进行json文件的输出。

12、其中,在步骤onviewbegin()中,用户在启动输出程序的界面上设置从0-15级的某一个级别的lod进行这个精细度下输出。

13、其中,在步骤onelementbegin()中,通过该值进行模型的检索和调用,并获取构件的uniqueid,以防止elementid重名。

14、其中,在步骤onmaterial()中,一系列信息包括:漫反射颜色ambient(即为该材质的代表颜色)、透明度、纹理坐标、纹理文件和纹理文件的路径等。

15、其中,在步骤onpolymesh()中,最小物体单元为element uniqueid+“_”+materialuniqueid物体。

16、其中,在步骤onpolymesh()中,建立几何输出数据的方式为:首先将顶点集合进行去重操作,得到去重后的pts顶点集合和相应的字典;调用polymeshtopology.getfacets(),遍历所有得到的facet(基础几何单元中的面片),将facet的顶点与pts顶点字典建立查询关系,将查询到的字典位置数按遍历facet的顺序和facet自身排列的顶点顺序进行排列和存储,从而得到mesh所有点对应facet面的顶点序列;在遍历所有facet时,根据distributionofnormals参数的值判断facet记录法线向量的方法,当取值为oneperface或oneachfacet时,将三个顶点的法线向量值取为物体或当前面的第一个顶点的取值,当取值为ateachpoint时,则按facet的顶点顺序获得顶点法线向量的值,根据不同方式的顶点法线取值获得一个顶点法线向量的集合和字典;在遍历所有facet时,通过polymeshtopology.getuvs()获取每个顶点对应的uv值,该值的物理意义是对应这个facet面使用的纹理文件的纹理坐标值,并非传统意义上是uvw坐标系统的相对坐标值,将此值的集合建立uv集合和字典。

17、其中,在步骤onelementend()中,在生成mesh对应的完整的uv集合前,将onpolymesh()过程方法中得到的每个对应基础几何单元的uv集合中的uv坐标值与这个基础几何单元该facet面对应的纹理文件总像素坐标值进行同一坐标轴的相除求余计算,并替换原有的uv集合,再去重并计算序列数据,最终得到uv数组和uv序列数组,以此完成所有几何信息的准备工作;

18、其中,在步骤onelementend()中,每个基础几何单元的自定义数据都是相同的,都对应的是elementid,同一个elementid下的所有基础几何单元的材质信息和几何信息都不一定相同。

19、其中,在步骤finish()中,使用newtonsoft.json库文件进行json数据的输出。

20、本发明方法在数据输出时是根据iexportcontext接口的输出流程进行分步骤输出,由于流程中对对象的调用,产生了用物体的guid+材质的guid作为最小物体单元的id名称的方法进行物体区分(存储入表)的,并且在存储入表的时候,为了在输出时尽可能多的输出数据,采用了单一物体对象数据单独存储的方法,确保了在一定lod设置下全部输出数据的可能性。

21、将数据进行全部存储,物体的guid和材质id进行组合实现最小单元物体的id名称,这种方法的优势在于更加全面和准确的保存了物体的所有特征,这种方法的技术优势还在于,在执行过程中,由于iexportcontext是先调用物体的guid进行遍历,在物体guid调用的同时在执行该物体上所有材质id的遍历调用,这就会出现一个物体多种材质的情况出现,从物理世界的反应看,也会出现上述情况,比如一些被焊接在一起的不同材质的金属物体,焊接接口两边分属不同材质,但物体却采用了一个物体id,如果采用物体的guid,这就是一个物体,但其实是两种焊接材质,需要分别保存,这也是revit的物体表达方式和iexportcontext的数据输出流程造成的特有现象,本方法是专门研究了这些特点,按技术特点和物理规律使用了本发明方法。另外,前面提及的存储也是本发明方法的特点,iexportcontext在调用时,由于visual studio(简称vs)在调用json输出接口时输出的数据量受vs、接口、系统本身的限制,因此在输出数量非常大的情况下会造成溢出现象,这是系统特性造成的,也可以看成是系统误差,

22、本发明方法是通过在文件夹和文件保存上进行规范化来规避单一物体数据量超大造成溢出的现象,换言之就是一个物体存成一个文件,把文件放在规则的文件夹里。

23、本发明具有以下积极有益效果:

24、第一,拓展了revit数据的数据媒质。revit模型在revit内部进行展示和管理是极为方便的,但是revit仅为本机程序,无法实现网络设计成果的共享,在bim设计逐渐替代传统设计的年代,本机操作的局限性显而易见。如果将revit模型通过输出的方法,获得封装和展示,既解决了信息传递的问题(封装文件有利于信息的流转),也解决了网络环境读取信息的问题,增加了传播煤质和管理的方法。

25、第二,增加了建筑信息的可用程度。从建设的全生命周期管理到数字孪生,从vr、ar、mr到元宇宙,建筑信息被利用的关键在于数据是什么,怎么存储,如何调用,本技术方案包含了一整套建筑信息的输出、存储、调用的方法。从revit到json,再到unity的图形,完美诠释了建筑信息被利用的方法。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1