Skip to content

Releases: guillaumeblanc/ozz-animation

Release version 0.15.0

13 Apr 12:59
Compare
Choose a tag to compare

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

25 Nov 08:48
Compare
Choose a tag to compare

Release version 0.14.3

  • Library
    • Adds vs2022 compiler support for fbxsdk (#170)

Release version 0.14.2

11 Aug 21:53
Compare
Choose a tag to compare

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

03 Oct 10:51
Compare
Choose a tag to compare

Release version 0.14.1

  • Samples

    • Allows reusing sample framework outside sample directory.
    • #154 Exposes swap interval
  • Library

    • #153 Fixes deprecated implicit copy warning.
    • #141 Removes non-ASCII characters in source codes.
  • 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

13 Jan 10:29
Compare
Choose a tag to compare

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

    • Moves CI to github actions.
    • #59 Adds support for shared libraries on Windows (dll), Linux and MacOS platforms.
    • #111 Removes _GLIBCXX_DEBUG from default build settings as it can create incompatibilities when using prebuilt packages.
    • #122 #137 Adds support for gcc 11 compiler.

Release version 0.13.0

21 May 09:15
Compare
Choose a tag to compare

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

16 Mar 06:26
Compare
Choose a tag to compare

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

17 Dec 20:19
Compare
Choose a tag to compare

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

13 Jul 21:36
Compare
Choose a tag to compare

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

    • #40 Adds ozz_build_postfix option.
    • #41 Adds ozz_build_tools option.

Release version 0.10.0

29 Jun 19:27
Compare
Choose a tag to compare

Release version 0.10.0

  • Library
    • [animation] Adds user-channel feature #4. ozz now offers tracks of float, float2, float3, float4 and quaternion for both raw/offline and runtime. A track can be used to store animated user-data, aka data that aren't joint transformations. Runtime jobs allow to query a track value for any time t (ozz::animation::TrackSamplingJob), or to find all rising and falling edges that happened during a period of time (ozz::animation::TrackTriggeringJob). Utilities allow to optimize a raw track (ozz::animation::offline::TrackOptimizer) and build a runtime track (ozz::animation::offline::TrackOptimizer). fbx2ozz comes with the ability to import tracks from fbx node properties.
    • [animation] Changed ozz::animation::SamplingJob::time (in interval [0,duration]) to a ratio (in unit interval [0,1]). This is a breaking change, aiming to unify sampling of animations and tracks. To conform with this change, sampling time should simply be divided by animation duration. ozz::sample:AnimationController has been updated accordingly. Offline animations and tools aren't impacted.
    • [base] Changes non-intrusive serialization mechanism to use a specialize template struct "Extern" instead of function overloading.
  • Tools
    • Merged *2skel and *2anim in a single tool (*2ozz, fbx2ozz for fbx importer) where all options are specified as a json config file. List of options with default values are available in src/animation/offline/tools/reference.json file. Consequently, ozz_animation_offline_skel_tools and ozz_animation_offline_anim_tools are also merged into a single ozz_animation_tools library.
    • Adds options to import user-channel tracks (from node properties for fbx) using json "animations[].tracks[].properties[]" definition.
    • Adds an option while importing skeletons to choose scene node types that must be considered as skeleton joints, ie not restricting to scene joints only. This is useful for the baked sample for example, which animates mesh nodes.
  • Build pipeline
    • ozz optionnaly supports c++11 compiler.
    • Adds ozz_build_data option (OFF by default), to avoid building data on every code change. Building data takes time indeed, and isn't required on every change. It should be turned ON when output format changes to update all data again.
    • Removes fused source files from the depot. Fused files are generated during build to ${PROJECT_BINARY_DIR}/src_fused/ folder. To generate fused source files without building the whole project, then build BUILD_FUSE_ALL target with "cmake --build . --target BUILD_FUSE_ALL" command.
    • Adds support for Visual Studio 15 2017, drops Visual Studio 11 2012.
  • Samples
    • [user_channel] Adds new user-channel sample, demonstrating usage of user-channel tracks API and import pipeline usage.
    • [sample_fbx2mesh] Remaps joint indices to the smaller range of skeleton joints that are actually used by the skinning. It's now required to index skeleton matrices using ozz::sample::framework:Mesh::joint_remaps when build skinning matrices.
    • [multithread] Switched from OpenMP to c++11 std::async API to implement a parallel-for loop over all computation tasks.