d4d0daa934cd5433a219c22d9f36312e2271da91
The root cause was a classic fixed-size epsilon issue. The code that checked if an fcurve was effectively flat, and thus shouldn't be normalized, used a fixed-size epsilon that was reasonable for values close-ish to zero, but didn't work well for values >= 1.0. This patch addresses the issue by introducing a new function `ulp_diff_ff()` that robustly computes the number of floating point steps between two floats, and using that to ensure that a minimum number of representable floats exist between the min/max values of the curve. This approach scales appropriately up and down to both huge and tiny values. This patch also updates the existing `compare_ff_relative()` function to use the new robust ulps code for the ulps-based part of its comparison, resolving an issue documented in its unit tests where it behaved poorly for values close to zero. Pull Request: https://projects.blender.org/blender/blender/pulls/110796
…
Blender
Blender is the free and open source 3D creation suite. It supports the entirety of the 3D pipeline-modeling, rigging, animation, simulation, rendering, compositing, motion tracking and video editing.
Project Pages
Development
License
Blender as a whole is licensed under the GNU General Public License, Version 3. Individual files may have a different, but compatible license.
See blender.org/about/license for details.
Description
Languages
C++
78%
Python
14.9%
C
2.9%
GLSL
1.9%
CMake
1.2%
Other
0.9%
