When analyzing materials that use Material Layers, Material Analyzer reports that multiple Material Instances “share the same static parameter array” and therefore recommends reparenting so that only dynamic parameters differ. However, in the reported case, the instances are not intentionally overriding parameters and the hierarchy is already correct, so the reparenting suggestion is incorrect (false positive).
The issue appears to stem from how Material Layer parameter data is compared: editor-only override/link tracking flags (EditorOnly.LayerLinkStates) are included in the equality check, causing the analyzer to treat materials as “overridden” and to produce incorrect link counts / suggestions.
In other words, the following check can become true due to editor-only state:
MaterialLayers != ParentMaterialLayers
For example, if a child material’s LayerLinkStates are all set to LinkedToParent, that child material should not be considered to have its own Static Material Layer Parameters. However, if the parent material’s LayerLinkStates contain any value other than LinkedToParent, the LayerLinkStates arrays will not be equal, and the analyzer may incorrectly conclude that the child has overrides. This leads to an incorrect static-parameter count and a misleading reparenting suggestion.
Suspected location: Engine\Plugins\Editor\MaterialAnalyzer\Source\Private\SMaterialAnalyzer.cpp around line ~1150.
FMaterialLayersFunctions MaterialLayers;
if (CurrentMaterialInterface->GetMaterialLayers(MaterialLayers))
{
bool bIsOverridden = false;
if (CurrentMaterialInstance)
{
FMaterialLayersFunctions ParentMaterialLayers;
const bool bParentHasLayers = CurrentMaterialInstance->Parent->GetMaterialLayers(ParentMaterialLayers);
bIsOverridden = !bParentHasLayers || MaterialLayers != ParentMaterialLayers;
}
CurrentMaterialNode->MaterialLayerParameters.Add(FStaticMaterialLayerParameterNodeRef(
new FStaticMaterialLayerParameterNode(FName(),
MaterialLayers.GetStaticPermutationString(),
bIsOverridden,
this->ParameterFilter)));
}
Suggested Change
Not only evaluate MaterialLayers != ParentMaterialLayers, but also traverse MaterialLayers.EditorOnly.LayerLinkStates. If all LayerLinkStates are EMaterialLayerLinkState::LinkedToParent, treat the child as having no overrides even when MaterialLayers != ParentMaterialLayers is true. Alternatively, add a new method on FMaterialLayersFunctions to perform an equality/override check suitable for Material Analyzer in this context (i.e., ignoring editor-only tracking state as needed).
Expected Result:
Actual Result:
There's no existing public thread on this issue, so head over to Questions & Answers just mention UE-361331 in the post.
| 0 |
| Component | UE - Editor |
|---|---|
| Affects Versions | 5.6, 5.7 |
| Created | Jan 20, 2026 |
|---|---|
| Updated | Jan 20, 2026 |