From 7bb3ddefeb15c89d02e6afc5034374fa96ae73de Mon Sep 17 00:00:00 2001 From: Chandler Cox Date: Tue, 3 Oct 2023 07:51:15 -0500 Subject: [PATCH 1/5] Fix AnimatedModel box. --- Source/Engine/Level/Actors/AnimatedModel.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/Source/Engine/Level/Actors/AnimatedModel.cpp b/Source/Engine/Level/Actors/AnimatedModel.cpp index dff527924..a211bb42b 100644 --- a/Source/Engine/Level/Actors/AnimatedModel.cpp +++ b/Source/Engine/Level/Actors/AnimatedModel.cpp @@ -537,9 +537,10 @@ void AnimatedModel::UpdateBounds() } // Apply margin based on model dimensions - const Vector3 modelBoxSize = SkinnedModel->GetBox().GetSize(); - const Vector3 center = _box.GetCenter(); - const Vector3 sizeHalf = Vector3::Max(_box.GetSize() + modelBoxSize * 0.2f, modelBoxSize) * 0.5f; + const auto modelBox = SkinnedModel->GetBox(_transform.GetWorld()); + const Vector3 modelBoxSize = modelBox.GetSize(); + const Vector3 center = modelBox.GetCenter(); + const Vector3 sizeHalf = modelBoxSize * 0.5f; _box = BoundingBox(center - sizeHalf, center + sizeHalf); } else From 60ac0a8196e18434f404cdef0ea809b0110518d6 Mon Sep 17 00:00:00 2001 From: Chandler Cox Date: Tue, 3 Oct 2023 08:25:05 -0500 Subject: [PATCH 2/5] Fix box changes from animations. --- Source/Engine/Level/Actors/AnimatedModel.cpp | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/Source/Engine/Level/Actors/AnimatedModel.cpp b/Source/Engine/Level/Actors/AnimatedModel.cpp index a211bb42b..d20e5d7dd 100644 --- a/Source/Engine/Level/Actors/AnimatedModel.cpp +++ b/Source/Engine/Level/Actors/AnimatedModel.cpp @@ -526,6 +526,7 @@ void AnimatedModel::UpdateBounds() const int32 bonesCount = skeleton.Bones.Count(); #define GET_NODE_POS(i) _transform.LocalToWorld(GraphInstance.NodesPose[skeleton.Bones[i].NodeIndex].GetTranslation()) BoundingBox box(GET_NODE_POS(0)); + box.Merge(SkinnedModel->GetBox(_transform.GetWorld())); for (int32 boneIndex = 1; boneIndex < bonesCount; boneIndex++) box.Merge(GET_NODE_POS(boneIndex)); _box = box; @@ -533,15 +534,13 @@ void AnimatedModel::UpdateBounds() } else { - _box = SkinnedModel->GetBox(_transform.GetWorld()); + // No animation applied + const auto modelBox = SkinnedModel->GetBox(_transform.GetWorld()); + const Vector3 modelBoxSize = modelBox.GetSize(); + const Vector3 center = modelBox.GetCenter(); + const Vector3 sizeHalf = modelBoxSize * 0.5f; + _box = BoundingBox(center - sizeHalf, center + sizeHalf); } - - // Apply margin based on model dimensions - const auto modelBox = SkinnedModel->GetBox(_transform.GetWorld()); - const Vector3 modelBoxSize = modelBox.GetSize(); - const Vector3 center = modelBox.GetCenter(); - const Vector3 sizeHalf = modelBoxSize * 0.5f; - _box = BoundingBox(center - sizeHalf, center + sizeHalf); } else { From d6861696a5e939607afc59af003cfedde1b1e264 Mon Sep 17 00:00:00 2001 From: Chandler Cox Date: Tue, 3 Oct 2023 09:17:52 -0500 Subject: [PATCH 3/5] Simplify. --- Source/Engine/Level/Actors/AnimatedModel.cpp | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/Source/Engine/Level/Actors/AnimatedModel.cpp b/Source/Engine/Level/Actors/AnimatedModel.cpp index d20e5d7dd..f9440dac9 100644 --- a/Source/Engine/Level/Actors/AnimatedModel.cpp +++ b/Source/Engine/Level/Actors/AnimatedModel.cpp @@ -534,12 +534,8 @@ void AnimatedModel::UpdateBounds() } else { - // No animation applied - const auto modelBox = SkinnedModel->GetBox(_transform.GetWorld()); - const Vector3 modelBoxSize = modelBox.GetSize(); - const Vector3 center = modelBox.GetCenter(); - const Vector3 sizeHalf = modelBoxSize * 0.5f; - _box = BoundingBox(center - sizeHalf, center + sizeHalf); + // No animation asset applied + _box = SkinnedModel->GetBox(_transform.GetWorld()); } } else From 9fbc51a22a2d112f40695ad0a036770f8600b076 Mon Sep 17 00:00:00 2001 From: Chandler Cox Date: Tue, 3 Oct 2023 09:21:27 -0500 Subject: [PATCH 4/5] Add back in fixed margin code. --- Source/Engine/Level/Actors/AnimatedModel.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/Source/Engine/Level/Actors/AnimatedModel.cpp b/Source/Engine/Level/Actors/AnimatedModel.cpp index f9440dac9..66931cc7d 100644 --- a/Source/Engine/Level/Actors/AnimatedModel.cpp +++ b/Source/Engine/Level/Actors/AnimatedModel.cpp @@ -537,6 +537,12 @@ void AnimatedModel::UpdateBounds() // No animation asset applied _box = SkinnedModel->GetBox(_transform.GetWorld()); } + + // Apply margin based on model dimensions + const Vector3 modelBoxSize = SkinnedModel->GetBox(_transform.GetWorld()).GetSize(); + const Vector3 center = _box.GetCenter(); + const Vector3 sizeHalf = Vector3::Max(_box.GetSize() + modelBoxSize * 0.2f, modelBoxSize) * 0.5f; + _box = BoundingBox(center - sizeHalf, center + sizeHalf); } else { From b948152a41c64dd0e0c238b0c91993f9eef5621f Mon Sep 17 00:00:00 2001 From: Chandler Cox Date: Tue, 3 Oct 2023 09:40:46 -0500 Subject: [PATCH 5/5] Simplify --- Source/Engine/Level/Actors/AnimatedModel.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/Source/Engine/Level/Actors/AnimatedModel.cpp b/Source/Engine/Level/Actors/AnimatedModel.cpp index 66931cc7d..b5ccc291b 100644 --- a/Source/Engine/Level/Actors/AnimatedModel.cpp +++ b/Source/Engine/Level/Actors/AnimatedModel.cpp @@ -519,6 +519,7 @@ void AnimatedModel::UpdateBounds() } else if (SkinnedModel && SkinnedModel->IsLoaded()) { + const auto modelBox = SkinnedModel->GetBox(_transform.GetWorld()); if (GraphInstance.NodesPose.Count() != 0) { // Per-bone bounds estimated from positions @@ -526,7 +527,7 @@ void AnimatedModel::UpdateBounds() const int32 bonesCount = skeleton.Bones.Count(); #define GET_NODE_POS(i) _transform.LocalToWorld(GraphInstance.NodesPose[skeleton.Bones[i].NodeIndex].GetTranslation()) BoundingBox box(GET_NODE_POS(0)); - box.Merge(SkinnedModel->GetBox(_transform.GetWorld())); + box.Merge(modelBox); for (int32 boneIndex = 1; boneIndex < bonesCount; boneIndex++) box.Merge(GET_NODE_POS(boneIndex)); _box = box; @@ -535,11 +536,11 @@ void AnimatedModel::UpdateBounds() else { // No animation asset applied - _box = SkinnedModel->GetBox(_transform.GetWorld()); + _box = modelBox; } // Apply margin based on model dimensions - const Vector3 modelBoxSize = SkinnedModel->GetBox(_transform.GetWorld()).GetSize(); + const Vector3 modelBoxSize = modelBox.GetSize(); const Vector3 center = _box.GetCenter(); const Vector3 sizeHalf = Vector3::Max(_box.GetSize() + modelBoxSize * 0.2f, modelBoxSize) * 0.5f; _box = BoundingBox(center - sizeHalf, center + sizeHalf);