首页 理论教育虚拟现实运动过渡方法的应用实践

虚拟现实运动过渡方法的应用实践

【摘要】:图5-15结构表示意图3)过渡运动构建运动图的核心思想就是在不同运动之间寻找过渡点,在相似帧之间构造过渡运动,把初始的运动集组织成一个图结构。

运动合成算法研究如何根据已有的运动片段,来生成满足一定需求的新的运动序列。其中,运动图技术作为一种有效的人体运动合成算法在该领域被广泛地应用。

运动图技术的核心思想是以图的方式将不同的运动连接起来,将生成新的运动序列的问题转化成根据运动图寻找路径的问题。一般方法构建的运动图只包含一些正常的走、跑等基本运动,很少将一些不同的运动风格包含其中。如果一个运动图中包含多种不同风格的运动,而且这些运动之间可以自然的过渡,那么就可以根据角色人物的心情变化或者故事的需要在不同时间选择不同风格的运动,来使刻画的人物更形象生动。

图5-14 运动混合结果(输入运动为正常地走和欢快地走,混合结果融合了二者的特点)

1)运动分割

运动分割是对运动捕获得到的原始数据进行预处理的过程,截取运动中小的片段作为后面系统的输入。因为考虑到某些行为具有周期性,例如正常的走路或者跑步都属于周期运动,对于这类行为的运动,我们完全可以用一个完整周期来表示就可以了,长时间的运动可以通过这个片段上循环若干次得到。

首先,我们以走路为例简要介绍下运动的周期,左脚迈一步,接着右脚迈一步,就是一个周期单元,右脚迈出一步,接着左脚迈一步也是一个周期单元,起始姿态完全可以从任意帧的姿态开始,历时若干帧回到相同姿态,即为一个周期。

我们采用的分割的原则如下:

(1)选取若干个完整周期。

(2)相同行为的运动(如不同风格的走),从相同姿势开始截取。

我们截取一个片段去代表整个运动作为后面系统的输入,可以减少很多冗余帧的数据,从而免掉了这些数据的计算时间。因为采用运动图的运动合成方法会在数据集的任意两个相关运动之间做大量计算,所以用周期片段作为输入,对于大数据集情况,减少的计算时间是非常可观的。虽然说选取一个周期的片段足以表示一个运动,但是考虑到后面我们会在不同运动片段之间寻找过渡点,这时运动片段越长,意味着我们可能找到的过渡点也就越多,可以达到更灵活的跳转。综合考虑,我们从原始运动上截取两个完整周期的片段。

从相同姿态开始截取运动,是因为在后面部分有时我们需要在相关运动之间计算配准曲线去生成中间运动。如果两个片段从相同姿态开始,可以计算得到更长的配准曲线,那么根据这条曲线生成的中间运动也就一般包含两个周期,否则生成的运动可能只包含一个周期甚至更短。显然长的运动片段会和其他运动有更多的过渡点,这就是从相同姿态开始截取的原因。

对于分割后得到的运动片段,我们采用一定的命名规则,以行为和风格来命名,例如,一段偷偷摸摸走路的运动片段命名为Walk_creepingly。如果一个运动表示的是两种行为之间的过渡运动,那么还要在文件名中体现出是一个过渡运动,例如,一个运动是从正常的走路过渡到慢跑的运动,那么这个运动相应地被命名为Transition Walk_normal Run_slowly。采用这种命名方式可以方便运动数据库的管理。

2)结构表

结构表是我们所提出的一个新的概念。所谓运动图的结构就是指在运动图内部不同类型的运动之间的组织关系,按运动表现的不同行为来具体分类,一个类别代表一种行为,同一类别下面又包含多种不同风格的同一行为的运动。例如,总体上可以分为走、跑、跳、舞蹈武术等几个大类,每个类又包含很多不同风格的运动,走的行为里面可以包括慢走、快走、得意地走、悲伤地走、偷偷摸摸地走等多种风格的走。

我们设计一个结构来描述这些不同行为类之间的关系,每种行为表示成一个节点,不同行为类之间的过渡运动也可以表示成一个节点,行为之间关系如图5-15(a)所示。但是这样仅仅描述了行为类之间的关系,在每个节点内部多样风格的运动以及它们之间的过渡运动并没有区分开,所以每个节点内部还可以用相同结构来描述不同风格运动之间的关系,节点内部运动之间关系如图5-15(b)所示。

根据前面的分析,要给运动数据合理的分类至少需要分两层结构来管理,我们设计一种两层的表结构,称为结构表,结构表是在构建运动图时同时构建的,会把每一个运动的信息存储在结构表中相应的类别下面。这就像管理一堆文件,这些文件都有自己的编号,所有文件都按编号先后顺序存放,我们手中有一个文件的分类表,需要做的工作就是把每个文件的编号填写到相应的类别下面,在需要查找某个特定内容文件的时候,根据所属类别在表中找到文件编号,就可以快速定位这个文件了。结构表是两层结构,第一层表结构的每个单元都可以展开成另一个表结构,也就是第二层表结构,第二层表结构中的单元是最基本单元,存储的是运动在运动图中的位置和长度信息。

图5-15 结构表示意图

3)过渡运动

构建运动图的核心思想就是在不同运动之间寻找过渡点,在相似帧之间构造过渡运动,把初始的运动集组织成一个图结构。带结构表的运动图的构建仍然保留这个核心思想,但我们把过渡运动分为两类,一类是不同行为之间的过渡,另一类是属于同一行为不同风格运动之间的过渡。下面分别加以介绍。

(1)不同行为之间过渡。每种行为的运动有各自非常明显的特征,不同行为的运动姿势差别非常大,人为生成的不同行为间的过渡看起来会显得很生硬,不够自然流畅,所以我们使用原始的过渡运动片段去连接它们,从而也避免了很多不合理过渡的出现,例如,在一段跳芭蕾的运动和一段跑步的运动上找到了相似帧,可以生成一个人为的过渡,但常理上,跑步和跳芭蕾之间的突然过渡是很不合理的。

在我们的方法中,当加入一个原始过渡运动到运动图时,假设这个运动是开心的跑到快跑,被命名为Walk_happily_to_Run_fast,我们直接在结构表中查找到Walk_happily和Run_fast的位置信息,只和这两个运动寻找相似帧,而在无结构的运动图中插入这一个运动就需要和所有其他运动都去计算相似度,耗费了很多不必要的计算时间,而且还可能产生不合理的过渡。图5-16描述的是过渡运动生成方法的对比。

图5-16 不同类型运动之间的过渡

(2)不同风格运动之间的过渡。前面已经介绍了不同行为间的过渡,这里要介绍的是属于同种行为的不同风格的运动间的过渡,例如,开心的走和正常的走两个运动之间如何过渡。

这样的过渡运动在数据库中很难找到,需要人为生成。虽然我们考虑的不同风格的运动都属于同一行为,它们应该有着相似的运动姿态,但很多时候发现它们并不足够相似到使得计算出的相似度能够达到我们的阈值要求,所以在构建出的运动图上,它们之间很可能没有任何连接。如果运动图中包含的不同风格的运动多半是孤立的或者彼此之间过渡非常的少,那么包含再多的风格的运动也没有多大意义。

为了解决这个问题,我们使用类似于Zhao和Safonova提出的生成插值空间的改善图连通性的方法[72]去生成不同风格运动间的过渡,不但可以改善运动图的连通性又可以保证光滑的过渡。其主要思想是在原始运动片段之间人为生成一系列的中间运动,构成一个插值空间,把所有这些原始运动和人为生成的中间运动都作为输入构造运动图,从总体上改善运动图的连通性。我们可以使用这种方法在两个不同风格运动片段之间生成一系列中间运动,以中间运动作为桥梁构建原始运动间的高质量的过渡。

直接用插值的方法生成的中间运动的结果是无法保证质量的,我们需要使用到配置曲线方法生成中间运动,首先在不同风格运动间寻找配置曲线,根据配置曲线做插值生成中间运动。配置曲线方法具体见5.3.3节。

根据得到的配准曲线,再分别设定不同的权重,进行多次插值,可以得到多个中间运动,这些中间运动组成一个插值空间。Safonova等提出的方法是把原有的运动片段和人为生成的所有中间运动都作为输入构建运动图,这样相当于增加了若干个新的运动,所以在每两个运动之间都要寻找相似帧[72]。结合图5-17说明,如果权重分别设为0.2、0.4、0.6、0.8,相应会生成4个中间运动,用M1、M2、M3、M4表示,原有运动用S1、S2表示,按相似性排序应该是S1、M1、M2、M3、M4、S2,相邻运动间的相似性比较大,相隔比较远的运动间相似性比较小,多半不存在相似帧,即使存在相似帧,例如M1和M4存在相似帧,我们可以寻找到一条经过S1、M1、M4、S2的路径,但是这样的过渡往往非常短,看到的结果就是两个运动间的过渡非常快,显得很生硬。所以我们的方法是只在相邻运动之间寻找相似帧,分别在S1和M1、M1和M2、M2和M3、M3和M4、M4和S2之间寻找过渡点,这样不但保证一定过渡时间,而且还可以减小大量不必要的比较,减少计算量提高效率

图5-17 构造插值空间寻找过渡

4)运动图优化

运动图的优化和运动图的构建过程是同时进行的,针对插入到运动图中的不同类型的运动,采用不同的局部优化方法。我们的优化方法有两个特点,第一个特点是采用局部优化的方法,速度快;第二个特点是,根据运动类型的不同,采用不同的优化策略,更有效地去掉了不合理的分支,避免了无效的过渡。(www.chuimin.cn)

在无结构的运动图中的剪枝方法是在整个运动图构建结束之后,在运动图上寻找最大连通子图,而寻找最大连通子图的方法一般都有很高的复杂度。对于带结构表的运动图,优化问题可以用另外一种更简单有效的方法解决,就是在构建运动图的时候就开始局部的剪枝,运动图构建结束时图中就不包含任何死路,这种方法不但快速,而且在构建时剪枝,可以优化后面构建的结果。

输入的原始运动分为两类:基本运动和过渡运动,基本运动描述的是一个行为的运动;过渡运动则是不同行为之间的过渡。针对不同类型的运动,有不同的优化方法。

(1)修剪不连通分枝。对于每个基本运动在加入运动图的时候首先在自身寻找过渡点,这种过渡点我们在后面统一称为自循环点,通过自循环点可以回到前面的某一帧。后面提到的过渡点,如果不加特殊说明的话,默认是过渡到其他运动片段的过渡点。我们的优化思路是:我们把运动片段上最后一个自循环点到片段末尾的部分作为一个不通分支直接剪掉,那么即使在运动片段没有找到过渡运动也可以通过最后一个自循环点向前跳转到某一帧之后继续寻找过渡点。

简单的去掉最后一个自循环点到结尾部分的不通分支会产生连接错误,以一个非常短的运动片段为例,如图5-18所示,运动片段C只有9帧数据,用c1,c2,…,c9表示,c7是最后一个自循环点可以跳转到c3帧,在我们算法中c8、c9属于死路应该被删除掉,但c2帧存有到c8帧的连接,c7帧也存有到c8帧的连接,这些相关的连接都应该被删除掉,否则会在加入下一个运动片段之后,莫名其妙地成为一个过渡点。在删除这些帧的数据之后,再在结构表里记录运动片段的起始帧和长度信息。这样操作之后,就保证了在基本运动上不会遇到死路,即使没有找到跳转到目标运动的过渡点,也可以通过最后一个自循环跳转到前面某一帧选择继续寻找或者跳转到其他运动,再由其他运动跳转到目标运动。

图5-18 剪掉不通的分支

剪掉不通分支还会导致的另一问题是搜索过渡点时可能进入死循环,当寻找的运动片段上不存在过渡到目标运动的过渡点就会在自身运动片段上不断循环。解决方法很简单,就是控制循环次数,从寻找过渡点开始遇到最后一个自循环点时我们做个标记,如果第二次遇到最后一个自循环点,那么意味着已经完成了一次循环搜索了所有可能区域而且没有找到过渡点,继续循环已经没有必要,因此搜索停止。

图5-19 去掉无效的过渡

(2)去掉无效过渡。不同风格运动之间的过渡是人为生成的,生成插值空间寻找过渡的方法也可能产生无效的过渡,以图5-19为例。

这里寻找的过渡运动是指从原始运动片段上的某一过渡点开始经过多个中间运动最后跳转到目标运动的路径对应的运动。过渡运动可能在某个中间运动上进入死路,无法跳转到目标运动,这时我们可以通过删除某些连接来避免进入无效过渡。在插值空间里寻找的过渡是双向的,一个方向上的死路可能包含另一方向过渡需要的帧,所以不能选择直接删除无效的过渡。避免进入断路的方法可以是去掉路径的第一个连接,如图5-19所示,完全不会影响到在中间运动上寻找其他的过渡运动。原始运动片段上面一般存在多个通往中间运动的过渡点,需要测试每一个过渡点,判断是否是有效的过渡,如果是无效过渡就取消掉第一个连接,如果是有效过渡,就把过渡运动的信息填入到结构表。反方向的过渡运动的寻找方法是一样的。

5)运动图搜索

运动图构建完成后,运动图的优化工作也随之完成,此时就可以在图上搜索一条满足用户需求的路径,这条路径对应的运动就是新合成的运动。我们提供界面让用户输入对运动序列的要求,选择行为、风格,并输入需要的帧数。

通过前面的工作,我们已经构建好了一个连通性很好的运动图,相关运动之间会有很多过渡点,基本运动本身也有很多自循环点,这些使得跳转变得非常灵活。但是用户对每种运动规定了需要的具体帧数,所以搜索的时候具体选择哪个自循环点和哪个过渡点需要一定的策略,才可以更好符合用户要求。

为了方便理解,我们先介绍运动序列里只包含两个运动的情况。假设运动图中包含一个长度90帧的运动片段A和一个长度130帧的运动片段B,用户希望合成一个包含500帧A运动,之后转变为B运动并持续300帧的新运动。我们需要制定个好的策略确定在什么时候选择哪个自循环点或者过渡点。

为了解决这个问题,我们提出一个迭代算法,自动在运动片段A和B上选择合适的自循环点和过渡点,如表5-1所示。

表5-1 迭代查找算法

如果用户需求的是包含多个运动的序列,上述算法仍然适用,只需要多次调用即可,最后搜索出的路径对应的运动就是满足用户需求的路径。

6)试验结果

我们通过实验数据在构建时间、运动图连通性、搜索时间、生成运动的质量等几个方面对带结构表的运动图和无结构运动图做个对比分析。

(1)构建时间。表格5-2列出了第一组实验的输入数据,包含走、跑、跳三个行为,每个行为包含很多不同的风格,总共有19个运动,2 236帧数据。选择这个数据集的目的是为了考察我们的方法在处理多个包含不同行为和不同风格的运动情况下,构建运动图的效率。 

表5-2 实验数据集1

我们以第一组实验数据作为输入,分别构建标准运动图、带结构表的运动图,对比构建时间。实验结果表明,标准运动图的构建需要140分钟,而带结构表的运动图构建时间只需要57分钟。我们在做这次对比实验的时候,并没有使用增强连通性的任何方法,所以构建的两个图的连通性是相当的。

(2)连通性。我们进行第二组实验,分析不同运动图的连通性。表5-3列出了实验数据,总共有6个运动,772帧。我们用第二组实验数据分别构建标准运动图、wcMG运动图[72]、带结构表的运动图,通过计算过渡点的总数来衡量图的连通性的强弱。加入wcMG运动图作为比较,是因为wcMG运动图同样使用了构建插值空间寻找过渡运动来增加运动图的连通性。

表5-3 实验数据集2

表5-4显示了第二组的实验结果,wcMG运动图和带结构表的运动图增加了增强连通性的方法,所以需要生成很多中间运动,也就相应增加了部分计算量,构建时间要比标准运动图构建时间长,但是从过渡点个数来看wcMG运动图和带结构表的运动图的连通性显然比标准运动图好很多。实验结果中wcMG的过渡点个数要比带结构表的运动图多,并不意味着连通性更好,是因为wcMG只是完成了构建,没有进行优化,图中可能包括很多不通的分支,或者无效的过渡。我们的方法在构建同时进行优化,不但减少了人为生成的中间运动的数量,而且去掉了不通的分支或者无效的连接。实验结果也证明,带结构表的运动图可以在更短时间内构建一个连通性很好的图。

表5-4 实验结果

(3)搜索时间。带结构表的运动图的搜索类似于有结构的运动图的搜索,而且还可以包含很多种类风格的运动,根据用户提供的需求直接查结构表或者进行局部搜索就可以,搜索可以瞬间完成,效率非常高。另外一个明显的特点就是搜索时间完全不会受运动图规模的影响,不像无结构的运动图,搜索时间会因运动图规模增加而增加。

(4)过渡的光滑性。图5-20显示了两组实验结果。上边的图是第一组实验,用户搜索的是从轻松地走到开心地走;下边的图是第二组实验结果,用户搜索的从站立姿态到偷偷摸摸地走。从运动播放的结果看,过渡比较自然。