3

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

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

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

在这一切中有什么你会建议反对的吗?可能有缺陷的事情的快速总结:

  • 基于进口的管道(不是基于出口)?
  • 玛雅(不是 3DS)?
  • Maya ASCII .ma(不是 .mb)?
  • .ini(不是 .xml)?
  • Maya 中的运动属性和 .ini 中的“freak-tweak”属性的分离(不是全部在 Maya 中)?
  • 用于构建数据的 Python 3.1(不是嵌入式 C++)?

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

4

3 回答 3

4

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

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

vrt = getattr("rpt")
rt = mat4.translation(vrt)
...
m = t * rt * rpi * r * ar * rp * st * spi * sh * s * sp
  • 我围绕物理构建我的引擎,因此游戏引擎希望将网格放置在物理形状上,但在建模时我希望它反过来。这是为了保持它对未来应用程序的通用性(“没有物理的网格”)。这个微小的决定让我在转型中感到非常悲痛。线性代数得到了更新。缩放、旋转、平移和剪切方面的问题;你的名字,我有它。
  • 我在cgkit的 Maya 解析器上构建了我的导入工具。谢谢马蒂亚斯巴斯!
  • 如果您要做类似的事情,我强烈建议您在编写自己的转换器之前先看看我的转换器。这个“小”项目花了我三个月的时间才达到基本的工作条件。
于 2009-12-01T11:37:17.157 回答
1

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

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

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

此外,除非您确定您将使用的每个库都适用于 3.1,否则由于库可用性问题,您可能需要考虑坚持使用 2.x。

于 2009-07-21T12:01:28.937 回答
1

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

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

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

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

于 2009-12-24T04:44:16.983 回答