天天看点

Final IK详解

Final IK详解

    • [Ⅰ] Limb IK
    • [Ⅱ] Arm IK

Final IK是 Uinty3D中的一个付费插件,它提供了多种反向动力学解决方案。

———————————————————————————————————————————

[Ⅰ] Limb IK

Limb IK 基于 Trigonometric IK,主要用于解决三段式手或腿类型的肢体上的反向动力学问题。

(其中 Trigonometric IK 是最基本的IK解算器,基于余弦定理解决了三段式骨骼结构。)

Final IK详解

Limb IK扩展Trigonometric IK只是为了添加一些额外的参数,比如多种弯曲修改器,即上图中的

Bend Modifier:

(1)动画:用于动画时,尝试保持弯曲方向;这个在用于胳膊三段式IK时会造成弯曲方向错误(用于腿部和躯干暂时没发现问题),但是它的好处是不穿模,保证外层蒙皮的完整。

(2)目标:旋转弯曲方向与目标 IKRotation一致;用于胳膊三段式IK时,动作角度大,不一定存在弯曲方向错误,且会破坏蒙皮

(3)父级:旋转弯曲方向与父变换组件(骨盆或锁骨)一致;用于胳膊三段式IK时,弯曲方向错误。

(4)胳膊:保持胳膊以生物自然的放松方式弯曲;保证胳膊三段式IK正确,但是会破坏蒙皮,这个是最适合胳膊三段式IK的,尽管有些姿态不准确。

(5)目标:使胳膊朝着弯曲目标组件的方向弯曲;用于胳膊三段式IK时,弯曲方向错误。

(注意:只有当弯曲修改器权重Bend Modifier Weight大于0时,才应用弯曲修改器)

Maintain Rotation:允许末端固定骨在求解完成之前保持在空间坐标中的旋转,这个主要用于脚向地面落下,需要重新放置脚但要脚旋转自如的时候。

Fix Transforms:当勾选时,则将在求解的所有Transforms 修复成每帧的初始状态。这样可以以较小的性能防止一些潜在问题出现

Bone1:第一根骨头(一般是大腿或者上臂)

Bone2:第二根骨头(前臂或者小腿)

Bone3:末端骨(手或脚)

Target:目标对象的变换组件,如果分配了,求解器会将 IKPosition 和 IKRotation 自动设置为目标位置

Position Weight:求解到目标位置的权重(IKPosition)

Rotation Weight:解算到目标旋转的权重(IKRotation)

Bend Normal:由骨骼位置定义的平面的法线。 当四肢弯曲时,第二根骨头将始终位于该平面上的某个位置。其实也是就是选择一个弯曲面。比如,利用IK我们可以知道膝盖的弯曲角度,但是膝盖的位置我们还是不知道。

Final IK详解

比如上图中,膝盖的弯曲角度都是90度,脚踝、大腿根的位置也都一样。膝盖的位置却不一样。所以虽然确定了弯曲角度后位置的解仍然有无数个。这个时候就要选择一个“弯曲面”了。因为人体的特殊性,在站着的时候大腿的朝向和脚的朝向一样。所以而我们选择脚所在的平面为弯曲面,就可以确定膝盖的空间位置了。当你添加完三块骨骼时,求解器会自动求解你可能选择的弯曲面。

Avatar IK Goal: 仅由“手臂”弯曲修改器使用。

———————————————————————————————————————————

[Ⅱ] Arm IK

Arm IK是 VRIK 四关节两足动物的手臂求解器。

Arm IK比 Limb IK更适合于胳膊的反向动力学,但是它多需要一根父级的脊椎骨,总共四根骨头。它的可调参数更多,通过调整参数,可以避免像Limb IK出现肘关节位置角度不对的情况。不怕麻烦的话,推荐使用Arm IK。

Final IK详解
  • 组件变量:

Fix Transforms:当勾选时,则将在求解的所有Transforms 修复成每帧的初始状态。这样可以以较小的性能防止一些潜在问题出现。

  • 包装变量:

Chest:最后一块脊椎骨,必须作为胳膊骨的父级;

Shoulder:肩胛骨;

UpperArm:上臂骨;

ForeArm:前臂骨;

Hand:手腕骨。

IK Position Weight:手目标的位置权重,如果没有目标,且权重值不为0时,手仍将被拉到目标的最后位置。手腕会随着目标的位置而移动。

IK Rotation Weight:手目标的旋转权重,如果没有目标,且权重值不为0时,手仍将被旋转到目标的最后旋转角度。手腕会随着目标的旋转而旋转,如果权重值为0,手腕不会转动。

  • 求解变量:

Target:手目标。不能设置为控制器本身,可以设置控制器的子物体,因此可以调整子物体的位置和方向来匹配手骨的方位。

Bend Goal:如果Bend Goal Weight不为0,肘部将会朝着目标方向弯曲。

Bend Goal Weight:如果权重值不为0,肘部将向弯曲目标移动。如果Bend Goal没有目标,将权重值设为0.5比较符合人体胳膊的弯曲方式。

Shoulder Rotation Mode:肩胛骨旋转的不同方法。

Shoulder Rotation Weight:肩部旋转的权重。

Shoulder Twist Weight:肩部扭转权重。

swivel Offset:肘部弯曲方向的角度偏移。

Wrist To Palm Axis(从手腕指向手掌的手骨局部坐标轴):用于定义手骨的方向。

Palm To Thumb Axis(从手掌指向拇指的手骨局部坐标轴):用于定义手骨的方向。

Arm Length Mlp:使胳膊更短或更长,通过前臂和手的局部坐标的位移来实现。模型胳膊不够长的时候,可以拉长模型的胳膊。

Stretch Curve:拉伸曲线。

———————————————————————————————————————————