[玩转UE4/UE5动画系统>应用篇>功能模块] 之 Foot Lock系统(ALS V4实现方案详解)

本文主要是介绍[玩转UE4/UE5动画系统>应用篇>功能模块] 之 Foot Lock系统(ALS V4实现方案详解),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

本教程采用图文教程+视频教程的多元化形式,我会为不同的知识点选择适当的表达方式。教程内容将同步免费发布于 开发游戏的老王(知乎|CSDN)的专栏《玩转UE4/UE5动画系统》。教程中使用的资源及工程将以开源项目的形式更新到GitHub:玩转UE4上。

在这里插入图片描述
工程文件: 玩转UE4(GitHub)
在这里插入图片描述

0. 效果演示

本文提供的项目仅包含拆解版的Foot Lock系统,而Foot Lock系统需要结合其它系统才能体现出它的效果,所以我借用了ALS V4原作者的Youtube频道中Foot Lock系统的演示视频。

通过演示视频可以看到Foot Lock系统和Foot IK系统一样,也是一种装饰性的功能,而且是更精细的效果,不仔细观察甚至都感觉不出它的存在。简言之,Foot Lock系统的作用就是当角色在地面做旋转、翻滚等动作时防止重心脚打滑。

文章目录

    • 0. 效果演示
    • 1. 概述与原理
    • 2. 动画蓝图 事件图
    • 3. 动画蓝图 动画图
    • 4. 动画曲线

1. 概述与原理

因为一定是脚与地面接触才涉及到Foot Lock,所以ALS V4的作者把它放在了Foot IK系统中实现,相当于Foot IK的子系统,所以阅读本文之前请先阅读本系列的另一篇教程《[玩转UE4/UE5动画系统>应用篇>功能模块] 之 Foot IK系统(ALS V4实现方案详解)》

在这里插入图片描述

在Character中Mesh组件是Capsule的子组件,因此当Capsule有Transform(指:Location和Rotation)时Mesh也会有Transform,这时就不可避免地造成脚底打滑现象。于是,我们计算出当前脚部的Transform,再让它减去由Capsule产生的Transform,这样脚部就被Lock住了。

Foot Lock系统的实现包含两个核心方法:

  • SetFootLocking方法: 获取脚部Transform(Location和Rotation)。
  • SetFootLockOffsets方法: 计算由Capsule产生的Transform,反向补偿给脚部,这样脚部就被Lock住了。

具体哪些动画的哪些帧需要Foot Lock,分别由动画曲线FootLock_L和FootLock_R决定。

和Foot IK一样,动画蓝图的事件图负责计算数值,而动画图中的Transform(Modify)Bone负责实际的移动骨骼。

2. 动画蓝图 事件图

SetFootLocking方法

在这里插入图片描述

具体实现

在这里插入图片描述
注释:

  1. 获取FootLock曲线值Foot Lock Curve Value。
  2. 只有当Foot Lock Curve Value等于1或者Foot Lock Curve Value小于Current Foot Lock Alpha(当前的Foot Lock Alpha)时,才把Foot Lock Curve Value更新给Current Foot Lock Alpha。

换句话说只在Foot Lock Curve Value瞬时达到1或者Foot Lock Curve Value在逐渐减弱时才更新,只有这样Foot Lock才会有一种锁定的效果(你细品)。

  1. 如果Current Foot Lock Alpha等于1则记录当前的ik_foot在Component Space的Location(Current Foot Lock Location)和Rotation(Current Foot Lock Rotation)。
  2. 当Current Foot Lock Alpha大于0时,更新Foot Lock偏移量,即使此时胶囊体有位移,脚部也能保持不动。

SetFootLockOffsets方法

在这里插入图片描述
注释:

  1. 计算前后两帧之间Rotation Different(旋转差值)。
  2. 计算前后两帧之间Location Different(位置差值)。

注:先计算出世界坐标系上的偏移量,然后用Mesh的WorldRotation计算出Mesh空间的Location Difference

  1. 当前Location减去Location Different(Component Space)。
  2. 当前Rotation减去Rotation Different(Component Space)。

Location Different和Rotation Different都是用于反向补偿的偏移量。

3. 动画蓝图 动画图

Foot Lock在动画图中模块接入的位置

在这里插入图片描述

在这里插入图片描述

注:Transform(Modify)Bone的Translation/Rotation Mode 都是Replace Existing;Translation/Rotation Space 都是Component Space

4. 动画曲线

下面举几个ALS V4中使用了Foot Lock的动画资源的例子

动画资源:ALS_N_TurnIP_R90

在这里插入图片描述

动画资源:ALS_CLF_GetUpBackMontage_RH

在这里插入图片描述

动画资源:ALS_N_Mantle_1m_Montage_LH

在这里插入图片描述

它们的共同特征是当重心脚着地的一瞬间,重心脚的FootLock曲线值要设置为1。

另外还需要注意的是,FootLock只有在FootIK曲线有值的时候才有效,部分动画属于地面动画(包含在Locomotion状态机中),它们本身虽然没有FootIK曲线,是因为在状态机中使用了Modify Curve方法动态将FootIK曲线值设为1了。

这篇关于[玩转UE4/UE5动画系统>应用篇>功能模块] 之 Foot Lock系统(ALS V4实现方案详解)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/816076

相关文章

Spring Security自定义身份认证的实现方法

《SpringSecurity自定义身份认证的实现方法》:本文主要介绍SpringSecurity自定义身份认证的实现方法,下面对SpringSecurity的这三种自定义身份认证进行详细讲解,... 目录1.内存身份认证(1)创建配置类(2)验证内存身份认证2.JDBC身份认证(1)数据准备 (2)配置依

利用python实现对excel文件进行加密

《利用python实现对excel文件进行加密》由于文件内容的私密性,需要对Excel文件进行加密,保护文件以免给第三方看到,本文将以Python语言为例,和大家讲讲如何对Excel文件进行加密,感兴... 目录前言方法一:使用pywin32库(仅限Windows)方法二:使用msoffcrypto-too

C#使用StackExchange.Redis实现分布式锁的两种方式介绍

《C#使用StackExchange.Redis实现分布式锁的两种方式介绍》分布式锁在集群的架构中发挥着重要的作用,:本文主要介绍C#使用StackExchange.Redis实现分布式锁的... 目录自定义分布式锁获取锁释放锁自动续期StackExchange.Redis分布式锁获取锁释放锁自动续期分布式

springboot使用Scheduling实现动态增删启停定时任务教程

《springboot使用Scheduling实现动态增删启停定时任务教程》:本文主要介绍springboot使用Scheduling实现动态增删启停定时任务教程,具有很好的参考价值,希望对大家有... 目录1、配置定时任务需要的线程池2、创建ScheduledFuture的包装类3、注册定时任务,增加、删

SpringBoot整合mybatisPlus实现批量插入并获取ID详解

《SpringBoot整合mybatisPlus实现批量插入并获取ID详解》这篇文章主要为大家详细介绍了SpringBoot如何整合mybatisPlus实现批量插入并获取ID,文中的示例代码讲解详细... 目录【1】saveBATch(一万条数据总耗时:2478ms)【2】集合方式foreach(一万条数

使用Python实现矢量路径的压缩、解压与可视化

《使用Python实现矢量路径的压缩、解压与可视化》在图形设计和Web开发中,矢量路径数据的高效存储与传输至关重要,本文将通过一个Python示例,展示如何将复杂的矢量路径命令序列压缩为JSON格式,... 目录引言核心功能概述1. 路径命令解析2. 路径数据压缩3. 路径数据解压4. 可视化代码实现详解1

PyQt6/PySide6中QTableView类的实现

《PyQt6/PySide6中QTableView类的实现》本文主要介绍了PyQt6/PySide6中QTableView类的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学... 目录1. 基本概念2. 创建 QTableView 实例3. QTableView 的常用属性和方法

Python装饰器之类装饰器详解

《Python装饰器之类装饰器详解》本文将详细介绍Python中类装饰器的概念、使用方法以及应用场景,并通过一个综合详细的例子展示如何使用类装饰器,希望对大家有所帮助,如有错误或未考虑完全的地方,望不... 目录1. 引言2. 装饰器的基本概念2.1. 函数装饰器复习2.2 类装饰器的定义和使用3. 类装饰

PyQt6/PySide6中QTreeView类的实现

《PyQt6/PySide6中QTreeView类的实现》QTreeView是PyQt6或PySide6库中用于显示分层数据的控件,本文主要介绍了PyQt6/PySide6中QTreeView类的实现... 目录1. 基本概念2. 创建 QTreeView 实例3. QTreeView 的常用属性和方法属性

Android使用ImageView.ScaleType实现图片的缩放与裁剪功能

《Android使用ImageView.ScaleType实现图片的缩放与裁剪功能》ImageView是最常用的控件之一,它用于展示各种类型的图片,为了能够根据需求调整图片的显示效果,Android提... 目录什么是 ImageView.ScaleType?FIT_XYFIT_STARTFIT_CENTE