xxxxxxxxxx
52
function cnoise(v2) {
let Pi = vec4.add(vec4.floor(v2.xyxy), new vec4(0.0, 0.0, 1.0, 1.0));
Pi = vec4.mod289(Pi); // To avoid truncation effects in permutation
const Pf = vec4.sub(vec4.fract(v2.xyxy), new vec4(0.0, 0.0, 1.0, 1.0));
const ix = Pi.xzxz;
const iy = Pi.yyww;
const fx = Pf.xzxz;
const fy = Pf.yyww;
const i = vec4.permute(vec4.add(vec4.permute(ix), iy));
let gx = vec4.fract(vec4.mulByNum(i, 1.0 / 41.0));
gx = vec4.mulByNum(gx, 2.0);
gx = vec4.subNum(gx, 1.0);
const gy = vec4.subNum(vec4.abs(gx), 0.5);
const tx = vec4.addNum(vec4.floor(gx), 0.5);
gx = vec4.sub(gx, tx);
let g00 = new vec2(gx.x, gy.x);
let g10 = new vec2(gx.y, gy.y);
let g01 = new vec2(gx.z, gy.z);
let g11 = new vec2(gx.w, gy.w);
const norm = vec4.taylorInvSqrt(
new vec4(
vec2.dot(g00, g00),
vec2.dot(g01, g01),
vec2.dot(g10, g10),
vec2.dot(g11, g11)
)
);
g00 = vec2.mulByNum(g00, norm.x);
g01 = vec2.mulByNum(g01, norm.y);
g10 = vec2.mulByNum(g10, norm.z);
g11 = vec2.mulByNum(g11, norm.w);
const n00 = vec2.dot(g00, new vec2(fx.x, fy.x));
const n10 = vec2.dot(g10, new vec2(fx.y, fy.y));
const n01 = vec2.dot(g01, new vec2(fx.z, fy.z));
const n11 = vec2.dot(g11, new vec2(fx.w, fy.w));
const fade_xy = vec2.fade(Pf.xy);
const n_x = vec2.mix(new vec2(n00, n01), new vec2(n10, n11), fade_xy.x);
const n_xy = math.mix(n_x.x, n_x.y, fade_xy.y);
return 2.3 * n_xy;
}