Left 4 Dead 2

Left 4 Dead 2

Không đủ lượt đánh giá
修改原版武器的第一人称动画(动作)
Bởi 您🛰
在不使用预制件的情况下导入原版的第一人称手臂和武器,并让手臂受武器的第一人称动画(动作)控制。
   
Giải thưởng
Yêu thích
Đã yêu thích
Bỏ thích
导入手臂和武器的动画……
1)首先使用 Plumber[github.com] 将第一人称手臂(含动画)及第一人称武器(含动画)导入到 blender 中:
* 生还者的第一人称手臂位于 models/weapons/arms/
* 确保“缩放”值为 “1”,默认为 0.01。



2)不要调整手臂的位置;

3)删除手臂的骨架,按【CTRL + 左键单击】依次选择手臂的模型及枪械的骨架,并按 CTRL+P 创建空顶点组;

4)切换到姿态位置。

为手臂骨骼添加 IK 约束
* 这部分是通过对 мяFunreal 创建的第一人称动画预制件(含骨骼及武器)逆向分析[zh.wikipedia.org]得来的。因为预制件与原版武器动画的 .qc 文件不兼容,所以我试了一下看看能不能将原版手臂挂载到原版武器的动画上,这样就可以直接使用原版武器的 .qc 文件了。

IK 约束用于同步骨骼的运动,在使用 IK 约束的情况下,移动手腕的位置也会改变手臂的位置;旋转手腕同样也会引起相关关节的旋转。

如果不使用 IK 约束,那么结果可能会像是这样(典型反例):

https://www.reddit.com/r/blender/comments/1ephr4c/i_tried_to_animate_a_pushup/

反之,应使用 IK 约束来同步骨骼之间的运动:

https://www.reddit.com/r/blender/comments/1eqbnqd/update/

1)切换到骨骼的编辑模式,选择 ValveBiped.Bip01_L_Hand 或 ValveBiped.Bip01_R_Hand,按 E 挤出一个新骨骼(不要移动);
2)变更坐标系为法向,按 G 和 Y 根据法向坐标移动;



3)拆分骨骼,并为其添加复制位置和复制旋转这两个骨骼约束;
* 目标为自身,骨骼为先前的父骨骼(用于挤出的骨骼,例如 ValveBiped.Bip01_L_Hand)

如果不拆分这个骨骼(将要用来控制其他骨骼的运动的控制点),那么控制点的父级就会是受控制点影响的骨骼,这会产生一些预料之外的问题:


这就是为什么要拆分挤出的骨骼(控制点),再通过烘焙动作来使其继承父骨骼的位置和角度。别问我怎么知道的。

3)切换到姿态模式,按 A 全选所有骨骼,使用【姿态】>>【动画】>>【烘焙动作】来让刚才挤出的骨骼根据复制位置和复制旋转来继承父骨骼的位置与角度;



4)单选刚才挤出的骨骼并按 H 隐藏它,再选中 ValveBiped.Bip01_L_Hand,添加【反向运动学】骨骼约束,将目标设置为自身,设置骨骼为刚才按E挤出的骨骼(例如 ValveBiped.Bip01_L_Hand.001);
5)调整链长直至黄色虚线投射至 UpperArm 骨骼;
6)勾选【旋转】复选框,以确保控制点(目标骨骼)的旋转可以同时旋转受 IK 约束的其他骨骼;
6)搞定。

按 Y 键抽象一下

其中:

【目标】>>【骨骼】指定了什么物体控制 IK 约束(【目标】应该叫做【控制点】[zh.wikipedia.org],不知道这是怎么翻译的);
* 在这里,受控于 IK 约束的骨骼受控于目标(即控制点)。由于我们刚才将控制点指定为我们刚刚挤出的“骨骼”,因此调整这个骨骼的位置,便可以调整 IK 约束所控制的骨骼的位置和角度。
* 这玩意似乎可以指定其他的对象(物体)。例如,为手指添加一个 IK 约束,并使其受控于【战斗机】,当战斗机飞过时,战斗机就将会自动控制手指的运动(使其指向战斗机),这部分是由 IK 约束介导的。TLDR: IK 约束使骨骼的运动受控于【目标】。

【链长】决定了有哪些(父)骨骼(同时)受控于 IK 约束,或者说【目标】可以藉由 IK 约束控制哪些(父)骨骼的运动;
* 看起来链长与上级骨骼有关。如果骨骼没有设置父骨骼,那么链长可能不起作用。

【位置权重】和【旋转】决定了 IK 约束是否控制手臂骨骼的位置和旋转;
* 禁用位置权重将导致 IK 约束不会改变姿态动画中手臂骨骼的位置;同理,启用旋转将使 IK 约束根据目标的角度来同步旋转受 IK 约束影响的骨骼。

通过调整控制点(即【目标】)的位置和角度来控制(受控)骨骼的运动。
为了控制对侧手臂的骨骼运动,这个过程也需要再重复一次。

这个方法似乎也可以用于平滑地控制手指的运动,而不仅仅是手臂。在这种情况下,控制点应通过挤出最外侧的期望受控骨骼(例如,手指的最子级骨骼)来生成。

控制点在姿态模式中移动时,位置可能会超出合理的范围(尽管似乎不会对基于 IK 的骨骼运动产生“扭曲”的影响):


在这种情况下需要为控制点骨骼添加限定范围。

选择控制点骨骼,添加骨骼约束,然后将骨骼设定为肩膀骨骼(例如ValveBiped.Bip01_L_Clavicle)。

距离决定了控制点可以离这个骨骼多远,降低该值可以降低受控骨骼的最大运动幅度(话虽如此,不过好像没什么用)。

添加第二个控制点

在编辑模式添加一个单段骨骼(位于3D游标),然后将 IK 骨骼的极向目标(下称次要控制点)设置为该骨骼。




通过调整次要控制点的位置,可以微调受控骨骼的运动:
* 可能还需要将次要控制点的父级设定为主要控制点,以使其跟随主控制点的位移及旋转。


之后自己看着办吧……



这翻译也太怪了,你说“目标”谁懂啊?我还不是第一次遇到这种翻译误导人的情况;上次那个UV的缝合边的实际意思竟然是“不缝合的边”,搞得我花了大概一个小时才弄明白怎么展开UV。
已知问题:原版的武器动画的手腕位置好像有点奇怪……
给控制点加个【变换】骨骼约束,将目标骨骼设定为手部,拥有者改为局部空间,然后自己慢慢调吧……

已知问题:反编译会破坏第一人称动画中的手腕,即使未对其进行任何更改。
只是顺便说一下,再编译的模型(含动画)即使未经任何修改,对模型的二次编译也会破坏游戏内第一人称动画中的手腕(我还没把这个动作导入到游戏内测试)
* 这里的编译不是指用 vpk.exe 打包,而是指用 crowbar 编译模型。


这主要是因为 crowbar 所反编译的 .qc 文件有问题:



ikrule "rhand" touch "ValveBiped.weapon_bone" 意味着右手的 IK 约束强制附着在武器骨骼上,但是你看,反编译的动画并不存在这个名为 rhand 的 IK 约束,并且右手的骨骼也没有与武器骨骼存在位置上的重叠。

这个错误的产生可能与 crowbar 在反编译过程中的不明错误有关。将 ikrule "rhand" touch "ValveBiped.weapon_bone" 替换为 ikrule "rhand" release,问题解决。