XSI群组动画解析及实例应用Word文档下载推荐.docx

上传人:b****4 文档编号:16348630 上传时间:2022-11-23 格式:DOCX 页数:14 大小:281.72KB
下载 相关 举报
XSI群组动画解析及实例应用Word文档下载推荐.docx_第1页
第1页 / 共14页
XSI群组动画解析及实例应用Word文档下载推荐.docx_第2页
第2页 / 共14页
XSI群组动画解析及实例应用Word文档下载推荐.docx_第3页
第3页 / 共14页
XSI群组动画解析及实例应用Word文档下载推荐.docx_第4页
第4页 / 共14页
XSI群组动画解析及实例应用Word文档下载推荐.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

XSI群组动画解析及实例应用Word文档下载推荐.docx

《XSI群组动画解析及实例应用Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《XSI群组动画解析及实例应用Word文档下载推荐.docx(14页珍藏版)》请在冰豆网上搜索。

XSI群组动画解析及实例应用Word文档下载推荐.docx

智能类(基于节点控制,可选择行为的)或说是AI类

这一类的制作是基于节点控制、选择的,也就是说在某种情况下,选择某种行为。

这种方式类似于人的基本活动,所以也就被现在很多的影片采用。

它可以实现角色在复杂地面的行走,而不会产生滑步,而且可以使角色具备动力学的特性,可以开发战斗,寻找,混合等多种复杂行为。

由于这种制作方式是通过节点激活行为的方式来实现的,也就为事件制作的深度和广度提供了可能。

但是这类制作有一定的难度,不但要有一定的编程技巧,还要能很好的规划角色的行为流程。

现在国际使用的这类商业制作软件主要有以下几种:

Massive、Behavior和Aitool,接下来我们以Behavior来做一些实例分析

(影片《IROBOT》使用Massive制作了复杂的群组动画 

见图4)

Behavior是AVID公司出品的一个专门用于群组动画制作的软件,我们首先来了解一下这个软件的工作流程

(工作流程图 

见图5)

这个软件要与SOFTIMAGE|XSI配合使用,首先在要在XSI中进行模型,动画及准备设定,之后通过DotXSI文件输入到BEHAVIOR中进行群组动画制作,完成后再通过DotXSI倒入XSI或直接使用MentalRay渲染。

而在BEHAVIOR内部的制作流程可参考下图

(BEHAVIOR内部工作流程图 

见图6)

在BEHAVIOR内部包含主代码设计、常数文件设计、节点设计、文件输出几大部分

(BEHAVIOR界面 

见图7) 

 

(动作捕捉现场 

见图8、见图9)

而对于原始的动作数据我们一般会采用MotionCapture的方式,这样可以节省大量的时间和人员

我们先来看一下BEHAVIOR的基本例子

1.打开BEHAVIOR。

2.按F11或点击XsiViewer

3.用ImportXsiActor倒入在XSI内设置好的角色

4.用鼠标右键点击角色,你会看到角色预设置好的动画目录,这时随便点那个动画项目,角色就会运行该项目定义的行为

(见图10)

5.接着我们在Piccolo内创建一个简单的行为代码,代码的名字叫Startup.pc

useconstants"

drive_constants"

;

//调用常数参数

functionmain()//主程序

{

engine.RunScript("

rtk"

nil);

//调用内核脚本

globalvarworld=engine.GetCurrentWorld();

//声明全局变量,确定内核脚本影响当前模型场景

vargold=Actor("

Gold0"

);

//将模型引入一个变量中,以便进行控制

varsa;

//声明sa变量

varsa=CreateSkillActivity(gold,"

talk"

50);

//用函数CreateSkillActivity为角色加入动画条目“talk”并使该行为每次开始延时50毫秒

sa.SetFlags(drvSKILLACTIVITY_LOOP);

//将该行为循环使用

world.AddActivity(sa);

//将该行为加入模型场景,给角色使用

}

(见图11)

通过上面这个简单的例子,我们可以看出BEHAVIOR内代码的基本组成,下面让我们再看几个简单实例来更好的了解群组动画的分类和制作

1.简单UnMotion动画。

在这类动画中,角色不移动,只有原地行为,适合表现庆典,欢送的人群类的场景。

首先,在BEHAVIOR内导入一个设置好的地面和角色,打开XsiViewer,打开Populate表格,设定好参数后用鼠标在地面上绘制角色的Proxy。

(见图12)

接着用ActorParticles将Proxy转化为角色

(见图13)

建立一个startup.pc文件,并输入以下代码:

useconstants"

functionmain()

{

globalvar 

world=engine.GetCurrentWorld();

varlist=world.GetActorList("

Female"

varactor;

for(actor=list.First();

actor!

=nil;

actor=list.Next())

{actor.AttachHFSM("

key"

}

在这段代码中,我们用一个循环语句将每个角色都给与一个HFSM(我们可以理解为行为编辑器),这个叫“key”的HFSM要在StateMachine中创建。

接下来在这个HFSM中加入一个行为节点State_1并键入以下的代码:

{

varindex=Math.Rand()%3;

if(index==0)

sa=CreateSkillActivity(actor,"

happyA"

200);

elseif(index==1)

happyB"

elseif(index==2)

happyC"

sa.activity.SetStartTime(world.now+Math.Rand()%2000);

}

(HFSM内的State_1 

见图14) 

(最终动画效果 

见图15)

在这段代码中,我们使用条件语句对每个角色的行为进行随机选择,并对错开每个角色动画的起始时间,下面我们就可以编译代码,检查动画了

2.Motion动画。

在这类动画中角色根据以设定路径曲线方向,或目标点移动并避开障碍物。

这类动画适合表现城市街景,军队的队伍,难民或繁忙人群的景象

首先准备场景,准备完成后再加入一些障碍物,并用FlockGoal设置目标点

(准备场景 

见图16)

在startup.pc内建入以下代码

functionmain()

varworld=engine.GetCurrentWorld();

varflock=newDrvFlock(0.4);

SceneGoalFlock(flock);

actor=list.Next())

{

AddFlockActor(actor,"

walk"

90,0);

vari;

for(i=0;

i<

flock.GetNumSceneGoals(world);

i++)

flock.EnableSceneGoals(world,i);

在这里,我们使用了一个FLOCK的类,也就是把多个角色作为一个物体来考虑,并通过FlockGoal设置了行为的目标点,这样角色就会向目标点移动,并避开行进路径上的障碍物

(避开障碍物移动 

见图17)

3.Dynamic(动力学)动画。

这类动画适合表现战争中的爆炸,灾难类的场面

准备场景,然后在startup.pc内键入以下代码

vargravity=newDrvVector(0,-98,0);

varERP=0.2;

globalvarg_dyn=newDrvDynamics(gravity,ERP);

varg_actor,g_terrain=InitActor("

Terrain"

globalvarmovable=FALSE;

globalvarbounce=0.5;

globalvarfriction=0.5;

varma=newDrvDynamicsActivity(g_dyn,g_terrain,movable,bounce,friction);

world.AddActivity(ma);

Male"

for(g_actor=list.First();

g_actor!

g_actor=list.Next())

g_actor.AttachHFSM("

}

functionInitActor(name)

varlist=world.GetActorList(name);

actor.GotoHomeConfig(TRUE);

varG=actor.GetRootNode().GetGlobalTransform();

G.Identity();

actor.GetRootNode().SetGlobalTransform(G);

returnactor;

见图18)

在这里我们用了一个嵌套函数InitActor,这个函数的主要作用是初始角色的位置,在这里我们用它初始化地面。

我们还调用了一个新的函数类DrvDynamics,这个类负责对整个动力学系统进行设置。

在“key”内,我们建立一个行为激发,DM_KEYBOARD_KEYDOWN是转化的激发条件,我们按下键盘任意一键,角色的行为就会转化到下一个节点所定义的行为

(见图19)

绿色代表初始节点,初始节点的代码如下:

一个简单的行走动画

在expo节点内加入爆炸的代码:

world.DestroyActivities(actor);

G.position.y=1;

movable=TRUE;

varda=newDrvDynamicsActivity(g_dyn,actor,movable,bounce,friction);

world.AddActivity(da);

varroot=actor.GetNodeByName("

Spine"

varsrc=newDrvVector(5,-3,93);

varmagnitude=8;

vardepth=3;

ApplyImpulse(da,root,src,magnitude,depth);

在这段代码中,我们定义了爆炸的位置,强度,范围,和角色所被影响的节点。

当编译程序,角色移动到爆炸点时,按下键盘任意一键,角色会被炸飞并落到地面与地面发生碰撞,摩擦(见图20)

以上这些就是群组动画的一些简单例子,其中一些点还可以有一些更复杂的应用。

群组动画只是计算机三维动画的一个分支,还是需要与三维动画的其它部门进行密切的合作,比如模型的导入,导出,渲染时生成mi文件对于贴图、材质的调用,前期运动数据的采集和修改,都是需要考虑的环节。

(《骇客帝国》中的群组动画是很多部门共同合作的结果 

见图21)

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 电子电路

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1