in my code i can get all textures mask and diffuse … but how i can detect the diffuse texture from textures
TArray<UMaterialInterface*> mats = smComponent->GetMaterials();
for (UMaterialInterface* mat : mats)
{
mat->GetUsedTextures(outTextures, EMaterialQualityLevel::High, false, ERHIFeatureLevel::Type::ES2, true);
mat->GetUsedTextures(outTextures, EMaterialQualityLevel::High, false, ERHIFeatureLevel::Type::ES3_1, true);
mat->GetUsedTextures(outTextures, EMaterialQualityLevel::High, false, ERHIFeatureLevel::Type::Num, true);
mat->GetUsedTextures(outTextures, EMaterialQualityLevel::High, false, ERHIFeatureLevel::Type::SM4, true);
mat->GetUsedTextures(outTextures, EMaterialQualityLevel::High, false, ERHIFeatureLevel::Type::SM5, true);
}
solved
TArray<UTexture*> textures;
FString xx;
FString name_D = "_D";
UTexture * tex_D;
if (mat->GetTextureParameterValue("Diffuse", tex_D))
{
name_D = tex_D->GetName();
}
else
{
name_D = (mat->GetMaterial()->GetBaseMaterial()->BaseColor.Expression->GetReferencedTexture()->GetName());
}
mat->GetBaseMaterial()->GetBaseMaterial()->GetUsedTextures(textures, EMaterialQualityLevel::High, true, ERHIFeatureLevel::Type::ES2, true);
mat->GetBaseMaterial()->GetBaseMaterial()->GetUsedTextures(textures, EMaterialQualityLevel::High, true, ERHIFeatureLevel::Type::ES3_1, true);
mat->GetBaseMaterial()->GetBaseMaterial()->GetUsedTextures(textures, EMaterialQualityLevel::High, true, ERHIFeatureLevel::Type::Num, true);
mat->GetBaseMaterial()->GetBaseMaterial()->GetUsedTextures(textures, EMaterialQualityLevel::High, true, ERHIFeatureLevel::Type::SM4, true);
mat->GetBaseMaterial()->GetBaseMaterial()->GetUsedTextures(textures, EMaterialQualityLevel::High, true, ERHIFeatureLevel::Type::SM5, true);
if (textures.Num() > 0)
{
FString NumX;
NumX = FString::FromInt(textures.Num());
for (UTexture* tex : textures)
{
FString sID = tex->GetName();
if (tex->GetName()==name_D)
{
//now the tex is the Diffuse texture
}
}
}
TArray<UTexture*> textures;
FString xx;
FString name_D = "_D";
UTexture * tex_D;
if (mat->GetTextureParameterValue("Diffuse", tex_D))
{
name_D = tex_D->GetName();
}
else
{
if (mat->GetTextureParameterValue("BaseColor", tex_D))
{
name_D = tex_D->GetName();
}
else
{
if (mat->GetMaterial() != NULL)
if (mat->GetMaterial()->GetBaseMaterial() != NULL)
if (mat->GetMaterial()->GetBaseMaterial()->BaseColor.Expression != NULL)
if (mat->GetMaterial()->GetBaseMaterial()->BaseColor.Expression->GetReferencedTexture() != NULL)
name_D = (mat->GetMaterial()->GetBaseMaterial()->BaseColor.Expression->GetReferencedTexture()->GetName());
}
}
mat->GetBaseMaterial()->GetBaseMaterial()->GetUsedTextures(textures, EMaterialQualityLevel::High, true, ERHIFeatureLevel::Type::ES2, true);
mat->GetBaseMaterial()->GetBaseMaterial()->GetUsedTextures(textures, EMaterialQualityLevel::High, true, ERHIFeatureLevel::Type::ES3_1, true);
mat->GetBaseMaterial()->GetBaseMaterial()->GetUsedTextures(textures, EMaterialQualityLevel::High, true, ERHIFeatureLevel::Type::Num, true);
mat->GetBaseMaterial()->GetBaseMaterial()->GetUsedTextures(textures, EMaterialQualityLevel::High, true, ERHIFeatureLevel::Type::SM4, true);
mat->GetBaseMaterial()->GetBaseMaterial()->GetUsedTextures(textures, EMaterialQualityLevel::High, true, ERHIFeatureLevel::Type::SM5, true);
if (textures.Num() > 0)
{
FString NumX;
NumX = FString::FromInt(textures.Num());
for (UTexture* tex : textures)
{
FString sID = tex->GetName();
if (tex->GetName()==name_D)
{
//now the tex is the Diffuse texture
}
}
}