Character
Character是什么?
Character是一种特殊的3D Entity类型,由一组具有层次结构关系的Body Parts所定义,后者是一个唯一的root对象的子孙。Root 定义了Character的位置与朝向。
Skin Character
一个skin Character 也是一种Character,它具有三种可能的body parts类型:skin , bones, dummies。Skin body parts是body parts的一种,它拥有一个mesh, 在进行动画时,根据一组bone body parts的位置变化,mesh会相应产生变形。一个skin character 只能有一个skin body part,。Dummies 是被动的body parts,它的矩阵可用于对象定位.
Skin character主要的优点是它没有 skin join 问题(运动时body parts之间的缝隙),它主要的限制是它的处理材质或纹理行为修正的能力。
每个skin body part有且只有一个mesh,在很多情况下,这可能更加方便(如,对于”Visual/Shadows/Shadow Stencil BB”,你仅需要把 Shadow Stencil Caster属性加在一个或多个skin body part上。)
Skin Character’的动画是轻量级的,灵活的。
Body Part Character
一个body part character 由一组body parts构成,它们拥有各自的mesh与可能的dummies,你可能需要使用”Mesh Modifications/Deformation/Skin Join BB”去解决运动时的缝隙问题。
Mesh Morpher Character
即使你的动画使用了不可知的动画控制器,通过采样对象的动画,也可以把动画导出成Mesh Morpher Character。这种方法存储每一个动画帧角色的所有mesh数据,采样率越低,动画文件也越小。这种动画技术相对于其他的动画技术来讲,会产生较大的动画文件。
动画创建时需要注意
一个character 应该让它的body parts联结到一个唯一的body part, 这个body part(root)给出了character的位置与朝向。在virtools中,应该让Z轴做为前的方向,Y轴作为上的方向。
与character相关的BB
一个可应用于3D entity的BB,可以应用于Character ,也可以是Character’s body parts,两者都是3D entity,当你管理复杂的层次集合时,不要忘记检查hierarchy 参数是否为true,尤其是使用3D Transformation BBs时。记住,一个 character 不直接拥有mesh,它的层次中的对象拥有。对这个概念的错误理解,容易导致一些问题,为何一个BB会失效。应该正确地就把行为应用到正确的body part上。举例来说,Simple Shadow BB 是应用到body part 上的,而不是应用到Character上。
使用动画:
Character Controller BB + "Controllers/Keyboard/Keyboard Controller BB" :这两个是最简单的使用动画的方式。
Unlimited Controller BB
这是实现复杂的动画控制的关键。
Wrap
“Start“会在那一个动画开始时创建一个过渡动画,除非你确定下一个动画应该从头开始播放(例如“跳“这个动画)。
“Best”找到best frame来开始下一个动画。”best frame”通过body part的朝向,位置,缩放等与当前动画帧的相似性来确定。这对于循环动画转换是非常有用的(如,从Walk动画到Run动画)
“Same”创建一个转换到下一个动画step(百分比)等于当前动画的step,与Best 相似,而又有更多的控制以用于动画同步。这个模式必须在产生动画就是应该有所计划。
可停止与不可停止
动画分为两大类:不可停止的(跳,跌倒,开门等)与可停止的。可停止的通常是循环动画,如Wait, Walk , Swim。
一旦一个不可停止的动画开始,它将会一直播放直到最后一帧完成。因此,当播放不可停止动画时,不再需要任何消息驱动动画。与此相反,Unlimited Controller BB 为了播放可停止的动画,在每帧它都需要接收正确的消息。
输入参数
对于普通的脚本,你可以根据愿望创建输入参数。可以根据”Unlimited Controller”对话框中对应的参数来创建输入参数,右击Cell,(这里是Wait Animation),选择“Create Input Parameter”
菜单。通过这种方法更多的控制参数可以被输入。
上图是一个使用array来参与控制动画的例子,通过键选择动画,当有多个键被按下,使用规定优先级。
不可停止动画的参数的变化在动画已经开始后不会被考虑,而可停止的动画会被考虑。举例来说,假如你改变一个正在运行的不可停止动画的“Animation”参数,新的值会在当前动画的最后一帧播放完后,有相应的消息传入时才发生改变。
在下面的例子中,Unlimited Controller BB(只有一行被修改) , 用来在任何时候为下一个动画设置新值,它每一帧都发送消息,直到动画输入参数与当前动画输出消息相等。(注;因为当发送一个消息时,本来是想转换动画,但此时可能正执行一个不可停止的动画,于是发送的消息被忽略了,于是还要继续发送,直到动画确实发生了改变为止)。
与
辅助动画:
辅助动画为角色运动增加了真实性。
通过”Unlimited Controller” BB,可以把一个动画说明为辅助动画,理论上讲,任何的”辅助“动画可以作为主动画使用。但在设计是好考虑好它的用途(作为主动画还是辅助动画使用)。
辅助动画的建立过程与主动画类似。然而它不能修改没有用到的body parts或是root body part的修饰量。“order”参数不存在,既然任何一个辅助动画都应该可以同时被播放,只要对于默认的body parts,它们不存在交迭.。最后调用的动画总是比先前调用的动画有优先权。”turn”与”orient”参数对于辅助动画没有用处。
Action参数值”Play Once” ,”Loop +Stay”会被考虑。
辅助动画参数也可以用作输入参数。
Behavioral animations
角色有时需要执行行为动画以模拟复杂与不可知的与环境的交互。行为动画可以作为别的主动画与辅助动画的补充。
混合动画
3D变换,一个技巧是保存跟踪正要修改的body part的直接父结点的矩阵。当行为应用于一组分开的body parts时,第一个问题是是否要使用Exclude from Animation BB。
假如你不用,body part的矩阵在帧开始时就会被当前动画设置。你可以在相同的帧处理3d 转换,body part 以它自己作为参考,与当前动画保持一致。主要的问题衰减参数难于使用。
假如你使用bb,3D 变换与应用到经典的3d object时相同。因此,与整个的Character 保持一致是较费脑筋的。
IK 反运动学
它从最后一个链成员来推导出body part的矩阵。这是个有力的工具,对于与环境进行精确的交互比较有用。目前,只有一个有关于IK的BB可以用:IK Position BB,.这容易使用,它不检查body parts的交互。
为避免不一致的问题,唯一的办法是自己做检测脚本。