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

技术编号:37260578 阅读:19 留言:0更新日期:2023-04-20 23:35
本发明专利技术涉及一种在unity程序制作中输出模型数据的方法,使用Autodesk提供的revit二次开发接口

【技术实现步骤摘要】
一种在unity程序制作中输出模型数据的方法


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

技术介绍

[0002]从目前已公开的多项技术进行分析,均使用了revit模型输出成json文件,json文件将revit中建立的模型通过序列化的对象或数组进行描述,描述模型的几何信息、建筑相关的非几何信息及附着的自定义信息,再通过三维图形引擎的程序或脚本读入JSON数据,在图形引擎中对其进行展示和管理,实现其功能。
[0003]但从目前已公开的技术中,均不包含具体的操作方法,只是对上述的流程做简要的描述,在遇到一些实际问题时,从已公开的技术方案中无法获得较为全面的解决内容,这些具体的问题不仅有碍于revit的数据输出,并且也会影响后续的展示和管理。而上述问题在本专利技术的实施方案中得以妥善解决。

技术实现思路

[0004]本专利技术提出基础几何单元的概念,在数据上是以图元ID+材质ID作为基础几何单元的ID,从而避免了单一图元中包含多种材质,致使输出的基础几何ID区分不出不同材质的几何位置的致命问题。
[0005]在此基础上,本专利技术提供一种在unity程序制作中输出模型数据的方法,使用Autodesk提供的revit二次开发接口

IExportContext,通过编写上下文的参数和在上下文的过程中加入对数据的提取和处理等方法,进行全部目标数据的输出,包括以下步骤:
[0006]步骤Start(),需要初始化数据字典、上下文实例,并存储项目信息、项目所有标高信息集合、项目基点信息等;
[0007]步骤OnViewBegin(),用来设置和存储LOD(模型精细度)信息;
[0008]步骤OnElementBegin(),获得输出几何单元(构件Element)的ID值,即ElementId,该值用以获得模型中构件的ID值;
[0009]步骤OnMaterial(),根据当前ElementId所对应的模型构件获取这个构件中的所有MaterialNode,再根据每个node节点得到对应的Material材质的UniqueId和针对材质的一系列信息;
[0010]步骤OnFaceBegin(),以facenode对象作为参数,获得face节点;
[0011]步骤OnPolymesh(),以PolymeshTopology为对象参数,获得最小物体单元的所有顶点数据、面数据、法线数据和UV数据;
[0012]步骤OnElementEnd(),以ElementId为参数,将完成所有输出数据的准备工作,其中包括顶点和顶点序列的数据处理、顶点法线和法线序列的数据处理、顶点UV的计算处理、自定义数据的获取;
[0013]步骤OnViewEnd(),结束对View对象的调用;
[0014]步骤Finish(),将所有已经准备好的数据进行JSON文件的输出。
[0015]其中,在步骤OnViewBegin()中,用户在启动输出程序的界面上设置从0

15级的某一个级别的LOD进行这个精细度下输出。
[0016]其中,在步骤OnElementBegin()中,通过该值进行模型的检索和调用,并获取构件的UniqueId,以防止ElementId重名。
[0017]其中,在步骤OnMaterial()中,一系列信息包括:漫反射颜色ambient(即为该材质的代表颜色)、透明度、纹理坐标、纹理文件和纹理文件的路径等。
[0018]其中,在步骤OnPolymesh()中,最小物体单元为Element UniqueId+“_”+Material UniqueId物体。
[0019]其中,在步骤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集合和字典。
[0020]其中,在步骤OnElementEnd()中,在生成mesh对应的完整的uv集合前,将OnPolymesh()过程方法中得到的每个对应基础几何单元的uv集合中的uv坐标值与这个基础几何单元该facet面对应的纹理文件总像素坐标值进行同一坐标轴的相除求余计算,并替换原有的uv集合,再去重并计算序列数据,最终得到UV数组和UV序列数组,以此完成所有几何信息的准备工作;
[0021]其中,在步骤OnElementEnd()中,每个基础几何单元的自定义数据都是相同的,都对应的是ElementId,同一个ElementId下的所有基础几何单元的材质信息和几何信息都不一定相同。
[0022]其中,在步骤Finish()中,使用Newtonsoft.Json库文件进行JSON数据的输出。
[0023]本专利技术方法在数据输出时是根据IExportContext接口的输出流程进行分步骤输出,由于流程中对对象的调用,产生了用物体的guid+材质的guid作为最小物体单元的id名称的方法进行物体区分(存储入表)的,并且在存储入表的时候,为了在输出时尽可能多的输出数据,采用了单一物体对象数据单独存储的方法,确保了在一定lod设置下全部输出数据的可能性。
[0024]将数据进行全部存储,物体的guid和材质id进行组合实现最小单元物体的id名称,这种方法的优势在于更加全面和准确的保存了物体的所有特征,这种方法的技术优势还在于,在执行过程中,由于IExportContext是先调用物体的GUID进行遍历,在物体guid调
用的同时在执行该物体上所有材质id的遍历调用,这就会出现一个物体多种材质的情况出现,从物理世界的反应看,也会出现上述情况,比如一些被焊接在一起的不同材质的金属物体,焊接接口两边分属不同材质,但本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种在unity程序制作中输出模型数据的方法,使用Autodesk提供的revit二次开发接口

IExportContext,通过编写上下文的参数和在上下文的过程中加入对数据的提取和处理等方法,进行全部目标数据的输出,包括以下步骤:步骤Start(),需要初始化数据字典、上下文实例,并存储项目信息、项目所有标高信息集合、项目基点信息等;步骤OnViewBegin(),用来设置和存储LOD(模型精细度)信息;步骤OnElementBegin(),获得输出几何单元(构件Element)的ID值,即ElementId,该值用以获得模型中构件的ID值;步骤OnMaterial(),根据当前ElementId所对应的模型构件获取这个构件中的所有MaterialNode,再根据每个node节点得到对应的Material材质的UniqueId和针对材质的一系列信息;步骤OnFaceBegin(),以facenode对象作为参数,获得face节点;步骤OnPolymesh(),以PolymeshTopology为对象参数,获得最小物体单元的所有顶点数据、面数据、法线数据和UV数据;步骤OnElementEnd(),以ElementId为参数,将完成所有输出数据的准备工作,其中包括顶点和顶点序列的数据处理、顶点法线和法线序列的数据处理、顶点UV的计算处理、自定义数据的获取;步骤OnViewEnd(),结束对View对象的调用;步骤Finish(),将所有已经准备好的数据进行JSON文件的输出。2.如权利要求1所述的方法,其中,在步骤OnViewBegin()中,用户在启动输出程序的界面上设置从0

15级的某一个级别的LOD进行这个精细度下输出。3.如权利要求1所述的方法,其中,在步骤OnElementBegin()中,通过该值进行模型的检索和调用,并获取构件的UniqueId,以防止ElementId重名。4.如权利要求1所述的方法,其中,在步骤OnMaterial()中,一系列信息包括:漫反射颜色ambient(即为该材质的代表颜色)、透明度、纹理坐标、纹理文件和纹理文件的路径等。5.如权利要求1所述的方法,其中,在步骤OnPolymesh()中,最...

【专利技术属性】
技术研发人员:吴楠何颖辉吕亮
申请(专利权)人:北京市市政工程设计研究总院有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1