Failed to find parameter collection buffer with GUID

Hi!

After packaging my project I get a very hard to fix error. I’ve done everything from fixing up redirectors, cloning project, enabling “full rebuild” and deleting the folders: Intermidiate, Saved and Binaries…

I found the file from the error message, and found this explanation:

// Dump the currently registered parameter collections and the ID we failed to find.
// In a cooked project these numbers are persistent so we can track back to the original
// parameter collection that was being referenced and no longer exists

Well, how can I clear this error when it remembers a file that doesn’t exist anymore?
I have vey limited knowlegde about these things.



More of the code in shaderbaseclasses.ccp:

// For shipping and test builds the assert above will be compiled out, but we’re trying to verify that this condition is never hit.
if (ParameterCollectionUniformBuffers.Num() < ParameterCollectionsNum)
{
UE_LOG(LogRenderer, Warning,
TEXT(“ParameterCollectionUniformBuffers.Num() [%u] < ParameterCollectionsNum [%u], this would crash below on SetUniformBufferParameter.\n”)
TEXT(“RenderProxy=%s Material=%s”),
ParameterCollectionUniformBuffers.Num(),
ParameterCollectionsNum,
*MaterialRenderProxy.GetFriendlyName(),
*Material.GetFriendlyName()
);
}

	check(ParameterCollectionUniformBuffers.Num() >= ParameterCollectionsNum);

	const int32 NumToSet = FMath::Min(ParameterCollectionUniformBuffers.Num(), ParameterCollections.Num());

	// Find each referenced parameter collection's uniform buffer in the scene and set the parameter
	for (int32 CollectionIndex = 0; CollectionIndex < NumToSet; CollectionIndex++)
	{			
		FRHIUniformBuffer* UniformBuffer = GetParameterCollectionBuffer(ParameterCollections[CollectionIndex], Scene);

		if (!UniformBuffer)
		{
			// Dump the currently registered parameter collections and the ID we failed to find.
			// In a cooked project these numbers are persistent so we can track back to the original
			// parameter collection that was being referenced and no longer exists
			FString InstancesString;
			TMultiMap<FGuid, FMaterialParameterCollectionInstanceResource*>::TIterator Iter = GDefaultMaterialParameterCollectionInstances.CreateIterator();
			while (Iter)
			{
				FMaterialParameterCollectionInstanceResource* Instance = Iter.Value();
				InstancesString += FString::Printf(TEXT("\n0x%p: %s: %s"),
					Instance, Instance ? *Instance->GetOwnerName().ToString() : TEXT("None"), *Iter.Key().ToString());
				++Iter;
			}

			UE_LOG(LogRenderer, Fatal, TEXT("Failed to find parameter collection buffer with GUID '%s'.\n")
				TEXT("Currently %i listed default instances: %s"),
				*ParameterCollections[CollectionIndex].ToString(),
				GDefaultMaterialParameterCollectionInstances.Num(), *InstancesString);
		}

		ShaderBindings.Add(ParameterCollectionUniformBuffers[CollectionIndex], UniformBuffer);		
	}

329945-screenshot-2021-02-16-011726.jpg

Never mind, I found it: Was using whitelist of maps to cook, and needed to add the correct map there… phew.

Hello, ive got the same problem and i cant figure out how to get around it.
could you please explain how you fixed it precisely?

1 Like

I have the same problem right now but i cant fix it.
Could you please tell me exactly what you have done?

1 Like

Okay. The message is a warning that the game is using a MPC that it can’t find. In my case I had blacklisted some folders in the cooking options to save size in the packaging, but I was using a MPC that was saved in one of those folders. So ofcourse I get an error becausethat MPC isn’t packaged at all. Before I realised that I tried to fix folder redirectors, and reassigning the Material Parameter Collection in the Materials that used it. Also in blueprints that referenced it. Basically cleaning up all links to MPCs that I could think of.

3 Likes

I’m also having the same problem, but my packaging settings have “Cook everything in the project content directly (ignore list of maps below)” ENABLED, so I don’t understand why I would need to whitelist maps as well. I did either way but it still won’t work.