【USparkle专栏】如果你深怀绝技,爱“搞点研究”,乐于分享也博采众长,我们期待你的加入,让智慧的火花碰撞交织,让知识的传递生生不息!
这是侑虎科技第1507篇文章,感谢作者Jerish供稿。欢迎转发分享,未经作者授权请勿转载。如果您有任何独到的见解或者发现也欢迎联系我们,一起探讨。(QQ群:465082844)
作者主页:
https://www.zhihu.com/people/chang-xiao-qi-86
小编前言: 本篇文章是笔者Jerish对于Unreal Fest'23 Shanghai大会的参会总结,在本次会议中侑虎科技 CTO 张强也受邀前往分享了议题《Unreal移动游戏中的GPU性能分析与优化》。
这个议题介绍了如何量化分析GPU性能压力,帮助游戏开发团队更加科学地进行GPU的性能分析和优化,制定合理的画质分级策略。 从 GPU 的基本概念说起,结合实际的GPU测试案例和性能数据,介绍了GPU整体的工作机制。
在此基础上,分析和讲解了在GPU运行性能分析中需要关注的核心指标,以及与其相关的重要指标。 核心指标涉及到GPU Clocks和GPU Bandwidth,分析了两者和帧率、能耗、发热之间的一些量化关系,以及如何用于评估整体GPU压力;而重要指标用于细分GPU压力的来源,提供优化的方向,包括Shader复杂度、图元处理、纹理采样方式、带宽分类等相关指标。
接下来,让我们跟随笔者的视角,看看还有哪些精彩议题吧~
Unreal Fest 上海(UFSH),前身是Unreal Open Day,即Epic在国内举办的一年一度的虚幻开发者技术交流大会。本次会议在上海前滩香格里拉酒店举行,为期2天(11.30-12.1),分为A、B两个会场。有来自汽车、硬件制造、建筑、游戏等多个领域的从业者,分享了近60场演讲。
由于个人喜好和精力,肯定无法全都听到。从一名游戏开发者的角度来讲,真正有干货的地方主要集中在:
UE5后续的Roadmap,如
ML Deformer
移动组件2.0
动画蓝图重构,引擎内的动画编辑
Iris网络同步系统
状态树
新的地形和植被系统
多进程Cook
PSO PreCache
Substrate
UE5移动平台优化,如
移动光追
移动Lumen,移动端延迟渲染
Vulkan
朝夕光年S1项目的分享,如
VMM系统
布料系统
Pak策略
多端的Nanite、Lumen优化
C++热更
GAS编辑器
CICD策略
其他,如
祖龙MotionMatch、
诛仙2、鸣潮大世界渲染
Chaos破碎系统
UE调试技巧
腾讯三角洲项目的地形技术分享
其中朝夕光年团队的分享给我的印象很深也很硬核,后面会稍微展开说说。
下面我会按照时间顺序,把我听的内容(红色横线标记)以及一些笔记分享给大家,估计过一两周官方就会有录播,所以更多详细的内容大家可以后续关注虚幻官方的B站状态。
贴一个去年的Unreal Open Day的B站视频链接:
https://www.bilibili.com/video/BV1sP4y117Dg/?spm_id_from=333.788&vd_source=e01555355ad70876dd2a180dd426e982
通常会议前几场都是非技术内容商业演讲,这里不赘述。
虚幻5引擎开发状态
这场是Epic的古董级产品经理 - Arjian Brussee的演讲,主要是围绕目前虚幻5引擎当前已有的功能以为后续的发展目标做介绍,对虚幻发展感兴趣的同学可以了解一下。
补充:大部分的内容我们都可以在虚幻的Roadmap网站里面查到。
https://portal.productboard.com/epicgames/1-unreal-engine-public-roadmap/tabs/94-forward-looking
渲染
Nanite+Lumen+时间超级分辨率(Temporal Super Resolution,简称TSR)的拓展和优化目标在主机可以全开60帧
硬件光追可以跑到60帧
新的地形系统
新的植被系统
新的基于Nanite的SplineMesh
动态的曲面细分功能
大世界
数据分层拓展(支持客户端服务器数据剥离)
HLOD拓展(支持编辑器实时预览生成的HLOD)
OneFilePerACtor(OFPA)拓展支持OneFileMultiActor(OFMA),即一个文件对应多个Actor
完善LeveInstance过滤器,支持SoftObjectPath的引用查询和替换
完善WorldPatition的书签系统
努力支持百万级别Actor的大世界
PCG
实时的分层生成系统
支持AttributeSet 数组配置和生成,可以驱动更复杂的系统以及其资产进行PCG的控制
增加GPU的PCG生成功能
资源依赖的跟踪
为多平台制作不同的生成规则,从而可以在Editor编辑后对应不同平台生成不同的内容(比如移动平台生成的地形复杂度要低一些)
相关Graph和节点的版本标记与管理
更多的quixel资产未来整合到Fab(Epic即将推出的新的资产商店)上面
动画
完全基于引擎自身的动画编辑系统(不依赖外部DCC工具)
动画系统重构,会使用新的VM系统替换旧的AnimBP(进一步提供效率),更完美的接入Motionmach
高性能且统一的动画渲染管线
ControlRig系统的迭代,利用Deformer提高动画性能和表现(MLDeformer是虚幻5.3推出的利用机器学习模拟动画中更复杂的效果的工具,比如肌肉形变等)
提供运行时动态的sequencer,在材质工作流、条件分支、参数化关键帧等方面的还有进一步优化
框架相关(Gameplay、AI、网络)
集中完善状态树(State Tree)的开发和优化,关于状态树的介绍,感兴趣的同学可以参考去年的Unreal Open Day 2022
https://www.bilibili.com/video/BV1ed4y1b7Zk/
匹配大世界的NavMesh和Navlink开发和优化
基于ECS架构的MASS系统迭代
新的角色移动系统(在5.4以后会公布)
新的Iris网络同步系统
GAS的持续迭代和优化
客户端预测系统迭代
smartObject的拓展,不仅仅用于AI相关,可以辅助交互等Gameplay逻辑
物理模拟
物理同步
Chaos的调试工具开发
基于物理的移动组件(前面提到的移动组件2.0,应该不是CharacterMovementComponentAsync.h)
自定义的载具系统
针对肌肉、布料等模拟利用机器学习做进一步的优化(Deformer)
工作流
多进程、增量式的Cook功能
使用异步数据读取来优化第一次打开编辑器慢的问题(UE5一直在开发新的资源加载管理系统)
多平台的快速预览
平台&移动端
移动端虚拟纹理贴图优化、新的ASTC编码器、fog/地形等剔除的优化
Nanite目前已经支持M2架构的机器(Beta版本)
XCode、IOS相关的迭代优化
android Vulkan的支持
PSO PreCache的改进(关于PSO,简单来说就是对项目可能用到的shader进行预编译然后缓存起来加快游戏的加载 https://zhuanlan.zhihu.com/p/572503905)
延迟渲染在高端移动机器上的运行
尽可能让编辑器里面预览与真机相符
硬件光线追踪
移动端支持Nanite
管线&音频&其他
外部资源导入完善
引擎内置建模工具完善
音频在开发完善AudioInsight,支持节点的剔除
从创建小场景到构建大世界的工作流升级
Epic的高级TA——Chris分享,主要围绕虚幻5针对大世界场景编辑和管理的一些功能以及未来相应的开发优化计划,包括:
如何对资源做更完善的校验和检查
DataLayers的使用建议
LevelInstance的使用技巧
OFPA与OFMA,OFPA会导致大量的Changelist,在PCG的时候不够友好,所以后续会有OFMA(One file multi actor)的产生
对于OFPA在文件夹里面对应一个文件,文件名称是生成的GUID,我们拿着这个GUID可以在关卡里面直接搜索
MipMap是可以离线生成的,而且可以通过指令(Build窗口的Build Minimap按钮)处理 -run=WorldPartitionBuilerCommandlet -AllowCommandletRendering -builder=WorldPArtitionMiniMapBuilder
HLOD是大世界里面非常有用的优化方法(对N个模型进行按照距离远近等进行动态合并),会增加一定的内存,起始的Build也比较花费实践。使用指令 wp.Runtuime.ToggleDrawRuntinmeHash2D可以实时在屏幕上显示HLOD的格子在屏幕上。HLOD有三种类型:Instaning Merger、Mesh、 SimplifiedMesh
其中有一些测试数据可以给大家参考一下。
关于HLOD的一些实验数据:
关于堡垒之夜的一些数据:2km*2km的地图。10万个actoor,128mi的格子,256米的视野。服务器一开始资源全部加载(包括地形)。
关于黑客帝国的一些数据:4km*4km的地图,10万左右的actor,128m的格子和128米的视野。依靠Houdini和RuleProcessor插件做城市生成,没有任何landscape。
未来会完善提供:
不同Datalayer的逻辑运算
World Partition的书签功能
大世界的静态光照烘焙
OFMA
Level Streaming Persistence,流式关卡的持久化,更好地配合Gameplay做一些场景的快照保存
DS适配World Partition的流式处理,基于流源位置进行同步,匹配大型世界的服务器优化。
内容创作的新时代:UEFN的生态与规划 UEFN:你的下一款游戏,何必是游戏
这两场主要是围绕着UE官方提供的虚幻堡垒之夜特供版编辑器进行介绍,其实可以当成是简化版的UE编辑器,可以利用堡垒之夜的资源做编辑。官方是希望更多的玩家可以利用UEFN打造类似Roblox的创作者自发创作的游戏生态,目前堡垒之夜有7000万的月活,每天有百万级别的玩家在体验UEFN创作的新内容。
注意,想使用UEFN自定义游戏的话,必须要同时下载堡垒之夜游戏以及UEFN编辑器才行。另外,关于Verse脚本,感觉官方一开始也是想让他先用于UEFN的开发使用,短时间可能还无法正式投入UE5的开发环境中。
从实践中理解Substrate材质
文磊大佬的分享,列举了一些实践过程的细节。关于新的材质系统,简单的理解就是,可以比较完美实现SSS效果(次表面散射)的分层材质系统,是真正的材质效果叠加,在主流的渲染器上这个功能已经有一段时间了,不过虚幻是最近才引入的,目前还处于试验阶段。目前B站上已经有一些相关的分享(去年这个系统还叫做Strata)。
参考:
https://www.bilibili.com/video/BV1Ge411N7Bm/?spm_id_from=333.788&vd_source=e01555355ad70876dd2a180dd426e982
注意:该系统与旧的材质系统无法互相转换,一旦将开启Substrate功能并保存旧的材质,老的材质将会无法还原。
《晶核》中场景氛围变化在关卡以及团队副本设计中的应用
英灵殿第一位勇士登场,晶核本身品质还是很好的。这里介绍了一些动画的制作管线,可以很好地适应PV的制作,每次新出副本和角色都能使用到。另外,晶核团队在副本设计上很重视环境氛围的变化,通过多套光照、TimeOfDay系统(TDO)、集成TOD参数的Niagara粒子完成不同Boss阶段不同的光照环境。后期他们还利用后处理、Buff标记来实现两个世界的无缝切换和战斗,玩家体验非常不错,可以借鉴参考。
总有一个你不知道的虚幻引擎调试技巧
这里面有很多细节都是开发中常常用到的,比如Log的开关、Natvis修改调试窗口里面的显示内容、查询Object的引用和路径、游戏内自由相机的调试切换等,我直接贴图。
利用虚幻引擎打造《诛仙2》的试试光影技术
手机上使用的是Forward+,可以看到直接在虚幻4的管线上面改了不少,光照是自定义搞得半实时GI。渲染我不是很熟,后面等官方录播出来可以看视频。
Iris Replication Sysytem初探
Iris是Epic正在开发的下一代网络同步系统,从可维护性、计算性能、带宽性能等多个方面进行优化和提升。
之前也有大概了解过,包括重写了序列化方式,修改了原来每个actor一个channel的设计,改为一个connction一个专用的通道,可以更好地减少遍历,减少虚函数使用。
每一个NetObject都对应RepicationSystem中一个NetHandle,所有操作都通过handle处理(替代原来的NetGUID)。
优化拷贝流程,保存大量FNetBitArray形式的缓存,用于各种类型的标记,原来所有上层的代码每次同步前都涉及到用户逻辑到BitWriter,再到Connection,Socket等多层拷贝,修改之后可以减少不必要数据的拷贝。
目前官方测试,在性能上大概可以快一倍左右,100个玩家内存能省个几百兆。我个人感觉Iris属于一种更合理的同步架构设计,可以优化原来框架下各种性能上的问题,但是对UE同步的功能上是没有阉割的,该序列化的内容并没有减少太多,所以并不能带来质的飞跃,也不太可能单靠Iris就支持传统MMO数量级的角色同步。
参考:虚幻引擎中的Iris简介
https://docs.unrealengine.com/5.2/zh-CN/introduction-to-iris-in-unreal-engine
渲染路线图
每年王祢大佬都会带来一场干货满满的技术演讲,这次主要是围绕UE的渲染发展路线展开,直接讲了整整两个小时。到后面我实在是太累了,有点分神了。
Shader的编译优化
PSO的问题以及目前新的优化方案,PSO预缓存(5.3默认开启)
渲染架构的并行化
RHI现场并行优化,“非及时”的Conmmandlists被转移成了泡在工作线程上的指令链任务,当前任务链常一定指令后悔棋一个新的指令链任务
NeralNetworkEngine,机器学习引擎辅助开发,包括编辑器资产标记转换、AI推理、MLDeformer、GPU降噪、GPU像素推理等
BindlessRendering Vulkan光追支持 新的渲染资源API
5.4以后改善Frame pacing ,优化VRAM管理
虚幻引擎5大世界百人射击游戏的跨平台同居可伸缩性挑战和尝试
第二天第一场是来自字节S1项目的分享,该游戏是基于虚幻5的一款二次元大世界射击游戏,团队里面用到的几乎都是目前业内最主流和前沿的新技术(比如Nanite、 lumen、 VHM、 VSM、 HLOD、 散列Pak、 GAS编辑器、 Deformer、C++热更等)。考虑到项目才立项两年左右,真的不是一般团队能搞出来的。
这场分享非常硬核也非常干,几乎可以说是这两天里面价值最高的一场分享,被砍掉属实可惜(不过后续传言腾讯打算收购这个团队):
Nanite管线的优化
移动渲染管线优化
HLOD的管线使用
阴影优化,使用了UE5 VSM (Virtual ShadowMap)
GI 使用lumen
移动端的GI方案,算是自研了一套方案
使用了VHM landscape,即基于WorldHeight的RuntimeVirtualTexture(下简称RVT)、带有cull/ occlude/ LOD等功能的高精度Mesh
使用了VirtualTexture
UMG:搞了自动合图和切分工具(自动图集)
反射使用了lumen reflection,reflection capsture,平面反射
AO使用GTAO,延迟一帧采样AO
抗锯齿使用TAA,屏幕分辨率可以自动平滑切换
Gameplay方面,自己团队拓展了带有时序和互斥表格的GAS编辑器
物理方面:主要是介绍了物理内存的优化方案,使用了物理的LOD,对渲染和碰撞进行解耦。不过物理LOD理论上会影响射线检测的判定,对于射击游戏可能还会有点问题?
CICD:搞了一套UE自带Guantlet的自动化测试系统
更硬核的是这个跨平台的C++热更系统:看起来自己搞了一套VM生成器和C++ Runtime,对代码进行中间语言的生成和DIff(其实没有太听懂哈哈)。我还没见过哪个团队这么搞得,不知道他们是不是连脚本语言都不用了(这次分享没有提到Lua或者TS)
跨平台的本地化系统:
跨平台的Patch系统:参考了查理鹏大佬的HotPatcher(GitHub - hxhb/HotPatcher: Unreal Engine hot update manage and package plugin.)但是方案有所不同,做了散列Pak。
AIGC:AI这块也有所尝试,不过仅限于查相似纹理、通过图片生成深度图等
到这里是S1主程的分享,下面是瑞兹大佬关于动画和布料相关的分享。
动画组使用他自研的Virtual Motion Matching插件,这个东西比较大胆的改造了传统的动画蓝图的数据流,全部使用动态的Montage和静态配置的Sequence资源来进行驱动,能很好地支持网络同步,也是因此才能以插件的形式不侵入源码实现完整的动画功能。
既然是MotionMatching,也会利用动捕对数据进行采集。
移动这块也有修改,对不同的移动模式进行解耦,这块看起来和UE官方的发展思路是相同的。
插件也支持各种动画Wrap。
关于DS这块:他们没有更新物理资产(Bodyinstance),估计后续的射线检测也是自己手动算的。
布料这块从Kawaii、SPCR、AnimDynamic三种中选了Kawaii,在此基础上搞了虚幻PoseDriver管线并加入AI的仿真模拟(没用虚幻5的ML Deformer)烘焙出来布料的运动数据,性能非常好(我理解大概是这样,有错误请纠正)。
虚幻引擎5全端卡通渲染管线
YivanLee大佬分享的内容很干,很多内容都是实践性的结果和细节,我很多都听不懂。有兴趣的同学等后续录播,或者可以去看他的知乎专栏。
https://www.zhihu.com/column/YivansUnrealEngine5StudyNotes
虚幻引擎5Motionmatching实践简介
目前使用Motionmatch的项目越来越多了,UE里面集成的Motionmatch功能目前是可以使用的,基本思路是动捕制作一批动画资源,然后在动画蓝图运行时使用MotionMatch的节点去实时查询当前状态下最匹配的动画,查询的基本思路是根据特征向量(速度、坐标、方向等,也可以自定义)去动画库里面去搜索最匹配的一帧动画,然后使用。
祖龙他们使用的MotionMatch+PoseSearch的插件处理角色的Locomotion,PoseSearch插件使用的KDTree对动作进行分组和查询,他们对搜索过程进行了PCA降维、多线程等优化,其中还提到了使用Rewind Debugger(虚幻5.1AnimInsight配套的动画调试工具)进行MM问题的追溯。
移动平台Lumen与光线追踪
官方已经开始适配延迟渲染到高端的移动端了,他们在此基础上改造Lumen,并且尝试引入硬件光追(管线如下)。现场有几个联发科的机器有实机效果,目测20多帧,肯定还是没法用的。
2023年虚幻引擎最新的功能和技巧
仍然是Chris的分享,大概框架如下:
Lumen5.0
Substrate材质系统
IK Rig完善
基于Chaos全新的PhysicalComponent
Motionmatching 5.2版本
SkeletonMesh Editor
更完善的建模工具、Splie工具以及烘焙贴图工具
Geometry Script
兼容P4的引擎内版本控制功能
通过蓝图试试预览对应的C++工具
基于MVVM的设计模式
StateTree的迭代
虚幻引擎5移动平台新功能介绍
来自Epic中国的刘炜进行分享,介绍了移动端的改造,包括GPUScene重构,Runtime的虚拟纹理贴图,GPU裁剪,移动端的延迟渲染,新的半透明渲染方案(Thin)、新的PSO缓存系统、Vulkan屏幕旋转优化、FSR插件、QSR插件、M2设备的Nanite和Lumen支持、移动光追等。
白荆回廊应用虚幻引擎进行快速迭代开发实践分享
白荆回廊是烛龙近期开发的二次元回合制手游,这次分享主要提到了其内部在历史项目中大量使用lua、XML以及如何迁移到新的虚幻项目中的。
他们有自己的lua框架叫ukslua,会自动化对lua参数试试做检查和提示。
有自己的UI框架AurogonUI,配合XML自定义布局和Slate实现基础元件,Lua实现界面逻辑,没有用虚幻里面的UMG。
另外,还提到了项目组遇到的PSO问题,最后的解决方案是单独制作了一个关卡并用蓝图逻辑去定时自动收集PSO。
关于CICD,通过多种方案来加快项目的构建,包括纯代码更新跳过资源Cook、纯资源更新跳过Build逻辑等
《鸣潮》基于虚幻引擎4的多平台效果和性能优化实践
主要都是渲染管线相关的内容,直接贴一些图吧。
移动端的延迟渲染
角色鬼影闪烁优化
TAAU管线改造
OnePassDeferredShading管线改造
多平台树的方案,插片模型树+广告版树+Imposer树,根据距离切换
自然可控的Chaos物理破碎
主要是介绍了一下常规场景破坏的实现方案,Chaos+Niagara。解释了Voronoi和Boolean几种常见切割的差异以及应用场景(例如玻璃破碎更适合Voronoi的Radial方案),围绕着如何优化目前的效果和性能给了一些建议(碰撞简化、剔除、睡眠等),以及通常的约束处理(使用BoundsOverlapFilter参数避免悬空)。
揭秘《三角洲行动》如何在虚幻引擎4中实现先进的端手游一体地形渲染方案
三角洲行动前段时间开放过测试,效果和反馈都不错,这次是主要针对地形系统的分享。
他们的思路是先提高游戏品质,然后再优化下方到低端平台,目前三角洲的手游在性能上已经较大幅的领先于他们自研的CODM。
整个大世界地形可能用到32层的材质,传统的简单权重混合材质方案无法满足。
支持权重的高度混合方案,可以更好地展现地形的混合效果。
由于原生lanscape里面有大量的冗余数据(VB,高度图,碰撞,Grass),内存占用和Drawcall无法Instance问题都很严重,所以他们重构了原生的地形系统。
总结如下:
会议整体内容以技术分享为主,除了演讲外,现场还有一些试玩展台,比如卡里比丘、帝国神话、鸣潮、失落之魂等。以上就是本次我对于Unreal Fest大会的总结,欢迎一起讨论交流。
文末,再次感谢Jerish的分享,作者主页:https://www.zhihu.com/people/chang-xiao-qi-86,如果您有任何独到的见解或者发现也欢迎联系我们,一起探讨。(QQ群:465082844)
近期精彩回顾
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.