DragonUncle
发布于

开放世界3D大游戏性能优化挑战和探讨!

大家好!我叫龙叔,独立游戏《龙道》制作人。今天来谈谈开放世界大游戏性能优化挑战课题。

基于开放世界的探索、战斗和养成3D游戏本身开发工作就是大工作大挑战,系统性能的优化更是大文章。龙叔看最近没啥活动,也不推荐游戏又要班门弄斧了,探讨一些自己的粗浅认识,根本谈不上经验,请大家勿喷,希望抛砖引玉,得到高手更多的支持。总之,任何游戏的运行性能优化方法不外乎三大方面:减少不必要的计算、优化资源使用和合理利用引擎特性。

一、 减少计算开销方面

1、避免使用Tick:非必要组件应禁用Tick,减少每帧计算压力 。

龙道案列:对于重复性工作,如敌人的打击系统、内力恢复系统等一个个重复性循环系统,最好避免使用Tick,建议自己使用底层C++开发系统时钟SystemTimer,需要时启动时钟StartSystemTimer,用毕ClearSystemTimer清除系统时钟释放资源;这儿特别要指出的制作人最好禁用虚幻的敌人AI导航系统,自己独立开发自主AI导航系统,性能更优更灵活;

2、关闭物理模拟:禁用未使用的物理模拟(如角色控制器或碰撞检测) 。

龙道案列:这里龙叔特别要指出的是,虚幻有个很大的坑就是虚幻对所有的StaticMesh静态网格体均默认启用了产生重叠事件并对所有对象启用碰撞BlockAll。反之,虚幻对SkeletalMesh骨骼网格体处理非常优异,均进行了关闭。不关闭的话,待游戏中模型达到一定数量的时候系统帧率会下降很多很多,造成的后果非常严重,据龙叔测试,关闭与不关闭相比,性能提升3-5倍;直白点说,如龙道航船系统,就启用船体碰撞,其他桅杆等全部取消。骑马系统就马体碰撞,马鞍、马甲等统统取消;

3、限制动态光源:动态光源消耗性能,优先使用静态光源或光照贴图 。

龙道案列:用静态光源代替,采取事先渲染好,尽量不用或少用动态光源,非常不可的话,严格控制光源数量,严格注意光源之间的重跌,重跌会造成全局光源的争夺,大大浪费性能资源;甚至可以启用光照贴图代替动态光照,这个龙叔用的不多,因为美术龙叔不专业;

二、 资源优化

1、使用C++替代蓝图:C++代码执行效率更高,适合核心逻辑 。

龙道案列:99%采用C++底层语言开发游戏逻辑,开发并拥有一个强大的C++游戏控制系统,并取得《计算机软件著作权》;

2、启用Steam网络优化:通过Net模块减少网络传输开销 。

龙道案列:建议用C++底层语言直接开发游戏Net网络模块,实现无损链接,这块龙叔做的不够,还需优化改进,前期为了《龙道》能够尽快上线发布,尽量控制费用成本、时间成本、采取了Steam的网络接口模块实现多人游戏;

3、异步加载资源:首场景采用异步加载策略,降低启动延迟 。

龙道案列:直接将大场景打摔成小场景(多小科学合理,龙叔只能说边拆边测,直至帧率在60帧率以上才合格),采取开放世界分区,使用子场景实现自动流式异步加载场景模型,边加载边写卸载,实现当前计算机内存资源科学合理高效;

三、 渲染优化

1、简化后期处理:避免复杂后期材质(如夜视仪效果),仅保留必要效果 。

龙道案列:虚幻优异功能非常独特,性能指标也非常多,龙叔一直在摸索,一开始使用默认全启用,然后做减法,关闭不必要指标,在功能与性能之间找到平衡点,如为了性能关掉了阴影功能,现在性能改造的相对优异了就再次启用阴影。就是阴影一项也很有研究,半径越大性能越耗,需要每个人自己花时间慢慢调;

2、优化DrawCall:合并相同材质的网格,减少GPU绘制次数 。龙叔对差不多的建造或岩石均进行了ActorMerge合并,大大降低了性能消耗;

3、采取动态植被系统:采取程序式植被,尽量少用或不用静态网络体模型直接当植被。

龙道案列:龙叔使用地编植被,大大降低效能消耗,进入龙道满眼的原始森林、一望无际的草地,但渲染性能只消耗5%左右,不足之处就是植被没有碰撞。所以需要高体验的游戏,需要自己设置玻璃墙碰撞体;与一(2)类似,关闭物理模拟碰撞可以大大优化整体系统性能。

四、 工具辅助

1、使用FramePro分析UI性能:定位帧率瓶颈,优化UI渲染 。

2、GPU Skinning:将顶点动画计算移至GPU,降低CPU负载 。

3、人工智能AI: 这个估计又要有人喷我了,不说了。。。 。。。

浏览 (165)
点赞 (2)
收藏
1条评论
DragonUncle
DragonUncle
《龙道》正在冬促预热中,新史低1折7.5元,匹歪也有充足CDKey供应。
点赞2
评论