UE5:新一代虚幻引擎初探

终于,在2021年的五月底,UE5终于要推出第一个预览版本了,虚幻引擎5——将于中国时间5月26日周三晚10点开启抢先体验计划!
对UE5期待许久,去年Nanite和lumen一石激起千层浪,时隔一年,终于能够实际体验到了。
过去一年,关于UE5的技术消息不多,我做过了一些Epic披露的关于UE5相关的信息总结和分析,有兴趣的可以移步notes/ue5中查看。本篇文章会记录上手UE5的一些体验,相较于UE4开发方式的变动,为UE4到UE5的过渡,以及将UE5应用到生产环境做一个技术预研,近期会持续更新。

UE5官方资料:

发布的演示视频:

最值得关注的点当然是Lumin/Nanite,并且引擎集成了Quixel Bridge,可以直接导入资源,场景编辑流程变化很大。
增加强大的动画支持,在引擎中直接编辑和复用动画资源更方便了,能够根据场景自适应动画,非常Amazing啊!

GamePlay方面增加了一种叫做Game Feature的机制,支持使用模块化的方式创建和发布游戏内容,对于资产管理和打包的流程相较于UE4也有变动,从热更新的角度来看,估计需要增加支持Game Feature作为资产包的功能支持,准备近期有时间先把HotPatcher目前的版本升级到UE5。
准备近期有时间对UE5中的新机制做个功能预研然后写几篇文章。

可以在EpicLauncher里安装二进制版本:

UE5预览版源码github地址:ue5-main,需要下载的依赖ue4-gitdeps与UE4的版本有相同的部分,可以拷贝到UE5代码的.git/ue4-gitdeps目录下,在Setup.bat时可以减少下载的内容。
并且,Epic随UE5一起放出了古代山谷项目,可以点击连接从Epic Launcher下载,文档:Valley of the Ancient Sample


我的博客中在发布之前关于UE5的分析笔记(notes/ue5):

附Epic中国直播的UE开发路线图视频:


注意:本次发布的预览版并不包含新的脚本语言Epic Verse,估计还需要挺长一段时间的更新才会支持。

Platform Support

UE5已经抛弃支持32位平台,并已支持Apple Silicon设备(M1),但Editor非Arm原生,仍需要Rosetta转译执行。
Lumen和Nanite不支持移动平台、上一代主机平台。
建议设备:GTX 1080+。

引擎中增加了Unreal Trunkey,相较于UE4,可以非常方便地在团队之间统一配置平台SDK。
UE5集成的各SDK版本: New: Platform SDK Upgrades
Windows编译器版本最低支持VS2019 v16.4及以上的版本 ,不再支持VS2015和VS2017。

Engine Code

Github上提供了两个UE5的代码分支:ue5-mainue5-early-access

两者的区别是:

  • ue5-early-access:与Epic Lacunher相同的源码分支
  • ue5-main:Epic的开发分支

引擎代码的组织方式相较于UE4没有变动,目前看到Module的代码基本与UE4保持一致,所以UE4代码升级到UE5应该问题不大,需要解决的应该是以下几点:

  1. 原先依赖的模块代码组织变动
  2. BuildSettingsVersion被设置为Latest带来的警告等级的变化
  3. CppStandardVersion默认为Cpp17(Latst为Cpp20)
  4. 检测引擎版本的代码,如ENGINE_MAJOR_VERSION变为5ENGINE_MINOR_VERSION变为0

在TargetRules中增加了一些新的编译选项:

  • DefaultWarningLevel
  • DeprecationWarningLevel
  • bWarningsAsErrors
  • bEnableCppModules

Nvdia的组件则从UE4的默认开启变成了默认关闭(不确定是否为了兼容UE4项目升级保留,有可能后面会移除,这一点UE5的文档中也有写),物理系统在UE5中默认使用Chaos:

1
2
3
bCompilePhysX = false;
bCompileAPEX = false;
bCompileNvCloth = false;

引擎中ModuleRules的几乎没有变动,没有新加的参数,只是针对bEnableCppModules做了检测。
UE5的编译系统可以看作是UE4的常规升级,有时间我会先把我开源的插件升级到UE5进行测试。

同时,UE5相较于UE4.25,引擎中增加了几个新的Programs:

  1. BaseTextureBuildWorker
  2. ChaosVisualDebugger
  3. DerivedDataBuildWorker
  4. EpicWebHelper
  5. HeadlessChaosPerf
  6. Horde
  7. InterchangeWorker
  8. EpicGames.Core/Jupiter/MongoDB/Perforce/Perforce.Managed
  9. SwitchboardListener
  10. TextureShare
  11. UnrealBuildToolTests
  12. UnrealObjectPtrTool
  13. VirtualProduction

有时间再来具体分析作用。

Editor

UE5新Editor的文档介绍:Navigating the New Unreal Editor Interface

启动界面

个人觉得相对于UE4的拟物化UI风格更耐看一些。

可以在Launcher界面选择启动UE4项目:

项目设置与编辑器设置,与UE4的分类保持一致,也可以使用Rider作为开发IDE并刷新工程。

具有比UE4更好的本地化语言支持:

Project

UE5创建项目组织基本与UE4保持一致,代码开发流程与UE4没有区别。

对开发硬件要求更高了,我的机器位10606G,在ThirdPersion项目Editor只能跑到80fps:

估计在我的机器上打包之后最多只能跑30fps。

Data Drived CVars

UE5中还增加了Data Driven CVars的支持,可以在项目设置中配置Console Variables


可以在IConsoleManager::Get()获取,相较于UE4,无需在代码中创建TAutoConsoleVariable对象,更为方便,它被存储在DefaultEngine.ini中:

DefaultEngine.ini
1
2
[/Script/Engine.DataDrivenConsoleVariableSettings]
+CVarsArray=(Type=CVarInt,Name="t.testvar",ToolTip="",DefaultValueFloat=0.000000,DefaultValueInt=123,DefaultValueBool=False)

Cook for Platform

UE5终于支持在编辑器中Cook非本地平台了(其实就是为平台默认增加了Cook按钮,在UE4中HotPatcher中也已支持同时Cook多个平台)。

GamePlay

UE5带来的Game Play的变动较多,如Game Feature等,准备有时间再进行详细的分析和使用。

Plugins

UE5创建插件和UE4的组织方式和Build.cs代码也没有变动,我把我之前开源的ue4-export-nav-data插件放到UE5工程里,出现的错误也只是符号找不到,是引擎内实现有变动,通过简单的修改可以直接编译通过,但UE4的代码模块是直接可以拿到UE5编译的,需要处理对应的符号查找错误。

我已经把ue4-export-nav-data插件升级支持UE5了,并且在UE5上导出数据与detour验证通过,详情请看之前的文章:Export Recast Navigation Data from UE4,仓库地址为:ue4-export-nav-data

Assets

UE5资源管理的变动,新特性支持了Game Feature机制,能够模块化构建游戏内容,开启之后可以在项目设置的Asset Manager中看到GameFeatureData的选项,说明GameFeature是已经兼容了打包的方式的,有时间做个详细的分析。

UE5同样支持PrimaryAssetLable机制来标记资产,与UE4中没有区别,同时编辑器选项中增加了允许ChunkID指定功能,开启之后可以在资源右键中看到以下菜单:

Package

蓝图项目对Apple Silicon的支持位仅限通过Rosetta2运行,C++项目支持本地Apple Silicon打包。

UE5中的打包选项移动到了以下位置:

打包时同样使用UAT执行,命令如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
cmd.exe /c "
"C:/Program Files/Epic Games/UE_5.0ea/Engine/Build/BatchFiles/RunUAT.bat"
-ScriptsForProject="C:/Users/lipengzha/Documents/Unreal Projects/ThirdPerson_UE5/ThirdPerson_UE5.uproject"
Turnkey
-command=VerifySdk
-platform=Win64
-UpdateIfNeeded
-EditorIO
-project="C:/Users/lipengzha/Documents/Unreal Projects/ThirdPerson_UE5/ThirdPerson_UE5.uproject"
BuildCookRun
-nop4
-utf8output
-nocompileeditor
-cook
-project="C:/Users/lipengzha/Documents/Unreal Projects/ThirdPerson_UE5/ThirdPerson_UE5.uproject"
-ue4exe="C:\Program Files\Epic Games\UE_5.0ea\Engine\Binaries\Win64\UnrealEditor-Cmd.exe"
-platform=Win64
-ddc=InstalledDerivedDataBackendGraph
-installed
-stage
-archive
-package
-build
-iostore
-pak
-prereqs
-archivedirectory="C:/Users/lipengzha/Documents/Unreal Projects/ThirdPerson_UE5/Package"
-nodebuginfo
-clientconfig=Development
-nocompil
"

代码的编译命令与UE4也没有区别:

1
2
3
4
5
6
7
8
9
10
C:\Program Files\Epic Games\UE_5.0ea\Engine\Binaries\DotNET\UnrealBuildTool\UnrealBuildTool.exe 
ThirdPerson_UE5 Win64 Development
-Project="C:\Users\lipengzha\Documents\Unreal Projects\ThirdPerson_UE5\ThirdPerson_UE5.uproject" "C:\Users\lipengzha\Documents\Unreal Projects\ThirdPerson_UE5\ThirdPerson_UE5.uproject"
-NoUBTMakefiles
-remoteini="C:\Users\lipengzha\Documents\Unreal Projects\ThirdPerson_UE5"
-skipdeploy
-Manifest="C:\Users\lipengzha\Documents\Unreal Projects\ThirdPerson_UE5\Intermediate\Build\Manifest.xml"
-NoHotReload
-log="C:\Users\lipengzha\AppD
ata\Roaming\Unreal Engine\AutomationTool\Logs\C+Program+Files+Epic+Games+UE_5.0ea\UBT-ThirdPerson_UE5-Win64-Development.txt"

Cook命令也相同:

1
2
3
4
5
6
7
8
9
10
C:\Program Files\Epic Games\UE_5.0ea\Engine\Binaries\Win64\UnrealEditor-Cmd.exe 
"C:\Users\lipengzha\Documents\Unreal Projects\ThirdPerson_UE5\ThirdPerson_UE5.uproject"
-run=Cook
-TargetPlatform=Windows
-fileopenlog
-ddc=InstalledDerivedDataBackendGraph
-unversioned
-abslog="C:\Program Files\Epic Games\UE_5.0ea\Engine\Programs\AutomationTool\Saved\Cook-2021.05.27-12.04.09.txt"
-stdout
-CrashForUA

测试打包ThirdPerson非常慢。打包之后的目录结构与UE4相同:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
C:.
| Manifest_NonUFSFiles_Win64.txt
| ThirdPerson_UE5.exe
|
+---Engine
| +---Binaries
| | \---ThirdParty
\---ThirdPerson_UE5
+---Binaries
| \---Win64
| ThirdPerson_UE5.exe
| turbojpeg.dll
|
\---Content
\---Paks
global.ucas
global.utoc
ThirdPerson_UE5-Windows.pak
ThirdPerson_UE5-Windows.ucas
ThirdPerson_UE5-Windows.utoc

但是除了pak之外多了两种类型的文件ucasutoc两种文件,在运行时Mount pak时也会mount它们,看了下代码在UE4.25/26就中存在,有时间详细地分析下它们的作用和加载流程。

Open UE4 Project

UE5的文档中写道:支持UE4.26及之前的引擎版本项目升级到UE5,UE5会和UE4.27并行存在,不会保证与4.26之后的版本保持兼容。并且,UE5项目无法降级到UE4。

但是就目前的情况而言,把4.26的工程升级到UE5还是有不少的错误,但这些错误基本都是上面介绍的那几点中的情况,花些心思适配即可。

其他兼容性问题补充

UE5的其他的兼容性问题补充:

  1. UE4Editor*.exe更名为UnrealEngine*.exe,原先依赖UE4Editor*.exe路径的需要修改;
  2. UnrealBuildTool从UE4中Binaries/DoNET移动到Binaries/DoNET/AutomationTool目录下,会导致UE4的UnrealVersionSelector生成sln失败;

平台名的变化:

  1. 去掉了一些资源平台,新加了一些
  2. WindowsNoEditor/MacNoEditor等统一去掉了NoEditor后缀

总结

总的来说,UE5的核心更新在Lumen和Nanite带来的美术资源与场景编辑流程的革新,以及对引擎内对数据驱动动画的强大支持。UE5相较于UE4在编程方面没有非常大的变化,较新版本的UE4工程代码和插件能够比较轻松地升级到UE5,之前有消息的新脚本语言Epic Verse没有同步发布,对这个还是非常期待的。
编辑器的整体操作习惯还是遵循了UE4,不过主界面布局和UI风格变化比较大,熟悉之后倒也没有什么障碍,UE5提供了更方便的平台SDK支持。基本上UE4资源管理和工程实践的积累也能在UE5中直接用,打包流程与UE4也基本相同,不过目前打包速度相较于UE4变慢了很多。
作为下一个世代的游戏引擎,非常期待UE5在主机平台上的效果,但是目前Lumen和Nanite并不支持Mobile平台,短期内无法作为生产环境,期待正式版本在移动端上的表现。

未完待续。

微信扫描二维码,关注我的公众号。

本文标题:UE5:新一代虚幻引擎初探
文章作者:查利鹏
发布时间:2021年05月25日 12时22分
本文字数:本文一共有4.5k字
原始链接:https://imzlp.com/posts/8724/
许可协议: CC BY-NC-SA 4.0
文章禁止全文转载,摘要转发请保留原文链接及作者信息,谢谢!
您的捐赠将鼓励我继续创作!