Skip to content

Commit cf11c82

Browse files
YOungchenyong2github
YOung
authored andcommitted
sequencer material layer parameters
1 parent 2b4eb58 commit cf11c82

File tree

2 files changed

+87
-17
lines changed

2 files changed

+87
-17
lines changed

Engine/Source/Editor/MovieSceneTools/Private/TrackEditors/MaterialTrackEditor.cpp

Lines changed: 54 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
#include "Components/PrimitiveComponent.h"
77
#include "Materials/Material.h"
88
#include "Materials/MaterialInstance.h"
9+
#include "Materials/MaterialInstanceDynamic.h"
910
#include "Sections/MovieSceneParameterSection.h"
1011
#include "Tracks/MovieSceneMaterialTrack.h"
1112
#include "Sections/ParameterSection.h"
@@ -66,11 +67,16 @@ TSharedRef<SWidget> FMaterialTrackEditor::OnGetAddParameterMenuContent( FGuid Ob
6667
FMenuBuilder AddParameterMenuBuilder( true, nullptr );
6768

6869
UMaterial* Material = GetMaterialForTrack( ObjectBinding, MaterialTrack );
70+
UMaterialInterface* MaterialInterface = nullptr;
6971
if ( Material != nullptr )
7072
{
71-
UMaterialInterface* MaterialInterface = GetMaterialInterfaceForTrack(ObjectBinding, MaterialTrack);
72-
73-
UMaterialInstance* MaterialInstance = Cast<UMaterialInstance>( MaterialInterface );
73+
MaterialInterface = GetMaterialInterfaceForTrack(ObjectBinding, MaterialTrack);
74+
75+
UMaterialInstanceDynamic* MaterialInstanceDynamic = Cast<UMaterialInstanceDynamic>(MaterialInterface);
76+
UMaterialInstance* MaterialInstance = Cast<UMaterialInstance>(MaterialInterface);
77+
78+
MaterialInterface = MaterialInstanceDynamic ? MaterialInstanceDynamic->Parent : (MaterialInstance ? MaterialInstance : MaterialInterface);
79+
7480
TArray<FMaterialParameterInfo> VisibleExpressions;
7581

7682
IMaterialEditorModule* MaterialEditorModule = &FModuleManager::LoadModuleChecked<IMaterialEditorModule>( "MaterialEditor" );
@@ -86,10 +92,11 @@ TSharedRef<SWidget> FMaterialTrackEditor::OnGetAddParameterMenuContent( FGuid Ob
8692
// Collect scalar parameters.
8793
TArray<FMaterialParameterInfo> ScalarParameterInfo;
8894
TArray<FGuid> ScalarParameterGuids;
89-
Material->GetAllScalarParameterInfo(ScalarParameterInfo, ScalarParameterGuids );
95+
MaterialInterface->GetAllScalarParameterInfo(ScalarParameterInfo, ScalarParameterGuids);
96+
9097
for (int32 ScalarParameterIndex = 0; ScalarParameterIndex < ScalarParameterInfo.Num(); ++ScalarParameterIndex)
9198
{
92-
if (!bCollectedVisibleParameters || VisibleExpressions.Contains(FMaterialParameterInfo(ScalarParameterInfo[ScalarParameterIndex].Name)))
99+
if (!bCollectedVisibleParameters || VisibleExpressions.Contains(FMaterialParameterInfo(ScalarParameterInfo[ScalarParameterIndex].Name, ScalarParameterInfo[ScalarParameterIndex].Association, ScalarParameterInfo[ScalarParameterIndex].Index)))
93100
{
94101
FName ScalarParameterName = ScalarParameterInfo[ScalarParameterIndex].Name;
95102
FUIAction AddParameterMenuAction( FExecuteAction::CreateSP( this, &FMaterialTrackEditor::AddScalarParameter, ObjectBinding, MaterialTrack, ScalarParameterName ) );
@@ -101,7 +108,8 @@ TSharedRef<SWidget> FMaterialTrackEditor::OnGetAddParameterMenuContent( FGuid Ob
101108
// Collect color parameters.
102109
TArray<FMaterialParameterInfo> ColorParameterInfo;
103110
TArray<FGuid> ColorParameterGuids;
104-
Material->GetAllVectorParameterInfo( ColorParameterInfo, ColorParameterGuids );
111+
MaterialInterface->GetAllVectorParameterInfo(ColorParameterInfo, ColorParameterGuids);
112+
105113
for (int32 ColorParameterIndex = 0; ColorParameterIndex < ColorParameterInfo.Num(); ++ColorParameterIndex)
106114
{
107115
if (!bCollectedVisibleParameters || VisibleExpressions.Contains(FMaterialParameterInfo(ColorParameterInfo[ColorParameterIndex].Name)))
@@ -152,12 +160,28 @@ void FMaterialTrackEditor::AddScalarParameter( FGuid ObjectBinding, UMovieSceneM
152160
{
153161
FFrameNumber KeyTime = GetTimeForKey();
154162

155-
UMaterialInterface* Material = GetMaterialInterfaceForTrack(ObjectBinding, MaterialTrack);
156-
if (Material != nullptr)
163+
UMaterialInterface* MaterialInterface = GetMaterialInterfaceForTrack(ObjectBinding, MaterialTrack);
164+
if (MaterialInterface != nullptr)
157165
{
158-
const FScopedTransaction Transaction( LOCTEXT( "AddScalarParameter", "Add scalar parameter" ) );
166+
const FScopedTransaction Transaction(LOCTEXT("AddScalarParameter", "Add scalar parameter"));
159167
float ParameterValue;
160-
Material->GetScalarParameterValue(ParameterName, ParameterValue);
168+
169+
UMaterialInstanceDynamic* MaterialInstanceDynamic = Cast<UMaterialInstanceDynamic>(MaterialInterface);
170+
UMaterialInstance* MaterialInstance = Cast<UMaterialInstance>(MaterialInterface);
171+
MaterialInterface = MaterialInstanceDynamic ? MaterialInstanceDynamic->Parent : (MaterialInstance ? MaterialInstance : MaterialInterface);
172+
173+
TArray<FMaterialParameterInfo> ParameterInfos;
174+
TArray<FGuid> Guids;
175+
MaterialInterface->GetAllScalarParameterInfo(ParameterInfos, Guids);
176+
for (const FMaterialParameterInfo& ParameterInfo : ParameterInfos)
177+
{
178+
if (ParameterInfo.Name == ParameterName)
179+
{
180+
MaterialInterface->GetScalarParameterValue(ParameterInfo, ParameterValue);
181+
break;
182+
}
183+
}
184+
161185
MaterialTrack->Modify();
162186
MaterialTrack->AddScalarParameterKey(ParameterName, KeyTime, ParameterValue);
163187
}
@@ -169,12 +193,28 @@ void FMaterialTrackEditor::AddColorParameter( FGuid ObjectBinding, UMovieSceneMa
169193
{
170194
FFrameNumber KeyTime = GetTimeForKey();
171195

172-
UMaterialInterface* Material = GetMaterialInterfaceForTrack( ObjectBinding, MaterialTrack );
173-
if ( Material != nullptr )
196+
UMaterialInterface* MaterialInterface = GetMaterialInterfaceForTrack( ObjectBinding, MaterialTrack );
197+
if ( MaterialInterface != nullptr )
174198
{
175-
const FScopedTransaction Transaction( LOCTEXT( "AddVectorParameter", "Add vector parameter" ) );
199+
const FScopedTransaction Transaction(LOCTEXT("AddVectorParameter", "Add vector parameter"));
176200
FLinearColor ParameterValue;
177-
Material->GetVectorParameterValue( ParameterName, ParameterValue );
201+
202+
UMaterialInstanceDynamic* MaterialInstanceDynamic = Cast<UMaterialInstanceDynamic>(MaterialInterface);
203+
UMaterialInstance* MaterialInstance = Cast<UMaterialInstance>(MaterialInterface);
204+
MaterialInterface = MaterialInstanceDynamic ? MaterialInstanceDynamic->Parent : (MaterialInstance ? MaterialInstance : MaterialInterface);
205+
206+
TArray<FMaterialParameterInfo> ParameterInfos;
207+
TArray<FGuid> Guids;
208+
MaterialInterface->GetAllVectorParameterInfo(ParameterInfos, Guids);
209+
for (const FMaterialParameterInfo& ParameterInfo : ParameterInfos)
210+
{
211+
if (ParameterInfo.Name == ParameterName)
212+
{
213+
MaterialInterface->GetVectorParameterValue(ParameterInfo, ParameterValue);
214+
break;
215+
}
216+
}
217+
178218
MaterialTrack->Modify();
179219
MaterialTrack->AddColorParameterKey( ParameterName, KeyTime, ParameterValue );
180220
}

Engine/Source/Runtime/MovieSceneTracks/Private/Evaluation/MovieSceneParameterTemplate.cpp

Lines changed: 33 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -114,17 +114,47 @@ void FMovieSceneParameterSectionTemplate::EvaluateCurves(const FMovieSceneContex
114114

115115
void FDefaultMaterialAccessor::Apply(UMaterialInstanceDynamic& Material, const FEvaluatedParameterSectionValues& Values)
116116
{
117+
check(Material.Parent);
118+
119+
TArray<FMaterialParameterInfo> ParameterInfos;
120+
TArray<FGuid> Guids;
121+
122+
Material.Parent->GetAllScalarParameterInfo(ParameterInfos, Guids);
117123
for (const FScalarParameterNameAndValue& ScalarValue : Values.ScalarValues)
118124
{
119-
Material.SetScalarParameterValue(ScalarValue.ParameterName, ScalarValue.Value);
125+
for (const FMaterialParameterInfo& ParameterInfo : ParameterInfos)
126+
{
127+
if (ParameterInfo.Name == ScalarValue.ParameterName)
128+
{
129+
Material.SetScalarParameterValueByInfo(ParameterInfo, ScalarValue.Value);
130+
break;
131+
}
132+
}
120133
}
134+
135+
Material.Parent->GetAllVectorParameterInfo(ParameterInfos, Guids);
121136
for (const FVectorParameterNameAndValue& VectorValue : Values.VectorValues)
122137
{
123-
Material.SetVectorParameterValue(VectorValue.ParameterName, VectorValue.Value);
138+
for (const FMaterialParameterInfo& ParameterInfo : ParameterInfos)
139+
{
140+
if (ParameterInfo.Name == VectorValue.ParameterName)
141+
{
142+
Material.SetVectorParameterValueByInfo(ParameterInfo, VectorValue.Value);
143+
break;
144+
}
145+
}
124146
}
147+
125148
for (const FColorParameterNameAndValue& ColorValue : Values.ColorValues)
126149
{
127-
Material.SetVectorParameterValue(ColorValue.ParameterName, ColorValue.Value);
150+
for (const FMaterialParameterInfo& ParameterInfo : ParameterInfos)
151+
{
152+
if (ParameterInfo.Name == ColorValue.ParameterName)
153+
{
154+
Material.SetVectorParameterValueByInfo(ParameterInfo, ColorValue.Value);
155+
break;
156+
}
157+
}
128158
}
129159
}
130160

0 commit comments

Comments
 (0)