From c5df7ad689bd1e5efa15637a8f23a7145d1f316d Mon Sep 17 00:00:00 2001 From: Wojtek Figat Date: Thu, 30 Nov 2023 11:31:58 +0100 Subject: [PATCH] Add various improvements to models importing code --- Source/Engine/Animations/AnimationData.h | 2 -- Source/Engine/ContentImporters/ImportModel.h | 5 ----- Source/Engine/ContentImporters/ImportModelFile.cpp | 4 ---- Source/Engine/Graphics/Models/ModelData.h | 2 -- Source/Engine/Tools/ModelTool/ModelTool.OpenFBX.cpp | 10 +++++++--- Source/Engine/Tools/ModelTool/ModelTool.cpp | 4 ++-- Source/Engine/Tools/ModelTool/ModelTool.h | 4 ++-- 7 files changed, 11 insertions(+), 20 deletions(-) diff --git a/Source/Engine/Animations/AnimationData.h b/Source/Engine/Animations/AnimationData.h index e382ef6e3..623d9ea6c 100644 --- a/Source/Engine/Animations/AnimationData.h +++ b/Source/Engine/Animations/AnimationData.h @@ -151,9 +151,7 @@ public: { int32 result = 0; for (int32 i = 0; i < Channels.Count(); i++) - { result += Channels[i].GetKeyframesCount(); - } return result; } diff --git a/Source/Engine/ContentImporters/ImportModel.h b/Source/Engine/ContentImporters/ImportModel.h index 02e6bfc8d..b7af2789e 100644 --- a/Source/Engine/ContentImporters/ImportModel.h +++ b/Source/Engine/ContentImporters/ImportModel.h @@ -8,11 +8,6 @@ #include "Engine/Tools/ModelTool/ModelTool.h" -/// -/// Enable/disable caching model import options -/// -#define IMPORT_MODEL_CACHE_OPTIONS 1 - /// /// Importing models utility /// diff --git a/Source/Engine/ContentImporters/ImportModelFile.cpp b/Source/Engine/ContentImporters/ImportModelFile.cpp index b34bbfaaf..64a24217e 100644 --- a/Source/Engine/ContentImporters/ImportModelFile.cpp +++ b/Source/Engine/ContentImporters/ImportModelFile.cpp @@ -18,7 +18,6 @@ bool ImportModelFile::TryGetImportOptions(const StringView& path, Options& options) { -#if IMPORT_MODEL_CACHE_OPTIONS if (FileSystem::FileExists(path)) { // Try to load asset file and asset info @@ -44,7 +43,6 @@ bool ImportModelFile::TryGetImportOptions(const StringView& path, Options& optio } } } -#endif return false; } @@ -158,7 +156,6 @@ CreateAssetResult ImportModelFile::Import(CreateAssetContext& context) if (result != CreateAssetResult::Ok) return result; -#if IMPORT_MODEL_CACHE_OPTIONS // Create json with import context rapidjson_flax::StringBuffer importOptionsMetaBuffer; importOptionsMetaBuffer.Reserve(256); @@ -171,7 +168,6 @@ CreateAssetResult ImportModelFile::Import(CreateAssetContext& context) } importOptionsMeta.EndObject(); context.Data.Metadata.Copy((const byte*)importOptionsMetaBuffer.GetString(), (uint32)importOptionsMetaBuffer.GetSize()); -#endif return CreateAssetResult::Ok; } diff --git a/Source/Engine/Graphics/Models/ModelData.h b/Source/Engine/Graphics/Models/ModelData.h index d7359d905..8874fecb3 100644 --- a/Source/Engine/Graphics/Models/ModelData.h +++ b/Source/Engine/Graphics/Models/ModelData.h @@ -452,7 +452,6 @@ public: /// /// Gets the valid level of details count. /// - /// The LOD count. FORCE_INLINE int32 GetLODsCount() const { return LODs.Count(); @@ -461,7 +460,6 @@ public: /// /// Determines whether this instance has valid skeleton structure. /// - /// True if has skeleton, otherwise false. FORCE_INLINE bool HasSkeleton() const { return Skeleton.Bones.HasItems(); diff --git a/Source/Engine/Tools/ModelTool/ModelTool.OpenFBX.cpp b/Source/Engine/Tools/ModelTool/ModelTool.OpenFBX.cpp index c7ee11b42..490318ba7 100644 --- a/Source/Engine/Tools/ModelTool/ModelTool.OpenFBX.cpp +++ b/Source/Engine/Tools/ModelTool/ModelTool.OpenFBX.cpp @@ -1117,11 +1117,15 @@ bool ModelTool::ImportDataOpenFBX(const char* path, ImportedModelData& data, Opt } ofbx::u64 loadFlags = 0; if (EnumHasAnyFlags(data.Types, ImportDataTypes::Geometry)) + { loadFlags |= (ofbx::u64)ofbx::LoadFlags::TRIANGULATE; + if (!options.ImportBlendShapes) + loadFlags |= (ofbx::u64)ofbx::LoadFlags::IGNORE_BLEND_SHAPES; + } else - loadFlags |= (ofbx::u64)ofbx::LoadFlags::IGNORE_GEOMETRY; - if (!options.ImportBlendShapes) - loadFlags |= (ofbx::u64)ofbx::LoadFlags::IGNORE_BLEND_SHAPES; + { + loadFlags |= (ofbx::u64)ofbx::LoadFlags::IGNORE_GEOMETRY | (ofbx::u64)ofbx::LoadFlags::IGNORE_BLEND_SHAPES; + } ofbx::IScene* scene = ofbx::load(fileData.Get(), fileData.Count(), loadFlags); if (!scene) { diff --git a/Source/Engine/Tools/ModelTool/ModelTool.cpp b/Source/Engine/Tools/ModelTool/ModelTool.cpp index a07cd8f23..6d0a418ad 100644 --- a/Source/Engine/Tools/ModelTool/ModelTool.cpp +++ b/Source/Engine/Tools/ModelTool/ModelTool.cpp @@ -787,7 +787,7 @@ bool ModelTool::ImportModel(const String& path, ModelData& meshData, Options& op switch (options.Type) { case ModelType::Model: - importDataTypes = ImportDataTypes::Geometry | ImportDataTypes::Nodes | ImportDataTypes::Textures; + importDataTypes = ImportDataTypes::Geometry | ImportDataTypes::Nodes; if (options.ImportMaterials) importDataTypes |= ImportDataTypes::Materials; if (options.ImportTextures) @@ -1036,7 +1036,7 @@ bool ModelTool::ImportModel(const String& path, ModelData& meshData, Options& op // When splitting imported meshes allow only the first mesh to import assets (mesh[0] is imported after all following ones so import assets during mesh[1]) if (!options.SplitObjects && options.ObjectIndex != 1 && options.ObjectIndex != -1) { - // Find that asset create previously + // Find that asset created previously AssetInfo info; if (Content::GetAssetInfo(assetPath, info)) material.AssetID = info.ID; diff --git a/Source/Engine/Tools/ModelTool/ModelTool.h b/Source/Engine/Tools/ModelTool/ModelTool.h index ac8cb231f..5a8e90d3c 100644 --- a/Source/Engine/Tools/ModelTool/ModelTool.h +++ b/Source/Engine/Tools/ModelTool/ModelTool.h @@ -24,7 +24,7 @@ enum class ImportDataTypes : int32 None = 0, /// - /// Imports materials and meshes. + /// Imports meshes (and LODs). /// Geometry = 1 << 0, @@ -104,7 +104,7 @@ public: Array Materials; /// - /// The level of details data. + /// The level of details data with meshes. /// Array LODs;