一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

用于体素模型的存储优化方法、装置及电子设备与流程

2021-10-29 20:00:00 来源:中国专利 TAG:电子设备 装置 模型 用于 优化


1.本技术实施例涉及计算机技术领域,尤其涉及一种用于体素模型的存储优化方法、装置及电子设备。


背景技术:

[0002]“体素”是数字数据于三维空间分割上的基本单位,体素用于3d成像、游戏设计、科学数据与医学影像等领域,其在概念上可以类似于二维空间的基本单位-像素,像素用在二维计算机图像的影像数据上。
[0003]
通过3d体素编辑,可以对3d体素进行拼接,构建出相应的场景模型,如可以拼接成各种各样的电子化建筑、人物、植物等。举例来说,游戏开发用户可以通过编辑3d体素来构建设计游戏中的各种体素模型或场景,用户只需要用简单的cube盒子(即3d体素的一种表现)进行拼装,类似摆放积木一样,无需理解什么是组成cube盒子的点、线、面,更不需要用户进行代码编程,可以降低游戏开发门槛,面向大众创作者。
[0004]
目前,传统方案难以存储超大场景下的体素模型,对体素模型的应用范围和客户群体产生了限制。具体地,在传统方案中,存储每个体素的坐标信息和颜色信息(x、y、z、color),按照每个信息4个字节来计算,占用内存合计=16字节*2.6亿≈3gb,导致在移动端设备上根本无法运行。
[0005]
针对上述问题,目前业界暂无较佳的解决方案。


技术实现要素:

[0006]
有鉴于此,本技术实施例提供了一种用于体素模型的存储优化方法、装置及电子设备,用于至少解决目前相关技术中难以存储和应用超大场景的体素模型的问题。
[0007]
本技术实施例采用下述技术方案:
[0008]
本技术实施例提供一种用于体素模型的存储优化方法,包括:按照体素立方体对所述体素模型进行划分,并确定所述体素模型中各个体素立方体的对应设定位置的体素顶点的坐标参数,每一个所述体素立方体是由设定数量个体素所组成的立方体;针对各个体素立方体,判断该体素立方体中各个体素顶点的颜色是否都相同;当存在第一体素立方体中均具有相同颜色时,判断所述第一体素立方体是否具有所述设定数量个体素;当所述第一体素立方体具有所述设定数量个体素时,存储所述第一体素立方体的所述设定位置的体素顶点的坐标参数和所述第一体素立方体所对应的颜色至内存空间。
[0009]
本技术实施例还提供一种用于体素模型的存储优化装置,包括:体素立方坐标确定单元,被配置为按照体素立方体对所述体素模型进行划分,并确定所述体素模型中各个体素立方体的对应设定位置的体素顶点的坐标参数,每一个所述体素立方体是由设定数量个体素所组成的立方体;立方体素颜色判断单元,被配置为针对各个体素立方体,判断该体素立方体中各个体素顶点的颜色是否都相同;立方体素数量判断单元,被配置为当存在第一体素立方体中均具有相同颜色时,判断所述第一体素立方体是否具有所述设定数量个体
素;立方体素信息存储单元,被配置为当所述第一体素立方体具有所述设定数量个体素时,存储所述第一体素立方体的所述设定位置的体素顶点的坐标参数和所述第一体素立方体所对应的颜色至内存空间。
[0010]
本技术实施例还提供一种电子设备,包括:至少一个处理器;以及存储器,所述存储器存储指令,当所述指令被所述至少一个处理器执行时,使得所述至少一个处理器执行如上述的方法。
[0011]
本技术实施例还提供一种机器可读存储介质,其存储有可执行指令,所述指令当被执行时使得所述机器执行如上述的方法
[0012]
本技术实施例采用的上述至少一个技术方案能够达到以下有益效果:
[0013]
按照含设定数量个体素的体素立方体来划分体素模型,并确定体素模型中的各个体素立方体的对应设定位置的体素顶点的坐标参数,在体素立方体中的颜色都相同且具有完整数量的体素时,可以仅存储该体素立方体的设定位置的体素顶点的坐标参数(其可用于表达该体素立方体的坐标位置)和相应的颜色,而不需要存储立方体中各个体素的坐标和颜色参数,有效降低了体素模型的内存空间占用量,并可以支持超大场景下的体素模型。
附图说明
[0014]
此处所说明的附图用来提供对本技术实施例的进一步理解,构成本技术的一部分,本技术的示意性实施例及其说明用于解释本技术,并不构成对本技术的不当限定。在附图中:
[0015]
图1示出了目前相关技术中的体素模型的一示例的效果示意图;
[0016]
图2示出了根据本技术实施例的用于体素模型的存储优化方法的一示例的流程图;
[0017]
图3示出了根据本技术实施例的通过分布式存储来实现用于体素模型的存储优化方法的一示例的流程图;
[0018]
图4示出了根据本技术实施例的针对体素模型的立方体分层划分的一示例的示意图;
[0019]
图5a示出了根据本技术实施例的在外部存储器中的用于体素模型的存储优化方法的一示例的流程图;
[0020]
图5b示出了根据本技术实施例的体素模型中的box4分布的一示例的效果示意图;
[0021]
图6示出了根据本技术实施例的在显存中的用于体素模型的存储优化方法的一示例的流程图;
[0022]
图7示出了对由体素编辑而成的体素模型进行平滑处理的一示例的示意图;
[0023]
图8示出了根据本技术实施例的用于体素模型的平滑方法的一示例的流程图;
[0024]
图9示出了根据本技术实施例的对体素模型的进行平滑处理的一示例的示意图;
[0025]
图10示出了通过应用本技术实施例的平滑和减面之后的体素模型的一示例的效果示意图;
[0026]
图11a示出了无损减面的一示例的效果示意图;
[0027]
图11b示出了有损减面的一示例的效果示意图;
[0028]
图12示出了根据本技术实施例的用于体素模型的平滑方法中的减面处理过程的
一示例的流程图;
[0029]
图13示出了根据本技术实施例的减面合并操作的一示例的效果示意图;
[0030]
图14示出了根据本技术实施例的用于体素模型的平滑方法中的减面过程的一示例的流程图;
[0031]
图15a示出了通过目前相关技术中的减面处理而得到的体素模型的一示例的效果示意图;
[0032]
图15b示出了通过本技术实施例的减面操作所得到的体素模型的一示例的效果示意图;
[0033]
图16示出了根据本技术实施例的经平滑处理的体素模型的一示例的效果示意图;
[0034]
图17示出了根据本技术实施例的用于体素模型的存储优化装置的一示例的结构框图;
[0035]
图18示出了根据本技术实施例的用于体素模型的平滑装置的一示例的结构框图。
具体实施方式
[0036]
目前,通过3d体素所构建的体素模型可能会导致“像素化”或“马赛克”似的视觉效果(如图1所示),在视觉观感上可能无法实现一些专业软件所构建模型的平滑效果。
[0037]
因此,在利用体素编辑的操作方式制作体素模型之后,不借助额外专门的专业软件如何让体素模型更加平滑而不再呈现出马赛克似的效果是目前业界亟待解决的难题。该难题的解决,既能降低用户制作门槛,又能展现出精美的画面。
[0038]
为使本技术的目的、技术方案和优点更加清楚,下面将结合本技术具体实施例及相应的附图对本技术技术方案进行清楚、完整地描述。显然,所描述的实施例仅是本技术一部分实施例,而不是全部的实施例。基于本技术中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本技术实施的范围。
[0039]
如本文中使用的,术语“包括”及其变型表示开放的术语,含义是“包括但不限于”。术语“基于”表示“至少部分地基于”。术语“一个实施例”和“一实施例”表示“至少一个实施例”。术语“另一个实施例”表示“至少一个其他实施例”。术语“第一”、“第二”等可以指代不同的或相同的对象。下面可以包括其他的定义,无论是明确的还是隐含的。除非上下文中明确地指明,否则一个术语的定义在整个申请中是一致的。
[0040]
术语“顶点”可以表示体素的各个顶点。术语“法线”可以表示点法线、线法线或面法线,在体素模型中,法线其取决于光照的体素对象的类型,并且光照方向是与法线方向相对应的。
[0041]
图2示出了根据本技术实施例的用于体素模型的存储优化方法的一示例的流程图。
[0042]
在步骤210中,获取体素模型中各个体素顶点所分别对应的颜色计算机表示值。这里,颜色计算机表示值可以是颜色信息在计算机中所对应的数值,一般可以采用uint32来表示颜色,其包括rgba信息。例如,0xffffffff=白色,0xffff0000=红色。
[0043]
因此,在计算机的存储格式中,如果每个体素顶点的颜色用uint32来存储,会占用4个字节。
[0044]
在步骤220中,针对不同的颜色计算机表示值分别定义相应的颜色键值,并将所获
取的各个颜色计算机表示值分别转换为相应的颜色键值。这里,根据颜色计算机表示值的不同分别定义相应的颜色键值,例如当体素模型中存在4种颜色时,可以分别针对这4种颜色分别定义相应的颜色键值为0、1、2和3。
[0045]
在步骤230中,根据不同的颜色计算机表示值和相应的颜色键值构建颜色键值表。
[0046]
示例性地可以得到如下表1所示的颜色键值表:
[0047]
键值0123颜色计算机表示值0xffff00000xffffff000xff0000ff0xffffffff
[0048]
表1
[0049]
在步骤240中,存储颜色键值表和各个体素顶点所分别对应的颜色键值至内存空间。
[0050]
这样,相比于现有技术中的采用uint32(4个字节)的颜色计算机表示值的存储方式,能够有效降低体素模型中颜色信息的存储量。
[0051]
具体地,参照下表2中的内容,当体素模型中的颜色数量(或者,颜色计算表示值的不同数目)不超过28种时,键值占用的内存是1个字节,可以使用byte数据类型来存储相应的键值,节省了3个字节。当体素模型中的颜色数量不超过2
16
种时,键值占用的内存是2个字节,可以使用short数据类型来存储相应的键值,节省了2个字节。
[0052]
条件颜色数量≤256颜色数量≤65536颜色数量>65536键值存储方式使用byte存储使用short存储无需构建键值表占用内存1字节2字节4字节
[0053]
表2
[0054]
经过统计单个体素模型的颜色数量一般都不超过256种(占比>98%)。这样,当体素模型的颜色不超过256种的时候,针对体素模型的颜色数据,都只需要通过一个byte(1个字节)进行存储,真正使用的时候再去颜色键值表中去查找,大大的降低了内存消耗量,可以支持超大场景的体素模型。
[0055]
图3示出了根据本技术实施例的通过分布式存储来实现用于体素模型的存储优化方法的一示例的流程图。
[0056]
在一些3d体素场景(例如3d体素沙盒游戏)中的模型、建筑中存在大量重复的区块以及体素的坐标都是具有规律性的,通过分布式存储来将这些重复的区块具有的规律性有效的利用起来,便能大量的节省内存。
[0057]
如图3所示,在步骤310中,按照体素立方体对体素模型进行划分,并确定体素模型中各个体素立方体的对应设定位置的体素顶点的坐标参数,每一个体素立方体是由设定数量个体素所组成的立方体。这里,体素立方体可以表示由立方体体素所组成的结构,其具体外型可以不被限定为立方或长方。此外,设定位置可以是预先定义的,例如对应立方体的主视面的左上边角的体素顶点的位置。
[0058]
具体地,可以通过体素立方体来将整个模型分成多层存储结构(两层或两层以上)。在本技术实施例的一些示例中,可以将整个模型分为多个box4,每个box4又是由4*4*4=64个体素组合而成,这样就分成了两层存储结构。在本技术实施例的另一些示例中,可以将整个模型分为三层存储结构,在模型中包含多个box32,在box32中又包含了多个box4。需说明的是,关于box(或体素立方体)的设定数量(或边长中所含的体素数量),可以是多样化
的,并且可以根据业务需求而进行调整,在此应不加限制。
[0059]
在步骤320中,针对各个体素立方体,判断该体素立方体中各个体素顶点的颜色是否都相同。
[0060]
在步骤320中的判断结果指示存在其中一个或多个体素立方体(也被称为第一体素立方体)中的各个体素顶点的颜色相同时,跳转执行步骤331中的步骤。在步骤320中的判断结果指示存在其中一个或多个体素立方体(也被称为第二体素立方体)中的各个体素顶点的颜色并不相同(即,在体素立方体中存在多种颜色)时,跳转执行步骤333中的步骤。
[0061]
在步骤331中,判断第一体素立方体是否具有设定数量个体素。也就是说,判断第一体素立方体是否具有完整数量个的体素单元,例如,存在一些位于边缘的体素立方体的边角体素缺失的情况。
[0062]
在步骤331中的判断结果指示第一体素立方体具有设定数量个体素时,跳转至步骤341。在步骤331中的判断结果指示第一体素立方体不具有设定数量个体素(即,少于设定数量)时,跳转至步骤343。
[0063]
在步骤341中,存储第一体素立方体的设定位置的体素顶点的坐标参数和第一体素立方体所对应的颜色至内存空间。这里,可以结合图2中的示例,在内存空间中所存储的颜色参数为颜色键值(而不是原始的颜色计算机表示值),可以进一步优化体素模型的内存空间。
[0064]
在步骤343中,存储第一体素立方体中各个体素的标识码和该第一体素立方体所对应的颜色至内存空间,每一标识码分别与体素立方体中唯一位置的体素相对应。
[0065]
在步骤333中,存储所述第二体素立方体中各个体素的标识码和相应的颜色至内存空间。
[0066]
通过本技术实施例,不需要将体素模型中各个体素的三维坐标(x、y、z)都进行存储,只需要存储体素立方体的整体坐标参数(即,立方体设定位置的体素顶点的坐标参数)和颜色值,并且通过标识码(例如,2进制的位码)来标识体素立方体中的不同体素,可以降低体素模型中各个体素的坐标参数所消耗的内存量。
[0067]
图4示出了根据本技术实施例的针对体素模型的立方体分层划分的一示例的示意图。
[0068]
如图4所示,整个模型分为三层存储结构,在模型中包含多个box32,在box32中又包含了多个box4。
[0069]
结合图3中所描述的分布式存储的方式,只需要存储box32的整体坐标信息(x、y、z),具体box4的起始坐标以及box4中的每个体素坐标,根据在容器中的index(索引值),便可直接计算出每个体素的具体坐标值。
[0070]
具体地,还可以参照下面表3所描述结合box4的存储示例:
[0071][0072][0073]
表3
[0074]
参照如表3中的示例,当体素立方体(或box4)中各个体素的颜色完全一样且完整(具有64个体素)时,只需要存储该体素立方体整体(box4)所对应的颜色值即可。当体素立方体(或box4)中各个体素的颜色完全一样但不完整(少于64个体素)时,需要存储该体素立方体整体(box4)所对应的颜色值和各个体素的标识码,每一标识码可以与立方体上唯一位置的体素相对应(例如,64个标识码来分别表示box4中不同的体素),从而标记出box4中的哪些体素是缺失的。
[0075]
在本技术实施例的一些实施方式中,还可以利用分布式存储和数据模板,可以将颜色一样的box4对象,构建出对象模版,通过键值来可以快速定位到该对象,避免重复构建对象和内存,并可以提高效率。
[0076]
是否full键值模板full颜色真正的对象(包含数据区)notfull颜色 64位整数真正的对象(包含数据区)
[0077]
表4
[0078]
参照如表4中的示例,当颜色一样的第一体素立方体具有设定数量个体素(即,为full)时,针对第一体素立方体的颜色构建相应的第一对象模板,并生成针对第一对象模板的第一模板键值;或者,在另一种情况下,当第一体素立方体不具有设定数量个体素(即,为notfull)时,针对第一体素立方体的颜色和64位整数(或,64个标识码)来构建相应的第二对象模板,并生成针对第二对象模板的第二模板键值。这样,针对不同情况的第一体素立方体构建不同的对象模板,且可选地,对象模板还可以是被存储在非内存空间中。进而,可以将针对第一体素立方体的第一模板键值或第二模板键值存储至内存空间,更能降低体素模型的内存空间占用量。
[0079]
图5a示出了根据本技术实施例的在外部存储器中的用于体素模型的存储优化方法的一示例的流程图。
[0080]
需说明的是,当用户通过体素编辑操作,在内存中构建出体素模型之后,需要将体素模型生成相应的文件以存储在外部存储器(例如,硬盘等)中,从而便于后期上传至服务器或其他用途。
[0081]
因此,超大规模的场景除了针对内存空间的优化之外,在文件存储方面也是非常重要的,文件尺寸极致优化同样也是需要考虑的问题。这里,文件尺寸小不仅可以减少服务
器的存储压力、网络流量还能提高文件加载、解析效率。
[0082]
如图5a所示,在步骤510中,按照体素立方体对体素模型进行划分。关于步骤510的细节,可以参照上面参考图3中的步骤310的描述,在此便不赘述。
[0083]
在步骤520中,遍历体素模型中的各个体素立方体,以识别体素模型中的各个体素立方体的分布是否满足预设的至少一个体素分布规则,每一所述体素分布规则分别被预配置了唯一相对应的体素压缩方式。
[0084]
在步骤530中,针对满足第一体素分布规则的各个体素立方体,采用与第一体素分布规则相应的体素压缩方式压缩成存储文件。
[0085]
在步骤540中,将存储文件保存至外部存储器。
[0086]
在本技术实施例中,可以利用出现相同的体素立方体的规律来进行压缩存储。因为,在体素编辑的场景中会存在大规模重复的现象,例如重复一大片区域都是存储绿色full的box4,正常存储方式需要存储各个box4的信息,但可以通过规则压缩的方式来进一步降低文件的大小。结合如图5b所描述的示例,各个box4的都相同,可以通过一些压缩方式来降低文件量大小。
[0087]
在本技术实施例的一个示例中,体素分布规则包括:存在连续分布的具有相同颜色的超过第一设定数量阈值的体素立方体,和/或,存在连续间隔分布的对应两种颜色的超过第二设定数量阈值的体素立方体。
[0088]
参照下面结合表5中针对box4的文件优化的示例:
[0089][0090]
表5
[0091]
示例性地,在从位置n到位置m连续出现了id号=x的box4时,只需要存储“n~m,box4,x”,而不需要存储各个box4的id,可以有效降低文件量。
[0092]
图6示出了根据本技术实施例的在显存中的用于体素模型的存储优化方法的一示例的流程图。
[0093]
在对图像进行渲染时,需要利用到drawcall,其为cpu调用图形编程接口,能够命令gpu(显卡处理器)进行渲染的操作。在每次调用drawcall之前,cpu需要向gpu发送很多内容,包括数据、状态、命令等。在这一阶段,cpu需要完成很多工作,例如组织数据、检查渲染状态等。而一旦cpu完成了这些准备工作,gpu就可以开始本次的渲染。gpu的渲染能力是很强的,渲染300个和3000个三角网格通常没有什么区别,有效的利用gpu的渲染能力,减少drawcall的数量,可以有效的提高程序的运行效率。
[0094]
在3d渲染中,所有物体的形状取决于三维空间中的一个点,这些点进行连接(连接方式分为点、线、面)从而组合成我们所看见的不同形状的三维模型,vertexbuffer就是该模型的顶点数据,称为顶点缓冲区,将顶点缓冲区上传显卡,显卡再通过一些规则进行绘
制。
[0095]
indexbuffer(索引缓冲区)要配合vertexbuffer进行使用,也就是通过索引缓冲区的数值,通知gpu,使用哪几个点进行绘制。
[0096]
举例说明,如有以下几个顶点数据(v1,v2,v3,v4,v5)保存在vertexbuffer中,而在indexbuffer中的数据为(0 1 4),那么显卡就会把顶点缓冲区中的v1、v2、v5这三个点组成一个三角形进行绘制。
[0097]
根据渲染需求每个体素顶点在显存中的数据一般由坐标参数(x、y、z)、法线参数(normalx、normaly、normalz)和颜色参数(r、g、b、a)组成,目前一般用float来表示(占用显存4个字节),合计占用为40个字节。如果超大场景模型具有2.6亿个体素,每个体素由6个面组合而成,每个面4个顶点,计算下来显存的占用是巨大的(例如,即:2.6亿*6*4*40)。
[0098]
这里,为了支持超大模型或场景,显存也必须做到极致优化。
[0099]
如图6所示,在步骤610中,依据颜色键值表将所述体素模型中各个体素顶点所分别对应的颜色键值还原成相应的颜色计算机表示值。
[0100]
在一些示例中,可以是在需要对模型进行渲染时,cpu将颜色键值还原成原始的颜色计算机表示值,并将其传递至显卡处理器。
[0101]
在步骤620中,将经还原成的各个颜色计算机表示值所对应的颜色与预存储的颜色纹理图阵列进行比对,以确定各个体素顶点的颜色在颜色纹理图阵列中的阵列位置信息。这里,颜色纹理图阵列是由多个颜色纹理图(例如,所有颜色所对应的颜色纹理图)所组成的阵列,例如256*256个颜色,这样所有的颜色都能够在颜色纹理图二维阵列中找到唯一相对应的阵列位置点。
[0102]
在一些示例中,可以是调用显卡处理器来通过预存储的颜色纹理图阵列来与体素模型中的各种颜色进行比对,从而确定相应的阵列位置信息。
[0103]
在步骤630中,存储各个体素顶点所对应的阵列位置信息至显存空间,以在针对所述体素模型的颜色渲染阶段进行调用。这样,只需要存储阵列位置信息就可以确定体素顶点相应的颜色,而不需要记录各个体素顶点的颜色信息(rgba),大幅降低了体素模型数据的显存占用空间。
[0104]
具体地,可以通过以下步骤将4个float的值(rgba)降到2个byte:
[0105]
1)创建一张256*256的一张纹理贴图,把整个模型场景中使用的颜色,每个颜色占用一个像素点上传到这张纹理中,共可容纳65536种颜色。
[0106]
2)使用byte来表示uv的值,0-256之间,在显卡的shader语言中uv/256来计算出浮点数的uv坐标,这里u可以表示横坐标,v可以表示纵坐标。
[0107]
3)通过uv去采样这张纹理贴图,可以实现相应颜色的效果。
[0108]
在本技术实施例的一些实施方式中,还可以通过绝对坐标(例如设定位置的体素顶点的坐标)与相对位置(可以使用byte来记录)的方式来给定每个体素顶点的坐标信息,而不需要存储各个体素顶点的坐标信息,可以优化显存空间。
[0109]
具体地,针对体素模型中的每一体素立方体,将该体素立方体中的设定位置的体素顶点相对应的坐标参数和该体素立方体中的各个体素顶点与设定位置的体素顶点之间的相对位置存储至显存空间,以使得在进行渲染时通过设定位置的体素顶点的坐标参数和各个相对位置来确定该体素立方体中的各个体素顶点的坐标参数。
[0110]
这里,为了降低超大模型场景的显存占用,这里可以使用byte来替代float表示坐标的信息,但是byte的的取值范围为-128-127之间。
[0111]
由于3d体素体系中每个体素有着一定的规律,本发明中将128*128*128个体素作为一个drawcall,再结合图3中的分布式存储,将体素立方体的起始的坐标信息(即,对应设定位置的体素顶点的坐标参数)通过shader的uniform方式传入显卡,再通过显卡的shader语言计算计算出每个体素顶点的真实坐标,例如shaderuniform代表整体的位置的定义为:
[0112]
vec3 u_vertextpostion;三个float值代表整体的位置信息。
[0113]
每个顶点的坐标变命令字为
[0114]
byte3 a_position;(这个值为-127-128之间)
[0115]
那么,该点的真正值realposition为:
[0116]
realposition=u_vertextpostion a_position;
[0117]
这样,通过体素立方体的起始的坐标信息和每个顶点的相对坐标位置,可以精确地找到各个体素顶点的真实坐标位置。
[0118]
在本技术实施例的一些示例中,还可以对法线参数进行压缩,以进一步优化显存空间。
[0119]
具体地,可以获取分别针对体素模型中的各个体素顶点的法线参数集,并按照预设的法线参数转换规则来将各个体素顶点的法线参数集分别转换为相应的法线压缩值,进而存储体素模型的各个体素顶点的法线压缩值至显存空间。
[0120]
需说明的是,在传统的3d渲染中,每个点的normal(法线x、y、z)信息也是用三个float值来表示。为了更节省显存,结合3d体素的特点,在本技术实施例的一些实施方式中,可以使用三个byte来表示法线参数,在显卡的shader语言中,再将其normal/128,得到一个浮点数来表示顶点的normal信息(或,法线参数)。
[0121]
在本技术实施例中,可以结合上述三种显存优化方式,将常规的x、y、z、normalx、normaly、normalz、r、g、g、a占用的40字节压缩到8字节,只占原来的1/5,节省了显存空间。
[0122]
图7示出了对由体素编辑而成的体素模型进行平滑处理的一示例的示意图。
[0123]
如图7所示,将黑色实心圈的点(即,701)进行平滑计算,得到了图中空心圈的点(即,703),这样产生了新的顶点,使得原有的规整的体素(或cube)数据发生了改变,不是真正的cube了而变成了异型,打破了原来的cube操作方式,不方便进行二次编辑(例如,无法堆叠新的cube)。
[0124]
图8示出了根据本技术实施例的用于体素模型的平滑方法的一示例的流程图。
[0125]
如图8所示,在步骤810中,确定体素模型中待进行平滑处理的第一体素顶点的坐标参数。
[0126]
在步骤820中,基于预设平滑算法,计算由第一体素顶点的坐标参数经平滑后所对应的第二体素顶点的坐标参数。这里,可以采用各种已有的或潜在的平滑计算算法,例如可以使用如图7中所示的计算方法进行平滑处理。
[0127]
在步骤830中,根据第二体素顶点的坐标参数,计算第二体素顶点的法线参数。
[0128]
在步骤840中,将第一体素顶点的法线参数替换为第二体素顶点的法线参数。
[0129]
需说明的是,关于第一体素顶点和第二体素顶点的数量,其可以是一个或多个,例如可以是一个线的两个顶点或一个面上的三个顶点,且都属于本技术的保护范围内。
[0130]
参照如图9的示例,可以通过以下操作方式来实现平滑效果:
[0131]
1)可以通过平滑算法将两个点a、b进行平滑,而得到了一个新的点c。
[0132]
2)计算c点的法线,得到了一个新的法线nc。
[0133]
3)不修改a、b点的真正位置坐标,只修改a、b点的法线参数为nc。
[0134]
4)利用光照效果,使得模型看上去是平滑的效果。
[0135]
在本中请实施例中,通过改变法线和光照来巧妙地实现平滑的效果,其并不会改变体素原有的架构,有利于针对体素模型的后续操作。
[0136]
需说明的是,在体素模型的平滑过程中,并不应该一味的将所有的面全部进行平滑,并且可以只针对体素模型的角和边进行平滑处理。具体地,可以识别体素模型外表的边部和角部,并将所识别的边部和角部所对应的体素顶点的坐标参数确定为待进行平滑处理的第一体素顶点的坐标参数。
[0137]
此外,如果单纯经过如图9中所描述的技术方案,将体素模型进行平滑后,体素模型的面数非常的多,轻松超过10万三角面。由于显卡性能限制,无法大批量使用,所以需要将其减面处理。
[0138]
作为本技术实施例的一些优选实施方式,可以针对体素模型外表的多个体素面进行减面处理。但应理解的是,先进行减面操作后进行平滑处理也是可行的,只要在渲染操作之前完成即可,其都属于本技术所涵盖的保护范围内。
[0139]
图10示出了通过应用本技术实施例的平滑和减面之后的体素模型的示例。不难看出,当减面到7000面时,体素模型相比于图1中现有的体素模型,能够实现较好的平滑效果,几乎消除了马赛克风格。
[0140]
需说明的是,减面算法分为无损减面和有损减面,无损减面的最基本原理就是将同一水平面上的点进行合并,但是不影响其显示效果,如下图11a所示,很多点在一个平面上,将其合并,丝毫不影响最终的显示效果和形状。有损减面,则是增加一定的容忍阈值,小于这个阈值的点都可以进行合并,如下图11b所示,即使有很多点不完全在一个平面上,但是由于小于容忍值,但是仍然将其合并了。图11a示出了无损减面的一示例的效果示意图。图11b示出了有损减面的一示例的效果示意图。
[0141]
图12示出了根据本技术实施例的用于体素模型的平滑方法中的减面处理过程的一示例的流程图。
[0142]
如图12所示,在步骤1210中,判断在体素模型外表的相邻的第一体素顶点与第二体素顶点各自的法线之间的夹角是否小于夹角阈值。
[0143]
在步骤1220中,当法线夹角小于夹角阈值时,假设消减第一体素顶点和第二体素顶点中的一者,并判断未被消减的体素顶点与具有被假设消减的体素顶点的各个体素面之间的距离是否均小于距离阈值。
[0144]
在步骤1230中,当均小于所述距离阈值时,确定对该被假设消减的体素顶点进行消减操作。
[0145]
在本技术实施例中,预设定夹角阈值和距离阈值,并将两个顶点的法线之间的夹角与夹角阈值对比以确定是否进行假设合并(或消减),最后通过比较未被合并的体素顶点与具有被假设合并的体素顶点的各个体素面之间的距离来确定是否执行顶点合并操作。这样,可以避免将两个方位相差较大的平面进行合并,保障了减面后的模型效果。
[0146]
图13示出了根据本技术实施例的减面合并操作的一示例的效果示意图。
[0147]
参照图13的示例,可以先判断p5和p6两点的法线是否小于预设的角度阈值,如果满足条件,再将p5和p6点进行合并成了新的p5 ,再计算p5 点到合并前(具有p6点)的t1、t2、t3、t4、t5面的距离,如果距离小于预设的距离阈值,则可以将p5和p6这两个点进行合并。
[0148]
图14示出了根据本技术实施例的用于体素模型的平滑方法中的减面过程的一示例的流程图。
[0149]
应理解的是,在减面过程中,不同颜色的点是不可以合并的,在传统的减面算法中,会把这些不同颜色的点设置为不可合并。这样,就会导致本可以合并的面都无法合并了,造成很多的浪费,如图15a中所描述的一样,存在很多三角面,减面效果不够充分。图15a示出了通过目前相关技术中的减面处理而得到的体素模型的一示例的效果示意图。
[0150]
如图14所示,在步骤1410中,识别体素模型的外表的相邻的体素面之间是否存在颜色交汇处。
[0151]
在步骤1420中,在颜色交汇处设置辅助体素面,其中辅助体素面与相交的各个体素面之间的夹角大于所述夹角阈值。
[0152]
在本技术实施例中,不需要定义不同颜色点是不许合并的,只是在颜色交汇的地方设置辅助体素面(例如,垂直体素面),再结合如图12中所描述的减面方法,可以较有效地完成减面操作,且具有较佳的减面效果。
[0153]
图15b示出了通过本技术实施例的减面操作所得到的体素模型的一示例的效果示意图。如图15b所示,通过设置垂直面,使得在相同颜色的范围区域中不会存在额外的三角面,减掉了更多的面,具有优秀的减面效果。
[0154]
需说明的是,这些辅助体素面,可以是单纯地仅在减面合并操作中使用,而不能被提交给显卡进行渲染。示例性地,可以是在完成针对体素模型的减面操作之后,消除辅助体素面。
[0155]
图16示出了根据本技术实施例的经平滑处理的体素模型的一示例的效果示意图。
[0156]
参照图16中的示例,综合前面讲述的减面过程,在一些应用场景下需要避免误合并一些点,例如,虽然p1和p3法线的数值非常接近,也具备合并的条件,但是其实为了保留圆滑的弧度,而不应该让它们轻易地合并。
[0157]
因此,可以通过设置权重信息而避免针对体素模型中平滑点的错误合并。具体地,每一所述体素顶点具有针对所述夹角阈值和/或所述距离阈值的校准权重。并且,经平滑处理的体素顶点所对应校准权重可以低于未经平滑处理的体素顶点所对应的校准权重。这样,可以避免平滑点的弧度受到影响,保障了模型的平滑效果。具体地,降低第一和第二体素顶点的关于夹角阈值和/或距离阈值的校准权重。
[0158]
示例性地,根据平滑的影响点数据,将每个点设置为不同的权重值。示例性地,未经平滑点的权重值为1,平滑的点的权重值设置为0.3。(即p1点的权重为1,p3点的权重为0.3),利用该权重值来对减面处理中的阈值(例如,夹角阈值和/或距离阈值)进行校准,那么现在真正的阈值的公式为:
[0159]
真正使用的阈值=预设的阈值*权重值
[0160]
这样,通过权重的影响,p1和p3点就没有那么容易合并,可以保留预期的圆滑效
果。
[0161]
图17示出了根据本技术实施例的用于体素模型的存储优化装置的一示例的结构框图。
[0162]
如图17所示,用于体素模型的存储优化装置1700包括体素立方坐标确定单元1710、立方体素颜色判断单元1720、立方体素数量判断单元1730和立方体素信息存储单元1740。
[0163]
体素立方坐标确定单元1710被配置为按照体素立方体对所述体素模型进行划分,并确定所述体素模型中各个体素立方体的对应设定位置的体素顶点的坐标参数,每一个所述体素立方体是由设定数量个体素所组成的立方体。
[0164]
立方体素颜色判断单元1720被配置为针对各个体素立方体,判断该体素立方体中各个体素顶点的颜色是否都相同。
[0165]
立方体素数量判断单元1730被配置为当存在第一体素立方体中均具有相同颜色时,判断所述第一体素立方体是否具有所述设定数量个体素。
[0166]
立方体素信息存储单元1740被配置为当所述第一体素立方体具有所述设定数量个体素时,存储所述第一体素立方体的所述设定位置的体素顶点的坐标参数和所述第一体素立方体所对应的颜色至内存空间。
[0167]
如上参照图1到图17,对根据本技术实施例的用于体素模型的存储优化方法及装置的实施例进行了描述。在以上对方法实施例的描述中所提及的细节,同样适用于本技术装置的实施例。上面的用于体素模型的平滑装置可以采用硬件实现,也可以采用软件或者硬件和软件的组合来实现。
[0168]
图18示出了根据本技术实施例的用于体素模型的平滑装置的一示例的结构框图。
[0169]
如图18所示,用于体素模型的平滑装置1800包括目标顶点坐标确定单元1810、平滑顶点坐标计算单元1820、法线参数计算单元1830和法线参数替换单元1840。
[0170]
目标顶点坐标确定单元1810被配置为确定体素模型中待进行平滑处理的第一体素顶点的坐标参数。
[0171]
平滑顶点坐标计算单元1820被配置为基于预设平滑算法,计算由所述第一体素顶点的坐标参数经平滑后所对应的第二体素顶点的坐标参数。
[0172]
法线参数计算单元1830被配置为根据所述第二体素顶点的坐标参数,计算所述第二体素顶点的法线参数。
[0173]
法线参数替换单元1840被配置为将所述第一体素顶点的法线参数替换为所述第二体素顶点的法线参数。
[0174]
如上参照图1到图18,对根据本技术实施例的用于体素模型的平滑方法及装置的实施例进行了描述。在以上对方法实施例的描述中所提及的细节,同样适用于本技术装置的实施例。上面的用于体素模型的平滑装置可以采用硬件实现,也可以采用软件或者硬件和软件的组合来实现。
[0175]
上述实施例阐明的系统、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机。具体的,计算机例如可以为个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任何
设备的组合。
[0176]
为了描述的方便,描述以上装置时以功能分为各种单元分别描述。当然,在实施本技术时可以把各单元的功能在同一个或多个软件和/或硬件中实现。
[0177]
本领域内的技术人员应明白,本技术的实施例可提供为方法、系统、或计算机程序产品。因此,本技术可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本技术实施例可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形式。
[0178]
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
[0179]
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
[0180]
在一个典型的配置中,计算设备包括一个或多个处理器(cpu)、输入/输出接口、网络接口和内存。
[0181]
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(ram)和/或非易失性内存等形式,如只读存储器(rom)或闪存(flash ram)。内存是计算机可读介质的示例。
[0182]
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(pram)、静态随机存取存储器(sram)、动态随机存取存储器(dram)、其他类型的随机存取存储器(ram)、只读存储器(rom)、电可擦除可编程只读存储器(eeprom)、快闪记忆体或其他内存技术、只读光盘只读存储器(cd-rom)、数字多功能光盘(dvd)或其他光学存储、磁盒式磁带,磁带式磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
[0183]
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个......”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。
[0184]
本技术实施例可以在由计算机执行的计算机可执行指令的一般上下文中描述,例如程序模块。一般地,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。也可以在分布式计算环境中实践本技术,在这些分布式计算环境中,由通过通信网络而被连接的远程处理设备来执行任务。在分布式计算环境中,程序模块可以位于包括存储设备在内的本地和远程计算机存储介质中。
[0185]
本技术中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
[0186]
以上所述仅为本技术的实施例而已,并不用于限制本技术。对于本领域技术人员来说,本技术可以有各种更改和变化。凡在本技术的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本技术的权利要求范围之内。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献

  • 日榜
  • 周榜
  • 月榜