Repository navigation
0.9.0 (2026-11-02)
Changed
- Breaking:
maniSkeleton_BlendPosesrefuses a threshold below
FLT_MIN. The threshold must be at leastFLT_MIN(2^-126) and at
most 1. A subnormal threshold, which 0.8.0 accepted and which could
blend translations and scales to infinity or NaN, now returns
mani_errorInvalidand leaves the output pose as it was. Graphs blend
atMANI_BLEND_THRESHOLD(1e-5) and are not affected
(#216).
Fixed
- Sampling a clip between two rotation samples in opposite hemispheres
could give the identity rotation. A clip file may hold such samples,
for example (1, 0, 0, 2^-80) and (-1, 0, 2^-80, 0); halfway between
them, the interpolated rotation is too short for its squared length to
be a normal binary32. It is now scaled by a power of two before it is
normalized, so it keeps its direction. The builder keeps consecutive
samples in one hemisphere, so built clips do not reach this case
(#211). - The skinning jobs gave a zero normal or tangent for a direction that
had not collapsed when the palette's scale was far from 1: a uniform
scale of about 2^-40 or 2^40 for normals, and 2^-70 or 2^70 for
tangents. They now keep its direction. Only a zero direction, or one
that is not finite, still comes out zero
(#214).
Results change only for the inputs above, which gave the identity or a
zero direction before. Every other pose, sample, skinned vertex, file
byte and format version is the same, and no pinned hash moves. As with
every release before 1.0.0, a graph instance, spring state or trainer
checkpoint saved by 0.8.0 is refused with mani_errorVersion: keep
assets, not saved states, across the upgrade.