Package: libnoise0 X-Debbugs-Cc: cliffjki...@gmail.com Version: 1.0.0+repack-1+b1 Severity: important Tags: upstream
Dear Maintainer, While investigating #1093633, I found a source of the problem in GradientNoise3D. Per the headers for GradientNoise3D, GradientNoise3D is supposed to return in the domain {-1.0..1.0} /// A <i>gradient</i>-noise function generates better-quality noise than a /// <i>value</i>-noise function. Most noise modules use gradient noise for /// this reason, although it takes much longer to calculate. /// /// The return value ranges from -1.0 to +1.0. Test cases GradientNoise3D(0.95,-0.4,-0.95,0,-1,-1)=-1.14259 GradientNoise3D(0.95,-0.4,-0.9,0,-1,-1)=-1.13909 GradientNoise3D(0.95,-0.4,-0.85,0,-1,-1)=-1.13559 GradientNoise3D(0.95,-0.4,-0.8,0,-1,-1)=-1.13209 GradientNoise3D(0.95,-0.4,-0.75,0,-1,-1)=-1.12859 GradientNoise3D(0.95,-0.4,-0.7,0,-1,-1)=-1.12509 GradientNoise3D(0.95,-0.4,-0.65,0,-1,-1)=-1.1216 GradientNoise3D(0.95,-0.4,-0.6,0,-1,-1)=-1.1181 GradientNoise3D(0.95,-0.4,-0.55,0,-1,-1)=-1.1146 GradientNoise3D(0.95,-0.4,-0.5,0,-1,-1)=-1.1111 GradientNoise3D(0.95,-0.4,-0.45,0,-1,-1)=-1.1076 GradientNoise3D(0.95,-0.4,-0.4,0,-1,-1)=-1.1041 GradientNoise3D(0.95,-0.4,-0.35,0,-1,-1)=-1.1006 GradientNoise3D(0.95,-0.4,-0.3,0,-1,-1)=-1.0971 GradientNoise3D(0.95,-0.4,-0.25,0,-1,-1)=-1.0936 GradientNoise3D(0.95,-0.4,-0.2,0,-1,-1)=-1.0901 GradientNoise3D(0.95,-0.4,-0.15,0,-1,-1)=-1.0866 GradientNoise3D(0.95,-0.4,-0.1,0,-1,-1)=-1.0831 GradientNoise3D(0.95,-0.4,-0.05,0,-1,-1)=-1.0796 GradientNoise3D(0.95,-0.4,0.05,0,-1,0)=2.08144 GradientNoise3D(0.95,-0.4,0.1,0,-1,0)=2.12755 GradientNoise3D(0.95,-0.4,0.15,0,-1,0)=2.17366 GradientNoise3D(0.95,-0.4,0.2,0,-1,0)=2.21978 GradientNoise3D(0.95,-0.4,0.25,0,-1,0)=2.26589 GradientNoise3D(0.95,-0.4,0.3,0,-1,0)=2.31201 GradientNoise3D(0.95,-0.4,0.35,0,-1,0)=2.35812 GradientNoise3D(0.95,-0.4,0.4,0,-1,0)=2.40423 GradientNoise3D(0.95,-0.4,0.45,0,-1,0)=2.45035 GradientNoise3D(0.95,-0.4,0.5,0,-1,0)=2.49646 GradientNoise3D(0.95,-0.4,0.55,0,-1,0)=2.54257 GradientNoise3D(0.95,-0.4,0.6,0,-1,0)=2.58869 GradientNoise3D(0.95,-0.4,0.65,0,-1,0)=2.6348 GradientNoise3D(0.95,-0.4,0.7,0,-1,0)=2.68091 GradientNoise3D(0.95,-0.4,0.75,0,-1,0)=2.72703 GradientNoise3D(0.95,-0.4,0.8,0,-1,0)=2.77314 GradientNoise3D(0.95,-0.4,0.85,0,-1,0)=2.81925 GradientNoise3D(0.95,-0.4,0.9,0,-1,0)=2.86537 GradientNoise3D(0.95,-0.4,0.95,0,-1,0)=2.91148 GradientNoise3D(0.95,-0.35,-1,0,-1,-2)=-2.57093 Expected Result The return value ranges from -1.0 to +1.0. Probable root cause: Wrong scale on return. return ((xvGradient * xvPoint) + (yvGradient * yvPoint) + (zvGradient * zvPoint)) * 2.12; The math works out to scale this to -1.0..1.0, it should be <1, not 2.12. This is "important" not "normal" because if software was built on the expectation this function returned within the stated domain, it will fail.