文档摘要:一份有关顶点动画导入/导出的文档,供程序员而非美工使用。
文档修改日志:对于Maya特别注释和常用推荐,由Erik de Neve最近更新。原作者为Al Reed(Main.DemiurgeStudios)。
导出和导入顶点动画
顶点动画流程需要一些简单编程,将网格物体置入引擎中。与骨架动画不同,此动画不会在动画浏览器中显示。因此,本指南将针对程序员,而非美工。
何时使用顶点动画?
顶点网格物体与静态网格物体以及具有骨骼的网格之间存在明显差异。我们将简要介绍这三种网格物体。
- Static Meshes静态网格物体): 在这三种网格物体当中,最易于创建和实施。这些网格物体始终无法变形。
- Skeletal Meshes(具有骨骼的网格物体): 这些网格物体被装于一个潜在且不可视的支撑骨骼结构上。当骨骼移动时,这些加权顶点也会移动。多个动画可在相同网格物体上进行混合,以便于平滑过渡和新建动画。
- Vertex Meshes(顶点网格物体): 最为灵活的顶点网格物体,允许通过不断操作单个顶点位置,实现大幅度的网格物体变形或精细控制。不可混合动画,在同一时刻仅有一个序列是活动的。
不幸的是,无法实现具有骨骼的网格上的顶点动画,因此在设计过程中应当作出选择,确定一个模型将被置于何种类型的网格物体上。牢记顶点动画可能非常耗费时间,因此在您作出决定时,还应考虑到这方面的因素。角色应当始终为具有骨骼的网格物体,大多数环境将由静态网格物体组成。顶点网格物体适用于流体或布状物体表面,例如风中飘扬的旗帜这些在使用具有骨骼的动画对网格物体精细控制时计算成本高的物体。此外,它们还适用于要求大幅度变形的模型——如一堵有生命的脉冲样突起的墙。
从Gameplay与动画结合的角度看,顶点动画不允许将多个序列混合在一起,并且存储空间将随着帧数和顶点数一起增加。对于骨架角色而言,它将与骨骼数及帧数一起缩放,并且能够在编辑器中利用有损压缩算法,作进一步的压缩。此外,一些骨架角色如机器和车辆,可利用“rigid-parts(刚性部分)”优化,从本质上将其转换为有效渲染静态网格物体的集合。鉴于这些原因,以及更复杂的导出和导入路径,通常不鼓励使用顶点动画,旗帜和横幅等相对低多边形波动对象相关的循环动画除外。
导出
为了导出一个顶点动画和网格物体,打开Maya或3DS Max中的ActorX。根据需要,设置下列选项。其它选项不会影响顶点动画。
输出文件夹
对于输出文件夹而言,您需要指定一个代码包子目录,将模型置于名为“Models(模型)”或类似名称的文件夹中。例如,如果您希望使用“Guns”文件包中的这个模型,您可以将其存放到.../< YourGame >/Guns/Models中。
动画文件名称
在此字段中,填入动画名称。最终,这还将成为网格物体文件名的名称,尽管您以后可予以修改。
帧范围
在此字段中输入您希望导出的帧范围。例如,“0-10”指的是将导出0—10个帧。注意ActorX顶点动画区不存在类似字段,“动画范围”将会被忽略,不得应用于顶点动画。
添加至现有
如果您希望为单个模型导出多个动画,则首先导出一个动画,然后对于任何其他动画而言,应将这个框选中。动画数据将被添加到先前动画的末端。当我们设置脚本文件时,我们将会把整个动画文件分隔成为独立的动画。
在您设置好这些选项之后点击ActorX顶点动画区的“Export(导出)”按钮。点击这个按钮,将会在“Output Folder(输出文件夹)”字段指定的文件夹中创建两个文件,名为<AnimationName>_a.3d和<AnimationName>_d.3d。这个_d文件实际上是网格物体,而这个_a文件包含动画信息。
Maya特别注释
Maya ActorX的导出界面比3DS Max更简单些,利用“axvertex”指令即可调用。您需要利用主要导出工具窗口(“axmain”),指定输出路径以及动画文件名。此外,导出工具希望在场景中至少有一个Maya关节与动画网格项链,以便创建一个基础的多级结构。
导入
#exec's
为了导入顶点动画网格物体,您需要在脚本文件中放入一系列的“#exec”指令。这将促使动画数据在含脚本的文件包被编译的情况下导入到.u文件中。
MESH IMPORT(网格物体导入)
创建一个脚本文件,并使用下列#exec指令来导入模型:
#exec MESH IMPORT MESH=<SomeNameForYourMesh> ANIVFILE=..\<PackageName>\Models\<_A.3d Model File> DATAFILE=..\<PackageName>\Models\<_D.3d Model File> X=<OffsetX> Y=<OffsetY> Z=<OffsetZ>
MESH ORIGIN(网格物体原点)
然后,您需要利用下列#exec指令为网格物体指定一个默认原点和旋转:
#exec MESH ORIGIN MESH=<SomeMeshName> X=<OriginX> Y=<OriginY> Z=<OriginZ> ROLL=<RollOffset> PITCH=<PitchOffset> YAW=<YawOffset>
ROLL、PITCH和YAW参数范围被指定为—256—256.—64,例如顺时针旋转90度。X、Y和Z采用虚幻单位(Unreal Unit)。
MESH SEQUENCE(网格物体序列)
对于您导入的每个动画而言,您需要指定动画文件中的某些帧对应您以后能播放的动画。如果需要的话,可以让多个动画使用同一帧。一般而言,较为实用的做法是指定一个动画对应文件中的所有帧。下文是您创建这种动画的方式:
#exec MESH SEQUENCE MESH=<SomeNameForYourMesh> SEQ=All STARTFRAME=0 NUMFRAMES=XXX
确保MESH参数中的数值与上文导入的exec中的数值相同。SEQ指的是动画的名称。对于每一个动画而言,您均需要创建一条这样的指令行。如果您不确定帧数,或动画的起始帧,只需将它们全部导入,然后启动UnrealEd并查找“All(所有)”动画。下一章节将介绍更多有关如何查看网格物体的内容。
TEXTURE IMPORT(贴图导入)
然后,您需要将贴图导入到.u文件中,使其能被指定给网格物体。下列exec指令将为您处理该部分内容:
#exec TEXTURE IMPORT NAME=<TextureName> FILE==..\<PackageName>\Models\<TextureFileName> GROUP=<SomeGroup>
这个指令将贴图放到.u 文件中,在这个文件中,它既可通过UnrealEd中的贴图浏览器进行查看和使用,也可利用其他#exec指令或脚本本身来进行查看和使用。如果您的网格物体被指定了多个贴图,那么您则需要多次调用。
MESHMAP SETTEXTURE(网格物体贴图设置)
最后,您需要将各个贴图指定给网格物体。下列exce指令将完成这项工作:
#exec MESHMAP SETTEXTURE MESHMAP=<SomeNameForYourMesh> NUM=<MaterialID> TEXTURE=<TextureName>
对于网格物体使用的每个材质id,您均需要一条这样的指令行。
DefaultProperties(默认属性)
在脚本文件的默认属性中,您需要将已导入的网格物体指定给脚本文件中描述的actor。将下列指令行放到脚本文件的默认属性区中,即可完成这项操作。
<verbatim>
Mesh=Mesh'ThisPackage.MeshName'
</verbatim>
创建.u文件
保存您的脚本文件,并照常编译文件包。您将会发现编译器正在导入网格物体。
在Unrealed中查看
为了在UnrealEd中查看到被导入的网格物体,点击Mesh Browser(网格物体浏览器)按钮,打开网格物体浏览器。