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

相关文章

nginx -t、nginx -s stop 和 nginx -s reload 命令的详细解析(结合应用场景)

《nginx-t、nginx-sstop和nginx-sreload命令的详细解析(结合应用场景)》本文解析Nginx的-t、-sstop、-sreload命令,分别用于配置语法检... 以下是关于 nginx -t、nginx -s stop 和 nginx -s reload 命令的详细解析,结合实际应

SpringBoot3.X 整合 MinIO 存储原生方案

《SpringBoot3.X整合MinIO存储原生方案》本文详细介绍了SpringBoot3.X整合MinIO的原生方案,从环境搭建到核心功能实现,涵盖了文件上传、下载、删除等常用操作,并补充了... 目录SpringBoot3.X整合MinIO存储原生方案:从环境搭建到实战开发一、前言:为什么选择MinI

使用Python删除Excel中的行列和单元格示例详解

《使用Python删除Excel中的行列和单元格示例详解》在处理Excel数据时,删除不需要的行、列或单元格是一项常见且必要的操作,本文将使用Python脚本实现对Excel表格的高效自动化处理,感兴... 目录开发环境准备使用 python 删除 Excphpel 表格中的行删除特定行删除空白行删除含指定

golang程序打包成脚本部署到Linux系统方式

《golang程序打包成脚本部署到Linux系统方式》Golang程序通过本地编译(设置GOOS为linux生成无后缀二进制文件),上传至Linux服务器后赋权执行,使用nohup命令实现后台运行,完... 目录本地编译golang程序上传Golang二进制文件到linux服务器总结本地编译Golang程序

Linux下删除乱码文件和目录的实现方式

《Linux下删除乱码文件和目录的实现方式》:本文主要介绍Linux下删除乱码文件和目录的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录linux下删除乱码文件和目录方法1方法2总结Linux下删除乱码文件和目录方法1使用ls -i命令找到文件或目录

MySQL中的LENGTH()函数用法详解与实例分析

《MySQL中的LENGTH()函数用法详解与实例分析》MySQLLENGTH()函数用于计算字符串的字节长度,区别于CHAR_LENGTH()的字符长度,适用于多字节字符集(如UTF-8)的数据验证... 目录1. LENGTH()函数的基本语法2. LENGTH()函数的返回值2.1 示例1:计算字符串

Spring Boot spring-boot-maven-plugin 参数配置详解(最新推荐)

《SpringBootspring-boot-maven-plugin参数配置详解(最新推荐)》文章介绍了SpringBootMaven插件的5个核心目标(repackage、run、start... 目录一 spring-boot-maven-plugin 插件的5个Goals二 应用场景1 重新打包应用

SpringBoot+EasyExcel实现自定义复杂样式导入导出

《SpringBoot+EasyExcel实现自定义复杂样式导入导出》这篇文章主要为大家详细介绍了SpringBoot如何结果EasyExcel实现自定义复杂样式导入导出功能,文中的示例代码讲解详细,... 目录安装处理自定义导出复杂场景1、列不固定,动态列2、动态下拉3、自定义锁定行/列,添加密码4、合并

mybatis执行insert返回id实现详解

《mybatis执行insert返回id实现详解》MyBatis插入操作默认返回受影响行数,需通过useGeneratedKeys+keyProperty或selectKey获取主键ID,确保主键为自... 目录 两种方式获取自增 ID:1. ​​useGeneratedKeys+keyProperty(推

Spring Boot集成Druid实现数据源管理与监控的详细步骤

《SpringBoot集成Druid实现数据源管理与监控的详细步骤》本文介绍如何在SpringBoot项目中集成Druid数据库连接池,包括环境搭建、Maven依赖配置、SpringBoot配置文件... 目录1. 引言1.1 环境准备1.2 Druid介绍2. 配置Druid连接池3. 查看Druid监控