发明名称 一种三维动画模型的自适应简化方法
摘要 本发明针对不同的三维动画模型和终端显示屏幕的分辨率,提出一种基于边折叠的移动图形简化算法,通过定义不同的模型精度感知因子,改进QEM误差度量,获得基于目标屏幕分辨率的感知度量,把不能被用户所感知的冗余数据进行简化,得到面片规模与屏幕显示精度匹配的简化模型。本发明中基于边折叠的简化方法可以在保证显示质量的前提下最大限度的降低三维动画模型的面片规模,因此它可以用在计算和显示能力比较低的三维动画终端显示应用中。
申请公布号 CN101308579B 申请公布日期 2011.05.18
申请号 CN200810028033.1 申请日期 2008.05.12
申请人 中山大学 发明人 王建民;曹顺艇;龚武明;车春回;罗笑南
分类号 G06T15/00(2006.01)I 主分类号 G06T15/00(2006.01)I
代理机构 代理人
主权项 1.一种三维动画模型的自适应简化方法,其特征在于该简化方法基于边折叠简化算法,对网格图形的几何元素进行删除,以实现简化目的,并采用Garland的二次误差(QEM)来对简化进行误差控制,具体包括以下步骤:(1)检索动画模型中的空间三维动画前景模型和背景模型;(2)对前景模型进行自适应简化;(3)对背景模型进行自适应简化;其中,在步骤(1)中,所述动画模型定义为:在三维动画生成过程中使用的三维网格模型,具体可定义为空间中一个三角形的集合,这些三角形之间有公共点和公共边,把这样的三角形集合定义为动画模型M,M可由顶点集V=(v<sub>1</sub>,v<sub>2</sub>,...,v<sub>n</sub>)和三角形集合T=(T<sub>1</sub>,T<sub>2</sub>,...,T<sub>m</sub>)所组成的二元组(V,T)来表示;所述前景模型定义为:前景模型是指在动画中具有重要意义,参与动画动作的动画模型;具体来说就是在动画过程中位置角度发生变化,参与动画运动的动画模型;通常由动画作者在制作动画时设定;所述背景模型定义为:背景模型是指在动画中主要作为背景存在的,在动画过程中不发生位置移动和旋转的动画模型;通常由动画作者在制作动画时设定;其中,对前景模型进行自适应简化,具体包括如下步骤:1)获得精度控制系数n、图形视窗参数H<sub>window</sub>和W<sub>window</sub>、显示屏幕分辨率参数h<sub>screen</sub>和w<sub>screen</sub>参数;其中,所述精度控制系数n定义为:精度控制系数n表示在简化过程中使用的单位长度为n个屏幕像素所对应的空间长度;所述精度控制系数n由用户设定;所述图形视窗参数H<sub>window</sub>和W<sub>window</sub>定义为:H<sub>window</sub>是图形空间中视窗的高度,W<sub>window</sub>是图形空间中视窗的宽度;所述图形视窗参数H<sub>window</sub>和W<sub>window</sub>由系统获取;所述显示屏幕分辨率参数h<sub>screen</sub>和w<sub>screen</sub>定义为:h<sub>screen</sub>是显示屏幕上一列所包含的像素数目,w<sub>screen</sub>是显示屏幕上一行所包含的像素数目;2)对原始网格中的每个顶点V,计算其误差矩阵Q;其中,一个顶点移动到新顶点的误差表示为:<maths num="0001"><![CDATA[<math><mrow><mi>&Delta;</mi><mrow><mo>(</mo><mi>v</mi><mo>)</mo></mrow><mo>=</mo><mi>&Delta;</mi><mrow><mo>(</mo><msup><mfenced open='[' close=']'><mtable><mtr><mtd><msub><mi>v</mi><mi>x</mi></msub></mtd><mtd><msub><mi>v</mi><mi>y</mi></msub></mtd><mtd><msub><mi>v</mi><mi>z</mi></msub></mtd><mtd><mn>1</mn></mtd></mtr></mtable></mfenced><mi>T</mi></msup><mo>)</mo></mrow><mo>=</mo><munder><mi>&Sigma;</mi><mrow><mi>p</mi><mo>&Element;</mo><mi>planes</mi><mrow><mo>(</mo><mi>v</mi><mo>)</mo></mrow></mrow></munder><msup><mrow><mo>(</mo><msup><mi>p</mi><mi>T</mi></msup><mi>v</mi><mo>)</mo></mrow><mn>2</mn></msup><mo>=</mo><munder><mi>&Sigma;</mi><mrow><mi>p</mi><mo>&Element;</mo><mi>planes</mi><mrow><mo>(</mo><mi>v</mi><mo>)</mo></mrow></mrow></munder><msup><mi>v</mi><mi>T</mi></msup><mrow><mo>(</mo><msup><mi>pp</mi><mi>T</mi></msup><mo>)</mo></mrow><mi>v</mi></mrow></math>]]></maths><maths num="0002"><![CDATA[<math><mrow><mo>=</mo><msup><mi>v</mi><mi>T</mi></msup><mrow><mo>(</mo><munder><mi>&Sigma;</mi><mrow><mi>p</mi><mo>&Element;</mo><mi>planes</mi><mrow><mo>(</mo><mi>v</mi><mo>)</mo></mrow></mrow></munder><mrow><mo>(</mo><msub><mi>K</mi><mi>p</mi></msub><mo>)</mo></mrow><mo>)</mo></mrow><mi>v</mi><mo>=</mo><msup><mi>v</mi><mi>T</mi></msup><mi>Q</mi><mrow><mo>(</mo><msub><mi>v</mi><mi>i</mi></msub><mo>)</mo></mrow><mi>v</mi><mo>.</mo></mrow></math>]]></maths>其中,K<sub>P</sub>为4×4对称矩阵,即<img file="FSB00000251231000023.GIF" wi="763" he="347" />3)对原始网格中的每条边E(u,v),计算精度感知因子M<sub>edge</sub>,把边的两个端点代入边误差计算,取使误差值较小的一点作为新顶点,并把折叠误差值进行排序;其中,所述边E(u,v)的精度感知因子M<sub>edge</sub>定义为:<maths num="0003"><![CDATA[<math><mrow><msub><mi>M</mi><mi>edge</mi></msub><mo>=</mo><mfenced open='{' close=''><mtable><mtr><mtd><mn>1</mn></mtd><mtd><mrow><mo>(</mo><mfrac><mrow><mo>|</mo><mo>|</mo><mi>u</mi><mo>-</mo><mi>v</mi><mo>|</mo><mo>|</mo></mrow><mrow><mi>n</mi><mo>&CenterDot;</mo><mi>&epsiv;</mi></mrow></mfrac><mo>&GreaterEqual;</mo><mn>1</mn><mo>)</mo></mrow></mtd></mtr><mtr><mtd><mfrac><mrow><mo>|</mo><mo>|</mo><mi>u</mi><mo>-</mo><mi>v</mi><mo>|</mo><mo>|</mo></mrow><mrow><mi>n</mi><mo>&CenterDot;</mo><mi>&epsiv;</mi></mrow></mfrac></mtd><mtd><mrow><mo>(</mo><mfrac><mrow><mo>|</mo><mo>|</mo><mi>u</mi><mo>-</mo><mi>v</mi><mo>|</mo><mo>|</mo></mrow><mrow><mi>n</mi><mo>&CenterDot;</mo><mi>&epsiv;</mi></mrow></mfrac><mo>&lt;</mo><mn>1</mn><mo>)</mo></mrow></mtd></mtr></mtable></mfenced></mrow></math>]]></maths>其中||u-v||为点u与点v之间的空间距离;所述边E(u,v)的误差的计算公式定义为:Error′(uv)=v<sup>T</sup>(Q<sub>u</sub>+Q<sub>v</sub>)v·(M<sub>edge</sub>)<sup>n</sup>;4)选出误差最小的边进行折叠;5)更新相关信息;6)如果没有达到简化目标,转到4),否则结束;其中:所述简化目标为min(E)≥nε,其中min(E)为最短边长;步骤3)和步骤6)中n为精度控制系数,ε为一个屏幕像素在图形空间中所对应的长度;其中,对背景模型进行自适应简化,具体包括如下步骤:a)获得精度控制系数n、图形视窗参数H<sub>window</sub>和W<sub>window</sub>、显示屏幕分辨率参数h<sub>screen</sub>和w<sub>screen</sub>参数,其中:所述精度控制系数n定义为:精度控制系数n表示在简化过程中使用的单位长度为n个屏幕像素所对应的空间长度;所述图形视窗参数H<sub>window</sub>和W<sub>window</sub>定义为:H<sub>window</sub>是图形空间中视窗的高度,W<sub>window</sub>是图形空间中视窗的宽度;所述显示屏幕分辨率参数h<sub>screen</sub>和w<sub>screen</sub>定义为:h<sub>screen</sub>是显示屏幕上一列所包含的像素数目,w<sub>screen</sub>是显示屏幕上一行所包含的像素数目;b)对原始网格中的每个顶点V,计算其误差矩阵Q,其中:误差矩阵Q采用Garland的二次误差来计算获取,具体计算方法如下:一个顶点移动到新顶点的误差表示为:<maths num="0004"><![CDATA[<math><mrow><mi>&Delta;</mi><mrow><mo>(</mo><mi>v</mi><mo>)</mo></mrow><mo>=</mo><mi>&Delta;</mi><mrow><mo>(</mo><msup><mfenced open='[' close=']'><mtable><mtr><mtd><msub><mi>v</mi><mi>x</mi></msub></mtd><mtd><msub><mi>v</mi><mi>y</mi></msub></mtd><mtd><msub><mi>v</mi><mi>z</mi></msub></mtd><mtd><mn>1</mn></mtd></mtr></mtable></mfenced><mi>T</mi></msup><mo>)</mo></mrow><mo>=</mo><munder><mi>&Sigma;</mi><mrow><mi>p</mi><mo>&Element;</mo><mi>planes</mi><mrow><mo>(</mo><mi>v</mi><mo>)</mo></mrow></mrow></munder><msup><mrow><mo>(</mo><msup><mi>p</mi><mi>T</mi></msup><mi>v</mi><mo>)</mo></mrow><mn>2</mn></msup><mo>=</mo><munder><mi>&Sigma;</mi><mrow><mi>p</mi><mo>&Element;</mo><mi>planes</mi><mrow><mo>(</mo><mi>v</mi><mo>)</mo></mrow></mrow></munder><msup><mi>v</mi><mi>T</mi></msup><mrow><mo>(</mo><msup><mi>pp</mi><mi>T</mi></msup><mo>)</mo></mrow><mi>v</mi></mrow></math>]]></maths><maths num="0005"><![CDATA[<math><mrow><mo>=</mo><msup><mi>v</mi><mi>T</mi></msup><mrow><mo>(</mo><munder><mi>&Sigma;</mi><mrow><mi>p</mi><mo>&Element;</mo><mi>planes</mi><mrow><mo>(</mo><mi>v</mi><mo>)</mo></mrow></mrow></munder><mrow><mo>(</mo><msub><mi>K</mi><mi>p</mi></msub><mo>)</mo></mrow><mo>)</mo></mrow><mi>v</mi><mo>=</mo><msup><mi>v</mi><mi>T</mi></msup><mi>Q</mi><mrow><mo>(</mo><msub><mi>v</mi><mi>i</mi></msub><mo>)</mo></mrow><mi>v</mi><mo>.</mo></mrow></math>]]></maths>其中,K<sub>P</sub>为4×4对称矩阵,即<img file="FSB00000251231000042.GIF" wi="790" he="341" />c)对原始网格中的每条边E(u,v),计算精度感知因子M<sub>edge</sub>,把边的两个端点代入边误差计算,取使误差值较小的一点作为新顶点,并把折叠误差值进行排序;其中,所述边E(u,v),u(a<sub>1</sub>,a<sub>2</sub>,a<sub>3</sub>),v(b<sub>1</sub>,b<sub>2</sub>,b<sub>3</sub>)的精度感知因子M<sub>edge</sub>定义为:<maths num="0006"><![CDATA[<math><mrow><msub><mi>M</mi><mi>edge</mi></msub><mo>=</mo><mfenced open='{' close=''><mtable><mtr><mtd><mn>1</mn></mtd><mtd><mrow><mo>(</mo><mfrac><msqrt><msup><mrow><mo>(</mo><msub><mi>a</mi><mn>1</mn></msub><mo>-</mo><msub><mi>b</mi><mn>1</mn></msub><mo>)</mo></mrow><mn>2</mn></msup><mo>+</mo><msup><mrow><mo>(</mo><msub><mi>a</mi><mn>2</mn></msub><mo>-</mo><msub><mi>b</mi><mn>2</mn></msub><mo>)</mo></mrow><mn>2</mn></msup></msqrt><mrow><mi>n</mi><mo>&CenterDot;</mo><mi>&epsiv;</mi></mrow></mfrac><mo>&GreaterEqual;</mo><mn>1</mn><mo>)</mo></mrow></mtd></mtr><mtr><mtd><mfrac><msqrt><msup><mrow><mo>(</mo><msub><mi>a</mi><mn>1</mn></msub><mo>-</mo><msub><mi>b</mi><mn>1</mn></msub><mo>)</mo></mrow><mn>2</mn></msup><mo>+</mo><msup><mrow><mo>(</mo><msub><mi>a</mi><mn>2</mn></msub><mo>-</mo><msub><mi>b</mi><mn>2</mn></msub><mo>)</mo></mrow><mn>2</mn></msup></msqrt><mrow><mi>n</mi><mo>&CenterDot;</mo><mi>&epsiv;</mi></mrow></mfrac></mtd><mtd><mrow><mo>(</mo><mfrac><msqrt><msup><mrow><mo>(</mo><msub><mi>a</mi><mn>1</mn></msub><mo>-</mo><msub><mi>b</mi><mn>1</mn></msub><mo>)</mo></mrow><mn>2</mn></msup><mo>+</mo><msup><mrow><mo>(</mo><msub><mi>a</mi><mn>2</mn></msub><mo>-</mo><msub><mi>b</mi><mn>2</mn></msub><mo>)</mo></mrow><mn>2</mn></msup></msqrt><mi>n</mi></mfrac><mo>&lt;</mo><mn>1</mn><mo>)</mo></mrow></mtd></mtr></mtable></mfenced><mo>;</mo></mrow></math>]]></maths>所述边E(u,v)的误差的计算公式定义为:Error′(uv)=v<sup>T</sup>(Q<sub>u</sub>+Q<sub>v</sub>)v·(M<sub>edge</sub>)<sup>n</sup>;d)选出误差最小的边进行折叠;e)更新相关信息;f)如果没有达到简化目标,转到d),否则转到g);其中:所述简化目标为min(E)≥nε,其中min(E)为最短边长;g)根据三维动画的视点P<sub>view</sub>(x<sub>0</sub>,y<sub>0</sub>,z<sub>0</sub>),对简化后的背景模型进行背向面剔除;所述背向面的定义:动画模型中背向视点P<sub>view</sub>(x<sub>0</sub>,y<sub>0</sub>,z<sub>0</sub>)的三角面片;所述背向面剔除的具体方法为:对视点P<sub>view</sub>(x<sub>0</sub>,y<sub>0</sub>,z<sub>0</sub>)和三角面片F(u,v,w),u(a<sub>1</sub>,a<sub>2</sub>,a<sub>3</sub>),v(b<sub>1</sub>,b<sub>2</sub>,b<sub>3</sub>),w(c<sub>1</sub>,c<sub>2</sub>,c<sub>3</sub>),该三角面片所在平面方程为:Ax+By+Cz+D=0其中A=a<sub>2</sub>×(b<sub>3</sub>-c<sub>3</sub>)+b<sub>2</sub>×(c<sub>3</sub>-a<sub>3</sub>)+c<sub>2</sub>×(a<sub>3</sub>-b<sub>3</sub>)B=a<sub>3</sub>×(b<sub>1</sub>-c<sub>1</sub>)+b<sub>3</sub>×(c<sub>1</sub>-a<sub>1</sub>)+c<sub>3</sub>×(a<sub>1</sub>-b<sub>1</sub>)C=a<sub>1</sub>×(b<sub>2</sub>-c<sub>2</sub>)+b<sub>1</sub>×(c<sub>2</sub>-a<sub>2</sub>)+c<sub>1</sub>×(a<sub>2</sub>-b<sub>2</sub>)D=-a<sub>1</sub>×(b<sub>2</sub>×c<sub>3</sub>-c<sub>2</sub>×b<sub>3</sub>)-b<sub>1</sub>×(c<sub>2</sub>×a<sub>3</sub>-a<sub>2</sub>×c<sub>3</sub>)-c<sub>1</sub>×(a<sub>2</sub>×b<sub>3</sub>-b<sub>2</sub>×a<sub>3</sub>)当Ax<sub>0</sub>+By<sub>0</sub>+Cz<sub>0</sub>+D≤0成立时,三角面片F(u,v,w)为无法在屏幕上显示,也无法被视点感知的背向面片,可以直接剔除;当Ax<sub>0</sub>+By<sub>0</sub>+Cz<sub>0</sub>+D>0成立时,三角面片F(u,v,w)为可以显示的正向面片,需要保留;如果有一个点v,包含v的所有面片都是背向面片,当所有背向面片都被剔除后,从点列表中将v剔除。
地址 510275 广东省广州市新港西路135号中山大学园南路415栋401室