From a8739a94239075d4516d978a0a3735aa2e2cc418 Mon Sep 17 00:00:00 2001 From: Rowland <975945824@qq.com> Date: Wed, 17 Jun 2026 09:04:20 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AF=BC=E5=85=A5=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Materials/Material 1.mcmaterial.json | 6 +- .../Material 1.mcmaterial.json.mcmeta | 2 +- SandboxProject/Assets/Models/111.glb.mcasset | Bin 0 -> 2026542 bytes .../Assets/Models/超精密磨床.glb.mcmeta | 2 +- SandboxProject/Scenes/Main.mcscene | 18766 +++++++++++++++- .../MetaCoreBuiltinCoreServicesModule.cpp | 259 +- .../Private/MetaCoreGltfImporter.cpp | 19 +- .../Private/MetaCoreFilamentSceneBridge.cpp | 439 +- cmake/MetaCoreFilament.cmake | 1 + tests/MetaCoreSmokeTests.cpp | 25 +- 10 files changed, 19069 insertions(+), 450 deletions(-) create mode 100644 SandboxProject/Assets/Models/111.glb.mcasset diff --git a/SandboxProject/Assets/Materials/Material 1.mcmaterial.json b/SandboxProject/Assets/Materials/Material 1.mcmaterial.json index 9c4277a..3f50a86 100644 --- a/SandboxProject/Assets/Materials/Material 1.mcmaterial.json +++ b/SandboxProject/Assets/Materials/Material 1.mcmaterial.json @@ -11,16 +11,16 @@ "BaseColorTexture": "", "DoubleSided": false, "EmissiveColor": [ - 0.29019609093666077, + 0.0, 0.0, 0.0 ], "EmissiveTexture": "", - "Metallic": 0.0, + "Metallic": 1.0, "MetallicRoughnessTexture": "", "Name": "Material 1", "NormalTexture": "", - "Roughness": 0.5690000057220459, + "Roughness": 0.0, "ShaderModel": 0, "StableImportKey": "" } \ No newline at end of file diff --git a/SandboxProject/Assets/Materials/Material 1.mcmaterial.json.mcmeta b/SandboxProject/Assets/Materials/Material 1.mcmaterial.json.mcmeta index 8576515..224ee15 100644 --- a/SandboxProject/Assets/Materials/Material 1.mcmaterial.json.mcmeta +++ b/SandboxProject/Assets/Materials/Material 1.mcmaterial.json.mcmeta @@ -3,6 +3,6 @@ "guid": "fc3fd465-4f39-44af-907a-4fc0494c2502", "importer_id": "MaterialImporter", "package_path": "Assets/Materials/Material 1.mcmaterial.json", - "source_hash": 491201104691168908, + "source_hash": 12648564269874715657, "source_path": "Assets/Materials/Material 1.mcmaterial.json" } \ No newline at end of file diff --git a/SandboxProject/Assets/Models/111.glb.mcasset b/SandboxProject/Assets/Models/111.glb.mcasset new file mode 100644 index 0000000000000000000000000000000000000000..aef45e5875db0e34cf5cddb18b06bf5abed2cb8f GIT binary patch literal 2026542 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 z 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 z ); } +[[nodiscard]] std::optional MetaCoreLoadModelAssetDocumentForRecord( + const MetaCoreIAssetDatabaseService& assetDatabaseService, + const MetaCoreIPackageService& packageService, + const MetaCoreIReflectionRegistry& reflectionRegistry, + const MetaCoreAssetRecord& assetRecord, + std::unordered_map* modelCache = nullptr +); + [[nodiscard]] std::optional MetaCoreResolveGeneratedAssetDocument( const MetaCoreIAssetDatabaseService& assetDatabaseService, const MetaCoreIPackageService& packageService, const MetaCoreIReflectionRegistry& reflectionRegistry, - const MetaCoreAssetGuid& generatedAssetGuid + const MetaCoreAssetGuid& generatedAssetGuid, + std::unordered_map* modelCache = nullptr ) { if (!assetDatabaseService.HasProject() || !generatedAssetGuid.IsValid()) { return std::nullopt; } + const auto findGeneratedAsset = [&]( + const MetaCoreAssetRecord& record, + const MetaCoreModelAssetDocument& modelDocument + ) -> std::optional { + for (std::size_t index = 0; index < modelDocument.GeneratedMeshAssets.size(); ++index) { + if (modelDocument.GeneratedMeshAssets[index].AssetGuid == generatedAssetGuid) { + return MetaCoreResolvedGeneratedAssetDocument{record, modelDocument, "mesh", index}; + } + } + for (std::size_t index = 0; index < modelDocument.GeneratedMaterialAssets.size(); ++index) { + if (modelDocument.GeneratedMaterialAssets[index].AssetGuid == generatedAssetGuid) { + return MetaCoreResolvedGeneratedAssetDocument{record, modelDocument, "material", index}; + } + } + for (std::size_t index = 0; index < modelDocument.GeneratedTextureAssets.size(); ++index) { + if (modelDocument.GeneratedTextureAssets[index].AssetGuid == generatedAssetGuid) { + return MetaCoreResolvedGeneratedAssetDocument{record, modelDocument, "texture", index}; + } + } + return std::nullopt; + }; + + const std::filesystem::path sourcePath = MetaCoreAssetRegistry::Get().ResolveGuidToPath(generatedAssetGuid); + if (!sourcePath.empty()) { + const auto sourceRecord = assetDatabaseService.FindAssetByRelativePath(sourcePath); + if (sourceRecord.has_value() && sourceRecord->Type == "model") { + const auto modelDocument = MetaCoreLoadModelAssetDocumentForRecord( + assetDatabaseService, + packageService, + reflectionRegistry, + *sourceRecord, + modelCache + ); + if (modelDocument.has_value()) { + if (auto resolved = findGeneratedAsset(*sourceRecord, *modelDocument)) { + return resolved; + } + } + } + } + for (const MetaCoreAssetRecord& record : assetDatabaseService.GetAssetRegistry()) { if (record.Type != "model") { continue; } - const std::filesystem::path relativePackagePath = - !record.PackagePath.empty() ? record.PackagePath : record.RelativePath; - const auto package = - packageService.ReadPackage(assetDatabaseService.GetProjectDescriptor().RootPath / relativePackagePath); - if (!package.has_value()) { - continue; - } - - const auto modelDocument = MetaCoreReadModelAssetDocument(*package, reflectionRegistry.GetTypeRegistry()); + const auto modelDocument = MetaCoreLoadModelAssetDocumentForRecord( + assetDatabaseService, + packageService, + reflectionRegistry, + record, + modelCache + ); if (!modelDocument.has_value()) { continue; } - for (std::size_t index = 0; index < modelDocument->GeneratedMeshAssets.size(); ++index) { - if (modelDocument->GeneratedMeshAssets[index].AssetGuid == generatedAssetGuid) { - return MetaCoreResolvedGeneratedAssetDocument{record, *modelDocument, "mesh", index}; - } - } - for (std::size_t index = 0; index < modelDocument->GeneratedMaterialAssets.size(); ++index) { - if (modelDocument->GeneratedMaterialAssets[index].AssetGuid == generatedAssetGuid) { - return MetaCoreResolvedGeneratedAssetDocument{record, *modelDocument, "material", index}; - } - } - for (std::size_t index = 0; index < modelDocument->GeneratedTextureAssets.size(); ++index) { - if (modelDocument->GeneratedTextureAssets[index].AssetGuid == generatedAssetGuid) { - return MetaCoreResolvedGeneratedAssetDocument{record, *modelDocument, "texture", index}; - } + if (auto resolved = findGeneratedAsset(record, *modelDocument)) { + return resolved; } } @@ -4498,7 +4534,7 @@ void MetaCorePublishAssetRecordChanges( materialAsset.Name = absoluteSourcePath.stem().string() + "_Material"; materialAsset.StableImportKey = MetaCoreBuildStableImportKey("material", materialAsset.Name, 0); materialAsset.Metallic = 0.0F; - materialAsset.Roughness = 0.0F; + materialAsset.Roughness = 1.0F; document.GeneratedMaterialAssets.push_back(std::move(materialAsset)); document.ImportReport.UsedFallback = true; @@ -4514,6 +4550,102 @@ void MetaCorePublishAssetRecordChanges( return document; } +[[nodiscard]] std::optional MetaCoreLoadModelAssetDocumentForRecord( + const MetaCoreIAssetDatabaseService& assetDatabaseService, + const MetaCoreIPackageService& packageService, + const MetaCoreIReflectionRegistry& reflectionRegistry, + const MetaCoreAssetRecord& assetRecord, + std::unordered_map* modelCache +) { + if (!assetDatabaseService.HasProject() || assetRecord.Type != "model") { + return std::nullopt; + } + + if (modelCache != nullptr && assetRecord.Guid.IsValid()) { + const auto cacheIterator = modelCache->find(assetRecord.Guid); + if (cacheIterator != modelCache->end() && + (assetRecord.SourceHash == 0 || cacheIterator->second.SourceHash == assetRecord.SourceHash)) { + return cacheIterator->second; + } + } + + const auto cacheDocument = [&](const MetaCoreModelAssetDocument& document) { + if (modelCache != nullptr && assetRecord.Guid.IsValid()) { + (*modelCache)[assetRecord.Guid] = document; + } + return document; + }; + + const std::filesystem::path projectRoot = assetDatabaseService.GetProjectDescriptor().RootPath; + const std::filesystem::path relativePackagePath = + !assetRecord.PackagePath.empty() + ? assetRecord.PackagePath + : MetaCoreBuildPackagePathFromSource(!assetRecord.SourcePath.empty() ? assetRecord.SourcePath : assetRecord.RelativePath); + if (!relativePackagePath.empty()) { + const auto package = packageService.ReadPackage(projectRoot / relativePackagePath); + if (package.has_value()) { + if (auto document = MetaCoreReadModelAssetDocument(*package, reflectionRegistry.GetTypeRegistry())) { + return cacheDocument(*document); + } + } + } + + std::filesystem::path relativeSourcePath = + !assetRecord.SourcePath.empty() ? assetRecord.SourcePath : assetRecord.RelativePath; + if (relativeSourcePath.empty()) { + return std::nullopt; + } + + const std::filesystem::path absoluteSourcePath = projectRoot / relativeSourcePath; + if (!std::filesystem::exists(absoluteSourcePath) || std::filesystem::is_directory(absoluteSourcePath)) { + return std::nullopt; + } + + relativeSourcePath = absoluteSourcePath.lexically_relative(projectRoot); + const std::string importerId = + !assetRecord.ImporterId.empty() ? assetRecord.ImporterId : MetaCoreDetectImporterId(absoluteSourcePath); + if (importerId != "GltfModelImporter" && importerId != "ModelImporter") { + return std::nullopt; + } + + const std::uint64_t sourceHash = MetaCoreHashFile(absoluteSourcePath).value_or(assetRecord.SourceHash); + MetaCoreModelImportSettingsDocument importSettings = MetaCoreBuildDefaultModelImportSettings(); + + MetaCoreAssetMetadataDocument metadata; + std::vector previousSubAssets; + if (MetaCoreReadMetaJson(MetaCoreBuildMetaPath(absoluteSourcePath), metadata)) { + previousSubAssets = metadata.SubAssets; + if (!metadata.SourcePath.empty()) { + relativeSourcePath = metadata.SourcePath; + } + } + + std::optional document; + if (importerId == "GltfModelImporter") { + std::vector> meshPayloads; + document = MetaCoreBuildImportedGltfAssetDocument( + absoluteSourcePath, + relativeSourcePath, + sourceHash, + meshPayloads, + importSettings + ); + } else { + document = MetaCoreBuildImportedGenericModelAssetDocument( + absoluteSourcePath, + relativeSourcePath, + sourceHash, + importSettings + ); + } + + if (document.has_value()) { + MetaCoreApplyStableSubAssetGuids(previousSubAssets, *document); + return cacheDocument(*document); + } + return std::nullopt; +} + [[nodiscard]] MetaCorePackageDocument MetaCoreBuildTypedPackage( MetaCorePackageType packageType, const MetaCoreAssetGuid& assetGuid, @@ -5576,6 +5708,7 @@ public: AssetDatabaseService_.reset(); PackageService_.reset(); ReflectionRegistry_.reset(); + ModelCache_.clear(); } [[nodiscard]] std::optional LoadModelAsset( @@ -5771,15 +5904,13 @@ std::optional MetaCoreBuiltinAssetEditingService::Lo return std::nullopt; } - const std::filesystem::path relativePackagePath = - !assetRecord->PackagePath.empty() ? assetRecord->PackagePath : assetRecord->RelativePath; - const auto package = - PackageService_->ReadPackage(AssetDatabaseService_->GetProjectDescriptor().RootPath / relativePackagePath); - if (!package.has_value()) { - return std::nullopt; - } - - auto doc = MetaCoreReadModelAssetDocument(*package, ReflectionRegistry_->GetTypeRegistry()); + auto doc = MetaCoreLoadModelAssetDocumentForRecord( + *AssetDatabaseService_, + *PackageService_, + *ReflectionRegistry_, + *assetRecord, + &ModelCache_ + ); if (doc.has_value()) { ModelCache_[assetGuid] = *doc; } @@ -5797,7 +5928,8 @@ std::optional MetaCoreBuiltinAssetEditingService::Loa *AssetDatabaseService_, *PackageService_, *ReflectionRegistry_, - meshGuid + meshGuid, + &ModelCache_ ); if (!resolved.has_value() || resolved->GeneratedKind != "mesh") { return std::nullopt; @@ -5829,7 +5961,8 @@ std::optional MetaCoreBuiltinAssetEditingService: *AssetDatabaseService_, *PackageService_, *ReflectionRegistry_, - materialGuid + materialGuid, + &ModelCache_ ); if (resolved.has_value() && resolved->GeneratedKind == "material") { if (resolved->GeneratedIndex < resolved->Document.GeneratedMaterialAssets.size()) { @@ -5881,7 +6014,8 @@ std::optional MetaCoreBuiltinAssetEditingService:: *AssetDatabaseService_, *PackageService_, *ReflectionRegistry_, - textureGuid + textureGuid, + &ModelCache_ ); if (!resolved.has_value() || resolved->GeneratedKind != "texture") { return std::nullopt; @@ -5952,7 +6086,8 @@ bool MetaCoreBuiltinAssetEditingService::SaveMaterialAsset( *AssetDatabaseService_, *PackageService_, *ReflectionRegistry_, - materialGuid + materialGuid, + &ModelCache_ ); if (resolved.has_value() && resolved->GeneratedKind == "material") { if (resolved->GeneratedIndex < resolved->Document.GeneratedMaterialAssets.size()) { @@ -5988,7 +6123,8 @@ std::optional MetaCoreBuiltinAssetEditingS *AssetDatabaseService_, *PackageService_, *ReflectionRegistry_, - assetGuid + assetGuid, + &ModelCache_ ); if (!resolved.has_value()) { return std::nullopt; @@ -6604,6 +6740,7 @@ public: AssetDatabaseService_.reset(); PackageService_.reset(); ReflectionRegistry_.reset(); + ModelCache_.clear(); } [[nodiscard]] std::optional CreateGameObject( @@ -6632,6 +6769,7 @@ private: std::shared_ptr AssetDatabaseService_{}; std::shared_ptr PackageService_{}; std::shared_ptr ReflectionRegistry_{}; + std::unordered_map ModelCache_{}; }; class MetaCoreBuiltinPrefabService final : public MetaCoreIPrefabService { @@ -8381,42 +8519,13 @@ std::optional MetaCoreBuiltinSceneEditingService::InstantiateModelAs return std::nullopt; } - const std::filesystem::path relativePackagePath = - !assetRecord->PackagePath.empty() ? assetRecord->PackagePath : assetRecord->RelativePath; - const auto package = PackageService_->ReadPackage(AssetDatabaseService_->GetProjectDescriptor().RootPath / relativePackagePath); - - std::optional importedDocument; - - if (package.has_value()) { - importedDocument = MetaCoreReadModelAssetDocument(*package, ReflectionRegistry_->GetTypeRegistry()); - } - - if (!importedDocument.has_value() || importedDocument->Nodes.empty()) { - // 【敏捷开发决策】:如果磁盘上不存在物理的 .mcasset 包文件,直接动态解析原始 model 原始文件,构建文档结构以供实例化 - const std::filesystem::path absoluteSourcePath = - AssetDatabaseService_->GetProjectDescriptor().RootPath / assetRecord->RelativePath; - if (std::filesystem::exists(absoluteSourcePath)) { - const std::string extension = absoluteSourcePath.extension().generic_string(); - MetaCoreModelImportSettingsDocument defaultSettings{}; - if (extension == ".glb" || extension == ".gltf") { - std::vector> meshPayloads; - importedDocument = MetaCoreBuildImportedGltfAssetDocument( - absoluteSourcePath, - assetRecord->RelativePath, - assetRecord->SourceHash, - meshPayloads, - defaultSettings - ); - } else if (extension == ".obj" || extension == ".fbx") { - importedDocument = MetaCoreBuildImportedGenericModelAssetDocument( - absoluteSourcePath, - assetRecord->RelativePath, - assetRecord->SourceHash, - defaultSettings - ); - } - } - } + std::optional importedDocument = MetaCoreLoadModelAssetDocumentForRecord( + *AssetDatabaseService_, + *PackageService_, + *ReflectionRegistry_, + *assetRecord, + &ModelCache_ + ); if (!importedDocument.has_value() || importedDocument->Nodes.empty()) { return std::nullopt; diff --git a/Source/MetaCoreEditor/Private/MetaCoreGltfImporter.cpp b/Source/MetaCoreEditor/Private/MetaCoreGltfImporter.cpp index be47e6f..98fe8f2 100644 --- a/Source/MetaCoreEditor/Private/MetaCoreGltfImporter.cpp +++ b/Source/MetaCoreEditor/Private/MetaCoreGltfImporter.cpp @@ -11,6 +11,8 @@ #include #include #include +#include +#include #include #include #include @@ -18,6 +20,11 @@ namespace MetaCore { void MetaCoreGltfTrace(const char* message) { + const char* traceEnv = std::getenv("METACORE_GLTF_IMPORT_TRACE"); + if (traceEnv == nullptr || traceEnv[0] == '\0' || std::strcmp(traceEnv, "0") == 0) { + return; + } + FILE* file = nullptr; #if defined(_MSC_VER) if (fopen_s(&file, "editor.crash.log", "a") == 0 && file != nullptr) { @@ -439,7 +446,7 @@ struct MetaCoreGltfMaterialScalarPresence { genMat.Name = "PumpMaterial"; genMat.StableImportKey = MetaCoreBuildStableImportKey("material", "PumpMaterial", 0); genMat.Metallic = 0.0F; - genMat.Roughness = 0.0F; + genMat.Roughness = 1.0F; genMat.BaseColorTexture = genTex.AssetGuid; genMat.BaseColor = glm::vec4(1.0f, 1.0f, 1.0f, 1.0f); document.GeneratedMaterialAssets.push_back(genMat); @@ -517,7 +524,7 @@ struct MetaCoreGltfMaterialScalarPresence { genMat.Name = "ValveMaterial"; genMat.StableImportKey = MetaCoreBuildStableImportKey("material", "ValveMaterial", 0); genMat.Metallic = 0.0F; - genMat.Roughness = 0.0F; + genMat.Roughness = 1.0F; genMat.BaseColorTexture = genTex.AssetGuid; document.GeneratedMaterialAssets.push_back(genMat); @@ -594,7 +601,7 @@ struct MetaCoreGltfMaterialScalarPresence { genMat.Name = "EmbeddedTextureMaterial"; genMat.StableImportKey = MetaCoreBuildStableImportKey("material", "EmbeddedTextureMaterial", 0); genMat.Metallic = 0.0F; - genMat.Roughness = 0.0F; + genMat.Roughness = 1.0F; genMat.BaseColorTexture = genTex.AssetGuid; document.GeneratedMaterialAssets.push_back(genMat); @@ -679,7 +686,7 @@ struct MetaCoreGltfMaterialScalarPresence { genMat.Name = "Tank_Material"; genMat.StableImportKey = MetaCoreBuildStableImportKey("material", "Tank_Material", 0); genMat.Metallic = 0.0F; - genMat.Roughness = 0.0F; + genMat.Roughness = 1.0F; document.GeneratedMaterialAssets.push_back(genMat); // 3. Node @@ -751,7 +758,7 @@ struct MetaCoreGltfMaterialScalarPresence { materialAsset.Name = absoluteSourcePath.stem().string() + "_Material"; materialAsset.StableImportKey = MetaCoreBuildStableImportKey("material", materialAsset.Name, 0); materialAsset.Metallic = 0.0F; - materialAsset.Roughness = 0.0F; + materialAsset.Roughness = 1.0F; document.GeneratedMaterialAssets.push_back(std::move(materialAsset)); }; @@ -818,7 +825,7 @@ struct MetaCoreGltfMaterialScalarPresence { genMat.AlphaCutoff = mat.alpha_cutoff; genMat.AlphaMode = mat.alpha_mode == cgltf_alpha_mode_blend ? MetaCoreMaterialAlphaMode::Blend : (mat.alpha_mode == cgltf_alpha_mode_mask ? MetaCoreMaterialAlphaMode::Mask : MetaCoreMaterialAlphaMode::Opaque); genMat.Metallic = 0.0F; - genMat.Roughness = 0.0F; + genMat.Roughness = 1.0F; if (mat.has_pbr_metallic_roughness) { genMat.BaseColor = glm::vec3(mat.pbr_metallic_roughness.base_color_factor[0], mat.pbr_metallic_roughness.base_color_factor[1], mat.pbr_metallic_roughness.base_color_factor[2]); diff --git a/Source/MetaCoreRender/Private/MetaCoreFilamentSceneBridge.cpp b/Source/MetaCoreRender/Private/MetaCoreFilamentSceneBridge.cpp index 8e3c085..3625f69 100644 --- a/Source/MetaCoreRender/Private/MetaCoreFilamentSceneBridge.cpp +++ b/Source/MetaCoreRender/Private/MetaCoreFilamentSceneBridge.cpp @@ -25,11 +25,16 @@ #include #include #include +#include +#include #include #include #include #include +#include + +#include #include #include @@ -46,8 +51,11 @@ #include #include #include +#include #include #include +#include +#include #include #include #include @@ -114,9 +122,95 @@ void MetaCoreFilamentDebugLog(const std::string& message) { std::cerr << "[MetaCoreDebug][Filament] " << message << std::endl; } +[[nodiscard]] bool MetaCorePreserveGltfBlendAlphaMode() { + const char* preserveBlend = std::getenv("METACORE_GLTF_PRESERVE_BLEND_ALPHA"); + if (preserveBlend == nullptr) { + return false; + } + return std::strcmp(preserveBlend, "1") == 0 || + std::strcmp(preserveBlend, "true") == 0 || + std::strcmp(preserveBlend, "TRUE") == 0; +} + +class MetaCoreGltfMaterialProvider final : public filament::gltfio::MaterialProvider { +public: + explicit MetaCoreGltfMaterialProvider(filament::gltfio::MaterialProvider* innerProvider) + : InnerProvider_(innerProvider) {} + + ~MetaCoreGltfMaterialProvider() override { + delete InnerProvider_; + InnerProvider_ = nullptr; + } + + filament::MaterialInstance* createMaterialInstance( + filament::gltfio::MaterialKey* config, + filament::gltfio::UvMap* uvmap, + const char* label = "material", + const char* extras = nullptr + ) override { + NormalizeAlphaMode(config, label); + return InnerProvider_ != nullptr + ? InnerProvider_->createMaterialInstance(config, uvmap, label, extras) + : nullptr; + } + + filament::Material* getMaterial( + filament::gltfio::MaterialKey* config, + filament::gltfio::UvMap* uvmap, + const char* label = "material" + ) override { + NormalizeAlphaMode(config, label); + return InnerProvider_ != nullptr ? InnerProvider_->getMaterial(config, uvmap, label) : nullptr; + } + + const filament::Material* const* getMaterials() const noexcept override { + return InnerProvider_ != nullptr ? InnerProvider_->getMaterials() : nullptr; + } + + size_t getMaterialsCount() const noexcept override { + return InnerProvider_ != nullptr ? InnerProvider_->getMaterialsCount() : 0; + } + + void destroyMaterials() override { + if (InnerProvider_ != nullptr) { + InnerProvider_->destroyMaterials(); + } + } + + bool needsDummyData(filament::VertexAttribute attrib) const noexcept override { + return InnerProvider_ != nullptr && InnerProvider_->needsDummyData(attrib); + } + +private: + void NormalizeAlphaMode(filament::gltfio::MaterialKey* config, const char* label) { + if (config == nullptr || + MetaCorePreserveGltfBlendAlphaMode() || + config->alphaMode != filament::gltfio::AlphaMode::BLEND) { + return; + } + + config->alphaMode = filament::gltfio::AlphaMode::MASK; + if (!LoggedBlendAsMask_) { + MetaCoreFilamentDebugLog( + "GLTF alphaMode=BLEND is rendered as MASK by default for stable foliage depth. " + "Set METACORE_GLTF_PRESERVE_BLEND_ALPHA=1 to keep GLTF blend materials." + ); + LoggedBlendAsMask_ = true; + } + if (label != nullptr && label[0] != '\0') { + MetaCoreFilamentDebugLog(std::string("GLTF material alphaMode adjusted to MASK label=\"") + label + "\""); + } + } + + filament::gltfio::MaterialProvider* InnerProvider_ = nullptr; + bool LoggedBlendAsMask_ = false; +}; + } // namespace class MetaCoreFilamentSceneBridge::MetaCoreFilamentSceneBridgeImpl { + using EntityChildrenMap = std::unordered_map, utils::Entity::Hasher>; + public: MetaCoreFilamentSceneBridgeImpl() = default; @@ -152,6 +246,7 @@ public: // 创建场景 Scene_ = Engine_->createScene(); + LoadDefaultEnvironmentLighting(); // 创建默认灯光 Light_ = utils::EntityManager::get().create(); @@ -172,6 +267,7 @@ public: View_ = Engine_->createView(); View_->setScene(Scene_); View_->setCamera(Camera_); + ConfigureSceneViewRenderState(); if (offscreen) { // 创建 UI 视图 @@ -210,16 +306,21 @@ public: // 4. 设置到 View View_->setRenderTarget(RenderTarget_); View_->setViewport({0, 0, static_cast(width), static_cast(height)}); + ConfigureSceneViewRenderState(); } else { auto [width, height] = window.GetFramebufferSize(); View_->setViewport({0, 0, static_cast(width), static_cast(height)}); + ConfigureSceneViewRenderState(); } // 确保开启后处理(为了HDR) View_->setPostProcessingEnabled(true); // 初始化 gltfio - MaterialProvider_ = filament::gltfio::createJitShaderProvider(Engine_); + MaterialProvider_ = new MetaCoreGltfMaterialProvider( + filament::gltfio::createJitShaderProvider(Engine_) + ); + StbTextureProvider_ = filament::gltfio::createStbProvider(Engine_); NameManager_ = new utils::NameComponentManager(utils::EntityManager::get()); AssetLoader_ = filament::gltfio::AssetLoader::create({ Engine_, MaterialProvider_, NameManager_ }); RuntimeAssetSubscriptionId_ = MetaCoreRuntimeAssetRegistry::Get().Subscribe( @@ -310,6 +411,8 @@ public: } AssetDuplicatedMaterials_.clear(); DestroyMaterialTextureCache(); + DestroyEnvironmentLighting(); + DestroySolidColorSkybox(); for (auto& [id, entity] : SceneLightEntities_) { if (Scene_) { @@ -333,6 +436,10 @@ public: delete MaterialProvider_; MaterialProvider_ = nullptr; } + if (StbTextureProvider_) { + delete StbTextureProvider_; + StbTextureProvider_ = nullptr; + } DestroyDeferredRenderTargetResources(true); @@ -399,6 +506,7 @@ public: DestroyMaterialTextureCache(); } ProjectRootPath_ = projectRootPath; + LoadDefaultEnvironmentLighting(); } void DestroyMaterialTextureCache() { @@ -413,6 +521,196 @@ public: MaterialTextureCache_.clear(); } + [[nodiscard]] static std::optional> ReadBinaryFile(const std::filesystem::path& path) { + std::ifstream input(path, std::ios::binary | std::ios::ate); + if (!input.is_open()) { + return std::nullopt; + } + + const std::streamsize fileSize = input.tellg(); + if (fileSize <= 0) { + return std::nullopt; + } + + std::vector bytes(static_cast(fileSize)); + input.seekg(0, std::ios::beg); + if (!input.read(reinterpret_cast(bytes.data()), fileSize)) { + return std::nullopt; + } + return bytes; + } + + [[nodiscard]] std::filesystem::path ResolveDefaultEnvironmentPath(std::string_view filename) const { + const std::array candidates{ + std::filesystem::path("third_party") / "filament_installed" / "bin" / "assets" / "ibl" / "lightroom_14b" / filename, + std::filesystem::path("third_party") / "filament_installed.before-linux-sdk" / "bin" / "assets" / "ibl" / "lightroom_14b" / filename, + std::filesystem::path("build_filament") / "samples" / "assets" / "ibl" / "lightroom_14b" / filename, + std::filesystem::path("build_filament") / "libs" / "ktxreader" / filename + }; + + const std::filesystem::path cwd = std::filesystem::current_path(); + for (const std::filesystem::path& relativePath : candidates) { + const std::filesystem::path absolutePath = (cwd / relativePath).lexically_normal(); + if (std::filesystem::exists(absolutePath)) { + return absolutePath; + } + + const std::filesystem::path fromProjectRoot = (ProjectRootPath_.empty() + ? std::filesystem::path{} + : ProjectRootPath_ / ".." / relativePath).lexically_normal(); + if (!fromProjectRoot.empty() && std::filesystem::exists(fromProjectRoot)) { + return fromProjectRoot; + } + } + return {}; + } + + [[nodiscard]] filament::Texture* LoadKtx1Texture( + const std::filesystem::path& path, + bool srgb, + filament::math::float3* outSphericalHarmonics = nullptr + ) const { + if (Engine_ == nullptr || path.empty()) { + return nullptr; + } + + const auto bytes = ReadBinaryFile(path); + if (!bytes.has_value()) { + return nullptr; + } + + auto bundle = std::make_unique( + bytes->data(), + static_cast(bytes->size()) + ); + if (outSphericalHarmonics != nullptr) { + if (!bundle->getSphericalHarmonics(outSphericalHarmonics)) { + std::fill(outSphericalHarmonics, outSphericalHarmonics + 9, filament::math::float3{0.0f, 0.0f, 0.0f}); + } + } + + return ktxreader::Ktx1Reader::createTexture(Engine_, bundle.release(), srgb); + } + + void LoadDefaultEnvironmentLighting() { + if (Engine_ == nullptr || Scene_ == nullptr || EnvironmentLoaded_) { + return; + } + + const std::filesystem::path iblPath = ResolveDefaultEnvironmentPath("lightroom_14b_ibl.ktx"); + const std::filesystem::path skyboxPath = ResolveDefaultEnvironmentPath("lightroom_14b_skybox.ktx"); + if (iblPath.empty() || skyboxPath.empty()) { + MetaCoreFilamentDebugLog("Default IBL assets not found; falling back to solid clear color"); + return; + } + + filament::math::float3 sphericalHarmonics[9]{}; + EnvironmentIblTexture_ = LoadKtx1Texture(iblPath, false, sphericalHarmonics); + EnvironmentSkyboxTexture_ = LoadKtx1Texture(skyboxPath, false); + if (EnvironmentIblTexture_ == nullptr || EnvironmentSkyboxTexture_ == nullptr) { + MetaCoreFilamentDebugLog("Default IBL KTX load failed"); + DestroyEnvironmentLighting(); + return; + } + + EnvironmentIndirectLight_ = filament::IndirectLight::Builder() + .reflections(EnvironmentIblTexture_) + .irradiance(3, sphericalHarmonics) + .intensity(EnvironmentIntensity_) + .build(*Engine_); + EnvironmentSkybox_ = filament::Skybox::Builder() + .environment(EnvironmentSkyboxTexture_) + .intensity(EnvironmentIntensity_) + .build(*Engine_); + + if (EnvironmentIndirectLight_ == nullptr || EnvironmentSkybox_ == nullptr) { + MetaCoreFilamentDebugLog("Default IBL object build failed"); + DestroyEnvironmentLighting(); + return; + } + + Scene_->setIndirectLight(EnvironmentIndirectLight_); + Scene_->setSkybox(EnvironmentSkybox_); + EnvironmentLoaded_ = true; + MetaCoreFilamentDebugLog( + "Default IBL loaded ibl=\"" + iblPath.generic_string() + + "\" skybox=\"" + skyboxPath.generic_string() + "\"" + ); + } + + void DestroyEnvironmentLighting() { + if (Scene_ != nullptr) { + if (Scene_->getIndirectLight() == EnvironmentIndirectLight_) { + Scene_->setIndirectLight(nullptr); + } + if (Scene_->getSkybox() == EnvironmentSkybox_) { + Scene_->setSkybox(nullptr); + } + } + + if (Engine_ != nullptr) { + Engine_->flushAndWait(); + if (EnvironmentSkybox_ != nullptr) { + Engine_->destroy(EnvironmentSkybox_); + EnvironmentSkybox_ = nullptr; + } + if (EnvironmentIndirectLight_ != nullptr) { + Engine_->destroy(EnvironmentIndirectLight_); + EnvironmentIndirectLight_ = nullptr; + } + if (EnvironmentSkyboxTexture_ != nullptr) { + Engine_->destroy(EnvironmentSkyboxTexture_); + EnvironmentSkyboxTexture_ = nullptr; + } + if (EnvironmentIblTexture_ != nullptr) { + Engine_->destroy(EnvironmentIblTexture_); + EnvironmentIblTexture_ = nullptr; + } + } + EnvironmentLoaded_ = false; + } + + [[nodiscard]] filament::Skybox* GetOrCreateSolidColorSkybox(const MetaCoreSceneView& sceneView) { + if (Engine_ == nullptr) { + return nullptr; + } + + const filament::math::float4 color{ + sceneView.BackgroundColor.x, + sceneView.BackgroundColor.y, + sceneView.BackgroundColor.z, + sceneView.BackgroundAlpha + }; + + constexpr float epsilon = 0.0001f; + const bool sameColor = + std::abs(SolidColorSkyboxColor_.x - color.x) <= epsilon && + std::abs(SolidColorSkyboxColor_.y - color.y) <= epsilon && + std::abs(SolidColorSkyboxColor_.z - color.z) <= epsilon && + std::abs(SolidColorSkyboxColor_.w - color.w) <= epsilon; + if (SolidColorSkybox_ != nullptr && sameColor) { + return SolidColorSkybox_; + } + + DestroySolidColorSkybox(); + SolidColorSkybox_ = filament::Skybox::Builder() + .color(color) + .build(*Engine_); + SolidColorSkyboxColor_ = color; + return SolidColorSkybox_; + } + + void DestroySolidColorSkybox() { + if (Scene_ != nullptr && Scene_->getSkybox() == SolidColorSkybox_) { + Scene_->setSkybox(nullptr); + } + if (Engine_ != nullptr && SolidColorSkybox_ != nullptr) { + Engine_->destroy(SolidColorSkybox_); + SolidColorSkybox_ = nullptr; + } + SolidColorSkyboxColor_ = filament::math::float4{-1.0f, -1.0f, -1.0f, -1.0f}; + } + [[nodiscard]] std::filesystem::path ResolveMaterialTexturePath( const std::string& texturePath, const std::string& sourceModelPath @@ -861,9 +1159,20 @@ public: " entities=" + std::to_string(asset->getEntityCount()) ); - // 加载贴图等资源 - filament::gltfio::ResourceLoader resourceLoader({ Engine_ }); - resourceLoader.loadResources(asset); + // 加载贴图等资源。gltfio 不会默认解码 PNG/JPEG,必须注册 TextureProvider。 + const std::string gltfPath = absolutePath.string(); + filament::gltfio::ResourceConfiguration resourceConfig{}; + resourceConfig.engine = Engine_; + resourceConfig.gltfPath = gltfPath.c_str(); + resourceConfig.normalizeSkinningWeights = true; + filament::gltfio::ResourceLoader resourceLoader(resourceConfig); + if (StbTextureProvider_) { + resourceLoader.addTextureProvider("image/png", StbTextureProvider_); + resourceLoader.addTextureProvider("image/jpeg", StbTextureProvider_); + } + if (!resourceLoader.loadResources(asset)) { + std::cerr << "Warning: GLTF resources were not fully loaded for: " << absolutePath << std::endl; + } // 添加到场景 Scene_->addEntities(asset->getEntities(), asset->getEntityCount()); @@ -1155,6 +1464,9 @@ public: filament::Texture* texture, const filament::TextureSampler& sampler ) -> bool { + if (texture == nullptr) { + return false; + } const filament::Material* material = materialInstance.getMaterial(); if (material == nullptr || !material->hasParameter(name)) { return false; @@ -1165,6 +1477,8 @@ public: // 5. 同步所有存活网格的材质预览属性。MaterialInstance 参数必须在渲染前更新。 auto& rm = Engine_->getRenderableManager(); + std::unordered_map assetChildMapCache; + std::unordered_map, utils::Entity::Hasher> materialTargetCache; const filament::TextureSampler materialSampler( filament::TextureSampler::MinFilter::LINEAR, filament::TextureSampler::MagFilter::LINEAR, @@ -1175,8 +1489,29 @@ public: if (itEntity == ObjectToFilamentEntity_.end()) { continue; } - std::vector materialTargetEntities; - CollectRenderableDescendants(itEntity->second.first, itEntity->second.second, materialTargetEntities); + const auto materialTargetCacheIterator = materialTargetCache.find(itEntity->second.second); + if (materialTargetCacheIterator == materialTargetCache.end()) { + std::vector materialTargetEntities; + if (itEntity->second.first != nullptr) { + auto childMapIterator = assetChildMapCache.find(itEntity->second.first); + if (childMapIterator == assetChildMapCache.end()) { + childMapIterator = assetChildMapCache.emplace( + itEntity->second.first, + BuildDirectParentToChildrenMap(itEntity->second.first) + ).first; + } + CollectRenderableDescendantsFromChildMap( + itEntity->second.second, + childMapIterator->second, + materialTargetEntities + ); + } else { + CollectRenderableDescendants(itEntity->second.first, itEntity->second.second, materialTargetEntities); + } + materialTargetCache.emplace(itEntity->second.second, std::move(materialTargetEntities)); + } + + const std::vector& materialTargetEntities = materialTargetCache.find(itEntity->second.second)->second; if (materialTargetEntities.empty()) { continue; } @@ -1236,7 +1571,8 @@ public: renderable.EmissiveColor.z } ); - if (renderable.AlphaMode == MetaCoreMeshAlphaMode::Mask) { + if (renderable.AlphaMode == MetaCoreMeshAlphaMode::Mask || + renderable.AlphaMode == MetaCoreMeshAlphaMode::Blend) { setFloatParameterIfPresent(*matInst, "alphaCutoff", renderable.AlphaCutoff); } setTextureParameterIfPresent(*matInst, "baseColorMap", baseColorTexture, materialSampler); @@ -1257,6 +1593,15 @@ public: void ApplySceneView(const MetaCoreSceneView& sceneView) { if (!Camera_ || !View_) return; CurrentSceneView_ = sceneView; + if (Scene_ != nullptr) { + filament::Skybox* skybox = nullptr; + if (sceneView.ClearFlags == MetaCoreCameraClearFlags::Skybox) { + skybox = EnvironmentSkybox_ != nullptr ? EnvironmentSkybox_ : GetOrCreateSolidColorSkybox(sceneView); + } else if (sceneView.ClearFlags == MetaCoreCameraClearFlags::SolidColor) { + skybox = GetOrCreateSolidColorSkybox(sceneView); + } + Scene_->setSkybox(skybox); + } // 1. 视图矩阵同步 const glm::mat4 viewMatrix = glm::lookAt(sceneView.CameraPosition, sceneView.CameraTarget, sceneView.CameraUp); @@ -1413,6 +1758,7 @@ public: View_->setRenderTarget(RenderTarget_); View_->setViewport({0, 0, static_cast(width), static_cast(height)}); + ConfigureSceneViewRenderState(); DebugRenderTargetState("Resize after recreate resources"); } @@ -1624,6 +1970,65 @@ private: return parentToChildren; } + EntityChildrenMap BuildDirectParentToChildrenMap(filament::gltfio::FilamentAsset* asset) const { + EntityChildrenMap parentToChildren; + if (!asset || Engine_ == nullptr) { + return parentToChildren; + } + + auto& tm = Engine_->getTransformManager(); + const utils::Entity* entities = asset->getEntities(); + const size_t entityCount = asset->getEntityCount(); + for (size_t i = 0; i < entityCount; ++i) { + const utils::Entity entity = entities[i]; + if (entity.isNull()) { + continue; + } + + const auto instance = tm.getInstance(entity); + if (!instance) { + continue; + } + + const utils::Entity parent = tm.getParent(instance); + if (!parent.isNull()) { + parentToChildren[parent].push_back(entity); + } + } + return parentToChildren; + } + + void CollectRenderableDescendantsFromChildMap( + utils::Entity rootEntity, + const EntityChildrenMap& parentToChildren, + std::vector& outEntities + ) const { + if (!Engine_ || rootEntity.isNull()) { + return; + } + + auto& rm = Engine_->getRenderableManager(); + std::vector pending{rootEntity}; + std::unordered_set visited; + while (!pending.empty()) { + const utils::Entity entity = pending.back(); + pending.pop_back(); + if (entity.isNull() || !visited.insert(entity).second) { + continue; + } + + if (rm.getInstance(entity)) { + outEntities.push_back(entity); + } + + const auto childrenIterator = parentToChildren.find(entity); + if (childrenIterator == parentToChildren.end()) { + continue; + } + pending.insert(pending.end(), childrenIterator->second.begin(), childrenIterator->second.end()); + } + } + void CollectRenderableDescendants( filament::gltfio::FilamentAsset* asset, utils::Entity rootEntity, @@ -1788,6 +2193,17 @@ private: } } + void ConfigureSceneViewRenderState() { + if (View_ == nullptr) { + return; + } + + View_->setBlendMode(filament::View::BlendMode::OPAQUE); + for (uint8_t channel = 0; channel < 8; ++channel) { + View_->setChannelDepthClearEnabled(channel, true); + } + } + void DebugRenderTargetState(const char* event) const { std::ostringstream stream; stream @@ -1809,9 +2225,18 @@ private: filament::Scene* Scene_ = nullptr; filament::Camera* Camera_ = nullptr; filament::View* View_ = nullptr; + filament::Texture* EnvironmentIblTexture_ = nullptr; + filament::Texture* EnvironmentSkyboxTexture_ = nullptr; + filament::IndirectLight* EnvironmentIndirectLight_ = nullptr; + filament::Skybox* EnvironmentSkybox_ = nullptr; + filament::Skybox* SolidColorSkybox_ = nullptr; + filament::math::float4 SolidColorSkyboxColor_{-1.0f, -1.0f, -1.0f, -1.0f}; + float EnvironmentIntensity_ = 30000.0f; + bool EnvironmentLoaded_ = false; filament::gltfio::AssetLoader* AssetLoader_ = nullptr; filament::gltfio::MaterialProvider* MaterialProvider_ = nullptr; + filament::gltfio::TextureProvider* StbTextureProvider_ = nullptr; utils::NameComponentManager* NameManager_ = nullptr; MetaCoreSceneRenderSync RenderSync_{}; diff --git a/cmake/MetaCoreFilament.cmake b/cmake/MetaCoreFilament.cmake index 63577ab..ced734d 100644 --- a/cmake/MetaCoreFilament.cmake +++ b/cmake/MetaCoreFilament.cmake @@ -23,6 +23,7 @@ function(metacore_use_filament target_name) "${METACORE_FILAMENT_LIB_DIR}/bluegl.lib" "${METACORE_FILAMENT_LIB_DIR}/gltfio.lib" "${METACORE_FILAMENT_LIB_DIR}/gltfio_core.lib" + "${METACORE_FILAMENT_LIB_DIR}/ktxreader.lib" "${METACORE_FILAMENT_LIB_DIR}/abseil.lib" "${METACORE_FILAMENT_LIB_DIR}/perfetto.lib" "${METACORE_FILAMENT_LIB_DIR}/dracodec.lib" diff --git a/tests/MetaCoreSmokeTests.cpp b/tests/MetaCoreSmokeTests.cpp index 6acfeaa..6490ae6 100644 --- a/tests/MetaCoreSmokeTests.cpp +++ b/tests/MetaCoreSmokeTests.cpp @@ -1880,13 +1880,19 @@ void MetaCoreTestInstantiateImportedModelAssetIntoScene() { ); const auto assetDatabase = moduleRegistry.ResolveService(); + const auto assetEditingService = moduleRegistry.ResolveService(); const auto sceneEditingService = moduleRegistry.ResolveService(); MetaCoreExpect(assetDatabase != nullptr, "应解析到 AssetDatabaseService"); + MetaCoreExpect(assetEditingService != nullptr, "应解析到 AssetEditingService"); MetaCoreExpect(sceneEditingService != nullptr, "应解析到 SceneEditingService"); const auto modelRecord = assetDatabase->FindAssetByRelativePath(std::filesystem::path("Assets") / "Pump.gltf"); MetaCoreExpect(modelRecord.has_value(), "应能找到导入后的模型资源"); + const auto sourceOnlyModelDocument = assetEditingService->LoadModelAsset(modelRecord->Guid); + MetaCoreExpect(sourceOnlyModelDocument.has_value(), "开发期无模型包文件时仍应能读取模型资产文档"); + MetaCoreExpect(!sourceOnlyModelDocument->GeneratedMaterialAssets.empty(), "模型资产文档应包含生成材质"); + const auto instantiatedRootId = sceneEditingService->InstantiateModelAsset(editorContext, modelRecord->Guid, std::nullopt); MetaCoreExpect(instantiatedRootId.has_value(), "应能将导入模型实例化到场景"); @@ -1909,9 +1915,24 @@ void MetaCoreTestInstantiateImportedModelAssetIntoScene() { ); MetaCoreExpect(instantiatedRoot.GetComponent().BaseColor.x == 1.0F, "根节点应继承材质颜色通道数值"); MetaCoreExpect(std::abs(instantiatedRoot.GetComponent().Metallic) < 0.0001F, "缺少金属度的导入材质 Metallic 应默认为 0"); - MetaCoreExpect(std::abs(instantiatedRoot.GetComponent().Roughness) < 0.0001F, "缺少粗糙度的导入材质 Roughness 应默认为 0"); + MetaCoreExpect(std::abs(instantiatedRoot.GetComponent().Roughness - 1.0F) < 0.0001F, "缺少粗糙度的导入材质 Roughness 应默认为 1"); MetaCoreExpect(editorContext.GetActiveObjectId() == *instantiatedRootId, "实例化后应正确选中新对象"); + const MetaCore::MetaCoreAssetGuid generatedMaterialGuid = + instantiatedRoot.GetComponent().MaterialAssetGuids.front(); + auto generatedMaterial = assetEditingService->LoadMaterialAsset(generatedMaterialGuid); + MetaCoreExpect(generatedMaterial.has_value(), "源模型生成材质应可作为材质资源读取"); + generatedMaterial->BaseColor = glm::vec3(0.25F, 0.5F, 0.75F); + generatedMaterial->Metallic = 0.35F; + generatedMaterial->Roughness = 0.8F; + MetaCoreExpect(assetEditingService->SaveMaterialAsset(generatedMaterialGuid, *generatedMaterial), "源模型生成材质应可保存编辑结果"); + + const auto reloadedGeneratedMaterial = assetEditingService->LoadMaterialAsset(generatedMaterialGuid); + MetaCoreExpect(reloadedGeneratedMaterial.has_value(), "保存后应能重新读取源模型生成材质"); + MetaCoreExpectVec3Near(reloadedGeneratedMaterial->BaseColor, glm::vec3(0.25F, 0.5F, 0.75F), "生成材质基础色保存后应保持"); + MetaCoreExpect(std::abs(reloadedGeneratedMaterial->Metallic - 0.35F) < 0.0001F, "生成材质 Metallic 保存后应保持"); + MetaCoreExpect(std::abs(reloadedGeneratedMaterial->Roughness - 0.8F) < 0.0001F, "生成材质 Roughness 保存后应保持"); + coreServicesModule->Shutdown(moduleRegistry); moduleRegistry.ShutdownServices(); _putenv_s("METACORE_PROJECT_PATH", ""); @@ -2007,7 +2028,7 @@ void MetaCoreTestInstantiateRealGltfHierarchyIntoScene() { importedChild.GetComponent(); MetaCoreExpectVec3Near(childMeshRenderer.BaseColor, glm::vec3(0.2F, 0.4F, 0.6F), "真实 GLTF 子节点应继承导入材质基础色"); MetaCoreExpect(std::abs(childMeshRenderer.Metallic) < 0.0001F, "真实 GLTF 材质缺少 metallicFactor 时 Metallic 应默认为 0"); - MetaCoreExpect(std::abs(childMeshRenderer.Roughness) < 0.0001F, "真实 GLTF 材质缺少 roughnessFactor 时 Roughness 应默认为 0"); + MetaCoreExpect(std::abs(childMeshRenderer.Roughness - 1.0F) < 0.0001F, "真实 GLTF 材质缺少 roughnessFactor 时 Roughness 应默认为 1"); const std::vector hierarchyOrder = scene.BuildHierarchyPreorder(); MetaCoreExpect(hierarchyOrder.size() == 3, "真实 GLTF 层级应进入层级树遍历结果");