DDC 共享

共享 DDC 的作用是:当同一网络内共享 DDC 的人只要有一个人编译了 DDC,其他人就无需重新编译,节省 Shader 的编译时间,提高效率。

所以,一般情况下只需要在局域网内部署一个高 IO 吞吐的机器,每个人都把该机器的共享目录挂载到本地,就可以实现 DDC 的共享,因为 DDC 的目录是相对于网络路径的,所以每个人的修改都会影响到其他人,从而实现一个编译多人共享的效果。

UE 的文档里介绍了三种设置的方法:

  1. 修改 DefaultEngine.ini 添加 DerivedDataBackendGraph 项;
  2. 系统中添加 UE-SharedDataCachePath 环境变量;
  3. 在 UE 的 Editor Preferences-Global-Shared Derived Data Cache 设置共享的 DDC 目录;

UE 推荐的是使用第一种方法,但是具体实践和文档中介绍的略有不同。

对于源码版引擎,使用 DDC 文档中介绍的第一种方法,在项目的 DefaultEngine.ini 中添加以下项:

DefaultEngine.ini
1
2
[DerivedDataBackendGraph]
Shared=(Type=FileSystem, ReadOnly=false, Clean=false, Flush=false, DeleteUnused=true, UnusedFileAge=10, FoldersToClean=10, MaxFileChecksPerSec=1, ConsiderSlowAt=70, PromptIfMissing=false, Path=\\YourDDCServer\DDC, EnvPathOverride=UE-SharedDataCachePath, EditorOverrideSetting=SharedDerivedDataCache)

但是对于安装版引擎(Installed),要把 DerivedDataBackendGraph 改成InstalledDerivedDataBackendGraph

DefaultEngine.ini
1
2
[InstalledDerivedDataBackendGraph]
Shared=(Type=FileSystem, ReadOnly=false, Clean=false, Flush=false, DeleteUnused=true, UnusedFileAge=10, FoldersToClean=10, MaxFileChecksPerSec=1, ConsiderSlowAt=70, PromptIfMissing=false, Path=\\YourDDCServer\FMGame\DDC, EnvPathOverride=UE-SharedDataCachePath, EditorOverrideSetting=SharedDerivedDataCache)

这是因为引擎在 Developer/DerivedDataCache/Private/DerivedDataBackends.cpp 中对安装版和源码版做了区分:

1
2
3
4
5
6
7
8
9
10
11
FDerivedDataBackendGraph()
// ...
{
// ...
if(!RootCache)
{
// Use default graph
GraphName = FApp::IsEngineInstalled() ? TEXT("InstalledDerivedDataBackendGraph") : TEXT("DerivedDataBackendGraph");
// ...
}
};

在设置完之后就可以通过 Commandlet 来执行 DDC 的生成了:

1
Engine\Binaries\Win64\UE4Editor.exe Client\Client.uproject -run=DerivedDataCache -fill

该 Commandlet 定义在Editor/UnrealEd/Classes/Commandlets/DerivedDataCacheCommandlet.h

如果想要在配置文件添加之后关闭掉 DDC,可以在 Editor 启动时添加参数-ddc=noshared