• 查看作者
  • Unity表情动画第二弹

    在Unity中实现BlendShape表情和骨骼动画混合

    表情实现机制

    一般都是三种中选一种

    1 换模型面部贴图,UV动画实现

    优点:换贴图的话,如果做得精细,可以表现得内容特别多,表情丰富,2D、3D都可以使用

    缺点:贴图内存占用是个问题,美术制作麻烦,还需要代码逻辑实现

    2 面部骨骼动画

    缺点:动作美术工作量问题,权重分配受限,可能没啥突出优点,都没在网上找到过类似例子……

    3 BlendShape表情

    优点:美术控制Morphing参数,每个表情额外只占用一个动画信息,10-20K,表情也可以很精细,导出表情动画不需要代码,动画状态机控制

    缺点:2D不能用

    综上,选用了BlendShape表情,网上已有关于BlendShape表情的文章,都是代码来控制SkinnedMeshRenderer上BlendShape的权重,表现很僵硬。所以,为了要生动的表情动画,本文直接使用美术导出的表情动画,而不是程序控制,这样就会完美还原美术制作的表情动画。

    先放一张效果图,希望大家多多关注我们公司的游戏《王牌御史》~

    Unity表情动画第二弹

    代码很少,下面直接上教程。

    BlendShape表情

    BlendShape表情,主要工作量在美术,美术制作好表情动画之后,导入Unity中按照下面设置播放即可

    表情动画制作

    美术方面:美术额外导出一个FBX,带有蒙皮信息、骨骼动画只保留一个造型、单独面部的动画信息(Morphing)

    经过测试,只有美术网格、骨骼、蒙皮、Morphing动画一起导出来的Fbx才能保留表情动画信息

    表情动画导入

    导入到Unity中,基础模型要开启Import BlendShape

    对应的面部SkinnedMeshRenderer上会多出BlendShape的配置(调整这些值就可以看到表情变化了)

    Unity表情动画第二弹


    ModelImporter

    Unity表情动画第二弹


    SkinnedMeshRenderer

    按照美术的制作,裁切动画片段,下面的每一个动画片段,就包含了美术制作的表情动画

    Unity表情动画第二弹


    动画导入拆分

    也可以每个表情动画导出一个fbx,根据项目选择一个FBX然后拆分多个动画 或 每个动画单独一个FBX 都可以

    设置动画状态机正确设置Layer

    双层状态机:为了面部表情独立出来,不与基础动作绑定死,可以通过代码逻辑自由组合播放

    左图第一层控制角色动作,基础骨骼动画(跑、跳、肢体的害羞动作等)

    右图第二层控制表情动画,表情动画(面部表情,开心 难过 眨眼 等)

    Unity表情动画第二弹


    基础动画状态机

    Unity表情动画第二弹


    表情动画层

    使用AvatarMask

    对于上面第二层状态机,需要有一点注意一下,小齿轮中Mask,需要制定一个AvatarMask,受这层状态机影响的骨骼或蒙皮

    Unity表情动画第二弹



    AvatarMask(动画遮罩):可以控制哪部分骨骼或蒙皮受影响

    FaceLayer中的Mask只需要开启面部蒙皮,这样只有面部受第二层状态机影响

    在Project试图 右键 然后 Create/Avatar Mask 可以创建AvatarMask,然后指定对应Fbx中的avatar,就可以导入模型骨骼蒙皮信息

    设置如下图,只需要选择面部的蒙皮

    Unity表情动画第二弹


    播放逻辑

    控制播放的逻辑,播放基础动作的时候,配套播一个面部表情,这里可以根据项目情况,角色动作和表情自行组合

    animator.Play(actionState, layerIndex); 可以播放指定层的动画 Unity表情动画第二弹

    • 大版主
    • 小版主

    暂没有数据

    暂没有数据

  • 到底部