三维模型处理方法、装置及存储介质转让专利

申请号 : CN202310527715.1

文献号 : CN116402988B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 马鸣玉王国鸿张荣岩

申请人 : 北京冰河起源科技有限公司

摘要 :

本发明提供了一种三维模型处理方法、装置及存储介质,方法包括:获取原始三维模型中具有相邻关系的相邻面;计算两个相邻面之间的三维空间夹角;筛选出三维空间夹角小于夹角阈值的相邻面组,并加入数组中;数组中的相邻面组各创建一个数学集合;遍历数组中的相邻面组并选取当前相邻面组中的一个相邻面,若数组中的其他相邻面组存在与当前选取的相邻面具有相邻关系的面,则将具有相邻关系的面均添加到当前相邻面组对应的数学集合中;持续遍历直至遍历完所有相邻面组;各相邻面组对应的数学集合作为子模型,保留子模型内的面的数量与原始三维模型的面的数量之比大于占比预设值的子模型。采用本发明的方法,能够将三维模型分割成具有相关性的子模型。

权利要求 :

1.一种三维模型处理方法,其特征在于,所述方法包括:

遍历原始三维模型的面,获取原始三维模型中具有相邻关系的相邻面;其中,两个相邻面组成一个相邻面组;

计算两个相邻面之间的三维空间夹角,具体是指:除重合的边之外,一个相邻面组的每个相邻面各包含与重合的边有一个共同的顶点的两条边,两个相邻面形成有共同的顶点的两组边,以共同的顶点作为向量的起点或终点,分别计算两组边对应的空间向量的三维空间夹角;

筛选出三维空间夹角均小于夹角阈值的相邻面组,并将所筛选出的相邻面组加入一个数组中;

针对所述数组中的每个相邻面组各创建一个数学集合;遍历数组中的相邻面组并选取当前相邻面组中的一个相邻面,若数组中的其他相邻面组存在与当前所选取的相邻面具有相邻关系的面,则将所述具有相邻关系的面均添加到当前相邻面组对应的数学集合中;

持续遍历数组中的相邻面组,直至遍历完所有相邻面组;

各相邻面组对应的数学集合作为子模型,统计各子模型内的面的数量,保留子模型内的面的数量与原始三维模型的面的数量之比大于占比预设值的子模型。

2.根据权利要求1所述的三维模型处理方法,其特征在于,所述遍历原始三维模型的面,获取原始三维模型中具有相邻关系的相邻面,包括:遍历原始三维模型的面并获得每个面的边;

指定原始三维模型的一个面,搜索其他的面的边,如果存在重合的边则确定对应的两个面为具有相邻关系的两个相邻面。

3.根据权利要求2所述的三维模型处理方法,其特征在于,所述夹角阈值取值100度到

150度。

4.根据权利要求1至3中任一项所述的三维模型处理方法,其特征在于,所述方法还包括:对所述夹角阈值的调整,包括:依据所述计算两个相邻面之间的三维空间夹角所得到的三维空间夹角数据依序排列,取第50至第80百分位数之间的数值。

5.根据权利要求1所述的三维模型处理方法,其特征在于,所述针对所述数组中的每个相邻面组各创建一个数学集合;遍历数组中的相邻面组并选取当前相邻面组中的一个相邻面,若数组中的其他相邻面组存在与当前所选取的相邻面具有相邻关系的面,则将所述具有相邻关系的面均添加到当前相邻面组对应的数学集合中;持续遍历数组中的相邻面组,直至遍历完所有相邻面组,包括以下步骤:步骤S141:给数组中的每个相邻面组各创建一个原始数学集合;

步骤S142:从每个相邻面组中选取出一个相邻面F,如果数组中的其他相邻面组存在一个面与相邻面F具有相邻的边,则将与相邻面F具有相邻的边的面添加到包含相邻面F的原始数学集合中;

步骤S143:接着从每个相邻面组中选取出另一个相邻面G,如果数组中的其他相邻面组存在一个面与相邻面G具有相邻的边,则继续将与相邻面G具有相邻的边的面添加到包含相邻面F的原始数学集合中;

步骤S144:再选取出被添加到包含相邻面F的原始数学集合中的一个面H,如果数组中的其他相邻面组存在一个面与面H具有相邻的边,则继续将与面H具有相邻的边的面添加到包含相邻面F的原始数学集合中;

步骤S145:迭代步骤S144,直至数组中的其他相邻面组找不到存在与被添加到包含相邻面F的原始数学集合中的面具有相邻关系的面。

6.根据权利要求5所述的三维模型处理方法,其特征在于,所述方法还包括:若子模型内部存在一定的空白且空白的占比达到预设比例,则从原始三维模型中未加入数组的面中,筛选顶点均在子模型的区间内的面并补充进对应的子模型。

7.根据权利要求6所述的三维模型处理方法,其特征在于,所述占比预设值取值3%至

8%;和/或

所述预设比例取值20%‑30%。

8.一种三维模型处理装置,其特征在于,所述装置包括:

存储器,用于存储计算机可执行指令;

处理器,用于执行所述存储器中存储的计算机可执行指令时,实现权利要求1至7任一项所述的三维模型处理方法。

9.一种计算机可读存储介质,存储有计算机可执行指令,其特征在于,所述计算机可执行指令被处理器执行时,实现权利要求1至7任一项所述的三维模型处理方法。

说明书 :

三维模型处理方法、装置及存储介质

技术领域

[0001] 本发明涉及计算机技术领域,尤其涉及一种三维模型处理方法、装置及存储介质。

背景技术

[0002] 在3dMax建模、动画或游戏等三维模型生成的领域,模型的制作,或是通过深度学习等方式进行生成的技术已经有了很多研究,但是在商业化的步骤上,这些模型往往由于都是一体化的、整体化的而很难进行贴图、调整。在对这类模型的使用上,往往需要大量的人工工作对其进行调整,才能在其对应的场景进行商业化的应用。
[0003] 在实现本发明过程中,发明人发现现有技术中至少存在如下问题:
[0004] 目前已有的对模型进行切分的技术,大多是人为固定的切分线,这样的处理方式并不能做到将模型分割成具有相关性的部分,以至于制作后续操作(例如UV展开、贴图、贴材质等)的成本和复杂度很高。
[0005] 因此需要一种三维模型处理方法、装置及存储介质,以至少部分地解决上述技术问题。

发明内容

[0006] 鉴于此,本发明实施例提供了一种三维模型处理方法、装置及存储介质,以至少解决现有技术中的问题之一。
[0007] 本发明的一个方面提供了一种三维模型处理方法,该方法包括以下步骤:
[0008] 遍历原始三维模型的面,获取原始三维模型中具有相邻关系的相邻面;其中,两个相邻面组成一个相邻面组;
[0009] 计算两个相邻面之间的三维空间夹角;
[0010] 筛选出三维空间夹角均小于夹角阈值的相邻面组,并将所筛选出的相邻面组加入一个数组中;
[0011] 针对所述数组中的每个相邻面组各创建一个数学集合;遍历数组中的相邻面组并选取当前相邻面组中的一个相邻面,若数组中的其他相邻面组存在与当前所选取的相邻面具有相邻关系的面,则将所述具有相邻关系的面均添加到当前相邻面组对应的数学集合中;持续遍历数组中的相邻面组,直至遍历完所有相邻面组;
[0012] 各相邻面组对应的数学集合作为子模型,统计子模型内的面的数量,保留子模型内的面的数量与原始三维模型的面的数量之比大于占比预设值的子模型。
[0013] 在本发明的一些实施例中,所述遍历原始三维模型的面,获取原始三维模型中具有相邻关系的相邻面,包括:
[0014] 遍历原始三维模型的面并获得每个面的边;
[0015] 指定原始三维模型的一个面,搜索其他的面的边,如果存在重合的边则确定对应的两个面为具有相邻关系的两个相邻面。
[0016] 在本发明的一些实施例中,所述计算两个相邻面之间的三维空间夹角,是指:
[0017] 除重合的边之外,一个相邻面组的每个相邻面各包含与重合的边有一个共同的顶点的两条边,两个相邻面形成有共同的顶点的两组边,以共同的顶点作为向量的起点或终点,分别计算两组边对应的空间向量的三维空间夹角。
[0018] 在本发明的一些实施例中,所述夹角阈值取值100度到150度。和/或所述方法还包括对所述夹角阈值的调整,包括:依据所述计算两个相邻面之间的三维空间夹角所得到的三维空间夹角数据依序排列,取第50至第80百分位数之间的数值。
[0019] 在本发明的一些实施例中,所述针对所述数组中的每个相邻面组各创建一个数学集合;遍历数组中的相邻面组并选取当前相邻面组中的一个相邻面,若数组中的其他相邻面组存在与当前所选取的相邻面具有相邻关系的面,则将所述具有相邻关系的面均添加到当前相邻面组对应的数学集合中;持续遍历数组中的相邻面组,直至遍历完所有相邻面组,包括以下步骤:
[0020] 步骤S141:给数组中的每个相邻面组各创建一个原始数学集合;
[0021] 步骤S142:从每个相邻面组中选取出一个相邻面F,如果数组中的其他相邻面组存在一个面与相邻面F具有相邻的边,则将与相邻面F具有相邻的边的面添加到包含相邻面F的原始数学集合中;
[0022] 步骤S143:接着从每个相邻面组中选取出另一个相邻面G,如果数组中的其他相邻面组存在一个面与相邻面G具有相邻的边,则继续将与相邻面G具有相邻的边的面添加到包含相邻面F的原始数学集合中;
[0023] 步骤S144:再选取出被添加到包含相邻面F的原始数学集合中的一个面H,如果数组中的其他相邻面组存在一个面与面H具有相邻的边,则继续将与面H具有相邻的边的面添加到包含相邻面F的原始数学集合中;
[0024] 步骤S145:迭代步骤S144,直至数组中的其他相邻面组找不到存在与被添加到包含相邻面F的原始数学集合中的面具有相邻关系的面。
[0025] 在本发明的一些实施例中,所述方法还包括:
[0026] 若子模型内部存在一定的空白且空白的占比达到预设比例,则从原始三维模型中未加入数组的面中,筛选顶点均在子模型的区间内的面并补充进子模型。
[0027] 在本发明的一些实施例中,所述占比预设值取值3%至8%。和/或所述预设比例取值20%‑30%。
[0028] 本发明的第二方面还提供了一种电子设备,所述设备包括:
[0029] 获取模块,用于遍历原始三维模型的面,获取原始三维模型中具有相邻关系的相邻面;其中,两个相邻面组成一个相邻面组;
[0030] 计算模块,用于计算两个相邻面之间的三维空间夹角;
[0031] 筛选模块,筛选出三维空间夹角均小于夹角阈值的相邻面组,并将所筛选出的相邻面组加入一个数组中;
[0032] 更新模块,用于针对所述数组中的每个相邻面组各创建一个数学集合;遍历数组中的相邻面组并选取当前相邻面组中的一个相邻面,若数组中的其他相邻面组存在与当前所选取的相邻面具有相邻关系的面,则将所述具有相邻关系的面均添加到当前相邻面组对应的数学集合中;持续遍历数组中的相邻面组,直至遍历完所有相邻面组;
[0033] 保留模块,用于各相邻面组对应的数学集合作为子模型,统计子模型内的面的数量,保留子模型内的面的数量与原始三维模型的面的数量之比大于占比预设值的子模型。
[0034] 本发明的第三方面还提供了一种三维模型处理装置,所述装置包括:
[0035] 存储器,用于存储计算机可执行指令;
[0036] 处理器,用于执行所述存储器中存储的计算机可执行指令时,实现上述实施例所述的三维模型处理方法。
[0037] 本发明的第四方面还提供了一种计算机可读存储介质,计算机可读存储介质存储有计算机可执行指令,所述计算机可执行指令被处理器执行时,实现上述实施例所述的三维模型处理方法。
[0038] 根据本发明实施例的三维模型处理方法,可以从三维模型的相邻面组出发,通过计算两个相邻面之间的三维空间夹角,并经过后续的筛选、更新和再筛选,从而达到对模型进行拆分、再重组的目的,能够将三维模型分割成具有相关性的子模型。如:将一个衣服模型上的纽扣从其余部分上分割出来,这样可以单独对纽扣和衣服使用不同的贴图和材质。这样可以降低制作后续操作的成本和复杂度,可以快速地为模型贴上较为复杂的贴图和材质等。此外相较于人工分割、调整方式,本方法可以以自动化、智能化的方式,部分或完全代替复杂和耗时的人工工作,将三维模型变为能够商业化使用的状态。因此该方法有较高的普适性和准确性。
[0039] 本发明的附加优点、目的,以及特征将在下面的描述中将部分地加以阐述,且将对于本领域普通技术人员在研究下文后部分地变得明显,或者可以根据本发明的实践而获知。本发明的目的和其它优点可以通过在说明书以及附图中具体指出的结构实现到并获得。
[0040] 本领域技术人员将会理解的是,能够用本发明实现的目的和优点不限于以上具体所述,并且根据以下详细说明将更清楚地理解本发明能够实现的上述和其他目的。

附图说明

[0041] 此处所说明的附图用来提供对本发明的进一步理解,构成本申请的一部分,并不构成对本发明的限定。附图中的部件不是成比例绘制的,而只是为了示出本发明的原理。为了便于示出和描述本发明的一些部分,附图中对应部分可能被放大,即相对于依据本发明实际制造的示例性装置中的其它部件可能变得更大。在附图中:
[0042] 图1为本发明一实施例的三维模型处理方法的流程图;
[0043] 图2为本发明一实施例的三维模型处理方法中的部分方法流程图;
[0044] 图3为本发明一实施例的三维模型处理方法中的一个相邻面组的示意图;
[0045] 图4为本发明一实施例的三维模型处理方法中的原始三维模型,以及获得的其中两个子模型的示意图;
[0046] 图5为本发明一实施例的电子设备的示意性框图;
[0047] 图6为本发明一实施例的三维模型处理装置的示意性框图。

具体实施方式

[0048] 为使本发明的目的、技术方案和优点更加清楚明白,下面结合实施方式和附图,对本发明做进一步详细说明。在此,本发明的示意性实施方式及其说明用于解释本发明,但并不作为对本发明的限定。
[0049] 在此,还需要说明的是,为了避免因不必要的细节而模糊了本发明,在附图中仅仅示出了与根据本发明的方案密切相关的结构和/或处理步骤,而省略了与本发明关系不大的其他细节。
[0050] 应该强调,术语“包括/包含”在本文使用时指特征、要素、步骤或组件的存在,但并不排除一个或更多个其它特征、要素、步骤或组件的存在或附加。
[0051] 在此,还需要说明的是,如果没有特殊说明,术语“连接”在本文不仅可以指直接连接,也可以表示存在中间物的间接连接。
[0052] 在下文中,将参考附图描述本发明的实施例。在附图中,相同的附图标记代表相同或类似的部件,或者相同或类似的步骤。
[0053] 首先,将参考图1描述根据本申请实施例的三维模型处理方法100。如图1所示,三维模型处理方法100可以包括如下步骤:
[0054] 在步骤S110,遍历原始三维模型的面,获取原始三维模型中具有相邻关系的相邻面;其中,两个相邻面组成一个相邻面组。
[0055] 在步骤S120,计算两个相邻面之间的三维空间夹角。
[0056] 在步骤S130,筛选出三维空间夹角均小于夹角阈值的相邻面组,并将所筛选出的相邻面组加入一个数组中。
[0057] 在步骤S140,针对所述数组中的每个相邻面组各创建一个数学集合;遍历数组中的相邻面组并选取当前相邻面组中的一个相邻面,若数组中的其他相邻面组存在与当前所选取的相邻面具有相邻关系的面,则将所述具有相邻关系的面均添加到当前相邻面组对应的数学集合中;持续遍历数组中的相邻面组,直至遍历完所有相邻面组。
[0058] 在步骤S150,各相邻面组对应的数学集合作为子模型,统计子模型内的面的数量,保留子模型内的面的数量与原始三维模型的面的数量之比大于占比预设值的子模型。
[0059] 在本申请的实施例中,首先通过遍历原始三维模型的面,获取原始三维模型中具有相邻关系的相邻面。接着计算两个相邻面之间的三维空间夹角。筛选出三维空间夹角均小于夹角阈值的相邻面组,并将三维空间夹角均小于夹角阈值的相邻面组加入一个数组中。然后针对所述数组中的每个相邻面组各创建一个数学集合;遍历数组中的相邻面组并选取当前相邻面组中的一个相邻面,若数组中的其他相邻面组存在与当前所选取的相邻面具有相邻关系的面,则将所述具有相邻关系的面均添加到当前相邻面组对应的数学集合中;持续遍历数组中的相邻面组,直至遍历完所有相邻面组。最后各相邻面组对应的数学集合作为子模型,统计子模型内的面的数量,保留子模型内的面的数量与原始三维模型的面的数量之比大于占比预设值的子模型。,
[0060] 通过上述过程的描述可知,根据本申请实施例的三维模型处理方法100,相较于传统的方法,本方法可以从三维模型的相邻面组出发,通过计算两个相邻面之间的三维空间夹角,并经过后续的筛选(步骤S130的内容)、更新(步骤S140的内容)和再筛选(步骤S150的内容),从而达到对模型进行先拆分、再重组的目的,能够将三维模型分割成具有相关性的子模型。其中,步骤S110至步骤S130的内容对应于拆分的过程,步骤S140至步骤S150的内容对应于再重组的过程。
[0061] 其中,参考图2,在步骤S140中,步骤例如可以是:对数组中的每个相邻面组各创建一个原始数学集合;指定一个原始数学集合,遍历数组中的相邻面组,若数组中的其他相邻面组存在与指定的原始数学集合中的一个相邻面具有相邻关系的面,则将具有相邻关系的面添加到指定的原始数学集合中,构成一个新的数学集合,命名为第一更新数学集合;执行对第一更新数学集合的更新过程,更新过程包括:继续遍历数组中的相邻面组,若数组中的其他相邻面组存在与第一更新数学集合中被添加的面具有相邻关系的面,则继续添加到第一更新数学集合中,构成一个新的数学集合,命名为第二更新数学集合;迭代执行更新过程,直至数组中的其他相邻面组找不到存在与第一更新数学集合中被添加的面具有相邻关系的面,此时的第二更新数学集合作为最终的数学集合。
[0062] 在图示实施例中,首先通过遍历原始三维模型的面,获取原始三维模型中具有相邻关系的相邻面。接着计算两个相邻面之间的三维空间夹角。筛选出三维空间夹角均小于夹角阈值的相邻面组,并将三维空间夹角均小于夹角阈值的相邻面组加入一个数组中。然后对数组中的每个相邻面组各创建一个原始数学集合;遍历数组中的相邻面组,若数组中的其他相邻面组存在与指定的原始数学集合中的一个相邻面具有相邻关系的面,则将具有相邻关系的面添加到指定的原始数学集合中,构成第一更新数学集合;执行对第一更新数学集合的更新过程,获取第二更新数学集合;迭代执行更新过程,直至数组中的其他相邻面组找不到存在与第一更新数学集合中被添加的面具有相邻关系的面,此时的第二更新数学集合作为最终的数学集合。
[0063] 最后,各相邻面组对应的数学集合作为子模型,统计子模型内的面的数量,保留子模型内的面的数量与原始三维模型的面的数量之比大于占比预设值的子模型。其中,各相邻面组对应的数学集合即包括上述内容中所描述的所有的原始数学集合、第一更新数学集合、第二更新数学集合和最终的数学集合。参考图4,根据本申请的方法,如图4所示的原始三维模型,比如其中的头、身体、发饰,包括头部和身体凸起的部分,均可以单独拆解出来。可以拆出总计20个满足要求的子模型,图4中仅示出了其中两个子模型。其中每个子模型都可编辑、可贴图。原本较为复杂的UV展开,经过本方法处理后也更容易进行展开。
[0064] 下面将具体描述根据本申请实施例的三维模型处理方法100的上述各步骤的内容。
[0065] 在本申请的实施例中,步骤S110中遍历原始三维模型的面,获取原始三维模型中具有相邻关系的相邻面。具体地,可以遍历原始三维模型的面并获得每个面的边。然后指定原始三维模型的其中一个面,搜索其他的面的边。如果存在重合的边则确定对应的两个面为具有相邻关系的两个相邻面。实际中,往往遍历一个三维模型的面,最终能获得数量较大的相邻面。其中,我们把两个相邻面称为一个相邻面组。其中,原始三维模型的面由原始三维模型本身决定,当原始三维模型设计或绘制完成时,它的面便就确定,同时每个面的边也确定,此为本领域的现有技术,在此不进行详述。
[0066] 在本申请的实施例中,步骤S120中计算两个相邻面之间的三维空间夹角。
[0067] 为便于说明,我们假设两个相邻面均是四边面(即每个相邻面有四条边)。当然三维模型中的一个相邻面实际可以是三边面,可以是五边面,还可以是其他数量边面,此处仅以四边面为例,并不代表对其进行限制。参考图3,图3为本发明一实施例的三维模型处理方法中的一个相邻面组的示意图。假设空间中有两个四边面A和B(为表示方便,假设两个四边面在同一个平面中,实际情况下可以是任意两个平面上的四边面),其中A有四个顶点A1、A2、A3和A4,B有四个顶点A1、A2、B3和B4,则A、B两个面有A1和A2两个顶点重合,A1和A2形成的边也重合。根据图3我们能看出在空间中有A3A1和B3A1对应的两个向量相交,我们可以通过以下公式求出这两个向量在空间中形成的夹角度数:
[0068]
[0069] 其中, 即为我们要求的角度,(x1,y1,z1)和(x2,y2,z2)则为两个参与计算的向量的值,即A3A1和B3A1对应的两个向量的值。如图3所示,不难发现,如果两个四边面有一条相邻的边,记这条边为E,则两个四边面中会各包含两条边(不含E)和E有一个共同的顶点,分别为A3A1、A4A2和B3A1、B4A2。因此我们需要计算两个三维空间夹角。同理,按上述方法可求出A4A2和B4A2对应的两个向量在空间中形成的夹角度数,为便于描述记为α。这样通过上述方法可以求得一系列的角度 和对应的一系列的角度α。
[0070] 在本申请的实施例中,步骤S130中筛选出三维空间夹角均小于夹角阈值的相邻面组,并将三维空间夹角均小于夹角阈值的相邻面组加入一个数组中。
[0071] 其中,夹角阈值具体要取决于三维模型的形状。夹角阈值一般可以为100度到150度,其中120度则较为合适。对于一般的三维模型来说,角度越接近180度,我们可以认为两个面越是接近一个平面,三维模型中部分面由于处于自然的曲面上,会具有持续的近乎180度的弯曲,而一个小于等于120度的角,则更可能是因为结构上产生了变化而形成了较大的角度弯曲。将两个三维空间夹角均小于夹角阈值的相邻面组筛选出来并加入到一个数组。而判断三维空间夹角是否小于这个选定的夹角阈值,只需要将步骤S120计算的结果与选定的夹角阈值进行比较,如果小于选定的夹角阈值(如120度),则可以将对应的一个相邻面组(例如图3中提及的A面和B面)加入一个无序的数组中,称此数组为L。
[0072] 进一步地,当选定的夹角阈值的表现不佳的情况下(表现不佳指:在拆分结束后,获得的面不能组成完整的子模型(下面将要提及),或者说没有准确地找到子模型的接缝处,使得生成的子模型缺少接缝处的边,或者模型的面数比较少,导致即使是曲面形成的角度也过小(小于120度)从而导致判断不够准确),则需要对夹角阈值进行调整。具体的调整方法可以为:依据步骤S120计算得出的所有三维空间夹角数据依序排列(例如从小到大,或者从大到小),并取第50至第80之间百分位数之间的数值。而具体的取值,可以根据模型曲面的占比、总面数来判断,可以从第60百分位数开始取值(具体数值可能需要几次尝试)。
[0073] 在本申请的实施例中,步骤S140中针对数组L中的每个相邻面组各创建一个数学集合;遍历数组中的相邻面组并选取当前相邻面组中的一个相邻面,若数组中的其他相邻面组存在与当前所选取的相邻面具有相邻关系的面,则将具有相邻关系的面均添加到当前相邻面组对应的数学集合中;持续遍历数组中的相邻面组,直至遍历完所有相邻面组。步骤S140可以具体包括以下步骤:
[0074] 在步骤S141,给数组L中的每个相邻面组各创建一个原始数学集合。
[0075] 在步骤S142,从每个相邻面组中选取出一个相邻面F,如果数组中的其他相邻面组存在一个面与相邻面F具有相邻的边,则将与相邻面F具有相邻的边的面添加到包含相邻面F的原始数学集合中。
[0076] 在步骤S143,接着从每个相邻面组中选取出另一个相邻面G,如果数组中的其他相邻面组存在一个面与相邻面G具有相邻的边,则继续将与相邻面G具有相邻的边的面添加到包含相邻面F的原始数学集合中。
[0077] 在步骤S144,再选取出被添加到包含相邻面F的原始数学集合中的一个面H,如果数组中的其他相邻面组存在一个面与面H具有相邻的边,则继续将与面H具有相邻的边的面添加到包含相邻面F的原始数学集合中。
[0078] 在步骤S145,迭代步骤S144,直至数组中的其他相邻面组找不到存在与被添加到包含相邻面F的原始数学集合中的面具有相邻关系的面。
[0079] 在本申请的实施例中,步骤S150中各相邻面组对应的数学集合作为子模型,统计子模型内的面的数量,保留子模型内的面的数量与原始三维模型的面的数量之比大于占比预设值的子模型。在步骤S150中,占比预设值可以由原始三维模型的面的总的数量决定。可以在步骤S110中遍历原始三维模型的面时,统计原始三维模型的面的总的数量。这里可以大致认为,一个分布均匀的三维模型(即不存在三维模型的某一个地方有大量的面来填充细节,而某些地方只有少量的面),每个子模型应该占原始三维模型总面数的3%至8%(这个数字可以自主进行调整),即占比预设值一般取值3%至8%。考虑到有些模型面数很大(几十万面或者更多),有些子模型可能会出现面数较少的情况,例如在一个很大的建筑物顶部有少量的凸起结构(类似建筑物屋顶的水箱),在这种情况下如果需要拆分出来这类小组件,可以考虑适当降低占比预设值。理想情况下,在各部分子模型大小不存在巨大差异的情况时,可以考虑采用5%为占比预设值,效果较好。以这个方式筛选一批子模型,以避免出现将子模型过度拆分的情况,避免出现原本可能是同一个子模型的部分被拆分为了多个,或是每个子模型存在面不全的情况。还能够避免拆分后的子模型出现重复部分的情况,避免了后续颜色、贴图或材质信息冲突的问题。
[0080] 在一些实施例中,当子模型内部存在一定的空白且空白的占比达到预设比例,则从原始三维模型中未加入数组L的面中,筛选顶点均在子模型的区间内的面并补充进子模型。
[0081] 具体地,在观察最终结果时,某个子模型存在一种情况:虽然子模型的边缘部分的面被完全选择出来,但是子模型内部存在一定的空白,如果这种空白的占比达到20%‑30%或以上(即预设比例取值20%‑30%),那么我们可以认为通过步骤S130没有筛选出足够多的相邻面组,那么在步骤S140之后可能会有子模型不够完整的情况。例如:一个正方体只有靠近十二条边的地方有足够多数量的面,而靠近中间的部分会缺少面信息。那么可以从原始三维模型中未加入数组L的面中,选出其顶点均处于这一个子模型的区间内的面进行补充。这个区间可以简单地通过判断组成这个子模型的顶点在xyz三个轴上的最大与最小之间的取值范围。例如一个子模型的区间为:x在0到1之间,y在‑1到1之间,z在1到2之间,那么可以通过这种方式来补充面。
[0082] 基于上面的描述,根据本申请实施例的三维模型处理方法100,本方法可以从三维模型的相邻面组出发,通过计算两个相邻面之间的三维空间夹角,并经过后续的筛选、更新和再筛选,从而达到对模型进行拆分、再重组的目的,能够将三维模型分割成具有相关性的子模型。此外相较于人工分割、调整的处理方式,本方法可以以自动化、智能化的方式,部分或完全代替复杂和耗时的人工工作,将三维模型变为能够商业化使用的状态。因此该方法有较高的普适性和准确性。
[0083] 参考图5,接下来描述本申请另一方面提供的电子设备200。设备200用于实现本发明实施例的三维模型处理方法。
[0084] 装置200可以包括获取模块210、计算模块220、筛选模块230、更新模块240和保留模块250。
[0085] 具体地,获取模块210用于遍历原始三维模型的面,获取原始三维模型中具有相邻关系的相邻面。其中,两个相邻面组成一个相邻面组。
[0086] 计算模块220用于计算两个相邻面之间的三维空间夹角。
[0087] 筛选模块230筛选出三维空间夹角均小于夹角阈值的相邻面组,并将三维空间夹角均小于夹角阈值的相邻面组加入一个数组中。
[0088] 更新模块240用于针对所述数组中的每个相邻面组各创建一个数学集合;遍历数组中的相邻面组并选取当前相邻面组中的一个相邻面,若数组中的其他相邻面组存在与当前所选取的相邻面具有相邻关系的面,则将所述具有相邻关系的面均添加到当前相邻面组对应的数学集合中;持续遍历数组中的相邻面组,直至遍历完所有相邻面组。
[0089] 保留模块250用于各相邻面组对应的数学集合作为子模型,统计子模型内的面的数量,保留子模型内的面的数量与原始三维模型的面的数量之比大于占比预设值的子模型。
[0090] 以上示例性地示出了根据本申请实施例的三维模型处理方法100。下面结合图6描述本申请另一方面提供的三维模型处理装置300。
[0091] 参照图6来描述用于实现本发明实施例的三维模型处理方法的示例装置300。
[0092] 装置300可以包括一个或多个处理器321、一个或多个存储器322,还可以包括输入装置323以及输出装置324,这些组件通过总线系统325和/或其它形式的连接机构(未示出)互连。应当注意,图6所示的装置300的组件和结构只是示例性的,而非限制性的,根据需要,所述装置也可以具有其他组件和结构。
[0093] 所述处理器321可以是中央处理单元(CPU)或者具有数据处理能力和/或指令执行能力的其它形式的处理单元,并且可以控制所述装置300中的其它组件以执行期望的功能。
[0094] 所述存储器322可以包括一个或多个计算机程序产品,所述计算机程序产品可以包括各种形式的计算机可读存储介质,例如易失性存储器和/或非易失性存储器。所述易失性存储器例如可以包括随机存取存储器(RAM)和/或高速缓冲存储器(cache)等。所述非易失性存储器例如可以包括只读存储器(ROM)、硬盘、闪存等。在所述计算机可读存储介质上可以存储一个或多个计算机程序指令,处理器321可以运行所述程序指令,以实现本文所述的本发明实施例中(由处理器实现)的客户端功能以及/或者其它期望的功能。在所述计算机可读存储介质中还可以存储各种应用程序和各种数据,例如所述应用程序使用和/或产生的各种数据等。
[0095] 所述输入装置323可以是用户用来输入指令的装置,并且可以包括键盘、鼠标、麦克风和触摸屏等中的一个或多个。此外,所述输入装置323也可以是任何接收信息的接口。
[0096] 所述输出装置324可以向外部(例如用户)输出各种信息(例如图像或声音),并且可以包括显示器、扬声器等中的一个或多个。此外,所述输出装置324也可以是任何其他具备输出功能的设备。
[0097] 示例性地,用于实现根据本发明实施例的三维模型处理方法100的示例装置300可以应用于终端设备(比如手机)、平板电脑、笔记本电脑、超级移动个人计算机(ultra‑mobilepersonal computer,UMPC)、手持计算机、上网本、个人数字助理(personal digital assistant,PDA)、可穿戴设备(如智能手表、智能眼镜或者智能头盔等)、增强现实(augmented reality,AR)/虚拟现实(virtualreality,VR)设备、智能家居设备、车载电脑等电子设备中,本申请实施例对此不做任何限制。
[0098] 参考图6,根据本申请实施例的三维模型处理装置300包括处理器321和存储器322,存储器322存储有由处理器321运行的可执行程序,所述可执行程序在被处理器321运行时,使得处理器321执行前文所述的根据本申请实施例的三维模型处理方法100。本领域技术人员可以结合前文所述的内容理解根据本申请实施例的三维模型处理装置的具体操作,为了简洁,此处不再赘述具体的细节,仅描述处理器321的一些主要操作。
[0099] 在本申请的一个实施例中,所述可执行程序在被处理器321运行时,使得处理器321执行如下步骤:遍历原始三维模型的面,获取原始三维模型中具有相邻关系的相邻面。
计算两个相邻面之间的三维空间夹角。筛选出三维空间夹角均小于夹角阈值的相邻面组,并将三维空间夹角均小于夹角阈值的相邻面组加入一个数组中。针对所述数组中的每个相邻面组各创建一个数学集合;遍历数组中的相邻面组并选取当前相邻面组中的一个相邻面,若数组中的其他相邻面组存在与当前所选取的相邻面具有相邻关系的面,则将所述具有相邻关系的面均添加到当前相邻面组对应的数学集合中;持续遍历数组中的相邻面组,直至遍历完所有相邻面组。各相邻面组对应的数学集合作为子模型,统计子模型内的面的数量,保留子模型内的面的数量与原始三维模型的面的数量之比大于占比预设值的子模型。
[0100] 在本申请的一个实施例中,所述可执行程序在被处理器321运行时,使得处理器321还执行如下步骤:若子模型内部存在一定的空白且空白的占比达到预设比例,则从原始三维模型中未加入数组的面中,筛选顶点均在子模型的区间内的面并补充进子模型。
[0101] 此外,根据本申请实施例,本发明还提供了一种存储介质,在所述存储介质上存储了计算机程序,在所述计算机程序被处理器运行时用于执行本申请实施例的三维模型处理方法100的相应步骤。所述存储介质例如可以包括智能电话的存储卡、平板电脑的存储部件、个人计算机的硬盘、只读存储器(ROM)、可擦除可编程只读存储器(EPROM)、便携式紧致盘只读存储器(CD‑ROM)、USB存储器、或者上述存储介质的任意组合。所述计算机可读存储介质可以是一个或多个计算机可读存储介质的任意组合。
[0102] 基于上面的描述,根据本申请实施例的三维模型处理方法100,相较于传统的方法,本方法可以从三维模型的相邻面组出发,通过计算两个相邻面之间的三维空间夹角,并经过后续的筛选、更新和再筛选,从而达到对模型进行先拆分、再重组的目的,能够将三维模型分割成具有相关性的子模型。并且保证没有重复或过度拆解的情况。
[0103] 尽管这里已经参考附图描述了示例实施例,应理解上述示例实施例仅仅是示例性的,并且不意图将本申请的范围限制于此。本领域普通技术人员可以在其中进行各种改变和修改,而不偏离本申请的范围和精神。所有这些改变和修改意在被包括在所附权利要求所要求的本申请的范围之内。
[0104] 本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。
[0105] 在本申请所提供的几个实施例中,应该理解到,所揭露的设备和方法,可以通过其它的方式实现。例如,以上所描述的设备实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个设备,或一些特征可以忽略,或不执行。
[0106] 在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本申请的实施例可以在没有这些具体细节的情况下实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。
[0107] 类似地,应当理解,为了精简本申请并帮助理解各个发明方面中的一个或多个,在对本申请的示例性实施例的描述中,本申请的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该本申请的方法解释成反映如下意图:即所要求保护的本申请要求比在每个权利要求中所明确记载的特征更多的特征。更确切地说,如相应的权利要求书所反映的那样,其发明点在于可以用少于某个公开的单个实施例的所有特征的特征来解决相应的技术问题。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本申请的单独实施例。
[0108] 本领域的技术人员可以理解,除了特征之间相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。
[0109] 此外,本领域的技术人员能够理解,尽管在此所述的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本申请的范围之内并且形成不同的实施例。例如,在权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。
[0110] 本申请的各个部件实施例可以以硬件实现,或者以在一个或者多个处理器上运行的软件模块实现,或者以它们的组合实现。本领域的技术人员应当理解,可以在实践中使用微处理器或者数字信号处理器(DSP)来实现根据本申请实施例的一些模块的一些或者全部功能。本申请还可以实现为用于执行这里所描述的方法的一部分或者全部的装置程序(例如,计算机程序和计算机程序产品)。这样的实现本申请的程序可以存储在计算机可读介质上,或者可以具有一个或者多个信号的形式。这样的信号可以从因特网网站上下载得到,或者在载体信号上提供,或者以任何其他形式提供。
[0111] 应该注意的是上述实施例对本申请进行说明而不是对本申请进行限制,并且本领域技术人员在不脱离所附权利要求的范围的情况下可设计出替换实施例。在权利要求中,不应将位于括号之间的任何参考符号构造成对权利要求的限制。单词“包含”不排除存在未列在权利要求中的元件或步骤。位于元件之前的单词“一”或“一个”不排除存在多个这样的元件。本申请可以借助于包括有若干不同元件的硬件以及借助于适当编程的计算机来实现。在列举了若干装置的单元权利要求中,这些装置中的若干个可以是通过同一个硬件项来具体体现。单词第一、第二、以及第三等的使用不表示任何顺序。可将这些单词解释为名称。
[0112] 以上所述,仅为本申请的具体实施方式或对具体实施方式的说明,本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本申请的保护范围之内。本申请的保护范围应以权利要求的保护范围为准。