Noise value in [-1..1] at 3D coordinates x, y, z

Property definitions

noise $ ImprovedNoise :: noise
	# Noise value in [-1..1] at 3D coordinates `x, y, z`
	fun noise(x, y, z: Float): Float
	do
		var xx = x.floor.to_i & 255
		var yy = y.floor.to_i & 255
		var zz = z.floor.to_i & 255

		x -= x.floor
		y -= y.floor
		z -= z.floor

		var u = x.fade
		var v = y.fade
		var w = z.fade

		var a  = p[xx  ] + yy
		var aa = p[a   ] + zz
		var ab = p[a+1 ] + zz
		var b  = p[xx+1] + yy
		var ba = p[b   ] + zz
		var bb = p[b+1 ] + zz

		return w.lerp(v.lerp(u.lerp(grad(p[aa  ], x,     y,     z    ),
		                            grad(p[ba  ], x-1.0, y,     z    )),
		                     u.lerp(grad(p[ab  ], x,     y-1.0, z    ),
		                            grad(p[bb  ], x-1.0, y-1.0, z    ))),
                      v.lerp(u.lerp(grad(p[aa+1], x,     y,     z-1.0),
		                            grad(p[ba+1], x-1.0, y,     z-1.0)),
		                     u.lerp(grad(p[ab+1], x,     y-1.0, z-1.0),
		                            grad(p[bb+1], x-1.0, y-1.0, z-1.0))))
	end
lib/noise/noise.nit:390,2--420,4