CN116912431B - 数据处理方法、装置、电子设备、存储介质及程序产品 - Google Patents

数据处理方法、装置、电子设备、存储介质及程序产品 Download PDF

Info

Publication number
CN116912431B
CN116912431B CN202311183634.0A CN202311183634A CN116912431B CN 116912431 B CN116912431 B CN 116912431B CN 202311183634 A CN202311183634 A CN 202311183634A CN 116912431 B CN116912431 B CN 116912431B
Authority
CN
China
Prior art keywords
voxel
model
detected
voxels
determining
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN202311183634.0A
Other languages
English (en)
Other versions
CN116912431A (zh
Inventor
周江
王建行
罗德志
王枭
严明
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Tencent Technology Shenzhen Co Ltd
Original Assignee
Tencent Technology Shenzhen Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Tencent Technology Shenzhen Co Ltd filed Critical Tencent Technology Shenzhen Co Ltd
Priority to CN202311183634.0A priority Critical patent/CN116912431B/zh
Publication of CN116912431A publication Critical patent/CN116912431A/zh
Application granted granted Critical
Publication of CN116912431B publication Critical patent/CN116912431B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T17/00Three dimensional [3D] modelling, e.g. data description of 3D objects
    • AHUMAN NECESSITIES
    • A63SPORTS; GAMES; AMUSEMENTS
    • A63FCARD, BOARD, OR ROULETTE GAMES; INDOOR GAMES USING SMALL MOVING PLAYING BODIES; VIDEO GAMES; GAMES NOT OTHERWISE PROVIDED FOR
    • A63F13/00Video games, i.e. games using an electronically generated display having two or more dimensions
    • A63F13/50Controlling the output signals based on the game progress
    • A63F13/52Controlling the output signals based on the game progress involving aspects of the displayed game scene
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T19/00Manipulating 3D models or images for computer graphics
    • G06T19/20Editing of 3D images, e.g. changing shapes or colours, aligning objects or positioning parts
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T2219/00Indexing scheme for manipulating 3D models or images for computer graphics
    • G06T2219/20Indexing scheme for editing of 3D models
    • G06T2219/2004Aligning objects, relative positioning of parts
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02PCLIMATE CHANGE MITIGATION TECHNOLOGIES IN THE PRODUCTION OR PROCESSING OF GOODS
    • Y02P90/00Enabling technologies with a potential contribution to greenhouse gas [GHG] emissions mitigation
    • Y02P90/30Computing systems specially adapted for manufacturing

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Computer Graphics (AREA)
  • Software Systems (AREA)
  • General Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Multimedia (AREA)
  • Geometry (AREA)
  • Architecture (AREA)
  • Computer Hardware Design (AREA)
  • General Engineering & Computer Science (AREA)
  • Image Generation (AREA)

Abstract

本申请实施例提供一种数据处理方法、装置、电子设备、存储介质及程序产品,至少应用于游戏领域和动画领域,其中,方法包括:在预设的三维空间立方体内确定每一待检测模型的模型表面的多个表面体素和每一表面体素的表面体素信息;在三维空间立方体内,基于每一表面体素的表面体素信息,确定每一待检测模型的模型内部的多个内部体素和每一内部体素的内部体素信息;基于每一待检测模型的表面体素的表面体素信息和内部体素的内部体素信息,确定至少两个待检测模型之间的重叠体素的数量;基于重叠体素的数量、每一待检测模型的表面体素的数量和内部体素的数量,确定至少两个待检测模型的穿模检测结果。通过本申请,能够提高穿模检测的效率和准确性。

Description

数据处理方法、装置、电子设备、存储介质及程序产品
技术领域
本申请实施例涉及互联网领域,涉及但不限于一种数据处理方法、装置、电子设备、存储介质及程序产品。
背景技术
在3D显示领域,尤其是在3D游戏中,显示画面因为角色的碰撞体积设定错误,会出现角色相互穿透或者重叠的情况,称为穿模现象。穿模现象会造成用户不好的使用体验,因此需要针对穿模现象进行穿模检测,从而对存储穿模现象的动画进行相应的处理。
相关技术中,在进行穿模检测时,通常是对两个模型先进行布尔相交计算,再求得相交体积,最后通过相交体积占比评估穿模程度。
但是,相关技术中通过布尔计算的方式,在复杂的模型上应用时,算法容易出错且速度太慢,会导致整个方案的效率低、鲁棒性差。由于模型中包含大量的面片、边界和内部结构,而布尔计算会对这些数据进行复杂的几何运算,如交集、并集、差集等操作,而其中算法或数据处理顺序的不同,将导致无法正确处理模型的拓扑关系,从而产生错误的结果,影响穿模检测结果的准确性。
发明内容
本申请实施例提供一种数据处理方法、装置、电子设备、存储介质及程序产品,至少能够应用于游戏领域和动画领域中,不仅能够提高穿模检测的效率,还能够提高穿模检测结果的准确性。
本申请实施例的技术方案是这样实现的:
本申请实施例提供一种数据处理方法,包括:获取至少两个待检测模型的模型数据;基于每一所述待检测模型的模型数据,在预设的三维空间立方体内确定每一所述待检测模型的模型表面的多个表面体素和每一所述表面体素的表面体素信息;在所述三维空间立方体内,基于每一所述表面体素的表面体素信息,确定每一所述待检测模型的模型内部的多个内部体素和每一所述内部体素的内部体素信息;所述表面体素和所述内部体素具有相同的体积;基于每一所述待检测模型的所述表面体素的表面体素信息和所述内部体素的内部体素信息,确定所述至少两个待检测模型之间的重叠体素的数量;基于所述重叠体素的数量、每一所述待检测模型的所述表面体素的数量和所述内部体素的数量,确定所述至少两个待检测模型的穿模检测结果。
本申请实施例提供一种数据处理装置,包括:获取模块,用于获取至少两个待检测模型的模型数据;第一确定模块,用于基于每一所述待检测模型的模型数据,在预设的三维空间立方体内确定每一所述待检测模型的模型表面的多个表面体素和每一所述表面体素的表面体素信息;第二确定模块,用于在所述三维空间立方体内,基于每一所述表面体素的表面体素信息,确定每一所述待检测模型的模型内部的多个内部体素和每一所述内部体素的内部体素信息;所述表面体素和所述内部体素具有相同的体积;第三确定模块,用于基于每一所述待检测模型的所述表面体素的表面体素信息和所述内部体素的内部体素信息,确定所述至少两个待检测模型之间的重叠体素的数量;第四确定模块,用于基于所述重叠体素的数量、每一所述待检测模型的所述表面体素的数量和所述内部体素的数量,确定所述至少两个待检测模型的穿模检测结果。
在一些实施例中,所述模型数据包括所述待检测模型的模型表面的多个三角面片的顶点位置坐标和所述三角面片的索引信息;所述第一确定模块还用于:针对每一所述待检测模型,依次基于所述待检测模型的模型表面的每一所述三角面片的顶点位置坐标和所述索引信息,确定所述三角面片在所述三维空间立方体内对应的包围框;获取所述包围框中的多个原始体素;分别确定所述包围框中的每一所述原始体素是否与所述三角面片相交;如果确定出任一所述原始体素与所述三角面片相交,确定所述原始体素为所述待检测模型的表面体素,并将所述原始体素的体素信息确定为所述表面体素的表面体素信息。
在一些实施例中,所述第一确定模块还用于:基于所述索引信息确定每一所述三角面片所包括的三个目标顶点;获取所述三个目标顶点中每一目标顶点的顶点位置坐标;基于所述三个目标顶点中每一目标顶点的顶点位置坐标对所述三个目标顶点进行连接,生成所述三角面片对应的三角形;在所述三维空间立方体内,获取具有预设尺寸参数且包围所述三角形的立方体;将所述立方体确定为所述三角面片在所述三维空间立方体内对应的包围框。
在一些实施例中,所述第一确定模块还用于:在包围所述三角形的立方体内,获取具有单位尺寸的多个单位立方体;其中,每一所述单位立方体构成一个原始体素。
在一些实施例中,所述第一确定模块还用于:获取所述原始体素的多个体素顶点和所述三角面片所包括的三个目标顶点;分别以每一所述体素顶点和每一所述目标顶点作为分离轴的起点,构建多条分离轴;针对每一条分离轴,确定所述三角面片的每条边和所述原始体素的每条边在所述分离轴上的投影;如果所述三角面片与所述原始体素在任意一条分离轴上的投影不重叠,确定所述三角面片与所述原始体素不相交;如果所述三角面片与所述原始体素在每一条分离轴上的投影均重叠,则确定所述三角面片与所述原始体素相交。
在一些实施例中,所述第一确定模块还用于:基于每一所述待检测模型的模型数据,在预设的三维空间立方体内并行确定所述待检测模型的模型表面的每个表面体素和每一所述表面体素的表面体素信息;其中,在并行确定的过程中,每个内核被分配到所述待检测模型的模型数据中的至少一个三角面片的顶点位置坐标和所述三角面片的索引信息。
在一些实施例中,所述第二确定模块还用于:以每一所述表面体素对应的单位立方体的预设表面上的任意点为射线原点,所述三维空间立方体所在的空间坐标系内的任一方向为延伸方向,确定一条发射射线;确定所述发射射线延伸至每一位置时经过所述表面体素的次数;基于所述发射射线延伸至每一位置时经过所述表面体素的次数,确定所述位置处的原始体素是否为所述待检测模型的模型内部的内部体素;并在确定出所述位置处的原始体素是所述待检测模型的模型内部的内部体素时,将所述位置处的原始体素的体素信息确定为所述内部体素的内部体素信息。
在一些实施例中,所述第二确定模块还用于:将每一所述表面体素对应的单位立方体中靠近所述空间坐标系横轴的底部表面确定为目标表面;将所述目标表面上靠近所述空间坐标系原点的点确定为所述射线原点;将所述空间坐标系内的任意一个坐标轴方向确定为所述延伸方向;基于所述射线原点和所述延伸方向确定一条所述发射射线。
在一些实施例中,所述第二确定模块还用于:如果所述发射射线延伸至任一位置时经过所述表面体素的次数为奇数,则确定所述位置处的原始体素为所述待检测模型的模型内部的内部体素;并将所述位置处的原始体素的体素信息确定为所述表面体素的表面体素信息;如果所述发射射线延伸至任一位置时经过所述表面体素的次数为偶数,则确定所述位置处的原始体素为所述待检测模型的模型外部的外部体素。
在一些实施例中,每一所述原始体素对应一原始体素标识;所述原始体素标识用于标识相应的体素为原始体素或者相应的体素为位于所述待检测模型外部的外部体素;所述原始体素标识被写入至原始体素的体素信息中;每一所述待检测模型对应一模型体素标识;所述模型体素标识用于标识相应的体素是属于所述待检测模型的模型体素,所述模型体素包括所述表面体素和所述内部体素;所述装置还包括:写入模块,用于如果确定出所述位置处的原始体素为所述待检测模型的模型内部的内部体素,以覆盖写入的方式,将所述模型体素标识写入至所述原始体素的体素信息中,形成所述内部体素的内部体素信息;如果确定出任一原始体素为所述待检测模型的模型表面的表面体素,以覆盖写入的方式,将所述模型体素标识写入至所述表面体素的体素信息中,形成所述表面体素的表面体素信息。
在一些实施例中,所述第三确定模块还用于:针对所述三维空间立方体内每一原始体素,如果所述原始体素是所述至少两个待检测模型中的第n个待检测模型的模型体素,将所述第n个待检测模型的模型体素标识写入至所述原始体素的体素信息中;n为大于0的整数,且n小于所述至少两个待检测模型的模型总数量;如果所述原始体素是所述至少两个待检测模型中的第n+1个待检测模型的模型体素,以覆盖写入的方式,将所述第n+1个待检测模型的模型体素标识写入至所述第n个待检测模型的模型体素的体素信息中;如果所述原始体素是所述至少两个待检测模型中的第n+i个待检测模型的模型体素,以覆盖写入的方式,将所述第n+i个待检测模型的模型体素标识写入至所述第n+i-1个待检测模型的模型体素的体素信息中,得到所述三维空间立方体中的每一模型体素的更新后的体素信息;i为大于0的整数,且n+i等于所述至少两个待检测模型的模型总数量;基于所述三维空间立方体中的每一模型体素的更新后的体素信息,确定所述至少两个待检测模型之间的重叠体素的数量。
在一些实施例中,所述第三确定模块还用于:如果基于任一模型体素的更新后的体素信息,确定所述模型体素的模型体素标识是经过所述覆盖写入后的第n+1个待检测模型的模型体素标识,或者,确定所述模型体素的模型体素标识是经过所述覆盖写入后的第n+i个待检测模型的模型体素标识,确定所述模型体素为重叠体素;统计所述三维空间立方体内全部重叠体素的数量。
在一些实施例中,所述第四确定模块还用于:基于每一所述待检测模型的所述表面体素的数量和所述内部体素的数量确定所述待检测模型的模型体素的体素总数量;将所述重叠体素的数量与每一所述待检测模型的模型体素的体素总数量的比值,确定为所述待检测模型的穿模占比;将所述至少两个待检测模型中的最大穿模占比,确定为所述至少两个待检测模型的穿模检测结果。
本申请实施例提供一种电子设备,包括:存储器,用于存储可执行指令;处理器,用于执行所述存储器中存储的可执行指令时,实现上述的数据处理方法。
本申请实施例提供一种计算机程序产品,该计算机程序产品包括可执行指令,可执行指令存储在计算机可读存储介质中;其中,电子设备的处理器从计算机可读存储介质中读取可执行指令,并执行可执行指令时,实现上述的数据处理方法。
本申请实施例提供一种计算机可读存储介质,存储有可执行指令,用于引起处理器执行所述可执行指令时,实现上述的数据处理方法。
本申请实施例具有以下有益效果:
通过确定每一待检测模型的表面体素和内部体素,从而基于每一待检测模型的表面体素的表面体素信息和内部体素的内部体素信息,确定多个待检测模型之间的重叠体素的数量,由于每个体素的体积是一致的,因此基于重叠体素的数量即可确定出多个待检测模型之间是否存储穿模现象,并能够确定出穿模的程度,即得到准确的穿模检测结果。如此,基于体素化的穿模检测,检测的效率只受到体素化过程的影响,而体素化过程即确定表面体素和内部体素的过程,算法容易实现且不易出错,体素化效率较高,因此,相比于相关技术中的穿模检测方法,能够极大的提高穿模检测的效率;并且,由于基于重叠体素的数量进行计算穿模的程度,计算简单且计算准确度高,因此能够极大的提高穿模检测结果的准确性。
附图说明
图1是相关技术中的穿模检测方法的示意图;
图2是相关技术中计算相交模型的体积的示意图;
图3是本申请实施例提供的数据处理系统的一个可选的架构示意图;
图4是本申请实施例提供的电子设备的结构示意图;
图5是本申请实施例提供的数据处理方法的一个可选的流程示意图;
图6是本申请实施例提供的数据处理方法的另一个可选的流程示意图;
图7是本申请实施例提供的确定三角面片在所述三维空间立方体内对应的包围框的实现过程示意图;
图8是本申请实施例提供的判断包围框中的每一原始体素是否与三角面片相交的实现过程示意图;
图9A是本申请实施例提供的判断三角面片与原始体素在每一条分离轴上的投影是否重叠的一种原理图;
图9B是本申请实施例提供的判断三角面片与原始体素在每一条分离轴上的投影是否重叠的另一种原理图;
图9C是本申请实施例提供的判断三角面片与原始体素在每一条分离轴上的投影是否重叠的再一种原理图;
图10是本申请实施例提供的确定发射射线的实现过程示意图;
图11是本申请实施例提供的确定发射射线的原理图;
图12是本申请实施例提供的一种应用场景示意图;
图13是本申请实施例提供的可视化展示单个模型的体素化结果的示意图;
图14是本申请实施例提供的可视化展示重叠体素分布的示意图;
图15是本申请实施例提供的客户端整体流程示意图;
图16是本申请实施例提供的服务端整体流程示意图;
图17是本申请实施例提供的穿模检测方法的算法整体流程图;
图18是本申请实施例提供的2D的图形体素化的过程示意图;
图19是本申请实施例提供的确定体素是否在图形内部的原理示意图。
具体实施方式
为了使本申请的目的、技术方案和优点更加清楚,下面将结合附图对本申请作进一步地详细描述,所描述的实施例不应视为对本申请的限制,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本申请保护的范围。
在以下的描述中,涉及到“一些实施例”,其描述了所有可能实施例的子集,但是可以理解,“一些实施例”可以是所有可能实施例的相同子集或不同子集,并且可以在不冲突的情况下相互结合。除非另有定义,本申请实施例所使用的所有的技术和科学术语与属于本申请实施例的技术领域的技术人员通常理解的含义相同。本申请实施例所使用的术语只是为了描述本申请实施例的目的,不是旨在限制本申请。
下面将对相关技术中的穿模检测方法进行说明:
相关技术中,在进行穿模检测时,是先对两个模型先进行布尔相交计算,再求得相交体积,最后通过相交体积占比评估穿模程度。具体步骤如下:
如图1所示,是相关技术中的穿模检测方法的示意图,是先求出球体101和球体102模型的相交模型103,即图1的中间实体部分。然后,采用如图2所示的方法,计算相交模型的体积:可以先将相交模型三角化,再计算出其有向体积值。大概原理如下:将相交模型的每个三角形与任意选定点(一般为模型或世界原点)连线形成多个四面体,对每个四面体的有向体积(根据选定点与三角形正反面关系确定体积正负)进行累加即可得到模型体积。
但是,相关技术中的方法在对稍复杂的模型上应用时,算法容易出错且速度太慢,会导致整个方案的效率低、鲁棒性差。并且,无法正确处理模型的拓扑关系,从而会产生错误的结果。
基于相关技术中所存在的上述至少一个问题,本申请实施例采用分而治之的思路,将复杂的计算分解为简单的单个三角形与体素的关系问题,从而能够有效解决相关技术中的穿模检测方法所存在的问题。基于此,本申请实施例提供一种数据处理方法,用于实现穿模检测。其中,本申请实施例提供的数据处理方法中,首先,获取至少两个待检测模型的模型数据;然后,基于每一待检测模型的模型数据,在预设的三维空间立方体内确定每一待检测模型的模型表面的多个表面体素和每一表面体素的表面体素信息;并在三维空间立方体内,基于每一表面体素的表面体素信息,确定每一待检测模型的模型内部的多个内部体素和每一内部体素的内部体素信息;表面体素和内部体素具有相同的体积;再然后,基于每一待检测模型的表面体素的表面体素信息和内部体素的内部体素信息,确定至少两个待检测模型之间的重叠体素的数量;最后,基于重叠体素的数量、每一待检测模型的表面体素的数量和内部体素的数量,确定至少两个待检测模型的穿模检测结果。如此,基于体素化的穿模检测,检测的效率只受到体素化过程的影响,而体素化过程即确定表面体素和内部体素的过程,显示比较容易,体素化效率较高,因此,相比于相关技术中的穿模检测方法,能够极大的提高穿模检测的效率;并且,由于基于重叠体素的数量进行计算穿模的程度,计算简单且计算准确度高,因此能够极大的提高穿模检测结果的准确性。
这里,首先说明本申请实施例的数据处理设备的示例性应用,该数据处理设备是用于实现数据处理方法的电子设备。在一种实现方式中,本申请实施例提供的数据处理设备(即电子设备)可以实施为终端,也可以实施为服务器。在一种实现方式中,本申请实施例提供的数据处理设备可以实施为笔记本电脑,平板电脑,台式计算机,移动电话,便携式音乐播放器,个人数字助理,专用消息设备,便携式游戏设备,智能机器人,智能家电和智能车载设备等任意的具备数据处理、游戏动画生成和游戏应用运行功能的终端;在另一种实现方式中,本申请实施例提供的数据处理设备还可以实施为服务器,其中,服务器可以是独立的物理服务器,也可以是多个物理服务器构成的服务器集群或者分布式系统,还可以是提供云服务、云数据库、云计算、云函数、云存储、网络服务、云通信、中间件服务、域名服务、安全服务、内容分发网络(CDN,Content Delivery Network)、以及大数据和人工智能平台等基础云计算服务的云服务器。终端以及服务器可以通过有线或无线通信方式进行直接或间接地连接,本申请实施例中不做限制。下面,将说明数据处理设备实施为服务器时的示例性应用。可以理解的是,本申请实施例的数据处理设备也可以理解成是一种穿模检测设备,本申请实施例的数据处理方法也可以理解成是一种穿模检测方法。
参见图3,图3是本申请实施例提供的数据处理系统的一个可选的架构示意图,为实现支撑任意一个游戏应用(或者穿模检测应用),通过游戏应用生成具有游戏元素的游戏动画,该游戏元素以3D模型的形式渲染至游戏动画中,在游戏应用的运行过程中,可以采集游戏动画中的多个3D模型,构成待检测模型,然后,采用本申请实施例的数据处理方法对多个待检测模型进行穿模检测。
本申请实施例中,终端上至少安装有该游戏应用。数据处理系统10中至少包括终端100、网络200和服务器300,其中服务器300是游戏应用的服务器。服务器300可以构成本申请实施例的数据处理设备,即通过服务器300实现本申请实施例的数据处理方法。终端100通过网络200连接服务器300,网络200可以是广域网或者局域网,又或者是二者的组合。
在进行穿模检测时,终端100上运行的游戏应用生成游戏动画,终端100可以接收用户输入的针对该游戏动画的穿模检测操作,终端100响应于穿模检测操作生成穿模检测请求,或者,终端在生成游戏动画的同时会自动生成穿模检测请求。然后,终端100通过网络200将穿模检测请求发送给服务器300。服务器300在接收到穿模检测请求之后,响应于穿模检测请求,获取多个待检测模型的模型数据;并基于每一待检测模型的模型数据,在预设的三维空间立方体内确定每一待检测模型的模型表面的多个表面体素和每一表面体素的表面体素信息;以及,在三维空间立方体内,基于每一表面体素的表面体素信息,确定每一待检测模型的模型内部的多个内部体素和每一内部体素的内部体素信息;其中,表面体素和内部体素具有相同的体积;然后,服务器300基于每一待检测模型的表面体素的表面体素信息和内部体素的内部体素信息,确定多个待检测模型之间的重叠体素的数量;最后,服务器300基于重叠体素的数量、每一待检测模型的表面体素的数量和内部体素的数量,确定多个待检测模型的穿模检测结果。服务器300在得到穿模检测结果之后,还可以将穿模检测结果发送给终端100,终端100在当前界面上向用户显示穿模检测结果。
在一些实施例中,还可以由终端100执行本申请实施例的数据处理方法,也就是说,终端100上运行的游戏应用生成游戏动画之后,终端100可以自动对游戏动画中的多个待检测模型进行穿模检测。即,终端100获取至少两个待检测模型的模型数据;终端100基于每一待检测模型的模型数据,在预设的三维空间立方体内确定每一待检测模型的模型表面的多个表面体素和每一表面体素的表面体素信息;终端100在三维空间立方体内,基于每一表面体素的表面体素信息,确定每一待检测模型的模型内部的多个内部体素和每一内部体素的内部体素信息;终端100基于每一待检测模型的表面体素的表面体素信息和内部体素的内部体素信息,确定至少两个待检测模型之间的重叠体素的数量;终端100基于重叠体素的数量、每一待检测模型的表面体素的数量和内部体素的数量,确定至少两个待检测模型的穿模检测结果。终端100在得到穿模检测结果之后,在当前界面上显示该穿模检测结果。
本申请实施例所提供的数据处理方法还可以基于云平台并通过云技术来实现,例如,上述服务器300可以是云端服务器。通过云端服务器获取至少两个待检测模型的模型数据,或者,通过云端服务器在预设的三维空间立方体内确定每一待检测模型的模型表面的多个表面体素和每一表面体素的表面体素信息,或者,通过云端服务器在三维空间立方体内,基于每一表面体素的表面体素信息,确定每一待检测模型的模型内部的多个内部体素和每一内部体素的内部体素信息,或者,通过云端服务器基于每一待检测模型的表面体素的表面体素信息和内部体素的内部体素信息,确定至少两个待检测模型之间的重叠体素的数量,或者,通过云端服务器基于重叠体素的数量、每一待检测模型的表面体素的数量和内部体素的数量,确定至少两个待检测模型的穿模检测结果等。
在一些实施例中,还可以具有云端存储器,可以将每一待检测模型的模型数据存储至云端存储器中,也可以将每一待检测模型的表面体素的表面体素信息和内部体素的内部体素信息存储至云端存储器中。这样,在进行穿模检测时,则可以从云端存储器中直接获取每一待检测模型的模型数据,以实现快速的穿模检测。
这里需要说明的是,云技术(Cloud technology)是指在广域网或局域网内将硬件、软件、网络等系列资源统一起来,实现数据的计算、储存、处理和共享的一种托管技术。云技术基于云计算商业模式应用的网络技术、信息技术、整合技术、管理平台技术、应用技术等的总称,可以组成资源池,按需所用,灵活便利。云计算技术将变成重要支撑。技术网络系统的后台服务需要大量的计算、存储资源,如视频网站、图片类网站和更多的门户网站。伴随着互联网行业的高度发展和应用,将来每个物品都有可能存在自己的识别标志,都需要传输到后台系统进行逻辑处理,不同程度级别的数据将会分开处理,各类行业数据皆需要强大的系统后盾支撑,其可以通过云计算来实现。
图4是本申请实施例提供的电子设备的结构示意图,图4所示的电子设备可以是数据处理设备,数据处理设备包括:至少一个处理器310、存储器350、至少一个网络接口320和用户接口330。数据处理设备中的各个组件通过总线系统340耦合在一起。可理解,总线系统340用于实现这些组件之间的连接通信。总线系统340除包括数据总线之外,还包括电源总线、控制总线和状态信号总线。但是为了清楚说明起见,在图4中将各种总线都标为总线系统340。
处理器310可以是一种集成电路芯片,具有信号的处理能力,例如通用处理器、数字信号处理器(DSP,Digital Signal Processor),或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等,其中,通用处理器可以是微处理器或者任何常规的处理器等。
用户接口330包括使得能够呈现媒体内容的一个或多个输出装置331,以及一个或多个输入装置332。
存储器350可以是可移除的,不可移除的或其组合。示例性的硬件设备包括固态存储器,硬盘驱动器,光盘驱动器等。存储器350可选地包括在物理位置上远离处理器310的一个或多个存储设备。存储器350包括易失性存储器或非易失性存储器,也可包括易失性和非易失性存储器两者。非易失性存储器可以是只读存储器(ROM,Read Only Memory),易失性存储器可以是随机存取存储器(RAM,Random Access Memory)。本申请实施例描述的存储器350旨在包括任意适合类型的存储器。在一些实施例中,存储器350能够存储数据以支持各种操作,这些数据的示例包括程序、模块和数据结构或者其子集或超集,下面示例性说明。
操作系统351,包括用于处理各种基本系统服务和执行硬件相关任务的系统程序,例如框架层、核心库层、驱动层等,用于实现各种基础业务以及处理基于硬件的任务;网络通信模块352,用于经由一个或多个(有线或无线)网络接口320到达其他计算设备,示例性的网络接口320包括:蓝牙、无线相容性认证(WiFi)、和通用串行总线(USB,UniversalSerial Bus)等;输入处理模块353,用于对一个或多个来自一个或多个输入装置332之一的一个或多个用户输入或互动进行检测以及翻译所检测的输入或互动。
在一些实施例中,本申请实施例提供的装置可采用软件方式实现,图4示出了存储在存储器350中的一种数据处理装置354,该数据处理装置354可以是电子设备中的数据处理装置,其可以是程序和插件等形式的软件,包括以下软件模块:获取模块3541、第一确定模块3542、第二确定模块3543、第三确定模块3544和第四确定模块3545,这些模块是逻辑上的,因此根据所实现的功能可以进行任意的组合或进一步拆分。将在下文中说明各个模块的功能。
在一些实施例中,本申请实施例提供的装置可以采用硬件方式实现,作为示例,本申请实施例提供的装置可以是采用硬件译码处理器形式的处理器,其被编程以执行本申请实施例提供的数据处理方法,例如,硬件译码处理器形式的处理器可以采用一个或多个应用专用集成电路(ASIC,Application Specific Integrated Circuit)、DSP、可编程逻辑器件(PLD,Programmable Logic Device)、复杂可编程逻辑器件(CPLD,ComplexProgrammable Logic Device)、现场可编程门阵列(FPGA,Field-Programmable GateArray)或其他电子元件。
本申请各实施例提供的数据处理方法可以由电子设备来执行,其中,该电子设备可以是服务器也可以是终端,即本申请各实施例的数据处理方法可以通过服务器来执行,也可以通过终端来执行,或者也可以通过服务器与终端之间交互执行。
图5是本申请实施例提供的数据处理方法的一个可选的流程示意图,下面将结合图5示出的步骤进行说明,如图5所示,以数据处理方法的执行主体为服务器为例进行说明,方法包括以下步骤S101至步骤S105:
步骤S101,获取至少两个待检测模型的模型数据。
本申请实施例中,待检测模型可以是一种三角形网格模型,三角形网格模型(Triangle Mesh)是指由多个三角形以不同角度(共用边或角)组合的3D模型。待检测模型的模型数据包括待检测模型的模型表面的多个三角面片(即三角形对应的三角面片)的顶点位置坐标和三角面片的索引信息;例如,模型数据可以是OBJ格式的模型数据。其中,OBJ格式的模型数据也可以称为OBJ文件,OBJ文件是一种标准3D模型文件格式,适合用于3D软件模型之间的互导,也可以通过Maya读写。OBJ文件是一种文本文件,可以直接用写字板打开进行查看和编辑修改。
三角面片对应一三角形,三角形包括三个顶点,三角面片的顶点位置坐标是指每一个顶点在预设三维空间立方体所在的空间坐标系内的位置坐标。索引信息用于索引模型数据中每个顶点与其他顶点之间的连接关系,也就是说,通过索引信息即可确定出模型数据中的多个顶点中,哪三个顶点连接形成一个三角面片。
本申请实施例中,模型数据可以是实时获取的数据,也可以是输入的静态数据。
这里实时获取模型数据可以对应于以下场景:在游戏应用的运行过程中,可以动态的生成游戏动画,在对游戏动画进行穿模检测时,可以实时的将每一帧游戏动画中的多个3D模型的模型数据发送给服务器进行穿模检测,此时,游戏动画中的3D模型构成待检测模型,可以将多个3D模型的模型数据发送给服务器,由服务器基于该模型数据进行穿模检测。或者,也可以每隔一定的时间间隔采集一帧游戏动画,然后将采集到的游戏动画中的多个3D模型的模型数据发送给服务器进行穿模检测。这里,时间间隔可以根据游戏动画的帧率来确定,例如,可以每隔5帧采集一次游戏动画。
需要说明的是,穿模是指3D模型之间因碰撞不合理导致的互相穿透叠加的现象。穿模检测是指发现并判断游戏中的3D模型之间是否存在穿模现象及穿模程度的过程。
对于模型数据是静态数据的情况,可以对应于以下场景:终端将游戏动画中确定的某一帧作为待检测视频帧,获取该待检测视频帧中的3D模型和该3D模型的模型参数,并将获取的模型参数发送给服务器进行穿模检测。或者,也可以在编码器模式下,导入当前穿模检测项目的项目数据,该项目数据中即包括待检测视频帧中的3D模型的模型数据,从而实现项目的穿模检测任务。
步骤S102,基于每一待检测模型的模型数据,在预设的三维空间立方体内确定每一待检测模型的模型表面的多个表面体素和每一表面体素的表面体素信息。
这里,预设的三维空间立方体是指能够容纳和包含每一待检测模型的空间立方体,即全部待检测模型均位于该预设的三维空间立方体内。
表面体素是指位于待检测模型表面的体素,体素是体积元素(Volume Pixel)的简称,包含体素的立方体可以通过立体渲染或者提取给定阈值轮廓的多边形等值面表现出来。体素是数字数据于三维空间分割上的最小单位,体素用于三维成像、科学数据与医学影像等领域。概念上类似二维空间的最小单位——像素,像素用在二维计算机图像的影像数据上。如同像素,体素本身并不含有空间中位置的数据即(它们的坐标),但是体素却可以从自身相对于其它体素的位置来推敲,也即体素在构成单一张体积影像的数据结构中的位置。体素用恒定的标量或者向量表示一个立体的区域,体素的边界在于相邻晶格的中间位置。
本申请实施例中,确定表面体素以及内部体素的过程,就是对待检测模型进行体素化的过程,体素化(Voxelization)是指将3D物体的几何形式表示转换成最接近该3D物体的体素表示形式的过程或方法。
表面体素的表面体素信息是指用于表征该表面体素的信息,包括但不限于该体素与其他体素之间的位置关系、体素的体积、体素的类型(属于哪个待检测模型,以及属于待检测模型的表面还是内部)等。
步骤S103,在三维空间立方体内,基于每一表面体素的表面体素信息,确定每一待检测模型的模型内部的多个内部体素和每一内部体素的内部体素信息。
本申请实施例中,表面体素和内部体素具有相同的体积。
在确定出表面体素之后,即确定出了待检测模型的外部边界,因此,可以基于该外部边界进一步确定位于待检测模型内部的体素。在确定的过程中,可以基于每一表面体素来判断该三维空间立方体内的各个体素,确定这些体素与表面体素之间的相对位置关系,然后基于相对位置关系,确定这些体素是位于模型的内部还是外部。
需要说明的是,在确定表面体素和内部体素时,分别针对每一待检测模型进行确定,即对于整个三维空间立方体的全部体素均需要进行一次遍历,确定每个体素与待检测模型之间的关系。对于多个待检测模型,可以并行针对每个待检测模型进行遍历,以确定出每一体素与每个待检测模型之间的关系。
这里,三维空间立方体内的同一个体素,可以属于某一个待检测模型,也可以属于多个待检测模型,还可以不属于任何待检测模型。当然,对于三维空间立方体内的同一个体素,可以属于某个待检测模型的表面体素,同时也可以属于其他待检测模型的内部体素,或者,可以同时属于多个待检测模型的表面体素,也可以同时属于多个待检测模型的内部体素。
内部体素的内部体素信息是指用于表征该内部体素的信息,包括但不限于该体素与其他体素之间的位置关系、体素的体积、体素的类型(属于哪个待检测模型,以及属于待检测模型的表面还是内部)等。内部体素信息与表面体素信息中包括的内容相同。对于同一个待检测模型,该待检测模型的表面体素和内部体素均属于该待检测模型的模型体素,在体素化之后的穿模检测过程中,可以不用区分体素是属于该待检测模型的表面体素还是内部体素。
步骤S104,基于每一待检测模型的表面体素的表面体素信息和内部体素的内部体素信息,确定至少两个待检测模型之间的重叠体素的数量。
这里,在确定出每一待检测模型的表面体素和内部体素之后,即确定了属于每一待检测模型的模型体素,因此,可以根据模型体素的体素信息(包括内部体素信息和表面体素信息)确定哪些体素是重叠体素,进而确定出重叠体素的数量。
重叠体素是指三维空间立方体内的同一个体素,既属于某一个待检测模型,又同时属于另一个或者另外多个待检测模型,那么,该体素就是重叠体素。
由于每个模型体素的体素信息中包括该体素属于哪个待检测模型的体素的类型相关的信息,因此,基于每个模型体素的体素信息即可确定出三维空间立方体中的每一个体素是否同时属于多个待检测模型。本申请实施例中,对于任意一个体素,只要该体素同时属于多个待检测模型,无论是属于待检测模型的表面体素还是内部体素,该体素均可以称为重叠体素。
在一些实施例中,每一体素的体素信息中,用于表征该体素属于哪个待检测模型的体素的类型相关的信息可以以模型体素标识的形式来表示。这里,每一待检测模型对应一模型体素标识;模型体素标识用于标识相应的体素是属于待检测模型的模型体素,模型体素包括表面体素和内部体素。
例如,当任一体素是待检测模型A的模型体素时,则可以将待检测模型A的模型体素标识A1写入至该体素的体素信息中;如果该体素还是待检测模型B的模型体素,则还可以将待检测模型B的模型体素标识B1也写入至该体素的体素信息中,这样,一旦确定出某一体素的体素信息中包括多个待检测模型的模型体素标识,则可以确定该体素是重叠体素。
在另一些实施例中,也可以依次针对每一待检测模型进行判断,如果任一体素是待检测模型A的模型体素,则可以将待检测模型A的模型体素标识A1写入至该体素的体素信息中;然后继续对其余的待检测模型进行判断,如果该体素还是待检测模型B的模型体素,则还可以将待检测模型B的模型体素标识B1以覆盖写入的方式写入至该体素的体素信息中,这样,在后续读取该体素的体素信息时,则可以读取出待检测模型B的模型体素标识B1,此时,还可以在体素信息中确定该体素信息执行覆盖写入的次数,当覆盖写入的次数大于或等于1时,则确定该体素是重叠体素。
步骤S105,基于重叠体素的数量、每一待检测模型的表面体素的数量和内部体素的数量,确定至少两个待检测模型的穿模检测结果。
本申请实施例中,在确定出重叠体素的数量、每一待检测模型的表面体素的数量和内部体素的数量之后,可以先计算表面体素的数量和内部体素的数量之和,得到每一待检测模型的模型体素的总数量,然后计算该重叠体素的数量与任一待检测模型的模型体素总数量之间的比值,该比值即为相应的待检测模型的穿模检测结果。或者,也可以计算重叠体素的数量与全部待检测模型的模型体素总数量之和之间的比值,该比值即为相应的待检测模型的穿模检测结果。本申请实施例对穿模检测结果的计算方式不做限定,可以基于穿模检测任务的任务要求预先设定穿模检测结果的计算方式。
本申请实施例提供的数据处理方法,通过确定每一待检测模型的表面体素和内部体素,从而基于每一待检测模型的表面体素的表面体素信息和内部体素的内部体素信息,确定多个待检测模型之间的重叠体素的数量,由于每个体素的体积是一致的,因此基于重叠体素的数量即可确定出多个待检测模型之间是否存储穿模现象,并能够确定出穿模的程度,即得到准确的穿模检测结果。如此,基于体素化的穿模检测,检测的效率只受到体素化过程的影响,而体素化过程即确定表面体素和内部体素的过程,算法容易实现且不易出错,体素化效率较高,因此,相比于相关技术中的穿模检测方法,能够极大的提高穿模检测的效率;并且,由于基于重叠体素的数量进行计算穿模的程度,计算简单且计算准确度高,因此能够极大的提高穿模检测结果的准确性。
在一些实施例中,数据处理系统中至少包括终端和服务器,可以通过终端与服务器之间的交互实现本申请实施例的数据处理方法,即通过终端与服务器之间的交互实现对待检测模型的穿模检测。
在一种实现场景下,终端上安装有游戏应用,服务器是该游戏应用的后台服务器,游戏应用中可以提供有穿模检测功能,可以在游戏应用的当前界面上显示有可交互的穿模检测按钮,用户可以通过点击该穿模检测按钮实现对游戏应用运行过程中所生成的游戏动画进行穿模检测。例如,在用户通过终端运行游戏应用的过程中,会实时的生成具有多个游戏元素的游戏动画,该游戏元素以3D模型的形式渲染至游戏动画中,在游戏应用的运行过程中,可以采集每一帧游戏动画,并获取该游戏动画中的多个3D模型,构成待检测模型,或者,每隔一定的时间间隔采集一帧游戏动画,并获取该游戏动画中的多个3D模型,构成待检测模型。然后,采用本申请实施例的数据处理方法,将获取的多个待检测模型的模型数据实时的发送给服务器,由服务器对多个待检测模型进行穿模检测。
在另一种实现场景下,终端上安装有穿模检测应用,穿模检测应用用于实现对输入的游戏动画或者动画视频进行穿模检测。服务器是该穿模检测应用的后台服务器,用户可以在穿模检测应用的客户端输入穿模检测操作,同时输入游戏动画或者动画视频,该游戏动画或者动画视频中包括多个3D模型的模型参数,用户还可以输入待检测模型的模型标识,待检测模型是游戏动画或者动画视频的3D模型。终端基于用户的输入操作生成穿模检测请求,该穿模检测请求中包括待检测模型的模型参数,终端通过向服务器发送穿模检测请求,实现将多个待检测模型的模型参数发送给服务器。服务器在接收到多个待检测模型的模型参数之后,可以响应于穿模检测请求,采用本申请实施例的数据处理方法,对用户输入的游戏动画或者动画视频进行穿模检测。
在又一种实现场景下,终端上安装有穿模检测应用,穿模检测应用用于实现对输入的游戏动画或者动画视频进行穿模检测。服务器是该穿模检测应用的后台服务器,用户可以在穿模检测应用的客户端输入游戏动画,并播放该游戏动画。在游戏动画的播放过程中,用户可以指定对某一帧游戏动画进行穿模检测。此时,终端可以生成包含有该帧游戏动画的动画帧标识的穿模检测请求,并将穿模检测请求发送给服务器。服务器在接收到穿模检测请求之后,解析穿模检测请求,确定动画帧标识对应的游戏动画的目标帧,并获取该目标帧中的多个3D模型,该多个3D模型构成待检测模型,从而采用本申请实施例提供的数据处理方法,对多个待检测模型进行穿模检测。
本申请实施例的数据处理方法可以应用于上述任意一种场景。下面将结合数据处理系统,对本申请实施例的数据处理方法进行说明。
图6是本申请实施例提供的数据处理方法的另一个可选的流程示意图,如图6所示,方法包括以下步骤S201至步骤S219:
步骤S201,终端在游戏应用的客户端获取用户输入的穿模检测操作。
本申请实施例中,对于终端上运行的游戏应用,在显示游戏视频的过程中,用户可以针对当前显示的游戏视频执行穿模检测操作。在游戏应用的界面上可以具有一穿模检测按钮,用户点击该穿模检测按钮即可触发游戏应用的穿模检测功能,从而对游戏视频进行穿模检测。
在一些实施例中,穿模检测操作除了针对穿模检测按钮的点击操作之外,还可以包括针对游戏视频中特定视频帧的选择操作,也就是说,用户可以个性化的选择需要对某一帧或多帧游戏视频帧执行穿模检测操作。
在另一些实施例中,穿模检测操作还可以包括针对游戏视频帧中的多个待检测模型的模型选择操作。在同一游戏视频帧中,可以同时显示有多个3D模型,这里的3D模型可以是人物模型、角色模型、道具模型、背景模型等任意类型的模型。用户可以个性化的选择只对其中的某两个3D模型进行穿模检测、或者也可以选择只对其中的某三个3D模型进行穿模检测,这样,待检测模型就是用户通过模型选择操作所选中的3D模型。在一种实现方式中,在用户执行完针对穿模检测按钮的点击操作以及特定视频帧的选择操作之后,该特定视频帧中的全部3D模型可以均处于可选择状态,这里的可选择状态是指用户可以通过点击该3D模型在屏幕中的位置实现对该3D模型的模型选择。在另一种实现方式中,在用户执行完针对穿模检测按钮的点击操作以及特定视频帧的选择操作之后,还可以在当前界面以列表的形式显示每一3D模型的名称,用户通过点击选择3D模型的名称即可完成模型选择操作。在又一种实现方式中,在用户执行完针对穿模检测按钮的点击操作以及特定视频帧的选择操作之后,如果用户未执行模型选择操作或者用户超过预设时长未执行模型选择操作,则可以默认是对该特定视频帧中的全部3D模型进行穿模检测。
在一些实施例中,在确定进行穿模检测的特定视频帧和待检测模型之后,还可以从游戏应用的数据存储单元中获取该特定视频帧中的待检测模型的模型参数。
步骤S202,终端响应于穿模检测操作,生成穿模检测请求。
这里,穿模检测请求中包括待检测模型的模型标识以及每一待检测模型的模型参数。可以将待检测模型的模型标识以及每一待检测模型的模型参数封装至穿模检测请求中,从而生成用于请求对该特定视频帧中的特定的多个待检测模型进行穿模检测的穿模检测请求。
步骤S203,终端将穿模检测请求发送给服务器。
步骤S204,服务器响应穿模检测请求,获取至少两个待检测模型的模型数据。
本申请实施例中,服务器解析穿模检测请求,得到每一待检测模型的模型标识以及每一待检测模型的模型参数。模型数据包括待检测模型的模型表面的多个三角面片的顶点位置坐标和三角面片的索引信息。
这里,三角面片的顶点位置坐标是指每一个顶点在预设三维空间立方体所在的空间坐标系内的位置坐标。索引信息用于索引模型数据中每个顶点与其他顶点之间的连接关系,也就是说,通过索引信息即可确定出模型数据中的多个顶点中,哪三个顶点连接形成一个三角面片。
步骤S205,服务器针对每一待检测模型,依次基于待检测模型的模型表面的每一三角面片的顶点位置坐标和索引信息,确定三角面片在三维空间立方体内对应的包围框。
包围框是指在三维空间立方体内用于完全容纳三角面片的矩形框,也就是说,在三维空间立方体内,三角面片被完全内置于该矩形框内。对于待检测模型,由于该待检测模型的模型表面由大量的三角面片构成,每一三角片面对应一个包围框,因此,可以确定出多个包围框,包围框的数量与三角面片的数量相同。
在一些实施例中,参见图7,图7示出了步骤S205确定三角面片在三维空间立方体内对应的包围框,可以通过以下步骤S2051至步骤S2055实现:
步骤S2051,基于索引信息确定每一三角面片所包括的三个目标顶点。
本申请实施例中,通过每一索引信息可以确定出该索引信息对应的顶点将与三维空间立方体所在的空间坐标系内的哪个点连接,也就是说,对于一开始所获取的模型数据,实际上是一系列空间中的点的坐标和每个点与其他点之间的关系,在获取到这些模型数据之后,即可根据每个点与其他点之间的关系,对这些点进行连接,分别连接成多个三角形,也就是每三个点连接成一个三角形,其中,每个点与其他点之间的关系就是用于确定怎样连接形成三角形的,这些连接形成的三角形构成一个个的三角面片,多个三角面片的依次堆叠和排列即可形成待检测模型的三维外观形状。
那么,由于已知模型数据中每个三角面片的顶点位置坐标和每个三角面片的索引信息,因此,基于三角面片的索引信息即可确定出每一三角面片所包括的三个目标顶点以及这三个目标顶点的顶点位置坐标。
步骤S2052,获取三个目标顶点中每一目标顶点的顶点位置坐标。
这里,可以针对每一三角面片,获取三个目标顶点中每一目标顶点的顶点位置坐标。
步骤S2053,基于三个目标顶点中每一目标顶点的顶点位置坐标对三个目标顶点进行连接,生成三角面片对应的三角形。
这里,可以针对每一三角面片,基于三个目标顶点中每一目标顶点的顶点位置坐标对三个目标顶点进行连接,生成三角面片对应的三角形。
步骤S2054,在三维空间立方体内,获取具有预设尺寸参数且包围三角形的立方体。
这里,立方体中包围该三角面片对应的三角形,由于同一待检测模型中的不同的三角面片对应的三角形的尺寸参数各不相同,因此,三角形的面积也不相同,每一个三角面片对应的立方体的尺寸参数也不相同。这里的尺寸参数包括立方体的长宽高。预设尺寸参数可以是立方体的预设的长宽高,不同的立方体具有不同的长宽高。在实现的过程中,可以将刚好包围该三角形的立方体确定为相应三角面片的立方体,并获取该立方体的预设尺寸参数。
步骤S2055,将立方体确定为三角面片在三维空间立方体内对应的包围框。
本申请实施例中,通过确定与每一三角面片对应的立方体,形成一个个的包围框,之后,可以基于该包围框确定待检测模型的表面体素。
在一些实施例中,针对于多个待检测模型,可以通过服务器(即电子设备)的多个内核,并行确定每一待检测模型中的每个三角面片对应的包围框,也就是说,可以将每个待检测模型的一个三角面片的相关数据分配给电子设备的一个内核,从而通过多核的电子设备,实现并行的确定多个待检测模型中的多个三角面片的包围框,以提高体素化过程的效率,进而提高穿模检测的效率。
步骤S206,服务器获取包围框中的多个原始体素。
在一些实施例中,可以在包围三角形的立方体内,获取具有单位尺寸的多个单位立方体;其中,每一单位立方体构成一个原始体素,后续则需要判断每一个原始体素是待检测模型的表面体素还是内部体素,或者是不属于该待检测模型的外部体素。
由于同一待检测模型中的不同的角面片在三维空间立方体内对应的包围框的预设尺寸参数各不相同,因此,不同包围框中所包含的原始体素的数量也不相同。
步骤S207,服务器分别判断包围框中的每一原始体素是否与三角面片相交。
本申请实施例中,判断包围框中的每一原始体素是否与三角面片相交的目的是为了找出属于待检测模型的表面体素的一些原始体素,由于包围框包围了用于表示待检测模型表面的三角面片,因此,待检测模型与该三角面片对应的表面体素一定位于该包围框中,可以从包围框中确定出待检测模型的一个或多个表面体素。
在一些实施例中,参见图8,图8示出了步骤S207中具体的判断过程可以通过以下步骤S2071至步骤S2076实现:
步骤S2071,获取原始体素的多个体素顶点和三角面片所包括的三个目标顶点。
步骤S2072,分别以每一体素顶点和每一目标顶点作为分离轴的起点,构建多条分离轴。
如图9A和图9B所示,是以三角面片(即图9A和图9B中的三角形)的顶点A作为分离轴的起点,构建分离轴901。
步骤S2073,针对每一条分离轴,确定三角面片的每条边和原始体素的每条边在分离轴上的投影。
如图9A和图9B所示,三角面片在分离轴上的投影为投影AB,原始体素(即图9A和图9B中的立方体)在分离轴上的投影为投影CD。图9A所示的投影AB与投影CD不重叠。图9B所示的投影AB与投影CD重叠。
步骤S2074,判断三角面片与原始体素在每一条分离轴上的投影是否重叠。
步骤S2075,如果三角面片与原始体素在任意一条分离轴上的投影不重叠,确定三角面片与原始体素不相交。
步骤S2076,如果三角面片与原始体素在每一条分离轴上的投影均重叠,则确定三角面片与原始体素相交。
本申请实施例中,可以判断三角面片与原始体素在每一条分离轴上的投影是否重叠,如图9C所示,示出了多条分离轴的情形,只要三角面片与原始体素在任意一条分离轴上的投影不重叠,则可以确定三角面片与原始体素不相交;只要三角面片与原始体素在每一条分离轴上的投影均重叠,则确定三角面片与原始体素相交。
本申请实施例中,由于体素顶点和目标顶点位置已知且固定,因此,以每一体素顶点和每一目标顶点作为分离轴的起点,构建多条分离轴也是非常容易实现的,同时,在分离轴上确定三角面片的每条边和原始体素的每条边的投影,只需沿着垂直于分离轴的方向发射一条光线,即发射多条垂直于分离轴的平行线,即可确定出投影的起点位置和终点位置,这样,基于每一条边的起点位置和重点位置,即可确定三角面片与原始体素的投影是否重叠。由此可见,本申请实施例提供的确定三角面片与原始体素是否相交的流程算法简单且容易实现,在计算的过程中,无需提高较高的计算资源,且计算效率较高,不易出错。
步骤S208,服务器如果确定出任一原始体素与三角面片相交,确定该原始体素为待检测模型的表面体素,并将原始体素的体素信息确定为表面体素的表面体素信息。
本申请实施例中,在确定出三角面片与原始体素是否相交之后,即可根据是否相交的判断结果来确定该原始体素是否是待检测模型的表面体素,整个确定表面体素的过程容易实现且判断效率高、误差较小。
步骤S209,服务器如果确定出任一原始体素与三角面片不相交,则确定该原始体素不是待检测模型的表面体素。
本申请实施例中,对于任一不是待检测模型的表面体素的原始体素,需要进一步确定这些原始体素是属于待检测模型还是不属于待检测模型,也就是说,需要进一步确定这些原始体素是不是待检测模型的内部体素。
通过上述步骤S205至步骤S209,实现了基于每一待检测模型的模型数据,在预设的三维空间立方体内确定每一待检测模型的模型表面的多个表面体素和每一表面体素的表面体素信息。在一些实施例中,在预设的三维空间立方体内确定每一待检测模型的模型表面的多个表面体素和每一表面体素的表面体素信息时,还可以是基于每一待检测模型的模型数据,通过电子设备的多个内核,在预设的三维空间立方体内并行确定待检测模型的模型表面的每个表面体素和每一表面体素的表面体素信息;其中,每个内核被分配到待检测模型的模型数据中的至少一个三角面片的顶点位置坐标和三角面片的索引信息。如此,通过多个内核并行处理,可以极大的提高表面体素的检测效率,进而提高整个穿模检测的效率。
步骤S210,服务器以每一表面体素对应的单位立方体的预设表面上的任意点为射线原点,三维空间立方体所在的空间坐标系内的任一方向为延伸方向,确定一条发射射线。
在一些实施例中,参见图10,图10示出了步骤S210中确定发射射线可以通过以下步骤S2101至步骤S2104实现:
步骤S2101,将每一表面体素对应的单位立方体中靠近空间坐标系横轴的底部表面确定为目标表面。
这里,单位立方体即可理解成是一个表面体素。本申请实施例是将单位立方体中靠近空间坐标系横轴的底部表面确定为目标表面,当然,在其他实施例中,也可以将其他表面确定为目标表明,例如,可以将单位立方体中远离空间坐标系横轴的底部表面确定为目标表面、可以将单位立方体中位于单位立方体中心位置的平面确定为目标表面等。
步骤S2102,将目标表面上靠近空间坐标系原点的点确定为射线原点。
在一些实施例中,还可以将目标表面上远离空间坐标系原点的点确定为射线原点,或者,还可以将目标表面的中心点确定为射线原点等。
步骤S2103,将空间坐标系内的任意一个坐标轴方向确定为延伸方向。
步骤S2104,基于射线原点和延伸方向确定一条发射射线。
举例来说,如图11所示,待检测模型为一立体的五角星,针对五角星的一个表面体素1101,将表面体素1101靠近空间坐标系横轴x轴的底部表面确定为目标表面,然后,将目标表面上靠近空间坐标系原点的点K确定为射线原点,将空间坐标系内的x轴方向确定为延伸方向,得到一条发射射线L。
步骤S211,服务器确定发射射线延伸至每一位置时经过表面体素的次数。
这里,经过表面体素的次数是指在该发射射线从起点延伸至该位置处,所穿过的表面体素的个数,由于发射射线的起点(即射线原点)位于目标表面上靠近空间坐标系原点的点,因此,当发射射线在向待检测模型内部延伸时,则先经过了一次表面体素,在经过待检测模型内部且未延伸出待检测模型时,发射射线经过表面体素的次数均为1;当发射射线在待检测模型内部延伸且第一次穿出待检测模型时,则发射射线经过表面体素的次数增大为2;当发射射线再一次延伸且穿入待检测模型时,则发射射线经过表面体素的次数增大为3…,以此类推,即可确定出发射射线延伸至每一位置时经过表面体素的次数。
步骤S212,服务器基于发射射线延伸至每一位置时经过表面体素的次数,确定该位置处的原始体素是否为待检测模型的模型内部的内部体素。
在一些实施例中,如果发射射线延伸至任一位置时经过表面体素的次数为奇数,则可以确定该位置处的原始体素为待检测模型的模型内部的内部体素;并将位置处的原始体素的体素信息确定为表面体素的表面体素信息;如果发射射线延伸至任一位置时经过表面体素的次数为偶数,则可以确定该位置处的原始体素为待检测模型的模型外部的外部体素。
步骤S213,服务器在确定出该位置处的原始体素是待检测模型的模型内部的内部体素时,将该位置处的原始体素的体素信息确定为内部体素的内部体素信息。
本申请实施例中,表面体素和内部体素具有相同的体积。
在一些实施例中,每一原始体素对应一原始体素标识;原始体素标识用于标识相应的体素为原始体素或者相应的体素为位于待检测模型外部的外部体素;原始体素标识被写入至原始体素的体素信息中。每一待检测模型对应一模型体素标识;模型体素标识用于标识相应的体素是属于待检测模型的模型体素,模型体素包括表面体素和内部体素。
步骤S214,如果确定出该位置处的原始体素为待检测模型的模型内部的内部体素,服务器以覆盖写入的方式,将模型体素标识写入至原始体素的体素信息中,形成内部体素的内部体素信息。
在实现的过程中,可以将待检测模型的模型标识确定为该待检测模型的模型体素标识,也就是说,以待检测模型的模型标识来表征待检测模型中的模型体素的模型体素标识。这样,可以直接将待检测模型的模型标识写入至原始体素的体素信息中,而无需再针对每一待检测模型再生成一用于唯一标识该待检测模型的模型体素的模型体素标识,从而简化整个穿模检测的流程。
步骤S215,如果确定出任一原始体素为待检测模型的模型表面的表面体素,服务器以覆盖写入的方式,将模型体素标识写入至表面体素的体素信息中,形成表面体素的表面体素信息。
由此可见,在确定出任一原始体素是待检测模型的模型体素时,均将该待检测模型的模型体素标识写入至该原始体素的体素信息中,也就是说,不管在确定出原始体素是该待检测模型的表面体素还是内部体素,均将该待检测模型的模型体素标识写入至该原始体素的体素信息中,用于标识该原始体素是该待检测模型中的体素。
步骤S216,服务器基于每一待检测模型的表面体素的表面体素信息和内部体素的内部体素信息,确定至少两个待检测模型之间的重叠体素的数量。
在一些实施例中,可以针对三维空间立方体内每一原始体素进行判断。如果原始体素是至少两个待检测模型中的第n个待检测模型的模型体素,则将第n个待检测模型的模型体素标识写入至原始体素的体素信息中;n为大于0的整数,且n小于至少两个待检测模型的模型总数量;如果原始体素是至少两个待检测模型中的第n+1个待检测模型的模型体素,则以覆盖写入的方式,将第n+1个待检测模型的模型体素标识写入至第n个待检测模型的模型体素的体素信息中;如果原始体素是至少两个待检测模型中的第n+i个待检测模型的模型体素,则以覆盖写入的方式,将第n+i个待检测模型的模型体素标识写入至第n+i-1个待检测模型的模型体素的体素信息中,得到三维空间立方体中的每一模型体素的更新后的体素信息;i为大于0的整数,且n+i等于至少两个待检测模型的模型总数量。然后,基于三维空间立方体中的每一模型体素的更新后的体素信息,确定至少两个待检测模型之间的重叠体素的数量。
在一些实施例中,基于三维空间立方体中的每一模型体素的更新后的体素信息,确定至少两个待检测模型之间的重叠体素的数量,可以通过以下方式实现:首先,确定哪些模型体素是重叠体素;然后,统计三维空间立方体内全部重叠体素的数量。
在确定哪些模型体素是重叠体素时,可以通过以下方式实现:如果基于任一模型体素的更新后的体素信息,确定模型体素的模型体素标识是经过覆盖写入后的第n+1个待检测模型的模型体素标识,或者,确定模型体素的模型体素标识是经过覆盖写入后的第n+i个待检测模型的模型体素标识,则可以确定该模型体素为重叠体素。
举例来说,可以按照待检测模型A然后待检测模型B的顺序依次在属于每一待检测模型的模型体素的体素信息中写入相应待检测模型的模型体素标识,那么,对于模型体素T,如果该模型体素T的体素信息中显示该模型体素T曾经被以覆盖写入的方式写入了待检测模型B的模型体素标识B1,那么就可以确定出该模型体素T一定是属于待检测模型A的模型体素,即那么则可以确定模型体素T是一个重叠体素。
在一些实施例中,对于只有两个待检测模型的情况,则针对任一模型体素,可以确定该模型体素要么属于待检测模型A要么属于待检测模型B,或者同时属于待检测模型A和待检测模型B,此时,可以确定该模型体素的体素信息中是否被以覆盖写入的方式写入过待检测模型的模型体素标识,如果是,则可以直接确定该模型体素是重叠体素。
在另一些实施例中,还可以将模型体素所属的待检测模型的模型体素标识均写入至该模型体素的体素信息中,也就是说,可以以并列写入的方式将模型体素所属的待检测模型的模型体素标识全部写入模型体素的体素信息中,这样,就可以不用按照多个待检测模型依次判断和写入的方式串行的进行模型体素标识写入的步骤,而可以并行的针对三维空间立方体内的全部体素进行模型体素标识的写入,以实现采用模型体素标识来标识每一体素所属的待检测模型。
步骤S217,服务器基于重叠体素的数量、每一待检测模型的所述表面体素的数量和内部体素的数量,确定至少两个待检测模型的穿模检测结果。
在一些实施例中,重叠体素还可以分为双模型重叠体素和多模型重叠体素,双模型重叠体素是指同时属于两个待检测模型的体素,多模型重叠体素是指同时属于三个或三个以上待检测模型的体素。可以根据体素信息中所包含的模型体素标识的数量来确定该体素属于几个待检测模型,从而确定出该体素是双模型重叠体素还是多模型重叠体素。
在一些实施例中,在确定穿模检测结果时,可以通过以下方式实现:首先,基于每一待检测模型的表面体素的数量和内部体素的数量确定待检测模型的模型体素的体素总数量;然后,将重叠体素的数量与每一待检测模型的模型体素的体素总数量的比值,确定为待检测模型的穿模占比;最后,将至少两个待检测模型中的最大穿模占比,确定为至少两个待检测模型的穿模检测结果。也就是说,可以针对每一个待检测模型计算出一个穿模占比,该穿模占比是重叠体素的数量与该待检测模型的模型体素的体素总数量之间的比值。
在另一些实施例中,由于每一体素的体积是已知的,每一体素的体积称为单位体积,因此还可以计算体素的单位体积与重叠体素的数量之间的乘积,得到重叠体素的体积,同时,还可以计算每个待检测模型的体积,其中,待检测模型的体积可以是待检测模型的模型体素的体素总数量与体素的单位体积之间的乘积。最后,用重叠体素的体积除以待检测模型的体积即可得到每一待检测模型的穿模体积占比,该穿模体积占比构成穿模检测结果。
在一些实施例中,还可以针对于每一待检测模型,确定属于该待检测模型的重叠体素。这里,属于任意待检测模型的重叠体素是指该体素一定属于该待检测模型,同时该体素还可以属于其他一个或多个待检测模型。在确定穿模检测结果时,还可以针对属于每一待检测模型的重叠体素,计算这些重叠体素与相应的待检测模型的模型体素总数量之间的比值。最后,将至少两个待检测模型中的最大比值,确定为至少两个待检测模型的穿模检测结果。
步骤S218,服务器将穿模检测结果发送给终端。
步骤S219,终端在当前界面上显示穿模检测结果。
本申请实施例中,基于体素化的穿模检测,检测的效率只受到体素化过程的影响,而体素化过程即确定表面体素和内部体素的过程,算法容易实现且不易出错,体素化效率较高,因此,相比于相关技术中的穿模检测方法,能够极大的提高穿模检测的效率;并且,由于基于重叠体素的数量或体积进行计算穿模的程度,计算简单且计算准确度高,因此能够极大的提高穿模检测结果的准确性。
下面,将说明本申请实施例在一个实际的应用场景中的示例性应用。
本申请实施例提供一种数据处理方法,该数据处理方法是一种穿模检测方法,该穿模检测方法采用分而治之的思路,将复杂的计算分解为简单的单个三角形与体素的关系问题,能有效规避穿模检测过程中容易出错的问题。并且,针对穿模检测效率问题,本申请实施例通过GPU进行计算,使最终计算效率只与模型三角形数量和体素大小线性相关。
本申请实施例的方法可以应用于美术内容检测产品中,该产品旨在通过技术去替代人工发现游戏美术资源(如模型、特效等)中的一些特定问题(如穿模、色块、特效丢失等)。
本申请实施例的应用场景如图12所示,可以是针对某手游的角色道具展示场景,遍历角色与道具的穿搭配置,对每次穿搭进行穿模检测,得到该次穿搭是否穿模及穿模程度的结果。具体实现过程可以是:首先,在启动游戏进入特定场景后,可以从手机端实时抓取角色、道具的模型数据,将数据上传到服务器端作为输入数据,进行穿模检测。然后,在穿模检测过程中,可以使用GPU的并行能力将模型体素化,得到单个模型及模型公共部分的体素(重叠体素),如图13所示,可视化展示了单个模型的体素化结果。最后,进行穿模程度判断:可以通过公共部分的体素在每个模型中的占比,同时设定阈值,基于该阈值即可评估穿模程度,如图14所示,可视化展示了相交部分的重叠体素141和重叠体素142的分布。
本申请实施例的穿模检测方法可以采用CS架构来实现,其中,客户端及服务端整体流程分别如图15和图16所示。客户端获取模型数据并传输到服务器,其中,数据来源可以是运行中的游戏实时模型数据,也可以是编辑器模式下的静态模型资源数据。服务端主要有两个线程,一个用于网络服务,循环接收模型数据并缓存;另一个用于循环从缓存中读取模型数据,并执行穿模计算,最后保存结果。
本申请实施例主要是执行穿模检测的算法,以下将详细阐述该算法。该算法整体流程如图17所示,包括以下步骤:
步骤S1701,读取模型数据。这里,可以将两个或多个待检测模型的模型数据从缓存中读取出来,模型数据内容包括:顶点坐标数组和三角形索引数组。
步骤S1702,坐标归一化。这里,可以计算这些待检测模型这每个待检测模型整体的包围盒大小,并依据包围盒对待检测模型中所有的顶点坐标进行缩放归一化,可以将顶点坐标缩放归一化到[0-1]的立方体中。这里进行坐标归一化操作的主要目的是:浮点数在0-1之间的精确度最高,因此可以提高最终穿模检测结果的有效性。
步骤S1703,初始化GPU内存数据。这里,可以申请并初始化体素、待检测模型所需的内存,并将模型数据上传到GPU。
步骤S1704,逐三角形操作:将待检测模型的每个三角形数据分配到每个GPU计算内核中,以实现GPU并行计算。
步骤S1705,逐三角形覆盖的体素操作:计算每个三角形的包围盒范围,并对该范围内的每个体素循环执行后续SAT测试的算法,以此确定该范围内的每个体素是否是位于待检测模型表面的表面体素。
步骤S1706,SAT测试:即通过分离轴定理(SAT,Separating Axis Theorem)实现的测试算法,用以判断体素与三角形是否相交,不相交则不进行后续操作。
SAT算法的具体过程是:首先,将立方体(即体素)的八个顶点与三角形的三个顶点分别作为轴的起点;然后,对于每一条轴,计算该轴在三角形和立方体上的投影;如果三角形和立方体在任何一条轴上的投影不重叠(即存在一个间隙),则它们不相交;如果三角形和立方体在所有轴上的投影都有重叠,则它们相交。
步骤S1707,Ray测试:若体素与三角形相交,则以该体素底部为原点,坐标轴为方向发射一条射线,并计算该射线与三角形的相交距离在三角形法线上的投影长度。
如图18所示,是一个2D的图形方块化的过程(体素化类似),思路都是先确定边缘1801(体表),再填充内部1802。
本申请实施例中,在确定好边缘后,再从左到右发逐行射线,通过判断射线经过边缘的次数来确定方块(即体素)是否在图形内部。其中,某一行的判断方式如图19所示,其中,可以从图19中的左图的方块1901开始到最右侧,依次判断每个方块经过的边缘次数,如果次数是奇数则相应方块在图形内部。当然,射线的方向可以是任意方向上的,水平这种只是示例。
步骤S1708,写入最大深度:若上述投影长度大于该方块现存的深度值,则覆盖写入。
这里,每个体素会关联一个int值的体素信息,覆盖写入是指用该模型的int值(模型体素标识)覆盖该关联的int值。
在一些实施例中,如果方块在模型内部,可以在该方块内写入模型体素标识,在判断方块是否在模型内部时,还可以确定方块经过的边缘体素(即表面体素)的次数,如果方块经过的边缘次数是奇数,则可以确定方块在模型内部,因此,可以在相应方块对应的体素信息内以覆盖写入的方式,将该模型体素标识写入该方块对应的体素信息中。
步骤S1709,计算模型内部体素:沿着上述射线方向,获得每行体素的最近深度值,并根据深度值的正负判断该体素是否在模型内部。
本申请实施例中,位于模型内部的体素的深度值为正值,位于模型外部的体素的深度值为负值,因此可以根据深度值的正负判断该体素是否在模型内部。另外,也可以判断射线经过的表面体素的次数的奇偶性来确定该体素是否在模型内部。
步骤S1710,写入体素值:若体素在模型内部,则通过bit or操作写入体素值。
步骤S1711,获取指定值的体素:获取每个模型、公共部分的体素值对应的体素个数。
步骤S1712,通过体素值评估穿模程度:上述公共部分体素即为所有模型都覆盖的体素,即为穿模部分的重叠体素,计算重叠体素在单个模型体素中的占比,该占比即可作为穿模程度的评估指标。
步骤S1713,保存结果:将穿模程度及每个穿模的体素索引保存。
需要说明的是,上述步骤S1701、步骤S1711至步骤S1713可以是由CPU执行的步骤;步骤S1702至步骤S1710可以是由GPU执行的步骤。
相比于相关技术中的穿模检测方法因出错率高且效率低而无法实际落地的问题,本申请实施例提供的穿模检测方法不仅能够提高穿模检测的效率,还能够提高穿模检测结果的准确性,因此能够有效的接入到具体的项目中使用。
可以理解的是,在本申请实施例中,涉及到用户信息的内容,例如,待检测模型的模型数据、穿模检测结果等信息,如果涉及与用户信息或企业信息相关的数据,当本申请实施例运用到具体产品或技术中时,需要获得用户许可或者同意,或者对这些信息进行模糊化处理,以消除这些信息与用户之间的对应关系;且相关数据收集处理在实例应用时应该严格根据相关国家法律法规的要求,获取个人信息主体的知情同意或单独同意,并在法律法规及个人信息主体的授权范围内,开展后续数据使用及处理行为。
下面继续说明本申请实施例提供的数据处理装置354实施为软件模块的示例性结构,在一些实施例中,如图4所示,数据处理装置354包括:获取模块3541,用于获取至少两个待检测模型的模型数据;第一确定模块3542,用于基于每一所述待检测模型的模型数据,在预设的三维空间立方体内确定每一所述待检测模型的模型表面的多个表面体素和每一所述表面体素的表面体素信息;第二确定模块3543,用于在所述三维空间立方体内,基于每一所述表面体素的表面体素信息,确定每一所述待检测模型的模型内部的多个内部体素和每一所述内部体素的内部体素信息;所述表面体素和所述内部体素具有相同的体积;第三确定模块3544,用于基于每一所述待检测模型的所述表面体素的表面体素信息和所述内部体素的内部体素信息,确定所述至少两个待检测模型之间的重叠体素的数量;第四确定模块3545,用于基于所述重叠体素的数量、每一所述待检测模型的所述表面体素的数量和所述内部体素的数量,确定所述至少两个待检测模型的穿模检测结果。
在一些实施例中,所述模型数据包括所述待检测模型的模型表面的多个三角面片的顶点位置坐标和所述三角面片的索引信息;所述第一确定模块还用于:针对每一所述待检测模型,依次基于所述待检测模型的模型表面的每一所述三角面片的顶点位置坐标和所述索引信息,确定所述三角面片在所述三维空间立方体内对应的包围框;获取所述包围框中的多个原始体素;分别确定所述包围框中的每一所述原始体素是否与所述三角面片相交;如果确定出任一所述原始体素与所述三角面片相交,确定所述原始体素为所述待检测模型的表面体素,并将所述原始体素的体素信息确定为所述表面体素的表面体素信息。
在一些实施例中,所述第一确定模块还用于:基于所述索引信息确定每一所述三角面片所包括的三个目标顶点;获取所述三个目标顶点中每一目标顶点的顶点位置坐标;基于所述三个目标顶点中每一目标顶点的顶点位置坐标对所述三个目标顶点进行连接,生成所述三角面片对应的三角形;在所述三维空间立方体内,获取具有预设尺寸参数且包围所述三角形的立方体;将所述立方体确定为所述三角面片在所述三维空间立方体内对应的包围框。
在一些实施例中,所述第一确定模块还用于:在包围所述三角形的立方体内,获取具有单位尺寸的多个单位立方体;其中,每一所述单位立方体构成一个原始体素。
在一些实施例中,所述第一确定模块还用于:获取所述原始体素的多个体素顶点和所述三角面片所包括的三个目标顶点;分别以每一所述体素顶点和每一所述目标顶点作为分离轴的起点,构建多条分离轴;针对每一条分离轴,确定所述三角面片的每条边和所述原始体素的每条边在所述分离轴上的投影;如果所述三角面片与所述原始体素在任意一条分离轴上的投影不重叠,确定所述三角面片与所述原始体素不相交;如果所述三角面片与所述原始体素在每一条分离轴上的投影均重叠,则确定所述三角面片与所述原始体素相交。
在一些实施例中,所述第一确定模块还用于:基于每一所述待检测模型的模型数据,通过电子设备的多个内核,在预设的三维空间立方体内并行确定所述待检测模型的模型表面的每个表面体素和每一所述表面体素的表面体素信息;其中,每个所述内核被分配到所述待检测模型的模型数据中的至少一个三角面片的顶点位置坐标和所述三角面片的索引信息。
在一些实施例中,所述第二确定模块还用于:以每一所述表面体素对应的单位立方体的预设表面上的任意点为射线原点,所述三维空间立方体所在的空间坐标系内的任一方向为延伸方向,确定一条发射射线;确定所述发射射线延伸至每一位置时经过所述表面体素的次数;基于所述发射射线延伸至每一位置时经过所述表面体素的次数,确定所述位置处的原始体素是否为所述待检测模型的模型内部的内部体素;并在确定出所述位置处的原始体素是所述待检测模型的模型内部的内部体素时,将所述位置处的原始体素的体素信息确定为所述内部体素的内部体素信息。
在一些实施例中,所述第二确定模块还用于:将每一所述表面体素对应的单位立方体中靠近所述空间坐标系横轴的底部表面确定为目标表面;将所述目标表面上靠近所述空间坐标系原点的点确定为所述射线原点;将所述空间坐标系内的任意一个坐标轴方向确定为所述延伸方向;基于所述射线原点和所述延伸方向确定一条所述发射射线。
在一些实施例中,所述第二确定模块还用于:如果所述发射射线延伸至任一位置时经过所述表面体素的次数为奇数,则确定所述位置处的原始体素为所述待检测模型的模型内部的内部体素;并将所述位置处的原始体素的体素信息确定为所述表面体素的表面体素信息;如果所述发射射线延伸至任一位置时经过所述表面体素的次数为偶数,则确定所述位置处的原始体素为所述待检测模型的模型外部的外部体素。
在一些实施例中,每一所述原始体素对应一原始体素标识;所述原始体素标识用于标识相应的体素为原始体素或者相应的体素为位于所述待检测模型外部的外部体素;所述原始体素标识被写入至原始体素的体素信息中;每一所述待检测模型对应一模型体素标识;所述模型体素标识用于标识相应的体素是属于所述待检测模型的模型体素,所述模型体素包括所述表面体素和所述内部体素;所述装置还包括:写入模块,用于如果确定出所述位置处的原始体素为所述待检测模型的模型内部的内部体素,以覆盖写入的方式,将所述模型体素标识写入至所述原始体素的体素信息中,形成所述内部体素的内部体素信息;如果确定出任一原始体素为所述待检测模型的模型表面的表面体素,以覆盖写入的方式,将所述模型体素标识写入至所述表面体素的体素信息中,形成所述表面体素的表面体素信息。
在一些实施例中,所述第三确定模块还用于:针对所述三维空间立方体内每一原始体素,如果所述原始体素是所述至少两个待检测模型中的第n个待检测模型的模型体素,将所述第n个待检测模型的模型体素标识写入至所述原始体素的体素信息中;n为大于0的整数,且n小于所述至少两个待检测模型的模型总数量;如果所述原始体素是所述至少两个待检测模型中的第n+1个待检测模型的模型体素,以覆盖写入的方式,将所述第n+1个待检测模型的模型体素标识写入至所述第n个待检测模型的模型体素的体素信息中;如果所述原始体素是所述至少两个待检测模型中的第n+i个待检测模型的模型体素,以覆盖写入的方式,将所述第n+i个待检测模型的模型体素标识写入至所述第n+i-1个待检测模型的模型体素的体素信息中,得到所述三维空间立方体中的每一模型体素的更新后的体素信息;i为大于0的整数,且n+i等于所述至少两个待检测模型的模型总数量;基于所述三维空间立方体中的每一模型体素的更新后的体素信息,确定所述至少两个待检测模型之间的重叠体素的数量。
在一些实施例中,所述第三确定模块还用于:如果基于任一模型体素的更新后的体素信息,确定所述模型体素的模型体素标识是经过所述覆盖写入后的第n+1个待检测模型的模型体素标识,或者,确定所述模型体素的模型体素标识是经过所述覆盖写入后的第n+i个待检测模型的模型体素标识,确定所述模型体素为重叠体素;统计所述三维空间立方体内全部重叠体素的数量。
在一些实施例中,所述第四确定模块还用于:基于每一所述待检测模型的所述表面体素的数量和所述内部体素的数量确定所述待检测模型的模型体素的体素总数量;将所述重叠体素的数量与每一所述待检测模型的模型体素的体素总数量的比值,确定为所述待检测模型的穿模占比;将所述至少两个待检测模型中的最大穿模占比,确定为所述至少两个待检测模型的穿模检测结果。
需要说明的是,本申请实施例装置的描述,与上述方法实施例的描述是类似的,具有同方法实施例相似的有益效果,因此不做赘述。对于本装置实施例中未披露的技术细节,请参照本申请方法实施例的描述而理解。
本申请实施例提供了一种计算机程序产品,该计算机程序产品包括可执行指令,该可执行指令是一种计算机指令;该可执行指令存储在计算机可读存储介质中。当电子设备的处理器从计算机可读存储介质读取该可执行指令,处理器执行该可执行指令时,使得该电子设备执行本申请实施例上述的方法。
本申请实施例提供一种存储有可执行指令的存储介质,其中存储有可执行指令,当可执行指令被处理器执行时,将引起处理器执行本申请实施例提供的方法,例如,如图5示出的方法。
在一些实施例中,存储介质可以是计算机可读存储介质,例如,铁电存储器(FRAM,Ferromagnetic Random Access Memory)、只读存储器(ROM,Read Only Memory)、可编程只读存储器(PROM,Programmable Read Only Memory)、可擦除可编程只读存储器(EPROM,Erasable Programmable Read Only Memory)、带电可擦可编程只读存储器(EEPROM,ElectricallyErasable Programmable Read Only Memory)、闪存、磁表面存储器、光盘、或光盘只读存储器(CD-ROM,Compact Disk-Read Only Memory)等存储器;也可以是包括上述存储器之一或任意组合的各种设备。
在一些实施例中,可执行指令可以采用程序、软件、软件模块、脚本或代码的形式,按任意形式的编程语言(包括编译或解释语言,或者声明性或过程性语言)来编写,并且其可按任意形式部署,包括被部署为独立的程序或者被部署为模块、组件、子例程或者适合在计算环境中使用的其它单元。
作为示例,可执行指令可以但不一定对应于文件系统中的文件,可以可被存储在保存其它程序或数据的文件的一部分,例如,存储在超文本标记语言(HTML,Hyper TextMarkup Language)文档中的一个或多个脚本中,存储在专用于所讨论的程序的单个文件中,或者,存储在多个协同文件(例如,存储一个或多个模块、子程序或代码部分的文件)中。作为示例,可执行指令可被部署为在一个电子设备上执行,或者在位于一个地点的多个电子设备上执行,又或者,在分布在多个地点且通过通信网络互连的多个电子设备上执行。
以上所述,仅为本申请的实施例而已,并非用于限定本申请的保护范围。凡在本申请的精神和范围之内所作的任何修改、等同替换和改进等,均包含在本申请的保护范围之内。

Claims (15)

1.一种数据处理方法,其特征在于,所述方法包括:
获取至少两个待检测模型的模型数据;所述模型数据包括所述待检测模型的模型表面的多个三角面片的顶点位置坐标和所述三角面片的索引信息;
针对每一所述待检测模型,依次基于所述待检测模型的模型表面的每一所述三角面片的顶点位置坐标和所述索引信息,确定所述三角面片在预设的三维空间立方体内对应的包围框;获取所述包围框中的多个原始体素;分别确定所述包围框中的每一所述原始体素是否与所述三角面片相交;
如果确定出任一所述原始体素与所述三角面片相交,确定所述原始体素为所述待检测模型的表面体素,并将所述原始体素的体素信息确定为所述表面体素的表面体素信息;
在所述三维空间立方体内,基于每一所述表面体素的表面体素信息,确定每一所述待检测模型的模型内部的多个内部体素和每一所述内部体素的内部体素信息;所述表面体素和所述内部体素具有相同的体积;
基于每一所述待检测模型的所述表面体素的表面体素信息和所述内部体素的内部体素信息,确定所述至少两个待检测模型之间的重叠体素的数量;
基于所述重叠体素的数量、每一所述待检测模型的所述表面体素的数量和所述内部体素的数量,确定所述至少两个待检测模型的穿模检测结果。
2.根据权利要求1所述的方法,其特征在于,所述基于所述待检测模型的模型表面的每一所述三角面片的顶点位置坐标和所述索引信息,确定所述三角面片在所述三维空间立方体内对应的包围框,包括:
基于所述索引信息确定每一所述三角面片所包括的三个目标顶点;
获取所述三个目标顶点中每一目标顶点的顶点位置坐标;
基于所述三个目标顶点中每一目标顶点的顶点位置坐标对所述三个目标顶点进行连接,生成所述三角面片对应的三角形;
在所述三维空间立方体内,获取具有预设尺寸参数且包围所述三角形的立方体;
将所述立方体确定为所述三角面片在所述三维空间立方体内对应的包围框。
3.根据权利要求2所述的方法,其特征在于,所述获取所述包围框中的多个原始体素,包括:
在包围所述三角形的立方体内,获取具有单位尺寸的多个单位立方体;其中,每一所述单位立方体构成一个原始体素。
4.根据权利要求1所述的方法,其特征在于,所述分别确定所述包围框中的每一所述原始体素是否与所述三角面片相交,包括:
获取所述原始体素的多个体素顶点和所述三角面片所包括的三个目标顶点;
分别以每一所述体素顶点和每一所述目标顶点作为分离轴的起点,构建多条分离轴;
针对每一条分离轴,确定所述三角面片的每条边和所述原始体素的每条边在所述分离轴上的投影;
如果所述三角面片与所述原始体素在任意一条分离轴上的投影不重叠,确定所述三角面片与所述原始体素不相交;
如果所述三角面片与所述原始体素在每一条分离轴上的投影均重叠,则确定所述三角面片与所述原始体素相交。
5.根据权利要求1所述的方法,其特征在于,所述基于每一所述待检测模型的模型数据,在预设的三维空间立方体内确定每一所述待检测模型的模型表面的多个表面体素和每一所述表面体素的表面体素信息,包括:
基于每一所述待检测模型的模型数据,在预设的三维空间立方体内并行确定所述待检测模型的模型表面的每个表面体素和每一所述表面体素的表面体素信息;
其中,在并行确定的过程中,每个内核被分配到所述待检测模型的模型数据中的至少一个三角面片的顶点位置坐标和所述三角面片的索引信息。
6.根据权利要求1所述的方法,其特征在于,所述在所述三维空间立方体内,基于每一所述表面体素的表面体素信息,确定每一所述待检测模型的模型内部的多个内部体素和每一所述内部体素的内部体素信息,包括:
以每一所述表面体素对应的单位立方体的预设表面上的任意点为射线原点,所述三维空间立方体所在的空间坐标系内的任一方向为延伸方向,确定一条发射射线;
确定所述发射射线延伸至每一位置时经过所述表面体素的次数;
基于所述发射射线延伸至每一位置时经过所述表面体素的次数,确定所述位置处的原始体素是否为所述待检测模型的模型内部的内部体素;并在确定出所述位置处的原始体素是所述待检测模型的模型内部的内部体素时,将所述位置处的原始体素的体素信息确定为所述内部体素的内部体素信息。
7.根据权利要求6所述的方法,其特征在于,所述以每一所述表面体素对应的单位立方体的预设表面上的任意点为射线原点,所述三维空间立方体所在的空间坐标系内的任一方向为延伸方向,确定一条发射射线,包括:
将每一所述表面体素对应的单位立方体中靠近所述空间坐标系的横轴的底部表面确定为目标表面;
将所述目标表面上靠近所述空间坐标系的原点的点确定为所述射线原点;
将所述空间坐标系内的任意一个坐标轴方向确定为所述延伸方向;
基于所述射线原点和所述延伸方向确定一条所述发射射线。
8.根据权利要求6所述的方法,其特征在于,所述基于所述发射射线延伸至每一位置时经过所述表面体素的次数,确定所述位置处的原始体素是否为所述待检测模型的模型内部的内部体素,包括:
如果所述发射射线延伸至任一位置时经过所述表面体素的次数为奇数,则确定所述位置处的原始体素为所述待检测模型的模型内部的内部体素;并将所述位置处的原始体素的体素信息确定为所述表面体素的表面体素信息;
如果所述发射射线延伸至任一位置时经过所述表面体素的次数为偶数,则确定所述位置处的原始体素为所述待检测模型的模型外部的外部体素。
9.根据权利要求6所述的方法,其特征在于,每一所述原始体素对应一原始体素标识;所述原始体素标识用于标识相应的体素为原始体素或者相应的体素为位于所述待检测模型外部的外部体素;所述原始体素标识被写入至原始体素的体素信息中;每一所述待检测模型对应一模型体素标识;所述模型体素标识用于标识相应的体素是属于所述待检测模型的模型体素,所述模型体素包括所述表面体素和所述内部体素;
所述方法还包括:
如果确定出所述位置处的原始体素为所述待检测模型的模型内部的内部体素,以覆盖写入的方式,将所述模型体素标识写入至所述原始体素的体素信息中,形成所述内部体素的内部体素信息;
如果确定出任一原始体素为所述待检测模型的模型表面的表面体素,以覆盖写入的方式,将所述模型体素标识写入至所述表面体素的体素信息中,形成所述表面体素的表面体素信息。
10.根据权利要求1至9任一项所述的方法,其特征在于,所述基于每一所述待检测模型的所述表面体素的表面体素信息和所述内部体素的内部体素信息,确定所述至少两个待检测模型之间的重叠体素的数量,包括:
针对所述三维空间立方体内每一原始体素,
如果所述原始体素是所述至少两个待检测模型中的第n个待检测模型的模型体素,将所述第n个待检测模型的模型体素标识写入至所述原始体素的体素信息中;n为大于0的整数,且n小于所述至少两个待检测模型的模型总数量;
如果所述原始体素是所述至少两个待检测模型中的第n+1个待检测模型的模型体素,以覆盖写入的方式,将所述第n+1个待检测模型的模型体素标识写入至所述第n个待检测模型的模型体素的体素信息中;
如果所述原始体素是所述至少两个待检测模型中的第n+i个待检测模型的模型体素,以覆盖写入的方式,将所述第n+i个待检测模型的模型体素标识写入至所述第n+i-1个待检测模型的模型体素的体素信息中,得到所述三维空间立方体中的每一模型体素的更新后的体素信息;i为大于0的整数,且n+i等于所述至少两个待检测模型的模型总数量;
基于所述三维空间立方体中的每一模型体素的更新后的体素信息,确定所述至少两个待检测模型之间的重叠体素的数量。
11.根据权利要求10所述的方法,其特征在于,所述基于所述三维空间立方体中的每一模型体素的更新后的体素信息,确定所述至少两个待检测模型之间的重叠体素的数量,包括:
如果基于任一模型体素的更新后的体素信息,确定所述模型体素的模型体素标识是经过所述覆盖写入后的第n+1个待检测模型的模型体素标识,或者,确定所述模型体素的模型体素标识是经过所述覆盖写入后的第n+i个待检测模型的模型体素标识,确定所述模型体素为重叠体素;
统计所述三维空间立方体内全部重叠体素的数量。
12.根据权利要求1至9任一项所述的方法,其特征在于,所述基于所述重叠体素的数量、每一所述待检测模型的所述表面体素的数量和所述内部体素的数量,确定所述至少两个待检测模型的穿模检测结果,包括:
基于每一所述待检测模型的所述表面体素的数量和所述内部体素的数量确定所述待检测模型的模型体素的体素总数量;
将所述重叠体素的数量与每一所述待检测模型的模型体素的体素总数量的比值,确定为所述待检测模型的穿模占比;
将所述至少两个待检测模型中的最大穿模占比,确定为所述至少两个待检测模型的穿模检测结果。
13.一种数据处理装置,其特征在于,所述装置包括:
获取模块,用于获取至少两个待检测模型的模型数据;所述模型数据包括所述待检测模型的模型表面的多个三角面片的顶点位置坐标和所述三角面片的索引信息;
第一确定模块,用于针对每一所述待检测模型,依次基于所述待检测模型的模型表面的每一所述三角面片的顶点位置坐标和所述索引信息,确定所述三角面片在预设的三维空间立方体内对应的包围框;获取所述包围框中的多个原始体素;分别确定所述包围框中的每一所述原始体素是否与所述三角面片相交;如果确定出任一所述原始体素与所述三角面片相交,确定所述原始体素为所述待检测模型的表面体素,并将所述原始体素的体素信息确定为所述表面体素的表面体素信息;
第二确定模块,用于在所述三维空间立方体内,基于每一所述表面体素的表面体素信息,确定每一所述待检测模型的模型内部的多个内部体素和每一所述内部体素的内部体素信息;所述表面体素和所述内部体素具有相同的体积;
第三确定模块,用于基于每一所述待检测模型的所述表面体素的表面体素信息和所述内部体素的内部体素信息,确定所述至少两个待检测模型之间的重叠体素的数量;
第四确定模块,用于基于所述重叠体素的数量、每一所述待检测模型的所述表面体素的数量和所述内部体素的数量,确定所述至少两个待检测模型的穿模检测结果。
14.一种电子设备,其特征在于,包括:
存储器,用于存储可执行指令;处理器,用于执行所述存储器中存储的可执行指令时,实现权利要求1至12任一项所述的数据处理方法。
15.一种计算机可读存储介质,其特征在于,存储有可执行指令,用于引起处理器执行所述可执行指令时,实现权利要求1至12任一项所述的数据处理方法。
CN202311183634.0A 2023-09-14 2023-09-14 数据处理方法、装置、电子设备、存储介质及程序产品 Active CN116912431B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202311183634.0A CN116912431B (zh) 2023-09-14 2023-09-14 数据处理方法、装置、电子设备、存储介质及程序产品

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202311183634.0A CN116912431B (zh) 2023-09-14 2023-09-14 数据处理方法、装置、电子设备、存储介质及程序产品

Publications (2)

Publication Number Publication Date
CN116912431A CN116912431A (zh) 2023-10-20
CN116912431B true CN116912431B (zh) 2023-12-22

Family

ID=88351518

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202311183634.0A Active CN116912431B (zh) 2023-09-14 2023-09-14 数据处理方法、装置、电子设备、存储介质及程序产品

Country Status (1)

Country Link
CN (1) CN116912431B (zh)

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103236079A (zh) * 2013-04-19 2013-08-07 浙江理工大学 一种基于三维模型体素化的内部球改进构造方法
CN110033519A (zh) * 2019-04-23 2019-07-19 中南大学 基于隐式函数的三维建模方法、装置、系统及存储介质

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9084888B2 (en) * 2011-11-10 2015-07-21 Varian Medical Systems, Inc. Systems and methods for segmentation of radiopaque structures in images
US20140368504A1 (en) * 2013-06-12 2014-12-18 Microsoft Corporation Scalable volumetric 3d reconstruction
CN106215419B (zh) * 2016-07-28 2019-08-16 腾讯科技(深圳)有限公司 碰撞控制方法及装置
GB2564402B (en) * 2017-07-06 2021-03-17 Sony Interactive Entertainment Inc System and method of 3D print modelling
US10878613B2 (en) * 2018-12-06 2020-12-29 Cesium GS, Inc. System and method for transferring surface information from massive meshes to simplified meshes using voxels

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103236079A (zh) * 2013-04-19 2013-08-07 浙江理工大学 一种基于三维模型体素化的内部球改进构造方法
CN110033519A (zh) * 2019-04-23 2019-07-19 中南大学 基于隐式函数的三维建模方法、装置、系统及存储介质

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
基于三角形细分的三角网格模型表面体素化算法;赵芳垒;敬石开;李向前;邢昊;刘晨燕;宋国华;;计算机集成制造系统(11);2399-2406 *

Also Published As

Publication number Publication date
CN116912431A (zh) 2023-10-20

Similar Documents

Publication Publication Date Title
CN109523621B (zh) 对象的加载方法和装置、存储介质、电子装置
CN108648269B (zh) 三维建筑物模型的单体化方法和系统
EP2335224B1 (en) Ray tracing using ray-specific clipping
CN113781625B (zh) 适用于光线追踪的基于硬件的技术
CN107464286B (zh) 三维城市模型中的孔洞修复方法及装置、设备及可读介质
US9208610B2 (en) Alternate scene representations for optimizing rendering of computer graphics
CN112633657B (zh) 一种施工质量管理方法、装置、设备及存储介质
US11315303B2 (en) Graphics processing
CN102089786A (zh) 在性能分析期间将图形指令映射到相关联的图形数据
CN114202622B (zh) 虚拟建筑生成方法、装置、设备及计算机可读存储介质
US20230033319A1 (en) Method, apparatus and device for processing shadow texture, computer-readable storage medium, and program product
CN115375828B (zh) 模型的阴影生成方法、装置、设备、介质
KR20220164442A (ko) 그래픽 프로세싱
CN116883612B (zh) 一种三维场景模型生成方法及系统
CN116912431B (zh) 数据处理方法、装置、电子设备、存储介质及程序产品
US11615578B1 (en) Systems and methods for efficient rendering and processing of point clouds using textures
CN116503474A (zh) 位姿获取方法、装置、电子设备、存储介质及程序产品
CN115690374A (zh) 一种基于模型边缘射线检测的交互方法、装置及设备
KR20220164441A (ko) 그래픽 프로세싱
CN112999656B (zh) 一种光照探针的处理方法、装置、电子设备及存储介质
Nirenstein Fast and accurate visibility preprocessing
Bremner et al. Impact of resolution, colour, and motion on object identification in digital twins from robot sensor data
CN116993894B (zh) 虚拟画面的生成方法、装置、设备、存储介质及程序产品
CN117197325A (zh) 图像重渲染方法、装置、电子设备、存储介质及程序产品
CN111078392B (zh) 一种基于Unity的场景物件Mipmap Level统计方法及其系统

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant