CN109710227B - 一种纹理图集调度的方法 - Google Patents
一种纹理图集调度的方法 Download PDFInfo
- Publication number
- CN109710227B CN109710227B CN201811316278.4A CN201811316278A CN109710227B CN 109710227 B CN109710227 B CN 109710227B CN 201811316278 A CN201811316278 A CN 201811316278A CN 109710227 B CN109710227 B CN 109710227B
- Authority
- CN
- China
- Prior art keywords
- texture
- mipmap
- tiles
- scheduling
- index buffer
- 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
Abstract
一种纹理图集调度的方法,包括以下步骤:对需要加载的纹理进行预处理;加载纹理保留的MipMap等级;对需要进行调度的MipMap进行管理;对UV进行重定位、纹理采样。本发明的纹理图集调度的方法,能够进行贴图的合并,有效减少DrawCall的数量,使得渲染效率得以提升。
Description
技术领域
本发明涉及游戏引擎开发技术领域,特别涉及一种基于方格化的虚拟纹理图集流式调度的方法。
背景技术
目前,主流游戏一般都需要庞大、精致的游戏世界。对于构建庞大精致的游戏世界,贴图占着举足轻重的地位。游戏画面品质的好坏,直接取决于贴图的精细程度。早期的游戏制作方式是把所需要的游戏贴图完全加载在内存中,但由于人们对游戏画面品质追求的不断提升,导致了贴图资源量呈爆炸式的增长,虽然现代硬件性能,包括硬件的存储能力也都有明显的提升,但和资源量的增长相比,还是远远落后的,显然完全的加载游戏贴图已经不能满足我们的需求。另一方面,游戏渲染过程中绘图调用(DrawCall)的数量会大大影响我们游戏的性能,如何减少DrawCall的数量也是我们当前所面临的一个挑战。纹理多细节等级(LOD)以及流式加载的出现缓解了内存不足的问题,但是如何在保证DrawCall尽可能少的情况下使得内存的占用量也尽可能少呢?仍然是一个比较棘手的问题。
在应用程序中,减少DrawCall数量的一个基本方法就是减少材质的数量,对于不同的贴图,如果这些贴图是分散的,就很难做到减少材质的目的,一种常用的做法是合并贴图,但这种做法将直接导致纹理流式加载的困难,在DrawCall数量和内存占用量上很难做到兼顾两者的方法,使用背包算法来对纹理进行调度一定程度上缓解了这种局面,但是物理纹理上出现碎片也是一个不容小觑的问题,因为对物理纹理的反碎片成本也很高。
因此,亟需一种纹理的调度方法,能够有效的解决这些问题。
发明内容
为了解决现有技术存在的不足,本发明的目的在于提供一种纹理图集调度的方法,通过使用该方法,能够进行贴图的合并,有效减少DrawCall的数量,使得渲染效率得以提升。
为实现上述目的,本发明提供的纹理图集调度的方法,包括以下步骤:
1)对需要加载的纹理进行预处理;
2)加载纹理保留的MipMap等级;
3)对需要进行调度的MipMap进行管理;
4)对UV进行重定位、纹理采样。
进一步地,所述步骤1)进一步包括,根据基本流式加载的单位对需要加载的纹理进行预处理,并保存到自定义格式的文件中。
进一步地,对纹理进行预处理的过程包括对纹理进行小方格化处理,对于不同的采样寻址模式和贴图数据存储格式以及不同的采样过滤器,小方格化处理过程中小方格向外延伸的像素个数不同。
进一步地,所述步骤2)进一步包括,更新间接索引Buffer以及实际的物理纹理,创建索引Buffer,用于记录实际物理纹理上的小方格的信息。
进一步地,在所述索引Buffer中,每张贴图对应一个TextureInfo,每张贴图有8个等级的MipMap,使用8个MipMapInfo来存储对应的信息,每个用来存储MipMap信息的位置为一个Slot。
进一步地,对于高等级的MipMap,所对应的Slot上的TileIndex都是相同的,对于存储多个TileIndex的Slot,按照z-order的顺序来对TileIndex进行存储。
进一步地,所述步骤3)进一步包括,
71)通过纹理期望的LOD,确定需要流入的纹理;
72)确定需要流入的MipMap;
73)计算需要的Tile个数;
其中,当所需的Tile个数小于或等于空闲的Tile数时,直接分配相应个数的Tile以供纹理的流入,纹理流入后,修改索引Buffer,更新索引Buffer上对应的Slot;
当所需的Tile个数大于空闲的Tile数时,根据需要流出的MipMap,从间接索引Buffer上找到对应的TileIndex,把Tile标记为空闲的小方格,并且修改对应的间接Buffer,保证间接Buffer中存储跟当前LOD最接近的,且已经加载到PhysicalTexture上的MipMap对应的Tile索引,当流出某一个等级的MipMap时,要修改索引Buffer上当前等级对应的Slot,修改为相邻的上一等级Slot所对应的值。
更进一步地,所述步骤4)中包括,根据当前的纹理坐标和尺寸大小,计算期望的LOD,计算公式为:
λbase(x,y)=log2[ρ(x,y)],
为实现上述目的,本发明还提供一种计算机可读存储介质,其上存储有计算机指令,所述计算机指令运行时执行上述的纹理图集调度的方法的步骤。
为实现上述目的,本发明还提供一种终端设备,包括存储器和处理器,所述存储器上储存有在所述处理器上运行的计算机指令,所述处理器运行所述计算机指令时执行上述的纹理图集调度的方法的步骤。
本发明通过对纹理的预处理,减少运行时的开销。通过每个小方格向外扩展一圈,使得采样的过程中避免其它小方格上的像素对当前采样的干扰。通过使用小方格进行纹理的保存,避免了在实际的物理纹理上内存的碎片化,不需要使用运行时反碎片算法就可以达到减少内存碎片的目的。间接索引Buffer通过使用z-order类型的存储方式,能够有效的减少CacheMiss带来的性能损耗。
本发明的其它特征和优点将在随后的说明书中阐述,并且,部分地从说明书中变得显而易见,或者通过实施本发明而了解。
附图说明
附图用来提供对本发明的进一步理解,并且构成说明书的一部分,并与本发明的实施例一起,用于解释本发明,并不构成对本发明的限制。在附图中:
图1为根据本发明的纹理图集调度的方法流程图;
图2为根据本发明的实施方式的对贴图进行预处理过程的示意图;
图3为根据本发明的实施方式的间接Buffer与PhysicalTexture以及Tile的对应关系的示意图;
图4为根据本发明的实施方式的UV重定位、对纹理采样的示意图。
具体实施方式
以下结合附图对本发明的优选实施例进行说明,应当理解,此处所描述的优选实施例仅用于说明和解释本发明,并不用于限定本发明。
图1为根据本发明的纹理图集调度的方法流程图,下面将参考图1,对本发明的纹理图集调度的方法进行详细描述。
首先,在步骤101,对需要加载的纹理进行预处理。
在该步骤中,对需要进行流式加载的纹理进行预处理,并保存到一个自定义格式的文件中。在该实施方式中,使用的贴图分辨率为128x128,总共有1000张贴图,需要进行流式加载的纹理有两级,分别为LOD0(128x128)和LOD1(64x64),对于其它高等级的LOD,视为保留的LOD,常驻在内存中。选择使用64x64的小方格作为基本流式加载的单位。图2为根据本发明的实施方式的对贴图进行预处理过程的示意图,如图2所示,对于LOD0和LOD1进行小方格化处理的过程中会将原本贴图内部的像素变成小方格边缘的像素,所以,本发明使用每个小的方格向外延伸几个像素来解决。在本发明中,将每一个小方格称为一个Tile。对于不同的采样寻址模式和贴图数据存储格式,边缘的像素也要做特殊的处理。根据不同的采样寻址模式以及不同的采样过滤器,需要向外延伸的像素个数也不相同,例如采用8倍的各向异性过滤,并且选取的Wrap类型的纹理寻址模式,则需要边缘向外扩展四个像素,并且对于同一个MipMap内部的边缘(在Tile上位于边缘的像素,在MipMap上位于内部的像素)和外部的边缘(在Tile上位于边缘的像素,在MipMap上也位于边缘的像素)要做不同的处理,如图2所示。
选择向外扩展纹素个数跟图片的存储格式也有一定的关系,如果是使用BC压缩算法进行的纹理压缩,由于BC压缩算法是使用4x4个纹素作为一个Block进行压缩,所以向外扩展的纹素的个数就是4的倍数。当选择每个Tile向外扩展4个纹素来实现时,Tile的大小就变为72x72,由于运行时动态的切割会有性能的耗损,所以可以放在预处理阶段完成,对原始贴图的低等级的MipMap进行小方格化,把小方格化后的贴图保存在一个自定义文件当中,当在运行时需求的时候,直接读取对应的文件内容,把相应的贴图加载到内存中。为了保证运行时的高效,一定要能够快速定位到所需的内容上,并且不想直接把整个文件都加载到内存当中,所以设计了如图2所示的文件格式,通过入口信息找到小方格对应的资源,由于入口信息表很小,所以它可以常驻内存,每次在需要Tile内容的时候,直接通过资源的偏移,找到对应的资源。由于LOD0占用4个Tile,LOD1占用1个Tile,所以,对于每一张贴图,都需要5个TileIndex去分别索引对应的Tile。
在步骤102,加载纹理保留的MipMap等级。
在该步骤中,加载纹理保留的MipMap等级,并更新间接索引Buffer以及实际的物理纹理。
创建一个实际的物理纹理,分辨率大小为2048x2048,称之为PhysicalTexture,另外再创建一个索引Buffer,用来记录实际物理纹理上的小方格的信息。对于高等级的MipMap,由于分辨率都小于一个Tile的大小,如果每个MipMap都单独存放于一个Tile中,将造成巨大的浪费,所以选择使用一个Tile存放其它所有高等级的MipMap,或者把两个纹理的高等级的MipMap全部存储于一个Tile上,通过一个标志位来进行区分,在进行采样的时候,可以通过一个常量数组直接索引到真实的位置,时间复杂度为O(1)。通过这种做法,尽可能减少内存的浪费。对于LOD0的MipMap,需要4个Tile存储完整的信息,LOD1需要1个Tile进行存储,在索引Buffer中,每张贴图对应一个TextureInfo,每个贴图有8个等级的MipMap,所以需要使用8个MipMapInfo来存储对应的信息,每个用来存储MipMap信息的位置称之为一个Slot。对于高等级的MipMap,所对应的Slot上的TileIndex都是相同的,对于LOD0总共需要存储四个TileIndex,LOD1需要存储一个TileIndex,图3示出了根据本发明的实施方式的间接Buffer与PhysicalTexture以及Tile的对应关系的示意图。对于存储多个TileIndex的Slot,可以按照z-order的顺序来对TileIndex进行存储,减少索引Tile时CacheMiss造成的性能损耗。
在步骤103,对需要进行调度的MipMap进行管理。
在该步骤中,通过期望的LOD,对需要进行调度的MipMap进行管理。通过纹理期望的LOD,确定哪些纹理是需要流入的,确定好需要流入的MipMap后,要计算所需要的Tile的个数,从空闲的Tile中分配出一个或几个Tile以供纹理的流入,当纹理流入以后,需要修改索引Buffer,更新索引Buffer上对应的Slot。当发现没有空闲的Tile的时候,要根据需要流出的MipMap,从间接索引Buffer上找到对应的TileIndex,把Tile标记为空闲的小方格,并且修改对应的间接Buffer,保证间接Buffer中存储跟当前LOD最接近的,且已经加载到PhysicalTexture上的MipMap对应的Tile索引,当流出某一个等级的MipMap时,要修改索引Buffer上当前等级对应的Slot,修改为相邻的上一等级Slot所对应的值。对PhysicalTexture的更新可以采用局部更新的方法,以减少开销。
在步骤104,对UV进行重定位,对纹理采样。
在该步骤中,渲染的时候根据当前的纹理索引Buffer以及实际的物理纹理,对UV进行重定位,进行采样。在计算纹理所需的LOD的时候,需要首先根据当前的纹理坐标和尺寸大小,计算出期望的LOD,计算的公式为:λbase(x,y)=log2[ρ(x,y)],其中λbase为期望的LOD,x,y为当前纹理的尺寸大小,ρ的计算公式为:其中u,v,w为当前的纹理坐标。通过期望的LOD,可以在索引Buffer中找到对应的实际物理纹理的Tile的索引,然后根据Tile的索引计算出当前在实际物理纹理中的UV坐标,进行纹理的采样。图4为根据本发明的实施方式的UV重定位、对纹理采样的示意图,如图4所示,计算的方法是通过(TileIndex x TileSize+Local上的偏移)/PhysicalTexture的size获取的。
本发明还提供一种计算机可读存储介质,其上存储有计算机指令,所述计算机指令运行时执行上述的纹理图集调度的方法的步骤,所述纹理图集调度的方法参见前述部分的介绍,不再赘述。
本发明还提供一种终端设备,包括存储器和处理器,所述存储器上储存有在所述处理器上运行的计算机指令,所述处理器运行所述计算机指令时执行上述的纹理图集调度的方法的步骤,所述纹理图集调度的方法参见前述部分的介绍,不再赘述。
本领域普通技术人员可以理解:以上所述仅为本发明的优选实施例而已,并不用于限制本发明,尽管参照前述实施例对本发明进行了详细的说明,对于本领域的技术人员来说,其依然可以对前述各实施例记载的技术方案进行修改,或者对其中部分技术特征进行等同替换。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (8)
1.一种纹理图集调度的方法,其特征在于,包括以下步骤:
1)对需要加载的纹理进行预处理;
2)加载纹理保留的MipMap等级;
3)对需要进行调度的MipMap进行管理;
4)对UV进行重新定位、纹理采样;
其中,所述步骤2)进一步包括,更新间接索引Buffer以及实际的物理纹理,创建索引Buffer,用于记录实际物理纹理上的小方格的信息;
其中,所述步骤3)进一步包括,
71)通过纹理期望的LOD,确定需要流入的纹理;
72)确定需要流入的MipMap;
73)计算需要的Tile个数;
当所需的Tile个数小于或等于空闲的Tile数时,直接分配相应个数的Tile以供纹理的流入,纹理流入后,修改索引Buffer,更新索引Buffer上对应的Slot;
当所需的Tile个数大于空闲的Tile数时,根据需要流出的MipMap,从间接索引Buffer上找到对应的TileIndex,把Tile标记为空闲的小方格,并且修改对应的间接Buffer,保证间接Buffer中存储跟当前LOD最接近的,且已经加载到PhysicalTexture上的MipMap对应的Tile索引,当流出某一个等级的MipMap时,要修改索引Buffer上当前等级对应的Slot,修改为相邻的上一等级Slot所对应的值。
2.根据权利要求1所述的纹理图集调度的方法,其特征在于,所述步骤1)进一步包括,根据基本流式加载的单位对需要加载的纹理进行预处理,并保存到自定义格式的文件中。
3.根据权利要求2所述的纹理图集调度的方法,其特征在于,对纹理进行预处理的过程包括对纹理进行小方格化处理,对于不同的采样寻址模式和贴图数据存储格式以及不同的采样过滤器,小方格化处理过程中小方格向外延伸的像素个数不同。
4.根据权利要求1所述的纹理图集调度的方法,其特征在于,在所述索引Buffer中,每张贴图对应一个TextureInfo,每个贴图有8个等级的MipMap,使用8个MipMapInfo来存储对应的信息,每个用来存储MipMap信息的位置为一个Slot。
5.根据权利要求1所述的纹理图集调度的方法,其特征在于,对于高等级的MipMap,所对应的Slot上的TileIndex都是相同的,对于存储多个TileIndex的Slot,按照z-order的顺序来对TileIndex进行存储。
7.一种计算机可读存储介质,其上存储有计算机指令,其特征在于,所述计算机指令运行时执行权利要求1至6任一项所述的纹理图集调度的方法的步骤。
8.一种终端设备,其特征在于,包括存储器和处理器,所述存储器上储存有在所述处理器上运行的计算机指令,所述处理器运行所述计算机指令时执行权利要求1至6任一项所述的纹理图集调度的方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811316278.4A CN109710227B (zh) | 2018-11-07 | 2018-11-07 | 一种纹理图集调度的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811316278.4A CN109710227B (zh) | 2018-11-07 | 2018-11-07 | 一种纹理图集调度的方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109710227A CN109710227A (zh) | 2019-05-03 |
CN109710227B true CN109710227B (zh) | 2022-05-24 |
Family
ID=66254877
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811316278.4A Active CN109710227B (zh) | 2018-11-07 | 2018-11-07 | 一种纹理图集调度的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109710227B (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111198680B (zh) * | 2019-12-20 | 2020-12-11 | 江苏原力数字科技股份有限公司 | 一种基于 Arnold 渲染器的文件生成系统及方法 |
CN111494944A (zh) * | 2020-04-22 | 2020-08-07 | 浙江无端科技股份有限公司 | 一种地形纹理加载方法及相关装置 |
CN116012510A (zh) * | 2021-10-22 | 2023-04-25 | 华为技术有限公司 | 渲染处理的方法、装置、设备和存储介质 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6288730B1 (en) * | 1998-08-20 | 2001-09-11 | Apple Computer, Inc. | Method and apparatus for generating texture |
CN107463398A (zh) * | 2017-07-21 | 2017-12-12 | 腾讯科技(深圳)有限公司 | 游戏渲染方法、装置、存储设备及终端 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9349210B2 (en) * | 2012-11-30 | 2016-05-24 | Arm Limited | Methods of and apparatus for using textures in graphics processing systems |
US10460502B2 (en) * | 2016-12-14 | 2019-10-29 | Samsung Electronics Co., Ltd. | Method and apparatus for rendering object using mipmap including plurality of textures |
-
2018
- 2018-11-07 CN CN201811316278.4A patent/CN109710227B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6288730B1 (en) * | 1998-08-20 | 2001-09-11 | Apple Computer, Inc. | Method and apparatus for generating texture |
CN107463398A (zh) * | 2017-07-21 | 2017-12-12 | 腾讯科技(深圳)有限公司 | 游戏渲染方法、装置、存储设备及终端 |
Also Published As
Publication number | Publication date |
---|---|
CN109710227A (zh) | 2019-05-03 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11182952B2 (en) | Hidden culling in tile-based computer generated images | |
US8456479B2 (en) | Methods, systems, and data structures for generating a rasterizer | |
CN109710227B (zh) | 一种纹理图集调度的方法 | |
EP1803096B1 (en) | Flexible antialiasing in embedded devices | |
US7750922B2 (en) | Transparency group computation on a graphics processing unit | |
US20210362061A1 (en) | Method and Apparatus for Acquiring Merged Map, Storage Medium, Processor, and Terminal | |
CN111062858B (zh) | 高效的提前渲染方法、装置及计算机存储介质 | |
US7218317B2 (en) | Mechanism for reducing Z buffer traffic in three-dimensional graphics processing | |
US20070291044A1 (en) | Systems and Methods for Border Color Handling in a Graphics Processing Unit | |
KR20180056316A (ko) | 타일-기반 렌더링을 수행하는 방법 및 장치 | |
US11521342B2 (en) | Residency map descriptors | |
US7852347B1 (en) | Texture map pixel pairing optimization | |
US8654135B1 (en) | A-Buffer compression for different compression formats | |
KR20160051153A (ko) | 캐시 메모리의 관리 방법 및 그 장치 | |
CN115049531B (zh) | 图像渲染方法、装置、图形处理设备及存储介质 | |
CN111028127B (zh) | 一种gpu子纹理替换存储方法 | |
JP2003196674A (ja) | 画像処理方法、画像処理装置及びコンピュータ読み取り可能記憶媒体 | |
US9064347B2 (en) | Method, medium, and system rendering 3 dimensional graphics data considering fog effect | |
CN115880127A (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 |