Import 将Maya ASCII导入游戏

Import 将Maya ASCII导入游戏,import,pipeline,maya,ini,Import,Pipeline,Maya,Ini,我目前正在为我的独立游戏创建一个基于导入的管道,使用Maya ASCII.ma作为源格式,使用我自己的物理和图形格式作为输出。我将在Maya中保留运动范围属性之类的内容,例如铰链关节。需要大量调整的其他类型的参数最终会出现在单独的源文件中(质量、弹簧常数、物理引擎强度等可能是.ini) 因此,输入是一个.ma和一个.ini,输出是一个.physical和几个.mesh文件(每个几何体/材质一个.mesh文件) 我可能还会使用Python 3.1重新格式化数据,我已经找到了一些读取基本Maya A

我目前正在为我的独立游戏创建一个基于导入的管道,使用Maya ASCII.ma作为源格式,使用我自己的物理和图形格式作为输出。我将在Maya中保留运动范围属性之类的内容,例如铰链关节。需要大量调整的其他类型的参数最终会出现在单独的源文件中(质量、弹簧常数、物理引擎强度等可能是.ini)

因此,输入是一个.ma和一个.ini,输出是一个.physical和几个.mesh文件(每个几何体/材质一个.mesh文件)

我可能还会使用Python 3.1重新格式化数据,我已经找到了一些读取基本Maya ASCII的LGPL 2.1代码。在开发过程中,我可能还会使用Python来启动平台。游戏是用C++开发的。 在这一切中有什么你会反对的吗?快速总结可能存在缺陷的事项:

  • 基于导入的管道(不基于导出)
  • Maya(不是3DS)
  • Maya ASCII.ma(不是.mb)
  • .ini(不是.xml)
  • 分离Maya中的运动姿态和.ini中的“畸形调整”属性(并非全部在Maya中)
  • Python3.1用于构建数据(非嵌入式C++)

编辑:如果您对如何实现物理/图形导入/导出工具链有更好的建议,我将非常感谢您的输入。

作为一种通用的序列化格式,具有良好的Python支持(以及任何语言支持),您可能想考虑在INI文件或XML上使用YAML或JSON。 如果您从不手工生成文件,那么XML在您的情况下是可以接受的

JSON和YAML的优点之一是类型:两种格式都被解析为Python列表、字典、浮点、整数。。。基本上:健全的python类型


此外,除非你确信你将在3.1使用过所有的库,否则你可能会考虑由于库的可用性问题而坚持2。x。

如果你真的想这样做,你应该知道一些事情。最主要的一点是,这可能比你最初想象的更麻烦。还有一些是:

  • Maya.ma(至少在当前版本2010之前)是由mel建立的。Mel是图灵完备的,但层次场景用节点描述的方式比“代码”更直接
  • 尽早添加错误处理,否则您稍后会后悔
  • 您必须处理许多不同的节点,其中的变换是迄今为止最令人讨厌的。其他类型包括网格、材质(许多不同类型)、“着色器引擎”和文件(例如纹理)
  • .ma仅描述形状和调整;但很少定义原始顶点。我选择在.ma中保留一个小的“导出”脚本,以避免以与Maya完全相同的方式生成所有基本体。事后看来,这是正确的选择。否则你必须能做像这样的事情
  • “创建球体”
  • “使用半径从这里到那里移动软选择”,以及
  • “移动顶点252 xyz单位”(隐式定义所有顶点)
  • Maya为网格定义多边形;你可能想改变一下 将rt转换为三角形
  • 存在于特定类型节点上的所有参数都是显式或隐式定义的。您必须知道它们的默认值(隐式定义时)
  • 基本上,对象由变换、网格和基本体定义。变换是网格的父级。变换包含缩放、旋转、平移、轴心平移等。网格链接到基本体,反之亦然。基本体具有类型(“多边形立方体”)和尺寸(“宽度、高度、深度”)
  • 节点可能具有“多重继承”。例如,多次实例化的网格有一个网格(和一个基本体),但有多个父对象(变换)
  • 节点变换是这样计算的(有关详细信息,请参见):
  • 我围绕物理构建引擎,因此游戏引擎希望在物理形状上放置网格,但在建模时,我希望相反。这是为了使其在未来的应用中保持通用性(“无物理的网格”)。这个小小的决定使我在转变中感到非常悲痛。线性代数得到了复习。缩放、旋转、平移和剪切方面的问题;随便你说吧,我受够了
  • 我在的Maya解析器上构建了导入工具。谢谢Matthias Baas
  • 如果你打算做类似的事情,我强烈建议你在写自己的东西之前先看一下。这个“小”项目花了我三个月的时间才达到基本的工作状态

您应该考虑使用基于Outlook的流水线或标准化的文件格式(如Objor或CuraDa),而不是重新实现.MA解析器,并复制解释它所需的所有玛雅内部结构。 .ma/.mb格式不适用于除Maya本身以外的任何程序读取,因此Autodesk不会将任何精力用于使此过程变得简单。要100%正确地解析它,您需要实现整个MEL脚本语言

我见过的所有基于Maya的管道要么首先将内容导出为标准文件格式,要么在Maya中运行MEL脚本,使用MEL节点界面转储内容


注:Maya可以在“无头”模式下运行,在该模式下加载场景、执行MEL脚本并存在,而无需加载GUI。因此,在自动生成系统中使用它没有问题。

。configparser模块中很好地支持ini文件,参数直接解析为Python类型。我将只使用尽可能少的导入Python模块,而且我从来没有在简单使用2to3.py时遇到过任何问题,因此在我的概念证明中,我会说这些风险也是elim

vrt = getattr("rpt")
rt = mat4.translation(vrt)
...
m = t * rt * rpi * r * ar * rp * st * spi * sh * s * sp