基于可编程图形处理器的骨骼动画算法及其比较

2009-10-19 作者: 季卓尔 张景峤 来源: 万方数据

关键字: 骨骼动画 可编程图形处理器 计算机图形 蒙皮网格 统一 

骨骼动画相对于之前的动画方法具有占用空间小的优点,但是其代价是计算量的增加,从而导致绘制效率的降低。另一方面,近年来可编程图形处理器技术在计算机图形处理领域已得到广泛研究。因此,提出了基于可编程图形处理器实现骨骼动画的方法,采用了最先进的可编程处理管线。使用多种不同的方法在可编程图形处理器中实现了骨骼动画,并对其性能进行了分析与比较。该方法借助可编程图形处理器强大的计算能力,分担了骨骼动画中的顶点更新的计算任务,从而大大提升了骨骼动画的绘制效率。

  引言

  提高计算机动画的画面质量与渲染的效率和减少计算机动画所需占用的空问,已经成为计算机动画使用中比较重要的问题。计算机动画的画面质量与所占用的空间大小成正比,与渲染的效率成反比。越是精致的动画,占用的空间越大,渲染的速度越低。所以如何在保证画面质量的情况下减少动画所要占用的空间,并提高计算机动画的渲染效率成为一个值得研究的课题。较早出现的一种称为顶点动画的三维动画技术,根据时闯对两个关键帧的信息进行插值计算,以得到对应时间的动画数据。其优点是实现起来比较简单,所需的计算量也很少。但它同时也带来一些问题。比如,顶点动画需要占用大量的内存,插值计算时动画容易产生变形等。由于顶点动画的一些问题,一种新的方法被提出,即骨骼动画,它特别适合于人物和其它的脊椎动物的动画模拟。骨骼动画作为一种新的动画技术,它与许多技术进行了结合。比如在骨骼动画中融入了正向反向动力学,电影中常用的动作捕捉技术等“I。WuFu-ehe等嘲提出了一种创建骨骼的方法,称为范围连接图方法。这种方法保留了拓扑结构的信息,并且它不像中间轴变换方法那样对模型摆动比较敏感。尤其应用于复杂模型时得到的结果十分符合人的感觉,使动画显得更加的真实。骨骼动画的诞生对于游戏渲染引擎来说是一项莫大的进步,它在很大程度上提高了游戏中人物渲染的效率。渲染引擎包括了骨骼动画,粒子系统,LOD(1evelofdctial),光照系统,阴影等诸多组成部分。作为渲染引擎的一部分,对于如何提高骨骼动画的运行效率,应从整个系统的高度去考虑。

  GPU(graphic process unit)作为游戏渲染的重要硬件之一,随着其处理能力的不断提升,和可编程性能的不断完善,如何让GPU代替CPU完成更多的工作已成为国际计算机图形处理及其相关领域的研究热点之一。吴恩华等人叫介绍了一些在GPU中实现辐射度、光线跟踪、碰撞检测、流体模拟方面的文章,并提出了一些关于使用GPU像素Shader进行代数运算的方法。沈潇“1等提出了一种基于可编程图形硬件的实时的阴影生成算法,改善了阴影渲染效果,并且防止了走样。Yang Xiao嗍等提出了一种基于GPU的实时处理阴影锥的方法,相对于过去在很大程度上提升了阴影生成的效率。Aaron旧等提出了一种基于GPU的数据结构库,使GPU编程者可以根据不同的算法使用不同的数据结构。Cbristophd”等提出了一种基于GPU的实时网格简化方法,将网格简化算法移植到GPU中,并提出了一种通用计算的数据结构,这种数据结构使用于流处理器架构。对于骨骼动画而言,将某些计算移植到GPU中去无疑对骨骼动画,乃至整个渲染引擎的效率而言都有很大的提升。Kipfe一"1等提出了一种基于GPU的实时大规模的粒子系统,并构建了一个通用的粒子系统的引擎,该引擎还实现了粒子之间的碰撞和可见性排序等功能。Shiue等人91提出了一种基于GPU的实时细分方法。他提出的实时GPU细分核心在不同细分深度生成细分网格,使得所有的计算工作都可由GPU的Shader来负责,由此细分算法的所有主要的特征能够得以实现。

  1、基础知识

  1.1骨骼动画

  骨骼蒙皮动画也叫做骨骼动画。使用骨骼动画技术。可以塑造出各种各样,栩栩如生的动画角色。其中,人体的骨骼动画运用得最为广泛。一般来说,骨骼动画由两部分来表示。一部分是形成层次的一系列的骨骼,通常称为骨架,另一部分是蒙在骨架上的皮肤。

  骨骼结构是一系列相连接的骨头,它们组成一个层次叫骨层级。其中一个骨头称为根骨,它是整个骨骼结构的关键,整个骨架都是由它发展而来。其它的骨头都附属于根骨,要么是它的子骨要么是它的兄弟骨。由此组成如图1所示的骨骼结构。在检索骨架的时候,一般先找到形成骨架的根骨,然后,由根骨开始进行检索,直到找到所需要的骨骼。

  在骨骼动画中仅仅建立骨架是不够的。为了使骨骼可以动起来,一般通过对骨骼进行变换达到使模型动起来的效果。在对骨骼做完变换之后还需要更新整个骨架,以此来产生一个新的动作。骨骼的更新需要遵守一些规则。图2展示了骨骼更新所需要遵守的规则。

  在图2中,整个骨骼的更新从根骨开始,直至所有的骨骼都更新完毕。每一个骨骼的变换都会影响到其兄弟骨骼和子骨骼。这种影响在一定的范围内会一直传递下去。

  骨骼和骨架只是个概念结构,用于控制模型的动作,它与模型网格相关联。通过骨骼来控制网格,从而让模型动起来。这里的模型网格就是所谓的蒙皮网格。

  在蒙皮网格中,所有网格点均与骨骼相关联。因此,只要对骨骼进行变换,再对与骨骼相关联的网格点做相应变换后,就可以使模型动起来。

  在骨骼动画中每个顶点都与骨骼相关联,骨骼的运动会带动附于其上的顶点。骨骼对顶点的影响力的大小由每个骨骼的权重系数决定,对某个顶点产生影响的骨骼的权重总和为l。

  使用骨骼动画可以节省许多内存空间,且能够较好的控制模型网格的变换。但是,骨骼动画的这些好处也是要付出一些代价的,与较少的内存消耗对应的是更大的计算量。由于现代CPU的超强运算能力以及GPU通用计算的发展,这似乎不是一个大问题。甚至可以把一部分计算转移到GPU上去,以节省更多的CPU计算能力给其它的部分的计算。

  1.2可编程Shader技术

  在过去GPU中的Shader分为两类,即顶点Shader(Vertex Shader)和像素Shader(PixelShader)。这两类Shader分别位于渲染管线的不同阶段,分别处理顶点和像素的数据。两类Shader只能各自处理各自的数据,即便Shader空闲也不能用于另一方数据的处理。

  当今最先进的GPU已经不再区分顶点Shader和像素Shader。nVidia将二者合并由流处理器来代替,形成了统一渲染架构,使得所有的处理都在流处理器中统一进行。这样在GPU中处理数据的时候所有的处理单元都会被使用到,不会出现Shader空闲的问题,极大的提升GPU的处理效率。本文的算法正是基于此种架构设计的。在统一渲染架构中,顶点Shader和像素Shader拥有了相同的处理能力。所以过去许多因为像素Shader处理能力强而在像素处理阶段实现的算法,

  可以根据需要转移到顶点处理阶段来进行。虽然在统一渲染架构中合并了两类Shader,但是渲染管线中的顶点处理阶段和像素处理阶段仍然存在。除了原先的顶点和像素处理阶段,在新的GPU架构中还增加了几何Shader(GeometryShader)。新的处理管线如图3所示。




<<首页 <上一页  1  2  3  下一页>  末页>>  
责任编辑:熊东旭