Animation Curve and Material Layer

(This is a translation of a [Japanese [Content removed] by Ukyo Taro.)

Thank you for your continued support.

I am using UE5.6.0.

I am trying to allow the values of Material Parameters to change automatically using Animation Curves, based on the following document:

https://dev.epicgames.com/documentation/en\-us/unreal\-engine/animation\-curves\-in\-unreal\-engine

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?

Thank you.

再現手順
I have attached a sample program and video.

(a) Normal material animation (this can animate)

(b) Convert the (a) material into the one that is reconstructed using Material Layers (this cannot animate)

(c) Material that is the same as (b), but it is updated via Tick manually (this can animate)

Video:

Hello,

Thank you for reaching out.

I’ve been assigned this issue, and we will be looking into this behavior with Animation Curves and Material Layer parameters for you.

Hello,

The behavior you are seeing is expected.

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:

  1. Ensure all parameters that are updated by Animation Curves are global parameters
  2. Use C++ / blueprint code to drive the updates, manually supplying the extra information

Please let us know if this helps.

[mention removed]​

(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.

Thanks.

Hi Masahiro,

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.

[mention removed]​

Thank you very much for the information.

Please close this thread.

Thanks

(This is a translation of a Japanese post by Ukyo Taro.)

Thank you very much for your information.

I understand the rough estimate of Substrate. We’ll take this into account for our project.

Thanks.

[mention removed]​

(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.

We will pass on this ticket to our colleagues to help with the state of Substrate.