[玩转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

相关文章

Oracle查询优化之高效实现仅查询前10条记录的方法与实践

《Oracle查询优化之高效实现仅查询前10条记录的方法与实践》:本文主要介绍Oracle查询优化之高效实现仅查询前10条记录的相关资料,包括使用ROWNUM、ROW_NUMBER()函数、FET... 目录1. 使用 ROWNUM 查询2. 使用 ROW_NUMBER() 函数3. 使用 FETCH FI

Python脚本实现自动删除C盘临时文件夹

《Python脚本实现自动删除C盘临时文件夹》在日常使用电脑的过程中,临时文件夹往往会积累大量的无用数据,占用宝贵的磁盘空间,下面我们就来看看Python如何通过脚本实现自动删除C盘临时文件夹吧... 目录一、准备工作二、python脚本编写三、脚本解析四、运行脚本五、案例演示六、注意事项七、总结在日常使用

Java实现Excel与HTML互转

《Java实现Excel与HTML互转》Excel是一种电子表格格式,而HTM则是一种用于创建网页的标记语言,虽然两者在用途上存在差异,但有时我们需要将数据从一种格式转换为另一种格式,下面我们就来看看... Excel是一种电子表格格式,广泛用于数据处理和分析,而HTM则是一种用于创建网页的标记语言。虽然两

java图像识别工具类(ImageRecognitionUtils)使用实例详解

《java图像识别工具类(ImageRecognitionUtils)使用实例详解》:本文主要介绍如何在Java中使用OpenCV进行图像识别,包括图像加载、预处理、分类、人脸检测和特征提取等步骤... 目录前言1. 图像识别的背景与作用2. 设计目标3. 项目依赖4. 设计与实现 ImageRecogni

Java中Springboot集成Kafka实现消息发送和接收功能

《Java中Springboot集成Kafka实现消息发送和接收功能》Kafka是一个高吞吐量的分布式发布-订阅消息系统,主要用于处理大规模数据流,它由生产者、消费者、主题、分区和代理等组件构成,Ka... 目录一、Kafka 简介二、Kafka 功能三、POM依赖四、配置文件五、生产者六、消费者一、Kaf

Java访问修饰符public、private、protected及默认访问权限详解

《Java访问修饰符public、private、protected及默认访问权限详解》:本文主要介绍Java访问修饰符public、private、protected及默认访问权限的相关资料,每... 目录前言1. public 访问修饰符特点:示例:适用场景:2. private 访问修饰符特点:示例:

python管理工具之conda安装部署及使用详解

《python管理工具之conda安装部署及使用详解》这篇文章详细介绍了如何安装和使用conda来管理Python环境,它涵盖了从安装部署、镜像源配置到具体的conda使用方法,包括创建、激活、安装包... 目录pytpshheraerUhon管理工具:conda部署+使用一、安装部署1、 下载2、 安装3

详解Java如何向http/https接口发出请求

《详解Java如何向http/https接口发出请求》这篇文章主要为大家详细介绍了Java如何实现向http/https接口发出请求,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 用Java发送web请求所用到的包都在java.net下,在具体使用时可以用如下代码,你可以把它封装成一

在C#中获取端口号与系统信息的高效实践

《在C#中获取端口号与系统信息的高效实践》在现代软件开发中,尤其是系统管理、运维、监控和性能优化等场景中,了解计算机硬件和网络的状态至关重要,C#作为一种广泛应用的编程语言,提供了丰富的API来帮助开... 目录引言1. 获取端口号信息1.1 获取活动的 TCP 和 UDP 连接说明:应用场景:2. 获取硬

使用Python实现在Word中添加或删除超链接

《使用Python实现在Word中添加或删除超链接》在Word文档中,超链接是一种将文本或图像连接到其他文档、网页或同一文档中不同部分的功能,本文将为大家介绍一下Python如何实现在Word中添加或... 在Word文档中,超链接是一种将文本或图像连接到其他文档、网页或同一文档中不同部分的功能。通过添加超