一种增量式动态调整羽毛覆盖的方法与流程

文档序号:11217368阅读:350来源:国知局
一种增量式动态调整羽毛覆盖的方法与流程

本发明属于计算机图形学技术领域,涉及在三维模型上进行羽毛覆盖的方法,具体涉及一种增量式动态调整羽毛覆盖的方法。



背景技术:

鸟类角色常见于电影、动画短片、计算机游戏等作品中,羽毛作为鸟类最重要的特征,对鸟类模型进行羽毛覆盖是提高角色真实感和表现力的重要手段。

羽毛覆盖的要点在于保证羽毛之间不发生穿插,否则将产生明显的视觉失真。由于羽毛特殊的薄片结构、以及数量多、排列有序、相互间紧密影响等特点,一般的刚体碰撞检测、碰撞避免算法并不适用。因此,在计算机图形学领域,羽毛在模型全身的覆盖问题通常作为单独的问题被看待。

chen等(yanyunchen,yingqingxu,bainingguo,andheung-yeungshum.modelingandrenderingofrealisticfeathers.acmtrans.graph.,21(3):630–636,july2002)根据羽毛的初始朝向,计算出相邻羽毛间的先后顺序,再以递归的方法对羽毛进行调整,其中碰撞检测是将羽毛简化成三角面片,执行三角形对三角形的碰撞穿透测试。然而,该方法的对羽毛次序的定义过于简单,容易造成优先级冲突等问题,碰撞测试也过于粗暴(brute-force),导致计算量太大以及羽毛调整的灵活度不高,同时也没有提出对于动画模型的羽毛调整策略。

bangay(shaunbangay.animatedfeathercoatsusingfeldlines.inproceedingsofthe5thinternationalconferenceoncomputergraphics,virtualreality,visualisationandinteractioninafrica,afrigraph’07,pages169–176,newyork,ny,usa,2007)提出将用于毛发建模的、无碰撞的场线(fieldlines)扩展到二维,在模型表面的周围空间设计、构建出一个三维向量场,通过将羽毛对齐到该向量场,即认为羽毛之间是无碰撞的。但该方法生成的羽毛实际是平行的,而非彼此紧密依靠,与现实情况不大相符,而且对于尺寸较大或者有一定厚度的羽毛也无法保证碰撞不发生;对于动画模型,该方法要求手动指定起止帧的向量场,对每一帧重新生成羽毛。

weber和gornowicz(andrewj.weberandgalengornowicz.collision-freeconstructionofanimatedfeathersusingimplicitconstraintsurfaces.acmtrans.graph.,28(2):12:1–12:8,may2009)定义了的隐式约束表面(implicitconstraintsurface),直接从定义上避免任意两个不同的隐式约束表面的碰撞,因此通过将羽毛紧贴到这样的表面,即实现了无碰撞羽毛的建模。该方法取得了不错的效果并应用到了动画电影中,只是计算代价较大,对于动画中的每一帧需要将全身羽毛重新生成一遍。

liu等(leliu,xiaoshengli,yanyunchen,xuehuiliu,jianjunzhang,enhuawu.anefficientfeatheringsystemwithcollisioncontrol.computergraphicsforum,34:279–288,2015)同样采用了基于次序的调整策略,但重新定义了相邻羽毛之间的优先级,并进一步提出利用高度场对羽毛进行调整。该方法相对之前的方法大大地提升了计算效率,对于动画模型,也提出了粗略的增量式调整方法;但动画中羽毛的优先级关系是可能发生变化的,该方法没有针对此问题提出相应的解决方案,因此调整效果不够稳定及鲁棒,往往在一定帧数之后羽毛就无法再紧贴于皮肤表面,使得皮肤表面被裸露出来。



技术实现要素:

为了解决现有技术中羽毛动态调整效率不高或调整效果不稳定的问题,本发明设计了一种增量式动态调整羽毛的方法。该方法基于依序调整羽毛的思想,定义了适用于动态调整的羽毛的优先级关系,并提出了对羽毛的生长次序在动画时进行部分重排序的方法,实现了只对当前帧相对上一帧受到了实际影响的羽毛进行调整,避免了在每一帧重新生成全身羽毛。

为实现本发明的目的,采用以下技术方案来实现。一种增量式动态调整羽毛的方法,其步骤具体包括:

(1)计算输入模型的当前帧距离上一帧,邻域表面发生了相对变化的羽毛集合;

(2)对于步骤(1)所述的羽毛集合,重新计算每根羽毛与邻近羽毛的优先级关系并相应地对生长次序进行部分重排序、更新待调整的羽毛集合;

(3)对于步骤(2)所述的待调整的羽毛集合,根据步骤(2)所述的生长次序,重新应用羽毛调整算法调整,调整过程中如果某羽毛的调整程度超过了某个阈值,将该羽毛邻域内所有依赖于它的羽毛加入待调整的羽毛集合,直至待调整的羽毛集合为空,完成增量式的动态羽毛覆盖调整。

所述优先级关系,是指两根邻近羽毛之间的优先级差,由它们的生长点位置、表面法向和羽毛朝向所决定,其定义为:

其中:

ba=(na×oa)/|na×oa|

限制条件为:

式中ra和rb分别为羽毛a和b的生长点位置,na和oa分别为羽毛a的生长点的表面法向和羽毛主轴的朝向,表示羽毛a的邻域,λ和γ为用户的输入参数。表示羽毛b相对羽毛a具有更高优先级,同理,表示羽毛b相对羽毛a的优先级更低。

所述待调整的羽毛集合,包括了邻域表面发生了相对变化的羽毛,被重排序的羽毛,以及位于调整程度超过阈值的羽毛的邻域内且优先级较其更低的羽毛。

其中,羽毛i的邻域表面发生了变化,指的是输入模型从第k-1帧到第k帧,羽毛i生长点的变换矩阵与任一位于羽毛i邻域内的羽毛j的变换矩阵的差值

满足:

∑|mij|<∈

其中∈为用户指定的阈值,可用于控制被调整羽毛的范围。

被重排序影响到的羽毛,指的是从第k-1帧到第k帧,优先级差发生变化的一对羽毛中具有更高优先级的那根。

如果羽毛i在进行动态调整之后,其调整程度超过用户指定的某个阈值,那么在羽毛i的邻域内,并且优先级低于羽毛i的那些羽毛也要加入待调整的羽毛集合。

本发明与现有技术相比的优点在于:本发明无需对模型动画的每一帧重新生成全身的羽毛,帧间受影响的羽毛范围可以通过少量的参数控制进行精度控制,实现了只对影响范围内的羽毛进行重新调整,节省了计算量,并保证了调整效果的稳定性和鲁棒性。

附图说明

图1是本发明增量式动态调整羽毛方法的流程图;

图2是应用现有技术(无重排序)对动画模型进行动态羽毛调整的效果;

图3是应用本发明增量式动态调整羽毛覆盖方法得到的调整效果。

具体实施方式

下面通过具体实施例并配合附图,对本发明做详细的说明。

图1为本发明的技术方案流程图,以第k帧的动画模型作为输入(包含了每根羽毛的生长点从第k-1帧到第k帧的变换矩阵),输出为针对该帧的调整结果。本发明基于依序调整羽毛的思想,先定义了相邻羽毛之间的优先级,进而计算出全身羽毛的生长次序。针对动画模型,本发明无需重新计算全身羽毛的生长次序,只需要找出相对上一帧优先级关系发生了变化的羽毛进行部分重排序即可。计算出待调整的羽毛集合后,依序对集合内的羽毛应用羽毛调整算法,并在调整过程中根据需要及时更新待调整的羽毛集合,直到全部调整完成。

图1的各个步骤具体介绍如下:

1)计算邻域表面发生了相对变化的羽毛集合。

当采用依序调整的方法进行羽毛调整,对每根羽毛进行调整时只需考虑与它邻近的羽毛。从第k-1帧到第k帧,如果邻近的羽毛没有发生变化,那么这根羽毛也就无需调整,这就是增量式调整的思想。为了先粗略找出需要被调整的羽毛集合,对于每一根羽毛i,计算它的生长点的变换矩阵与任一位于它邻域内的羽毛j的变换矩阵的差值:

如果满足:

∑|mij|<∈

则说明羽毛i应该被纳入调整范围。其中∈为用户指定的阈值,可用于控制被调整羽毛的范围。

2)对于上述的羽毛集合,重新计算它们的优先级关系,进行部分重排序并更新待调整的羽毛集合。

每根羽毛i与邻近的羽毛可以进行优先级的比较,优先级高的表示位于更低的层次,被优先级低的羽毛所覆盖。对于羽毛a和羽毛b,它们之间的优先级差如下定义:

其中:

ba=(na×oa)/|na×oa|

限制条件为:

式中ra和rb分别为羽毛a和b的生长点位置,na和oa分别为羽毛a的生长点的表面法向和羽毛主轴的朝向,表示羽毛a的邻域,λ和γ为用户的输入参数,用于适配不同的输入模型。表示羽毛b相对羽毛a具有更高优先级,反之同理。

该定义由liu等(leliu,xiaoshengli,yanyunchen,xuehuiliu,jianjunzhang,enhuawu.anefficientfeatheringsystemwithcollisioncontrol.computergraphicsforum,34:279–288,2015)提出的定义改进而来,主要差别在于使用了羽毛朝向在生长点切平面的投影,而非直接使用羽毛抽象,避免了在调整羽毛前后优先级关系发生变化,以适用于动画模型的羽毛覆盖的动态调整。

如果羽毛对a和b的优先级发生变化,需要对它们进行重排序。例如,若pab<0变为pab>0,表示需要令羽毛b在生长次序中优先于羽毛a。这一过程可以使用pk算法(davidj.pearceandpaulh.j.kelly.adynamictopologicalsortalgorithmfordirectedacyclicgraphs.j.exp.algorithmics,11,february2007)进行部分重排序。如果在重排序过程中引入了有向环,可使用(leliu,xiaoshengli,yanyunchen,xuehuiliu,jianjunzhang,enhuawu.anefficientfeatheringsystemwithcollisioncontrol.computergraphicsforum,34:279–288,2015)中的贪心策略将环消除。一般来说,两帧之间需要被重排序的羽毛并不多,因此大部分羽毛的次序无需改动,故此过程称为部分重排序。需要注意的是,应该所有被重排序的羽毛插入到待调整的羽毛集合。

3)在羽毛调整过程中及时更新待调整的羽毛集合。

部分重排序之后,依序对2)中更新后的羽毛集合进行调整。这里可以使用任意依序调整羽毛的方法,如基于高度场的调整算法(leliu,xiaoshengli,yanyunchen,xuehuiliu,jianjunzhang,enhuawu.anefficientfeatheringsystemwithcollisioncontrol.computergraphicsforum,34:279–288,2015)。每根羽毛调整结束之后,记录其调整程度。在相邻帧之间,大部分羽毛的调整程度可能是轻微的,对此设置一个阈值,如果羽毛的调整程度超过这个阈值,才认为该羽毛的变动需要被传播出去。对于符合条件的羽毛,与它邻近的羽毛中相较具有更低优先级的羽毛应该被插入到待调整的羽毛集合中。

图2为应用现有的增量式动态调整技术在一定帧数之后得到的羽毛覆盖效果,图3为采用本发明方法得到的羽毛覆盖效果。可以看出,本发明方法有效避免了羽毛调整的相干性问题,保证了羽毛覆盖的规则性及一致性,提高了调整过程的稳定性。同时,与其他非增量式的羽毛覆盖方法相比,本发明方法由于减少了被调整羽毛的数量,可以有效提高调整效率。

总之,本发明对动画模型实现增量式的羽毛调整并保证调整的稳定性,避免对每一帧重新生成全身羽毛,从而有效地减少计算量,提升羽毛动态调整的效率。该方法独立于静态的羽毛调整算法,因此,与不同的静态羽毛调整算法进行结合均可获得不同程度的效率提升。

提供以上实例仅仅是为了描述本发明的目的,而并非要限制本发明的范围。本发明的范围由所附权利要求限定。不脱离本发明的精神和原理而做出的各种等同替换和修改,均应涵盖在本发明的范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1