联机烘培光照

在 UE 编辑器中构建光照时,会拉起一个 SwarmAgent 进程在后台执行光照构建任务。
UE 提供了多台机器联机构建光照的支持,通过配置 SwarmCoordinatorSwarmAgent作为 C/S 的方式来下发构建任务,实现联机烘培的效果。官方文档:Unreal Swarm

要求:

  1. 在局域网内需要一台设备当作调度器(Coordinator),该机器上需要具有完整的引擎,并且该机器需要开放 TCP 的 8008/8009 端口的 in/out,不然无法连接。
  2. 其余的机器上不要求安装引擎,但是需要运行 SwarmAgent。

SwarmAgent可以从引擎的 Engine\Binaries\DotNET 目录下提取以下文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
C:\build_agent\workspace\SwarmAgent>tree /a /f
C:.
AgentInterface.dll
SwarmAgent.DeveloperOptions.xml
SwarmAgent.exe
SwarmAgent.exe.config
SwarmAgent.Options.xml
SwarmCommonUtils.dll
SwarmCoordinator.exe
SwarmCoordinator.exe.config
SwarmCoordinatorInterface.dll
SwarmInterface.dll
UnrealControls.dll

其中 SwarmAgent.Options.xmlSwarmAgent.DeveloperOptions.xml是配置文件。

需要关注的参数:

  • CacheFolder:注意该目录需要有读写权限,因为 SwarmAgent 可以脱离引擎单独运行,默认的引擎目录不适合,建议设置为C:\tmp\SwarmCache
  • AllowedRemoteAgentNames:允许远程 Agent 分配任务到本地的名字,如果不做分组的情况,可以用通配符 * 允许所有的 Agent
  • CoordinatorRemotingHost:局域网中运行 SwarmCoordinator 机器的 IP 地址(注意该机器需要开放 TCP 8008/8009 端口)
  • AvoidLocalExecution:只允许从本地分发任务,但本地不执行任务。
  • EnableStandaloneMode:SwarmAgent 的独立模式,不允许传入任务,也不向其他机器分发任务。
  • ShowDeveloperMenu:显示 DeveloperSettings 菜单。

在 DevelopSettings 中可以控制超时时间、核心数等。
当配置完之后把 SwarmAgent 运行在其余设备上,在 Coordinator 的机器上就可以看到以下连接:

展示了连接的机器数,工作状态(如果 SwarmCoordinator 进程关闭,重启后会自动连接 Agent)。
在任意启动了 Agent 的机器上可以开启 UE 启动光照构建任务(注意一定要先单独启动被配置完成的 SwarmAgent,如果使用引擎自动拉起 SwarmAgent 则会使用一份额外的配置文件),就能在本地 SwarmAgent 进程中看到以下任务分配:

在 SwarmCoordinator 中可以看到任务分配情况:

注意:不一定所有的任务都会被分配至其他的 Agent 执行,取决于任务数量、Agent 的负载情况等。

当 Agent 处于 Busy 状态时,Coordinator 不会给其分配任务:


其他资料: