史诗之路搭建虚幻工作室 | UnrealFest演讲精粹

科技   2024-12-04 12:41   上海  
前言
经常管理虚幻工作室或者在其中上班的小伙伴们应该都知道,想要在团队内构建和优化一套良好的工作流是比较难的,那我们能不能从社区或者官方渠道中学习一些虚幻引擎工作流的知识点,帮助我们提高工作效率与优化工作流呢?这篇文章将会为您带来一些"Epic Way",包括版本控制、分支策略、虚拟资产等一系列工作流中的实践知识,希望能够对您有所帮助。
本文出自https://www.youtube.com/watch?v=102O0FOEzNY,由Ari Arnbjornsson演讲分享。

目录


  • 什么是Epic Way

  • 如何学习Epic Way

  • 版本控制

  • 工作区实用性

  • 虚幻引擎源代码

  • 集成新的UE版本

  • 分支策略

  • 项目文件夹结构

  • Unreal Game Sync

  • Horde

    • Horde - 持续集成 

    • Horde - 构建状态 

    • Horde - 工作室数据分析 

    • Horde - 设备管理 

    • Horde - UGS元数据 

    • Horde - 预编译二进制文件

  • 虚幻构建加速器

  • 代码审查

  • 验证

  • 预检

  • 提交工具

  • 派生数据 

  • 派生数据缓存 

  • 本地DDC 

  • 共享DDC 

  • 云端DDC 

  • 烘焙输出储存

  • 虚拟资产

  • P4 virtual file system

  • 崩溃报告

  • 其他工具 

    • RoboMerge 

    • Unsync 

    • UShell 

    • P4VUtils

什么是Epic Way

是像Epic Games工作室那样的吗?不是!因为Epic Games主要围绕《堡垒之夜》开发,很多工具并非公开使用,所以他们的工作流不会适合所有人;是像那些大厂或者工作室那样的吗?也不是!因为大大小小的工作室之间的工作流也不尽相同,它们各有所长,各有所需;而Epic Way将会是这两者折中的方案,对于所有虚幻引擎工作室而言都能优化工作流的道路。 

如何学习Epic Way

对于那些正在成长的中型及以上的工作室可以尝试运用这里介绍到的大部分流程,而小一些的工作室就可以只选择一些您喜欢的流程进行学习与实践,而对于独立开发者而言,可能对于下面提到的流程没什么需求。我们可以根据自己的情况和需求来选择学习。

版本控制

Epic Games使用的是Perforce的版本控制工作流,所以虚幻引擎是围绕着Perforce来进行构建的。如果想要实践这个工作流,我们需要UGS、Horde或者RoboMerge这些工具,对于那些中型及以上的工作室,他们几乎都在使用这一套工作流。
对于小型工作室和独立开发者可能不需要Perforce,可以选择像是Plastic SCM、SVN、Git之类的版本控制工具,这些应该是更好的选择,因为这些我们都能买得起,甚至有一些还是免费的。

工作区实用性

保证我们的工作区文件夹足够浅!因为虚幻引擎有最大文件路径限制,大约两百多个字符左右,这样是为了保证能够让我们在工作区中添加更多层文件夹,保证文件夹结构实用可读。
选择一块固态硬盘作为我们的工作区!保证在工作时加载与保存资产足够迅速。如果用的是机械硬盘,建议关闭Windows上的NTFS上次访问功能。工作区基本都是内部人员正在使用,所以我们可以信任来自团队成员的文件,关闭杀毒软件或者将工作区文件夹放在杀毒软件扫描的白名单里。

虚幻引擎源代码

我们不一定需要虚幻引擎的源码版本,但是我还是会强烈推荐您准备一份源码版本。
首先,我们可以更好地Debug,在启动器版本的虚幻引擎中,调试符号是被移除了的,并且在源码版本中,我们可以插入一些描述性日志或者断点来检查虚幻引擎的运行情况;其次,如果我们的游戏快要发布了,但是有一些Bug,而且我们还没这么多时间精力去升级引擎了,这个时候就可以从Github上直接拉取到需要的那一块修复补丁,而不需要从启动器大费周章下载新的引擎或者更新;最重要的是,我们可以随便改引擎,以达到自己的某种需求或者是修复现在引擎有的Bug,但最好不要大改引擎,因为我们到时候升级引擎的时候“去红”就要哭了。
如果您是自定义协议用户,可以直接访问我们的Perforce服务器获取源代码,但Github开放给所有连接了Epic Games账户的人,而且免费,都是同样的东西,同样的注释!

集成新的UE版本

准备好一个纯净UE的流(upstream),比如官方Github上的版本,还需要准备一个专门用于合并和解决冲突的流(merge),对于那些需要对虚幻引擎进行大量修改的大型团队来说,“去红”可能需要几天甚至是几周的时间,一但merge流中有了团队中正在开发的流(Main)中最新的修改,并且解决了所有冲突的时候,就可以把merge流复制到Main流中供团队继续使用了。
特别提醒!最好在升级完引擎之后,使用ResavePackages命令将项目中的资产重新加载并保存一遍,因为在新版本虚幻引擎打开旧版本项目上的资产时,会对资产进行升级操作,这可能会消耗一些时间,建议比较大的项目记得重新加载保存一遍资产。

分支策略

大部分工作室(包括Epic Games工作室)中不会有额外分支,大部分更改都是合并在Main分支中,这样是为了尽量减少分支,防止冲突。Epic Games一般使用RoboMerge不断合并变更,您也可以根据自己的情况选择合并变更的工具软件。
如果需要制作功能向的分支,可以尝试一下Game Feature插件,Game Feature是一种全新的游戏项目功能管理模式,文章最后的原文链接中有对应的参考链接。
虚幻还支持分支锁定,它能告诉我们分支中的文件是否已被修改,该文件将自动合并到当前分支中,我们还可以通过代码、ini配置文件或者是RoboMerge配置来设置要查询的分支。

项目文件夹结构

在使用源码版本UE的时候,对项目使用“本地”文件夹结构,这非常非常重要,因为这个修复起来很麻烦。项目文件夹应该和引擎文件夹位于同一个父文件夹里(也就是您的工作区里),项目也可以放在子文件夹中,或者多个套娃文件夹,在Default.uprojectdirs中指定子文件夹,务必不要将Engine文件夹放在项目文件夹里或者任意一个其他文件夹中!

Unreal Game Sync

Unreal Game Sync是Perforce的前端,这个工具可以在Engine/Source/Programs/UnrealGameSync中找到。这个工具可以用来同步、构建和启动UE;可以标记变更的好坏;如果您的网络比较差,可以计划同步,这样我们就可以在电脑闲置的时候同步文件了;可以版本化我们本地的虚幻引擎;支持预编译的二进制文件等等。

Horde

Horde是什么?Horde是一个持续集成系统,但又不止这一个功能,它还负责工作室数据分析、设备管理、构建加速协调等等,而且它还是UnrealGameSync的元数据服务器。Horde可以在本地和云端运行。
 

Horde - 持续集成

如果您已经在使用Jenkins或者TeamCity这类型的软件,并且已经有了一个很好的工作流,可以继续用下去,但如果您想尝试新的工具,也可以尝试一下Horde。推荐Horde最大的原因是它有内置的构建图,并且可以自动并行化,假设我们有一个构建图,有一些任务和工作,Horde可以识别出来并且自动进行并行化,所有平台的构建都是可以同步进行的
 

Horde - 构建状态

当构建有警告时,Horde就会显示出来并且可以将这个问题分配给人员进行修复,还会显示该问题的修复状态,这个功能会在5.5版本中有改进与对应的文档。

Horde - 工作室数据分析
显示工作室分析数据,评估团队编辑的表现,有运行编辑器时间、加载地图时间、烘焙项目时间等等数据,可以通过数据看出到底是什么问题会对项目有较大的影响。
 

Horde - 设备管理

列出团队成员可用的设备,并且可以远程访问设备,假如我们需要测试PS5平台的性能,Horde就会自动帮您等待多长多长时间,直到设备可用,然后进行测试。
 

Horde - UGS元数据

Horde连接着UnrealGameSync,所以其中的任何ugs://链接都可以通过UGS打开VS或者其他什么IDE,转向对应的代码行那儿,就像源代码超链接一样。
 

Horde - 预编译二进制文件

我们无需将二进制文件上传到Perforce,UGS可以直接从Horde下载从源代码编译好的二进制文件。
 

虚幻构建加速器

之前团队中使用的构建系统有Incredibuild、SN-DBS、FASTBuild等,但现在隆重介绍虚幻构建加速器(Unreal Build Accelerator)!从Unreal 5.4开始,虚幻构建加速器是免费且公开的,即便是本地构建也能加速5%到10%,这对于我们来说已经足够了。里面还有一些实验性的功能,比如着色器编译、原生MacOS/Linux支持、空闲/繁忙进程检测等。

代码审查

我们用免费的Swarm进行代码审查,只需要检查变更和提交就行,我们通常不自动提交,因为如果提交弄坏了什么东西,提交者就需要随时待命了。

验证

Epic Games为了保证构建零警告,进行的是非Unity编译,用来定位缺少的#Include,进行静态分析编译,进行资产虚拟化,在命令行模式下启动编辑器并对提交的资产运行游戏内容验证,最后保证Perforce标签是正常的。
 

预检

Epic员工需要对大多数提交进行预检,我们要做的工作就是提交,然后在Horde运行预检即可。

提交工具

提交工具可以检查变更、虚拟化资产、运行验证器,这个工具可以从虚幻引擎启动或者从Perforce启动,不过现在这个工具还未公开使用。

派生数据

核心元数据:UProperties和其他一些基本数据,像是描述文件,如果您使用过Unity引擎的话,应该就像是项目文件夹中的meta文件。
批量数据:资产的源数据,比如网格体、纹理、音效等等,是不转换到目标平台就不能呈现给用户的数据。
派生数据:已经被转换到目标平台的数据,就像我们正在Windows平台上使用Unreal Editor查看各种资产一样。
材质或者着色器需要编译,以便 GPU 能够渲染它们;纹理、音频需要压缩,便于硬盘能够储存它等等。派生数据很大,可以被生成,因此派生数据是不需要版本控制的。对于尤其大的项目来说,生成派生数据可能需要花很长时间。
UE编辑器会尝试尽可能临时地生成派生文件,比如当我们真正看到某个物体的时候才会去尝试编译派生数据,包括音频、着色器等,但最终打包的时候必须生成资产的派生数据。这些派生数据可以通过派生数据缓存 (DDC) 进行缓存和共享。
 

派生数据缓存

本地 DDC:在用户自己的计算机上。
共享 DDC:在服务器端,通过本地网络快速访问。
云端 DDC:在云端,由工作室和远程工作人员共享。
派生数据缓存实际上就是一个存派生数据的地方,首先会从有派生数据的最快缓存中获取,如果未找到就在本地生成,然后异步上传到其他层。
 

本地DDC

在以前的 UE 版本中,这些文件是散乱的。每个项目都有自己的 DDC 文件夹,除非我们专门设置一个共享的本地文件夹。不过现在隆重介绍Zen,来作为本地的DDC储存,这个工具已经准备好投入生产并且在UE5.4中默认启用,Zen避免了在单个项目中储存派生数据,所有的流和项目都共享一个派生数据储存空间,对于同一个资产只生成一次缓存。
 

共享DDC

还是使用Zen来共享DDC,优化了网络通信和批量操作,并且其他人构建好的东西我们自己都能直接使用。
 

云端DDC

之前使用的是S3DDC,或者从AWS S3中提取zip文件,不过现在使用的是虚幻云DDC,这个工具在UE 5.4中是测试版本,整个分布式组织中的任何其他人所构建的任何东西都不需要由我们自己在本地生成,都可以直接下载使用。
 

烘焙输出储存

之前的打包输出要么是散乱的文件,要么是完全 PAK 的文件,要么是即时烘焙的文件,不过现在使用的是Zen Store,在UE5.4是测试版。这个工具避免了文件系统的性能瓶颈,将用于增量烘焙,通过网络将已转化的资产传输至目标平台,例如主机或移动端,共享已处理的资产,并且仅处理增量内容。
未来会持续更新对于增量更新的支持,比如我们从服务器上下载烘焙好的文件,做出自己的修改,然后只增量烘焙与更新即可。也就是说我们在烘焙好的游戏项目中做出修改,只会烘焙修改或者增量的内容,大大减少再次烘焙的时间。

虚拟资产

根据下方示意图,在UAsset中我们储存结构数据和批量数据,然后生成一个单独的派生数据,如果您有派生数据其实是不需要批量数据的,我们的虚拟资产就是从Perforce上只下载结构数据,然后从强大的派生数据缓存(DDC)中快速获取派生数据,而批量数据储存在一个单独的仓库中,只在需要的时候下载。那些需要添加新内容,添加新纹理、新模型的人需要下载批量文件,做出修改然后烘焙出来派生数据上传回储存库里让其他人快速获得。
这样的话其实大多数时候人们都不需要批量数据,不过这个方案仅适用于充分利用DDC的工作室,如果您使用虚拟资产启动虚幻编辑器,并且没有派生数据,它会尝试为每个文件下载批量数据,然后生成派生数据并上传,这其实跟直接使用正常资产没什么区别。
使用虚拟资产能够大量减少储存空间和减少下载时间,在工作室内维护《堡垒之夜》时,占用工作区空间就从413GB降低到了116GB,如果想使用虚拟资产,就需要使用UE提交工具(上文提到该工具尚未公布)。
 

P4 virtual file system

这个系统对于源资产很有用,因为我们创作时制作的源资产通常比较大,比如Photoshop工程文件、Maya工程文件之类的,我们可以直接通过这个P4V系统下载我们想要的源文件,如果使用了Perforce的话,访问所有这些源资产就会像打开快捷方式一样简单。不要在虚幻项目中使用它,因为我们有Virtual File系统!这个P4V系统是给源资产用的!
这里提到的工具可以通过“Helix Core Virtual File Service (P4VFS)”关键词搜索到,而微软(Xbox Game Studios)也实现了一个叫P4VFS的系统,也可以看看那个,希望您能够找到合适您自己的软件。
 

崩溃报告

我们一定有遇到过崩溃报告,虚幻里有一个为PC制作的崩溃报告客户端(主机平台或者移动平台通常有自己的崩溃报告收集机制),我们应该自己定制崩溃报告客户端,然后放在要发行的游戏里。也应该放在编辑器和Debug版本等版本中,方便团队内的成员们定位问题。
我们可以使用第三方服务例如Sentry.io,Bugsplat.com,Backtrace.io等用来收集崩溃报告。
 

其他工具

我们会提供这些工具,但是并不会对这些工具提供支持。这些工具正在Epic Games内部使用,并且正在持续更新。
 

RoboMerge

RoboMerge可以进行分支之间的自动合并,我们通常仅针对每个更改列表进行合并,并不会进行大批量合并,RoboMerge会保留更改列表的历史记录。这个工具可以在Engine/Extras/RoboMerge找到,在配置文件中设置好每个分支的规则,或通过变更列表提交覆盖。
在Epic Games中需要尽快解决重要流或者项目的冲突,比如我们正在维护的UE5和《堡垒之夜》,当提交的修改与现有的发生了冲突,RoboMerge将会通过Email或者Slack向冲突提交者发送ping消息,如果10分钟内没人确认,将自动通过Slack向分类团队发出ping通知,尽可能在发送提交后等待个20到30分钟确保整个预检和自动构建完成。
 

Unsync

这是用于构建发行版本的增量二进制下载和修补工具,它就像zsync、rsync和casync(如果您以前用过它们的话),它可以在Engine/Source/Programs/UnsyncUI找到,我们可以通过命令行或者GUI模式使用它。这个工具可以在网络硬盘中下载构建版本,Unsync会把构建版本分块,所以只会下载修改的部分。我们还可以从这里获取任何平台的版本,比如PS5、Android版本等。
这个工具适合用于私人构建分发,比如团队里分发版本进行测试或者提供给指定用户进行测试等,如果需要更公开地分发构建,可以使用Steam、Epic Launcher、itch.io等等平台。我们现在有一个可选的代理服务器存在,不过现在并不公开。
第三方工作室也使用NAS、GDrive、Resilio、Aspera等解决方案,甚至还可以使用Google Drive之类的云盘服务。
 

UShell

这个工具可以在Engine/Extras/ushell中找到,这是个非常适合程序员操作的优质命令行工具,它有方便的指令补全。我认为搞虚幻引擎的每一个程序员都应该使用UShell!
例如这些命令:
  • .build game:构建游戏运行时目标二进制文件。
  • .cook:烘焙游戏的资产。
  • .p4 cherrypick 1234:集成/取消变更列表。
  • .p4 clean:删除中间文件夹和临时文件夹。
  • .p4 reset:协调分支以使其与仓库相匹配。
  • .help:显示所有可用的命令。
 

P4VUtils

这个工具可以在Engine/Extras/P4VUtils找到,可以通过 P4VUtils.exe install指令安装到P4V里,或者通过UGS自定义工具分发。只需要右键在上下文菜单中操作,就可以添加到P4V的变更列表里,并且可以很轻松地从上下文菜单中启动Horde预检。
可以通过P4VUtils.exe -help查看更多命令。
 

总结

以上便是我们今天要分享的一些“Epic Way”,希望能够对虚幻游戏工作室甚至是独立开发者有所帮助。该文章根据视频节奏与内容进行编写,如果想了解更多信息,可以访问这个网站:https://dev.epicgames.com/community/learning/tutorials/8JYW/setting-up-an-unreal-engine-studio-the-epic-way,这里是讲者编写的英文原文文档,有着一些可能需要用到的外部链接。
祝工作顺利,创作愉快!
近期焦点
Epic全新一站式内容商城Fab今日上线!
Epic for Indies现已登陆Epic开发者社区
虚幻引擎里你可能不知道的功能 | UnrealFest演讲精粹
使用简单的通用材质来提高UI性能 | UnrealFest演讲精粹
为手机优化生存游戏 | UnrealFest演讲精粹

扫描下方二维码,关注后点击菜单栏按钮“更多内容”并选择“联系我们”获得更多虚幻引擎的授权合作方式和技术支持
长按屏幕选择“识别二维码”关注虚幻引擎
“虚幻引擎”微信公众账号是Epic Games旗下Unreal Engine的中文官方微信频道,在这里我们与大家一起分享关于虚幻引擎的开发经验与最新活动。

虚幻引擎
Epic Games 旗下 Unreal Engine 虚幻引擎官方订阅号
 最新文章