BlueRoseNote/03-UnrealEngine/流程管理与部署/使用Fastbuild加快UnrealEngine编译速度.md
2023-06-29 11:55:02 +08:00

135 lines
8.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
title: 使用Fastbuild加快UnrealEngine编译速度
date: 2021-11-09 22:34:16
excerpt:
tags: FastBuild
rating: ⭐
---
# 使用Fastbuild加快UnrealEngine编译速度
如果你有多台电脑或者服务器就可以使用FastBuild提高编译速度。虽然最后测试法线i7-7700+一台几年前的e5 40核心服务器依然比不过今年买的枪神5笔记本。
如果你完全按照 https://zhuanlan.zhihu.com/p/158400394 的教程来操作那你就被坑了。目前Fastbuild的最新版本与UE是不兼容的。很可能会出现寻找的目录与FastBuild创建的目录不一致的问题。以下是本人的log
```
已启动生成…
1>------ 已启动生成: 项目: UE4, 配置: Development_Editor x64 ------
1>Building UE4Editor and ShaderCompileWorker...
1>Using Visual Studio 2019 14.29.30136 toolchain (D:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\VC\Tools\MSVC\14.29.30133) and Windows 10.0.19041.0 SDK (D:\Windows Kits\10).
1>Detected build type as Windows from 'D:\UnrealEngine\UnrealEngine4.27\Engine\Build\Windows\cl-filter\cl-filter.exe' using search term 'Windows'
1>Using path : {D:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\VC/Redist/MSVC\14.29.30133} for vccorlib_.dll (MSVC redist)...
1> ...Add an entry for MsvcCRTRedistVersion in BuildConfiguration.xml to specify a version number
1>FBuild Command Line Arguments: '-monitor -summary -dist -cacheread -ide -clean -config "D:\UnrealEngine\UnrealEngine4.27\Engine\Intermediate\Build\fbuild.bff" -nostoponerror
1>BFF file 'D:\UnrealEngine\UnrealEngine4.27\Engine\Intermediate\Build\fbuild.bff' has changed (reparsing will occur).
1>Using brokerage folder
1>No workers found in '\\DESKTOP-QI1GP15\FastBuildBroker\main\20.windows\'
1>No workers available - Distributed compilation disabled
```
## 操作步骤
上述问题是因为当前使用的FastBuild协议版本与UE4所需的不同造成的所以你需要使用EPIC定制的FastBuild。本人使用Win10与UnrelEngine4.27.0源码版目前正确的操作步骤如下:
1. 使用源码目录`Engine\Extras\ThirdPartyNotUE\FASTBuild\Win64\`下的FastBuild。指定一个不含用中文路径的目录。
2. 在该目录中再新建一个名为`FBuild`的文件夹并将3个文件复制进去。这一步是可选步骤是为了兼容`FBDashboard.exe`。你可以去FastBuild官网下载并且指定目录下。只需要复制FBDashboard.exe放在FBuild外面
3. 创建共享文件夹。添加当前用户与Everyone用户权限为读/写。之后再用其他电脑访问一次能进入并且写文件就完成了。只需要其中一台电脑or服务器创建共享文件夹即可其他所有机器都会使用这个共享文件夹
4. 添加环境变量FASTBUILD_BROKERAGE_PATH内容为共享文件夹的网络路径比如`\\DESKTOP-QI1GP15\FastBuildBroker`Path变量添加FBuild.exe所在目录之后在CMD中输入FBuild运行后提示`Failed to open BFF 'fbuild.bff'`就代表添加成功了。
5. 在其他电脑与服务器上执行上述步骤。
6. 添加编译配置。给`Engine\Saved\UnrealBuildTool\BuildConfiguration.xml`添加`bAllowFASTBuild`配置为true。
比如这样:
```xml
<?xml version="1.0" encoding="utf-8" ?>
<Configuration xmlns="https://www.unrealengine.com/BuildConfiguration">
<BuildConfiguration>
<bAllowFASTBuild>true</bAllowFASTBuild>
</BuildConfiguration>
</Configuration>
```
## 共享问题
你很可能会遇到无法打开共享或是网络发现的功能下面我分享以下解决方法。测试系统win10、win2012 r2。
1. 关闭win防火墙。
2. 在控制面板-程序-启动或者关闭服务器功能中确保安装了SMB 1.0/CIFS 文件共享支持下的所有功能。
3. 运行services.msc启动Computer Browser服务并将启动方式设置为自动。将下列服务启动并将启动方式设置为自动延迟启动Function Discovery Provider Host、Function Discovery Resource Publication、Network Connections、UPnP Device Host。
## 其他注意点
`江湖小辈`教程中使用FastBuild源码版是为了做测试以及通过修改源代码来实现通过Ip来代替计算机名来寻找共享。如果你想使用最新版本就需要修改FastBuild源码中的`distributed protocol version`。本人没有试过,但应该是这样没错。
对于团队来说添加Shader编译也许必须的所以还可能修改UBT代码。可以参考《腾讯游戏开发精粹》一书的对应章节但记住在修改完UBT代码后需要重新编译UBT。 调试UBT的话需要在UBT工程上右键-属性-调试页面中将配置设为Debug,之后添加命行参数,之后在Debug模式下就可以命中断点了。编译UE4源码命令行如下
```
UE4Editor Win64 Development -Quiet -WaitMutex -FromMsBuild
```
对于在家办公想要使用公司服务器进行编译,使用反向代理+OpenConnect应该是可行的只要带宽足够。
## 编译配置
是一个名为`BuildConfiguration.xml`的xml文件用于控制编译。除了可以在项目`Config/UnrealBuildTool`中添加外。UBT还会从以下位置Windows系统的XML配置文件读取设置
- Engine/Saved/UnrealBuildTool/BuildConfiguration.xml - 针对特定引擎版本。
- User Folder/AppData/Roaming/Unreal Engine/UnrealBuildTool/BuildConfiguration.xml
- My Documents/Unreal Engine/UnrealBuildTool/BuildConfiguration.xml - 适用于所有已安装的引擎版本。
除了上文中说到的bAllowFASTBuild外因为本人使用附带git信息的引擎源码编译时UBT会先去读取git信息但因为源码git信息量太大非常浪费时间。这里可以添加
```xml
<SourceFileWorkingSet>
<Provider>None</Provider>
<RepositoryPath></RepositoryPath>
<GitPath></GitPath>
</SourceFileWorkingSet>
```
起到让UBT禁用“使用 'git status' 来确定AdaptiveUnityBuild。下面介绍一下其他参数完整参数请去官方文档参考。
### LocalExecutor
- ProcessorCountMultiplier本地执行的处理器计数乘数。设为小于1可为其他任务保留CPU。使用本地执行器非XGE在每个CPU核心上运行单一操作。注意: 可将该属性设为较大的值,在多数情况下可稍微提高编译速度,但电脑在编译期间的响应速度将变慢。
- MaxProcessorCount本地执行的最大处理器数量。
### ParallelExecutor
- MaxProcessorCount本地执行的最大处理器数量。
- ProcessorCountMultiplier本地执行的处理器计数乘数。设为小于1可为其他任务保留CPU。
- bStopCompilationAfterErrors启用时将在发生编译错误后停止编译目标。
我在查看了AnswerHUB看到有人分享了自己的配置
查阅代码之后发现,这些配置选项要去看 BuildConfigProperties.INT.udn 里的参数ProcessorCountMultiplier 是在 ParallelExecutor 下的,所以改成以下配置:
```xml
<?xml version="1.0" encoding="utf-8" ?>
<Configuration xmlns="https://www.unrealengine.com/BuildConfiguration">
<ParallelExecutor>
<ProcessorCountMultiplier>7</ProcessorCountMultiplier>
<MaxProcessorCount>7</MaxProcessorCount>
<bStopCompilationAfterErrors>true</bStopCompilationAfterErrors>
</ParallelExecutor>
</Configuration>
```
目前我使用的完整配置:
```xml
<?xml version="1.0" encoding="utf-8" ?>
<Configuration xmlns="https://www.unrealengine.com/BuildConfiguration">
<BuildConfiguration>
<ProcessorCountMultiplier>7</ProcessorCountMultiplier>
<MaxParallelActions>7</MaxParallelActions>
<bAllowParallelExecutor>true</bAllowParallelExecutor>
</BuildConfiguration>
<SNDBS>
<ProcessorCountMultiplier>4</ProcessorCountMultiplier>
<MaxProcessorCount>4</MaxProcessorCount>
</SNDBS>
<ParallelExecutor>
<ProcessorCountMultiplier>7</ProcessorCountMultiplier>
<MaxProcessorCount>7</MaxProcessorCount>
<bStopCompilationAfterErrors>true</bStopCompilationAfterErrors>
</ParallelExecutor>
</Configuration>
```
### FASTBuild
- FBuildExecutablePath用于指定 fbuild.exe 的位置(如果发布的二进制文件未使用)
- bEnableDistribution控制网络构建分布network build distribution
- FBuildBrokeragePath用于指定中间件的位置。如为null则FASTBuild退回检查FASTBUILD_BROKERAGE_PATH
- bEnableCaching控制是否使用缓存。仅当该选项启用后CachePath和FASTCacheMode才会相关。
- CacheMode缓存访问模式 - 仅当bEnableCaching为真时相关
- FBuildCachePath用于指定缓存的位置。如为nullFASTBuild会退回检查FASTBUILD_CACHE_PATH
- bForceRemote是否强制远程
- bStopOnError是否在错误上停止
- MsvcCRTRedistVersion使用哪个MSVC CRT Redist版本
## UnityBuild
- bUseAdaptiveUnityBuild使用启发式方法来确定哪些文件目前正在被迭代并将它们从unity blobs中排除从而加快增量编译的时间。目前的实现使用只读标志来区分工作集假设文件正在被修改源码控制系统将使其可写。这对Perforce是正确的但对Git不是。