UNPKG

@thi.ng/shader-ast-stdlib

Version:

Function collection for modular GPGPU / shader programming with @thi.ng/shader-ast

39 lines (38 loc) 1.15 kB
import { F, V3 } from "@thi.ng/shader-ast/api/types"; import { defn, ret } from "@thi.ng/shader-ast/ast/function"; import { vec2, vec3 } from "@thi.ng/shader-ast/ast/lit"; import { add, div, mul, sub } from "@thi.ng/shader-ast/ast/ops"; import { $, $x, $y, $z } from "@thi.ng/shader-ast/ast/swizzle"; import { sym } from "@thi.ng/shader-ast/ast/sym"; import { snoiseVec3 } from "./simplex3.js"; const curlNoise3 = defn(V3, "curlNoise3", [V3, F], (p, e) => { let D; let px0; let px1; let py0; let py1; let pz0; let pz1; return [ D = sym(vec2(e, 0)), px0 = sym(snoiseVec3(sub(p, $(D, "xyy")))), px1 = sym(snoiseVec3(add(p, $(D, "xyy")))), py0 = sym(snoiseVec3(sub(p, $(D, "yxy")))), py1 = sym(snoiseVec3(add(p, $(D, "yxy")))), pz0 = sym(snoiseVec3(sub(p, $(D, "yyx")))), pz1 = sym(snoiseVec3(add(p, $(D, "yyx")))), ret( div( vec3( add(sub(sub($z(py1), $z(py0)), $y(pz1)), $y(pz0)), add(sub(sub($x(pz1), $x(pz0)), $z(px1)), $z(px0)), add(sub(sub($y(px1), $y(px0)), $x(py1)), $x(py0)) ), mul(2, e) ) ) ]; }); export { curlNoise3 };