动画导出

通用准则

动画以.a2d格式存储。要从 3ds Max 导出动画,请执行以下步骤:

  1. 确保可见性: 所有包含骨骼的图层以及骨骼本身都必须被取消隐藏和可见。

  2. 导出设置:在导出设置中指定动画的开始帧和结束帧。自动帧检测不起作用

  3. 添加Node轨道:Track View > Dope Sheet中,添加一条Note Track到任意动画骨骼。

    See also

    有关添加和编辑 Note Tracks 的更多信息,请参阅 添加 Note Track.

    向 Note Track 添加两个键:

    • 在第 0 帧:设置带有 ‘start’ 标签的关键帧。

    • 在最后一帧:设置带有 ‘end’ 标签的键。

    这些键对应于单元的 ‘animtree.blk’ 文件中的 ‘key_start’ 和 ‘key_end’ 参数。您可以根据需要更改标签。

    See also

    For more information, see .blk File Format.

  4. 骨骼一致性: 目标模型(将应用动画的模型)和导出到 ‘.a2d’ 文件的骨骼之间的骨骼数量及其链接顺序必须匹配。

项目之间的资产转移

在项目之间传输资源时,可能会出现 着色器差异 ,从而导致错误。要解决此问题,请执行以下作:

  • 使用“F4”编辑 FAR 中的“.dag”文件(针对工作室特定的设置进行配置)并确保着色器兼容性。

  • 请注意,“dynamic_simple”着色器在工作室项目中普遍可用,建议在资源转移的初始阶段使用。

3ds Max 中的“自定义属性”无法在传输后进行调整。 遗憾的是,导入 ‘.dag’ 文件可能会导致皮肤数据损坏。但是,您可以在 FAR 中使用 ‘Alt’+’F4’ 修改属性。

Warning

请谨慎使用语法: 语法错误不会触发警告,未保存的更改将被丢弃

限制

  • 骨骼限制:每个带皮肤的节点最多支持 200 个骨骼。虽然理论上可以扩展到 255,但当前的着色器限制将限制限制为 200。

  • 三角形限制: 每个节点最多允许 65,534 个三角形。

特定于项目的自定义对象属性

不同的项目可能对 自定义对象属性 有独特的要求 确保虚拟资产的正确生成。例如:

  • Enlisted: 每个蒙皮对象必须包含以下属性:

    animated_node:b=yes
    collidable:b=no
    massType:t="none"
    

    省略这些属性将导致动态模型生成过程中出现一般错误。

  • CRSED: 此类要求不适用。

    Tip

    如果您对本节有任何疑问,请直接通过 a.vlasov@gaijin.team直接联系作者。

animtree.blk中的动画描述

动画必须在相应块的 animtree.blk 中描述。 对于基于 War Thunder 的项目,这涉及两个部分:

  1. AnimBlendNodeLeaf{} 模块:

    AnimBlendNodeLeaf{
      a2d:t="animation_file.a2d"  // 动画文件名
    
      continuous{
        name:t="animation_name"   // 动画名称
        key_start:t="start"       // 开始键
        key_end:t="end"           // 结束键
        time:r=1                  // 播放时长
        own_timer:b=yes
        eoa_irq:b=yes
        addMoveDirH:r=-90         // 设备移动方向
        addMoveDist:r=1.33        // 每个播放时间覆盖的距离
      }
    }
    
  2. hub{} 模块:

    hub{
      name:t="animation_file"  // 动画名称
      const:b=yes              // 指示动画是否循环
    }
    

请记住,’animtree.blk’ 也是一个可导出的资源。要在游戏中看到它,您必须执行 ‘daBuild’。

.blk”中的动画导出描述

.blk”格式的动画的导出说明:

file:t=some.a2d

opt:b=yes  // 保守优化
posEps:r=0.01
rotEps:r=0.2
sclEps:r=0.1

对于 .folder.blk 文件:

virtual_res_blk{
  find:t="^(.*)\.a2d$"
  className:t="a2d"
  contents{
    opt:b=yes  // 保守优化
    posEps:r=0.01
    rotEps:r=0.2
    sclEps:r=0.1
  }
}