一次关于切换场景的加载速度的优化的报告文档。

来源:互联网 发布:淘宝店铺装修店招尺寸 编辑:程序博客网 时间:2024/06/06 09:08

一,解决结果

1,非缓存新进入场景,以永恒大陆项目为例,新手村和主城的时间在3.5-4.0秒之间(1000元-2000元安卓手机).而贴图量很少的副本,则达到了2秒.

 

2,缓存场景,以永恒大陆项目为例,新手村和主城的时间在2.5-3.0秒之间.贴图量少的小副本可以压缩到2秒以内.

二,负面效果

1,目前的加载并发限制,数量为30个,大小为5MB以内。经过测试,在低端机型上有概率出现闪退。

 

3,大幅度调整了原来的切换场景流程,除了资源加载的并发机制修改外,场景加载的流程也由统一数据结构的链式回调流程改成了尽可能的并发,以压缩时间。(弊端是给后面的切场景流程的扩展性和可变性增加了掣肘)。

三,剩余优化空间

1,在场景加载完毕的时候,场景需要把渲染信息传给显存,并且针对碰撞体进行物理计算的初始化,而且在我们的游戏中还需要打开UI,所以之前在这个时间点会卡,当时的解决方案是,强行把Loading界面延长了0.2秒,以掩盖这个卡顿。是否可以考虑把这个0.2秒的延长去掉。从别的方向想办法。

 

2,砍资源量。需要反复测试,最终在各个机型上得出各资源量的实际耗时。得出一个我们希望的标准。

 

 

三,详细情况阐述

原来的流程

a,加载场景配置文件

b,初始化摄像机

d,卸载原场景

e,初始化对象池(仅第一次进入游戏时)

f,创建场景内对象的虚拟体

g,比对后加载场景资源到内存(图片,材质,预制)

h,加载场景到游戏,拼装场景

i,创建主角(必须在场景之后,主角的位置的问题)

j,加载特效配置文件列表(必须在主角之后,涉及到主角的技能,骨骼,坐骑等特效预加载)

k,加载特效资源到内存(图片,材质,预制)

l,创建主角的战斗宠物

m,卸载多余资源

n,地图拍照。

o,初始化传送点

p,创建安全区

q,等待0.2秒给渲染卡顿缓冲,结束

 

修改后的流程

a,加载场景配置文件,预处理主角的数据,与主角创建剥离,计算出所有要预加载的特效。加载所有特效列表的配置文件。(流程并发)

b,开始所有的资源加载和实例化。(流程并发)

c,创建主角,创建战斗宠物,卸载多余资源,地图拍照,初始化传送点,创建安全区(流程并发)

d,等待0.2秒给渲染卡顿缓冲,结束

 

优化1:

原来的流程,因为采用完成一个任务后执行回调的方式连贯起来,因此每个任务都可能消耗1帧,目前我们的每秒帧数最高为30帧,因此每帧至少消耗33ms。原流程有16步任务,新流程只有4个任务,因此在流程上节省12*33.33ms = 400ms, 约0.4秒。

 

优化2:

强行解除任务之间的先后依赖关系,把数据剥离,或者提前特殊处理.强行使几乎所有加载在流程上并发.例如之前特效资源加载和场景资源加载有先后关系,经实际测试,特效资源加载耗时约1秒(第一次登陆),场景资源加载约2.x秒.合并后,特效的1秒被并入了场景的2.x秒.节约了1秒. 提高了CPU的负载和利用率.

优化3:

资源加载任务的并发由仅仅限制数量上限,修改为限制数量上限的同时兼限制大小,但是放宽数量上限.在加载大量小文件时,提高了CPU的利用率