博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

基于GPU的虚拟人物表情绘制(转载)

Posted on 2012-01-05 11:17  张冰  阅读(462)  评论(0编辑  收藏  举报
2009-7-6 作者: 徐远纯 刘勇 来源: 万方数据

关键字: GPU虚拟表情 Shader语言 

本文提出了一种基于GPU的虚拟人物表情绘制方法,该方法运用了GPU运算技术,并且利用Shader语言处理插值数据,从而实现虚拟人物表情动画的快速绘制。实验表明,该方法简单有效,并有利于表情的绘制。

  1、引言

  计算机图形变形技术是计算机动画技术的重要组成部分.它综合利用计算机图形学、图像处理、计算数学及其它学科的知识来实现计算机变形动画,是近年来兴起的一个新的研究领域.具有重要的学术价值和实用价值。其中虚拟人物面部表情模拟.即.如何利用已有的变形技术。方便快捷的实现人物面部表情的模拟是当前研究的一个热点。本文在研究插值算法的基础上.结合GPU加速技术.实现了一个人物表情混合系统。

  2、关键技术及理论

  变形,又称为形状融合(shape blending),即源形体到目标形体的一个连续、光滑、自然过度的过程。其主要研究内容就是设计中间渐变过程,以使变形平滑、自然.即用一定的数学方法在给定的两物体之间自动生成一系列平滑过渡的中同物体。如在动画设计中给出一定数目的关键帧.通过渐变方法内插出中间帧.实现连续动画效果.或是通过从初始物体到目标物体的渐变生成一些融合了两个物体特性的新物体等等。

  目前.针对虚拟人物面部表情的动画生成已经有多种方法。Arai K等人通过定义一个独立的参数化的人脸空间.通过叠加人脸面部表情.用双线性插值.实现虚拟人物脸表情的实时变化。M.Cohen等人l’J通过直接参数化模型来控制人脸.定义两类参数,表情参数控制表情.形状参数控制人脸形状。参数值通过对人脸的直接观察来确定。这种直接参数化模型是基于经验描述虚拟的人脸特征.并不考虑各个区域之间的层次连接关系。Thomas W.Sederberg等人的自由变形(Free—Form Defomation,FFDl)方法将待变形物体嵌于一个由一系列控制点组成的假想的三维网格的弹性控制盒中。当挤压.弯曲和扭曲控制盒时,内嵌的物体也相应地被变形,这是一种问接参数化方法。使用这种方法应用于人脸动画时,将人脸变形控制从对面部的描述.转移到不再依赖面部曲面本身。此外.Platt等人提出了基于面部肌肉的人脸模型,通过类似弹簧的肌肉与底层的模拟骨骼相连接.利用肌肉的弹性收缩来产生各种表情。通过研究以上多种人脸表情控制方法发现,线性插值在人脸表情最终绘制阶段,有关键性作用。因此,实现人脸表情的快速实时绘制,是我们的目标。

  近年来,随着图形处理器(GPU)性能的大幅度提高以及可编程特性的发展.人们开始将传统的图形渲染流水线的某些处理阶段以及某些图形算法从CPU向GPU转移.由此得到了图形绘制性能的大幅度提升。一个运行在NVlDlA GeForce FX5900UI昀的Shader程序运算速度可达20GnDPs.相当于10GHz的Pentium4。而且图形系统的内存带宽为25.3 GBPs,相比之下Pentium 4只有5.96GBPs。由此可见GPU运算的优势。

  传统的图形处理器接受输入的三维信息.然后按照固定的功能进行处理。可以输入的信息有:视点、投影、光照情况等场景的全局信息;顶点位置、面片组成、表面材质设定等场景中三维物体各自的信息。处理器将这些数据在固定流水线上进行处理.输出到帧缓存中,并最终到显示器上输出显示。而可编程的图形处理器对输入信息的处理提供了更为灵活的控制.通过编写的绘制程序来控制。其在顶点级和像素级都提供了灵活的可编程特性,运算上都支持IEEE 32位浮点运算。同时支持多遍绘制的操作.避免了多次CPU与GPU之问的数据交换:支持绘制到纹理,提高了绘制的效率;支持依赖纹理,可以方便地访问数据。

  随着图形处理器的发展出现了高端着色语言(high level shading languages)。高端着色语言是一种为GPU编程的类C语言。能充分的利用当前图形处理器的绘制处理能力。针对Shader程序的专有特性.各种HLSL语言都提供了强大的向量数据类型支持.此外还包含了基本的数学函数和纹理处理函数,针对顶点变换、光照处理和各种渲染特效提供了高效的处理机制。这些高级语言加速了Shader编程的开发过程。常用的高端着色语言有:HLSL(微软开发的高端着色语言),GLSL(0penGL开发的高端着色语言),CG(NVIDIA开发的高端着色语言)。在这里.我们选用HLSL语言作为我们的Shader编程语言。

  3、虚拟人脸表情动画的基本原理及实现关键步骤:

  3.1基本原理描述:

  首先.确定一个基本网格模型,由这个网格模型确定模型的顶点在运用变换之前的初始坐标。这个模型定义为源网格模型。然后将各个不同的表情网格模型定义为目标网格。不同表情的网格模型视为不同的关键帧。人脸表情的变化通过对关键帧的多种插值方式来实现。一个新的人脸表情不但可以通过两个关键帧位置生成.而且可以对四个关键位置插值生成(双线性插值1。插值八个关键帧(三线性插值)来生成。这样做的优点是迅速,操作直观.只需定义少数的关键帧网格模型,即可产生一段基本的脸部动画.

  3.2 实现关键步骤:

  3.2.1 定义网格模型

  3.2.3 计算模型差异

  通过迭代网格模型的所有顶点,获取源网格

  该算法在处理时间上比Hough变换算法要短很多,可直接获得直线的端点及长度信息。尽管该算法对干扰作了处理,但是受分割的影响还是很大。如果在分割过程中丢失了轮廓信息。该算法是无法自动弥补的。这在一定程度上也影响了该算法的性能,此外。检测精度也不高。

 

 4、快速Hough变换算法

  上述介绍的各种改进的Hough变换算法都在一定方面和一定程度上改善了Hough小变换的性能,加快了直线提取的速度。但是在实时性要求很高且所处理的图像分辨率较高的情况下.算法运行的速度还有待提高。为了解决这一问题,提出了下面的快速Hou小变换算法。

  这种快速Hough变换算法的思想是:采用”分而治之”(divide and conquer)的思想,加快A(p,0)的计算速度。将图像以x方向进行对半分割,先求分割后图像进行Houglh变换的A值,然后求再分割后的图像得到的A值,最后求得全图的A值。如此则可以从每1列开始。进行A值的迭代计算。需要的迭代次数显然是三D削。需要注意的是。在进行迭代计算前,需要对图像进行补零扩充.使图像规模达到2的整数次幂。

  为此引入符号Ap(h,I,j),表示第p步迭代处理中所计算的某线段所经过的全部像素的灰度值的累加。该线段的起点在(I,j),终点相对于起点的y方向的偏移量为h。h为正表示该线段与x方向的夹角为锐角。否则表示为钝角。

  通过分析.可以得到以下近似迭代式:

  这种快速Hough小变换算法描述如下:

  这种算法同标准Hough变换相比,需要的存储空间增加了,但由于改进的算法在时间性能上得到了较大的提高,对于加快图像处理的速度.提高图像处理的实时性很有意义。

  5、结论

  理论与实践向来是形影不离,相辅相成,Hough变换之所以有如此长足的发展,主要原因还是在于实践应用上的广泛需求;而在实践中所暴露出的不足又进而促进了它的发展,循环往复,就如同生命的演化。Hough变换还应用于生物医学;自动化,机器人视觉:空间技术,军事防御以及办公自动化等,所以,Hough变换有着广泛的关注程度以及良好的应用前景。