x, y, z
# 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