AssoAndrea

Untitled

May 6th, 2022
963
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.06 KB | None | 0 0
  1. UMaterial* TryAddMaterial(TMap<FString, UMaterial*>& Materials,const FString Name, UMaterialFactoryNew* MaterialFactory)
  2. {
  3.     if (!Materials.Contains(Name))
  4.     {
  5.         UPackage* Package = CreatePackage(*(FString::Printf(TEXT("/Game/%s"), *Name)));
  6.         UObject* NewMat = MaterialFactory->FactoryCreateNew(MaterialFactory->SupportedClass, Package, *Name, EObjectFlags::RF_Standalone | EObjectFlags::RF_Public, nullptr, GWarn);
  7.         UMaterial* Material = Cast<UMaterial>(NewMat);
  8.         Materials.Add(Name, Material);
  9.         return Material;
  10.     }
  11.     return Materials[Name];
  12. }
  13.  
  14.  
  15. bool FMyPluginModule::Exec(UWorld* InWorld, const TCHAR* Cmd, FOutputDevice& Ar)
  16. {
  17.     if (FParse::Command(&Cmd, TEXT("Ex")))
  18.     {
  19.         FString Param;
  20.         if (FParse::Value(Cmd, TEXT("Path"), Param))
  21.         {
  22.             TArray<FString> FoundFiles = TArray<FString>();
  23.             FFileManagerGeneric FileManager = FFileManagerGeneric();
  24.             FileManager.FindFilesRecursive(FoundFiles, *Param, TEXT("*.png"), true, true, true);
  25.             FString BaseColor = "_BaseColor";
  26.             FString Normal = "_Normal";
  27.             FString ORM = "_OcclusionRoughnessMetallic";
  28.             FString Emissive = "_Emissive";
  29.             FString FileName;
  30.             TArray<UObject*> Imported = ImportTexture(FoundFiles);
  31.             TMap<FString,UMaterial*> Materials;
  32.             UMaterialFactoryNew* MatFactory = NewObject<UMaterialFactoryNew>();
  33.             for (UObject* Texture : Imported)
  34.             {
  35.                 FileName = Texture->GetName();
  36.                 //UE_LOG(LogTemp, Warning, TEXT("%s"), *Path);
  37.  
  38.                 if (FileName.Contains(BaseColor))
  39.                 {
  40.                     FString Name;
  41.                     FileName.Split(BaseColor, &Name, nullptr);
  42.                     UMaterial* Material = TryAddMaterial(Materials, Name, MatFactory);
  43.                    
  44.                     Material->Modify(); //Start modify material
  45.                     UMaterialExpressionTextureSample* TextureExpression = NewObject<UMaterialExpressionTextureSample>(Material);
  46.                     TextureExpression->Texture  = Cast<UTexture>(Texture);
  47.                     Material->Expressions.Add(TextureExpression);
  48.                     Material->BaseColor.Expression = TextureExpression;
  49.                     Material->PostEditChange();
  50.                     Material->MarkPackageDirty();
  51.                 }
  52.                 if (FileName.Contains(Normal))
  53.                 {
  54.                     FString Name;
  55.                     FileName.Split(Normal, &Name, nullptr);
  56.                     UMaterial* Material = TryAddMaterial(Materials, Name, MatFactory);
  57.                    
  58.                     Material->Modify(); //Start modify material
  59.                     UMaterialExpressionTextureSample* TextureExpression = NewObject<UMaterialExpressionTextureSample>(Material);
  60.                     TextureExpression->Texture = Cast<UTexture>(Texture);
  61.                     Material->Expressions.Add(TextureExpression);
  62.                     Material->Normal.Expression = TextureExpression;
  63.                     Material->PostEditChange();
  64.                     Material->MarkPackageDirty();
  65.                 }
  66.                 //if (FileName.Contains(ORM))
  67.                 //{
  68.                 //  //capire come collegare i parametri separati
  69.                 //  FString Name;
  70.                 //  FileName.Split(ORM, &Name, nullptr);
  71.                 //  UMaterial* Material = TryAddMaterial(Materials, Name, MatFactory);
  72.  
  73.                 //  Material->Modify(); //Start modify material
  74.                 //  UMaterialExpressionTextureSample* TextureExpression = NewObject<UMaterialExpressionTextureSample>(Material);
  75.                 //  TextureExpression->Texture = Cast<UTexture>(Texture);
  76.                 //  Material->Expressions.Add(TextureExpression);
  77.                 //  Material->AmbientOcclusion.Expression = TextureExpression;
  78.                 //  Material->AmbientOcclusion.MaskR = 1;
  79.                 //  Material->AmbientOcclusion.MaskG = 0;
  80.                 //  Material->AmbientOcclusion.MaskB = 0;
  81.                 //  Material->AmbientOcclusion.MaskA = 0;
  82.                 //  Material->PostEditChange();
  83.                 //  Material->MarkPackageDirty();
  84.                 //}
  85.                 //if (FileName.Contains(Emissive))
  86.                 //{
  87.                 //  FString Name;
  88.                 //  FileName.Split(Emissive, &Name, nullptr);
  89.                 //  UMaterial* Material = TryAddMaterial(Materials, Name, MatFactory);
  90.  
  91.                 //  Material->Modify(); //Start modify material
  92.                 //  UMaterialExpressionTextureSample* TextureExpression = NewObject<UMaterialExpressionTextureSample>(Material);
  93.                 //  TextureExpression->Texture = Cast<UTexture>(Texture);
  94.                 //  Material->Expressions.Add(TextureExpression);
  95.                 //  Material->EmissiveColor.Expression = TextureExpression;
  96.                 //  Material->PostEditChange();
  97.                 //  Material->MarkPackageDirty();
  98.                 //}
  99.             }
  100.         }
  101.     }
Advertisement
Add Comment
Please, Sign In to add comment