gpt4 book ai didi

将 Maya ASCII 导入游戏

转载 作者:行者123 更新时间:2023-12-01 10:51:50 28 4
gpt4 key购买 nike

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

因此,输入是一个 .ma 和一个 .ini,除其他外,输出是一个 .physics 和几个 .mesh 文件(每个几何体/ Material 一个 .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++)?

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

最佳答案

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

  • Maya .ma(至少到当前的 v.2010)由 mel 构建。 Mel 是图灵完备的,但根据节点描述层次场景的方式比“代码”要简单得多。
  • 尽早添加错误处理,否则你会后悔的。
  • 你必须处理很多不同的节点,其中转换是迄今为止最令人讨厌的节点。其他类型包括网格、 Material (许多不同类型)、“着色器引擎”和文件(例如纹理)。
  • .ma 只描述形状和调整;但很少定义原始顶点。我选择在 .ma 中保留一个小的“导出”脚本,以避免必须以与 Maya 完全相同的方式生成所有图元。事后看来,这是正确的方法。否则你必须能够做类似的事情
    1. “创建球体”,
    2. “将带有半径的软选择从这里移动到那里”,以及
    3. “将顶点移动 252 个 xyz 单位”(所有顶点都隐式定义)。
  • Maya 为网格定义多边形;你可能想传达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 上构建了我的导入工具的 Maya 解析器。谢谢马蒂亚斯·巴斯!
  • 如果您打算做类似的事情,我强烈建议您查看 my converter在编写自己的之前。这个“小”项目花了我三个月的时间才达到基本的工作状态。

关于将 Maya ASCII 导入游戏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1156024/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com