一种压缩纹理的拼装系统及方法、终端与流程

文档序号:13768099阅读:150来源:国知局
本发明涉及纹理拼装领域,尤其涉及一种压缩纹理的拼装系统及方法、终端。
背景技术
:纹理(texture)是指在计算机渲染图像时所用到的一组像素数据。最常见的纹理是二维的,例如,一幅普通的照片就是一组二维的像素数据,从而可以作为一个二维的纹理。除了二维纹理之外,还有一维纹理、三维纹理、立方图纹理、纹理数组等。在计算机渲染图像时,为了提高渲染的效率,可以把多个小纹理拼装成一个大纹理。一种做法是在程序发布前就对这些纹理进行拼装,例如,为了渲染一个游戏人物,需要使用到衣服纹理数据、肌肤纹理数据、披风纹理数据和武器纹理数据等,为提升渲染性能,可以在程序发布前将这四个的纹理数据拼装在一起,形成一个大的纹理数据。这种做法虽然实现简单,但是不够灵活,如果这个游戏人物的衣服、肌肤、披风、武器会随着程序的运行而发生改变,那么这种做法将无法胜任。另一种做法就是在程序运行的过程中对这些纹理数据进行实时拼装。一般来说,在程序运行过程中对纹理数据的拼装是在内存中进行,其中,为了节省内存空间,这些纹理通常是以压缩纹理(compressedtexture)的形式存在。压缩纹理是指采用特定的格式,在内存(或显存)中存储的纹理,例如,普通的纹理往往采用RGB8格式(每个像素占3x8=24bit,也就是3字节)或者RGBA8格式(每个像素占4x8=32bit,也就是4字节),而压缩纹理一般平均每像素只使用8bit(也就是1字节)、4bit(也就是0.5字节)甚至更少,这样不仅节约了内存空间,也提高了硬件的带宽利用率、缓存利用率,从而在多方面提高程序的性能。目前较为常见的压缩纹理格式包括S3TC、PVRTC、ETC等等,其中S3TC在PC机上普及,PVRTC在iOS设备上普及,而ETC在Android设备上普及。目前多数图形硬件所支持的压缩纹理,都是以压缩块的方式实现,例如,ETC是4x4的压缩块(即宽度方向包括4个像素、高度方向包括4个像素),PVRTC则是4x4或者8x4的压缩块。技术实现要素:由
背景技术
可以知道,压缩纹理中的像素往往是以压缩块的形式存在,无法单独对像素进行操作,然而现有的纹理实时拼装是通过移动像素来实现的,因而在拼装时需要先对压缩纹理进行解压缩,获得由像素组成的非压缩纹理,再通过移动每个像素的字节,把纹理拼装起来,待拼装完毕后,再重新压缩,形成新的压缩纹理。这种做法主要有两个缺陷:一是耗时较多,难以做到实时完成,例如目前主流的ETC、PVRTC等压缩纹理格式,若以较高质量进行压缩,压缩一张1024x1024大小的纹理,一般在电脑上需耗时几十秒,在移动设备上则耗时更长;二是由于压缩过程中采用的是有损压缩算法,因此压缩会损失图片质量,如果反复压缩,会导致图片质量低劣,无法满足使用要求。针对上述问题,本发明的目的在于提高一种压缩纹理的拼装系统、方法及终端,可在保证图片质量的同时,快速、高效地将压缩纹理拼装到拼装纹理上。本发明提供了一种压缩纹理的拼装系统,包括坐标系构建单元、参数配置单元、位置指定单元及拼装单元,其中:所述坐标系构建单元,用于基于至少两个待拼装的压缩纹理的尺寸,计算生成拼装纹理的尺寸,并以所述拼装纹理上的预定点为原点,构建坐标系;其中,所述压缩纹理包括至少一个压缩块;所述参数配置单元,用于为同一压缩比例的压缩纹理配置一个参数,并在所述参数大于等于1时,生成发送至所述位置指定单元的第一指令;所述位置指定单元,用于响应于所述第一指令,根据所述参数、所述压缩块的宽度和高度生成当前压缩比例的目标宽度和目标高度,并根据所述目标宽度和目标高度指定每个压缩纹理的参考点在所述坐标系上的目标坐标;所述拼装单元,用于在确定所述压缩纹理的宽度为所述目标宽度的整数倍及所述压缩纹理的高度为所述目标高度的整数倍后,将所述压缩纹理的所有压缩块根据所述参考点的目标坐标和所述压缩块之间的相互位置关系移动到当前压缩比例的拼装纹理上进行拼装。本发明实施例提供的压缩纹理的拼装系统,所述位置指定单元根据所述参数配置单元配置的参数N及所述压缩纹理的压缩块的宽度和高度指定每个压缩纹理在所述拼装纹理上的位置,所述拼装单元在确定所述压缩纹理的宽度为所述目标宽度的整数倍及所述压缩纹理的高度为所述目标高度的整数倍后,将所述压缩纹理的压缩块移动到所述拼装纹理上进行拼装。即在拼装时,所述压缩纹理是以压缩块为基本单位进行移动的,而不需要经历对每个压缩纹理进行解压缩和对拼装后的拼装纹理再次压缩的过程,从而避免了对所述拼装纹理进行压缩所需的耗时及对所述拼装纹理进行反复压缩而导致的图片质量下降的问题,可以在不影响图片质量的前提下,实现了快速将压缩纹理拼装到拼装纹理上,提高了纹理拼装的效率和质量。优选地,所述目标宽度等于所述压缩块的宽度乘以所述参数,所述目标高度等于所述压缩块的高度乘以所述参数。优选地,所述目标坐标的横坐标为所述目标宽度的整数倍,所述目标坐标的纵坐标为所述目标高度的整数倍。优选地,所述压缩纹理包括M级mipmap层,其中,不同级的mipmap层对应不同的压缩比例,且第i级mipmap层的宽度和高度分别为第i+1级mipmap层的宽度和高度的两倍,0≤i≤M-1;则所述参数配置单元具体用于,根据所述mipmap层的级数,为该mipmap层配置一个参数,并在所述参数大于等于1时,生成发送至所述位置指定单元的第一指令;其中,第0级mipmap层的参数配置为2j,第i级mipmap层的参数配置为2j-i,j为任意指定的非负整数。本优选方案中,对于游戏来说,由于视角的远近切换或不同终端的屏幕大小不一等原因,经常涉及游戏场景或游戏人物的放大和缩小,其中,把纹理放大较为容易,把纹理缩小则较难。为了尽可能避免对纹理进行缩小操作,一个做法是对原始纹理进行细分,分别保存原始尺寸的样本、1/2大小的样本、1/4大小的样本、……、直到只有1个像素的样本,每一个样本称为一个mipmap层,本优选方案通过对不同mipmap层配置不同的参数来实现不同mipmap层的拼装问题。优选地,所述拼装系统还包括压缩块处理单元;所述参数配置单元还用于,在为mipmap层配置的参数小于1时,生成发送至所述压缩块处理单元的第二指令;所述压缩块处理单元,用于响应于所述第二指令,对所述mipmap层的每个压缩块进行解压缩后,得到由像素组成的非压缩纹理,并将所述非压缩纹理的像素移动到所述拼装纹理进行拼装,对拼装后的所述拼装纹理进行压缩,生成压缩后的拼装纹理。本优选方案中,对于参数小于1的mipmap层,需要对其压缩块进行解压缩,在拼装后压缩的过程,由于此时的mipmap层的分辨率已经很小,因而相应的需要解压缩的压缩块数量也很少,大大减小了压缩运算量。优选地,所述拼装单元具体包括尺寸判断模块、像素填充模块及压缩块移动模块,其中:所述尺寸判断模块,用于判断所述压缩纹理的宽度为目标宽度的整数倍及所述压缩纹理的高度为所述目标高度的整数倍是否成立,若否,则生成发送至所述像素填充模块的填充指令;若是,则生成发送至所述压缩块移动模块的移动指令;所述像素填充模块,用于响应于所述填充指令,对所述压缩纹理填充空白像素,使得所述压缩纹理的宽度为目标宽度的整数倍及所述压缩纹理的高度为所述目标高度的整数倍;所述压缩块移动模块,用于响应于所述移动指令,将所述压缩纹理的所有压缩块根据所述参考点的目标坐标和所述压缩块之间的相互位置关系移动到所述拼装纹理上进行拼装。优选地,所述压缩块移动模块具体用于,响应于所述移动指令,获取所述压缩纹理的参考点所在的压缩块,将该压缩块移动到所述拼装纹理上,使得所述参考点的坐标为所述目标坐标,并根据其他压缩块与该压缩块的相对位置关系,将其他压缩块移动到所述拼装纹理上。优选地,所述拼装单元还包括第一相接检测模块及第一压缩块处理模块,其中:所述第一相接检测模块,用于在所述压缩块移动模块将所述压缩纹理的所有压缩块根据所述参考点的目标坐标和所述压缩块之间的相互位置关系移动到所述拼装纹理上进行拼装后,检测处于所述压缩纹理边界的压缩块及所述拼装纹理上与处于边界的压缩块相接的压缩块,并将这些压缩块进行标记;所述第一压缩块处理模块,用于对标记的压缩块进行解压缩,重新计算解压得到的像素的颜色值后,对这些像素的颜色值进行更新,再对这些像素进行压缩得到相应的压缩块。通常的纹理压缩技术中,压缩纹理的每一个压缩块都是独立的,修改一个压缩块时,不会影响到其它压缩块所包含的像素的颜色。例如,S3TC,ETC格式的压缩纹理中的压缩块就是这种情况,但PVRTC格式的压缩纹理不是这样的,PVRTC格式的压缩纹理如果修改一个压缩块,那么,这个压缩块附近的8个压缩块的颜色都会受到影响。因而需要对这些压缩块进而额外的处理。本优选方案中,通过检测在压缩纹理拼装到拼装纹理上后,那些颜色会发生变化的压缩块,并对这些压缩块进行解压缩,重新计算像素颜色,在拼装后压缩,而对颜色不变化的压缩块直接进行移动,减小了压缩块的解压缩数量,提升了运行效率。优选地,所述第一相接检测模块具体用于,在所述压缩块移动模块将所述压缩纹理的所有压缩块根据所述参考点的目标坐标和所述压缩块之间的相互位置关系移动到所述拼装纹理上进行拼装后,检测处于所述压缩纹理边界的压缩块及所述拼装纹理上与处于边界的压缩块相接的压缩块,并对这些压缩块中,不是由填充的空白像素形成的压缩块进行标记。本优选方案中,仅对那些不是由填充的空白像素形成的压缩块进行标记,减小了需要解压缩的压缩块的数量,进一步提高了运行效率。优选地,所述拼装单元还包括第二相接检测模块及第二压缩块处理模块,其中:所述第二相接检测模块,用于在所述压缩块移动模块将所述压缩纹理的所有压缩块根据所述参考点的目标坐标和每个压缩块之间的相互位置关系移动到所述拼装纹理上进行拼装后,检测每个压缩纹理与其他压缩纹理发生接触的压缩块,并对这些压缩块进行标记;所述第二压缩块处理模块,用于对标记的压缩块进行解压缩,重新计算解压得到的像素的颜色值后,对这些像素的颜色值进行更新,再对这些像素进行压缩得到相应的压缩块。本优选方案中,在多个压缩纹理拼装到拼装纹理上后,再检测那些颜色会发生变化的压缩块,并对这些压缩块进行解压缩,重新计算像素颜色,在拼装后压缩,而对颜色不变化的压缩块直接进行移动,可以减小解压缩的压缩块的总数,进一步减小了压缩块的解压缩数量,提升了运行效率。优选地,所述第二相接检测模块具体用于,在所述压缩块移动模块将所述压缩纹理的所有压缩块根据所述参考点的目标坐标和每个压缩块之间的相互位置关系移动到所述拼装纹理上进行拼装后,检测每个压缩纹理与其他压缩纹理发生接触的压缩块,并对这些压缩块中,不是由填充的空白像素形成的压缩块进行标记。本发明提供了一种压缩纹理的拼装方法,包括如下步骤:坐标系构建单元基于至少两个待拼装的压缩纹理的尺寸,计算生成拼装纹理的尺寸,并以所述拼装纹理上的预定点为原点,构建坐标系;其中,所述压缩纹理包括至少一个压缩块;参数配置单元为同一压缩比例的压缩纹理配置一个参数,并在所述参数大于等于1时,生成发送至位置指定单元的第一指令;位置指定单元响应于所述第一指令,根据所述参数、所述压缩块的宽度和高度生成当前压缩比例的目标宽度和目标高度,并根据所述目标宽度和目标高度指定每个压缩纹理的参考点在所述坐标系上的目标坐标;拼装单元在确定所述压缩纹理的宽度为所述目标宽度的整数倍及所述压缩纹理的高度为所述目标高度的整数倍后,将所述压缩纹理的所有压缩块根据所述参考点的目标坐标和所述压缩块之间的相互位置关系移动到当前压缩比例的拼装纹理上进行拼装。优选地,所述目标宽度等于所述压缩块的宽度乘以所述参数,所述目标高度等于所述压缩块的高度乘以所述参数。优选地,所述目标坐标的横坐标为所述目标宽度的整数倍,所述目标坐标的纵坐标为所述目标高度的整数倍。优选地,所述压缩纹理包括M级mipmap层,其中,不同级的mipmap层对应不同的压缩比例,且第i层mipmap的宽度和高度分别为第i+1级mipmap层的宽度和高度的两倍,0≤i≤M-1;则所述参数配置单元为所述压缩纹理配置一个参数,并在所述参数大于等于1时,生成发送至位置指定单元的第一指令具体为:参数配置单元根据所述mipmap层的级数,为该mipmap层配置一个参数,并在所述参数大于等于1时,生成发送至位置指定单元的第一指令;其中,第0级mipmap层的参数配置为2j,第i级mipmap层的参数配置为2j-i,j为任意指定的非负整数。优选地,还包括:参数配置单元在为mipmap层配置的参数小于1时,生成发送至压缩块处理单元的第二指令;压缩块处理单元响应于所述第二指令,对所述mipmap层的每个压缩块进行解压缩后,得到由像素组成的非压缩纹理,并将所述非压缩纹理的像素移动到所述拼装纹理进行拼装,对拼装后的所述拼装纹理进行压缩,生成压缩后的拼装纹理。优选地,所述拼装单元在确定所述压缩纹理的宽度为所述目标宽度的整数倍及所述压缩纹理的高度为所述目标高度的整数倍后,将所述压缩纹理的所有压缩块根据所述参考点的目标坐标和所述压缩块之间的相互位置关系移动到所述拼装纹理上进行拼装,具体包括:拼装单元判断所述压缩纹理的宽度为目标宽度的整数倍及所述压缩纹理的高度为所述目标高度的整数倍是否成立;若否,则拼装单元对所述压缩纹理填充空白像素,以使所述压缩纹理的宽度为目标宽度的整数倍及所述压缩纹理的高度为所述目标高度的整数倍;若是,则拼装单元将所述压缩纹理的所有压缩块根据所述参考点的目标坐标和所述压缩块之间的相互位置关系移动到所述拼装纹理上进行拼装。优选地,所述拼装单元将所述压缩纹理的所有压缩块根据所述参考点的目标坐标和所述压缩块之间的相互位置关系移动到所述拼装纹理上进行拼装具体为:拼装单元获取所述压缩纹理的参考点所在的压缩块,将该压缩块移动到所述拼装纹理上,使得所述参考点的坐标为所述目标坐标,并根据其他压缩块与该压缩块的相对位置关系,将其他压缩块移动到所述拼装纹理上。优选地,在拼装单元将所述压缩纹理的所有压缩块根据所述参考点的目标坐标和所述压缩块之间的相互位置关系移动到所述拼装纹理上进行拼装之后,还包括:拼装单元检测处于所述压缩纹理边界的压缩块及所述拼装纹理上与处于边界的压缩块相接的压缩块,并对这些压缩块进行标记;拼装单元对标记的压缩块进行解压缩,重新计算解压得到的像素的颜色值后,对这些像素的颜色值进行更新,再对这些像素进行压缩得到相应的压缩块。优选地,所述拼装单元检测处于所述压缩纹理边界的压缩块及所述拼装纹理上与处于边界的压缩块相接的压缩块,并对这些压缩块进行标记,具体为:拼装单元检测处于所述压缩纹理边界的压缩块及所述拼装纹理上与处于边界的压缩块相接的压缩块,并对这些压缩块中,不是由填充的空白像素形成的压缩块进行标记。优选地,在拼装单元将所述压缩纹理的所有压缩块根据所述参考点的目标坐标和所述压缩块之间的相互位置关系移动到所述拼装纹理上进行拼装之后,还包括:拼装单元检测每个压缩纹理与其他压缩纹理发生接触的压缩块,并对这些压缩块进行标记;拼装单元对标记的压缩块进行解压缩,重新计算解压得到的像素的颜色值后,对这些像素的颜色值进行更新,再对这些像素进行压缩得到相应的压缩块。优选地,所述拼装单元检测每个压缩纹理与其他压缩纹理发生接触的压缩块,并对这些压缩块进行标记,具体为:拼装单元检测每个压缩纹理与其他压缩纹理发生接触的压缩块,并对这些压缩块中,不是由填充的空白像素形成的压缩块进行标记。本发明还提供一种终端,包括上述的压缩纹理的拼装系统。附图说明为了更清楚地说明本发明的技术方案,下面将对实施方式中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施方式,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。图1是本发明实施例提供的压缩纹理的拼装系统的结构示意图。图2是通过图1的坐标系构建单元构建的拼装纹理的示意图。图3是图1所示的拼装单元的结构示意图。图4是本发明实施例提供的压缩纹理的拼装系统的另一种结构示意图。图5是压缩纹理拼装到拼装纹理上的示意图。图6是图1所示的拼装单元的另一种结构示意图。图7是图1所示的拼装单元的另一种结构示意图。图8是本发明实施例提供的压缩纹理的拼装方法的流程示意图。具体实施方式下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。本发明实施例公开了一种压缩纹理的拼装系统、方法及终端,用于在程序运行过程中将压缩纹理拼装到拼装纹理上,以提高纹理拼装的效率和质量。以下分别进行详细说明。请参阅图1,图1是本发明实施例提供的压缩纹理的拼装系统的结构示意图。所述压缩纹理的拼装系统100包括坐标系构建单元10、参数配置单元20、位置指定单元30及拼装单元40,其中:所述坐标系构建单元10,用于基于至少两个待拼装的压缩纹理的尺寸,计算生成拼装纹理的尺寸,并以所述拼装纹理上的预定点为原点,构建坐标系;其中,所述压缩纹理包括至少一个压缩块。在本发明实施例中,所述压缩纹理中的像素是以压缩块的形式存在的,例如,所述压缩纹理的格式包括S3TC、PVRTC、ETC等等,其中,ETC格式的压缩纹理的每个压缩块的大小为4×4,而PVRTC格式的压缩纹理的每个压缩块的大小则是4×4或者8×4。在本发明实施例中,所述坐标系构建单元10首先获取至少两个待拼装的压缩纹理的尺寸,然后根据这些待拼装的压缩纹理的尺寸预先计算生成拼装后的拼装纹理的尺寸。例如,假设所述待拼装的压缩纹理的数量为4个,且每个压缩纹理的尺寸(或分辨率)均为512×512,那么,预先计算生成的所述拼装纹理的尺寸(或分辨率)可设置为1024×1024,此时这4个压缩纹理正好铺满整个拼装纹理。此外,如果所述压缩纹理不能正好铺满整个拼装纹理,可在未被压缩纹理铺到的部分填充空白像素,例如,所述待拼装的压缩纹理的数量为4个,且3个压缩纹理的尺寸(或分辨率)均为512×512,剩下的一个压缩纹理的尺寸(或分辨率)为256×256,那么,预先计算生成的所述拼装纹理的尺寸(或分辨率)可设置为1024×1024,这四个压缩纹理不能完成铺满所述1024×1024的拼装纹理,则可在未被所述压缩纹理铺到的部分填充空白像素。请一并参阅图2,在本发明实施例中,在计算生成拼装纹理的尺寸后,所述坐标系构建单元10以所述拼装纹理上的预定点为原点,构建坐标系。例如,所述坐标系构建单元10可以以所述拼装纹理的左下角的点为原点,并以经过所述原点的两条边界为x方向和y方向构建一个二维坐标系。当然,应当理解的是,所述坐标系构建单元10也可以以所述拼装纹理的左上角、右上角或右下角为原点构建坐标系,这些方案均在本发明的保护范围之内,在此不再赘述。所述参数配置单元20,用于为同一压缩比例的压缩纹理配置一个参数,并在所述参数大于等于1时,生成发送至所述位置指定单元30的第一指令。在本发明实施例中,较佳地,所述参数N为2的整数次幂。在本发明实施例中,为了适应不同尺寸的终端屏幕或者适应游戏视角远近的切换,可能需要准备不同压缩比例的压缩纹理,例如,对于同一件装备的压缩纹理,可能需要准备512*512尺寸的压缩纹理和256*256尺寸的压缩纹理,这两个压缩纹理的压缩比例不同,则在进行参数配置时,它们被配置的参数也不同。所述位置指定单元30,用于响应于所述第一指令,根据所述参数、所述压缩块的宽度和高度生成当前压缩比例的目标宽度和目标高度,并根据所述目标宽度和目标高度指定每个压缩纹理的参考点在所述坐标系上的目标坐标。具体地,在本发明实施例中,所述位置指定单元30在接收到所述参数配置单元20发送的第一指令后,根据所述参数N、所述压缩块的宽度和高度生成当前压缩比例的目标宽度和目标高度,其中,所述目标宽度等于所述压缩块的宽度乘以所述参数N,所述目标高度等于所述压缩块的高度乘以所述参数N。例如,假设所述压缩块的宽度为A,高度为B,则所述目标宽度=A×N,所述目标高度=B×N。在本发明实施例中,在生成所述目标宽度和目标高度后,所述位置指定单元30根据所述目标宽度和目标高度指定每个压缩纹理的参考点在所述坐标系上的目标坐标,其中,所述压缩纹理的参考点为与所述拼装纹理的预定点对应的点,例如,所述坐标系构建单元10在构建所述坐标系时,以所述拼装纹理的左下角的点为原点,则相应的,所述压缩纹理的参考点也为该压缩纹理自身的左下角的点。在确定了所述参考点后,所述位置指定单元30指定所述参考点在所述坐标系上的目标坐标,其中,所述目标坐标的横坐标为所述目标宽度的整数倍,所述目标坐标的纵坐标为所述目标高度的整数倍。需要说明的是,在本发明实施例中,所述位置指定单元30在指定每个压缩纹理的参考点在所述坐标系上的目标坐标时,应保证所述压缩纹理不会出现重叠的情况,此外,还应确保相邻每个压缩纹理的边界尽量重合,这些均可根据每个压缩纹理的大小来进行预定义,本发明在此不做赘述。所述拼装单元40,用于在确定所述压缩纹理的宽度为所述目标宽度的整数倍及所述压缩纹理的高度为所述目标高度的整数倍后,将所述压缩纹理的所有压缩块根据所述参考点的目标坐标和所述压缩块之间的相互位置关系移动到当前压缩比例的拼装纹理上进行拼装。请一并参阅图3,具体地,在本发明实施例中,所述拼装单元40包括尺寸判断模块41、像素填充模块42及压缩块移动模块43,其中:所述尺寸判断模块41,用于判断所述压缩纹理的宽度为目标宽度的整数倍及所述压缩纹理的高度为所述目标高度的整数倍是否成立,若否,则生成发送至所述像素填充模块42的填充指令;若是,则生成发送至所述压缩块移动模块43的移动指令。所述像素填充模块42,用于响应于所述填充指令,对所述压缩纹理填充空白像素,使得所述压缩纹理的宽度为目标宽度的整数倍及所述压缩纹理的高度为所述目标高度的整数倍。所述压缩块移动模块43,用于响应于所述移动指令,将所述压缩纹理的所有压缩块根据所述参考点的目标坐标和所述压缩块之间的相互位置关系移动到当前压缩比例的拼装纹理上进行拼装。例如,假设所述参数配置单元30为当前压缩比例的压缩纹理配置的参数N=64,所述压缩块的尺寸为4×4,则当前压缩比例的目标宽度和目标高度均为256,假设所述压缩纹理的个数为4个,其中,3个压缩纹理的尺寸为512×512,余下的一个压缩纹理的尺寸为128×128,则此时,3个尺寸为512×512的压缩纹理的宽度(512)和高度(512)均分别为目标宽度(256)和目标高度(256)的整数倍,而尺寸为128×128的压缩纹理的宽度和高度都不是目标宽度和目标高度的整数倍,因而所述像素填充模块42需要对尺寸为128×128的压缩纹理填充空白像素,使得该压缩纹理的宽度为目标宽度的整数倍及所述压缩纹理的高度为所述目标高度的整数倍。具体地,所述像素填充模块42保持参考点在所述压缩纹理的相对位置不变(如保持所述参考点始终位于该压缩纹理的左下角)对所述压缩纹理的边界填充空白像素,使得该压缩纹理在填充后的尺寸为256×256(也可填充为512×512)。应当理解的是,在本发明实施例中,填充的所述空白像素也可以是以压缩块的方式存在的。在本发明实施例中,当确定所有压缩纹理的宽度均为目标宽度的整数倍及所有压缩纹理的高度均为所述目标高度的整数倍后,所述压缩块移动模块43将所述压缩纹理的所有压缩块根据所述参考点的目标坐标和所述压缩块之间的相互位置关系移动到所述拼装纹理上进行拼装。具体地,所述压缩块移动模块43获取所述压缩纹理的参考点所在的压缩块,将该压缩块移动到所述拼装纹理上,使得所述参考点的坐标为所述目标坐标,并根据其他压缩块与该压缩块的相对位置关系,将其他压缩块移动到所述拼装纹理上。例如,在本发明实施例中,ETC格式的压缩纹理是以4×4的压缩块为单位。一张1024×1024大小的ETC纹理,就有256×256个块。ETC格式的压缩纹理的每个压缩块占据8字节,这256×256个8字节的块,连续不间断的存放在内存中。先是第一行存放256个压缩块,再是第二行存放256个压缩块,……,直到第256行存储256个压缩块。而PVRTC格式的压缩纹理是以4×4或者8×4的压缩块为单位,每个压缩块也是8字节。与ETC格式的压缩纹理不同的是,PVRTC格式的压缩纹理中的压缩块是Z字形回路存放的。虽然不同格式的压缩纹理中的压缩块的存放方式有时不同,但根据不同格式的压缩纹理中的压缩块的存放方式,就可以获得该压缩纹理中的每个压缩块与参考点所在的压缩块的相对位置关系,此后所述压缩块移动模块43只需依次移动每个压缩块就可以将所有的压缩纹理拼装到所述拼装纹理上了。当前,应当理解的是,上述压缩块的移动方式仅是本发明的一个优选实施方式,本领域技术人员公知的可以实现压缩块移动的其他方式也在本发明的保护范围之内,在此不做赘述。此外,需要说明的是,所述拼装单元40在拼装时,是将同一压缩比例的压缩纹理进行拼装到同一拼装纹理上,不同压缩比例的压缩纹理不能拼装到同一拼装纹理上。综上所述,本发明实施例提供的压缩纹理的拼装系统100,所述位置指定单元30根据所述参数配置单元20配置的当前压缩比例的参数N及所述压缩纹理的压缩块的宽度和高度指定每个压缩纹理在所述拼装纹理上的位置,所述拼装单元40在确定所述压缩纹理的宽度为所述目标宽度的整数倍及所述压缩纹理的高度为所述目标高度的整数倍后(如不是整数倍,则对该压缩纹理填充空白像素),将所述压缩纹理的压缩块移动到所述拼装纹理上进行拼装。即在拼装时,所述压缩纹理是以压缩块为基本单位进行移动的,而不需要经历对每个压缩纹理进行解压缩和对拼装后的拼装纹理再次压缩的过程,从而避免了对所述拼装纹理进行压缩所需的耗时及对所述拼装纹理进行反复压缩而导致的图片质量下降的问题,可以在不影响图片质量的前提下,实现了快速将压缩纹理拼装到拼装纹理上,提高了纹理拼装的效率和质量。为进一步对本发明的方案进行更详细的说明,下文对本发明的一些优选实施例进行具体描述或举例说明:一、针对所述参数配置单元20的优选实施例。对于游戏来说,由于视角的远近切换或不同终端的屏幕大小不一等原因,经常涉及游戏场景或游戏人物的放大和缩小,此时,相应的,游戏场景或游戏人物的纹理也需要同步进行放大和缩小。其中,把纹理放大较为容易,把纹理缩小则较难。例如,如果需要把纹理的宽、高放大10倍,则最终纹理的每个像素只需要由原始纹理的四个像素通过加权平均的方法计算得到。但是如果需要把纹理的宽、高缩小10倍,最终纹理的每个像素,都需要有原始纹理的10×10=100个像素平均得到,否则容易产生明显的失真。为了尽可能避免对纹理进行缩小操作,可以制作不同压缩比例的压缩纹理,例如,一个做法是对原始纹理进行细分,分别保存原始尺寸的样本、1/2大小的样本、1/4大小的样本、……、直到只有1个像素的样本,每一个样本称为一个mip层,有时也称为mipmap层,其中,原始尺寸的样本可记为第0级mipmap层,1/2大小的样本可记为第1级mipmap层,1/4大小的样本可记为第2级mipmap层,以此类推。为了保存这些mipmap层,需要多消耗大约30%的存储空间,但它可以带来性能和质量的提升。例如,当需要把一张1024×1024的纹理显示到屏幕上一个300×300的区域,那么可以对第2级mipmap层(尺寸为256×256)适当放大,也可以由第1级mipmap层(尺寸为512×512)适当缩小、第2级mipmap层适当放大,然后把两者综合起来得到一个大小为300×300的纹理。在本发明实施例中,在将压缩纹理拼装到拼装纹理上时,需同时拼装不同级的mipmap层,因此需要考虑不同级的mipmap层的压缩块的移动问题。请一并参阅图4,在本发明实施例中,为了解决上述问题,所述拼装系统100还包括压缩块处理单元50。此时,所述参数配置单元20具体用于,根据mipmap层的级数,为该mipmap层配置一个参数,并在所述参数大于等于1时,生成发送至所述位置指定单元的第一指令,在为该mipmap层配置的参数小于1时,生成发送至所述压缩块处理单元50的第二指令。所述压缩块处理单元50,用于响应于所述第二指令,对所述mipmap层的每个压缩块进行解压缩后,得到由像素组成的非压缩纹理,并将所述非压缩纹理的像素移动到所述拼装纹理进行拼装,对拼装后的所述拼装纹理进行压缩,生成压缩后的拼装纹理(以下将这个过程简称为解压缩->像素拼装->压缩)。具体地,所述参数配置单元20为第0级mipmap层的参数N配置为2j,则为第i级mipmap层的参数N配置为2j-i,j为任意指定的非负整数。例如,请参阅表1,假设j为5,第0级mipmap层对应的拼装纹理的尺寸为2048×2048。表1从表1可以看出,假设需要保存前8级mipmap层,虽然所述压缩块处理单元50仍需要对参数N小于1的mipmap层(第6级和第7级)进行解压缩->像素拼装->压缩,但是此时的mipmap层的分辨率已经很小了,因而相应的需要解压缩的压缩块数量也很少,大大减小了压缩运算量。如本发明实施例中的压缩运算量大概只有现有技术(即对所有mipmap层进行解压缩、拼装再压缩)的0.03%左右,显著减小了压缩所需的时间,而且不会影响大多数mipmap层的图片质量。在本发明实施例中,j是一个预先指定的非负整数,从表1可以看出,j的取值越大,则可以有更多的mipmap层不进行压缩块的解压缩,例如,对表1的情况,当j取7时,则所有的mipmap层都不需要进行解压缩。但是j也并非取越大越好,这是由于j越大,则相应的目标宽度和目标高度也越大,因此要求待拼装的压缩纹理的尺寸也越大。例如当j=7时,压缩块的大小为4×4,则目标宽度为512,目标高度也为512,则对第0级mipmap层,要求每个压缩纹理的宽度是512的整数倍,高度也是512的整数倍。如果压缩纹理本身的尺寸比较小,例如,压缩纹理本身的尺寸为128*128,需要通过所述像素填充模块42将其填充到512×512,严重浪费了计算机的内存。因此,j的取值可以根据压缩纹理本身的尺寸来选取,例如,对于每个压缩纹理本身尺寸比较大的情况,j可以取大一点,这样可以有更多的mipmap层不进行压缩块的解压缩而直接完成拼装,从而提高运行效率。而对于每个压缩纹理本身尺寸比较小的情况,j可以取小一点,这样虽然需要对较多的mipmap层进行解压缩,但是避免填充空白像素而引起的内存浪费。基于上述考虑,j=5,6,7是比较常用到的取值。二、针对拼装单元40的优选实施例。通常的纹理压缩技术中,压缩纹理的每一个压缩块都是独立的,修改一个压缩块时,不会影响到其它压缩块所包含的像素的颜色。例如,S3TC,ETC格式的压缩纹理中的压缩块就是这种情况,此时,利用上述实施例就可以完美解决其压缩块的移动拼装问题。但PVRTC格式的压缩纹理(或其他与PVRTC格式同一类型的压缩纹理)不是这样的,PVRTC格式的压缩纹理如果修改一个压缩块,那么,这个压缩块附近8个压缩块(即与这个压缩块发生接触的8个压缩块)的颜色都会受到影响。因而需要对这些压缩块进而额外的处理。在一个实施例中,如图5所示,假设拼装纹理200有64×64个压缩块,压缩纹理210有16×16个压缩块,当把所述压缩纹理210拼装到所述拼装纹理200之上,则所述压缩纹理210之中与所述拼装纹理200相接的压缩块211(共60块)及所述拼装纹理200与所述压缩纹理210相接的压缩块201(共68块)在拼装的前后,其相邻的压缩块的像素发生了改变,因此需要把这些压缩块进行解压缩处理。具体地,请一并参阅图6,所述拼装单元40还包括第一相接检测模块44及第一压缩块处理模块45,其中:所述第一相接检测模块44,用于在所述压缩块移动模块43将所述压缩纹理的所有压缩块根据所述参考点的目标坐标和所述压缩块之间的相互位置关系移动到所述拼装纹理上进行拼装后,检测处于所述压缩纹理边界的压缩块及所述拼装纹理上与处于边界的压缩块相接的压缩块,并将这些压缩块进行标记。所述第一压缩块处理模块45,用于对标记的压缩块进行解压缩,重新计算解压得到的像素的颜色值后,对这些像素的颜色值进行更新,再对这些像素进行压缩得到相应的压缩块。从计算量来看,按照现有技术,所述拼装纹理的64×64个压缩块都要由第一压缩块处理模块45按照解压缩、重新计算每个像素的颜色,在拼装后压缩的方式进行处理,而本发明实施例中,所述第一压缩块处理模块45则只需把其中的128个被标记的压缩块按照解压缩、重新计算每个像素的颜色,在拼装后压缩的方式进行处理,所需的运算量仅为现有技术的32分之一,大大减小了计算量。此外,还可以做进一步优化,由于所述压缩纹理的边缘的压缩块可能是由空白像素填充形成的,这些压缩块的颜色不会发生变化,此时,所述第一相接检测模块44可仅标记不是由填充的空白像素形成的压缩块,减小需要解压缩的压缩块的数量,提高运行效率。在另一个实施例中,如果多个压缩纹理在拼装纹理上是相邻,则一次性拼装多个压缩纹理,再进行解压缩会比较合算。因为这时候仅需计算相邻的压缩纹理出现接触的压缩块,而不必计算压缩纹理与拼装纹理接触的压缩块。具体地,请一并参阅图7,所述拼装单元40还包括第二相接检测模块46及第二压缩块处理模块47,其中:所述第二相接检测模块46,用于在所述压缩块移动模块43将所述压缩纹理的所有压缩块根据所述参考点的目标坐标和每个压缩块之间的相互位置关系移动到所述拼装纹理上进行拼装后,检测每个压缩纹理与其他压缩纹理发生接触的压缩块,并对这些压缩块进行标记。所述第二压缩块处理模块47,用于对标记的压缩块进行解压缩,重新计算解压得到的像素的颜色值后,对这些像素的颜色值进行更新,再对这些像素进行压缩得到相应的压缩块。典型情况,一张2048×2048的拼装纹理,由一张1024×1024、8张512×512、16张256×256的压缩纹理拼装而成(所有压缩纹理加起来正好铺满整个拼装纹理)。此时所述拼装纹理总共512×512=262144个压缩块,如果一次性拼接所有压缩纹理的话,由于正好铺满,边界重叠较多,所述第二压缩块处理模块47总共有大约3.48%的压缩块需要按照解压缩、重新计算像素颜色,在拼装后压缩进行处理。如表2所示,如果考虑不同级的mipmap层,第0层大约有3.48%的压缩块需要由所述第二压缩块处理模块47进行计算,第二级mipmap层大约有6.88%的压缩块需要由所述第二压缩块处理模块47计算,以后每增加一级,占比都大约加一倍。表2从表2可以看出,大约有5%的压缩块需要由第二压缩块处理模块47进行计算,虽然对运算量和运行效率的提升不如ETC和S3TC格式的压缩纹理那么大,但也可以提升效果也很明显。同样的,也可以做更进一步的优化,由于所述压缩纹理的边缘的压缩块可能是由空白像素填充形成的,这些压缩块的颜色不会发生变化,此时,所述第二相接检测模块46可仅标记不是由填充的空白像素形成的压缩块,减小需要解压缩的压缩块的数量,提高运行效率。请参阅图8,图8是本发明实施例提供的压缩纹理的拼装方法的流程示意图。所述拼装方法至少包括如下步骤:S101,坐标系构建单元基于至少两个待拼装的压缩纹理的尺寸,计算生成拼装纹理的尺寸,并以所述拼装纹理上的预定点为原点,构建坐标系;其中,所述压缩纹理包括至少一个压缩块。S102,参数配置单元为同一压缩比例的压缩纹理配置一个参数,并在所述参数大于等于1时,生成发送至位置指定单元的第一指令。在本发明实施例中,较佳地,所述参数N为2的整数次幂。S103,位置指定单元响应于所述第一指令,根据所述参数、所述压缩块的宽度和高度生成当前压缩比例的目标宽度和目标高度,并根据所述目标宽度和目标高度指定每个压缩纹理的参考点在所述坐标系上的目标坐标。在本发明实施例中,所述目标宽度等于所述压缩块的宽度乘以所述参数N,所述目标高度等于所述压缩块的高度乘以所述参数N,例如,假设所述压缩块的宽度为A,高度为B,则所述目标宽度=A×N,所述目标高度=B×N。在本发明实施例中,所述目标坐标的横坐标为所述目标宽度的整数倍,所述目标坐标的纵坐标为所述目标高度的整数倍。S104,拼装单元在确定所述压缩纹理的宽度为所述目标宽度的整数倍及所述压缩纹理的高度为所述目标高度的整数倍后,将所述压缩纹理的所有压缩块根据所述参考点的目标坐标和所述压缩块之间的相互位置关系移动到当前压缩比例的拼装纹理上进行拼装。具体地,包括:S1041,拼装单元判断所述压缩纹理的宽度为目标宽度的整数倍及所述压缩纹理的高度为所述目标高度的整数倍是否成立;若否,则执行步骤S1042,若是,则执行步骤S1043,S1042,拼装单元对所述压缩纹理填充空白像素,以使所述压缩纹理的宽度为目标宽度的整数倍及所述压缩纹理的高度为所述目标高度的整数倍;S1043,拼装单元将所述压缩纹理的所有压缩块根据所述参考点的目标坐标和所述压缩块之间的相互位置关系移动到所述拼装纹理上进行拼装。其中,在移动时,所述拼装单元获取所述压缩纹理的参考点所在的压缩块,将该压缩块移动到所述拼装纹理上,使得所述参考点的坐标为所述目标坐标,并根据其他压缩块与该压缩块的相对位置关系,将其他压缩块移动到所述拼装纹理上。本发明实施例提供的压缩纹理的拼装方法,所述位置指定单元根据所述参数配置单元配置的参数N及所述压缩纹理的压缩块的宽度和高度指定每个压缩纹理在所述拼装纹理上的位置,所述拼装单元在确定所述压缩纹理的宽度为所述目标宽度的整数倍及所述压缩纹理的高度为所述目标高度的整数倍后(如不是整数倍,则对该压缩纹理填充空白像素),将所述压缩纹理的压缩块移动到所述拼装纹理上进行拼装。即在拼装时,所述压缩纹理是以压缩块为基本单位进行移动的,而不需要经历对每个压缩纹理进行解压缩和对拼装后的拼装纹理再次压缩的过程,从而避免了对所述拼装纹理进行压缩所需的耗时及对所述拼装纹理进行反复压缩而导致的图片质量下降的问题,可以在不影响图片质量的前提下,实现了快速将压缩纹理拼装到拼装纹理上,提高了纹理拼装的效率和质量。优选地,所述压缩纹理包括M级mipmap层,其中,第i层mipmap的宽度和高度分别为第i+1级mipmap层的宽度和高度的两倍,0≤i≤M-1;则所述参数配置单元为所述压缩纹理配置一个参数,并在所述参数大于等于1时,生成发送至位置指定单元的第一指令具体为:参数配置单元根据所述mipmap层的级数,为该mipmap层配置一个参数,并在所述参数大于等于1时,生成发送至位置指定单元的第一指令;其中,第0级mipmap层的参数配置为2j,第i级mipmap层的参数配置为2j-i,j为任意指定的非负整数。优选地,所述拼装方法还包括:参数配置单元在为mipmap层配置的参数小于1时,生成发送至压缩块处理单元的第二指令。压缩块处理单元响应于所述第二指令,对所述mipmap层的每个压缩块进行解压缩后,得到由像素组成的非压缩纹理,并将所述非压缩纹理的像素移动到所述拼装纹理进行拼装,对拼装后的所述拼装纹理进行压缩,生成压缩后的拼装纹理。上述两个优选实施例,通过为不同级的mipmap层指定对于的参数N,并在N大于1时,直接对mipmap层进行压缩块移动来完成拼装,而对参数N小于1的mipmap层进行解压缩、在拼装后进行压缩的过程,虽然仍需要对参数N小于1的mipmap层进行解压缩,在拼装后压缩的过程,但是此时的mipmap层的分辨率已经很小了,因而相应的需要解压缩的压缩块数量也很少,大大减小了压缩运算量。优选地,在步骤S1043之后,还包括:S1044,拼装单元检测处于所述压缩纹理边界的压缩块及所述拼装纹理上与处于边界的压缩块相接的压缩块,并对这些压缩块进行标记。S1045,拼装单元对标记的压缩块进行解压缩,重新计算解压得到的像素的颜色值后,对这些像素的颜色值进行更新,再对这些像素进行压缩得到相应的压缩块。通常的纹理压缩技术中,压缩纹理的每一个压缩块都是独立的,修改一个压缩块时,不会影响到其它压缩块所包含的像素的颜色。例如,S3TC,ETC格式的压缩纹理中的压缩块就是这种情况,此时,利用上述实施例就可以完美解决其压缩块的移动拼装问题。但PVRTC格式的压缩纹理不是这样的,PVRTC格式的压缩纹理如果修改一个压缩块,那么,这个压缩块附近的8个压缩块的颜色都会受到影响。因而需要对这些压缩块进而额外的处理。在本优选实施例中,通过检测在压缩纹理拼装到拼装纹理上后,那些颜色会发生变化的压缩块,并对这些压缩块进行解压缩,重新计算像素颜色,在拼装后压缩,而对颜色不变化的压缩块直接进行移动,减小了压缩块的解压缩数量,提升了运行效率。进一步地,步骤S1044具体为:拼装单元检测处于所述压缩纹理边界的压缩块及所述拼装纹理上与处于边界的压缩块相接的压缩块,并对这些压缩块中,不是由填充的空白像素形成的压缩块进行标记。本优选方案中,仅对那些不是由填充的空白像素形成的压缩块进行标记,减小了需要解压缩的压缩块的数量,进一步提高了运行效率。优选地,在步骤S1043之后,还包括:S1046,拼装单元检测每个压缩纹理与其他压缩纹理发生接触的压缩块,并对这些压缩块进行标记;S1047,拼装单元对标记的压缩块进行解压缩,重新计算解压得到的像素的颜色值后,对这些像素的颜色值进行更新,再对这些像素进行压缩得到相应的压缩块。本优选实施例中,在多个压缩纹理拼装到拼装纹理上后,再检测那些颜色会发生变化的压缩块,并对这些压缩块进行解压缩,重新计算像素颜色,在拼装后压缩,而对颜色不变化的压缩块直接进行移动,可以减小解压缩的压缩块的总数,进一步减小了压缩块的解压缩数量,提升了运行效率。进一步地,S1046具体为:拼装单元检测每个压缩纹理与其他压缩纹理发生接触的压缩块,并对这些压缩块中,不是由填充的空白像素形成的压缩块进行标记。本优选方案中,仅对那些不是由填充的空白像素形成的压缩块进行标记,减小了需要解压缩的压缩块的数量,进一步提高了运行效率。本发明实施例还提供一种终端,所述终端包括上述任一实施例所述的压缩纹理的拼装系统100,在所述终端中,所述位置指定单元30根据所述参数配置单元20配置的参数N及所述压缩纹理的压缩块的宽度和高度指定每个压缩纹理在所述拼装纹理上的位置,所述拼装单元40在确定所述压缩纹理的宽度为所述目标宽度的整数倍及所述压缩纹理的高度为所述目标高度的整数倍后(如不是整数倍,则对该压缩纹理填充空白像素),将所述压缩纹理的压缩块移动到所述拼装纹理上进行拼装。即在拼装时,所述压缩纹理是以压缩块为基本单位进行移动的,而不需要经历对每个压缩纹理进行解压缩和对拼装后的拼装纹理再次压缩的过程,从而避免了对所述拼装纹理进行压缩所需的耗时及对所述拼装纹理进行反复压缩而导致的图片质量下降的问题,可以在不影响图片质量的前提下,实现了快速将压缩纹理拼装到拼装纹理上,提高了纹理拼装的效率和质量。以上所揭露的仅为本发明一种较佳实施例而已,当然不能以此来限定本发明之权利范围,本领域普通技术人员可以理解实现上述实施例的全部或部分流程,并依本发明权利要求所作的等同变化,仍属于发明所涵盖的范围。本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述的存储介质可为磁碟、光盘、只读存储记忆体(Read-OnlyMemory,ROM)或随机存储记忆体(RandomAccessMemory,RAM)等。当前第1页1 2 3 
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1