您可以使用 HumanIK 以与控制两足动物完全相同的方式控制四足动物的移动,条件是:
不需要明确激活角色的四足动物解算。除了角色化的区别,您可以使用与两足动物角色完全相同的过程来执行四足动物角色的 IK 解算或重定动画目标。
从生物力学角度出发,HumanIK IK 解算器用于四足动物的结果,通常不如用于两足动物准确。但是,解算器能够基于最小的 FK 动画库(小到是单个走动动画或单个空闲动画),在游戏环境中生成大量的可信四足动物,并且其逼真效果足以满足您的要求。可以使用 HumanIK API 提供的所有动力学 IK 控件在这些基础动画上放置其他的动力学移动,例如使用地板接触系统以适应本地几何体、使用到达实现前腿的攻击、使用 LookAt 控制器旋转动物的头部和上身,等等。
设置真实四足动物可能比较困难;请您记住,Autodesk 支持随时可以回答您关于四足动物的疑问及其角色化要求。如果您觉得无法正确角色化某一特定四足动物,请联系 Autodesk 支持并提供详细信息,最好提供包含模型或其骨架的 FBX 文件,我们的工程师将为您提供帮助。请参见支持。
此版本包含有效的代码示例,可演示如何设置几个不同类型的四足动物以便与 HumanIK 搭配使用,由于骨架结构不同,每个角色化要求也略有不同。
有关构建和使用 HumanIK 示例的详细信息,请参见 HumanIK 示例。
在您尝试设置四足动物角色之前,强烈建议您浏览该示例的代码以了解各种动物的设置方式和动画设置方式,并尝试四足动物示例以查看不同角色化生成不同 IK 解决方案的方式。
四足动物的角色化工作流与两足动物的相同:您可以通过编程方式或可视化地设置四足动物的角色化,如初始化中所述。
现实的四足动物骨架一般与人类骨架截然不同,甚至不同于其他物种的四足动物骨架。按照以下分部分概述设置角色化时,您必须考虑到这些区别,尤其是选择角色骨架中的关节和 HumanIK 解算器可辨识节点之间的映射。
此外,有关角色化特殊物种的详细建议,请参见本部分中的其他主题:马、长颈鹿、狗和狼等犬科动物以及黑斑羚等羚羊。
通常建议您使用 Verbose 版本的 HumanIK 库检查您的角色化,因为该版本能够验证角色化,并在角色化无效时提供有用的提示和诊断信息,例如,如果四足动物肢体未正确对齐到特定的轴,或者如果脊椎不够接近垂直轴。Verbose 版本表明角色是否可接受之前,请勿尝试使用 IK 解算器。附加信息请参见记录调试消息。
在使用四足动物角色之前,必须通过在用于两足动物角色的同一种中性站姿中提供四足动物角色每个节点的位置和旋转来角色化其几何体。请参见概述。尽管该站姿对于四足动物而言,明显显得古怪和站不住脚,但您必须按该方法设置角色以便将角色的骨架结构和身体部分的尺寸提供给 HumanIK。
下图显示的是在 MotionBuilder 中(左侧)和在 C++ 中通过编程方式(右侧)创建的相同的角色化。
不管物种或角色化创建方式如何,以下对于四足动物中性站姿的要求是相同的:
前腿对于轴方向具有不同的要求,具体取决于您创建角色化的方式:
请特别注意关节的滚动旋转:务必保证肘部绕 X 轴折叠,同时肘部应指向角色的背部。肘部关节弯曲时,前腿必须不从 (Y,Z) 平面偏转。如果未按这种方式设置前腿,IK 解算器可能会使动物的腿侧向折叠。
请特别注意关节的滚动旋转:务必保证肘部绕 Y 轴折叠,同时肘部应指向角色的背部。肘部关节弯曲时,前腿必须不从 (X,Z) 平面偏转。如果未按这种方式设置前腿,IK 解算器可能会使动物的腿侧向折叠。
映射角色的骨架中的大多数骨骼相对简单,类似于两足动物的一般骨骼映射。
但是,对于后腿和前腿,您有两个主要的映射选项。这些选项将针对腿部关节链中的关节生成不同的灵活性,这可能会影响角色的动画和蒙皮行为。选择哪个选项取决于您准备设置动画的物种特性,以及您希望获得的结果质量;您可以尝试使用这两种方法,并选择能产生最佳效果的方法。
如果选择该方法,您通常将腿部的最后一个关节(即控制蹄底方向的关节)映射到 LeftFootNodeId 和 RightFootNodeId。倒数第二个关节应该映射到 LeftAnkleNodeId 和 RightAnkleNodeId。
您可以使用内置于 HumanIK 的默认地板接触引擎,调整四足动物蹄或爪的位置和旋转以匹配地形。有关内置地板接触系统的详细信息,请参见脚和手接触。
在大多数情况下,您会希望将四足动物的手和脚都使用“蹄”接触类型。例如:
HIKSetPropertyValue(props, HIKHandContactTypeId, 3); // Hoof contact type HIKSetPropertyValue(props, HIKFootContactTypeId, 3); // Hoof contact type
内置地板接触系统可以设置相对快速一些,会占用相对较少的 CPU,并生成足以满足大多数使用的良好效果。但是,它仅能改变构成角色肢体的节点的放置。您可能会发现,调整角色的胸部或髋部以响应地面平面的放置,将改进最终姿势的真实感。例如,HumanIK 提供的 Quadrupeds 示例对脚和胸部应用了到达平移和到达旋转,以使整个身体响应地板位置的更改。尽管这会占用更多的 CPU 资源,但它能够获得更出色的外观效果。
使用两足动物角色,您可以通过调用 HIKGetDefaultState() 函数,在角色需要中性起始位置时随时检索和使用默认站姿。但是,由于此 T 形站姿对于四足动物而言通常不是非常有用的中性姿势,因此 HumanIK 提供了 HIKAddQuadripedOffset() 函数来自动偏移多个节点的旋转,以便将 T 形站姿转化为更适合四足动物的中性姿势。
HIKCharacterState * MyQuadrupedState = HIKCharacterStateCreate(MyQuadrupedChar, &malloc); HIKGetDefaultState(MyQuadrupedChar, MyQuadrupedState); HIKAddQuadripedOffset(MyQuadrupedChar, MyQuadrupedState);
通过调用类似的 HIKSubQuadripedOffset() 函数,您可以撤消将 HIKCharacterState 与这些偏移相加的操作。