很多项目都没有重视资源规范,而是不断追求更高的运行效率。然而资源规范在项目中是非常重要的,资源规范才是高效运行的前提。
在有的项目中,一个人物模型几万个面、一个建筑模型就几十万个面,贴图也不规范,1024、2048像素的贴图一大堆,动画骨骼甚至多到百来个,资源没有规范很容易导致加载过慢、画面卡顿、渲染压力过大、骨骼数量过多导致CPU消耗过大。
对于美术资源来说,模型面数并不是越多越好,而是应该在一定数量的限制下尽量最大的努力做到最好的美化。贴图也是要在一定大小的限制下做到最大限度的不是真。
那么如何确定美术资源规范?
在不同平台下对于美术资源规范会有所不同,需要有一定经验后才会积累一些关于某个平台的资源规范经验。
例如在手机游戏中,人物角色模型一般不应该超过5000面,贴图大小不应超过512像素。但是开始一个新的项目针对不同的需求固有的经验可能无法套用那么应该如何确定?
根据运用场景来确定
汤姆猫游戏,强调单一主角的场景,由于主要资源全部服务于主角,因此对主角精细化是很有必要的。即使做到10000面也不为过,同意骨骼也可以很精细,骨骼数量可以多达70个,贴图也可以2048*2048.
卡牌策略类型游戏的核心是静态的3D人物场景和人物角色自动攻击,由于场景是固定的,视角不移动,因此场景模型和人物模型面数和材质上可以稍微宽松一些,人物模型可以在7000面左右,骨骼可以40个,贴图102481024,因为模型数量在视角下并不太多。
第三人称视角RPG,由于视角是第三人称的自由视角,同时看到场景范围会更多一些,视角下下的模型数量也会比较多,因此角色模型的面数要控制在3000面一下,骨骼数量控制在30个一下,建筑模型面数因大小差异可以分为大型建筑7000面以下,中型建筑5000面以下,小型建筑3000面以下,小部件控制在1000面以下。贴图也需要更多的限制,最好为512*512像素角色和中大型贴图512*512,副贴图为256*256,小型和小部件控制在128*128。
战争塔防类游戏,例《如部落冲突》是俯视的视角,能看到整个游戏的内容,模型数量特别多。这时需要将人物角色的模型限制在2500面以内,建筑则限制在5000面、3000面、2000面,其他小部件则限制在750面以内,贴图基本上256*256为主,副贴图为128*128,材质球数量不能超过2个。
如果是《塞尔达传输》《和平精英》这种超大型的游戏,则需要从高空俯瞰整个场景,渲染压力比较大,除了制定美术规范之外,还需要借用其他方法,如LOD技术。
使用反推计算来得出规范
对于模型物体大小差异比较的,无法统一模型与贴图面数的,可以使用全场景总面数来控制。
假设场景中,同屏面数需要控制在40万面左右,下面就以这个40万面的标准开始部署。首先需要计算一个极限值,,假如同屏要达到100个角色,50个建筑,先出去地表模型大概3万面,剩下的数量为37万面,平均每个物体2500面,我们不要平均,而是需要拆分以下等级,小物件为1极,小建筑为2级,中型建筑为3级,大型建筑为4级,人物角色通过为3级,因此这100个角色可以有3000面,剩下的50个建筑,大型建筑5个,中型建筑20,小型10个,小物件10个,可以分配剩下的7万面,小件模型500面以下,小型建筑1000左右,中型2000左右,大型3000左右。
贴图大小同样也可以按照这种方法进行规范,先设定一个总体内存,假设不超过500MB内存,通常内存中包括资源内存,业务逻辑内存,引擎逻辑内存,第三方插件内存,
假设
- 资源内存270MB
- 业务逻辑内存+引擎内存150MB
- 第三方插件内存80MB
其中我们最关心的是资源内存,资源内存包括3D模型,贴图,UI图集,材质球,Prefab数据等等,其中模型和贴图占大头,通常占用80%左右,大约为220MB,这个空间中UI图集通常也会占用比较大的比例,一般在30%-50%,所以留个3D贴图的空间不超过130MB。下面就以130MB的空间来计算场景内的贴图规范。
假设 场景中有100中不同类型的模型,采用的是不用中类的贴图,小型模型有30种,中型50种,大型20种,那么小型模型的贴图不得超过0.6MB,中型不得超过1.25MB,大型贴图不得超过2.75MB。1024*1024像素在RGBA32不压缩的情况下为4MB,通常我们使用的压缩算法的压缩比率为15%-50%,从而可以预计出小模型不能超过2张贴图,且大小不得超过256*256,中型也不能超过2张,大小不得超过512*512,大模型不能超过3张。
除了通过占用内存的大小来制定规范外,也可以使用总张数和总尺寸大小来进行规范。例如,设定场景的总统贴图大小为不超过20张1024*1024像素,那么小模型30种,中型模型平均20中,大型模型平均10种的情况下,就可以规定为小型模型贴图大小为256*256,中型大小512*512,大型模型贴图大小为1024*1024像素以下。
规范的自动检测
无论采用什么方法,都需要不断的检测资源,项目一直在向前推进,资源不断的得到修改和增进,我们需要有一套检测系统来检测资源的问题。如果可以在项目进行前加入实际的压力测试环节,或者在项目进行中加入渲染压力测试环节,则会更有利于对美术资源的规范。
在实际项目中,常有让程序员或美术设计师以人工的方式去寻找美术资源规范的情况,这种方法无论多么严谨,都会有很多遗漏,不能形成系统化的流程与规范,而且会浪费大量的精力和人力。
我们需要编写一个美术资源规范的检测程序,可以设定2-3个小时运行一次,运行后提醒我们有多少资源存在不规范的情况,分别是哪些资源,并罗列出来,甚至可以细化到最近一次是谁提交的。
UWA本地资源检测工具
是一个很好用的检测工具,让我们不用重复造轮子,可以节省很多时间,它对静态资源的检测,包括网格数据,纹理贴图,音频格式,材质设置,Animation数据,着色器,视频格式,prefab数据等等,检测内容包括资源属性,内容,变体分析等。它还具有例子特效性能检测功能,特别好用。除此之外还有场景检测,代码扫描等功能。