《乱世王者》是由腾讯天美工作室出品的一款战争策略手游,2017 年 8 月开启测试,数天之内便取得了 App Store 中国区畅销榜前三的成绩,充分体现了市场、玩家对于这款游戏的认可。
在尊重和传承经典 SLG 玩法的前提下,游戏做出了不少突破:游戏构建了一个大世界,为玩家呈现更加真实、热点的游戏环境和生态;游戏融入了极具乐趣的养成模式,使得游戏策略性更强;游戏内加入了如 AR 寻宝玩法、 自定义头像等酷炫新玩法。
6 月 22 日,来自腾讯的游戏高级工程师肖程祺受邀出席了 Cocos 上海沙龙,向开发者分享了《乱世王者》的深度优化方案,包括《乱世王者》项目中地形处理和优化思路,深入讲解了游戏针对纹理内存优化的解决方案,并分享了项目对引擎渲染层所做的一些优化。
肖程祺
在获得程祺同意后,Cocos 将其优化方案整理成文,同更多开发者进行分享,具体内容如下:
《乱世王者》深度优化方案分享
腾讯 肖程祺
《乱世王者》是基于 Cocos2d-x 开发的一款战争策略类游戏,需要在游戏玩法创新的同时,在美术品质和性能方面也做出突破。
一、SLG 地图的微创新和优化
美术上想要增加细节表现力,让地形的细节更加丰富,同时需要增加 3D 透视的感觉。
实现成果:
1、丰富的细节
地形细节丰富的代价:
资源量膨胀,地形纹理是原来的5倍。
地形类型新增:沙漠,雪地,每个地形的变化增加。
tile 数量从 100 块左右提升到 500 多块。
渲染压力提升,渲染层数从 2 层变 5 层,拖动地图的时候重新组织数据的开销增加。
面临的问题有:
内存增长:纹理扩大了 5 倍
- 地图层数增加后,加载和拖动地图更新的效率成倍降低
- 贴图数量增加后,需要自己去实现 batch
我们的优化方案:
(1)提升贴图的利用率,减少地图纹理的内存
重新排列 tile,贴图利用率从 50%提升到 85%
效果:
5 张贴图最终变成 3 张
(2)建立更高效的数据组织,提升加载效率
地图数据离线处理后,以 protobuff 的数据格式存储,并使用 zstd 无损压缩进行处理,加载速度和大小都得到保证。
(3)合并地图批次,减少不必要的顶点数据
每一层地图的都根据 TextureID 排序后绘制,由于顶点和 UV 数据已经存储在 VBO 里面,只需要根据裁剪结果修改 indexbuffer 即可。5 层一共 3 张贴图,意味着 drawcall 数量不会超过 15 个。
2、3D 透视关系效果
(1)处理3D透视关系
- 场景用 3D 相机绘制
- 地图上的物体“站”起来
所有物件绕x轴旋转至垂直于摄像机的fov中线的角度
(2)解决大物件的视角偏差
边缘位移: