缓存录制与播放
发布于:2024-10-18
更新时间 | 更新内容 | 对应SDK版本 | 定位 |
2023-11-07 |
| V1.6.0 | |
2023-01-12 |
| V1.3.0 | |
2022-12-06 |
| V1.1.2 | |
2022-11-17 |
| V1.0.3 | |
2022-09-29 | 服装缓存录制与播放 | V1.0.0 |
一、准备工作
首先,需要在编辑器中勾选 ControlRuntimeModeInBlueprint ,勾选后将会禁用掉编辑器中服装缓存相关配置。RuntimeMode 被默认设置成 GarmentSimulate 模式。
其次,需要先在蓝图中获取 Style3DComponent。
二、生成服装缓存
Step1. 蓝图中调用 StartRecordGarmentCache 方法,开始记录服装缓存。
调用该方法后,RuntimeMode 将被设置成 GarmentCacheRecord。
CacheName:生成缓存的名称。
Record Setting:
CacheFrameRate:缓存生成时,每秒钟记录的帧数量。
SimulateRateScale:缓存生成时,相对于正常播放速率的缩放比例。
Step2.蓝图中调用 StopRecordGarmentCache 方法,停止记录服装缓存。
如果一直未调用该方法,则将会在游戏结束运行时,自动触发保存。
调用该方法后,RuntimeMode 将被恢复成 GarmentSimulate 。
三、播放服装缓存
Step1. 蓝图中使用 LoadGarmentCache 加载服装缓存。服装缓存必须先加载,后播放。也可以在BeginPlay时先加载多个缓存,然后蓝图中按需播放。
CacheName:被加载的缓存名称。
LoadingFinishedEvent: 加载成功后的回调事件。
LoadSuccess:是否加载成功。
Message:返回消息。如果加载不成功,将会告知具体的原因。
新增配置项
单线程加载
适用于缓存多,加载时间长的场景,可以单线程缓存加载,不会对主线程产生、
可配置加载缓存强制使用单线程慢慢加载,减少缓存加载对其他线程资源的消耗。
绝对路径加载
缓存设置中
勾选 Load From Absolute Path
Absolute Path中填入本地绝对路径(层级至服装文件夹)
Load Garment Cache中
填入服装缓存名称
卸载服装缓存
注意:正在使用的服装缓存不能被卸载
Step2. 加载成功后,使用 PlayGarmentCache 播放缓存。
CacheNameToPlay:被播放的缓存名称。
PlaySetting:缓存播放配置。
CachePlayRateScale:缓存播放速率控制。
ApplyPlayRateScaleToAvatar:是否角色动画的播放速率也同步调整。
返回值 CacheLoaded:如果播放时发现缓存尚未加载,则该值返回 false, 播放失败。
注意:目前服装缓存中没有存储人模信息。为了使服装缓存播放时,和人模动画保持一致,需要将人模动画重置到和缓存动画相匹配的位置。
暂停与继续播放
缓存支持暂停播放与继续播放
Step3. 播放结束后的回调事件。
播放结束后,RuntimeMode 将被恢复成 GarmentSimulate 。
可以通过绑定 GarmenCachePlayEndEvent 来配置服装缓存回调事件,如下图。
Step4. 播放过程中想要提前停止缓存播放,调用 StopPlayGarmentCache。
停止后,RuntimeMode 将被恢复成 GarmentSimulate 。
停止后,会触发 GarmenCachePlayEndEvent 事件。
注意事项
1. 录制缓存前调PoseFitting
先给角色设置动画,使角色姿势变为动画首帧姿势,然后再调用Pose Fitting
2. 录制一个和动画相同时长的缓存
将动画配置成动画蒙太奇,在蓝图中配置蒙太奇结束时停止录制缓存
3. 开始播放缓存时 首帧有跳帧
在缓存播放设置中勾选 Use Avatar Pose in Cache,在首帧应用人体姿势
4. 缓存循环播放 过渡不平滑问题
缓存播放设置中设置Blend Time for Loop Start End,设置循环播放时首尾帧间做混合过度
5. 缓存播放比角色动画快1帧的问题
蓝图连法1(推荐)
调用LoadingFinishedEvent事件,再连接PalyAnimation、PalyGarmentCache
缓存播放设置中不需要勾选Delay One Frame
蓝图连法2
调用Dealy事件(为缓存加载预留时间),再连接PalyAnimation、PalyGarmentCache
此时需要勾选Delay One Frame。因为Delay事件结束的触发会造成动画播放有一帧延迟。
6. 缓存停止播放后帧率上不去问题
缓存播放停止后,会自动切换为模拟模式,此时帧率比缓存播放模式低。
需要在停止播缓存后,手动设置runtimemode为缓存播放。
7. 加载缓存失败
通过以下蓝图加载缓存失败
原因:
加载 Setting 传给 C++ 的值和蓝图中展示的不一样 。
解决办法:
在蓝图里面创建变量,然后再加载就没问题 。
8. 缓存打包问题
打包后缓存播放异常一般于缓存文件位置变化有关
编辑器模式下,服装缓存存储在本地资源 项目工程文件夹>Content>Style3D>GarmentCache 中,可以用windows资源浏览器查看
解决方法1
打包后,缓存文件并没有迁移,需要手动复制迁移到打包后应用的Content文件夹下,保持缓存播放引用目录不变
解决方法2
缓存播放中设置绝对路径加载
缓存设置中
○勾选 Load From Absolute Path
○Absolute Path中填入本地绝对路径(层级至服装文件夹)
Load Garment Cache中
○填入服装缓存名称