在UE5.7的GASP示例项目中,Mover的ABP,默认使用的是StateTree+BlendStack的形式,但是在使用rewind录制回放时发现,PSD没有可以看details的曲线
而用简单的MotionMatching节点(把LocomotionSetup设为0),则能调试
我想调试看看为什么我自己配的start动画之后立马接了loop,而GASP里,start过度到loop有一个Trasition的时间,不知道这个是在哪里配的
在UE5.7的GASP示例项目中,Mover的ABP,默认使用的是StateTree+BlendStack的形式,但是在使用rewind录制回放时发现,PSD没有可以看details的曲线
而用简单的MotionMatching节点(把LocomotionSetup设为0),则能调试
我想调试看看为什么我自己配的start动画之后立马接了loop,而GASP里,start过度到loop有一个Trasition的时间,不知道这个是在哪里配的
Start不会很快切loop的问题我知道了,是因为Start的PSD中 Continuing Pose Cost Bias 调成了-0.3,更倾向于保持,所以不会很快切到loop,但是上边PSD不能查看曲线的问题还是没搞懂
Hey there,
When you enable the mover setup, make sure that you are using the FullMotionMatchingMode to get the correct output, it defaults to using the StateMachine/Blendstack hybrid by default. You can do this in the widget settings. This logging output for the StateMachine/Blendstack hybrid mode is further down in the capture and captures generic choosers and blendstack players; it is not continuously motion-matched.
Dustin
还想补充提问一下,就是在 Rewind 调试中,如果PoseSearch 处于我配置的 PSD_Run 中,那么details中可以看到有 FR、RR、RL 等动画候选
但是如果处于 PSD_Run - PSD_Stand 状态中,那么details 中只有 FR 候选,可是这时候角色其实是向左前移动的,表现为动画是向右前移动的 FR 动画,但是角色向左前放移动 想问下这是什么原因,以及 PSD_Run - PSD_Stand 是表现处于这两个融合的状态么再补充问一个问题,当我的速度是600的时候,不会选出 PSD_Run,而是使用了默认的 fallback,但是我改成 (300, 601) 就可以了,是不是这个 float range 是左开右闭 的区间范围
在Widget中切换LocomotionSetup,我理解就是切换了 SandboxCharacter_Mover_ABP 中使用哪个,如果是 0,即FullMotionMatchingMode 那就是直接使用节点;如果是1,则使用 StateMachine/Blendstack hybrid 模式。我遇到的问题就是,FullMotionMatchingMode 在 rewind 里可以看到PSD 的曲线值,但是 hybrid 模式 rewind 录制后看不到 PSD 曲线值。
没有太理解你提到的 “it is not continuously motion-matched.” 是什么意思
你好,我来帮忙解释一下。
“it is not continuously motion-matched.” 意思是这套新方案不是每帧都进行PoseSearch的匹配。
我必须强调一下,当前这套新组合方案还是Experimental,不建议应用于项目生产中。
这套新方案并不像FullMotionMatchingMode那样每帧会进行搜索。
它的MotionMatching调用在SetBlendStackAnimFromChooser函数的第三步,只有当ChooerTable选出的结果内含有Use MM打开才会进行PoseSearch,意味着,当前方案一般仅在过度时进行匹配,前提还得是你勾上Use MM。
你可以尝试将ChooserTable的结果都勾上Use MM,然后Rewind录制查看,有部分段的PSD是可以看details曲线的
了解了,那我还是先用纯MotionMatching节点的方式尝试和学习,然后我还问了两个问题能帮忙也看下么,感谢
“PSD_Run - PSD_Stand” 意思是 PSD_Run + PSD_Stand
从你的截图看,你应该使用的是FullMotionMatchingMode方案吧。
在FullMotionMatchingMode方案的On Update函数中,有一部分逻辑是对ChooserTable进行过滤,选中有效的资源才送进节点进行匹配,可以检查一下,你的ChooerTable配置是否有问题,你想要的结果是否被过滤掉了?
写错了,左闭右开
Float Range的开闭取决于你的配置,可以看Detai面板中,有“No Min”和“No Max”选项,勾上以为着“(”、“)",不勾以为着“[“、”]”
我看到这个选项了,但是应该这个 nomax 的意思是无上限吧

嘿嘿,不好意思,我搞错了,你说的是对的。
从代码上看,一般情况下,左右都是闭的。
可以在FFloatRangeColumn::Filter函数下个断点看一下,是否是配置上出现的问题。
或者可以Rewind Debug内查看一下ChooserTable的选择,是否是前面两个参数没过造成的
还想问一下,就是我看到FullMotionMatching的方式下,start接loop是用 CurvePhase 和 CurvePhase 偏移 -0.01 的方式来进行动画帧选择的(比如PSD_Relaxed_Stand_Run_F_Loops)
我理解这个-0.01的目的是,判断phase是 -1到1,还是1到-1的趋势,避免左右脚算反了(因为如果不考虑这个,右脚在前的0.7曲线值和左脚在前的0.7曲线值是一样的)有两个问题:
Phase不是单纯的左右脚,一般我们指的是相位,即在行走的循环中,抬腿、放腿、贴地这一系列离散过程的连续表达。
针对0.01和0.02的问题,我并不认为和帧率有关,我们的PoseSearch方案提供了很多参数供用户调试,针对不同的动画训练集,不同的运动模型,不同开发人员的动作审美,参数大概率是不一样的,0.01对于GASP效果好并不代表完全适用于你的项目,都需要按照自己项目的实际情况进行调整,这也是使用MotionMatching方案的难点之一。
cost的计算可以简单的理解为向量差,代码内会稍微复杂一点,有兴趣的可以自己查看一下。
还有一个问题,是我自己的项目中,PSS的 CurveChannel(Phase的),使用的 contining Pose,GASP 使用的 Chatacter Pose,我理解区别就是如果有 contining Pose就用,没有就是 CharacterPose,Start且Loop的过程,第一帧loop是没有continuPose,第二帧以及之后的每一帧都是 continingPose 和 CharacterPose 是一样的,那表现应该没有区别。但是我选CharacterPose,切到RunLoop就会表现不会,循环卡在几帧动画里。很奇怪
CurveChannel 应该只是计算动画上曲线的值把,那我理解是不是和Pose没有关系?

可能和你理解的有点不一样。
UseCharacterPose:用的是当前角色Pose作为输入,数据需要从PoseHistory内读取
UseContinuingPose:用的是当前播放的动画序列的下一帧Pose数据作为输入,数据从当前的动画序列直接取,无需额外计算
一些适用场景供你参考:
UseCharacterPose:初始搜索时;需要打断当前动画及时响应输入时;需要精确的反应当前角色状态时;
UseContinuingPose:用于动画过度,保持当前动画的连贯性;性能优化,直接取,无需多余计算;
CurveChannel 理论上只关注曲线上的数据