UE5:新一代虚幻引擎初探

您所在的位置:网站首页 虚幻开源项目 UE5:新一代虚幻引擎初探

UE5:新一代虚幻引擎初探

2024-07-10 17:56| 来源: 网络整理| 查看: 265

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

UE5 官方资料:

虚幻引擎 5 抢鲜体验 Unreal Engine 5 Early Access Documentation Unreal Engine 5 Early Access Release Notes Unreal Engine C++ API Reference

发布的演示视频:

最值得关注的点当然是 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):

Oodle Compression Epic Verse 语法介绍 Epic 收购 RAD Game Tools UE5 可能的脚本语言 UE5 的 PS5 真机视频

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

[中文直播]第 29 期|解析虚幻引擎开发路线图(上集) | Epic 王祢 马骥 孙丹璐 [中文直播]第 29 期|解析虚幻引擎开发路线图(下集) | Epic 王祢 马骥 孙丹璐

注意:本次发布的预览版并不包含新的脚本语言 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-main和ue5-early-access。

两者的区别是:

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

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

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

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

DefaultWarningLevel DeprecationWarningLevel bWarningsAsErrors bEnableCppModules

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

123bCompilePhysX = false;bCompileAPEX = false;bCompileNvCloth = false;

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

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

BaseTextureBuildWorker ChaosVisualDebugger DerivedDataBuildWorker EpicWebHelper HeadlessChaosPerf Horde InterchangeWorker EpicGames.Core/Jupiter/MongoDB/Perforce/Perforce.Managed SwitchboardListener TextureShare UnrealBuildToolTests UnrealObjectPtrTool 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.ini12[/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 执行,命令如下:

12345678910111213141516171819202122232425262728293031cmd.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 也没有区别:

12345678910C:\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\AppData\Roaming\Unreal Engine\AutomationTool\Logs\C+Program+Files+Epic+Games+UE_5.0ea\UBT-ThirdPerson_UE5-Win64-Development.txt"

Cook 命令也相同:

12345678910C:\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 相同:

1234567891011121314151617181920C:.| 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 之外多了两种类型的文件 ucas 与utoc两种文件,在运行时 Mount pak 时也会 mount 它们,看了下代码在 UE4.25/26 就中存在,有时间详细地分析下它们的作用和加载流程。

Open UE4 Project

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

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

其他兼容性问题补充

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

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

平台名的变化:

去掉了一些资源平台,新加了一些 如 WindowsNoEditor/MacNoEditor 等统一去掉了 NoEditor 后缀 总结

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



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3