Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- UMaterial* TryAddMaterial(TMap<FString, UMaterial*>& Materials,const FString Name, UMaterialFactoryNew* MaterialFactory)
- {
- if (!Materials.Contains(Name))
- {
- UPackage* Package = CreatePackage(*(FString::Printf(TEXT("/Game/%s"), *Name)));
- UObject* NewMat = MaterialFactory->FactoryCreateNew(MaterialFactory->SupportedClass, Package, *Name, EObjectFlags::RF_Standalone | EObjectFlags::RF_Public, nullptr, GWarn);
- UMaterial* Material = Cast<UMaterial>(NewMat);
- Materials.Add(Name, Material);
- return Material;
- }
- return Materials[Name];
- }
- bool FMyPluginModule::Exec(UWorld* InWorld, const TCHAR* Cmd, FOutputDevice& Ar)
- {
- if (FParse::Command(&Cmd, TEXT("Ex")))
- {
- FString Param;
- if (FParse::Value(Cmd, TEXT("Path"), Param))
- {
- TArray<FString> FoundFiles = TArray<FString>();
- FFileManagerGeneric FileManager = FFileManagerGeneric();
- FileManager.FindFilesRecursive(FoundFiles, *Param, TEXT("*.png"), true, true, true);
- FString BaseColor = "_BaseColor";
- FString Normal = "_Normal";
- FString ORM = "_OcclusionRoughnessMetallic";
- FString Emissive = "_Emissive";
- FString FileName;
- TArray<UObject*> Imported = ImportTexture(FoundFiles);
- TMap<FString,UMaterial*> Materials;
- UMaterialFactoryNew* MatFactory = NewObject<UMaterialFactoryNew>();
- for (UObject* Texture : Imported)
- {
- FileName = Texture->GetName();
- //UE_LOG(LogTemp, Warning, TEXT("%s"), *Path);
- if (FileName.Contains(BaseColor))
- {
- FString Name;
- FileName.Split(BaseColor, &Name, nullptr);
- UMaterial* Material = TryAddMaterial(Materials, Name, MatFactory);
- Material->Modify(); //Start modify material
- UMaterialExpressionTextureSample* TextureExpression = NewObject<UMaterialExpressionTextureSample>(Material);
- TextureExpression->Texture = Cast<UTexture>(Texture);
- Material->Expressions.Add(TextureExpression);
- Material->BaseColor.Expression = TextureExpression;
- Material->PostEditChange();
- Material->MarkPackageDirty();
- }
- if (FileName.Contains(Normal))
- {
- FString Name;
- FileName.Split(Normal, &Name, nullptr);
- UMaterial* Material = TryAddMaterial(Materials, Name, MatFactory);
- Material->Modify(); //Start modify material
- UMaterialExpressionTextureSample* TextureExpression = NewObject<UMaterialExpressionTextureSample>(Material);
- TextureExpression->Texture = Cast<UTexture>(Texture);
- Material->Expressions.Add(TextureExpression);
- Material->Normal.Expression = TextureExpression;
- Material->PostEditChange();
- Material->MarkPackageDirty();
- }
- //if (FileName.Contains(ORM))
- //{
- // //capire come collegare i parametri separati
- // FString Name;
- // FileName.Split(ORM, &Name, nullptr);
- // UMaterial* Material = TryAddMaterial(Materials, Name, MatFactory);
- // Material->Modify(); //Start modify material
- // UMaterialExpressionTextureSample* TextureExpression = NewObject<UMaterialExpressionTextureSample>(Material);
- // TextureExpression->Texture = Cast<UTexture>(Texture);
- // Material->Expressions.Add(TextureExpression);
- // Material->AmbientOcclusion.Expression = TextureExpression;
- // Material->AmbientOcclusion.MaskR = 1;
- // Material->AmbientOcclusion.MaskG = 0;
- // Material->AmbientOcclusion.MaskB = 0;
- // Material->AmbientOcclusion.MaskA = 0;
- // Material->PostEditChange();
- // Material->MarkPackageDirty();
- //}
- //if (FileName.Contains(Emissive))
- //{
- // FString Name;
- // FileName.Split(Emissive, &Name, nullptr);
- // UMaterial* Material = TryAddMaterial(Materials, Name, MatFactory);
- // Material->Modify(); //Start modify material
- // UMaterialExpressionTextureSample* TextureExpression = NewObject<UMaterialExpressionTextureSample>(Material);
- // TextureExpression->Texture = Cast<UTexture>(Texture);
- // Material->Expressions.Add(TextureExpression);
- // Material->EmissiveColor.Expression = TextureExpression;
- // Material->PostEditChange();
- // Material->MarkPackageDirty();
- //}
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment