GASP MM 示例配置问题

在学习GASP的过程中,发现直接用MotionMatching节点时,用relax系列动作,在持续超前跑的过程中,使用的一直是 M_Relaxed_Run_Loop_F 动画,配置在 PSD_Relaxed_Stand_Run_F_Loops 里(这个PSD里只有这一个动画),我参考这样的配置之后发现,我得项目里跑步动画会 70 帧、71帧然后27帧,不像GASP可以一直顺序 70、71、72、73这样播放;

用Rewind调试发现,GASP的动画过程中,已经播放过的帧数,会因为H原因被Discard(我理解就是播过就不选了),这个我的也一样;但是GASP里其他帧数,比如 71、72、73 是 H,74 是选出来的,其他帧数都因为 S 而被Discard(需要点ShowAllPoses才能看到),这部分我没有,不太确定原因是什么。

测了一下发现把GASP里 PSD_Relaxed_Stand_Run_F_Loops 上配置的 PSN_Relaxed_All 去掉,GASP就也会抽搐抖脚了(如附件中的视频),想知道具体的原因

<br/>

[Image Removed]<br/>

[Attachment Removed]

你好,

1、你的项目中顺序是 70 帧->71帧->27帧,而GASP中是70->71->72->73,这是很正常的现象,毕竟你们的资源不同,PoseSearch运行时选帧和Database内的数量还有Asset帧长并没有直接关系,是否选取取决于当前Pose姿态和目标姿态根据Schema上的一系列参数算出的cost大小。

2、Flags列代表的是该Pose候选被淘汰的原因,标记为“S”代表当前这个pose直接被过滤掉了根本就没有参与候选,可以简单理解为被算法“剪枝”给优化掉了,只有勾选"Show All Poses"才会显示出所有的pose(包含原因为“S”的),因为它都没参与候选,不勾"Show All Poses"就不显示了。

3、你去掉的那个资产是NormalizationSet,顾名思义,这是一个用来归一化的参数,和其他算法中的归一化类似,将多个不同的database归一化到同一个单位进行候选,例如,Idle的动画集和跑步的动画集“特征离散度”是不一样的,只有将他们归一化后才具有可比性,若是不归一化,运行时选中的动画帧可能会极端偏向其中的某一个集合。

[Attachment Removed]

  1. 我们用的动作是一个动作,从GASP迁移过来的,PSD也是一样的,但是PSN不一样,因为GASP的PSN里太多东西了,我们的没那么多,所以不清楚为啥cost
  2. 想知道这个S过滤是因为什么被优化掉,因为从动作上看,看不出特别大的差别
  3. 就是我理解PSN就是为了在多个PSD里选择用的,不太会影响一个动画序列上的帧数的选择,可能从A动画切到B动画,但是不应该是有没有PSN,会导致A动作从 70、71、72这样播放变成了70、71、27这样播放
    [Attachment Removed]

会有影响的,就相当于你对向量做归一化,分子相同,分母不同,得到的值肯定也不一样,而得到的值是送进算法的输入值,在算法和参数一样的情况下,对结果肯定有影响。

至于S过滤的问题,比较难用文字描述清楚,按默认算法PCAKDTree,首先输入的向量会被主成分分析投影到某个空间,真实输入已不具备解释意义,最后你希望的那个pose没有进KD-tree的Top-K而被筛选出去,感兴趣的话可以具体研究一下这个算法的执行。

并非“动作上看不出特别大的差别”就能被选中,肉眼看到的并不能代表真实情况,全程都是用算法来进行筛选的,筛选的标准就是你定义在Database和Schama内的一系列参数。

若是你希望某些pose被选中而没真实没被选中,可以考虑:

- 检查Continuing Pose Cost Bias参数

- 检查 Schema 里该通道的 weight,或考虑加一个新 channel 来表达你想匹配的特征

- 可以调大KNNQueryNumNeighbors的值,让S的Pose数更少一些

[Attachment Removed]