[Havok学习笔记(2)] HAT样例AnimatedAttachments

来源:互联网 发布:js中的unicode编码表 编辑:程序博客网 时间:2024/06/06 02:37


        HAT 样例Animated Attachments(动画附件),这个样例主要展示了动画片段的编辑。

        

        

       动画


         


         在资源文件夹中,包含两组动画,一个是飞行的动画,一个是倒下的动画。

         

        点开文件夹,内有多组hkt文件,该文件是利用Havok Content Tools工具(HCT)从建模软件导入的。具体的导入方式在此默认已经了解。

        单击任一hkt文件,会在 3d Viewport窗口显示骨骼帧动画,可以点击播放查看动画。

        双击任一hkt文件(或右键properties),将会进入Animation Editor(动画编辑)界面。

        

        在这里,我们可以看到动画的属性。 属性包括 :

        Type(Normal / Additive) : 类型,普通或者叠加

        Duration                                 : 持续时间 (单位: 秒)

        Track Count                           : 轨迹计数  (可以匹配动画到合适的角色 - 对应于gujia)

        Number of Samples             : 采样数量

        Up/Down(x,y,z)                      : 坐标系

        Forward/Backward(x,y,z)     : 坐标系 

        时间轴:

      选择模式下,右键点击标注到某一事件点,viewport中将跳到该事件点状态。(注意 : 需要勾选右下角Show All Annotations On Timeline !)

        显示全部模式下,点击可以显示完整时间轴。

         缩放模式下,可以放大/缩小时间轴,向上看到更多细节,向下看到更长时间(也可用滚轮、鼠标右键放大缩小)。

        平移模式下,可以拖拽查看时间轴不同部分。

          删除对象。

        右上角包含一个属性Usage Count,即动画在行为中的使用次数。首先我们需要选定特定行为,然后再来观察计数属性,否则usage count将为0。


        行为


        行为文件夹中,包含两个行为,一个是射击npc倒下的行为,一个是飞行的行为。

        我们选中某一行为后,可以在右侧的Graph View编辑该行为。


       


      ● animatedGun.hkb

      第一个行为 : 射击行为。

        

       右侧的Graph View 显示了一个绿色节点(Nodes) : gunDefault。它是一个包含了其它行为的节点.

       我们双击这个节点,发现内部又包含了两个节点。


       


      在播放状态下,按住键盘shift键可以手动触发状态转移,idle状态下,角色静止;shoot状态下,角色倒地挣扎。


       一个黄色的节点 : idle,它是一个自定义生成器,类型为Reference Pose Generator (基准姿态生成器),是行为的默认起始状态。可以从任意状态转换到这一状态,前提是触发to_idle事件。

      双击可进入Custom Node Editor.

       
 

      Name一行显示编辑项的名字。

      Type表示项的类型,这里的类型为基准姿态生成器,它可以为角色骨架提供基准姿态(绑定姿态),这是HAT中一个内置类型,我的理解这就是物体的一个基本的、在平常情况下显示的状态。除此之外,内置类型还包括了:手动选择器生成器,它包含一个索引,是负责选择子节点的,只有在这个节点活动的时候,才会交换子节点;姿态匹配生成器,它将人偶和每个子生成器的第一个姿态匹配。除此之外,还可以添加自定义类型。

     Editing显示了正在编辑的属性名字。在这里显示为Top,表示我们正在编辑修改器的基底属性。子层级的属性由-->标注。


      点击它可以显示上一个选中项的编辑器。

     用于从点击上一选中项中返回。

     用于显示行为层次结构中父级的编辑器。

       双击后可以添加备注。添加了备注之后显示为:

      Usage Count : 在该行为中引用的绝对次数。

       选择下一个用例

       显示所有用例

      将当前引用作为一个副本,对其修改不会影响其他引用。(事实上,对所有引用都生成了一个新的副本)

       显示上级属性。只有在编辑数组或结构属性时才会启用,可以调至数组/结构的上级属性。

         添加数组元素

         删除数组元素

        上移数组元素

        下移数组元素

        在矢量/四元数属性中,点击可修改属性。


       下栏中显示属性,在这里,属性为空。

       属性包含如下内容:

       Property代表属性的只读名字,Type代表属性的值类型,Override代表该值的覆盖属性,可设置为none,Variable,Character,如果设置为none,那么这个值将·直接在HAT中设定,是一个常量;如果设置为Variable,那么它将是一个浮点变量,我们可以在游戏中修改这个值;如果设置为Character,我们给不同的角色设置不同的值。Value则代表了它具体的值。


        一个蓝色的节点 :shoot,为片段编辑器,也就是动画的容器,我们可以在这个编辑器中指定影响该动画的一些属性(播放模式,裁切时间,播放速度倍增量,动画持续时间)。可以由任意状态转换到这一状态,在to_shoot_gun事件下触发。

        双击节点进入片段编辑器

      

    


        在第一个属性选项卡中。

        开头是时间轴,它的基本操作和前面介绍动画编辑器中的时间轴相同。

        Override为none时,我们直接在行为文件中指定动画,为character时,该属性由动画角色属性中继承。右侧Animation显示的是对应的动画名。Bundle为动画丛,它可将多个动画资源归组成单个文件。

        播放模式(Playback Mode)包含了四种选项 : User Controlled下,运行到用户指定的某一点后,时间不再前进;Single Play模式下,只播放一次;Loop下会循环播放动画,Ping-Pong模式下会不断重复先正向播放,后逆向播放的过程。

        属性表格中,包含 : 播放速度倍增(Playback Speed Multiplier),也就是正常播放速度乘以一个倍数来改变播放速度,如果为负数,代表逆向播放;裁切起点(动画的起点移除的时间长度,默认为0),裁切终点(动画末尾移除的时间长度,默认为0),可以为变量,但在模拟过程中对其进行修改将是无效的。起始时间(Start Time),可以在裁切的基础上,选择播放的起点(尤其在循环播放中,不一定从最开始的时候播放);用户控制点(User Controlled Point),用户模式下,到该点后事件不会继续前进,此时起始时间、播放速度倍增、到终点继续运动属性将失效;指定持续时间(Sepcify Duration),片段总共持续的时间长度。

        Duration部分显示持续时间,Animation显示的是.hkx动画文件的持续时间,Clip显示的是片段的持续时间(可能经过裁切)。

        骨架映射(Skeleton Mapping),显示是否存在动画到骨架的映射(从bone_root到Bip01)

         分区(Partitions),不存在分区时显示Full Skeleton。

        Time Display Units显示的是时间单位,包括帧和秒。


        右下角三个checkbox,包括:镜像动画(Mirror Animation),需要先在角色编辑器启动镜像属性后,勾选才有效。我们可在此配置角色镜像操作的对称性;强制密集姿态(Force Dense Pose),可用基准姿态填入缺失骨骼。到终点继续运动(Continue Motion at End),仅在单次播放时启用,到动画播放结束时,会继续运动,但姿态会固定。

       

        在第二个事件选项卡中。

        最上方为时间轴,它的基本操作和前面介绍的类似。除此之外,它还会显示一些特别的属性。


        黑色部分为裁切部分,蓝色三角形为起点,下方的时间轴的时间反应了持续时间。

        (用户控制点)

        如果一些设置出错,片段会显示红色。


       左下角为触发器属性列表,在这里显示为空。

       

       左边的数字为时间发起的时间,右上角为触发器的名字。可以选择触发器关联的事件。

       代表触发器值最多发起一次,代表触发器可以循环发起。

       代表勾选“相对于终点”,代表未勾选“相对于终点”,如果设置为0,则会在片段结束时发生,设置为负数则在片段结束前发生……

       负载(payload)在名字下方,加入负载后可以给触发器关联额外数据。

       

       在时间轴上显示标注(Show Annotation on Timeline),勾选后动画的所有标注都会显示在时间轴上。

       为标注创建事件(Create Events for Annotations),点击后会自动生成一个与标注同名的事件。

       为标注创建同步点(Create Sync Points for Annotations),点击后会自动生成一个与标注同名的事件,并在每个创建出的事件上设置同步点标记。

       为标注创建触发器,载入.hkx动画的标注,并设置对应的触发器,如果事件不存在,会自动创建对应事件。

       如果为标注创建了触发器,勾选起选项可以禁止标注不会自动作为触发器使用。


       

       标注图图例。(事件触发器 / 同步点触发器 / 多片段触发器 / 相对于终点鬼影 / 标注 - 有事件 / 标注 - 无事件)


       双击事件to_idle,进入上一级,可以进入转换编辑器(Transition Editor)界面,在这里编辑的是状态转换(状态到状态 / 通配符转换)


 

        第一个选项卡显示了基本的操作。

        转换效果(Transition Effect)中,显示了效果的名字(如果没有,则为none)。编辑图标可以编辑该效果。

        可以选择的包括 : 混合转换效果(Blending Transition Effect),从to到from ; 外推转换效果(Extrapolating Transition Effect),从to到from,但不是模拟两个子项生成器,而是由2帧外推from生成器姿态;生成器转换效果(Generator Transition Effect),使用自定义动画效果;保持From混合转换效果(Hold From Blending Transition Effect),从to到from时保持from的原始姿态;手动选择器转换效果(Manual Selector Transition Effect),根据索引选择转换效果。

        持续时间(Duration)也就是转换的事件。


        对于通配符而言,我们可以选择状态为全局(Global)、本地(Local)或是两者(Both),前者意味着在任一状态机下都可发生,后者意味着仅在同一状态机下转换发生。

        如果勾选了Allow Self - Transition(允许自转换),意味着可以转换到自身。


       


        高级属性中。

        左侧是From状态。对于状态(State)选项而言,如果是通配符,那么该选项为(None),在下拉表中可以选择From状态。点击编辑可进入状态编辑器。

        属性窗口中,触发窗口开始(Trigger Window Begin), 确立获取事件的时间区间的起点;触发窗口结束(Trigger Window End),确立获取事件的时间区间的终点;发起窗口开始(Initiate Window Begin),发起(激活)转换的起点;发起窗口结束(Initiate Window End),发起(激活)转换的终点。

        简单来说,触发窗口期间,才会响应事件;而转换窗口决定了触发事件后什么时间内进行转换。


        右侧是To状态。State中包含当前的To状态,下面嵌套状态(Nested State)在使用嵌套状态机后,应该填入离To状态最近的状态机,否则为(none)

        条件(Condition)中,也就是仅在满足特定条件时才发生转换,可以使字符串条件/表达式条件/自定义条件。不存在为(none),否则为一个脚本。


        转换中的状态部分(State During Transition),选择在转换中哪个状态被视为活动状态,默认为To。

        中断优先级部分(Interruption Priority),控制是否可以中断,以及选定中断的优先级,值越高,越优先。


        最右边的一些选项 : 不允许随机转换(Disallow Random Transition),不允许返回上一个状态(Disallow Return to Previous State),邻接From状态终点(Abut at End of From State),禁用(Disable)


        直接双击事件,进入的是当前的状态转换效果编辑器。名字为CustomTransitionEffect02,类型为混合转换效果(Blending Transition Effect)。



       自转换模式(Self Transition Mode)也就是转换开始后的行为,它的选项包括:

       continue if cyclic blending if acyclic : 如果为往复式,则持续播放不被中断,否则会与自身混合。

       continue : 继续To状态,不中断

       reset  : 重设To状态到开始。

       blend : 使用混合重设To状态到开始。


        事件模式(Event Mode),默认状态下,如果转换子项活动,那么会发送、获取事件。可在设置中禁止两者或任意一个。

        持续时间(Duration),以秒为单位,指定转换发生的时间。

        To生成器起始时间分量(To Generator Start Time Fraction),转换开始时To状态起始时间。

        标记(Flags),默认为FLAG_NONE,即空;FLAG_SYNC,从from到to状态的转换将同步;FLAG_IGNORE_FROM_WORLD_FROM_MODEL,不考虑从模型坐标系到世界坐标系的转换,而由to生成器产生,其余几个类似;FLAG_IGNORE_TO_WORLD_FROM_MODEL,不考虑从模型坐标系到世界坐标系的转换,而由from生成器产生。

        结束模式(End Mode),基于from修改转换事件,如果为None,则不修改,如果为transition until end of from generator,则不考虑之前的持续时间,而是持续到from生成器结尾;如果为cap duration at end of from generator,转换播放不超过from生成器结尾,也就是舍弃多余的部分。

        混合曲线(Blend Curve),混合方式,几个选项:smooth,平滑三次过滤曲线(-6t^3 + 3t^2);linear,线性曲线(t);linear to smooth,初始线性末端平滑三次过滤曲线(-t^3 + t^2 + t);smooth to linear,初始平滑、末端线性的三次过滤曲线(-t^3 + 2t^2)

        对齐骨骼(Alignment Bone),具有不同根的动画混合时可以使用。


       在转换编辑器中回退到父级进入状态机编辑器

       


        名为gunBehavior,也就是一开始的绿色状态对应的。

        基本选项卡中。

        起始状态选择方法(Start State Selection Method),这指定了行为的起始状态。如果为default,那么我们始终采用默认的起始状态;如果为Variable,那么则由变量来控制状态;如果为Random,则随机选取;如果为Sync,这由hat管理的一个32位整数变量来决定状态,selectotr则是一个自定义选择器。右侧显示的是默认的起始状态,在这里是idle。

        下方左侧是状态名字,右侧是转换名字。

       


        回退事件(Go Backward Event) : 事件触发后,会回到上一个状态(如果存在的话)

        随机转换事件(Random Transition Event) : 事件触发后,会进入任一状态(条件:当前状态可以转换到的状态,或者通配符的状态)。

        下一个更高状态事件(Next Higher State Event) : 事件触发后,转换到下一ID更高的状态。

        上一个更高状态事件(Next Lower State Event) : 事件触发后,转换到下一ID更低的状态。

        是否活动 ( Is Active): 检测行为是否活动。

        当前状态ID (current state ID)。

        最大同时转换(Max Simultaneous Transitions): 可以同时激活的最大转换数量,默认32。

        自转换模式(self - transition mode),可以选的:don't transition(不发生自转换),use transition to start state(转换到起始状态,需要存在这一转换),force transition to start state(强制转换到起始状态,哪怕不存在这一转换)


        进入idle的状态编辑器



        子节点(Child Node),也就是状态包含的节点名称,这里是一个引用的姿态生成器。

        概率(Probability),随机时的选中概率。

        进入通知事件(Enter Notify Evenets),进入状态时发起的事件。

        退出通知时间(Exit Notify Events),退出通知事件。

        转换(Transitions),从该状态发出的转换,包含了名字和优先级。

       角色

       

        在characters文件夹中,可以看到角色相关信息。

原创粉丝点击