fix a couple of bugs with importing without material instances

This commit is contained in:
Menotdan
2023-05-22 14:26:20 -04:00
parent 4acfffeaf4
commit 284c3d832a
3 changed files with 28 additions and 8 deletions

View File

@@ -437,6 +437,12 @@ namespace FlaxEditor.Content.Import
internal void ToInternal(out InternalOptions options) internal void ToInternal(out InternalOptions options)
{ {
Guid instanceToImportAsGuid = Guid.Empty;
if (InstanceToImportAs != null)
{
instanceToImportAsGuid = InstanceToImportAs.ID;
}
options = new InternalOptions options = new InternalOptions
{ {
Type = Type, Type = Type,
@@ -472,7 +478,7 @@ namespace FlaxEditor.Content.Import
TriangleReduction = TriangleReduction, TriangleReduction = TriangleReduction,
ImportMaterials = (byte)(ImportMaterials ? 1 : 0), ImportMaterials = (byte)(ImportMaterials ? 1 : 0),
ImportMaterialsAsInstances = (byte)(ImportMaterialsAsInstances ? 1 : 0), ImportMaterialsAsInstances = (byte)(ImportMaterialsAsInstances ? 1 : 0),
InstanceToImportAs = InstanceToImportAs.ID, InstanceToImportAs = instanceToImportAsGuid,
ImportTextures = (byte)(ImportTextures ? 1 : 0), ImportTextures = (byte)(ImportTextures ? 1 : 0),
RestoreMaterialsOnReimport = (byte)(RestoreMaterialsOnReimport ? 1 : 0), RestoreMaterialsOnReimport = (byte)(RestoreMaterialsOnReimport ? 1 : 0),
GenerateSDF = (byte)(GenerateSDF ? 1 : 0), GenerateSDF = (byte)(GenerateSDF ? 1 : 0),
@@ -484,6 +490,16 @@ namespace FlaxEditor.Content.Import
internal void FromInternal(ref InternalOptions options) internal void FromInternal(ref InternalOptions options)
{ {
Material instanceToImportAsMat = null;
if (options.InstanceToImportAs != Guid.Empty)
{
AssetInfo assetInfo;
if (FlaxEngine.Content.GetAssetInfo(options.InstanceToImportAs, out assetInfo))
{
instanceToImportAsMat = FlaxEngine.Content.Load<Material>(options.InstanceToImportAs);
}
}
Type = options.Type; Type = options.Type;
CalculateNormals = options.CalculateNormals != 0; CalculateNormals = options.CalculateNormals != 0;
SmoothingNormalsAngle = options.SmoothingNormalsAngle; SmoothingNormalsAngle = options.SmoothingNormalsAngle;
@@ -516,7 +532,7 @@ namespace FlaxEditor.Content.Import
TriangleReduction = options.TriangleReduction; TriangleReduction = options.TriangleReduction;
ImportMaterials = options.ImportMaterials != 0; ImportMaterials = options.ImportMaterials != 0;
ImportMaterialsAsInstances = options.ImportMaterialsAsInstances != 0; ImportMaterialsAsInstances = options.ImportMaterialsAsInstances != 0;
InstanceToImportAs = FlaxEngine.Content.Load<Material>(options.InstanceToImportAs); InstanceToImportAs = instanceToImportAsMat;
ImportTextures = options.ImportTextures != 0; ImportTextures = options.ImportTextures != 0;
RestoreMaterialsOnReimport = options.RestoreMaterialsOnReimport != 0; RestoreMaterialsOnReimport = options.RestoreMaterialsOnReimport != 0;
GenerateSDF = options.GenerateSDF != 0; GenerateSDF = options.GenerateSDF != 0;

View File

@@ -30,6 +30,7 @@
#if ENABLE_ASSETS_DISCOVERY #if ENABLE_ASSETS_DISCOVERY
#include "Engine/Core/Collections/HashSet.h" #include "Engine/Core/Collections/HashSet.h"
#endif #endif
#include <Engine/Debug/DebugLog.h>
TimeSpan Content::AssetsUpdateInterval = TimeSpan::FromMilliseconds(500); TimeSpan Content::AssetsUpdateInterval = TimeSpan::FromMilliseconds(500);
TimeSpan Content::AssetsUnloadInterval = TimeSpan::FromSeconds(10); TimeSpan Content::AssetsUnloadInterval = TimeSpan::FromSeconds(10);
@@ -1003,6 +1004,7 @@ Asset* Content::load(const Guid& id, const ScriptingTypeHandle& type, AssetInfo&
if (!GetAssetInfo(id, assetInfo)) if (!GetAssetInfo(id, assetInfo))
{ {
LOG(Warning, "Invalid or missing asset ({0}, {1}).", id.ToString(Guid::FormatType::N), type.ToString()); LOG(Warning, "Invalid or missing asset ({0}, {1}).", id.ToString(Guid::FormatType::N), type.ToString());
LOG(Warning, "{0}", DebugLog::GetStackTrace());
return nullptr; return nullptr;
} }

View File

@@ -863,18 +863,19 @@ bool ModelTool::ImportModel(const String& path, ModelData& meshData, Options& op
importedFileNames.Add(filename); importedFileNames.Add(filename);
#if COMPILE_WITH_ASSETS_IMPORTER #if COMPILE_WITH_ASSETS_IMPORTER
auto assetPath = autoImportOutput / filename + ASSET_FILES_EXTENSION_WITH_DOT; auto assetPath = autoImportOutput / filename + ASSET_FILES_EXTENSION_WITH_DOT;
if (options.ImportMaterialsAsInstances) { if (options.ImportMaterialsAsInstances)
LOG(Warning, "Adding material instance for {0}", assetPath); {
AssetsImportingManager::Create(AssetsImportingManager::CreateMaterialInstanceTag, assetPath, material.AssetID); AssetsImportingManager::Create(AssetsImportingManager::CreateMaterialInstanceTag, assetPath, material.AssetID);
MaterialInstance* materialInstance = (MaterialInstance*) LoadAsset(assetPath, MaterialInstance::TypeInitializer); MaterialInstance* materialInstance = (MaterialInstance*) LoadAsset(assetPath, MaterialInstance::TypeInitializer);
if (materialInstance->WaitForLoaded()) { if (materialInstance->WaitForLoaded())
{
LOG(Error, "Failed to load material instance after creation. ({0})", assetPath); LOG(Error, "Failed to load material instance after creation. ({0})", assetPath);
return true; return true;
} }
MaterialBase* materialInstanceOf = (MaterialBase*) LoadAsset(options.InstanceToImportAs, MaterialBase::TypeInitializer); MaterialBase* materialInstanceOf = (MaterialBase*) LoadAsset(options.InstanceToImportAs, MaterialBase::TypeInitializer);
if (materialInstanceOf->WaitForLoaded()) { if (materialInstanceOf->WaitForLoaded())
{
LOG(Error, "Failed to load material to create an instance of. ({0})", options.InstanceToImportAs); LOG(Error, "Failed to load material to create an instance of. ({0})", options.InstanceToImportAs);
return true; return true;
} }
@@ -882,7 +883,8 @@ bool ModelTool::ImportModel(const String& path, ModelData& meshData, Options& op
materialInstance->SetBaseMaterial(materialInstanceOf); materialInstance->SetBaseMaterial(materialInstanceOf);
materialInstance->Save(); materialInstance->Save();
} }
else { else
{
CreateMaterial::Options materialOptions; CreateMaterial::Options materialOptions;
materialOptions.Diffuse.Color = material.Diffuse.Color; materialOptions.Diffuse.Color = material.Diffuse.Color;
if (material.Diffuse.TextureIndex != -1) if (material.Diffuse.TextureIndex != -1)