Figured out where I actually need to add code, and added code there.

This commit is contained in:
Menotdan
2023-05-21 00:20:54 -04:00
parent 89ce2b087e
commit f03bb60d5b
3 changed files with 55 additions and 19 deletions

View File

@@ -207,7 +207,7 @@ struct OpenFbxImporterData
return false; return false;
} }
int32 AddMaterial(ImportedModelData& result, const ofbx::Material* mat, const Material* instanceOf) int32 AddMaterial(ImportedModelData& result, const ofbx::Material* mat)
{ {
int32 index = Materials.Find(mat); int32 index = Materials.Find(mat);
if (index == -1) if (index == -1)
@@ -542,6 +542,7 @@ bool ProcessMesh(ImportedModelData& result, OpenFbxImporterData& data, const ofb
else else
aMaterial = aMesh->getMaterial(0); aMaterial = aMesh->getMaterial(0);
} }
mesh.MaterialSlotIndex = data.AddMaterial(result, aMaterial); mesh.MaterialSlotIndex = data.AddMaterial(result, aMaterial);
// Vertex positions // Vertex positions

View File

@@ -30,6 +30,7 @@
#include "Engine/Tools/TextureTool/TextureTool.h" #include "Engine/Tools/TextureTool/TextureTool.h"
#include "Engine/ContentImporters/AssetsImportingManager.h" #include "Engine/ContentImporters/AssetsImportingManager.h"
#include "Engine/ContentImporters/CreateMaterial.h" #include "Engine/ContentImporters/CreateMaterial.h"
#include "Engine/ContentImporters/CreateMaterialInstance.h"
#include "Engine/ContentImporters/CreateCollisionData.h" #include "Engine/ContentImporters/CreateCollisionData.h"
#include "Editor/Utilities/EditorUtilities.h" #include "Editor/Utilities/EditorUtilities.h"
#include <ThirdParty/meshoptimizer/meshoptimizer.h> #include <ThirdParty/meshoptimizer/meshoptimizer.h>
@@ -862,24 +863,57 @@ 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;
CreateMaterial::Options materialOptions; if (options.ImportMaterialsAsInstances) {
materialOptions.Diffuse.Color = material.Diffuse.Color; LOG(Warning, "Did work poggers");
if (material.Diffuse.TextureIndex != -1) if (AssetsImportingManager::Create(AssetsImportingManager::CreateMaterialInstanceTag, assetPath, material.AssetID))
materialOptions.Diffuse.Texture = data.Textures[material.Diffuse.TextureIndex].AssetID; {
materialOptions.Diffuse.HasAlphaMask = material.Diffuse.HasAlphaMask; LOG(Error, "Failed to create material instance.");
materialOptions.Emissive.Color = material.Emissive.Color; return true;
if (material.Emissive.TextureIndex != -1) }
materialOptions.Emissive.Texture = data.Textures[material.Emissive.TextureIndex].AssetID; else
materialOptions.Opacity.Value = material.Opacity.Value; {
if (material.Opacity.TextureIndex != -1) MaterialInstance* materialInstance = (MaterialInstance*) LoadAsset(material.AssetID, ScriptingTypeHandle());
materialOptions.Opacity.Texture = data.Textures[material.Opacity.TextureIndex].AssetID; if (materialInstance == nullptr)
if (material.Normals.TextureIndex != -1) {
materialOptions.Normals.Texture = data.Textures[material.Normals.TextureIndex].AssetID; LOG(Error, "Failed to find created material instance.");
if (material.TwoSided || material.Diffuse.HasAlphaMask) return true;
materialOptions.Info.CullMode = CullMode::TwoSided; }
if (!Math::IsOne(material.Opacity.Value) || material.Opacity.TextureIndex != -1)
materialOptions.Info.BlendMode = MaterialBlendMode::Transparent; MaterialBase *materialInstanceOf = (MaterialBase*) LoadAsset(options.InstanceToImportAs, ScriptingTypeHandle());
AssetsImportingManager::Create(AssetsImportingManager::CreateMaterialTag, assetPath, material.AssetID, &materialOptions); if (materialInstanceOf == nullptr)
{
LOG(Error, "Failed to find the material to create an instance of.");
return true;
}
materialInstance->SetBaseMaterial(materialInstanceOf);
if (materialInstance->Save())
{
LOG(Error, "Failed to save the material instance.");
return true;
}
}
}
else {
CreateMaterial::Options materialOptions;
materialOptions.Diffuse.Color = material.Diffuse.Color;
if (material.Diffuse.TextureIndex != -1)
materialOptions.Diffuse.Texture = data.Textures[material.Diffuse.TextureIndex].AssetID;
materialOptions.Diffuse.HasAlphaMask = material.Diffuse.HasAlphaMask;
materialOptions.Emissive.Color = material.Emissive.Color;
if (material.Emissive.TextureIndex != -1)
materialOptions.Emissive.Texture = data.Textures[material.Emissive.TextureIndex].AssetID;
materialOptions.Opacity.Value = material.Opacity.Value;
if (material.Opacity.TextureIndex != -1)
materialOptions.Opacity.Texture = data.Textures[material.Opacity.TextureIndex].AssetID;
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 (!Math::IsOne(material.Opacity.Value) || material.Opacity.TextureIndex != -1)
materialOptions.Info.BlendMode = MaterialBlendMode::Transparent;
AssetsImportingManager::Create(AssetsImportingManager::CreateMaterialTag, assetPath, material.AssetID, &materialOptions);
}
#endif #endif
} }

View File

@@ -1,4 +1,5 @@
#pragma once #pragma once
#include <Engine/Core/Types/Guid.h>
namespace ofbx namespace ofbx