CN109448094B - 一种纹理图集调度方法 - Google Patents
一种纹理图集调度方法 Download PDFInfo
- Publication number
- CN109448094B CN109448094B CN201811105549.1A CN201811105549A CN109448094B CN 109448094 B CN109448094 B CN 109448094B CN 201811105549 A CN201811105549 A CN 201811105549A CN 109448094 B CN109448094 B CN 109448094B
- Authority
- CN
- China
- Prior art keywords
- texture
- information
- mipmap
- scheduling
- physical
- 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
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T15/00—3D [Three Dimensional] image rendering
- G06T15/04—Texture mapping
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T15/00—3D [Three Dimensional] image rendering
- G06T15/005—General purpose rendering architectures
Abstract
一种纹理图集调度方法,包括以下步骤,确定用于纹理流式调度的基本信息,以及数据结构;创建实际的物理纹理,保存加载到内存中的纹理;创建间接索引缓冲区,保存Mipmap在物理纹理上的位置信息;根据纹理的细节层级信息,进行纹理的流入和流出,并依据矩形纹理打包算法,在物理纹理上寻找当前流入的纹理的位置信息;对纹理进行渲染,并且重新定位UV坐标,进行采样计算。本发明的纹理图集调度方法,基于矩形纹理打包算法,通过进行贴图的合并,有效减少DrawCall的数量,使得渲染效率得以提升;通过对纹理的调度,能够减少内存的使用量,渐进式的加载必须的纹理资源,减少内存压力;能够有效减少渲染过程中图形处理单元的压力。
Description
技术领域
本发明涉及三维虚拟世界游戏技术领域,特别是涉及一种三维虚拟世界游戏中纹理图集调度方法。
背景技术
目前,主流游戏一般都需要庞大、精致的游戏世界。对于构建庞大、精致的游戏世界,需要提供非常丰富的游戏资源,这些资源包括贴图,动画模型以及音效等等。对游戏画面品质需求的不断提升导致了游戏资源的持续增长,对我们的应用来说,资源都是要加载到内存中才能够使用,而对于内存目前还是一种比较稀缺的资源,我们不能无限制的把资源都加载到内存中。特别对于游戏行业,贴图量往往在资源中占有很大的比重,如果能够减少贴图在内存中的占用量,将会大大减轻内存的负担。贴图的流式加载提供了一个非常好的解决方案,当前要使用的纹理流式加载到内存中,对于不再使用的纹理就可以从内存中流出,保证了内存中都是所需的纹理资源。另一方面,我们知道,对于应用程序的渲染,DrawCall的数量会大大影响游戏的性能,如何能够尽可能减少DrawCall的数量,也是一个很大的技术挑战。
在应用程序中,减少DrawCall数量的一个基本方法就是减少材质的数量,对于不同的贴图,如果这些贴图都是独立的,就很难做到减少材质的目的,一种常用的做法是合并贴图,但这种做法将直接导致很难进行纹理的流式加载,在DrawCall数量和内存占用量上很难找到兼顾两者的方法,因此亟需出现一种纹理图集调度方法,能够有效的解决这些问题。
发明内容
为了解决现有技术存在的不足,本发明的目的在于提供一种纹理图集调度方法,提升渲染效率、减少内存的使用量,以及减轻CPU的压力。
为实现上述目的,本发明提供的纹理图集调度方法,包括以下步骤,
确定用于纹理流式调度的基本信息,以及数据结构;
创建实际的物理纹理,保存加载到内存中的纹理;
创建间接索引缓冲区,保存Mipmap在物理纹理上的位置信息;
根据纹理的细节层级信息,进行纹理的流入和流出,并依据矩形纹理打包算法,在物理纹理上寻找当前流入的纹理的位置信息;
对纹理进行渲染,并且重新定位UV坐标,进行采样计算。
进一步地,所述确定用于纹理流式调度的基本信息,以及数据结构的步骤,进一步包括,
确定贴图纹理Mipmap的等级数量;
定义保留的细节层级的级数和对应的Mipmap;
确定需要进行流式调度的细节层级的Mipmap。
进一步地,所述创建实际的物理纹理,用于保存加载到内存中的纹理的步骤,进一步包括,
创建实际的物理纹理,将保留的Mipmap加载到创建的实际物理贴图上;
使用矩形纹理打包算法,寻找Mipmap存放的位置;
记录Mipmap在实际的物理纹理中的偏移信息。
进一步地,所述创建间接索引缓冲区,保存Mipmap在物理纹理上的位置信息的步骤,进一步包括,
创建间接索引缓冲区,并存放纹理信息;
在纹理信息中存放所有插槽信息;
在插槽信息中存放细节层级在物理纹理上的坐标偏移信息以及对应的Mipmap等级。
进一步地,所述根据纹理的细节层级信息,进行纹理的流入和流出,并依据矩形纹理打包算法,并在物理纹理上寻找当前流入的纹理的位置的步骤,进一步包括,
根据当前所需的纹理信息,对纹理进行调度,依据矩形纹理打包算法,对需要流入的Mipmap在实际的物理纹理上找到适合的位置,并把纹理位置信息保存在间接索引缓冲区中。
进一步地,进一步包括,
更新纹理的低等级的插槽信息,使得低等级的Mipmap在没有加载的情况下可以索引到当前的Mipmap;当使用矩形纹理打包算法在实际的物理纹理上分配不出空间的时候,进行Mipmap的流出,修改间接索引缓冲区;当前流出Mipmap对应的插槽信息上填充上一个等级插槽信息;
进一步地,进一步包括,
修改低等级的Mipmap对应的插槽信息,确保所有的插槽上能够索引到实际物理上的纹理。
更进一步地,所述对纹理进行渲染,并且重新定位UV坐标,进行采样计算的步骤,进一步包括,
根据当前的纹理在屏幕上投影的面积大小,计算出当前所需的Mipmap等级;
通过当前的Mipmap等级,在间接索引缓冲区中找到对应的实际物理纹理偏移信息;
通过当前MipLevel对应的插槽中记录的纹理偏移信息,计算出当前的顶点在实际的物理纹理上的UV坐标,在物理纹理上进行采样。
为实现上述目的,本发明还提供一种计算机可读存储介质,其上存储有计算机指令,所述计算机指令运行时执行如上文所述的纹理图集调度方法的步骤。
为实现上述目的,本发明还提供一种游戏终端设备,包括存储器和处理器,所述存储器上储存有在所述处理器上运行的计算机指令,所述处理器运行所述计算机指令时执行如上文所述的纹理图集调度方法的步骤。
本发明的纹理图集调度方法,基于矩形纹理打包算法,通过进行贴图的合并,有效减少DrawCall的数量,使得渲染效率得以提升。通过对纹理的调度,能够减少内存的使用量,渐进式的加载必须的纹理资源,减少内存压力。通过间接索引缓冲区上记录Mipmap的索引信息,并且每个等级的细节层次都对应一个插槽的做法,能够有效减少渲染过程中指令的分支,减少渲染过程中图形处理单元(GPU)的压力。通过记录在实际物理纹理(PhysicalTexture)上的偏移,能够迅速重新计算出新的UV坐标,进行像素颜色的采样。
本发明的其它特征和优点将在随后的说明书中阐述,并且,部分地从说明书中变得显而易见,或者通过实施本发明而了解。
附图说明
附图用来提供对本发明的进一步理解,并且构成说明书的一部分,并与本发明的实施例一起,用于解释本发明,并不构成对本发明的限制。在附图中:
图1为根据本发明的纹理图集调度方法流程图;
图2为根据本发明的纹理、间接索引缓冲区以及无力纹理上的对应关系示意图;
图3为根据本发明的重新计算顶点上的UV坐标示意图。
具体实施方式
以下结合附图对本发明的优选实施例进行说明,应当理解,此处所描述的优选实施例仅用于说明和解释本发明,并不用于限定本发明。图1为根据本发明的纹理图集调度方法流程图,下面将参考图1,对本发明的纹理图集调度方法进行详细描述。
首先,在步骤101,定义用于纹理流式调度的基本信息以及必要的数据结构。 在该实例中,共有1000张贴图,贴图的分辨率为128x128。也就是该纹理总共有八个等级的Mipmap,分辨率分别为 128x128, 128x128, …, 2x2, 1x1。对于这些不同Mipmap,保留的LOD为5级,即LOD3(16x16),…,LOD7(1x1),这些等级的Mipmap是要常驻内存的,由于这些等级的Mipmap分辨率比较小,占用内存也较小,所以没有必要进行流入和流出。对于低等级LOD的三个Mipmap,需要进行流式调度。需要流式调度的三个等级分别是LOD0(128x128),LOD1(64x64),LOD2(32x32)。
在步骤102,创建一张实际的物理纹理,用来保存加载到内存中的纹理。我们称这个实际的物理贴图为物理纹理(PhysicalTexture)。在该实例中,要创建一张分辨率大小为2048x2048的贴图,首先需要将保留的Mipmap加载到创建的实际物理纹理上,通过使用矩形纹理打包算法,找到一个最合适的位置去存放这些Mipmap,并且需要把加载的贴图的Mipmap在物理纹理中的偏移记录下来,在接下来的步骤中将会使用到这些偏移信息。
在步骤103,创建间接索引缓冲器,用于保存各等级的Mipmap在物理纹理上的位置信息等。间接索引缓冲器中存放着纹理信息(TextureInfo),纹理信息的个数和总的贴图个数是相等的,每一个纹理信息对应着一张贴图。纹理信息中存放着每个Mipmap的信息,每张贴图有八个等级的Mipmap,所以每个纹理信息中有8个Mipmap信息,我们称每个Mipmap信息为一个插槽(Slot)信息,这样每个纹理信息中共有8个插槽,如图2所示。每个插槽上有三个元素,分别存放着在物理纹理上的坐标偏移以及对应的Mip等级。图2为根据本发明的纹理、间接索引缓冲器以及物理纹理上的对应关系示意图,如图2所示,在该实例中,由于总共是有1000张贴图,每张贴图是有8个等级的Mipmap,总共有1000(张贴图)x8(每张贴图有8个Mipmap)个插槽,计算所得的大小作为间接索引缓冲器的大小。在步骤102中产生的纹理信息都要对应填充到该间接索引缓冲器上。在步骤102中,加载到内存中的都是保留的Mip等级,对于低等级的三个插槽上,我们并没有对应的Mipmap信息,由于这三个等级的Mipmap是要进行流式加载的,当前并没有加载到内存中,对于这种情况,我们需要在低等级的MipLevel的对应的插槽上填充上LOD3的信息,即Slot5上的信息。也就是说,在需要采样的时候,有可能需要采样的插槽上并不是真正需求的细节层级(LOD)的Mipmap信息,但是和当前期望的细节层级(LOD)最为匹配的Mipmap信息。通过使用该方法,我们能够保证在渲染的时候尽可能的采样到我们期望的像素颜色,而又不会对渲染产生中断。
在步骤104,根据当前所需的纹理的细节层级信息,进行纹理的流入和流出,并依据矩形纹理打包算法,在物理纹理上寻找对当前流入的纹理最合适的位置。所谓矩形纹理打包算法,是一种典型的背包问题,就是指物品不能分割,只能整件装入背包或不装入的情况下,求一种最佳装载方案使得总收益最大化。在本应用中,我们需要装入的物品就是所有纹理的Mipmap,单个的Mipmap是不可分割的,背包就是创建的物理纹理,可以使用最优二叉搜索树来提高背包的检索效率,对于本实例的应用,要存入背包的纹理都是规则的矩形,所以通过使用矩形纹理打包算法能够有效的利用整个物理纹理。在该步骤中,根据当前所需的纹理信息,对纹理进行调度,依据矩形纹理打包算法,对需要流入的Mipmap在实际的物理纹理上找到适合的位置,并把纹理位置信息等保存在间接索引缓冲区中,并且需要注意更新该纹理的其它低等级的插槽,使得低等级的Mipmap在没有加载的情况下可以索引到当前的Mipmap。当使用矩形纹理打包算法在实际的物理纹理上分配不出空间的时候,需要进行Mipmap的流出,流出以后只需要修改索引缓冲区,当前流出Mipmap对应的插槽上填充上一个等级插槽信息,并且修改低等级的Mipmap对应的插槽,确保所有的插槽上能够索引到实际物理上的纹理。在该步骤中需要注意,可以通过使用局部更新物理纹理的方法,来达到加速的目的,每次需要加载Mipmap的时候,通过局部更新,加载对应的Mipmap,修改对应的间接索引缓冲区上的插槽。需要流出的时候,只需要修改对应的间接索引缓冲区即可。
在步骤105,根据当前的渲染所需要的纹理的细节层级选择纹理进行渲染,并且重新定位UV坐标,进行采样计算。在计算纹理所需的细节层级的时候,需要首先根据当前的纹理在屏幕上投影的面积大小,计算出当前所需的Mip等级,通过当前的Mip等级,可以在间接索引缓冲区中找到对应的实际物理纹理的偏移等纹理信息。需要注意的是由于在顶点上记录的是Mipmap的本地的UV坐标,而非在物理纹理上的坐标,而我们采样的纹理是物理纹理,所以要对UV坐标进行重定位。图3为根据本发明的重新计算顶点上的UV坐标示意图,如图3所示,通过当前MipLevel对应的插槽中记录的纹理偏移信息,可以计算出当前的顶点在实际的物理纹理上的UV坐标,计算的方法是:偏移坐标/物理纹理的尺寸,即可计算出当前在物理纹理上的UV坐标,从而在物理纹理上进行采样。
本发明还提出一种计算机可读存储介质,其上存储有计算机指令,所述计算机指令运行时执行如上文所述的纹理图集调度方法的步骤。所述纹理图集调度方法参见前述部分的介绍,不再赘述。
本发明还提出一种游戏终端设备,包括存储器和处理器,所述存储器上储存有在所述处理器上运行的计算机指令,所述处理器运行所述计算机指令时执行如上文所述的纹理图集调度方法的步骤。所述纹理图集调度方法参见前述部分的介绍,不再赘述。
本领域普通技术人员可以理解:以上所述仅为本发明的优选实施例而已,并不用于限制本发明,尽管参照前述实施例对本发明进行了详细的说明,对于本领域的技术人员来说,其依然可以对前述各实施例记载的技术方案进行修改,或者对其中部分技术特征进行等同替换。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (10)
1.一种纹理图集调度方法,其特征在于,包括以下步骤:
确定用于纹理流式调度的基本信息,以及数据结构;
创建实际的物理纹理,保存加载到内存中的纹理;
创建间接索引缓冲区,保存Mipmap在物理纹理上的位置信息;
根据纹理的细节层级信息,进行纹理的流入和流出,并依据矩形纹理打包算法,在物理纹理上寻找当前流入的纹理的位置信息;
对纹理进行渲染,并且重新定位UV坐标,进行采样计算。
2.根据权利要求1所述的纹理图集调度方法,其特征在于,所述确定用于纹理流式调度的基本信息,以及数据结构的步骤,进一步包括,
确定贴图纹理Mipmap的等级数量;
定义保留的细节层级的级数和对应的Mipmap;
确定需要进行流式调度的细节层级的Mipmap。
3.根据权利要求1所述的纹理图集调度方法,其特征在于,所述创建实际的物理纹理,用于保存加载到内存中的纹理的步骤,进一步包括,
创建实际的物理纹理,将保留的Mipmap加载到创建的实际物理贴图上;
使用矩形纹理打包算法,寻找Mipmap存放的位置;
记录Mipmap在实际的物理纹理中的偏移信息。
4.根据权利要求1所述的纹理图集调度方法,其特征在于,所述创建间接索引缓冲区,保存Mipmap在物理纹理上的位置信息的步骤,进一步包括,
创建间接索引缓冲区,并存放纹理信息;
在纹理信息中存放所有插槽信息;
在插槽信息中存放细节层级在物理纹理上的坐标偏移信息以及对应的Mipmap等级。
5.根据权利要求1所述的纹理图集调度方法,其特征在于,所述根据纹理的细节层级信息,进行纹理的流入和流出,并依据矩形纹理打包算法,并在物理纹理上寻找当前流入的纹理的位置的步骤,进一步包括,
根据当前所需的纹理信息,对纹理进行调度,依据矩形纹理打包算法,对需要流入的Mipmap在实际的物理纹理上找到适合的位置,并把纹理位置信息保存在间接索引缓冲区中。
6.根据权利要求5所述的纹理图集调度方法,其特征在于,进一步包括,
更新纹理的低等级的插槽信息,使得低等级的Mipmap在没有加载的情况下可以索引到当前的Mipmap;当使用矩形纹理打包算法在实际的物理纹理上分配不出空间的时候,进行Mipmap的流出,修改间接索引缓冲区;当前流出Mipmap对应的插槽信息上填充上一个等级插槽信息。
7.根据权利要求5所述的纹理图集调度方法,其特征在于,进一步包括,
修改低等级的Mipmap对应的插槽信息,确保所有的插槽上能够索引到实际物理上的纹理。
8.根据权利要求1所述的纹理图集调度方法,其特征在于,所述对纹理进行渲染,并且重新定位UV坐标,进行采样计算的步骤,进一步包括,
根据当前的纹理在屏幕上投影的面积大小,计算出当前所需的Mipmap等级;
通过当前的Mipmap等级,在间接索引缓冲区中找到对应的实际物理纹理偏移信息;
通过当前MipLevel对应的插槽中记录的纹理偏移信息,计算出当前的顶点在实际的物理纹理上的UV坐标,在物理纹理上进行采样。
9.一种计算机可读存储介质,其上存储有计算机指令,其特征在于,所述计算机指令运行时执行权利要求1至8任一项所述的纹理图集调度方法的步骤。
10.一种游戏终端设备,其特征在于,包括存储器和处理器,所述存储器上储存有在所述处理器上运行的计算机指令,所述处理器运行所述计算机指令时执行权利要求1至8任一项所述的纹理图集调度方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811105549.1A CN109448094B (zh) | 2018-09-21 | 2018-09-21 | 一种纹理图集调度方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811105549.1A CN109448094B (zh) | 2018-09-21 | 2018-09-21 | 一种纹理图集调度方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109448094A CN109448094A (zh) | 2019-03-08 |
CN109448094B true CN109448094B (zh) | 2022-07-15 |
Family
ID=65533183
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811105549.1A Active CN109448094B (zh) | 2018-09-21 | 2018-09-21 | 一种纹理图集调度方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109448094B (zh) |
Families Citing this family (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110597759B (zh) * | 2019-08-28 | 2022-03-29 | 福建省天奕网络科技有限公司 | LayaIDE中图集资源优化的方法、存储介质 |
CN110533755B (zh) * | 2019-08-30 | 2021-04-06 | 腾讯科技(深圳)有限公司 | 一种场景渲染的方法以及相关装置 |
CN111028314B (zh) * | 2019-11-18 | 2023-06-13 | 中国航空工业集团公司西安航空计算技术研究所 | 一种GPU产生Mipmap多重细节层纹理方法 |
CN111494944A (zh) * | 2020-04-22 | 2020-08-07 | 浙江无端科技股份有限公司 | 一种地形纹理加载方法及相关装置 |
CN111508051B (zh) * | 2020-04-22 | 2023-03-14 | 浙江无端科技股份有限公司 | 一种纹理加载方法及相关装置 |
CN111951156B (zh) * | 2020-08-24 | 2021-08-03 | 杭州小影创新科技股份有限公司 | 一种绘制图形光电特效的方法 |
CN113269882B (zh) * | 2021-06-04 | 2023-09-08 | 福建天晴在线互动科技有限公司 | 一种基于虚拟纹理的地形渲染方法及系统 |
CN116957899A (zh) * | 2022-04-19 | 2023-10-27 | 象帝先计算技术(重庆)有限公司 | 图形处理器、系统、装置、设备及方法 |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP1754197A1 (en) * | 2004-06-08 | 2007-02-21 | Three-B International Limited | Displaying graphical textures |
CN105869106A (zh) * | 2016-04-27 | 2016-08-17 | 中国电子科技集团公司第二十八研究所 | 一种改进的三维实体云绘制方法 |
CN107463398B (zh) * | 2017-07-21 | 2018-08-17 | 腾讯科技(深圳)有限公司 | 游戏渲染方法、装置、存储设备及终端 |
-
2018
- 2018-09-21 CN CN201811105549.1A patent/CN109448094B/zh active Active
Also Published As
Publication number | Publication date |
---|---|
CN109448094A (zh) | 2019-03-08 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109448094B (zh) | 一种纹理图集调度方法 | |
CN109840931B (zh) | 骨骼动画的合批渲染方法、装置、系统及存储介质 | |
US8704826B1 (en) | Primitive re-ordering between world-space and screen-space pipelines with buffer limited processing | |
KR100887012B1 (ko) | 그래픽 처리 서브시스템 및 픽셀 단편에 대해 적어도하나의 값을 결정하기 위한 방법 | |
JP5053857B2 (ja) | 3次元グラフィックス処理装置および方法 | |
US20230419588A1 (en) | Dedicated Ray Memory for Ray Tracing in Graphics Systems | |
CN105912234B (zh) | 虚拟场景的交互方法和装置 | |
US8502819B1 (en) | System and method for performing ray tracing node traversal in image rendering | |
US20170004647A1 (en) | Rendering graphics data on demand | |
GB2542131B (en) | Graphics processing method and system for processing sub-primitives | |
US20100289799A1 (en) | Method, system, and computer program product for efficient ray tracing of micropolygon geometry | |
US20100265254A1 (en) | Graphics filled shape drawing | |
US7218317B2 (en) | Mechanism for reducing Z buffer traffic in three-dimensional graphics processing | |
KR20010085424A (ko) | 지연 쉐이딩을 갖는 그래픽 프로세서 | |
KR20180056316A (ko) | 타일-기반 렌더링을 수행하는 방법 및 장치 | |
CN105210111A (zh) | 基于每仓可见性信息以及添加的线内操作的渲染命令的条件性执行 | |
US20110069065A1 (en) | Image processing apparatus, computer readable medium and method thereof | |
CN109710227B (zh) | 一种纹理图集调度的方法 | |
US20090009526A1 (en) | Method and system for rendering a shape | |
US11379944B2 (en) | Techniques for performing accelerated point sampling in a texture processing pipeline | |
CN202758397U (zh) | 图形处理装置及芯片 | |
KR100624455B1 (ko) | 3차원 그래픽스 환경에서의 라이트맵 처리 방법 및 장치 | |
JP6801001B2 (ja) | 画像処理装置、画像処理方法およびプログラム | |
CN118043842A (zh) | 一种渲染格式选择方法及其相关设备 | |
GB2596364A (en) | Hierarchical acceleration structures for use in ray tracing systems |
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 |