Character

Character是什么?

Character是一种特殊的3D Entity类型,由一组具有层次结构关系的Body Parts所定义,后者是一个唯一的root对象的子孙。Root 定义了Character的位置与朝向。

Skin Character

一个skin Character 也是一种Character,它具有三种可能的body parts类型:skin , bones, dummiesSkin body partsbody 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 entityBB,可以应用于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的矩阵。这是个有力的工具,对于与环境进行精确的交互比较有用。目前,只有一个有关于IKBB可以用:IK Position BB,.这容易使用,它不检查body parts的交互。

为避免不一致的问题,唯一的办法是自己做检测脚本。

posted on 2007-04-28 15:56 清源游民 阅读(1394) 评论(2)  编辑 收藏 引用 所属分类: Virtools

FeedBack:
# re: 学习笔记Virtools白皮书之动画
2008-03-18 20:08 | winmine90
有些virtools上的问题想请教你一下,不知道怎么与你联系?
  回复  更多评论
  
# virtools可以制作虚拟人吗?
2009-02-12 18:59 | 勿忘我
您好,请教您个问题,vrtools可以制作虚拟人吗
我的目的是能够控制四肢的动作,包括手指的弯曲等。
而且动作不是预先在3dmax里制作的动画 ,是不可预测的。
是否能通过编程控制dof结点来达到目的呢?效果如何呢?能否自动产生弯曲的皱纹呢?
之前我的想法是在poser里做造型,在creator里创建dof,在vega里通过vc编程。但好像很难。
请高手指教。多谢啦  回复  更多评论
  

只有注册用户登录后才能发表评论。
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


<2007年4月>
25262728293031
1234567
891011121314
15161718192021
22232425262728
293012345

留言簿(35)

随笔分类(78)

随笔档案(74)

文章档案(5)

搜索

  •  

最新评论

阅读排行榜

评论排行榜