Let we reduce the total key frame of MotionValue what we parse.
Since both json and bvh store the data by framerate.
So, there might be useless values are included.
If the number of keyframe is large, it might give some overhead to core.
So let we reduce useless keyframe for MotionValue and Model's internal animation.
Change-Id: I04b86b0341125cef1f60d3da68150c9367655169
Signed-off-by: Eunki, Hong <eunkiki.hong@samsung.com>
/*
- * Copyright (c) 2023 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2024 Samsung Electronics Co., Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
DALI_TEST_CHECK(motionValue.GetValueType() == MotionValue::ValueType::INVALID);
DALI_TEST_CHECK(motionValue.GetPropertyValue().GetType() == Property::Type::NONE);
DALI_TEST_CHECK(!motionValue.GetKeyFrames());
-
+
motionValue.SetValue(expectKeyFrames);
DALI_TEST_CHECK(motionValue.GetValueType() == MotionValue::ValueType::KEY_FRAMES);
DALI_TEST_CHECK(motionValue.GetKeyFrames() == expectKeyFrames);
/*
- * Copyright (c) 2023 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2024 Samsung Electronics Co., Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
- * Copyright (c) 2023 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2024 Samsung Electronics Co., Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
// EXTERNAL INCLUDES
#include <dali/devel-api/adaptor-framework/file-stream.h>
+#include <dali/devel-api/animation/key-frames-devel.h>
#include <dali/integration-api/debug.h>
#include <fstream>
if(!jointList.empty())
{
uint32_t animationSize = jointList.size();
- animationSize = (useRootTranslationOnly) ? (animationSize + 1u) : (animationSize * 2u);
+ animationSize = (useRootTranslationOnly) ? (animationSize + 1u) : (animationSize * 2u);
animationDefinition.ReserveSize(animationSize);
uint32_t animationIndex = 0u;
for(uint32_t i = 0; i < jointList.size(); ++i)
}
if(!useRootTranslationOnly || i == 0)
{
+ // Optimize keyframes, for heuristic!
+ DevelKeyFrames::OptimizeKeyFramesLinear(translationProperty.mKeyFrames);
animationDefinition.SetProperty(animationIndex++, std::move(translationProperty));
}
+ // Optimize keyframes, for heuristic!
+ DevelKeyFrames::OptimizeKeyFramesLinear(rotationProperty.mKeyFrames);
animationDefinition.SetProperty(animationIndex++, std::move(rotationProperty));
}
}
/*\r
- * Copyright (c) 2023 Samsung Electronics Co., Ltd.\r
+ * Copyright (c) 2024 Samsung Electronics Co., Ltd.\r
*\r
* Licensed under the Apache License, Version 2.0 (the "License");\r
* you may not use this file except in compliance with the License.\r
#include <dali-scene3d/public-api/loader/facial-animation-loader.h>\r
\r
// EXTERNAL INCLUDES\r
+#include <dali/devel-api/animation/key-frames-devel.h>\r
#include <sstream>\r
\r
// INTERNAL INCLUDES\r
const float progress = MILLISECONDS_TO_SECONDS * static_cast<float>(facialAnimation.mTime[timeIndex]) / animationDefinition.GetDuration();\r
animatedProperty.mKeyFrames.Add(progress, blendShape.mKeys[timeIndex][morphTargetIndex]);\r
}\r
+ // Optimize keyframes, for heuristic!\r
+ DevelKeyFrames::OptimizeKeyFramesLinear(animatedProperty.mKeyFrames);\r
animationDefinition.SetProperty(targets + morphTargetIndex, std::move(animatedProperty));\r
}\r
\r