[Bf-blender-cvs] [b43077ba3a2] blender-v3.0-release: Fix T92552: Spline evaluation with all points at the origin

Hans Goudey noreply at git.blender.org
Fri Oct 29 01:24:06 CEST 2021


Commit: b43077ba3a2991096aa6484fcccd94d68998fb11
Author: Hans Goudey
Date:   Thu Oct 28 18:23:55 2021 -0500
Branches: blender-v3.0-release
https://developer.blender.org/rBb43077ba3a2991096aa6484fcccd94d68998fb11

Fix T92552: Spline evaluation with all points at the origin

In this case, the uniform index sampling loop would fail to assign any
data to the samples, so fill the rest with the largest value possible,
corresponding to the end of the spline. Animation Nodes has the same
fix for this case.

===================================================================

M	source/blender/blenkernel/intern/spline_base.cc

===================================================================

diff --git a/source/blender/blenkernel/intern/spline_base.cc b/source/blender/blenkernel/intern/spline_base.cc
index 663c1951ba3..bbe4e0aab7b 100644
--- a/source/blender/blenkernel/intern/spline_base.cc
+++ b/source/blender/blenkernel/intern/spline_base.cc
@@ -486,6 +486,12 @@ Array<float> Spline::sample_uniform_index_factors(const int samples_size) const
     prev_length = length;
   }
 
+  /* Zero lengths or float innacuracies can cause invalid values, or simply
+   * skip some, so set the values that weren't completed in the main loop. */
+  for (const int i : IndexRange(i_sample, samples_size - i_sample)) {
+    samples[i] = float(samples_size);
+  }
+
   if (!is_cyclic_) {
     /* In rare cases this can prevent overflow of the stored index. */
     samples.last() = lengths.size();



More information about the Bf-blender-cvs mailing list