I have confirmed that it works as described in the document with a normal material, but if the material is composed of Material Layers, it seems to me that the parameters are not automatically updated even if the curve names and parameter names matched.
I’d appreciate it if you could clarify the following points regarding this behavior?
(1) In materials that use Material Layers, is it the expected behavior that the parameters are not affected even if the animation curve names and material parameter names matched?
(2) If (1) is the current behavior, what methods would you recommend for users to apply the values of the animation curve to the material?
For example, would it be appropriate to get the values of the animation curve with a Blueprint’s Tick and set them on a Material Instance Dynamic?
Parameters on Material Layers and Material Layer Blends can have the same name as parameters on other Material Layers, Material Layer Blends, or the Global Material Parameters.
The Animation Curve system can only set Global Material Parameters, because it is based solely on the parameter’s name. Even your blueprint has to supply additional information to locate the parameter, namely, the Association and the Material Layer it is part of.
For more information on how these updates are applied, please see the following functions:
“USkeletalMeshComponent::ApplyAnimationCurvesToComponent(…)” from SkeletalMeshComponent.cpp
“UMeshComponent::SetScalarParameterValueOnMaterials(…)” from MeshComponent.cpp
“UMaterialInstanceDynamic::SetScalarParameterValue(FName ParameterName, float Value)” from MaterialInstanceDynamic.cpp
The Material Layer system is no longer receiving updates or fixes, as it is being replaced by Substrate. For more information on that, please see Jon Cain’s answer in this thread:
[Content removed]
To fix your immediate problem, you can try two solutions:
Ensure all parameters that are updated by Animation Curves are global parameters
Use C++ / blueprint code to drive the updates, manually supplying the extra information
(This is a translation of a Japanese post by Ukyo Taro.)
So, I have an additional question. I thought Substrate, which is mentioned in your reply, is currently in beta, but is it already in a Product Ready state?
If not, could you give me a rough estimate of when it might become available for production? A rough idea would be enough.
We aim to make Substrate production-ready by 5.7, at least on all Gen 9 consoles and PC platforms. Some optimizations still need to be done on lower-end platforms, so please take this as a rough estimate, as this deadline might still change.
(This is a translation of a Japanese post by Ukyo Taro.)
Thank you very much for looking into this case, which is helpful.
I understand the behavior is expected. So I’ll take the second option (“Use C++ / blueprint code to drive the updates, manually supplying the extra information”).
I appreciate your support. Please close this thread.