From 3c822f2d8ef4d0b1db544a1b89499180a0e18689 Mon Sep 17 00:00:00 2001 From: Gopmyc Date: Thu, 9 Apr 2026 00:58:37 +0200 Subject: [PATCH 1/2] Fixed selection outline T-pose fallback when clearing skinned mesh materials (#671) --- .../OvEditor/Rendering/OutlineRenderFeature.cpp | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/Sources/OvEditor/src/OvEditor/Rendering/OutlineRenderFeature.cpp b/Sources/OvEditor/src/OvEditor/Rendering/OutlineRenderFeature.cpp index 9b0985e1..1fd15a8b 100644 --- a/Sources/OvEditor/src/OvEditor/Rendering/OutlineRenderFeature.cpp +++ b/Sources/OvEditor/src/OvEditor/Rendering/OutlineRenderFeature.cpp @@ -19,6 +19,7 @@ namespace constexpr uint32_t kStencilMask = 0xFF; constexpr int32_t kStencilReference = 1; constexpr std::string_view kOutlinePassName = "OUTLINE_PASS"; + const std::string kSkinningFeatureName = std::string{ OvCore::Rendering::SkinningUtils::kFeatureName }; using MaterialList = OvCore::ECS::Components::CMaterialRenderer::MaterialList; @@ -241,16 +242,16 @@ void OvEditor::Rendering::OutlineRenderFeature::DrawModelToStencil( for (auto mesh : p_model.GetMeshes()) { - const auto* originalMaterial = FindMeshMaterial(p_materials, mesh->GetMaterialIndex()); - const bool skinningEnabled = hasSkinning && originalMaterial && - originalMaterial->SupportsFeature(std::string{ OvCore::Rendering::SkinningUtils::kFeatureName }); - auto& targetMaterial = ResolveOutlineMaterial( mesh->GetMaterialIndex(), outlinePassName, p_materials, m_stencilFillMaterial ); + const bool skinningEnabled = + hasSkinning && + mesh->HasSkinningData() && + targetMaterial.SupportsFeature(kSkinningFeatureName); auto stateMask = targetMaterial.GenerateStateMask(); @@ -288,16 +289,16 @@ void OvEditor::Rendering::OutlineRenderFeature::DrawModelOutline( for (auto mesh : p_model.GetMeshes()) { - const auto* originalMaterial = FindMeshMaterial(p_materials, mesh->GetMaterialIndex()); - const bool skinningEnabled = hasSkinning && originalMaterial && - originalMaterial->SupportsFeature(std::string{ OvCore::Rendering::SkinningUtils::kFeatureName }); - auto& targetMaterial = ResolveOutlineMaterial( mesh->GetMaterialIndex(), outlinePassName, p_materials, m_outlineMaterial ); + const bool skinningEnabled = + hasSkinning && + mesh->HasSkinningData() && + targetMaterial.SupportsFeature(kSkinningFeatureName); // Set the outline color property if it exists if (targetMaterial.GetProperty("_OutlineColor")) From 688c8ed52090d58be11b6d7c51a71507b58fbd3d Mon Sep 17 00:00:00 2001 From: Gopmyc Date: Thu, 9 Apr 2026 01:30:45 +0200 Subject: [PATCH 2/2] Fixed outline skinning mismatch with non-skinned materials (#671) --- .../src/OvEditor/Rendering/OutlineRenderFeature.cpp | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/Sources/OvEditor/src/OvEditor/Rendering/OutlineRenderFeature.cpp b/Sources/OvEditor/src/OvEditor/Rendering/OutlineRenderFeature.cpp index 1fd15a8b..f45126b7 100644 --- a/Sources/OvEditor/src/OvEditor/Rendering/OutlineRenderFeature.cpp +++ b/Sources/OvEditor/src/OvEditor/Rendering/OutlineRenderFeature.cpp @@ -242,15 +242,19 @@ void OvEditor::Rendering::OutlineRenderFeature::DrawModelToStencil( for (auto mesh : p_model.GetMeshes()) { + const auto* originalMaterial = FindMeshMaterial(p_materials, mesh->GetMaterialIndex()); auto& targetMaterial = ResolveOutlineMaterial( mesh->GetMaterialIndex(), outlinePassName, p_materials, m_stencilFillMaterial ); + const bool originalMaterialSupportsSkinning = + !originalMaterial || originalMaterial->SupportsFeature(kSkinningFeatureName); const bool skinningEnabled = hasSkinning && mesh->HasSkinningData() && + originalMaterialSupportsSkinning && targetMaterial.SupportsFeature(kSkinningFeatureName); auto stateMask = targetMaterial.GenerateStateMask(); @@ -289,15 +293,19 @@ void OvEditor::Rendering::OutlineRenderFeature::DrawModelOutline( for (auto mesh : p_model.GetMeshes()) { + const auto* originalMaterial = FindMeshMaterial(p_materials, mesh->GetMaterialIndex()); auto& targetMaterial = ResolveOutlineMaterial( mesh->GetMaterialIndex(), outlinePassName, p_materials, m_outlineMaterial ); + const bool originalMaterialSupportsSkinning = + !originalMaterial || originalMaterial->SupportsFeature(kSkinningFeatureName); const bool skinningEnabled = hasSkinning && mesh->HasSkinningData() && + originalMaterialSupportsSkinning && targetMaterial.SupportsFeature(kSkinningFeatureName); // Set the outline color property if it exists