doom3 Articulated Figures编辑器

原文地址 https://www.iddevnet.com/doom3/afs.php

我用谷歌翻译翻译了一下子,我觉得翻译的质量,比我翻译的要强一点点,

处于节约时间的考虑,我觉得还是有必要看一下子的。

artifulated figure(铰链数字)大多数人被称为“布娃娃”。

以下是一个很好的文件,说明他们如何工作,由最优秀的MrElusive打造。

铰接图和骨架模型

一个铰接的人物是将这些身体保持在一起的刚体和约束的集合。

基于牛顿力学的 动态模拟  被用来在 力量和碰撞 的影响下  将 身体移动 到世界各地。

一个铰接图的每个身体修改 骨骼模型  的一个关节。

身体相对于其初始位置的旋转变化被应用于骨骼模型​​的关节。

要创建一个铰接图,需要一个带骨架的md5网格(.md5mesh)。

此外,单个动画框架需要初始动画(.md5anim)。

该动画框架将模型设置为用于创建铰接图形的姿态。

对于像人物这样的角色,这通常是一个T形姿势。

初始动画的单帧还指定了由铰接图的身体修改的初始关节位置。

每个铰接的图形都在一个单独的.af文件中指定,存储在base / af /文件夹中。

要在游戏中加载和测试一个关联的图形,

在存储在base / def /文件夹中的.def文件之一中创建一个entityDef。

这样的entityDef通常如下所示:

entityDef env_ragdoll_fatty {
  “editor_color”“1.5”
  “editor_mins”“-8 -8 -8”
  “editor_maxs”“8 8 8”
  “editor_usage”“Ragdoll for monster_zombie_fat \ n”
  “spawnclass”“idAFEntity”
  “流血”“1”
  “睡觉”“1”
  “皮肤”“皮肤/模特/怪物/脂肪”
  “model”“models / md5 / monsters / zfat / zfat.md5mesh”
  “anim af_pose”“models / md5 / monsters / zfat / initial.md5anim”
  “articulated图”“monster_zombie_fat”
}


  “editor_color”“1.5”
  “editor_mins”“-8 -8 -8”
  “editor_maxs”“8 8 8”
  “editor_usage”“Ragdoll for monster_zombie_fat \ n”
  “spawnclass”“idAFEntity”

  “blood”“1” (?此处英文或许不对)
  “sleep”“1”
  “skin” “skin/model/monsters/fat”

  “model”“models / md5 / monsters / zfat / zfat.md5mesh”
  “anim af_pose”“models / md5 / monsters / zfat / initial.md5anim”
  “articulated图”“monster_zombie_fat”
}

“spawnclass”始终指向“idAFEntity”。

关键的“睡眠”设置为1,所以铰接的图形在生成时不会立即开始移动。

“模型”键指向md5网格。

带有“af_pose”扩展名的“anim”键指向带有初始动画的文件。

“articulatedFigure”键指向要使用的.af文件。

.af文件首先存储具有常规设置的部分,然后收集正文和约束。

2.设置

铰接图设置的结构如下所示:

设置{
   关键参数
}

   关键参数
}

网格“md5mesh”md5网格用于铰接图
动画“md5anim”初始动画(t-pose)
皮肤“皮肤”使用皮肤
摩擦<线性>,<角度>,<接触>

所有身体的默认摩擦力。
线性和角摩擦值指定平移和旋转空气摩擦。接触摩擦值指定与接触面的摩擦力。摩擦值通常在[0,1]的范围内。

selfCollision 0/1自检检测的默认设置
suspendSpeed
<线速度> <角速度>
<线性加速度> <角加速度>
关节运动的身体休息
的速度指定的线性和角速度是关节运动的数字可能停止的最大速度。指定的线性和角加速度是铰接图可能停止的最大加速度。
totalMass <mass>铰链图的总质量。
如果总质量设置为大于零的值,则每个身体的质量被缩放,使得铰接图的总质量等于给定质量。
3.机构

一个身体的结构如下:

身体“名称”{
   关键参数
}

   关键参数
}

联名“联名”

身体修改的关节


总是有一个修改骨骼模型的起始关节的身体。

该身体的位置和方向用于将整个骨骼模型移动到世界各地。

这个机构的关键是设定为“起源”。

模型[碰撞模型]

身体可以使用几种不同的碰撞模型。

这样的碰撞模型是用模型键指定的: 模型框((min_x,min_y,max_z))(max_x,max_y,max_z))模型八面体((min_x,min_y,min_z),(max_x,max_y,max_z))模型十二面体((min_x,min_y,min_z)模型圆锥((min_x,min_y,min_z),(max_x,max_y,max_z),numSides)模型圆柱体((min_x,min_y,min_z)),(max_x,max_y,max_z),numSides) bone((start_x,start_y,start_z),(end_x,end_y,end_z),width)model custom(“name”)

来源(x,y,z)碰撞模型必须放置在相对于身体修改的关节的正确位置。此键指定碰撞模型中心的位置。
角度(俯仰,偏航,滚动)碰撞模型可以用角度键旋转原点
密度<值>碰撞模型的密度。身体的质量等于碰撞模型体积的密度乘以。
摩擦<线性>,<角度>,<接触>

可以为每个身体指定不同的摩擦性能。


线性和角摩擦值指定平移和旋转空气摩擦。

接触摩擦值指定与接触面的摩擦力。

摩擦值通常在[0,1]的范围内。

selfCollision 0/1

设置每个身体的自身碰撞检测

包含“联合名单”

抛物线与骨骼模型的视觉网格碰撞。

对于网格上的冲击位置,取骨骼模型的最接近的关节。

从这个关节,影响被转移到一个关键人物的身体。

每个身体都有一个列表,其关节或多或少被身体所包含。

关节附近的冲击被转移到包含关节的身体。

关节只能由一个身体包含,每个关节必须由身体包含。身体所包含的关节用包含的关节键指定。

限制

可以使用几个约束来连接关节数字的物体。约束用如下结构指定:

constraintType“name”{
   关键参数
}

   关键参数
}

constraintType是以下约束类型之一:

  • ballAndSocketJoint
  • universalJoint
  • 合页
  • 弹簧

对于每个约束,指定两个由约束连接的主体。这些主体用body1和body2键指定。

body1“name”
body2“name”

body2“name”

body2键可以指向称为“世界”的特殊机构,在这种情况下约束将body1连接到世界。

除了两个连接的身体之外,每个约束都具有特定于下面列出的约束类型的多个设置。

4.1球窝接头

锚(x,y,z)指定球的中心(必需)
conelimit(axis_x,axis_y,axis_z),
<angle>,(shaft_x,shaft_y,shaft_z)
指定锥形极限。
锥轴由第一个矢量指定。顶部锥体的角度跟随。锥体连接到主体2。接下来,指定连接到主体1的轴,并且被限制为始终保持在锥体内。
pyramidlimit(axis1_x,axis1_y,axis1_z),
<angle1>,<angle2>,<angle3>,
(shaft_x,shaft_y,shaft_z)
指定一个金字塔形极限。
金字塔轴由第一个向量指定。第一和第二个角度指定金字塔顶部的角度。第三个角度指定金字塔围绕金字塔轴的旋转。金字塔与身体2相连。接下来,指定连接到主体1的轴,并且被限制为始终保持在金字塔内。
摩擦<值>指定关节摩擦。摩擦值通常在[0,1]的范围内。
4.2万向节

万向接头与球窝接头非常相似。然而,连接到主体的两个轴的旋转也受到限制。

锚(x,y,z)指定万向节的锚点(必需)
轴(dir1_x,dir1_y,dir1_z),
(dir2_x,dir2_y,dir2_z)
指定两个轴(必需)
第一个轴连接到主体1并指向主体1或朝向主体1。第二轴连接到主体2并指向主体2或朝向主体2。主体1相对于主体2围绕这些轴的旋转受到约束。
conelimit(axis_x,axis_y,axis_z),角度指定锥形极限
锥形轴由第一个矢量指定。顶部锥体的角度跟随。锥体连接到主体2。连接到主体1的第一个轴被限制为始终保持在锥体内。
pyramidlimit(axis1_x,axis1_y,axis1_z),
angle1,angle2,angle3
指定一个金字塔形极限。
金字塔轴由第一个向量指定。第一和第二角度指定金字塔顶部的角度。第三个角度指定金字塔围绕金字塔轴的旋转。金字塔与身体2相连。连接到主体1的第一根轴被限制为始终保持在金字塔内。
摩擦<值>指定关节摩擦。摩擦值通常在[0,1]的范围内。
4.3铰链

铰链由锚和铰链轴指定,两个主体可围绕该铰链轴相对于彼此旋转。

锚(x,y,z)指定锚点
轴(axis_x,axis_y,axis_z)指定铰链轴
极限角度1,角度2,角度3指定V形极限
第一个角度指定V形极限的中心。指定V形极限宽度的角度如下。V形附在body2上。接下来,指定连接到主体1并且被限制为始终保持在V形内的轴。该轴的方向用第三个角度指定。
摩擦<值>指定关节摩擦。摩擦值通常在[0,1]的范围内。
4.4春天

弹簧由两个锚定体指定,每个约束体上有一个。

anchor1(x,y,z)指定第一个锚点
anchor2(x,y,z)指定第二个锚点
摩擦<值>指定关节摩擦。摩擦值通常在[0,1]的范围内。
拉伸<值>弹簧伸长时弹簧不变
压缩<value>当弹簧压缩时弹簧恒定
阻尼<值>弹簧阻尼
restLength <value>春天的休息长度
minLength <value>弹簧的最小长度
maxLength <value>弹簧的最大长度
5.附加脚本功能

3D向量用于指定身体的位置,方向和方向以及约束。在.af文件中指定这样一个向量有四种方式

(x,y,z)相对于md5原点的位置
联合(“联名”)关节的位置
bonecenter(“开始联名”,“最终联名”)骨关节在两个关节之间
bonedir(“开始联名”,“联名”)从一个关节到另一个关节的骨骼的方向
优化清晰的数字
  • 最小化身体和限制的数量
  • 使用低复杂性的碰撞模型
  • 创建一个树结构
  • 尽可能不要使用接头摩擦,尽管接头摩擦会增加稳定性
  • 不要对不需要自身碰撞的物体进行自身碰撞检测
问题
  1. 铰接图表示奇怪或爆炸。
    确保每个身体的质量在合理范围内。使用af_showMass 1显示每个身体的质量。范围[1,100]中的体重通常很好。连接一个很重的身体与轻便的身体经常会导致问题。通常明智的做法是不要使关节的数字太重。将重物保持在一起所需的力量可能会增长很大,并且可能不会在物理引擎中准确表示。

  2. 铰接图表示奇怪或爆炸。
    确保每个身体的惯性张量描述合理的平衡对象。使用af_showInertia 1显示每个身体的惯性张量。惯性张量的非常不同的对角元素可能会导致不稳定。每体惯量标度可以用于缩放身体的惯性张量,使得对角线元素相对于彼此最终达到合理的范围。

  3. 关键的数字是跳跃的,能量似乎进入系统。
    确保没有接触点与联合作战的约束。当例如三个主体与两个万向节连接时,并且主体相对靠近。外部两个物体可能被认为是接触的。这个数字将在接触点被拉开,而万向接头试图将身体保持在一起。跳跃行为往往是结果。在整个图形或某些物体上禁用自身碰撞可以解决问题。

铰链数字的编辑

几个cvars和控制台命令可用于(重新)加载和可视化关联数字。

一旦为一个铰接的数字创建了一个实体def,那么'spawn'控制台命令后跟实体def的名称可以用来加载游戏中的关联数字。'reloadAFs'控制台命令可用于重新加载所有铰接图。该命令使所有铰接的图形能够回到初始动画指定的姿势。

为了可视化关节数字的几个物理属性,可以使用以下cvars:

af_showBodies显示身体的碰撞模型
af_showBodyNames显示每个身体的名字
af_showMass显示每个身体的质量
af_showTotalMass显示关节数字的总质量
af_showInertia显示每个身体的惯性张量矩阵
af_showActive只有在没有休息的情况下才能显示树
af_showVelocity显示每个身体的线性和角速度矢量
af_showConstraints显示所有限制
af_showConstraintNames显示每个约束的名称
af_showConstrainedBodies显示由约束约束的两个主体
af_showPrimaryOnly仅显示主要约束
af_showTrees显示关节图的树结构
af_showLimits显示联合限制

通过将cvar'r_showSkel'设置为1,可以可视化md5模型的骨架。

为了测试表达式的数字,可以将它们接收并拖动它们。当cvar g_dragEntity设置为1时,可以选择并移动清晰的图形。要选择一个铰接的图形,十字准线指向视觉网格上的某个位置,并按下攻击按钮。当攻击按钮被按下时,铰接的人物可以通过走动(或以noclip模式飞行)并环绕四周而被拖动穿过世界。

选择拖动的最后一个关联图被包含在一个黄色边框中。可以使用控制台命令“deleteRagdoll”从游戏中删除此关联图。一旦关联的图形位于地图中,它们可以使用控制台命令“saveRagdolls”保存到.map文件。保存到.map文件的铰接图不会从“deleteRagdoll”命令从.map文件中删除。任何关联的图可能仍然会从级别编辑器中的.map文件中删除。

步行逆运动学使脚保持在地板上,即使在不平坦的地形上行走。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值