找回密码
 立即注册
查看: 252|回复: 0

2021 Unreal Open Day感悟

[复制链接]
发表于 2021-12-7 21:00 | 显示全部楼层 |阅读模式
本届UOD的主旋律:ue5。整个议程的主题可以分为3种:

  • 展示强大的unreal引擎以及ue5中的新功能
  • ue5在多个项目中的实践
  • ue5的一些新技术和新特性的技术细节(包括全局光照和反射系统Lumen,Nanite,世界分区系统,open world,Chaos物理系统,Game Features 和Modular GamePlay,Meta Sounds,Control Ring)
从这次open day,体会到unreal 并不仅是一个技术工具,而是一个项目级的解决方案。使用它来制作游戏,绝不是把他作为一个程序的开发工具,而是参与项目开发的每一个人(包括前后端程序、策划、美术等等),都需要能熟练的使用它来进行游戏的制作。就像这次的open day,策划来给我们讲如何进行网络同步以及如何降低带宽成本,制作人来给我们讲如何写代码实现打击感。不要局限于自己熟悉的领域,设计也应该知道如何制作,程序也应该更懂游戏体验,这样配合起来事半功倍,才是一个好的团队。
另外一直以来对ue有些误解,认为它开发门槛高,制作流程复杂,只适合想要做3A效果并且预算充裕的大型项目使用。实际上并不是这样,一个项目是否适合使用ue,更多是取决于开发人员对ue的了解和熟悉程度,而不是项目规模。就像开发语言选择c++还是java,更多是考虑开发人员对语言的掌握程度,而不是其它因素一样。
项目经验分享:

1 帝国神话的优化经验分享

1.1 性能优化——属性复制
对于mmo类游戏的server来说,不管是自研还是使用ds,属性复制永远都是性能优化的重点。自研的server往往是由程序来决定哪些数据可复制、以及用什么样的频率和方式来复制,可控性更强,对可复制属性的收束更强,缺点是需要程序的参与程度更高;而ds的制作方式更灵活,更契合unreal的开发流程,不过因为非程序开发人员也可以决定那些属性可以复制,所以更容易造成性能上的问题,需要程序在后期对性能问题更加关注。
对帝国神话项目来说,他们的性能热点在比较哪些属性需要复制,以及复制时的序列化过程。解决方案是将上述2个部分通过多线程并行化,将不同的NetConnection放入不同的线程处理,每个线程对应一组NetConnection。假设属性复制和序列话需要的执行时间为t,线程数量为n,经过优化以后,理论上单个线程需要的执行时间就变成了t/n。
1.2 性能优化——npc移动
他们的第二个性能热点是npc的移动,解决方案也是将npc的MovementComponent并行化,并行化以后,多个npc同时移动,可能会造成某一帧npc有少量重叠的问题,只能在下一帧处理进行化解,不过这种少量重叠的效果是可以接受的。
1.3 内存优化——NavigationSystem
帝国项目的第三个优化是NavigationSystem的内存占用优化,因为开启了动态构建,导致NavigationSystem占用的内存高达2G。解决方案是开启ue的 LazyGather Geometry和 异步GatherGeometry,但是开启以后,原生ue要求一次只能执行一个 FRecastTileGeneratorTask,所以修改了这部分的代码,可支持一次执行多个。
1.4 性能优化——布料实例的异步创建
创建角色时会创建布料实例,而创建布料实例需要cook布料数据,导致卡顿。解决方案是将布料实例的cook过程异步化。
1.5 Morph Target的流式加载。因为Morph Target占用现存较高,所以将它进行流式加载,提高显存的利用率。根据LOD的等级划分出常驻内存和可流式加载的资源,每帧根据摄像机的远近来加载或者释放资源。
1.6 Mesh的流式加载。
下面这边文章有一些现场PPT分享:https://mp.weixin.qq.com/s/KVryPo1Jtlp4i2mu9rqjmQ
2 幻塔的开发经验分享

2.1 动画状态机
动画状态机分层结构,动画状态机分为3层

  • 基础层:基础移动、跳跃、攀爬
  • 叠加层:武器相关的动画和位移动画
  • IK层:手部、脚部
服务器只执行运动相关的逻辑,维持角色的基础状态。服务器,主控端和模拟端的状态分别执行,但状态切换需要保持一致。
2.2 移动模块的设计原则:胶囊体负责位置,mesh负责表现。
关于大型mmo项目中蓝图的使用:

要不要使用蓝图,对很多ue研发团队来说都是个有争议性问题。问过好几个网易、巨人不同团队的同事,都一致告诉我不要用,随着项目的不断开发,在后期随着资源和逻辑复杂度的提高,它会让你的项目一团糟。
我现在正参与的项目也是在这样的左右摇摆中走过来的,从一开始的完全拒绝,到现在基于框架和规范控制下的使用,蓝图对提高团队的开发效率带来了太多的好处。拒绝使用蓝图就像杨过自断右臂一样,只会影响ue在团队中的发挥。
怎么样合理的使用蓝图,Epic Games的策划分享了一些经验:

  • 避免在蓝图类库或者蓝图宏中引用复杂的资源类型
  • 避免过度使用casting,改用蓝图接口或者Tags,因为casting对性能有较大影响

ue5的新特性就不说了,因为我也还没有详细了解:
可在unreal的官网查看:https://docs.unrealengine.com/5.0/en-US/RenderingFeatures/Lumen/
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-9-23 01:36 , Processed in 0.123416 second(s), 25 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表