Releases: guillaumeblanc/ozz-animation
Releases · guillaumeblanc/ozz-animation
Release version 0.16.0
This version brings breaking changes to *2ozz json configuration.
-
Library
- [offline] Implements root motion extraction through
ozz::animation::offline::MotionExtraction
utility. Root motion defines how a character moves during an animation. The utility extracts the motion (position and rotation) from a root joint of the animation into separate tracks, and removes (bakes) that motion from the original animation. User code is expected to reapply motion at runtime by moving the character transform, hence reconstructing the original animation. - [animation] Implements root motion blending through
ozz::animation::MotionBlendingJob
. With a similar interface toozz::animation::BlendingJob
, the job blends (interpolate) the delta of motion from multiple animations according to weight coefficients. - [animation] Improves compaction for identity and constant tracks.
- [base] Make Stream's destructor public. (#183).
- [offline] Implements root motion extraction through
-
Tools
- Adds motion track extraction to *2ozz. Configuration (json) is extended with a animations.tracks.motion object that exposes root motion extraction settings. See src/animation/offline/tools/reference.json#L67.
- Breaking *2ozz json configuration change. *2ozz json configuration animations.tracks is no longer an array, but now an object. See src/animation/offline/tools/reference.json#L51.
- Updates nlohmann/json from 3.5.0 to 3.11.3 (#179).
- Logs *2ozz configuration in verbose log level.
-
Samples
- Adds motion extraction sample, showcasing root motion extraction parameters.
- Adds motion playback sample, demonstrating motion accumulation during playback.
- Adds motion blending sample, leveraging
ozz::animation::MotionBlendingJob
to blend root motion of three animations.
Release version 0.15.0
Release version 0.15.0
This version brings breaking changes that require rebuilding runtime animations.
-
Library
- [offline/animation] #152 Fixes additive animation blending issues due to wrong quaternion multiplication order in additive animation builder and blending job. Note that additive animation needs to be rebuilt to benefit from the fix.
- [animation] Restructures compressed keyframes to allow fast sequential backward reading. The per keyframe track index has been removed, replaced by an offset to the previous keyframe (for the same track). This offset is used to identify tracks when reading forward, and jump to previous keyframe when reading backward.
- [animation] Keyframe times are now indexed. This removes 16b to 24b from every keyframe (depending on animation duration), aka 17% to 25% of the keyframe size. The overhead of storing timepoints is shared for translations, rotations and scales.
- [animation] Leverages animation format changes to refactors serialization. Animations serialization now uses arrays of keyframes which significantly reduces the number of io::Stream reads.
- [animation] Adds iframe support (aka keyframe snapshots), allowing fast seeks into the animation thanks to precomputed (and compressed) sampling cache states. The sampling job decides automatically when an iframe is used to seek into the animation, based on seek offset.
- [offline] Extends animation importer configuration to allow setting up iframe_interval. An interval of 0 (or less) means no iframe is generated. If interval is positive, then at least an iframe is generated at animation end.
- [base] Implements group varint encoding utility. It's used to compress iframes.
-
Samples
- Activates OpenGL 3.2 / WebGL 2.0.
-
Build pipeline
- Adds CI for WebAssembly.
- Adds support for macOS ARM.
Release version 0.14.3
Release version 0.14.3
- Library
- Adds vs2022 compiler support for fbxsdk (#170)
Release version 0.14.2
Release version 0.14.2
-
Library
- Transitions away from sprintf to the more secure snprintf.
- #147 Works around gcc 11 error stringop-overflow which emits false positives for ozz math serialisation.
-
Build pipeline
- Updates CI compiler versions.
Release version 0.14.1
Release version 0.14.1
-
Samples
- Allows reusing sample framework outside sample directory.
- #154 Exposes swap interval
-
Library
-
Build pipeline
- Exposes ozz cmake configuration variables to PARENT_SCOPE, so it can be used/changed by an external project.
Release version 0.14.0
Release version 0.14.0
-
Samples
- [sample_fbx2mesh] Supports vertices part of a skinned mesh but with a weight of 0.
- [sample_fbx2mesh] Assigns non-influenced vertices to root joint.
-
Library
- [offline] #124 Fixes incorrect root joint detection bug in glTF importer.
- [offline] #129 #130 Copy animation name to output in ozz::animation::offline::AdditiveAnimationBuilder.
- [animation] #103 Allows move constructor and assignment for ozz::animation::Skeleton, ozz::animation::Animation and ozz::animation::Track.
- [animation] Renames SamplingCache to SamplingJob::Context.
- [animation] #110 Renames skeleton bind pose to rest pose, to avoid confusion with skinning bind pose.
- [base] Fixes Float4x4::FromEuler which was swapping pitch and roll.
-
Build pipeline
Release version 0.13.0
Release version 0.13.0
-
Tools
- [gltf2ozz] Command line tool utility to import animations and skeletons from gltf files. gltf2ozz can be configured via command line options and json configuration files, in the exact same way as fbx2ozz.
- #91 Fixup animation name when used as an output filename (via json configuration wildcard option), so they comply with most os filename restrictions.
-
Samples
- [skinning] Adds a new sample to explain skinning matrices setup.
-
Build pipeline
- Enables c++11 feature by default for all targets.
-
Library
- [animation] Removes skeleton_utils.h IterateMemFun helper that can be replaced by std::bind.
- [base] Removes ozz::memory::Allocator::Reallocate() function as it's rarely used and complex to overload.
- [base] Replaces OZZ_NEW and OZZ_DELETE macros with template functions ozz::New and ozz::Delete.
- [base] Removes ScopedPtr in favor of an alias to standard unique_ptr that remaps to ozz deallocator. Implements make_unique using ozz allocator.
- [base] Uses template aliasing (using keyword) to redirect ozz to std containers. This allows to get rid of ::Std when using ozz containers.
- [base] Renames all aliased ozz containers to their original std name: vector, map etc...
- [base] Renames ozz::Range to ozz::span, ozz::make_range to ozz::make_span to comply with std containers. Range count() and size() methods are renamed to size() and size_bytes() respectively, so this needs special attention to avoid mistakes.
- [base] Replaces OZZ_ALIGN_OF and OZZ_ALIGN by standard alignof and alignas keywords.
- [base] Replaces OZZ_STATIC_ASSERT by standard static_assert keyword.
Release version 0.12.1
Release version 0.12.1
- Library
- [base] Fixes memory overwrite when reallocating a buffer of smaller size using ozz default memory allocator.
Release version 0.12.0
Release version 0.12.0
-
Library
- [offline] Simplified AnimationOptimizer settings to a single tolerance and distance. Tolerance is the maximum error that an optimization is allowed to generate on a whole joint hierarchy, while the other parameter is the distance (from the joint) at which error is measured. This second parameter allows to emulate effect on skinning or a long object (sword) attached to a joint (hand).
- [offline] Adds options to AnimationOptimizer to override optimization settings for a joint. This implicitly have an effect on the whole chain, up to that joint. This allows for example to have aggressive optimization for a whole skeleton, except for the chain that leads to the hand if user wants it to be precise.
- [offline] Switches AnimationOptimizer and TrackOptimizer to Ramer–Douglas–Peucker decimation algorithm which delivers better precision than original one. It also ensures that first and last points are preserved, avoiding visual issues for looping animations.
- [offline] Changes order of parameters for IterateJointsDF so it's less error prone.
- [memory] Implements ScopedPtr smart pointer. ScopedPtr implementation guarantees the pointed object will be deleted, either on destruction of the ScopedPtr, or via an explicit reset / reassignation.
- [math] Quaternion compare function now takes cosine of half angle as argument, to avoid computing arc cosine for every comparison as the tolerance is usually constant.
- [base] Replaces ozz::memory::Allocator New and Delete function with OZZ_NEW and OZZ_DELETE macros, in order to provide an interface that supports any type and number of arguments (without requiring c++11).
- [base] #83 Allows user code to disable definition of global namespace sse _m128 +-/* operators, as they might conflict with other sse math libraries.
-
Samples
- [optimize] Exposes joint setting overriding option (from AnimationOptimizer) to sample gui. Displays median and maximum error values.
-
Tools
- Moves keyframe reduction stage for additive animations before computing delta with reference pose. This ensures whole skeleton hierarchy is known before decimating keyframes.
Release version 0.11.0
Release version 0.11.0
-
Library
- [animation] Adds two-bone and aim inverse kinematic solvers. They can be used at runtime to procedurally affect joint local-space transforms.
- [animation] Allows resizing SamplingCache, meaning the can be allocated without knowing the number of joints the cache needs to support.
- [animation] Allow ozz::animation::LocalToModelJob to partially update a hierarchy, aka all children of a joint. This is useful when changes to a local-space pose has been limited to part of the joint hierarchy, like when applying IK or modifying model-space matrices independently from local-space transform.
- [animation] Changes ozz::animation::Skeleton joints from breadth-first to depth-first. This change breaks compatibility of previous ozz::animation::offline::RawAnimation, ozz::animation::Animation and ozz::animation::Skeleton archives.
- [animation] Renames track_triggering_job_stl.h to track_triggering_job_trait.h.
- [offline] #62 Adds an a way to specify additive animation reference pose to ozz::animation::offline::AdditiveAnimationBuilder.
- [memory] Removes (too error prone) ozz::memory::Allocator typed allocation functions.
- [math] Changes all conversion from AxisAngle to use separate arguments for axis and angle. This is more in line with function use cases.
- [math] Adds quaternions initialization from two vectors.
- [simd math] Updates simd math functions to prevent unnecessary operations. Some functions now return undefined values for some components, like Dot3 that will return the dot value in x and undefined values for x, y, z. See simd_math.h for each function documentation.
- [simd math] Implements AVX and FMA optimizations (when enabled at compile time).
- [simd math] Implements simd quaternions, making it easier and more efficient to use quaternion with other simd math code.
- [simd math] Exposes swizzling operations.
-
Samples
- [two bone ik] Adds two-bone ik sample, showing how ozz::animation::IKTwoBoneJob can be used on a robot arm.
- [look at] Adds a look-at sample, using ozz::animation::IKAimJob on a chain of bones to distribute aiming contribution to more than a single joint.
- [foot_ik] Adds foot-ik sample, which corrects character legs and ankles procedurally at runtime, as well as character/pelvis height, so that the feet can touch and adapt to the ground.
-
Build pipeline
- Adds support for fbx sdk 2019. This version is now mandatory for vs2017 builds.
- Add support to macos 10.14 Mojave and Xcode 10.0.
-
Tools
- Adds point and vector property types (used to import tracks). These two types are actually float3 types, with scene axis and unit conversion applied.
- Adds an option to importer tools to select additive animation reference pose.
-
Build pipeline