《全民突击》项目优化内存之压缩贴图

发表于2016-05-10
评论1 972浏览
  首先看看优化前内存状态:
  刚进入游戏


1、Used Total: 
  当前帧的Unity内存、Mono内存、GfxDriver内存、Profiler内存的总和. 
2、Reserved Total: 
  系统在当前帧的申请内存. 
3、Total System Memory Usage: 
  当前帧的虚拟内存使用量.(通常是我们当前使用内存的1.5~3倍) 
4、GameObjects in Scene: 
  当前帧场景中的GameObject数量. 
5、Total Objects in Scene: 
  当前帧场景中的Object数量(除GameObject外,还有Component等). 
6、Total Object Count: 
  Object数据 + Asset数量. (8499+10081)
  当前主要是优化图片内存!这是刚进入游戏,没有点击多少模块Texture2D消耗内存的情况。


  我对游戏进行一些操作,打开了除去战斗外主要的游戏模块,然后:


  可以看见增长非常快,我们主要的关注点就是图片,首先贴图这块已经做得很好,大家应该都懂的。


  居然发现一个野生的非正常贴图, 正好拿来举例子。


  我们找到它,修改它,再上传他的.meta文件,下一次就会好了。(再一次打开后)



  已经看不见这个野生bug了。
  我们主要的关注点是这些:




  他们太大了,数量又很多,占用了非常多的内存,我们可以尝试在不影响图片表现的情况下,对他们进行压缩。
  一个一个去修改他们太麻烦,而且需要针对不同的图片类型做不同的大小切换,所以写个工具。


  注意红框框住的地方,避免把带透明通道的图片也给压缩成不透明的了。
  需要注意的是美术给的技能特效这样的图片,不要去修改它的一个值,即Wrap Mode字段,因为特效需要用到Repeat。
/////////////////////////以下是我们项目//////////////////////////////
private static string AchievementIcon = "Assets/Resources/prefabs/UI/AchievementIcon/";
private static string ADImages = "Assets/Resources/prefabs/UI/ADImages/";
private static string AiIcon = "Assets/Resources/prefabs/UI/AiIcon/";
private static string GuildIcon = "Assets/Resources/prefabs/UI/GuildIcon/";
private static string ItemIcon_Large = "Assets/Resources/prefabs/UI/ItemIcon_Large/";
private static string ItemIcon_Small = "Assets/Resources/prefabs/UI/ItemIcon_Small/";
private static string LevelIcon = "Assets/Resources/prefabs/UI/LevelIcon/";
private static string LevelLoadingIcon = "Assets/Resources/prefabs/UI/LevelLoadingIcon/";
private static string LevelTipsIcon = "Assets/Resources/prefabs/UI/LevelTipsIcon/";
private static string LMIcon = "Assets/Resources/prefabs/UI/MainRoleIcon/";
private static string MainRoleIcon = "Assets/Resources/prefabs/UI/AchievementIcon/";
private static string MapPreviewImage = "Assets/Resources/prefabs/UI/MapPreviewImage/";
private static string MiniMap = "Assets/Resources/prefabs/UI/MiniMap/";
private static string PlayerIcon = "Assets/Resources/prefabs/UI/PlayerIcon/";
private static string RoleCard = "Assets/Resources/prefabs/UI/RoleCard/";
private static string ShareImages = "Assets/Resources/prefabs/UI/ShareImages/";
private static string StoryPoster = "Assets/Resources/prefabs/UI/StoryPoster/";
private static string VehiclesIcon = "Assets/Resources/prefabs/UI/VehiclesIcon/";
private static string WeaponIcon_s = "Assets/Resources/prefabs/UI/WeaponIcon_s/";
  需要处理这些,AchievementIcon的图片都是256X256,size可以设置256,依次类推,还有一些不常用到的图片或者出现次数比较少的都可以设置成128的大小。
  ADImages的图片表现力很足,甚至有一些类似广告bar这些的图片,所以设置512。
  AiIcon这些的图片太小,明显设置128,大概其他的图片也脱离不了这3个范畴。

这些128

这些256

这些512

  好吧,执行一下工具,看下效果如何?举个例子,未优化前。


  优化后!


  256的效果对比上一张的确实是差了点,但是感觉能接受,看美术,如果觉得不能接受,再放开到512。那么让我们再看看现在内存的占用情况吧!



  对比之前的这张


  都是大概300来张图的情况下,差不多减少了20MB的内存。
  后面还可以继续优化:比如粒子图片;某些UI的背景图片;武器贴图;人物贴图等,都能精简内存。
  举例子一份以前我优化魔龙贴图的例子。

如社区发表内容存在侵权行为,您可以点击这里查看侵权投诉指引

0个评论