我们使用Horde做打包流水线,编译部分也接了uba。我们最近一次改动到了基础材质导致需要编译大量shader,在打包机的log中看到有大量的“LogMaterial: Display: [CookWorker 3]: Missing cached shadermap for MI_c1470_31 in PCD3D_SM6, Default, SM6, Game (DDC key hash: c52c85c564d714259d8c8c5ee8bb5337166eb807), compiling.”
我们预期是shader编译应该也会被uba加速,当时我们其他的Agents都是ready状态,不过实际情况是所有的shader都是这台机器自己编译完的,我们的cook时间因此变长了4倍
我想问一下,是不是有什么没有配置正确的地方,要怎么让cook时的shader编译能正确被uba加速?
[Attachment Removed]
tuo.chen
(tuo.chen)
April 21, 2026, 6:01am
2
您好,请问是所有shader都没有通过UBA运行吗?还是仅仅几个shader?
[Attachment Removed]
您好,我又仔细看了一下log。
情况是这样的,我们forcerecook 正常情况下是15分钟左右,这两次修改基础材质之后cook总时间有3个小时,其中确实只有200多条Missing cached shadermap,其余大量的是Waiting on job [M_Env_8f96e1f21a683f02/Medium/FInstancedStaticMeshVertexFactory/TVirtualTexturePSBaseColor/0] (input hash fd9c753ed7f637b89235a947dc0710ac99487b969518a61dc6557cffc06c266d); current status is Queued类似这样的log,这个情况是正常提交给uba但是被阻塞了吗?
[Attachment Removed]
tuo.chen
(tuo.chen)
April 21, 2026, 8:48am
5
这里看不太出来是不是uba卡住,可以提供一下log吗,我看一下
不过这里有一些参数可以试一下强制退出:
r.ShaderCompiler.ShadermapCompilationTimeout=7200 (默认2小时标记为hung)
r.ShaderCompiler.CrashOnHungShaderMaps=0 (标记为hung之后,0为打印error,继续等待,1为触发crash退出)
[Attachment Removed]
tuo.chen
(tuo.chen)
April 21, 2026, 9:42am
6
从log里看并没有启用uba:LogUbaHorde: Display: UBA/Horde Configuration [Uba.Provider.Horde]: Not Enabled
可以在defaultengine.ini里加入
[Uba.Provider.Horde]
Enabled=true
ServerUrl=“http://your -horde-server:5000”
Pool=Win-UE5
MaxCores=50000
不过对于一个shader卡住很久的情况,即使通过uba分发也有可能发生,可以考虑使用超时机制
[Attachment Removed]
tuo.chen
(tuo.chen)
April 21, 2026, 9:47am
7
另外我看了下参数,CookProcessCount=6可能有点大,如果内存不足会效率会变低
一般256GB RAM的机器可以设置为4
[Attachment Removed]
[UbaController]
+Providers=Uba.Provider.Horde.Custom
[Uba.Provider.Horde.Custom]
Enabled=True
ServerUrl=“http://192 .168.21.126:13340/”
Pool=Compute
[Horde]
ServerUrl=“http://192 .168.21.126:13340/”
您好,以上是我们目前的配置,只是加了一个custom的Provider没有用默认的,Pool的话是我们给机器手动打了一批Compute用于uba编译,我们自己编译或者打包机编译Editor都是正常触发了uba的,这样写是不行的吗?
[Attachment Removed]
tuo.chen
(tuo.chen)
April 21, 2026, 10:28am
9
GConfig->GetArray(TEXT(“UbaController”), GIsBuildMachine ? TEXT(“BuildMachineProviders”) : TEXT(“Providers”), ProviderList, GEngineIni);
buildmachine的逻辑不太一样,如果自定义的话,读的是BuildMachineProviders,否则就是Uba.Provider.Horde
所以要改成
[UbaController]
+Providers=Uba.Provider.Horde.Custom
+BuildMachineProviders=Uba.Provider.Horde.Custom
[Attachment Removed]