2009-07-20 128 views
3

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

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

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

你有什么建议反对吗?一个可能有缺陷的东西的快速总结:

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

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

回答

4

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

  • Maya .ma(至少直到2010年5月)由mel建立。梅尔是图灵完备的,但层次场景用节点来描述的方式比“代码”更直接。
  • 提前添加错误处理,否则稍后您会后悔。
  • 你必须处理很多不同的节点,其中变换是迄今为止最令人厌恶的节点。其他类型包括网格,材质(许多不同类型),“着色器引擎”和文件(如纹理)。
  • 。马只描述形状和调整;但很少定义原始顶点。我选择在.ma内部保留一个小的“导出”脚本,以避免必须以与Maya完全相同的方式生成所有基元。事后看来,这是正确的路要走。否则,你必须要能够做的东西一样
    1. “创建领域”,
    2. “移动软选择半径这和 - 从这里到那里”,并
    3. “移动顶点252个XYZ单位“(隐式定义所有顶点)。
  • 玛雅定义网格的多边形;你可能想要把三角形转换成rt。
  • 存在于特定类型节点上的所有参数都可以显式或隐式定义。你必须知道它们的默认值(隐式定义的时),
  • 基本上,目的是通过一种变换,网状和原始定义。变换是网格的父变换。该转换包含缩放,旋转,平移,数据透视转换,还有一些。网格链接到基元,反之亦然。该图元有一个类型(“polyCube”)和尺寸(“宽度,高度,深度”)。
  • 节点可能有“多重继承”。例如,多次实例化的网格具有单个网格(和单个基元),但具有多个父节点(转换)。
  • 节点可将计算,像这样(见Maya xform doc更多信息):

vrt = getattr("rpt") 
rt = mat4.translation(vrt) 
... 
m = t * rt * rpi * r * ar * rp * st * spi * sh * s * sp 
  • 我建立我周围的物理引擎,让游戏引擎要放在物理形状的网格,但造型我当想要另一种方式。这将保持它对未来应用程序的通用性(“无物理网格”)。这个微小的决定让我对转型感到非常悲伤。线性代数得到了一个刷新。缩放,旋转,平移和剪切中的问题;你的名字,我已经拥有了。
  • 我建立在cgkit的玛雅解析器我的导入工具。感谢Matthias Baas!
  • 如果你打算做类似的事情我强烈建议编写自己之前,你在偷看my converter。这个“小型”项目花了我三个痛苦的月份来达到基本的工作条件。
1

作为一般的序列化格式,这是人类可读和人写的,具有优良的Python的支持(和,嗯,任何语言支持真正的),你可能要考虑使用YAML或JSON在INI文件或XML。

如果您从不手动生成文件,那么您的情况可能是XML。

JSON和YAML的优点之一是键入:两种格式都解析为Python列表,字典,浮点数,整数...基本上:理智的python类型。另外,除非您确定每个使用的库都适用于3.1,否则由于库可用性问题,您可能会考虑坚持使用2.x。

+0

.ini文件与参数configparser模块用来在很好的支持直接解析成Python类型。 我只会使用尽可能少量的导入Python模块,而我从来没有任何问题只是简单地使用2to3.py,所以我在归纳我的概念证明,我会说这些风险也被消除了。 – 2009-07-22 13:34:39

1

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

的的.ma/.mb格式不打算比玛雅本身以外的任何程序读取,因此Autodesk不把任何努力来使之成为一个简单的过程。为了正确解析它,你需要实现整个MEL脚本语言。

所有基于玛雅管线我见过或者出口第一内容转换成一个标准化的文件格式,或者在Maya中运行MEL脚本中使用MEL节点接口倾倒内容。

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

+0

这是一个疯狂的事业,但现在它已经完成(足够),我准备好从中获益。 – 2009-12-25 16:39:14