Fix importing emissive, roughness, metalness and wireframe properties of materials with Assimp

#3418
This commit is contained in:
Wojtek Figat
2025-09-23 15:42:49 +02:00
parent dc05bbbbcd
commit d8f7199c11
6 changed files with 62 additions and 6 deletions

View File

@@ -1520,6 +1520,9 @@ bool ModelTool::ImportModel(const String& path, ModelData& data, Options& option
const Char* roughnessNames[] = { TEXT("roughness"), TEXT("rough") };
TrySetupMaterialParameter(materialInstance, ToSpan(roughnessNames, ARRAY_COUNT(roughnessNames)), material.Roughness.Value, MaterialParameterType::Float);
TRY_SETUP_TEXTURE_PARAM(Roughness, roughnessNames, Texture);
const Char* metalnessNames[] = { TEXT("metalness"), TEXT("metallic") };
TrySetupMaterialParameter(materialInstance, ToSpan(metalnessNames, ARRAY_COUNT(metalnessNames)), material.Metalness.Value, MaterialParameterType::Float);
TRY_SETUP_TEXTURE_PARAM(Metalness, metalnessNames, Texture);
#undef TRY_SETUP_TEXTURE_PARAM
materialInstance->Save();
@@ -1545,11 +1548,22 @@ bool ModelTool::ImportModel(const String& path, ModelData& data, Options& option
materialOptions.Opacity.Texture = data.Textures[material.Opacity.TextureIndex].AssetID;
materialOptions.Roughness.Value = material.Roughness.Value;
if (material.Roughness.TextureIndex != -1)
{
materialOptions.Roughness.Texture = data.Textures[material.Roughness.TextureIndex].AssetID;
materialOptions.Roughness.Channel = material.Roughness.Channel;
}
materialOptions.Metalness.Value = material.Metalness.Value;
if (material.Metalness.TextureIndex != -1)
{
materialOptions.Metalness.Texture = data.Textures[material.Metalness.TextureIndex].AssetID;
materialOptions.Metalness.Channel = material.Metalness.Channel;
}
if (material.Normals.TextureIndex != -1)
materialOptions.Normals.Texture = data.Textures[material.Normals.TextureIndex].AssetID;
if (material.TwoSided || material.Diffuse.HasAlphaMask)
materialOptions.Info.CullMode = CullMode::TwoSided;
if (material.Wireframe)
materialOptions.Info.FeaturesFlags |= MaterialFeaturesFlags::Wireframe;
if (!Math::IsOne(material.Opacity.Value) || material.Opacity.TextureIndex != -1)
materialOptions.Info.BlendMode = MaterialBlendMode::Transparent;
AssetsImportingManager::Create(AssetsImportingManager::CreateMaterialTag, assetPath, material.AssetID, &materialOptions);