引言 上一篇文章描述了如何在不修改自定义渲染组件的前提下使用 alpha 分离的纹理来提升 iOS 的透明压缩纹理质量(见这里:上一篇的链接)。 在这个方案投入项目开始使用一段时间之后,UI 同学又来找我抱怨了:虽然一些贴图的不透明部分不会显得脏了,但是为什么有些纹理的半透明部分表现这么奇怪呀?这就涉及到上次方案中透明通道贴图格式的选择问题了。在上一篇文章中,我们的透明通道贴图在 iOS 上使用了 pvrtc4 的压缩方式,这样的做法造成了部分贴图半透明部分显示上的效果降低,在一些特定的情况下效果甚至没法接受。那么如何解决这个问题呢?这一次我们要来说明另一种贴图质量低下的解决方案:使用 ASTC 格式纹理,并且解释针对目前部分硬件的限制所作出的调整。 ASTC 关于纹理格式的一些基础知识可以在上一篇文章中开头的基础中看到,在此不做赘述。这里简单说明一下 ASTC 这种格式。 1. 概述 ASTC(Adaptive Scalable Texture Compression)是一种基于块的有损纹理压缩格式,完整细节在 2012 年被提出。这种压缩格式有多种压缩率可选,同时有着较高的压缩率和较好的压缩质量。 2. 压缩率 在上面的表中展示了从 ASTC 格式从 4x4 到 12x12 每一个像素所占的比特数(bpp),可以看到最大(也就是 4x4)的占用为每个像素一个字节,那么一张 1024x1024 的贴图,使用 ASTC 4x4 压缩后,他的大小就是 1MB,这个大小和 ETC2 RGBA 8bpp 格式的大小相同。 3. 纹理质量 从结果来看,在相同的内存占用前提下,ASTC 相较其他传统压缩格式的质量更优;而在相同的质量前提下,占用内存更小。关于 ASTC 的压缩类型选择和质量相关说明, 可以参考这里:https://developer.nvidia.com/astc-texture-compression-for-game-assets 4. 支持机型 iOS 上,苹果从 A8 处理器开始支持 ASTC 格式(即从 iphone6,iPad mini 4 开始支持),而以前的 iPhone 5s 和 iPad mini 3 及之前的设备都不支持。 Android 上,未来的压缩格式正在从 ETC2 转向 ASTC。但是因为 android 机多样性,目前的市场普及率我暂不可知。 基本使用 现在在 Unity 中要使用 ASTC 格式非常简单:选择纹理导入设置,选择 ASTC 格式,完成! 这就结束了吗?显然事情并没有这么简单,上面提到过的硬件的限制使得我们无法这么简单的选择,因为在不支持的硬件上使用 ASTC 格式,会被软解为 RGBA,从而数倍的增加其内存占用,让游戏瞬间被系统杀掉。 针对这些硬件限制,我们基于项目本身的特点一般有以下的考量:
根据硬件条件选择使用不同纹理格式 1. 基本思路 首先,对于直接引用打入包内的方式是不适合本方案的。本方案基于通过 AssetBundle 加载资源的项目(包括动态加载和依赖加载)。 基本思路为:在打包时生成一份完整的 AssetBundle 包以后,再针对需要使用 ASTC 的纹理所在的 AssetBundle 包重新打一份 ASTC 版本的;在运行时根据硬件支持情况等信息来选择加载哪一份 AssetBundle 包(PVRTC/ASTC)。 这样在游戏运行过程中,如某个 prefab 引用了一个 sprite,可以通过硬件情况选择不同的 AssetBundle 包,加载不同包中相同的 Sprite,然后引用到不同压缩格式的纹理上,就达到了我们的目的。 2. 构建测试工程 基于上面的思路,我们来构建一个测试工程,测试工程需要包含以下内容:
3. 实现细节 首先是打 AssetBundle 包流程,这块不会详细说,因为每个项目的实现都可能不同。在这里,我们的思路是:添加需要动态加载的 AB 包规则,最后计算出它们依赖的资源,按规则打成其他依赖 AB 包。下面的代码示意了这一过程。 var builder = new AssetBundleBuilder(); 其中重点在 UpdateSharedAssets() 方法中,其中不仅计算了所有的依赖关系,同时记录了 AtlasBundleMap 和 BundleMap。 下图为 BundleMap 的格式,最重要的几个字段是 BundleName(记录 AB 包名),AstcVariant(是否有其 ASTC 版本),AstcVariantBundleName(ASTC 版本的 AB 包名)。这个文件会打入最终的 AB 包内,在运行时加载资源时根据 AstcVariant 和 AstcVariantBundleName 来判断并加载对应的 ASTC 版本的包。 下图为 AtlasBundleMap 的格式。这个文件记录了需要再打一份 ASTC 版本 AB 包的包名列表,在后续的打包过程中会用到。 经过上面的过程,完整的 AB 包已经都打出来了,下面需要重新打一批 ASTC 版本的 AB 包。首先重新打一次图集: EditorSettings.spritePackerMode = SpritePackerMode.BuildTimeOnlyacker.SelectedPolicy = typeof(CustomSpritePackerPolicy).Name;CustomSpritePackerPolicy.MakeAstc = true;Packer.RebuildAtlasCacheIfNeeded(target, true, Packer.Execution.ForceRegroup); 上面需要注意的是:两次打图集需要有一个不同的标志:MakeAstc,第一次为 false,第二次为 true,在自定义的图集打包规则中才可以判断出两次需要打的是不同的图集。自定义图集规则中的实现为: if (MakeAstc){ 更多的关于自定义图集规则可以参考官方文档:https://docs.unity3d.com/Manual/SpritePacker.html 之后使用同样的 BuildAssetBundleOptions,根据 AtlasBundleMap 中信息对相应资源再打一次 AB 包即可,打完后改名拷贝到之前的文件夹中,现在的 AB 包目录就像是这样: 其中 astc_ 开头的都是对应的 AB 包的 ASTC 版本。 接下来我们来到运行时。首先是判断硬件是否支持 ASTC 格式: public static bool DeviceSupportAstc(){ 其次是加载资源: private AssetBundle LoadBundleCore(string bundleName){ 这是所有加载 AB 包时都会调用到的方法(包括动态加载和依赖加载)。其中的过程也很简单:判断了硬件情况,根据 BundleMap 找到需要加载的 ASTC 版本的 AB 包名,并去加载。 到这里以后我们的测试工程就已经完成了(详细的代码可以看文末的代码仓库一节)。我们可以看到在这个 demo 中,我们可以显示当前动态加载和依赖加载的纹理格式,并切换到另一种纹理,实现了 ASTC 和传统格式之间的选择性加载。 我们再使用 Profiler 工具来对比一下两种不同格式的纹理的内存占用: 上图为 ETC2 格式(为了测试方便,没有使用 PVRTC,结果是一样的)的内存占用,64.2KB,即等于 256*256*8/8。 上图为 ASTC 6x6 格式的内存占用,29.1KB,即等于 256*256*3.56/8。 ASTC 6x6 的内存占用比 PVRTC 4bpp 还小了 10%,但是质量却要好的很多很多。 补充说明 1. 延伸一下,因为上面的方案多生成了一批图集相关的 AB 包,所以会让包体有所增大。如果你们项目中有资源更新,那么支持 ASTC 和不支持 ASTC 的设备就需要根据自己的情况来下载不同的资源包。如果要做的好的话这个问题也是需要考虑的。当然这里就不讨论了,有需要的同学可以自己研究。 2. 引言中提到的透明通道贴图 PVRTC RGBA 4bpp 格式造成了贴图的半透明区域显示质量差的问题。我之后也尝试使用 Alpha8 格式来代替,但是实际测试发现所有图都看不到了,通过看 Unity 的默认 spriterenderer 和 DefaultETC1 的 shader 才知道,他们都使用了 alpha 通道贴图的 R 通道,而 Alpha8 格式取不到,所以贴图都不显示了。要解决这个问题可能需要使用 R8 格式来代替 Alpha8 格式,但是因为我使用的 Unity2017 不支持,所以就没有继续尝试了。 结论 包括前一篇文章,在 iOS 上我们一共使用了 3 种贴图压缩格式的方案(android 同理):
这几种方案各有优劣和使用场景,我下面就试着总结一下。 1. 方案优缺点对比 PVRTC:
分离透明通道:
根据硬件选择使用 PVRTC 还是 ASTC:
2. 方案适用场景对比 PVRTC:
分离透明通道:
根据硬件选择使用 PVRTC 还是 ASTC:
来源:indienova 原文:https://mp.weixin.qq.com/s/jVnO6uDq7uEuA8cjjZVP3A |
相关下载 |
虚幻4打造次世代《梅祖拉的假面》 纹理精细,细节丰富 2020-08-19 16:50:54来源:游戏下载编辑:松鼠骑士评论(0) 详情>>
Cordell Felix是一位资深环境艺术家,他使用虚幻4引擎创造了一个令人惊叹的环境。他把《塞尔达传说:梅祖拉的假面》重制成立次世代的画面,光影细节等非常详情>>
[PConline 资讯]iQOO作为备受关注的手机品牌之一,旗下每次新机的发布会也是备受重视,而旗下5G新旗舰iQOO 5系列将会定档在8月17日亮相,随着新机发布时间的临近,iQOO官方也详情>>
《上古卷轴5》武器高清纹理MOD发布 宝剑锋从磨砺出 2020-05-26 14:57:23来源:游戏下载编辑:血河评论(0) 详情>>
在苦等《上古卷轴6》的日子里,玩家们只能制作各式MOD来为《上古卷轴5》续命度日。日前,MOD制作者“Iconic”分享了一款《老滚5》武器高清纹理详情>>
【导读】网友分享了PS4Pro游戏画面和PS5虚幻5引擎演示的对比视频,视频选取了游戏的几类场景和虚幻5演示进行对比,包括环境纹理、流体效果以及人物动作等。--> 详情>>
【导读】“Halk Hogan PL”近日发布了一个《上古卷轴5:天际重制版》的画质MOD,这个MOD改善了游戏(包括游戏本体和DLC)中所有的龙的纹理材质,为其带来了惊人惊叹的4K级别贴图品质详情>>
原标题:5月14日更新日志:新增测试版纹理流功能 在本次的更新中,官方在CS:GO beta库中提供玩家一个新测试版本(“ texture_streaming_beta”),此版本与现详情>>
【导读】MOD制作者“kartoffel”近日发布了一个《上古卷轴5:天际重制版》的高清材质包,这个高清材质包改善了平民衣服的纹理贴图。一起来看看吧!--> 详情>>
根据外媒DSOGaming报道,screamclarity制作了一款《上古卷轴5:天际》武器纹理MOD。该MOD改善了装备和武器的纹理,让它们看起来更真实,感兴趣的玩家可以点击详情>>
《上古卷轴5》武器装备纹理Mod 改善纹理质感更真实 2020-05-03 09:36:34来源:游戏下载编辑:松鼠骑士评论(0) 详情>>
【导读】MOD作者“projectmelancholy”上传了《只狼:影逝二度》的一款新MOD,修复了游戏中会出现了纹理突然显现的问题,一起来看看吧。--> 详情>>
《最终幻想7:重制版》将于4月10日在PS4平台正式发售,数毛社(Digital Foundry)公布了技术分析视频。游戏前期表现不错,但后期的纹理贴图问题却多了起来,整体让人不太满意。详情>>
原标题:《最终幻想13》5.3GB高清纹理材质包发布 画面提升 近日国外Mod制作团队Team NGS发布了《最终幻想13》高清纹理材质包,材质包容量高达5.3GB。详情>>
近日国外Mod制作团队Team NGS发布了《最终幻想13》高清纹理材质包,材质包容量高达5.3GB。该Mod改进了游戏纹理贴图,其中包含环境、角色、NPC、精灵和详情>>
近日国外Mod制作团队Team NGS发布了《最终幻想13》高清纹理材质包,材质包容量高达5.3GB。该Mod改进了游戏纹理贴图,其中包含环境、角色、NPC、精灵和武器等。 《最终幻详情>>
【导读】Team NGS近日发布了一个《最终幻想13》的高清纹理材质包,这个材质包容量高达5.3GB,还是很有诚意的。一起来看看吧!--> Te详情>>
【导读】近日,开发商Undead Labs公布了《腐烂国度2:主宰版(State of Decay 2: Juggernaut Edition)》的最新预告片,展示了重制改进的画面效果。官方表示该作将有更好的光影效果、详情>>
【导读】在最近一期的官方PlayStation杂志UK(2020年4月)中,LKA的负责人透露了一些关于PS5的新情报,让我们一起来了解下吧!--> 在最详情>>
《星球大战 绝地:陨落的武士团(Star Wars Jedi: Fallen Order)》在发售之后在玩家间收获了大量好评,IGN甚至为本作打出了9分的好成绩。但是开发商也详情>>
网友Denroth近日分享了一款自制的《巫师3》女性角色4K纹理MOD,据作者介绍,本款MOD改善了希里、叶奈法以及特莉丝的模型外观,甚至增强了皮肤毛孔效果等详情>>
原标题:《巫师3》女角色4K纹理MOD 希里、叶奈法妆容惊艳动人 网友Denroth近日分享了一款自制的《巫师3》女性角色4K纹理MOD,据作者介绍,本款MOD改善详情>>
原标题:《巫师3》女角色4K纹理MOD 希里、叶奈法妆容惊艳动人 网友Denroth近日分享了一款自制的《巫师3》女性角色4K纹理MOD,据作者介绍,本款MOD改善详情>>
原标题:Apple Watch自动收紧、皮肤纹理认证、LED进度条专利获批 据外媒报道,当地时间9月3日,美国专利商标局(USPTO)授予苹果几项Apple Watch表带的专详情>>
精灵宝可梦:剑/盾》就陷入了舆论的漩涡当中。这个打败了Hello Kitty的全球第一大多栖IP,为何GameFreak工作室却越来越不用心?昨(25)日又有Reddit网友通过细致对比分析,得出了其实详情>>
精灵宝可梦:剑/盾》就陷入了舆论的漩涡当中。这个打败了Hello Kitty的全球第一大多栖IP,为何GameFreak工作室却越来越不用心?昨(25)日又有Reddit网友通过细致对比分析,得出了其实详情>>
精灵宝可梦:剑/盾》就陷入了舆论的漩涡当中。这个打败了Hello Kitty的全球第一大多栖IP,为何GameFreak工作室却越来越不用心?昨(25)日又有Reddit网友通过细致对比分析,得出了其实详情>>
精灵宝可梦:剑/盾》就陷入了舆论的漩涡当中。这个打败了Hello Kitty的全球第一大多栖IP,为何GameFreak工作室却越来越不用心?昨(25)日又有Reddit网友通过细致对比分析,得出了其实详情>>
精灵宝可梦:剑/盾》就陷入了舆论的漩涡当中。这个打败了Hello Kitty的全球第一大多栖IP,为何GameFreak工作室却越来越不用心?昨(25)日又有Reddit网友通过细致对比分析,得出了其实详情>>
精灵宝可梦:剑/盾》就陷入了舆论的漩涡当中。这个打败了Hello Kitty的全球第一大多栖IP,为何GameFreak工作室却越来越不用心?昨(25)日又有Reddit网友通过细致对比分析,得出了其实详情>>
原标题:开发困难?《宝可梦:剑/盾》被曝使用旧版纹理材质 自从今年E3发布会以来,GameFreak和《宝可梦:剑/盾》就陷入了舆论的漩涡当中。这个打败了Hello Kitty的全球详情>>
自从今年E3发布会以来,GameFreak和《精灵宝可梦:剑/盾》就陷入了舆论的漩涡当中。这个打败了Hello Kitty的全球第一大多栖IP,为何GameFreak工作室却越来越不用心?昨(25)日又有Red详情>>
word中的纹理设计,可以给纸张施加羊皮纸、面巾纸的纹理,看起来更加美观。攻略对象office2010步骤分解1首先打开你需要设置纹理的文件,在菜单栏里面找到页面布局。2页面布局里面详情>>
原标题:《巫师3》高清改造Mod新对比图 纹理、材质更上一层楼 Halk Hogan一直致力于为《巫师3》打造一个“高清改造计划”MOD,他希望通过这款MOD让游戏纹理和材质详情>>
《黑暗之魂重制版》是黑暗之魂游戏第一部的高清重制版,国外的一名玩家为游戏制作了更加高清贴图纹理包,下面就为大家带来具体的介绍 点击进入:黑暗之魂重制详情>>
原标题:玩家自制《巫师3》高清纹理Mod 视觉差异令人震惊! 《巫师3:狂猎(The Witcher 3: Wild Hunt) 详情>>
原标题:《鬼泣5》三大平台画质对比 PC版纹理细节更加真实 卡普空旗下《鬼泣5》已经发售,油管UP主Candyland 详情>>