一种基于法向、几何、uv因素的网格简化方法与流程

文档序号:12472200阅读:392来源:国知局
一种基于法向、几何、uv因素的网格简化方法与流程

本发明涉及一种基于法向、几何、uv因素的网格简化方法,特别涉及的是基于法向、几何、uv的网格简化方法,属于计算机三维动画领域。



背景技术:

网格简化的目的主要在于通过减少顶点和面来加速绘制,同时保证渲染效果的过程。通过网格简化可以生成物体模型的不同简化版本的网格,从而构成物体不同的细节层次。

现在目前该技术领域主要有两种,一是直接使用三维动画软件删减修改不同简化版本的网格,二是代码里使用简单的网格算法自动生成简化网格。

一采用直接使用三维动画软件删减修改不同简化版本的网格的基本流程图如说明书附图1所示。通过上面的流程图可以看出上述方案存在以下两点缺陷:

1.游戏中会存在大量的场景模型和人物模型,根据具体需求简化网格的个数一般至少要一两个,如果每个模型网格都要让美术通过手动方式来进行简化网格,将会大大占用了3D模型美术的时间,这大量的工作量往往导致游戏工作室抛弃了这个细节层次优化的方案,从而导致游戏渲染效率的低下。

2.由于没有自动化生成,简化后的效果往往需要放入到游戏引擎中看简化后的网格渲染效果,这种方式会使得制作流程变得冗余而耗时。

二采用代码里使用简单的网格算法自动生成简化网格的基本流程图如图2所示。通过上面的流程图可以看出上述方案存在以下缺陷:

该方案采用比较常用的基于几何作为误差度量的网格简化算法,即基于保持物体体积和简化后网格到原始网格的距离等等几何方式来作为误差度量。这种方式不适用实际游戏应用中,因为模型的光照着色的影响是根据物体顶点和面的法向而不是位置等几何因素。故采用已有的网格简化算法会导致渲染效果不够好。



技术实现要素:

针对现有技术的不足,本发明的技术方案提供了一种网格简化方法,其特征在于,该方法包括:S11,获取网格,进而获取影响网格方面的各项权重值;S12,计算简化三角面的三角特征数据;S13,遍历网格中的三角面,为每个三角面创建对应的二维数组和一维数组,以及,创建二维数组对应的顶点删除列表,所述二维数组用于表示三角面顶点序号及其收缩变化时的顶点序号,所述一维数组用于表示三角面端点收缩的最终权重和;S14,计算所述二维数组收缩变化时的三角特征数据,计算每个影响网格方面与对应权重值的乘积,将乘积值进行加和并赋予给对应的一维数组;S15,取赋值后的一维数组的最小值,若该最小值小于预设 的权重预设值,则将一维数组对应的二维数组依照排序向后进行收缩并删除收缩前的前一个顶点序号;S16,遍历完网格所有三角面后,根据顶点删除列表对网格做边收缩处理,完成一次简化循环;S17,调整网格影响方面的权重值或规定的权重阈值,重复步骤S11到步骤S16,进行多次简化循环。

根据所述的网格简化方法,所述的影响网格方面的各项权重值包括:每项权重值都有预设的取值范围,该取值范围是根据网格的数据特征进行动态调整的。

根据所述的网格简化方法,所述的三角特征数据包括:三角面的法向向量、面积、各边长,三角面各顶点是否自动生成重合数组,网格总面积,各顶点关联的面中心离网格中心距离,各顶点关联边的夹角总和及uv总面积。

根据所述的网格简化方法,其特征在于:所述二维数组为对应三角面生成的6行2列数组,a[i][0]存储的是其三角面中一个顶点序号,a[i][1]存储的是对应顶点收缩后的顶点序号,其中i大于等于0但小于6。

根据所述的网格简化方法,其特征在于:所述一维数组为三角面对应的一个长度为6的数组weight[6],weight[6]数组存放的是三角面任意一条边的一个端点收缩到另外一个端点的最终权重和,即a[i][0]到a[i][1]的最终权重和。

根据所述的网格简化方法,所述步骤S14还包括:计算a[i][0]顶点假设收缩到a[i][1]顶点后的三角特征数据,根据简化前后的三角特征数据,计算每个影响网格方面与对应权重值的乘积,最终加起来将值赋值给对应的weight[i]。

根据所述的网格简化方法,所述步骤S15还包括:取weight[6]数组中的最小值weight[t],weight[t]值小于预设的权重阈值,存储a[t][0]到顶点删除列表中,并将网格三角形数组中等于a[t][0]的顶点序号改成a[t][1]的顶点序号。

本发明的技术方案还包括一种基于法向因素的网格简化方法,其特征在于,该方法包括:

S81,获取网格;

S82,对网格进行简化时,对落在模型轮廓上的顶点概率进行计算,若简化后的顶点法向向量与简化前的顶点法向向量夹角超过指定阈值,则简化时不删除对应顶点;

S83,对网格进行简化时,对落在模型轮廓上的顶点概率进行计算,若简化后的三角面法向向量与简化前的顶点三角面向量夹角超过指定阈值,则简化时不删除对应顶点。

本发明的技术方案还包括一种基于几何因素的网格简化方法,其特征在于,该方法包括:S91,对网格进行简化时,先导入网格,自动在网格原顶点处生成对应的新顶点,新顶点与原顶点的法向向量和uv不一致;S92,为新顶点根据不同的几何因素添加对应的权重值。

根据所述的基于几何因素的网格简化方法,其特征在于,所述步骤S92还包括:获取简化网格的边长和三角面面积,对低于预设阈值的边长和三角面面积对应的三角面进行删除。

据所述的基于几何因素的网格简化方法,其特征在于,所述步骤S92还包括:获取简化前及简化前后网格的总面积,若简化前及简化前后网格的总面积差不超过预设阈值,则删除对应的网格顶点。

据所述的基于几何因素的网格简化方法,其特征在于,所述步骤S92还包括:用于对网格简化前及简化后的顶点距离网格中心的总距离差进行计算,若总距离差低于预设阈值,则删除对应的网格顶点。

据所述的基于几何因素的网格简化方法,其特征在于,所述步骤S92还包括:用于对网格简化前及简化后的顶点总角度差进行计算,若总角度差低于预设阈值,则删除对应的网格顶点。

本发明的技术方案还一种基于uv因素的网格简化方法,该方法包括:用于对网格简化前及简化后的uv总面积差进行计算,若uv总面积差低于预设阈值,则删除对应的网格顶点。

本发明的有益效果为:

1.自动化生成简化网格从而释放美术手动删减所需占用的大量时间。根据网格简化算法编写简单的导出网格编辑器,从而实现了在游戏中自动化生成满足具体需求的简化网格版本,从而替代了美术手动操作所占用的大量时间;

2.网格可以根据不同影响因素权重修改来生成满足需求的简化版本。通过修改基于法向、几何、uv三大因素相关的权重,进而影响网格中边的最终权重值,从而可以输出满足不同权重值的网格简化版本;

3.网格在减少顶点和面加速绘制的同时还能够更好地保留物体的视觉特征。该网格简化算法不仅可以减少顶点和面使得加速物体渲染,而且算法计算了模型中顶点和面的法向相关因素,使用相关公式保留了网格模型中的视觉特征点,从而使得网格简化后的视觉效果很好。

附图说明

图1所示为现有技术的三维动画软件删减修改不同简化版本的网格的基本流程图;

图2所示为现有技术的使用简单的网格算法自动生成简化网格的基本流程图;

图3所示为根据本发明实施方式的基本流程图;

图4所示为根据本发明实施方式的边收缩简化流程图;

图5所示为根据本发明实施方式的边收缩简化方法及基于法向、几何、uv收缩方法的关系图。

具体实施方式

为了使本发明的目的、技术方案和优点更加清楚,下面结合附图和具体实施例对本发明进行详细描述。本发明的游戏图形需求和设计的系统和方法适用于游戏动画图像的开发。

图1所示为根据本发明实施方式的总体结构图。在游戏中为了保持物体的光照着色效果, 加入了法向(法向即法线向量)的影响因素。为了保持物体的整体形状和局部细节的效果,加入了几何的影响因素。由于是在游戏中使用还得考虑到物体的纹理uv的影响,故加入了几何的影响因素。故该算法受到法向、几何、uv三大主因素影响,每个主因素又需要基于不同的方面来考虑。其中法向主要考虑的方面有:顶点法向变化、面法向变化,几何主要考虑的方面有:顶点自动生成、边长、三角面面积、简化后网格的总面积差、删除顶点后离网格中心的距离差、删除顶点后顶点的总角度差;uv主要考虑的方面有:简化后uv的总面积差。

考虑到网格影响的方面比较多,故采用为主要影响方面添加权重值,计算每个影响方面与权重值的乘积,最终加起来作为边的最终值,如果小于指定阈值则做收缩边操作。顶点法向变化的权重设为verNormalWeight,面法向变化的权重设为areaNormalWeight,顶点自动生成的权重设为vertexWeight,边长和面积的权重设为sideLengthWeight,简化后网格的总面积差的权重为areaDiffWeight,删除顶点后离网格中心的距离差的权重为centerDistanceWeight,删除顶点后顶点的总角度差的权重为angleWeight,简化后uv的总面积差的权重为uvWeight。采用权重值有两个好处是,一是可以根据需求修改影响方面对应的权重值,从而生成对应的网格。比如说希望生成的简化网格三角面面积变化不要太大,就调高areaDiffWeight权重值即可;二是非常方便增删对网格的影响方面,增加一个方面可以为其增加一个权重值,删除一个方面只需要把权重值调成0即可。

图4所示为根据本发明实施方式的边收缩简化流程图,详情如下S401~S407所示:

S401,获取网格影响方面的各项权重值(每一个权重值是实际大量测试从而获得得一个合理范围区间,将该范围区间提高给外部来根据需求进行调整。比如sideLengthWeight的合理范围区间是[0,1.5],如果需求想提高边长和面积的权重就可以把sideLengthWeight值调高)。

S402,计算简化前的顶点法向,各三角面的法向和面积,各边长,各顶点是否自动生成重合数组,网格总面积,各顶点关联的面中心离网格中心距离,各顶点关联边的夹角总和,uv总面积(这些数据统称为三角特征数据)。

S403,遍历网格的三角面,为每个三角面生成一个6行2列的二维数组a[6][2],a[i][0]存储的是其三角面中一个顶点序号,a[i][1]存储的是对应顶点收缩后的顶点序号,其中0<=i<6。为每个三角面生成一个长度为6的一维数组weight[6],weight[6]数组存放的是三角面任意一条边的一个端点收缩到另外一个端点的最终权重和,即a[i][0]到a[i][1]的最终权重和。(比如三角面的三个顶点序号分别为k、m、n,那么二维数组a[6][2]={{k,m},{m,k},{k,n},{n,k},{m,n},{n,m}}。

S404,计算a[i][0]顶点假设收缩到a[i][1]顶点后的三角特征数据,根据简化前后的三角特征数据,计算每个影响网格方面与对应权重值的乘积,最终加起来将值赋值给对应的weight[i]。

S405,取weight[6]数组中的最小值,假设是weight[t],如果weight[t]值小于规定的权重阈值(即后面需要将a[t][0]顶点收缩到a[t][1]顶点),存储a[t][0]到顶点删除列表中,并将网格三角形数组中等于a[t][0]的顶点序号改成a[t][1]的顶点序号。

S406,遍历完网格所有三角面后,根据顶点删除列表对网格做边收缩处理,完成一次简化循环。

S407,根据需要可以调整网格影响方面的权重值或规定的权重阈值,重复步骤1到步骤6,进行多次简化循环。

图5所示为根据本发明实施方式的边收缩简化方法及基于法向、几何、uv收缩方法的关系图。根据图5,本发明的技术方案进一步提供了法向、几何、uv因素的简化方法,如下(1)~(3)所示:

(1)法向因素,如下a-b所示,包括

a,顶点法向变化

为了保留网格模型中的视觉特征点,即落在模型轮廓上的概率比较大的点,顶点V落在模型轮廓上的概率Vp的计算方法为其中L={|VVi|},{V,Vi}是顶点V所邻接的边,θ=max{θij},θij是顶点V邻接边(V,Vi)和(V,Vj)所成的角,i≠j,Vp值越大则视觉特征越大,越不能删除该顶点。故权重增加值为Vp*verNormalWeight。

b,面法向变化

为了控制三角形在简化过程中面法向的变化过大导致渲染效果太大改变,故简化后的面法向与简化前的面法向夹角越大,越不能删除该顶点。

该权重增加值为,

其中normalFrom是原顶点边压缩前的法向,normalTo是边压缩后目标顶点的法向,Angle求两个向量的角度(即normalFrom对应算法步骤3的a[i][0]的法向,normalTo对应a[i][1]的法向)。如果包围要收缩边的空间多边形是凹多边形时,收缩这条边可能引起面的法向翻转,造成表面折皱。故随着收缩前后面法向夹角越大,对应的areaNormalWeight值也要越高,如果夹角大于90度要将其areaNormalWeight调到足够高从而避免压缩对应的边,从而避免折皱的发生。

(2)几何因素,如下a-e所示,包括:

a,顶点自动生成在unity游戏引擎中导入的模型网格,会存在部分顶点在相同位置生成 同样顶点,区别仅仅是法向或者uv不一致,这部分顶点是根据相邻接面的夹角大于一定阈值,unity会自动生成相同顶点分割不同三角面。对于这部分的顶点因为存在法向或者uv的不一致,删除该位置的顶点会使得网格视觉特征发生较大的改变,为了保持这部分顶点大大减少删除概率,需要增加对应的权重增加值。

权重增加值为vertexImport*vertexWeight,其中如果顶点自动在同样生成更多顶点,那么该vertexImport值也会调的足够高,减少该顶点被删除概率。

b,边长和三角面面积

网格中边长越长,或者是三角面面积越大,对应的权重增加值越大,这样可以使得表现物体细节的高频成分可以被消除,如微小的面在距离摄像机足够远的位置是不怎么明显的,可以适当地消除。

权重增加值为(normArea+normSideLength)*sideLengthWeight,其中normArea是遍历当前三角面的面积,normSideLength是当前三角面对应顶点的边长。

c,简化后网格的总面积差

通过控制简化前后网格的总面积差关联的权重增加值,来避免总面积差过大造成的物体视觉特征较大的改变。

网格的总面积为

其中n是网格三角形面数,k,m,l是分别是三角形中三个顶点的序号,vs是网格的顶点数组。

简化前后网格的总面积差totalAreaDiff=abs(totalAreaAfter-totalAreaBefore),abs函数是取绝对值,totalAreaBeforer是简化前网格的总面积,totalAreaAfter是简化后网格的总面积。网格的总面积差越大,越不应该删除该顶点,权重增加值为totalAreaDiff*totalDiffWeight。

d,删除顶点后离网格中心的距离差

通过控制删除顶点前后离网格中心的距离差关联的权重增加值,来避免距离差过大造成的物体视觉特征较大的改变。

顶点到网格中心的距离是指顶点相邻接所有面的重心均值到网格中心的距离,即 centerDistance=cd[k]+cd[m]+cd[l],

其中n是网格三角形面数,k,m,l是分别是三角形中三个顶点的序号,cd是存放各个顶点到网格中心距离的数组。

删除顶点前后离网格中心的距离差totalCenterDiff=abs(totalCenterAfter-totalCenterBefore),totalCenterBefore是顶点删除前离网格中心的距离,totalCenterAfter是顶点删除后收缩到的顶点离网格中心的距离。顶点离网格中心的距离差越大,越不应该删除该顶点,故权重增加值为totalCenterDiff*centerDistanceWeight。

e,删除顶点后顶点的总角度差

通过控制删除顶点前后顶点的总角度差关联的权重增加值,来避免顶点总角度差过大做出的物体视觉特征较大的改变。顶点的总角度∑θi,j,θij是指顶点V邻接边(V,Vi)和(V,Vj)所成的角度之和,i≠j。

计算删除顶点前后顶点的总角度差为totalAngleDiff=abs(totalAngleAfter-totalAngleBefore)totalAngleDiff,totalAngleBefore是顶点删除前总角度,totalAngleAfter是顶点删除后收缩到的顶点的总角度。顶点的总角度差越大,越不应该删除该顶点,故权重增加值为totalAngleDiff*angleWeight。

(3)uv因素,具体如下所示:

简化后uv的总面积差通过控制简化前后uv的总面积差关联的权重增加值,来避免uv总面积差过大导致物体的纹理视觉发生很大的改变。uv的总面积为 Area=area(uv[k],uv[m],uv[l]),其中n是网格三角形面数,k,m,l是分别是三角形中三个顶点的序号,uv是网格的uv数组。计算简化前后的uv的总面积差totalUvAreaDiff=abs(totalUvAreaAfter-totalUvAreaBefore),totalUvAreaBefore是简化前的uv总面积,totalUvAreaAfter是简化后的uv总面积。uv的总面积差越大,越不应该删除该顶点,故权重增加值为totalUvAreaDiff*uvWeight。

以上所述,只是本发明的较佳实施例而已,本发明并不局限于上述实施方式,只要其以相同的手段达到本发明的技术效果,都应属于本发明的保护范围。在本发明的保护范围内其技术方案和/或实施方式可以有各种不同的修改和变化。

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