6
6
#include " Components/PrimitiveComponent.h"
7
7
#include " Materials/Material.h"
8
8
#include " Materials/MaterialInstance.h"
9
+ #include " Materials/MaterialInstanceDynamic.h"
9
10
#include " Sections/MovieSceneParameterSection.h"
10
11
#include " Tracks/MovieSceneMaterialTrack.h"
11
12
#include " Sections/ParameterSection.h"
@@ -66,11 +67,16 @@ TSharedRef<SWidget> FMaterialTrackEditor::OnGetAddParameterMenuContent( FGuid Ob
66
67
FMenuBuilder AddParameterMenuBuilder ( true , nullptr );
67
68
68
69
UMaterial* Material = GetMaterialForTrack ( ObjectBinding, MaterialTrack );
70
+ UMaterialInterface* MaterialInterface = nullptr ;
69
71
if ( Material != nullptr )
70
72
{
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
+
74
80
TArray<FMaterialParameterInfo> VisibleExpressions;
75
81
76
82
IMaterialEditorModule* MaterialEditorModule = &FModuleManager::LoadModuleChecked<IMaterialEditorModule>( " MaterialEditor" );
@@ -86,10 +92,11 @@ TSharedRef<SWidget> FMaterialTrackEditor::OnGetAddParameterMenuContent( FGuid Ob
86
92
// Collect scalar parameters.
87
93
TArray<FMaterialParameterInfo> ScalarParameterInfo;
88
94
TArray<FGuid> ScalarParameterGuids;
89
- Material->GetAllScalarParameterInfo (ScalarParameterInfo, ScalarParameterGuids );
95
+ MaterialInterface->GetAllScalarParameterInfo (ScalarParameterInfo, ScalarParameterGuids);
96
+
90
97
for (int32 ScalarParameterIndex = 0 ; ScalarParameterIndex < ScalarParameterInfo.Num (); ++ScalarParameterIndex)
91
98
{
92
- if (!bCollectedVisibleParameters || VisibleExpressions.Contains (FMaterialParameterInfo (ScalarParameterInfo[ScalarParameterIndex].Name )))
99
+ if (!bCollectedVisibleParameters || VisibleExpressions.Contains (FMaterialParameterInfo (ScalarParameterInfo[ScalarParameterIndex].Name , ScalarParameterInfo[ScalarParameterIndex]. Association , ScalarParameterInfo[ScalarParameterIndex]. Index )))
93
100
{
94
101
FName ScalarParameterName = ScalarParameterInfo[ScalarParameterIndex].Name ;
95
102
FUIAction AddParameterMenuAction ( FExecuteAction::CreateSP ( this , &FMaterialTrackEditor::AddScalarParameter, ObjectBinding, MaterialTrack, ScalarParameterName ) );
@@ -101,7 +108,8 @@ TSharedRef<SWidget> FMaterialTrackEditor::OnGetAddParameterMenuContent( FGuid Ob
101
108
// Collect color parameters.
102
109
TArray<FMaterialParameterInfo> ColorParameterInfo;
103
110
TArray<FGuid> ColorParameterGuids;
104
- Material->GetAllVectorParameterInfo ( ColorParameterInfo, ColorParameterGuids );
111
+ MaterialInterface->GetAllVectorParameterInfo (ColorParameterInfo, ColorParameterGuids);
112
+
105
113
for (int32 ColorParameterIndex = 0 ; ColorParameterIndex < ColorParameterInfo.Num (); ++ColorParameterIndex)
106
114
{
107
115
if (!bCollectedVisibleParameters || VisibleExpressions.Contains (FMaterialParameterInfo (ColorParameterInfo[ColorParameterIndex].Name )))
@@ -152,12 +160,28 @@ void FMaterialTrackEditor::AddScalarParameter( FGuid ObjectBinding, UMovieSceneM
152
160
{
153
161
FFrameNumber KeyTime = GetTimeForKey ();
154
162
155
- UMaterialInterface* Material = GetMaterialInterfaceForTrack (ObjectBinding, MaterialTrack);
156
- if (Material != nullptr )
163
+ UMaterialInterface* MaterialInterface = GetMaterialInterfaceForTrack (ObjectBinding, MaterialTrack);
164
+ if (MaterialInterface != nullptr )
157
165
{
158
- const FScopedTransaction Transaction ( LOCTEXT ( " AddScalarParameter" , " Add scalar parameter" ) );
166
+ const FScopedTransaction Transaction (LOCTEXT (" AddScalarParameter" , " Add scalar parameter" ) );
159
167
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
+
161
185
MaterialTrack->Modify ();
162
186
MaterialTrack->AddScalarParameterKey (ParameterName, KeyTime, ParameterValue);
163
187
}
@@ -169,12 +193,28 @@ void FMaterialTrackEditor::AddColorParameter( FGuid ObjectBinding, UMovieSceneMa
169
193
{
170
194
FFrameNumber KeyTime = GetTimeForKey ();
171
195
172
- UMaterialInterface* Material = GetMaterialInterfaceForTrack ( ObjectBinding, MaterialTrack );
173
- if ( Material != nullptr )
196
+ UMaterialInterface* MaterialInterface = GetMaterialInterfaceForTrack ( ObjectBinding, MaterialTrack );
197
+ if ( MaterialInterface != nullptr )
174
198
{
175
- const FScopedTransaction Transaction ( LOCTEXT ( " AddVectorParameter" , " Add vector parameter" ) );
199
+ const FScopedTransaction Transaction (LOCTEXT (" AddVectorParameter" , " Add vector parameter" ) );
176
200
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
+
178
218
MaterialTrack->Modify ();
179
219
MaterialTrack->AddColorParameterKey ( ParameterName, KeyTime, ParameterValue );
180
220
}
0 commit comments