阿赵UE学习笔记——27、骨骼分层混合

本文介绍了如何在虚幻引擎中利用骨骼分层混合功能,将已有的站立开枪动画与行走动画混合,实现在不同状态下的开枪动画,如行走、跑步和蹲下。通过动画蓝图和状态机,控制特定骨骼的动画混合,简化了多状态动画制作。

阿赵UE学习笔记目录
  大家好,我是阿赵。
  继续学习虚幻引擎的使用,这次学习一下动画的骨骼分层混合。

一、使用情景

  之前我通过IK重定向,生成了很多钢铁侠的动画,其中开枪的动画有这些,主要是一个站立的开枪动画和一个卧倒的开枪动画。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  如果从一个射击游戏来说,按道理开枪动画还有很多,比如一边走路一边开枪,一边跑步一边开枪,还有蹲下来的时候开枪,跳起来的时候开枪。
  这些动画,如果要一个一个的做,也挺多的。所以虚幻引擎提供了一个骨骼分层混合的功能,可以把两个动画混合在一起播放。比如我已经有了站立的开枪动画,我可以把这个动画从根据一定的条件,和走路的动画混合在一起,形成一个走路时的开枪动画。

二、分层混合的使用

  先从站立动画和开枪动画混合做起。虽然我已经有了站立开枪的动画,但实际上站立的逻辑可能会有很多,比如还有一些小动作、转身之类。而我需要控制的开枪动画,其实只是从某根脊椎骨开始的动画。所以做站立待机和开枪的混合,也是有意义的,可以让角色下半身的动作不便的情况下,只是上半身射击。
  进入动画蓝图,进入状态机,然后进入idle状态。这里添加一个“每个骨骼的分层混合”节点,英文是Layered blend pre bone。
在这里插入图片描述

  添加了这个节点之后,会发现里面有三个主要的输入,分别是Base Pose、Blend Poses 0和Blend Weights 0,很明显,Base Pose就是原始姿势,Blend Poses 0就是需要混合的姿势,然后Blend Weights 0就是混合的时候Blend Poses 0动画的权重
在这里插入图片描述

  也可以继续增加混合的姿势,点击添加引脚,就会发现,增加了Bend Poses 1和Blend Weights 1了。
在这里插入图片描述

  接下来,把原来的idle动作连到Base Pose 上。然后把站立的射击动作拖进来,连接到Blend Poses 0上。最后把输出连到Result上。
在这里插入图片描述

  为了控制什么时候需要混合动画,所以需要建立一个叫做Attacking的浮点变量,连接到Blend Weights 0上。之后,我们可以通过其他的蓝图去控制这个Attacking变量,而达到播放混合动画的效果。
在这里插入图片描述

三、指定需要混合的骨骼

  刚才说过,射击动作其实只需要某根脊椎骨开始的骨骼的动画。所以打开骨骼视图,找到脊椎骨。我这里找的是Spine1.
在这里插入图片描述

  鼠标右键——复制选定的骨骼命名:
在这里插入图片描述

  然后回到动画蓝图的idle状态,找到刚才添加的每个骨骼分层混合节点,然后在层设置里面增加一个元素
在这里插入图片描述

  把刚才复制的脊椎骨名称填到这里来。
在这里插入图片描述

  这时候,这个混合作用的就是spine1脊椎骨以下的骨骼节点的动画了

四、测试动画

  在动画预览编辑器里面,找到Attacking变量,当这个变量为0的时候,可以看到,左边的动画预览播放的是普通的idle动画,然后节点连线,只有Base Pose的连线在动。
在这里插入图片描述

  然后在预览里面把Attacking改为1,这个时候,会看到左边的动画预览的角色上半身已经变成了射击动作,而下半身的动作还是维持着idle的动画。
在这里插入图片描述

  仔细看节点连线,会发现现在两个动画都已经在输入到混合节点了。

在这里插入图片描述

五、复制动画混合到其他状态

  刚才只是做了待机动画和开枪动画的混合,接下来,需要把这个混合复制到别的动画状态,比如移动、蹲下、卧倒等。
  在idle状态机,选择除了idle动画节点和result节点以外的其他节点
在这里插入图片描述

  鼠标右键——然后拷贝
在这里插入图片描述

  打开状态机里面的walk状态,会发现这个之前做了动画混合空间,无所谓,直接Ctrl+V粘贴:
在这里插入图片描述

  然后把动画混合空间的结果放到Base Pose,把输出节点连到Result上。
在这里插入图片描述

  这个时候,移动就已经得到了和开枪动画混合的效果了,同样的操作,把其他可以开枪的状态都复制粘贴一下这个动画混合就可以了。

### ### 骨骼分层融合节点(Layered Bone Blend)的作用 在 Unreal Engine 的动画蓝图中,`Layered Bone Blend` 节点用于对不同骨骼层级进行独立的动画混合。该节点允许开发者在动画混合过程中,为特定的骨骼层级应用不同的动画数据,从而实现更精细的动画控制,例如上半身与下半身的动画分离处理[^1]。 该节点通常用于状态机的输出节点中,支持多层动画叠加,并可指定每个动画层影响的骨骼范围。 ### ### Layered Bone Blend 节点的配置方式 在动画蓝图的 `AnimGraph` 中添加 `Layered Bone Blend` 节点后,可配置以下关键参数: - **骨骼路径(Bone Path)**:指定该动画层影响的骨骼层级,例如 `spine_02` 或 `upperarm_l`。 - **混合权重(Blend Weight)**:控制该层动画的混合强度,值范围为 0 到 1。可以通过曲线、变量或动画通知进行动态控制。 - **混合模式(Blend Mode)**:选择是使用加法混合(Additive)还是替换混合(Replace)方式。 ```cpp // 伪代码表示 Layered Bone Blend 的混合逻辑 if (BlendWeight > 0.0f) { ApplyAnimationLayer(AnimationData, BonePath, BlendMode); } ``` 通过这种方式,可以实现例如角色在奔跑时上半身执行射击动作、下半身保持移动动画的混合效果[^1]。 ### ### 使用 Layered Bone Blend 的注意事项 - **骨骼层级匹配**:确保动画资源与目标骨骼层级匹配,否则可能导致动画错位或异常。 - **混合权重过渡**:建议使用曲线或渐变变量控制混合权重,避免突然切换导致视觉突兀。 - **性能开销**:每增加一个骨骼层,都会带来额外的计算开销,应根据项目性能需求合理使用。 - **动画状态同步**:若多个动画层使用相同的骨骼路径,需注意动画状态的优先级与同步问题。 ### ### Layered Bone Blend 与其他混合节点的区别 与 `Layered Blend Per Done` 或 `Blend Space` 不同,`Layered Bone Blend` 更注重骨骼层级的独立控制,而 `Layered Blend Per Done` 是基于动画播放完成状态切换动画层,`Blend Space` 则是基于参数(如速度、方向)进行动画混合。三者可结合使用,以实现更复杂的动画系统。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值