今天跟同事聊聊优化帧率的思路,然而这个话题的具体方案是非常多的,且因情景而异,但是思路还是可以汇总下,利用中午睡觉时间在一个同事的协助下做了简要罗列,具体如下:
(出发点:cpu,io,内存,资源,gpu,网络策略、协议结构,ds...and so on)
逻辑科学化,找出耗时点或短板,过滤无用功。比如帧率分级,共享内存代替协议交互。
将同步阻塞的逻辑调整成异步回调。比资源加载。
区分优先的、重要的数据,比如资源优先级队列,aoi。
聚合思想,比如面板依赖多条小协议,可以将将这几条协议独立到另一条只为面板打开做的应答协议中去;统一udpate减少管理对象的访问。
重复创建的对象可以通过对象池(减少重复创建)缓存或改为常驻内存。
使用内存池,减少内存碎片,减少触发拓容频率。
摊帧,比如lua的config加载。
错帧,比如置脏标记(T7属性同步)。
保证一些效果合格的情况下做一些抛弃,比如飘字和协议包阻塞情景。
根据引擎特性做优化,比如合并dc的方法。
预加载。
效果分级,比如不同设备标记不同的等级,根据等级开/关/增强/减弱部分效果。
策略分级,根据不同的玩法情景、设备等级去控制对象数量或缓存时间。
资源优化:模型自身优化或做分级,比如协议结构的优化、模型顶点的减少,lod。
延迟初始化,用到的时候才初始化。