一种模型网格数据导出Obj文件的方法以及系统技术领域
本发明涉及一种模型网格数据导出Obj文件的方法以及系统。
背景技术
在游戏制作过程中,游戏人物需要和场景的物体进行交互,游戏动作师在动作制
作过程中,需要确切的知道游戏的物体所在的位置和大小等信息,因此,需要将Unity内的
数据导出,并提供给游戏动作师在3Ds MAX或者Maya等软件中使用。
目前互联网上的Unity场景与3Ds MAX或者Maya进行数据互通的方式,大多数只采
用导出Obj文件的方式进行数据交互,但只是提供简单的模型信息,没有贴图,没有人物信
息,也不能在场景运行时候导出,当场景很复杂时,使用也较为麻烦。
发明内容
本发明要解决的技术问题,在于提供一种模型网格数据导出Obj文件的方法以及
系统,便于用户使用。
本发明之一是这样实现的:一种模型网格数据导出Obj文件的方法,包括如下步
骤:
步骤1、判断网格物体的类型,若是SkinnedMeshRenderer,则给该网格物体添加
MeshCollider组件,并重新烘焙MeshCollider,处理后得到网格信息;否,则直接得到网格
信息;
步骤2、创建第一对象,将网格信息按照Obj文件格式添加到该第一对象中;
步骤3、创建第二对象,将所述网格物体的材质数据保存至所述第二对象,并保存
贴图路径至一链表;
步骤4、使用StreamWriter将第一对象中的网格数据写入到.Obj文件内,以及第二
对象中材质数据写入到.mtl文件内;并使用File.Copy根据链表保存的贴图路径,将图片复
制保存到指定文件夹内。
进一步地,所述步骤3进一步具体为:创建第二对象,判断该网格物体所使用的材
质信息是否已经记录,若没有记录,则创建一材质信息,并将材质信息保存至第二对象;否,
则将材质信息保存至第二对象中;之后保存贴图路径至一链表。
进一步地,所述第一对象为StringBuilder对象。
进一步地,所述第二对象为StringBuilder对象。
本发明之二是这样实现的:一种模型网格数据导出Obj文件的系统,包括如下模
块:
网格数据采集模块,判断网格物体的类型,若是SkinnedMeshRenderer,则给该网
格物体添加MeshCollider组件,并重新烘焙MeshCollider,处理后得到网格信息;否,则直
接得到网格信息;
网格数据处理模块,创建第一对象,将网格信息按照Obj文件格式添加到该第一对
象中;
材质数据处理模块,创建第二对象,将所述网格物体的材质数据保存至所述第二
对象,并保存贴图路径至一链表;
文件生成模块,使用StreamWriter将第一对象中的网格数据写入到.Obj文件内,
以及第二对象中材质数据写入到.mtl文件内;并使用File.Copy根据链表保存的贴图路径,
将图片复制保存到指定文件夹内。
进一步地,所述材质数据处理模块进一步具体为:创建第二对象,判断该网格物体
所使用的材质信息是否已经记录,若没有记录,则创建一材质信息,并将材质信息保存至第
二对象;否,则将材质信息保存至第二对象中;之后保存贴图路径至一链表。
进一步地,所述第一对象为StringBuilder对象。
进一步地,所述第二对象为StringBuilder对象。
本发明具有如下优点:本发明一种模型网格数据导出Obj文件的方法以及系统,人
物的网格数据也能导出,并且能导出贴图信息;能够在Unity运行的状态下导出实时的场景
数据;使用方便,无需多余设置,一键即可完成。
附图说明
下面参照附图结合实施例对本发明作进一步的说明。
图1为本发明方法执行流程图。
图2为本发明系统的原理框图。
具体实施方式
如图1所示,本发明模型网格数据导出Obj文件的方法,包括如下步骤:
步骤1、判断网格物体的类型,若是SkinnedMeshRenderer,则给该网格物体添加
MeshCollider组件,并重新烘焙MeshCollider,处理后得到网格信息;否,则直接得到网格
信息;
步骤2、创建第一对象,将网格信息按照Obj文件格式添加到该第一对象中,所述第
一对象为StringBuilder对象;
步骤3、创建第二对象,判断该网格物体所使用的材质信息是否已经记录,若没有
记录,则创建一材质信息,并将材质信息保存至第二对象;否,则将材质信息保存至第二对
象中;之后保存贴图路径至一链表,所述第二对象为StringBuilder对象;
步骤4、使用StreamWriter将第一对象中的网格数据写入到.Obj文件内,以及第二
对象中材质数据写入到.mtl文件内;并使用File.Copy根据链表保存的贴图路径,将图片复
制保存到指定文件夹内。
如图2所示,本发明模型网格数据导出Obj文件的系统,包括如下模块:
网格数据采集模块,判断网格物体的类型,若是SkinnedMeshRenderer,则给该网
格物体添加MeshCollider组件,并重新烘焙MeshCollider,处理后得到网格信息;否,则直
接得到网格信息;
网格数据处理模块,创建第一对象,将网格信息按照Obj文件格式添加到该第一对
象中,所述第一对象为StringBuilder对象;
材质数据处理模块,创建第二对象,判断该网格物体所使用的材质信息是否已经
记录,若没有记录,则创建一材质信息,并将材质信息保存至第二对象;否,则将材质信息保
存至第二对象中;之后保存贴图路径至一链表,所述第二对象为StringBuilder对象;
文件生成模块,使用StreamWriter将第一对象中的网格数据写入到.Obj文件内,
以及第二对象中材质数据写入到.mtl文件内;并使用File.Copy根据链表保存的贴图路径,
将图片复制保存到指定文件夹内。
本发明一种具体实施方式:
A:网格数据采集
1)查找场景内的所有物体,判断其是否含有网格物体;
2)判断网格物体的类型,MeshFilter或者是SkinnedMeshRenderer;
3)如果网格物体类型是SkinnedMeshRenderer,给该物体添加MeshCollider组件,
并重新烘焙MeshCollider,处理后得到网格信息。
B:网格数据处理
1)创建StringBuilder对象;
2)创建全局的整数对象,保存三角形索引信息;
3)将网格的顶点、法线、贴图坐标、三角形索引等相关数据按照Obj文件格式添加
到StringBuilder对象中。
C:材质数据处理
1)创建StringBuilder对象;
2)创建一张链表,保存贴图的路径;
3)判断该网格所使用的材质信息是否已经记录,如没有记录,则创建一个新的材
质信息,保存材质的名称、所使用的贴图名字等;
4)贴图的路径单独用链表保存。
D:文件生成
使用StreamWriter对网格数据写入到.Obj文件内,将贴图数据写入到.mtl文件
内;自动将.Obj文件和.mtl存储至一文件夹;
使用File.Copy根据链表保存的贴图路径,将图片复制保存到指定文件夹内。
虽然以上描述了本发明的具体实施方式,但是熟悉本技术领域的技术人员应当理
解,我们所描述的具体的实施例只是说明性的,而不是用于对本发明的范围的限定,熟悉本
领域的技术人员在依照本发明的精神所作的等效的修饰以及变化,都应当涵盖在本发明的
权利要求所保护的范围内。