将Maya ASCII导入游戏

时间:2009-07-20 21:24:12

标签: import pipeline maya ini

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

输入是一个.ma和一个.ini,输出是一个.physics和几个.mesh文件(每个几何/材质一个.mesh文件)。

我也可能会使用Python 3.1重新格式化数据,我已经找到了一些读取基本Maya ASCII的LGPL 2.1代码。我可能也会在开发过程中使用Python来启动平台。游戏是用C ++开发的。

你会建议反对所有这些吗?对可能存在缺陷的事情的快速总结:

  • 基于导入的管道(不是基于导出的)?
  • Maya(不是3DS)?
  • Maya ASCII .ma(不是.mb)?
  • .ini(不是.xml)?
  • Maya中的运动属性分离和.ini中的“怪异调整”属性(Maya中不是全部)?
  • Python 3.1用于构建数据(不是嵌入式C ++)?

编辑:如果您对如何实施物理/图形导入/导出工具链有更好的建议,我会很感激输入。

3 个答案:

答案 0 :(得分:4)

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

  • Maya .ma(至少在当前的2010年之前)是由梅尔建立起来的。梅尔是图灵完备的,但是用节点描述分层场景的方式比“代码”要简单得多。
  • 尽早添加错误处理,或者稍后您会感到抱歉。
  • 您必须处理许多不同的节点,其中变换是迄今为止最令人讨厌的节点。其他类型包括网格,材质(许多不同类型),“着色引擎”和文件(如纹理)。
  • .ma仅描述形状和调整;但很少定义原始顶点。我选择在.ma中保留一个小的“导出”脚本,以避免必须以与Maya完全相同的方式生成所有基元。事后看来,这是正确的方法。否则你必须能够做类似的事情
    1. “创建球体”,
    2. “使用半径将此选项从此处移动到那里”和
    3. “移动顶点252 xyz单位”(隐式定义所有顶点)。
  • Maya定义网格的多边形;你可能想要召集 rt to triangles。
  • 显式或隐式定义某种类型节点上存在的所有参数。您必须知道它们的默认值(隐式定义时),
  • 基本上,对象由变换,网格和基元定义。变换是网格的父级。变换包含缩放,旋转,平移,枢轴转换,还有一些。网格链接到基元,反之亦然。基元具有类型(“polyCube”)和尺寸(“宽度,高度,深度”)。
  • 节点可能具有“多重继承”。例如,几次网格实例具有单个网格(和单个基元),但有多个父网格(转换)。
  • 节点转换的计算方式如下(有关详细信息,请参阅Maya xform doc):

vrt = getattr("rpt")
rt = mat4.translation(vrt)
...
m = t * rt * rpi * r * ar * rp * st * spi * sh * s * sp
  • 我在物理上构建我的引擎,所以游戏引擎想要在物理形状上放置网格,但是在建模时我想要反过来。这使其在未来的应用程序中保持通用(“没有物理的网格”)。这个微不足道的决定让我在转型中感到非常悲痛。线性代数得到了刷新。缩放,旋转,平移和剪切方面的问题;你说出来了,我已经拥有了它。
  • 我在cgkit的Maya解析器上构建了我的导入工具。谢谢Matthias Baas!
  • 如果你要做类似的事情,我强烈建议你在写{2}之前先偷看my converter。这个“小”项目花了我三个痛苦的月份来达到基本的工作状态。

答案 1 :(得分:1)

作为一种人类可读和人类可写的通用序列化格式,具有出色的Python支持(以及,实际上任何语言支持),您可能需要考虑在ini文件中使用YAML或JSON或XML。

如果您从不手动生成文件,那么在您的情况下可以接受XML。

JSON和YAML的一个优点是输入:两种格式都被解析为Python列表,字典,浮点数,整数......基本上:理智的python类型。

另外,除非你确定你所使用的每个库都适用于3.1,否则你可能会因为库可用性问题而考虑坚持使用2.x.

答案 2 :(得分:1)

您应该考虑使用基于导出的管道或标准化文件格式(如OBJ或COLLADA),而不是重新实现.ma解析器并复制解释它所需的所有Maya内部。

.ma / .mb格式不是由Maya本身以外的任何程序读取的,因此Autodesk不会付出任何努力使这个过程变得简单。要正确解析它,您需要实现整个MEL脚本语言。

我见过的所有基于Maya的管道首先将内容导出为标准化文件格式,或者在Maya中运行MEL脚本以使用MEL节点接口转储内容。

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