Texture Manager 默认是关闭状态,当选择开启状态,则通过Project Setting > Texture Manager Setting目录下,勾选Texture Manager开启了Texture Manager功能。
Memory Budget 默认是1024,单位是MB, Texture Manager 支持调整Texture Manager 管理的贴图内存上限,当上传到GPU中的贴图内存超过设置的阈值,会默认按照相机距离优先级剔除掉部分贴图以防止内存进一步上升。反之在预定的预算之内,我们会尽可能按照游戏原有的逻辑上传所需要的贴图。
Cache Budegt (WebGL Only) 默认是30,单位是MB,当WebGL下载后的纹理文件占用的内存Cache达到上限30MB,会根据FIFO规则,即先进入cache的会被优先从内存cache中剔除。当再次需要目标贴图,会直接从Indexed DB中读取。
Remote Load 默认是关闭的,作用是控制读取贴图数据是从本地还是从CDN;当关闭时,编辑器运行会直接读取Cache 中的图片资源来模拟运行Texture Manger功能,当启用Remote Load时,需要填入有效的CDN下载地址;可以支持编辑器中模拟Texture Manger 实时运行下载贴图功能,在编辑器中运行下载的贴图会默认放在工程的Temp目录下。需要注意的是,当发布Player时候这里必须开启Remote Load,因为无论是WebGL还是微信小游戏均无法直接访问本地路径文件。
Custom Cache Location 默认是关闭的,默认的Cache路径是工程的Library/textureStreamingCache/TexRes。也就是说,贴图的资源文件都会放在该路径下。针对大部分公司的SVN或者其他版本控制软件一般不设置同步Library目录,为了避免重复生成贴图文件,可以启用Custom Cache Location ,可以修改纹理资源存储位置,方便开发者协同开发。
Dummy Texture 默认是关闭的,当启用Dummy Texture 时,剔除的纹理会被默认纹理替代,而不启用时纹理不全的Renderer会被自动剔除。后续在高级功能会详细介绍该功能。
Batch Size 默认是1,作用是控制单帧上传贴图的数量,默认1 表示单帧只允许上传一张贴图。
Texture Format Platform 默认是关闭的,当启用Texture Format Platform时,可以手动为对应的平台添加启用的纹理格式。图示中的意思是: 以WebGL为例,当运行在PC上会自动选择加载DXT格式的纹理,当运行在手机上会自动选择ASTC格式的纹理。此外用户还可以进一步为不同机型做格式自定义ASTC 格式,以满足不同性能机器的使用。后续章节我们将详细介绍该功能。
通常在游戏场景中除了场景中被Mesh Renderer和Skinned Mesh Renderer引用的贴图需要被设置为upload by renderer之外,其余均应该勾选uploaded reference ,即通过引用去上传实际需要的贴图,当引用为0则及时释放该贴图的资源。
通过开启Texture Format Platform 的支持,我们可以针对不同平台定制对应格式如下图所示:
多格式支持下texture Manager 实际的运行逻辑中会在每张贴图的初始化中获取基于用户的设置的格式,并在后续的加载贴图数据文件中根据该格式加载对应的贴图数据文件并上传到GPU为其所用。此外,TextureManager具备单独打包模块可以并行生成多格式线理数据。而原始Assetbundle由于只存储了纹理的metadata信息,只需要单次打包;即使后续增加其他格式纹理,也无需重新打包 AssetBundle。
用户设置如下各个平台的规则,由于我们很难定义统一范式,所以平台的信息需要用户自己判断并设置目标运行平台所采用的格式
[RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)]
static void OnBeforeSplashScreen()
{
//用户可以根据自己的判断条件设置当前平台格式
if(SystemInfo.graphicsDeviceName.Contains("RTX"))
{
TextureManager.SetSupportTextureFromat("win");
}
else if (/*设备高端*/)
{
TextureManager.SetSupportTextureFromat("High");
}
else if (/*设备中端*/)
{
TextureManager.SetSupportTextureFromat("Middle");
}
else if (/*设备低端*/)
{
TextureManager.SetSupportTextureFromat("Low");
}
else
{
TextureManager.SetSupportTextureFromat("web");
}
}
Texture Manager生成的贴图数据文件的命名含义介绍:
GUID-Format-Hash128.abas,其中GUID为unity引擎中图片实际对应的贴图资源GUID,Format 对应Unity文档中的格式Unity Texture Format Docs,Hash128为数据内容hash。
以0e5001bc94455964a9abc613d3e1604b–50–9d0a8.abas 为例,0e5001bc94455964a9abc613d3e1604b为该贴图文件在Unity中对应Texture 的GUID,50 对应的枚举格式 textureFormat的ASTC 6x6, 9d0a8 为数据hash算出来的前5位。