这篇条目有关 Source引擎。如需详情,点击这里。

$ikchain

From Valve Developer Community
< Zh
Revision as of 17:54, 3 January 2025 by MoRanYue (talk | contribs) (chatgpt translation)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search
English (en)中文 (zh)Translate (Translate)
Info content.png
This page needs to be translated.
This page either contains information that is only partially or incorrectly translated, or there isn't a translation yet.
If this page cannot be translated for some reason, or is left untranslated for an extended period of time after this notice is posted, the page should be requested to be deleted.
Also, please make sure the article complies with the alternate languages guide.(en)
由于IK,猎人的三只脚能够同时触地。

$ikchain是一个QC 命令(en),可在所有的 起源 起源 游戏中使用。 Source引擎的逆向运动学(en)系统可以让角色的脚与不平坦的地面精确贴合。

IK根据从top_joint到end_joint的固定距离计算middle_joint的位置。一个典型的例子是踝关节-膝关节-髋关节IK链,其中踝关节(end_joint)的位置相对于地面,而髋关节(top_joint)保持固定,膝关节(middle_joint)被调整到一个位置,使小腿和大腿的骨骼长度保持不变。根据使用的特定ikrule,当end_joint移动到所需位置时,top_joint的位置被认为是固定的,IK系统会调整middle_joint的位置,以确保关节之间的距离(即骨骼长度)保持恒定。

Tip.png提示:一个关节(joint)是指一个骨骼(bone)连接到其父骨骼的位置。所有骨骼(除了根骨骼)必须只有一个关节,因此“骨骼名”也被用来指定其关节。
Tip.png提示:HLMV中可以通过“Render”选项卡中的“Enable IK”选项预览IK。
Icon-Bug.png错误:如果序列使用了blendlayer,HLMV将无法显示IK规则。  [todo tested in ?]

语法

$ikchain (name) (end_bone) [(axis) (value)] [height (units)] [pad (units)] [floor (units)] [knee (X) (Y) (Z)] [center (X) (Y) (Z)]

  • name:为此IK链定义“ikchainname”。
  • end_bone:通过指定IK链中最靠下的骨骼定义受影响的三个骨骼。接下来的两个骨骼通过沿骨骼层级自动找到。一个IK链只能包含三个骨骼。
  • axis应为X、Y、Z、XR、YR、ZR、LX、LY、LZ、LXR、LYR、LZR、LM或LQ之一,value是一个浮点数(en)
    待完善: 它的作用是什么?
  • height
    待完善: ?
  • pad
    待完善: ?
  • floor
    待完善: ?
  • knee:不一定是膝盖。它也可能是髋关节、脚踝或脚趾...
    待完善: 确认:此向量指定关节的方向
  • center
    待完善: 确认:关节中心的向量

QC示例:

$ikchain rhand ValveBiped.Bip01_R_Hand knee  0.707 0.707 0.000  
$ikchain lhand ValveBiped.Bip01_L_Hand Z 0  
$ikchain rfoot ValveBiped.Bip01_R_Foot height 10 floor 5  
$ikchain lfoot ValveBiped.Bip01_L_Foot pad 5 center 0 1 0  

$ikchain规则

iklock

iklock (ikchainname) (lock_position) (maintain local rotation) iklock在应用序列之前跟踪特定链的初始位置/方向,然后在应用之后执行局部IK规则以将其恢复到初始位置/方向。这在将骨盆或身体运动应用到模型时可以让手或脚保持原位。

  • ikchainname:规则将应用到的$ikchain的名称。
  • lock_position:锁定权重是一个从0.0到1.0的浮点数。
  • maintain local rotation:旋转锁定权重是一个从0.0到1.0的浮点数。
Note.png注意:旋转值的方向与位置相反。要同时锁定两者,将锁定权重设置为“1 0”;要让两者自由移动,设置为“0 1”(这种情况下不需要iklock,但您明白这个原理即可)。

ikrule

ikrule (ikchainname) [type] [options...]

  • ikchainname:规则将应用到的$ikchain的名称。
  • type:参见“ikrule类型”了解有效类型。
  • options:参见“ikrule选项”了解有效选项。

ikrule类型

... =>