一种生成静态网格模型的方法技术

技术编号:36096828 阅读:13 留言:0更新日期:2022-12-24 11:15
本发明专利技术提出了一种生成静态网格模型的方法,所述方法包括:步骤1、获取输入模型数据;步骤2、当所述输入模型数据有效时,初始化构建结构体FMeshDescription;步骤3、根据所述输入模型数据设置所述构建结构体;步骤4、创建空的静态网格对象;所述静态网格对象为虚幻引擎中的UStaticMesh类对象,用于保存静态网格模型数据与渲染数据;步骤5、生成空的碰撞数据;步骤6、设置构建参数;步骤7、调用构建网格描述函数,传入构建结构体FMeshDescription数据与构建参数结构体,从而构建出静态网格对象模型数据;借由上述方法可实现直接使用顶点相关信息在运行时生成静态网格模型。在运行时生成静态网格模型。在运行时生成静态网格模型。

【技术实现步骤摘要】
一种生成静态网格模型的方法


[0001]本专利技术涉及计算机图形渲染领域,具体涉及一种生成静态网格模型的方法。

技术介绍

[0002]当前生成静态网格模型的方式有很多,例如:从外部导入模型、由其他组件转换生成等。但上述方式在生成静态网格模型之后,并不支持修改静态网格模型信息。
[0003]虚幻引擎UE4.25版本支持了在运行时更新静态网格模型,这为需要服务器传送模型顶点信息、到本地实时创建模型的实现成为可能。但虚幻引擎没有提供直接使用顶点相关信息运行时生成静态网格模型的方法。

技术实现思路

[0004]针对上述存在的拘束局限性,本专利技术提出了种生成静态网格模型的方法,。
[0005]为实现上述目的,本专利技术采用了以下技术方案:一种生成静态网格模型的方法,所述方法包括以下步骤:步骤1、获取输入模型数据;所述输入模型数据由顶点数组、UV数组、点序数组组成;步骤2、当所述输入模型数据有效时,初始化构建结构体FMeshDescription;步骤3、根据所述输入模型数据设置所述构建结构体;步骤4、创建空的静态网格对象;所述静态网格对象为虚幻引擎中的UStaticMesh类对象,用于保存静态网格模型数据与渲染数据;步骤5、生成空的碰撞数据;步骤6、设置构建参数;所述构建参数为虚幻引擎中的FBuildMeshDescriptionsParams结构体;步骤7、调用构建网格描述函数,传入构建结构体FMeshDescription数据与构建参数结构体,从而构建出静态网格对象模型数据。
[0006]本专利技术与现有技术相对比,本专利技术具有以下优点:(1)可实现直接使用顶点相关信息在运行时生成静态网格模型;(2)不经过编辑器函数处理,因此生成时间相对较短,数据复杂度较低,方法效率高。
[0007]上述说明仅是本专利技术技术方案的概述,为了能够更清楚了解本专利技术的技术手段,而可依照说明书的内容予以实施,并且为了让本专利技术的上述和其他目的、特征和优点能够更明显易懂,以下特举较佳实施例,并配合附图,详细说明如下。
附图说明
[0008]图1为本专利技术实施例提供的一种生成静态网格模型的方法的步骤图。
[0009]图2为本专利技术实施例提供的一种设置构建结构体的方法的步骤图。
具体实施方式
[0010]以下由特定的具体实施例说明本专利技术的实施方式,熟悉此技术的人士可由本说明书所揭露的内容轻易地了解本专利技术的其他优点及功效,显然,所描述的实施例是本专利技术一部分实施例,而不是全部的实施例。基于本专利技术中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本专利技术保护的范围。为了进一步了解本专利技术,下面结合最佳实施例对本专利技术作进一步的详细说明。
[0011]本专利技术的专利技术点是提供一种生成静态网格模型的方法;参考图1,所述方法包括以下步骤:步骤1、获取输入模型数据,并判断所述输入模型数据是否有效;所述输入模型数据为从外部建模软件(如MAY/MAX)导出的模型数据,所述输入模型数据由顶点数组、UV数组、点序数组组成;步骤2、当判断所述输入模型数据无效,则返回空指针对象并结束步骤;当判断所述输入模型数据有效时,初始化构建结构体FMeshDescription;所述构建结构体是构建静态网格时需要的数据结构,用于保存FBX文件解析数据;步骤3、根据所述输入模型数据设置所述构建结构体;步骤4、创建空的静态网格对象;所述静态网格对象为虚幻引擎中的UStaticMesh类对象,用于保存静态网格模型数据与渲染数据;步骤5、生成空的碰撞数据;步骤6、设置构建参数;所述构建参数为虚幻引擎中的FBuildMeshDescriptionsParams结构体,用于定义传递给构建网格描述函数(BuildFromMeshDescriptions)的参数;步骤7、调用构建网格描述函数,传入构建结构体FMeshDescription数据与构建参数结构体,从而构建出静态网格对象模型数据;步骤8、输出步骤7所构建的静态网格对象模型数据。
[0012]步骤1中,判断所述输入模型数据是否有效的方法为:所述输入模型数据中的顶点数组、UV数组、点序数组均不为空,且所述顶点数组元素数量与所述UV数组元素数量相等。
[0013]参考图2,步骤3中,根据所述输入模型数据设置所述构建结构体的具体方法包括:步骤31、读取所述输入模型数据得到输入模型参数值,创建空的构建结构体FMeshDescriptin对象MeshDescription;所述输入模型参数值包括:顶点位置数组InVertexs、点序号数组InIndices、顶点UV数组InUVs;步骤32、通过FStaticMeshAttributes工具类提取MeshDescription中的属性;步骤33、创建多边形组并指定默认材质;步骤34、初始化MeshDescription的顶点、顶点实例、多边形、边与UV通道数;步骤35、将所述输入模型数据中的顶点位置数组数据复制到MeshDescription中;
步骤36、根据所述输入模型数据中点序号数组为其中每个顶点序创建顶点实例;所述顶点实例中保存了对应顶点的UV、法线、切线、副法线,顶点颜色信息,每个顶点实例都对应于MeshDescription的VertexPositions数组中的一个顶点ID。
[0014]步骤37、为多边形组创建多边形;步骤38、重新生成所有顶点与多边形的法线、切线、副法线;此时的MeshDescription即为设置完成的构建结构体FMeshDescription。
[0015]步骤4中,所述静态网格对象包含两个成员变量,分别为:静态网格体原模型数据StaticMeshSourceModel及静态网格体渲染数据FStaticMeshRenderData。
[0016]其中所述静态网格体原模型数据StaticMeshSourceModel用于保存顶点、UV、法线、点序等信息,该变量的数据来源于步骤3得到的构建结构体FMeshDescripion;所述静态网格体渲染数据StaticMeshRenderData由LOD资源数组及顶点工厂数组组成,用于存储渲染信息,所述渲染信息为UStaticMesh的每一层LOD的渲染信息;其中LOD资源数组包含了所有LOD层的FStaticMeshLODResources(即LOD资源数据),LOD资源数据包含了顶点缓存及若干索引数组。
[0017]传统方案中,所述静态网格体渲染数据StaticMeshRenderData通过以下步骤得到:当步骤3获得设置完成的构建结构体FMeshDescription后,调用编辑器函数UStaticMesh::Build,由FMeshDescription生成所述静态网格体渲染数据StaticMeshRenderData。
[0018]但编辑器函数UStaticMesh::Build是基于编辑器状态下的,运行时是不会执行的,而且生成过程消耗的计算机性能比较大,生成时间根据资产数据复杂度而变得很长。<本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种生成静态网格模型的方法,其特征在于,所述方法包括以下步骤:步骤1、获取输入模型数据;所述输入模型数据由顶点数组、UV数组、点序数组组成;步骤2、当所述输入模型数据有效时,初始化构建结构体FMeshDescription;步骤3、根据所述输入模型数据设置所述构建结构体;步骤4、创建空的静态网格对象;所述静态网格对象为虚幻引擎中的UStaticMesh类对象,用于保存静态网格模型数据与渲染数据;步骤5、生成空的碰撞数据;步骤6、设置构建参数;所述构建参数为虚幻引擎中的FBuildMeshDescriptionsParams结构体;步骤7、调用构建网格描述函数,传入构建结构体FMeshDescription数据与构建参数结构体,从而构建出静态网格对象模型数据。2.根据权利要求1所述的方法,其特征在于,步骤3中,根据所述输入模型数据设置所述构建结构体的具体方法包括:步骤31、读取所述输入模型数据得到输入模型参数值,创建空的构建结构体FMeshDescriptin对象MeshDescription;所述输入模型参数值包括:顶点位置数组InVertexs、点序号数组InIndices、顶点UV数组InUVs;步骤32、通过FStaticMeshAttributes工具类提取MeshDescription中的属性;步骤33、创建多边形组并指定默认材质;步骤34、初始化MeshDescription的顶点、顶点实例、多边形、边与UV通道数;步骤35、将所述输入模型数据中的顶点位置数组数据复制到MeshDescription中;步骤36、根据所述输入模型数据中点序号数组为其中每个顶点序创建顶点实例;步骤37、为多边形组创建多边形;步骤38、重新生成所有顶点与多边形的法线、切线、副法线;此时的MeshDescription即为设置完成的构建结构体FMeshDescription。3.根据权利要求1所述的方法,其特征在于,步骤5的生成空的碰撞数据通过以下方式实现:调用步骤4中所创建的静态网格对象的CreateBodySetup函数,生成UBodySetup结构体;所述UBodySetup用于保存静态物理数据;步骤5生成空的碰撞数据后,还包括:调用步骤4中所创建的静态网格对象的CreatePhysicsMeshes方法,生成PhysicsMeshe。4.根据权利要求1所述的方法,其特征在于,步骤7具体包括以下步骤:步骤71、创建临时FMeshDescription数组,并调用Emplace函数将步骤3得到的构建结构体添加至所述临时FMeshDescription数组中;步骤72、将所述临时FMeshDescription数组与步骤6得到的所述构建参数传入BuildFromMeshDescriptions方法中,得到构建完成的静态网格对象模型数据。
5.根据权利要求2所述的方法,其特征在于,步骤33中,创建多边形组并指定默认材质具体方式为:调用MeshDescription的CreatePolygonGroup方法创建空的多边形组,并将该方法返回的组ID保存到NewPolygonGroup变量中;通过UMaterial::GetDefaultMaterial方法获得虚幻默认材质,并将所述虚幻默认材质的名称保存到PolygonGroupNames[NewPolygonGroup]中;其中PolygonGroupNames[NewPolygonGroup]表示PolygonGroupNames数组中下标为NewPolygonGroup的元素;PolygonGroupNames通过步骤32获得。6.根据权利要求2所述的方法,其特征在于,步骤34的具体实现方式为...

【专利技术属性】
技术研发人员:孙华庆贾宏伟郭建君
申请(专利权)人:北京蔚领时代科技有限公司
类型:发明
国别省市:

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

1