CN117218263A - 一种基于三维引擎的纹理轻量化优化方法及系统 - Google Patents
一种基于三维引擎的纹理轻量化优化方法及系统 Download PDFInfo
- Publication number
- CN117218263A CN117218263A CN202311166755.4A CN202311166755A CN117218263A CN 117218263 A CN117218263 A CN 117218263A CN 202311166755 A CN202311166755 A CN 202311166755A CN 117218263 A CN117218263 A CN 117218263A
- Authority
- CN
- China
- Prior art keywords
- texture
- resolution
- pixel data
- dimensional engine
- grid
- 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.)
- Granted
Links
- 238000000034 method Methods 0.000 title claims abstract description 58
- 238000005457 optimization Methods 0.000 title claims abstract description 42
- 239000000463 material Substances 0.000 claims abstract description 35
- 238000012545 processing Methods 0.000 claims abstract description 30
- 230000000007 visual effect Effects 0.000 claims description 6
- 238000009877 rendering Methods 0.000 claims description 3
- 238000012163 sequencing technique Methods 0.000 claims description 3
- 238000003672 processing method Methods 0.000 claims description 2
- 230000000694 effects Effects 0.000 abstract description 5
- 230000006835 compression Effects 0.000 description 8
- 238000007906 compression Methods 0.000 description 8
- 230000003139 buffering effect Effects 0.000 description 3
- 238000010586 diagram Methods 0.000 description 3
- 101100285899 Saccharomyces cerevisiae (strain ATCC 204508 / S288c) SSE2 gene Proteins 0.000 description 1
- 230000001133 acceleration Effects 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 230000015572 biosynthetic process Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 239000011521 glass Substances 0.000 description 1
- 238000012805 post-processing Methods 0.000 description 1
- 238000010561 standard procedure Methods 0.000 description 1
- 238000003786 synthesis reaction Methods 0.000 description 1
- XLYOFNOQVPJJNP-UHFFFAOYSA-N water Substances O XLYOFNOQVPJJNP-UHFFFAOYSA-N 0.000 description 1
Classifications
-
- Y—GENERAL 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
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Image Generation (AREA)
- Compression Of Band Width Or Redundancy In Fax (AREA)
- Compression Or Coding Systems Of Tv Signals (AREA)
Abstract
本发明涉及一种基于三维引擎的纹理轻量化优化方法及系统,属于计算机三维引擎的数据处理领域。方法包括:读取三维引擎中的纹理、纹理原分辨率及纹理绑定的材质和网格信息;如果所述纹理为JPEG或PNG编码,解码其中的像素数据,如果所述纹理为解码后的像素,读取其中的像素数据,得到纹理的像素数据;根据输入的参数、所述纹理的像素数据、所述纹理原分辨率、所述纹理绑定的材质和网格信息确定新的纹理分辨率及编码参数;如果所述新的纹理分辨率与所述纹理原分辨率不同,将所述纹理的像素数据缩放到所述新的纹理分辨率;使用所述编码参数对所述纹理的像素数据进行编码,得到编码后的纹理。本发明操作简化,优化效率高且效果好。
Description
技术领域
本发明涉及计算机三维引擎的数据处理领域,尤其涉及一种基于三维引擎的纹理轻量化优化方法及系统。
背景技术
三维引擎中包含大量数据,主要有几何数据和纹理数据等,其中纹理数据多以PNG或JPEG格式编码,由于加载的三维模型来源多变,很多纹理的分辨率、格式、大小等属性不够优化,占用大量的存储空间和GPU(图形处理器,Graphics Processing Unit)内存。对纹理进行优化常见的方式包括减少纹理的分辨率,使用JPEG或PNG方式进行有损压缩,但编码方式和分辨率不易确定,并且简单套用图像的压缩优化方式并不能考虑到纹理的特征及其在三维引擎中的使用方式,不能达到最大的优化效果。
JPEG或称JPG,是一种针对照片影像而广泛使用的有损压缩标准方法,由联合图像专家小组(英语:Joint Photographic Experts Group)开发。JPEG的压缩方式通常是有损压缩,即在压缩过程中图像的质量会遭受到可见的破坏,并且不支持Alpha通道的编码。mozjpeg是一个开放源代码的JPEG编解码器,可以将JPEG图像在相似的质量下编码为更小的大小,同时保持与JPEG标准的完全兼容性。一般的,对于大部分的纹理,JPEG能够在相似的质量下获得比PNG格式小很多的文件大小。
便携式网络图形(英语:Portable Network Graphics,PNG)是一种支持无损压缩的位图图形格式,支持索引、灰度、RGB三种颜色方案以及Alpha通道等特性。与JPEG相比,PNG可以保留Alpha通道,但大多数情况下对于相同的纹理可能需要更大的文件大小。pngquant 是一种开放源代码的 PNG 压缩工具,通过将图像转换为带有 alpha 通道的更高效的 8 位 PNG 格式以减小文件大小。oxipng是一种开放源代码的 PNG 优化工具,能够对编码后的PNG文件进行轻量化优化处理。
Alpha通道为图像的不透明度参数,其数值可以用百分比、整数或者像RGB参数那样用0到1的实数表示。例如,若一个像素的Alpha通道数值为0%,那它就是完全透明的,无法被看见;而数值为100%则意味着像素完全不透明,即传统的数码图像。在0%与100%之间的Alpha通道值使得像素可以透过背景,就像透过玻璃一般显示出来(半透明性),这种效果是简单的二元透明性(透明或不透明)做不到的,它使得数码合成变得容易。
RGBA8是一种颜色格式,其中R代表红色,G代表绿色,B代表蓝色,A代表Alpha通道,其中每个颜色通道都使用8位无符号整数(0到255的范围)来表示,而透明度通道也使用8位来表示。这种编码格式广泛应用于计算机图形学、图像处理和游戏开发等领域,提供了对图像颜色和透明度的精细控制。
随着信息流速的加快,数字经济体量也水涨船高,从PC互联网到移动互联网、智能物联网,再到元宇宙,庞大的互联网需求倒推数字经济的发展。随着移动设备在数字经济中的普及,轻量化优化变得尤为重要。移动设备的资源有限,对于应用程序和游戏来说,减少纹理的大小可以节省带宽和电池寿命,提高移动设备的性能和续航时间。优化后的纹理文件大小较小,需要更少的能源在网络传输和存储过程中进行传输和存储。这有助于减少数字经济对能源资源的消耗,对环境友好,符合可持续发展的目标。
发明内容
为解决上述问题,本发明提供一种基于三维引擎的纹理轻量化优化方法及系统,该方法及系统能够在三维引擎中简单高效的对纹理进行轻量化优化处理。
第一方面,本发明公开一种基于三维引擎的纹理轻量化优化方法,包括:
步骤1:读取三维引擎中的纹理、纹理原分辨率及所述纹理绑定的材质、网格等信息;
步骤2:解码所述纹理以获得所述纹理的像素数据,如果所述纹理为JPEG或PNG编码,解码其中的像素数据;如果所述纹理为解码后的像素,读取其中的像素数据,得到所述纹理的像素数据;
步骤3:根据输入的参数、所述纹理的像素数据、所述纹理原分辨率、所述纹理绑定的材质、网格等信息确定新的纹理分辨率及编码参数;
步骤4:对比所述新的纹理分辨率与所述纹理原分辨率,如果所述新的纹理分辨率与所述纹理原分辨率不同,将所述纹理的像素数据缩放到所述新的纹理分辨率;
步骤5:使用所述编码参数对所述纹理的像素数据进行编码,得到编码后的纹理。
具体的,所述步骤3中,所述输入的参数包括但不限于编码方式、编码质量、纹理分辨率;其中,所述编码方式的取值范围为自动、JPEG、PNG中的一项;所述编码质量的取值范围为0.0-1.0 ,其值为浮点数;所述纹理分辨率的取值范围为自动或2的正整数次方中的一项。
进一步的,所述步骤3中,如果所述输入的参数中的编码方式为自动,则根据所述纹理的像素数据和所述纹理绑定的材质确定所述编码方式,具体为:
S1、如果所述纹理绑定的材质均为不透明方式渲染,则确定所述编码方式为JPEG;
S2、 如果所述纹理绑定的材质存在一个以上不是不透明方式渲染,或无法确定所述纹理绑定的材质,则根据所述纹理的像素数据确定,方法一为:
S2.1、以4字节为单位读取所述纹理的像素数据;
S2.2、检查每4字节中最后一个字节是否为255;
S2.3、如果存在一组以上数据中所述最后一个字节不为255的,则确定所述编码方式为PNG,否则确定所述编码方式为JPEG;
在适用支持现代指令集的CPU上,采用方法二:
S2-1、以16字节为单位读取所述纹理的像素数据;
S2-2、将读取到的16字节像素数据重新排序,将其中的第4、8、12、16字节排序到第1、2、3、4字节,即为前4字节;
S2-3、 将所述前4字节提取为32位无符号整数;
S2-4、如果存在一组以上数据中所述32位无符号整数不等于0xFFFFFFFF,则确定所述编码方式为PNG,否则确定所述编码方式为JPEG;
需要说明的是,所述方法二中,如果所述像素数据的字节长度不能被16整除,则按所述方法二处理其中能被16整除的部分,剩余部分按所述方法一处理。
具体的,所述步骤3中,如果所述输入的参数中的纹理分辨率为自动,则根据所述纹理绑定的网格及所述纹理原分辨率确定所述纹理分辨率,具体过程如下:
a、分别计算所有所述纹理绑定的网格在世界坐标下的表面积;
b、计算所有所述纹理绑定的网格的表面积的最大值;
c、计算网格分辨率的参考值,具体公式为:
Rmesh= min(Rmax, sqrt(Amax* k);
其中,Rmesh为网格分辨率的参考值,min 代表计算最小值,Rmax为 最大分辨率,sqrt代表计算平方根,Amax为所述所有所述纹理绑定的网格的表面积的最大值,k 为网格分辨率系数;
d、计算所述纹理分辨率,具体公式为:
Rtexture= min(Roriginal, 2round(log2(Rmesh));
其中, Rtexture为所述纹理分辨率,min代表计算最小值,Roriginal为所述纹理原分辨率,round代表四舍五入取整,log2代表以2为底的对数,Rmesh为网格分辨率的参考值。
可选的,所述分别计算所有所述纹理绑定的网格在世界坐标下的表面积后,包含:将计算后得到的所述表面积进行缓存,缓存以所述网格为键,所述表面积为值;
可选的,所述分别计算所有所述纹理绑定的网格在世界坐标下的表面积前,包含:以所述网格为键,检查缓存中是否有能够匹配的值,如果有,则跳过计算,以所述网格为键,获取所述缓存中的值作为所述表面积。
可选的,所述步骤3中,如果所述纹理绑定的材质将所述纹理用于法线(normal)通道,并且所述编码参数中编码质量小于法线纹理编码质量阈值,则将用于对此纹理编码的所述编码质量增加0.1。
具体的,所述步骤3中,所述编码参数为所述输入的参数中除所述纹理分辨率之外的参数。其中,横向和纵向的分辨率均为所述纹理分辨率,优化后的纹理为正方形。
可选的,当所需处理的纹理数量是三维引擎中的全部或部分纹理时,采用以下的批量处理方法对三维引擎中全部或部分纹理进行轻量化优化:
创建一个线程池,线程池中线程的数量为当前设备可用CPU数量减去2得到的值与1的最大值;
创建一个执行队列,将三维引擎中全部或部分纹理加入此执行队列;
当线程池中线程空闲时,从所述执行队列中取出一个纹理,将取出的纹理作为所述步骤1中所述三维引擎中的纹理,读取此纹理及此纹理绑定的材质和网格信息,并在线程中执行所述步骤2-5;
重复上一步直到队列为空,即为处理完成。
可选的,所述步骤5后,对编码后的纹理进行缓存,缓存以所述编码参数和所述纹理的像素数据为键,所述编码后的纹理为值,在所述步骤5前进行检查,如果所述键能够匹配,则跳过编码,直接以缓存中获取的值作为编码后的纹理。
可选的,所述步骤5后,比较所述编码后的纹理与步骤1中所述三维引擎中的纹理的大小,如果所述编码后的纹理比步骤1中所述三维引擎中的纹理更小,则使用所述编码后的纹理替换步骤1中所述三维引擎中的纹理。
可选的,所述步骤5后,还包括,收集处理结果并展示,所收集的处理结果包含所述步骤1中所述纹理的大小、所述步骤2中所确定的新的纹理分辨率及编码参数,以及所述步骤5中编码后的文件的大小等数据。
第二方面,本发明公开一种基于三维引擎的纹理轻量化优化系统,其特征在于,包括:
数据读取模块,用于读取三维引擎中的纹理、纹理原分辨率及所述纹理绑定的材质、网格等信息;
纹理解析模块,用于解码所述纹理以获得所述纹理的像素数据,如果所述纹理为JPEG或PNG编码,解码其中的像素数据;如果所述纹理为解码后的像素,读取其中的像素数据;
参数优化模块,用于根据输入的参数、所述纹理的像素数据、所述纹理绑定的材质、网格等信息确定新的纹理分辨率及编码参数。
纹理缩放模块,用于对比所述新的纹理分辨率与所述纹理原分辨率,如果所述新的纹理分辨率与所述纹理原分辨率不同,将所述纹理的像素数据缩放到所述新的纹理分辨率。
纹理编码模块,用于使用所述编码参数对所述纹理的像素数据进行编码,得到编码后的纹理。
可选的,还包括:
输入模块,用于通过可视化操作界面,以实现参数的配置和输入;
展示模块,用于通过可视化操作界面展示处理完成后的处理结果。
与现有技术相比,本发明的有益效果在于:
1、 本发明能够基于三维引擎中纹理绑定的材质、网格等信息确定新的纹理分辨率及编码参数,可以简化操作,同时充分利用三维引擎的信息,达到更优化的效果。
2、本发明将优化后的纹理以JPEG或PNG格式保存,兼容性好,优化后的纹理适用于大多数的设备,不需要额外的解码库或后处理即可使用。
3、本发明支持利用线程池技术对多个纹理进行批量处理,可以充分利用现代多核心处理器的并行处理能力加快处理速度。
4、本发明支持对处理结果进行缓存,在多次使用相同的参数编码相同的纹理时,可以利用缓存大大加快处理速度。
5、本发明通过输入模块和展示模块提供便于操作的用户界面,降低了入门门槛,没有专业知识的操作者也可以通过简单的操作获得较好的优化效果。
附图说明
图1是实施例一的一种基于三维引擎的纹理轻量化优化方法流程图;
图2是实施例一的一种基于三维引擎的纹理轻量化优化系统示意图;
图3是实施例二的一种基于三维引擎的纹理轻量化优化系统示意图;
图4是图3中轻量化优化模块示意图;
图5是根据所述纹理的像素数据和所述纹理绑定的材质确定所述编码方式流程图;
图6是根据所述纹理绑定的网格及所述纹理原分辨率确定所述纹理分辨率流程图。
具体实施方式
下面结合附图和实施例,对本发明的具体实施方式作进一步详细描述。以下实施例用于说明本发明,但不能用来限制本发明的范围。
实施例一
本实施例涉及一种基于三维引擎的纹理轻量化优化方法及系统。
其中,所述纹理轻量化优化方法的流程如图1所示,包括以下步骤:
步骤1:读取三维引擎中的纹理及纹理原分辨率及此纹理绑定的材质、网格等信息。
步骤2:如果所述纹理为JPEG或PNG编码,解码其中的像素数据,如果所述纹理为解码后的像素,读取其中的像素数据,得到所述纹理的像素数据;
所述纹理的像素数据的数据格式为RGBA;本实施例所使用的三维引擎为基于浏览器的三维引擎,本实施例使用浏览器自带的数据解码能力解码所述纹理的像素数据。
步骤3:根据输入的参数、所述纹理的像素数据、所述纹理原分辨率、所述纹理绑定的材质、网格等信息确定新的纹理分辨率及编码参数。
所述输入的参数包括但不限于编码方式、编码质量和纹理分辨率。
本实施例中,所述输入的参数中的编码方式为自动,则根据所述纹理的像素数据和所述纹理绑定的材质确定,如图5所示,具体方式为:
S1、如果所述纹理绑定的材质均为不透明方式渲染,则确定所述编码方式为JPEG;
S2、 如果所述纹理绑定的材质存在一个以上不是不透明方式渲染,或无法确定所述纹理绑定的材质,则根据所述纹理的像素数据确定,方法为:
S2.1、以4字节为单位读取所述纹理的像素数据;
S2.2、检查每4字节中最后一个字节是否为255;
S2.3、如果存在一组以上数据中所述最后一个字节不为255的,则确定所述编码方式为PNG,否则确定所述编码方式为JPEG。
本实施例中,所述输入的参数中的纹理分辨率为自动,则根据所述纹理绑定的网格及所述纹理原分辨率确定所述纹理分辨率,如图6所示,具体过程如下:
a、分别计算所有所述纹理绑定的网格在世界坐标下的表面积,将计算后得到的所述表面积进行缓存,缓存以所述网格为键,所述表面积为值;
b、计算所有所述纹理绑定的网格的表面积的最大值;
c、计算网格分辨率的参考值,具体公式为:
Rmesh= min(Rmax, sqrt(Amax* k)
其中,Rmesh为网格分辨率的参考值,min 代表计算最小值,Rmax为 最大分辨率,sqrt代表计算平方根,Amax为所述所有所述纹理绑定的网格的表面积的最大值,k 为网格分辨率系数;
d、计算所述纹理分辨率,具体公式为:
Rtexture= min(Roriginal, 2round(log2(Rmesh))
其中,Rtexture为所述纹理分辨率,min代表计算最小值,Roriginal为所述纹理原分辨率,round代表四舍五入取整,log2为以2为底的对数,Rmesh为网格分辨率的参考值。
所述纹理分辨率应为正整数,且为2的正整数次方,所述纹理分辨率同时表示计算后纹理的宽和高。
本实施例中,所述最大分辨率为2048,所述网格分辨率系数为62.5。
步骤4:如果所述新的纹理分辨率与所述纹理原分辨率不同,将所述纹理的像素数据缩放到所述新的纹理分辨率。
步骤5:使用所述编码参数对所述纹理的像素数据进行编码,得到编码后的纹理。
所述步骤5后,对编码后的纹理进行缓存,缓存以所述编码参数和所述纹理的像素数据为键,所述编码后的纹理为值,在所述步骤5前进行检查,如果所述键能够匹配,则跳过编码,直接以缓存中获取的值作为编码后的纹理。
所述步骤5后,比较所述编码后的纹理与步骤1中所述三维引擎中的纹理的大小,如果所述编码后的纹理比步骤1中所述三维引擎中的纹理更小,则使用所述编码后的纹理替换步骤1中所述三维引擎中的纹理。
用以实现实施例一所述方法的纹理轻量化优化系统,结构如图2所示,包括:
数据读取模块,用于读取三维引擎中的纹理及纹理原分辨率及所述纹理绑定的材质、网格等信息;
纹理解析模块,用于解码所述纹理以获得所述纹理的像素数据,如果所述纹理为JPEG或PNG编码,解码其中的像素数据,如果所述纹理为解码后的像素,读取其中的像素数据;
参数优化模块,用于根据输入的参数、所述纹理的像素数据、所述纹理绑定的材质、网格等信息确定新的纹理分辨率及编码参数。
纹理缩放模块,用于对比所述新的纹理分辨率与所述纹理原分辨率,如果所述新的纹理分辨率与所述纹理原分辨率不同,将所述纹理的像素数据缩放到所述新的纹理分辨率。
纹理编码模块,用于使用所述编码参数对所述纹理的像素数据进行编码,得到编码后的纹理。
实施例二
基于实施例一的所述方法及系统,本实施例公开了一种对三维引擎中全部或部分纹理进行批量处理的方法及系统。
一种对三维引擎中全部或部分纹理进行批量处理的方法,具体步骤为:
创建一个线程池,线程池中线程的数量为当前设备可用CPU数量减去2得到的值与1的最大值;
线程池中线程可用于执行纹理轻量化优化方法;
创建一个执行队列,将三维引擎中全部或部分纹理加入此执行队列;
当线程池中线程空闲时,从所述执行队列中取出一个纹理,将取出的纹理作为实施例一所述步骤1中所述三维引擎中的纹理,读取此纹理及此纹理绑定的材质、网格等信息,并在线程中执行实施例一所述步骤2-5及其他可选步骤;
重复上一步直到队列为空,即为处理完成。
一种对三维引擎中全部或部分纹理进行批量处理的系统,如图3所示,包括:
输入模块,用于通过可视化操作界面,以实现参数的配置和输入;
轻量化优化模块,用于执行实施例一所述纹理轻量化优化方法,并在执行完成后收集处理结果;
展示模块,用于通过可视化操作界面展示处理完成后的处理结果。
本实施例的输入模块,进一步用于选择三维引擎中全部或部分纹理进行批量处理。
通过本实施例输入模块所输入的参数,包括编码方式、编码质量、纹理分辨率及需处理的纹理;所述编码方式的取值范围为自动、JPEG、PNG中的一项;所述编码质量的取值范围为0.0-1.0 ,其值为浮点数;所述纹理分辨率的取值范围为自动或2的正整数次方(如256、512、1024、2048……)中的一项。
本实施例的输入模块,进一步包括:
第一单选选择器,用于选择所述输入的参数中的编码方式;
滑动选择器,用于选择所述输入的参数中的编码质量,滑动幅度与所述编码质量之间线性对应;
第二单选选择器,用于选择所述输入的参数中的纹理分辨率;
开关选择器,用于选择是否批量处理三维引擎中所有纹理;
多项选择器,用于当所述开关选择器为否时选择所述需处理的纹理。
本实施例的轻量化优化模块,如图4所示,进一步包括:
数据读取子模块,用于读取三维引擎中的纹理及纹理原分辨率及所述纹理绑定的材质、网格等信息;
线程池子模块,用于创建一个线程池,在线程池中执行实施例一所述步骤2-5及其他可选步骤;
纹理解析子模块,用于在线程池的一个线程中解码所述纹理以获得所述纹理的像素数据,如果所述纹理为JPEG或PNG编码,解码其中的像素数据,如果所述纹理为解码后的像素,读取其中的像素数据;
参数优化子模块,用于在线程池的一个线程中根据输入的参数、所述纹理的像素数据、所述纹理绑定的材质、网格等信息确定新的纹理分辨率及编码参数。
纹理缩放子模块,用于在线程池的一个线程中如果所述新的纹理分辨率与所述纹理原分辨率不同,将所述纹理的像素数据缩放到所述新的纹理分辨率。
纹理编码子模块,用于在线程池的一个线程中使用所述编码参数对所述纹理的像素数据进行编码,得到编码后的纹理。
处理结果收集子模块,用于在纹理优化处理完成后,收集处理结果。
本实施例的展示模块,用于在处理完成后展示所收集的处理结果。
所收集的处理结果包括所述步骤1中所述纹理的大小、所述步骤2中所确定的新的纹理分辨率及编码参数,以及所述步骤5中编码后的文件的大小等数据。
当需处理的纹理大于一个时,所述展示模块还用于:
计算并展示全部需处理的纹理的所述步骤1中所述纹理的大小的总和,以及所述步骤5中编码后的文件的大小的总和,以及二者之间的差值。
本实施例的所述线程池子模块中,根据浏览器的特性,线程池中线程的数量为当前浏览器可用CPU数量减去2得到的值与1的最大值。
实施例三
本实施例公开一种基于三维引擎的纹理轻量化优化方法,与所述实施例一的不同之处在于:
在支持SSE2等现代指令集的CPU上,所述步骤3中,根据所述纹理的像素数据确定所述编码方式的方法为:
S2-1、以16字节为单位读取所述纹理的像素数据,得到读取到的16字节像素数据;
S2-2、将所述读取到的16字节像素数据重新排序,将其中的第4、8、12、16字节排序到第1、2、3、4字节,即为前4字节;
S2-3、 将所述前4字节提取为32位无符号整数;
S2-4、如果存在一组以上数据中所述32位无符号整数不等于0xFFFFFFFF,则确定所述编码方式为PNG,否则确定所述编码方式为JPEG。
上述方法中,如果所述像素数据的字节长度不能被16整除,则按上述S2-1至S2-4处理其中能被16整除的部分,剩余部分按实施例一步骤3中S2.1-S2.3所述方法处理。
实施例四
本实施例公开一种基于三维引擎的纹理轻量化优化方法,与所述实施例一的不同之处在于:
如图5所示,所述步骤3中,如果所述输入的参数中纹理分辨率为自动,则根据所述纹理绑定的网格及所述纹理原分辨率确定所述纹理分辨率,具体过程如下:
S11、分别计算所有所述纹理绑定的网格在世界坐标下的表面积;
S12、计算所有所述纹理绑定的网格的表面积的最大值;
S13、计算网格分辨率的参考值,具体公式为:
Rmesh= min(Rmax, sqrt(Amax* k)
其中,Rmesh为网格分辨率的参考值,min 代表计算最小值,Rmax为 最大分辨率,sqrt代表计算平方根,Amax为所述所有所述纹理绑定的网格的表面积的最大值,k 为网格分辨率系数;
S14、计算所述纹理分辨率,具体公式为:
Rtexture= min(Roriginal, 2round(log2(Rmesh))
其中,Rtexture为所述纹理分辨率,min代表计算最小值,Roriginal为所述纹理原分辨率,round代表四舍五入取整,log2为以2为底的对数,Rmesh为网格分辨率的参考值。
所述纹理分辨率应为正整数,且为2的正整数次方,所述纹理分辨率同时表示计算后纹理的宽和高。
本实施例中,上述步骤中的所述最大分辨率为4096,所述网格分辨率系数为102。
本实施例中,所述计算所有所述纹理绑定的网格在世界坐标下的表面积后,包含,将计算后得到的所述表面积进行缓存,缓存以所述网格为键,所述表面积为值;
本实施例中,所述计算所有所述纹理绑定的网格在世界坐标下的表面积前,包含,以所述网格为键,检查所述缓存中是否有能够匹配的值,如果有,则跳过计算,以所述网格为键,获取缓存中的值作为所述表面积。
实施例五
本实施例公开一种基于三维引擎的纹理轻量化优化方法,与所述实施例一的不同之处在于:
本实施例中,所述步骤5中,如果所述编码参数中的所述编码方式为JPEG,使用mozjpeg编码库进行编码,如果所述编码参数中的所述编码方式为PNG,使用pngquant工具进行压缩,压缩后的PNG纹理使用oxipng编码库进一步进行轻量化优化。
实施例六
本实施例公开一种基于三维引擎的纹理轻量化优化方法,与所述实施例一的不同之处在于:
本实施例中,所述纹理绑定的材质将所述纹理用于法线(normal)通道,并且所述编码参数中编码质量小于法线纹理编码质量阈值(法线纹理编码质量阈值为0.75),将用于对此纹理编码的所述编码质量增加0.1。
实施例七
本实施例公开一种基于三维引擎的纹理轻量化优化方法,与所述实施例一的不同之处在于:
所述步骤5后,还包括,收集处理结果并展示,所收集的处理结果包含所述步骤1中所述纹理的大小、所述步骤2中所确定的新的纹理分辨率及编码参数、所述步骤5中编码后的文件的大小等数据。
Claims (10)
1.一种基于三维引擎的纹理轻量化优化方法,其特征在于,包括:
步骤1:读取三维引擎中的纹理、纹理原分辨率及纹理绑定的材质和网格信息;
步骤2:解码所述纹理以获得所述纹理的像素数据,如果所述纹理为JPEG或PNG编码,解码其中的像素数据;如果所述纹理为解码后的像素,读取其中的像素数据,得到所述纹理的像素数据;
步骤3:根据输入的参数、所述纹理的像素数据、所述纹理原分辨率、所述纹理绑定的材质和网格信息确定新的纹理分辨率及编码参数;
步骤4:对比所述新的纹理分辨率与所述纹理原分辨率,如果所述新的纹理分辨率与所述纹理原分辨率不同,将所述纹理的像素数据缩放到所述新的纹理分辨率;
步骤5:使用所述编码参数对所述纹理的像素数据进行编码,得到编码后的纹理。
2.如权利要求1所述的一种基于三维引擎的纹理轻量化优化方法,其特征在于,所述步骤3中,
所述输入的参数包括编码方式、编码质量、纹理分辨率;所述编码方式的取值范围为自动、JPEG、PNG中的一项;所述编码质量的取值范围为0.0-1.0 ,其值为浮点数;所述纹理分辨率的取值范围为自动或2的正整数次方中的一项。
3.如权利要求2所述的一种基于三维引擎的纹理轻量化优化方法,其特征在于,所述步骤3中,
如果所述输入的参数中的编码方式为自动,则根据所述纹理的像素数据和所述纹理绑定的材质确定所述编码方式,具体为:
S1、如果所述纹理绑定的材质均为不透明方式渲染,则确定所述编码方式为JPEG;
S2、 如果所述纹理绑定的材质存在一个以上不是不透明方式渲染,或无法确定所述纹理绑定的材质,则根据所述纹理的像素数据确定,方法一为:
S2.1、以4字节为单位读取所述纹理的像素数据;
S2.2、检查每4字节中最后一个字节是否为255;
S2.3、如果存在一组以上数据中所述最后一个字节不为255的,则确定所述编码方式为PNG,否则确定所述编码方式为JPEG;
在适用支持现代指令集的CPU上,采用方法二:
S2-1、以16字节为单位读取所述纹理的像素数据;
S2-2、将读取到的16字节像素数据重新排序,将其中的第4、8、12、16字节排序到第1、2、3、4字节,即为前4字节;
S2-3、 将所述前4字节提取为32位无符号整数;
S2-4、如果存在一组以上数据中所述32位无符号整数不等于0xFFFFFFFF,则确定所述编码方式为PNG,否则确定所述编码方式为JPEG;
所述方法二中,如果所述像素数据的字节长度不能被16整除,则按方法二处理其中能被16整除的部分,剩余部分按所述方法一处理。
4.如权利要求2所述的一种基于三维引擎的纹理轻量化优化方法,其特征在于,所述步骤3中,
如果所述输入的参数中的纹理分辨率为自动,则根据所述纹理绑定的网格及所述纹理原分辨率确定所述纹理分辨率,具体过程如下:
a、分别计算所有所述纹理绑定的网格在世界坐标下的表面积;
b、计算所有所述纹理绑定的网格的表面积的最大值;
c、计算网格分辨率的参考值,具体公式为:
Rmesh = min(Rmax, sqrt(Amax * k);
其中,Rmesh 为网格分辨率的参考值,min 代表计算最小值,Rmax为 最大分辨率,sqrt代表计算平方根,Amax为所述所有所述纹理绑定的网格的表面积的最大值,k 为网格分辨率系数;
d、计算所述纹理分辨率,具体公式为:
Rtexture = min(Roriginal, 2round(log2(Rmesh));
其中,Rtexture 为所述纹理分辨率,min代表计算最小值,Roriginal为所述纹理原分辨率,round代表四舍五入取整,log2为以2为底的对数,Rmesh为网格分辨率的参考值。
5.如权利要求4所述的一种基于三维引擎的纹理轻量化优化方法,其特征在于,
所述分别计算所有所述纹理绑定的网格在世界坐标下的表面积后,包含:将计算后得到的所述表面积进行缓存,缓存以所述网格为键,所述表面积为值;
所述分别计算所有所述纹理绑定的网格在世界坐标下的表面积前,包含:以所述网格为键,检查缓存中是否有能够匹配的值,如果有,则跳过计算,以所述网格为键,获取所述缓存中的值作为所述表面积。
6.如权利要求1所述的一种基于三维引擎的纹理轻量化优化方法,其特征在于,所述步骤3中,
如果所述纹理绑定的材质将所述纹理用于法线通道,并且所述编码参数中编码质量小于法线纹理编码质量阈值,则将用于对此纹理编码的所述编码质量增加0.1;
所述编码参数为所述输入的参数中除所述纹理分辨率之外的参数。
7.如权利要求1所述的一种基于三维引擎的纹理轻量化优化方法,其特征在于,是一种对三维引擎中全部或部分纹理进行轻量化优化的批量处理方法:
创建一个线程池,线程池中线程的数量为当前设备可用CPU数量减去2得到的值与1的最大值;
创建一个执行队列,将三维引擎中全部或部分纹理加入此执行队列;
当线程池中线程空闲时,从所述执行队列中取出一个纹理,将取出的纹理作为所述步骤1中所述三维引擎中的纹理,读取此纹理及此纹理绑定的材质和网格信息,并在线程中执行所述步骤2至所述步骤5的步骤;
重复上一步直到队列为空,即为处理完成。
8.如权利要求1所述的一种基于三维引擎的纹理轻量化优化方法,其特征在于,所述步骤5后,还包括,
对编码后的纹理进行缓存,缓存以所述编码参数和所述纹理的像素数据为键,所述编码后的纹理为值,在所述步骤5前进行检查,如果所述键能够匹配,则跳过编码,直接以缓存中获取的值作为编码后的纹理;
比较所述编码后的纹理与步骤1中所述三维引擎中的纹理的大小,如果所述编码后的纹理比步骤1中所述三维引擎中的纹理更小,则使用所述编码后的纹理替换步骤1中所述三维引擎中的纹理;
收集处理结果并展示,所收集的处理结果包含所述步骤1中所述纹理的大小、所述步骤2中所确定的新的纹理分辨率及编码参数、所述步骤5中编码后的文件的大小。
9.一种基于三维引擎的纹理轻量化优化系统,其特征在于,包括:
数据读取模块,用于读取三维引擎中的纹理、纹理原分辨率,以及纹理绑定的材质和网格信息;
纹理解析模块,用于解码所述纹理以获得所述纹理的像素数据,如果所述纹理为JPEG或PNG编码,解码其中的像素数据,如果所述纹理为解码后的像素,读取其中的像素数据;
参数优化模块,用于根据输入的参数、所述纹理的像素数据、所述纹理绑定的材质和网格信息确定新的纹理分辨率及编码参数;
纹理缩放模块,用于对比所述新的纹理分辨率与所述纹理原分辨率,如果所述新的纹理分辨率与所述纹理原分辨率不同,将所述纹理的像素数据缩放到所述新的纹理分辨率;
纹理编码模块,用于使用所述编码参数对所述纹理的像素数据进行编码,得到编码后的纹理。
10.如权利要求9所述的一种基于三维引擎的纹理轻量化优化系统,其特征在于,还包括:
输入模块,用于通过可视化操作界面,以实现参数的配置和输入;
展示模块,用于通过可视化操作界面展示处理完成后的处理结果。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311166755.4A CN117218263B (zh) | 2023-09-12 | 2023-09-12 | 一种基于三维引擎的纹理轻量化优化方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311166755.4A CN117218263B (zh) | 2023-09-12 | 2023-09-12 | 一种基于三维引擎的纹理轻量化优化方法及系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN117218263A true CN117218263A (zh) | 2023-12-12 |
CN117218263B CN117218263B (zh) | 2024-03-19 |
Family
ID=89036454
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202311166755.4A Active CN117218263B (zh) | 2023-09-12 | 2023-09-12 | 一种基于三维引擎的纹理轻量化优化方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN117218263B (zh) |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104519353A (zh) * | 2013-09-29 | 2015-04-15 | 联想(北京)有限公司 | 图像处理方法和电子设备 |
CN105141970A (zh) * | 2015-07-03 | 2015-12-09 | 哈尔滨工业大学深圳研究生院 | 一种基于三维模型几何信息的纹理图像压缩方法 |
CN111402380A (zh) * | 2020-03-12 | 2020-07-10 | 杭州趣维科技有限公司 | 一种gpu压缩纹理处理方法 |
CN112929705A (zh) * | 2021-02-02 | 2021-06-08 | 腾讯科技(深圳)有限公司 | 纹理压缩和解压方法、装置、计算机设备和存储介质 |
CN115239591A (zh) * | 2022-07-28 | 2022-10-25 | 腾讯科技(深圳)有限公司 | 图像处理方法、装置、电子设备、存储介质及程序产品 |
CN115546279A (zh) * | 2022-10-18 | 2022-12-30 | 广州大学 | 基于分组混合的两阶段实时双目深度估计方法及装置 |
-
2023
- 2023-09-12 CN CN202311166755.4A patent/CN117218263B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104519353A (zh) * | 2013-09-29 | 2015-04-15 | 联想(北京)有限公司 | 图像处理方法和电子设备 |
CN105141970A (zh) * | 2015-07-03 | 2015-12-09 | 哈尔滨工业大学深圳研究生院 | 一种基于三维模型几何信息的纹理图像压缩方法 |
CN111402380A (zh) * | 2020-03-12 | 2020-07-10 | 杭州趣维科技有限公司 | 一种gpu压缩纹理处理方法 |
CN112929705A (zh) * | 2021-02-02 | 2021-06-08 | 腾讯科技(深圳)有限公司 | 纹理压缩和解压方法、装置、计算机设备和存储介质 |
CN115239591A (zh) * | 2022-07-28 | 2022-10-25 | 腾讯科技(深圳)有限公司 | 图像处理方法、装置、电子设备、存储介质及程序产品 |
CN115546279A (zh) * | 2022-10-18 | 2022-12-30 | 广州大学 | 基于分组混合的两阶段实时双目深度估计方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN117218263B (zh) | 2024-03-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US7787691B2 (en) | High quality image processing | |
US20180144725A1 (en) | Adaptive lossy framebuffer compression with controllable error rate | |
CN101242531B (zh) | 为小尺寸或全尺寸播放提供独立编码链的视频编码系统 | |
CA2572967C (en) | Multi-mode image processing | |
US8824790B2 (en) | Prediction-based image processing | |
US8396309B2 (en) | Index-based pixel block processing | |
CN109842803A (zh) | 一种图像压缩的方法及装置 | |
CN102244784B (zh) | 含透明信息图片压缩和显示的方法 | |
JP2007020208A (ja) | ブロック単位での画像データの圧縮及び圧縮解除 | |
CN105933708B (zh) | 一种数据压缩和解压缩的方法和装置 | |
CN104952087A (zh) | Mipmap压缩 | |
CN103167289B (zh) | 图像的编码、解码方法及编码、解码装置 | |
CN111402380A (zh) | 一种gpu压缩纹理处理方法 | |
US20210272327A1 (en) | Decoding data arrays | |
CN101415117A (zh) | 基于gpgpu的高真实感图像的传输方法 | |
CN118250470A (zh) | 一种基于npu神经网络的yuv转rgb的图像渲染方法 | |
CN117218263B (zh) | 一种基于三维引擎的纹理轻量化优化方法及系统 | |
CN101626504A (zh) | 一种高速jpeg解码的方法 | |
CN113902097A (zh) | 针对稀疏化cnn神经网络模型的游程编码加速器及方法 | |
CN117560511A (zh) | 基于图分割技术电力巡检的间隔棒图像压缩方法及系统 | |
JP7490029B2 (ja) | 動画レンダリング方法、装置、電子機器及び記憶媒体 | |
CN108668170B (zh) | 图像信息处理方法及装置、存储介质 | |
CN111815502B (zh) | 基于WebP压缩算法的多图处理的FPGA加速方法 | |
EP3886055A1 (en) | Image coding system and method | |
CN113850882A (zh) | 图片处理方法及装置、存储介质、电子设备 |
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 |