glre 0.38.0 → 0.40.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +8 -4
- package/dist/addons.cjs +2 -0
- package/dist/addons.cjs.map +1 -0
- package/dist/addons.d.ts +1287 -0
- package/dist/addons.js +2 -0
- package/dist/addons.js.map +1 -0
- package/dist/index.cjs +31 -43
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +187 -323
- package/dist/index.js +31 -43
- package/dist/index.js.map +1 -1
- package/dist/native.cjs +1 -48
- package/dist/native.cjs.map +1 -1
- package/dist/native.d.ts +536 -10
- package/dist/native.js +1 -48
- package/dist/native.js.map +1 -1
- package/dist/node.cjs +69 -0
- package/dist/node.cjs.map +1 -0
- package/dist/node.d.ts +626 -0
- package/dist/node.js +69 -0
- package/dist/node.js.map +1 -0
- package/dist/react.cjs +1 -48
- package/dist/react.cjs.map +1 -1
- package/dist/react.d.ts +524 -4
- package/dist/react.js +1 -48
- package/dist/react.js.map +1 -1
- package/dist/solid.cjs +1 -48
- package/dist/solid.cjs.map +1 -1
- package/dist/solid.d.ts +524 -4
- package/dist/solid.js +1 -48
- package/dist/solid.js.map +1 -1
- package/package.json +64 -11
- package/src/addons/animation/easing/backIn.ts +10 -0
- package/src/addons/animation/easing/backInOut.ts +12 -0
- package/src/addons/animation/easing/backOut.ts +10 -0
- package/src/addons/animation/easing/bounceIn.ts +10 -0
- package/src/addons/animation/easing/bounceInOut.ts +13 -0
- package/src/addons/animation/easing/bounceOut.ts +30 -0
- package/src/addons/animation/easing/circularIn.ts +9 -0
- package/src/addons/animation/easing/circularInOut.ts +11 -0
- package/src/addons/animation/easing/circularOut.ts +9 -0
- package/src/addons/animation/easing/cubicIn.ts +9 -0
- package/src/addons/animation/easing/cubicInOut.ts +11 -0
- package/src/addons/animation/easing/cubicOut.ts +10 -0
- package/src/addons/animation/easing/elasticIn.ts +10 -0
- package/src/addons/animation/easing/elasticInOut.ts +21 -0
- package/src/addons/animation/easing/elasticOut.ts +12 -0
- package/src/addons/animation/easing/exponentialIn.ts +9 -0
- package/src/addons/animation/easing/exponentialInOut.ts +13 -0
- package/src/addons/animation/easing/exponentialOut.ts +9 -0
- package/src/addons/animation/easing/index.ts +33 -0
- package/src/addons/animation/easing/linearIn.ts +9 -0
- package/src/addons/animation/easing/linearInOut.ts +9 -0
- package/src/addons/animation/easing/linearOut.ts +9 -0
- package/src/addons/animation/easing/quadraticIn.ts +9 -0
- package/src/addons/animation/easing/quadraticInOut.ts +10 -0
- package/src/addons/animation/easing/quadraticOut.ts +9 -0
- package/src/addons/animation/easing/quarticIn.ts +9 -0
- package/src/addons/animation/easing/quarticInOut.ts +11 -0
- package/src/addons/animation/easing/quarticOut.ts +10 -0
- package/src/addons/animation/easing/quinticIn.ts +9 -0
- package/src/addons/animation/easing/quinticInOut.ts +11 -0
- package/src/addons/animation/easing/quinticOut.ts +9 -0
- package/src/addons/animation/easing/sineIn.ts +10 -0
- package/src/addons/animation/easing/sineInOut.ts +10 -0
- package/src/addons/animation/easing/sineOut.ts +10 -0
- package/src/addons/color/palette/macbeth.ts +42 -0
- package/src/addons/color/space/cmyk2rgb.ts +12 -0
- package/src/addons/color/space/gamma2linear.ts +19 -0
- package/src/addons/color/space/hsl2rgb.ts +20 -0
- package/src/addons/color/space/hsv2rgb.ts +18 -0
- package/src/addons/color/space/hue2rgb.ts +12 -0
- package/src/addons/color/space/index.ts +29 -0
- package/src/addons/color/space/lab2lch.ts +22 -0
- package/src/addons/color/space/lab2rgb.ts +19 -0
- package/src/addons/color/space/lab2xyz.ts +32 -0
- package/src/addons/color/space/lch2lab.ts +21 -0
- package/src/addons/color/space/lch2rgb.ts +22 -0
- package/src/addons/color/space/linear2gamma.ts +19 -0
- package/src/addons/color/space/oklab2rgb.ts +35 -0
- package/src/addons/color/space/rgb2cmyk.ts +13 -0
- package/src/addons/color/space/rgb2hcv.ts +29 -0
- package/src/addons/color/space/rgb2hsl.ts +23 -0
- package/src/addons/color/space/rgb2hsv.ts +36 -0
- package/src/addons/color/space/rgb2hue.ts +29 -0
- package/src/addons/color/space/rgb2lab.ts +19 -0
- package/src/addons/color/space/rgb2lch.ts +22 -0
- package/src/addons/color/space/rgb2oklab.ts +45 -0
- package/src/addons/color/space/rgb2srgb.ts +34 -0
- package/src/addons/color/space/rgb2xyz.ts +20 -0
- package/src/addons/color/space/rgb2yiq.ts +22 -0
- package/src/addons/color/space/rgb2yuv.ts +32 -0
- package/src/addons/color/space/srgb2rgb.ts +34 -0
- package/src/addons/color/space/xyz2lab.ts +27 -0
- package/src/addons/color/space/xyz2rgb.ts +30 -0
- package/src/addons/color/space/yiq2rgb.ts +22 -0
- package/src/addons/color/space/yuv2rgb.ts +32 -0
- package/src/addons/draw/arrows.ts +75 -0
- package/src/addons/draw/axis.ts +57 -0
- package/src/addons/draw/bridge.ts +81 -0
- package/src/addons/draw/char.ts +30 -0
- package/src/addons/draw/circle.ts +29 -0
- package/src/addons/draw/fill.ts +25 -0
- package/src/addons/draw/flip.ts +45 -0
- package/src/addons/draw/hex.ts +29 -0
- package/src/addons/draw/index.ts +13 -0
- package/src/addons/draw/line.ts +16 -0
- package/src/addons/draw/point.ts +30 -0
- package/src/addons/draw/rect.ts +52 -0
- package/src/addons/draw/stroke.ts +31 -0
- package/src/addons/draw/tri.ts +29 -0
- package/src/addons/generative/cnoise.ts +239 -0
- package/src/addons/generative/curl.ts +64 -0
- package/src/addons/generative/fbm.ts +69 -0
- package/src/addons/generative/gerstnerWave.ts +21 -0
- package/src/addons/generative/gnoise.ts +113 -0
- package/src/addons/generative/index.ts +15 -0
- package/src/addons/generative/noised.ts +139 -0
- package/src/addons/generative/pnoise.ts +249 -0
- package/src/addons/generative/psrdnoise.ts +277 -0
- package/src/addons/generative/random.ts +136 -0
- package/src/addons/generative/snoise.ts +199 -0
- package/src/addons/generative/srandom.ts +90 -0
- package/src/addons/generative/voronoi.ts +134 -0
- package/src/addons/generative/voronoise.ts +69 -0
- package/src/addons/generative/wavelet.ts +77 -0
- package/src/addons/generative/worley.ts +99 -0
- package/src/addons/geometry/aabb/aabb.ts +8 -0
- package/src/addons/geometry/aabb/centroid.ts +10 -0
- package/src/addons/geometry/aabb/contain.ts +19 -0
- package/src/addons/geometry/aabb/diagonal.ts +10 -0
- package/src/addons/geometry/aabb/expand.ts +16 -0
- package/src/addons/geometry/aabb/index.ts +7 -0
- package/src/addons/geometry/aabb/intersect.ts +20 -0
- package/src/addons/geometry/aabb/square.ts +17 -0
- package/src/addons/geometry/index.ts +2 -0
- package/src/addons/geometry/triangle/area.ts +10 -0
- package/src/addons/geometry/triangle/barycentric.ts +50 -0
- package/src/addons/geometry/triangle/centroid.ts +10 -0
- package/src/addons/geometry/triangle/closestPoint.ts +85 -0
- package/src/addons/geometry/triangle/contain.ts +19 -0
- package/src/addons/geometry/triangle/distanceSq.ts +38 -0
- package/src/addons/geometry/triangle/index.ts +10 -0
- package/src/addons/geometry/triangle/intersect.ts +49 -0
- package/src/addons/geometry/triangle/normal.ts +12 -0
- package/src/addons/geometry/triangle/signedDistance.ts +31 -0
- package/src/addons/geometry/triangle/triangle.ts +9 -0
- package/src/addons/index.ts +8 -0
- package/src/addons/lighting/ray.ts +8 -0
- package/src/addons/math/aafloor.ts +13 -0
- package/src/addons/math/aafract.ts +38 -0
- package/src/addons/math/aamirror.ts +12 -0
- package/src/addons/math/aastep.ts +14 -0
- package/src/addons/math/absi.ts +9 -0
- package/src/addons/math/adaptiveThreshold.ts +24 -0
- package/src/addons/math/bump.ts +20 -0
- package/src/addons/math/const.ts +19 -0
- package/src/addons/math/cubic.ts +101 -0
- package/src/addons/math/cubicMix.ts +49 -0
- package/src/addons/math/decimate.ts +12 -0
- package/src/addons/math/dist.ts +143 -0
- package/src/addons/math/fcos.ts +11 -0
- package/src/addons/math/frac.ts +9 -0
- package/src/addons/math/gain.ts +14 -0
- package/src/addons/math/gaussian.ts +14 -0
- package/src/addons/math/grad4.ts +19 -0
- package/src/addons/math/hammersley.ts +54 -0
- package/src/addons/math/highPass.ts +12 -0
- package/src/addons/math/index.ts +63 -0
- package/src/addons/math/inside.ts +68 -0
- package/src/addons/math/invCubic.ts +9 -0
- package/src/addons/math/invQuartic.ts +9 -0
- package/src/addons/math/inverse.ts +9 -0
- package/src/addons/math/lengthSq.ts +10 -0
- package/src/addons/math/map.ts +27 -0
- package/src/addons/math/mirror.ts +12 -0
- package/src/addons/math/mmax.ts +27 -0
- package/src/addons/math/mmin.ts +28 -0
- package/src/addons/math/mmix.ts +47 -0
- package/src/addons/math/mod2.ts +44 -0
- package/src/addons/math/mod289.ts +46 -0
- package/src/addons/math/modi.ts +15 -0
- package/src/addons/math/nyquist.ts +15 -0
- package/src/addons/math/pack.ts +15 -0
- package/src/addons/math/parabola.ts +12 -0
- package/src/addons/math/permute.ts +42 -0
- package/src/addons/math/pow2.ts +10 -0
- package/src/addons/math/pow3.ts +9 -0
- package/src/addons/math/pow5.ts +10 -0
- package/src/addons/math/pow7.ts +12 -0
- package/src/addons/math/powFast.ts +18 -0
- package/src/addons/math/quartic.ts +15 -0
- package/src/addons/math/quat/index.ts +14 -0
- package/src/addons/math/quat/quat2mat3.ts +28 -0
- package/src/addons/math/quat/quat2mat4.ts +16 -0
- package/src/addons/math/quat/quatAdd.ts +18 -0
- package/src/addons/math/quat/quatConj.ts +14 -0
- package/src/addons/math/quat/quatDiv.ts +18 -0
- package/src/addons/math/quat/quatIdentity.ts +9 -0
- package/src/addons/math/quat/quatInverse.ts +17 -0
- package/src/addons/math/quat/quatLength.ts +15 -0
- package/src/addons/math/quat/quatLengthSq.ts +14 -0
- package/src/addons/math/quat/quatLerp.ts +40 -0
- package/src/addons/math/quat/quatMul.ts +38 -0
- package/src/addons/math/quat/quatNeg.ts +14 -0
- package/src/addons/math/quat/quatNorm.ts +16 -0
- package/src/addons/math/quat/quatSub.ts +18 -0
- package/src/addons/math/quintic.ts +16 -0
- package/src/addons/math/rotate2d.ts +16 -0
- package/src/addons/math/rotate3d.ts +37 -0
- package/src/addons/math/rotate3dX.ts +20 -0
- package/src/addons/math/rotate3dY.ts +20 -0
- package/src/addons/math/rotate3dZ.ts +20 -0
- package/src/addons/math/rotate4d.ts +41 -0
- package/src/addons/math/rotate4dX.ts +21 -0
- package/src/addons/math/rotate4dY.ts +16 -0
- package/src/addons/math/rotate4dZ.ts +21 -0
- package/src/addons/math/saturateMediump.ts +11 -0
- package/src/addons/math/scale2d.ts +44 -0
- package/src/addons/math/scale3d.ts +17 -0
- package/src/addons/math/scale4d.ts +50 -0
- package/src/addons/math/smootherstep.ts +16 -0
- package/src/addons/math/taylorInvSqrt.ts +9 -0
- package/src/addons/math/toMat3.ts +14 -0
- package/src/addons/math/toMat4.ts +14 -0
- package/src/addons/math/translate4d.ts +31 -0
- package/src/addons/math/unpack.ts +88 -0
- package/src/addons/sdf/boxSDF.ts +24 -0
- package/src/addons/sdf/circleSDF.ts +20 -0
- package/src/addons/sdf/crossSDF.ts +17 -0
- package/src/addons/sdf/hexSDF.ts +18 -0
- package/src/addons/sdf/index.ts +7 -0
- package/src/addons/sdf/lineSDF.ts +33 -0
- package/src/addons/sdf/rectSDF.ts +46 -0
- package/src/addons/sdf/sphereSDF.ts +20 -0
- package/src/addons/sdf/triSDF.ts +14 -0
- package/src/addons/space/aspect.ts +14 -0
- package/src/addons/space/bracketing.ts +44 -0
- package/src/addons/space/brickTile.ts +44 -0
- package/src/addons/space/cart2polar.ts +20 -0
- package/src/addons/space/center.ts +32 -0
- package/src/addons/space/checkerTile.ts +41 -0
- package/src/addons/space/depth2viewZ.ts +43 -0
- package/src/addons/space/displace.ts +55 -0
- package/src/addons/space/equirect2xyz.ts +17 -0
- package/src/addons/space/eulerView.ts +19 -0
- package/src/addons/space/fisheye2xyz.ts +18 -0
- package/src/addons/space/flipY.ts +25 -0
- package/src/addons/space/hexTile.ts +18 -0
- package/src/addons/space/index.ts +38 -0
- package/src/addons/space/kaleidoscope.ts +48 -0
- package/src/addons/space/linearizeDepth.ts +17 -0
- package/src/addons/space/lookAt.ts +49 -0
- package/src/addons/space/lookAtView.ts +40 -0
- package/src/addons/space/mirrorTile.ts +73 -0
- package/src/addons/space/nearest.ts +13 -0
- package/src/addons/space/orthographic.ts +25 -0
- package/src/addons/space/parallaxMapping.ts +149 -0
- package/src/addons/space/perspective.ts +24 -0
- package/src/addons/space/polar2cart.ts +24 -0
- package/src/addons/space/ratio.ts +14 -0
- package/src/addons/space/rotate.ts +37 -0
- package/src/addons/space/rotateX.ts +54 -0
- package/src/addons/space/rotateY.ts +54 -0
- package/src/addons/space/rotateZ.ts +54 -0
- package/src/addons/space/scale.ts +13 -0
- package/src/addons/space/sprite.ts +16 -0
- package/src/addons/space/sqTile.ts +20 -0
- package/src/addons/space/tbn.ts +26 -0
- package/src/addons/space/translate.ts +12 -0
- package/src/addons/space/triTile.ts +32 -0
- package/src/addons/space/uncenter.ts +32 -0
- package/src/addons/space/unratio.ts +12 -0
- package/src/addons/space/viewZ2depth.ts +25 -0
- package/src/addons/space/windmillTile.ts +58 -0
- package/src/addons/space/xyz2equirect.ts +10 -0
- package/src/index.ts +10 -23
- package/src/node/build.ts +127 -0
- package/src/node/create.ts +76 -0
- package/src/node/index.ts +64 -49
- package/src/node/scope.ts +66 -62
- package/src/node/types.ts +221 -187
- package/src/node/utils/const.ts +74 -13
- package/src/node/utils/index.ts +19 -14
- package/src/node/utils/infer.ts +32 -34
- package/src/node/utils/parse.ts +48 -24
- package/src/node/utils/utils.ts +52 -29
- package/src/types.ts +11 -6
- package/src/utils/helpers.ts +56 -0
- package/src/utils/pipeline.ts +24 -8
- package/src/utils/program.ts +62 -38
- package/src/{webgl.ts → utils/webgl.ts} +46 -30
- package/src/{webgpu.ts → utils/webgpu.ts} +22 -17
- package/src/node/core.ts +0 -121
- package/src/node/node.ts +0 -65
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { Fn, Vec2, Vec3, Vec4, vec2, vec3, vec4, float } from '../../node'
|
|
2
|
+
import { snoise2, snoise3Vec3, snoise3Vec4 } from './snoise'
|
|
3
|
+
|
|
4
|
+
export const curlVec2 = Fn(([p]: [Vec2]): Vec2 => {
|
|
5
|
+
const e = float(0.1).toVar('e')
|
|
6
|
+
const dx = vec2(e, 0).toVar('dx')
|
|
7
|
+
const dy = vec2(0, e).toVar('dy')
|
|
8
|
+
const p_x0 = snoise2(p.sub(dx)).toVar('p_x0')
|
|
9
|
+
const p_x1 = snoise2(p.add(dx)).toVar('p_x1')
|
|
10
|
+
const p_y0 = snoise2(p.sub(dy)).toVar('p_y0')
|
|
11
|
+
const p_y1 = snoise2(p.add(dy)).toVar('p_y1')
|
|
12
|
+
const x = p_x1.y.add(p_x0.y).toVar('x')
|
|
13
|
+
const y = p_y1.x.sub(p_y0.x).toVar('y')
|
|
14
|
+
const divisor = float(1).div(e.mul(2)).toVar('divisor')
|
|
15
|
+
return vec2(x, y).mul(divisor).normalize()
|
|
16
|
+
}).setLayout({
|
|
17
|
+
name: 'curlVec2',
|
|
18
|
+
type: 'vec2',
|
|
19
|
+
inputs: [{ name: 'p', type: 'vec2' }],
|
|
20
|
+
})
|
|
21
|
+
|
|
22
|
+
export const curlVec3 = Fn(([p]: [Vec3]): Vec3 => {
|
|
23
|
+
const e = float(0.1).toVar('e')
|
|
24
|
+
const dx = vec3(e, 0, 0).toVar('dx')
|
|
25
|
+
const dy = vec3(0, e, 0).toVar('dy')
|
|
26
|
+
const dz = vec3(0, 0, e).toVar('dz')
|
|
27
|
+
const p_x0 = snoise3Vec3(p.sub(dx)).toVar('p_x0')
|
|
28
|
+
const p_x1 = snoise3Vec3(p.add(dx)).toVar('p_x1')
|
|
29
|
+
const p_y0 = snoise3Vec3(p.sub(dy)).toVar('p_y0')
|
|
30
|
+
const p_y1 = snoise3Vec3(p.add(dy)).toVar('p_y1')
|
|
31
|
+
const p_z0 = snoise3Vec3(p.sub(dz)).toVar('p_z0')
|
|
32
|
+
const p_z1 = snoise3Vec3(p.add(dz)).toVar('p_z1')
|
|
33
|
+
const x = p_y1.z.sub(p_y0.z).sub(p_z1.y).add(p_z0.y).toVar('x')
|
|
34
|
+
const y = p_z1.x.sub(p_z0.x).sub(p_x1.z).add(p_x0.z).toVar('y')
|
|
35
|
+
const z = p_x1.y.sub(p_x0.y).sub(p_y1.x).add(p_y0.x).toVar('z')
|
|
36
|
+
const divisor = float(1).div(e.mul(2)).toVar('divisor')
|
|
37
|
+
return vec3(x, y, z).mul(divisor).normalize()
|
|
38
|
+
}).setLayout({
|
|
39
|
+
name: 'curlVec3',
|
|
40
|
+
type: 'vec3',
|
|
41
|
+
inputs: [{ name: 'p', type: 'vec3' }],
|
|
42
|
+
})
|
|
43
|
+
|
|
44
|
+
export const curlVec4 = Fn(([p]: [Vec4]): Vec3 => {
|
|
45
|
+
const e = float(0.1).toVar('e')
|
|
46
|
+
const dx = vec4(e, 0, 0, 1).toVar('dx')
|
|
47
|
+
const dy = vec4(0, e, 0, 1).toVar('dy')
|
|
48
|
+
const dz = vec4(0, 0, e, 1).toVar('dz')
|
|
49
|
+
const p_x0 = snoise3Vec4(p.sub(dx)).toVar('p_x0')
|
|
50
|
+
const p_x1 = snoise3Vec4(p.add(dx)).toVar('p_x1')
|
|
51
|
+
const p_y0 = snoise3Vec4(p.sub(dy)).toVar('p_y0')
|
|
52
|
+
const p_y1 = snoise3Vec4(p.add(dy)).toVar('p_y1')
|
|
53
|
+
const p_z0 = snoise3Vec4(p.sub(dz)).toVar('p_z0')
|
|
54
|
+
const p_z1 = snoise3Vec4(p.add(dz)).toVar('p_z1')
|
|
55
|
+
const x = p_y1.z.sub(p_y0.z).sub(p_z1.y).add(p_z0.y).toVar('x')
|
|
56
|
+
const y = p_z1.x.sub(p_z0.x).sub(p_x1.z).add(p_x0.z).toVar('y')
|
|
57
|
+
const z = p_x1.y.sub(p_x0.y).sub(p_y1.x).add(p_y0.x).toVar('z')
|
|
58
|
+
const divisor = float(1).div(e.mul(2)).toVar('divisor')
|
|
59
|
+
return vec3(x, y, z).mul(divisor).normalize()
|
|
60
|
+
}).setLayout({
|
|
61
|
+
name: 'curlVec4',
|
|
62
|
+
type: 'vec3',
|
|
63
|
+
inputs: [{ name: 'p', type: 'vec4' }],
|
|
64
|
+
})
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { Fn, Float, Vec2, Vec3, float, Loop, int } from '../../node'
|
|
2
|
+
import { snoiseVec2, snoiseVec3 } from './snoise'
|
|
3
|
+
import { gnoiseVec3Tiled } from './gnoise'
|
|
4
|
+
|
|
5
|
+
const FBM_OCTAVES = int(4)
|
|
6
|
+
const FBM_SCALE_SCALAR = 2
|
|
7
|
+
const FBM_AMPLITUDE_INITIAL = 0.5
|
|
8
|
+
const FBM_AMPLITUDE_SCALAR = 0.5
|
|
9
|
+
|
|
10
|
+
export const fbmVec2 = Fn(([st]: [Vec2]): Float => {
|
|
11
|
+
const value = float(0).toVar('value')
|
|
12
|
+
const amplitude = float(FBM_AMPLITUDE_INITIAL).toVar('amplitude')
|
|
13
|
+
const coord = st.toVar('coord')
|
|
14
|
+
Loop(FBM_OCTAVES, () => {
|
|
15
|
+
value.addAssign(amplitude.mul(snoiseVec2(coord)))
|
|
16
|
+
coord.mulAssign(FBM_SCALE_SCALAR)
|
|
17
|
+
amplitude.mulAssign(FBM_AMPLITUDE_SCALAR)
|
|
18
|
+
})
|
|
19
|
+
return value
|
|
20
|
+
}).setLayout({
|
|
21
|
+
name: 'fbmVec2',
|
|
22
|
+
type: 'float',
|
|
23
|
+
inputs: [{ name: 'st', type: 'vec2' }],
|
|
24
|
+
})
|
|
25
|
+
|
|
26
|
+
export const fbmVec3 = Fn(([pos]: [Vec3]): Float => {
|
|
27
|
+
const value = float(0).toVar('value')
|
|
28
|
+
const amplitude = float(FBM_AMPLITUDE_INITIAL).toVar('amplitude')
|
|
29
|
+
const posVar = pos.toVar('posVar')
|
|
30
|
+
Loop(FBM_OCTAVES, () => {
|
|
31
|
+
value.addAssign(amplitude.mul(snoiseVec3(posVar)))
|
|
32
|
+
posVar.mulAssign(FBM_SCALE_SCALAR)
|
|
33
|
+
amplitude.mulAssign(FBM_AMPLITUDE_SCALAR)
|
|
34
|
+
})
|
|
35
|
+
return value
|
|
36
|
+
}).setLayout({
|
|
37
|
+
name: 'fbmVec3',
|
|
38
|
+
type: 'float',
|
|
39
|
+
inputs: [{ name: 'pos', type: 'vec3' }],
|
|
40
|
+
})
|
|
41
|
+
|
|
42
|
+
export const fbmVec3Tiled = Fn(([p, tileLength]: [Vec3, Float]): Float => {
|
|
43
|
+
const persistence = float(0.5).toVar('persistence')
|
|
44
|
+
const lacunarity = float(2).toVar('lacunarity')
|
|
45
|
+
const amplitude = float(0.5).toVar('amplitude')
|
|
46
|
+
const total = float(0).toVar('total')
|
|
47
|
+
const normalization = float(0).toVar('normalization')
|
|
48
|
+
const pVar = p.toVar('pVar')
|
|
49
|
+
Loop(FBM_OCTAVES, () => {
|
|
50
|
+
const noiseValue = gnoiseVec3Tiled(pVar, tileLength.mul(lacunarity).div(2))
|
|
51
|
+
.div(2)
|
|
52
|
+
.add(0.5)
|
|
53
|
+
.toVar('noiseValue')
|
|
54
|
+
total.addAssign(noiseValue.mul(amplitude))
|
|
55
|
+
normalization.addAssign(amplitude)
|
|
56
|
+
amplitude.mulAssign(persistence)
|
|
57
|
+
pVar.assign(pVar.mul(lacunarity))
|
|
58
|
+
})
|
|
59
|
+
return total.div(normalization)
|
|
60
|
+
}).setLayout({
|
|
61
|
+
name: 'fbmVec3Tiled',
|
|
62
|
+
type: 'float',
|
|
63
|
+
inputs: [
|
|
64
|
+
{ name: 'p', type: 'vec3' },
|
|
65
|
+
{ name: 'tileLength', type: 'float' },
|
|
66
|
+
],
|
|
67
|
+
})
|
|
68
|
+
|
|
69
|
+
export const fbm = fbmVec3
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { Fn, Vec2, Float, vec3, dot, sqrt, float } from '../../node'
|
|
2
|
+
import { PI } from '../math/const'
|
|
3
|
+
|
|
4
|
+
export const gerstnerWave = Fn(([_uv, _dir, _steepness, _wavelength, _time]: [Vec2, Vec2, Float, Float, Float]) => {
|
|
5
|
+
const k = PI.mul(2).div(_wavelength).toVar('k')
|
|
6
|
+
const c = float(9.8).div(k).sqrt().toVar('c')
|
|
7
|
+
const d = _dir.normalize().toVar('d')
|
|
8
|
+
const f = k.mul(_uv.dot(d).sub(c.mul(_time))).toVar('f')
|
|
9
|
+
const a = _steepness.div(k).toVar('a')
|
|
10
|
+
return vec3(d.x.mul(a.mul(f.cos())), a.mul(f.sin()), d.y.mul(a.mul(f.cos())))
|
|
11
|
+
}).setLayout({
|
|
12
|
+
name: 'gerstnerWave',
|
|
13
|
+
type: 'vec3',
|
|
14
|
+
inputs: [
|
|
15
|
+
{ name: '_uv', type: 'vec2' },
|
|
16
|
+
{ name: '_dir', type: 'vec2' },
|
|
17
|
+
{ name: '_steepness', type: 'float' },
|
|
18
|
+
{ name: '_wavelength', type: 'float' },
|
|
19
|
+
{ name: '_time', type: 'float' },
|
|
20
|
+
],
|
|
21
|
+
})
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
import { Fn, Float, Vec2, Vec3, vec2, vec3, float } from '../../node'
|
|
2
|
+
import { random, randomVec2, randomVec3 } from './random'
|
|
3
|
+
import { srandom3Vec3Tiled } from './srandom'
|
|
4
|
+
import { cubicVec2 } from '../math/cubic'
|
|
5
|
+
import { quintic } from '../math/quintic'
|
|
6
|
+
|
|
7
|
+
export const gnoise = Fn(([x]: [Float]): Float => {
|
|
8
|
+
const i = x.floor().toVar('i')
|
|
9
|
+
const f = x.fract().toVar('f')
|
|
10
|
+
return random(i).mix(random(i.add(1)), float(0).smoothstep(float(1), f))
|
|
11
|
+
}).setLayout({
|
|
12
|
+
name: 'gnoise',
|
|
13
|
+
type: 'float',
|
|
14
|
+
inputs: [{ name: 'x', type: 'float' }],
|
|
15
|
+
})
|
|
16
|
+
|
|
17
|
+
export const gnoiseVec2 = Fn(([st]: [Vec2]): Float => {
|
|
18
|
+
const i = st.floor().toVar('i')
|
|
19
|
+
const f = st.fract().toVar('f')
|
|
20
|
+
const a = randomVec2(i).toVar('a')
|
|
21
|
+
const b = randomVec2(i.add(vec2(1, 0))).toVar('b')
|
|
22
|
+
const c = randomVec2(i.add(vec2(0, 1))).toVar('c')
|
|
23
|
+
const d = randomVec2(i.add(vec2(1, 1))).toVar('d')
|
|
24
|
+
const u = cubicVec2(f).toVar('u')
|
|
25
|
+
return a.mix(b, u.x).add(c.sub(a).mul(u.y).mul(float(1).sub(u.x)).add(d.sub(b).mul(u.x).mul(u.y)))
|
|
26
|
+
}).setLayout({
|
|
27
|
+
name: 'gnoiseVec2',
|
|
28
|
+
type: 'float',
|
|
29
|
+
inputs: [{ name: 'st', type: 'vec2' }],
|
|
30
|
+
})
|
|
31
|
+
|
|
32
|
+
export const gnoiseVec3 = Fn(([p]: [Vec3]): Float => {
|
|
33
|
+
const i = p.floor().toVar('i')
|
|
34
|
+
const f = p.fract().toVar('f')
|
|
35
|
+
const u = quintic(f).toVar('u')
|
|
36
|
+
return float(-1).add(
|
|
37
|
+
float(2).mul(
|
|
38
|
+
randomVec3(i.add(vec3(0, 0, 0)))
|
|
39
|
+
.mix(randomVec3(i.add(vec3(1, 0, 0))), u.x)
|
|
40
|
+
.mix(randomVec3(i.add(vec3(0, 1, 0))).mix(randomVec3(i.add(vec3(1, 1, 0))), u.x), u.y)
|
|
41
|
+
.mix(
|
|
42
|
+
randomVec3(i.add(vec3(0, 0, 1)))
|
|
43
|
+
.mix(randomVec3(i.add(vec3(1, 0, 1))), u.x)
|
|
44
|
+
.mix(
|
|
45
|
+
randomVec3(i.add(vec3(0, 1, 1))).mix(
|
|
46
|
+
randomVec3(i.add(vec3(1, 1, 1))),
|
|
47
|
+
u.x
|
|
48
|
+
),
|
|
49
|
+
u.y
|
|
50
|
+
),
|
|
51
|
+
u.z
|
|
52
|
+
)
|
|
53
|
+
)
|
|
54
|
+
)
|
|
55
|
+
}).setLayout({
|
|
56
|
+
name: 'gnoiseVec3',
|
|
57
|
+
type: 'float',
|
|
58
|
+
inputs: [{ name: 'p', type: 'vec3' }],
|
|
59
|
+
})
|
|
60
|
+
|
|
61
|
+
export const gnoiseVec3Tiled = Fn(([p, tileLength]: [Vec3, Float]): Float => {
|
|
62
|
+
const i = p.floor().toVar('i')
|
|
63
|
+
const f = p.fract().toVar('f')
|
|
64
|
+
const u = quintic(f).toVar('u')
|
|
65
|
+
return srandom3Vec3Tiled(i.add(vec3(0, 0, 0)), tileLength)
|
|
66
|
+
.dot(f.sub(vec3(0, 0, 0)))
|
|
67
|
+
.mix(srandom3Vec3Tiled(i.add(vec3(1, 0, 0)), tileLength).dot(f.sub(vec3(1, 0, 0))), u.x)
|
|
68
|
+
.mix(
|
|
69
|
+
srandom3Vec3Tiled(i.add(vec3(0, 1, 0)), tileLength)
|
|
70
|
+
.dot(f.sub(vec3(0, 1, 0)))
|
|
71
|
+
.mix(
|
|
72
|
+
srandom3Vec3Tiled(i.add(vec3(1, 1, 0)), tileLength).dot(f.sub(vec3(1, 1, 0))),
|
|
73
|
+
u.x
|
|
74
|
+
),
|
|
75
|
+
u.y
|
|
76
|
+
)
|
|
77
|
+
.mix(
|
|
78
|
+
srandom3Vec3Tiled(i.add(vec3(0, 0, 1)), tileLength)
|
|
79
|
+
.dot(f.sub(vec3(0, 0, 1)))
|
|
80
|
+
.mix(srandom3Vec3Tiled(i.add(vec3(1, 0, 1)), tileLength).dot(f.sub(vec3(1, 0, 1))), u.x)
|
|
81
|
+
.mix(
|
|
82
|
+
srandom3Vec3Tiled(i.add(vec3(0, 1, 1)), tileLength)
|
|
83
|
+
.dot(f.sub(vec3(0, 1, 1)))
|
|
84
|
+
.mix(
|
|
85
|
+
srandom3Vec3Tiled(i.add(vec3(1, 1, 1)), tileLength).dot(
|
|
86
|
+
f.sub(vec3(1, 1, 1))
|
|
87
|
+
),
|
|
88
|
+
u.x
|
|
89
|
+
),
|
|
90
|
+
u.y
|
|
91
|
+
),
|
|
92
|
+
u.z
|
|
93
|
+
)
|
|
94
|
+
}).setLayout({
|
|
95
|
+
name: 'gnoiseVec3Tiled',
|
|
96
|
+
type: 'float',
|
|
97
|
+
inputs: [
|
|
98
|
+
{ name: 'p', type: 'vec3' },
|
|
99
|
+
{ name: 'tileLength', type: 'float' },
|
|
100
|
+
],
|
|
101
|
+
})
|
|
102
|
+
|
|
103
|
+
export const gnoise3 = Fn(([x]: [Vec3]): Vec3 => {
|
|
104
|
+
return vec3(
|
|
105
|
+
gnoiseVec3(x.add(vec3(123.456, 0.567, 0.37))),
|
|
106
|
+
gnoiseVec3(x.add(vec3(0.11, 47.43, 19.17))),
|
|
107
|
+
gnoiseVec3(x)
|
|
108
|
+
)
|
|
109
|
+
}).setLayout({
|
|
110
|
+
name: 'gnoise3',
|
|
111
|
+
type: 'vec3',
|
|
112
|
+
inputs: [{ name: 'x', type: 'vec3' }],
|
|
113
|
+
})
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export * from './cnoise'
|
|
2
|
+
export * from './curl'
|
|
3
|
+
export * from './fbm'
|
|
4
|
+
export * from './gerstnerWave'
|
|
5
|
+
export * from './gnoise'
|
|
6
|
+
export * from './noised'
|
|
7
|
+
export * from './pnoise'
|
|
8
|
+
export * from './psrdnoise'
|
|
9
|
+
export * from './random'
|
|
10
|
+
export * from './snoise'
|
|
11
|
+
export * from './srandom'
|
|
12
|
+
export * from './voronoi'
|
|
13
|
+
export * from './voronoise'
|
|
14
|
+
export * from './wavelet'
|
|
15
|
+
export * from './worley'
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
import { Fn, Vec2, Vec3, vec2, vec3, vec4 } from '../../node'
|
|
2
|
+
import { srandom2Vec2, srandom3Vec3 } from './srandom'
|
|
3
|
+
|
|
4
|
+
export const noised = Fn(([p]: [Vec2]) => {
|
|
5
|
+
const i = p.floor().toVar('i')
|
|
6
|
+
const f = p.fract().toVar('f')
|
|
7
|
+
const u = f
|
|
8
|
+
.mul(f)
|
|
9
|
+
.mul(f)
|
|
10
|
+
.mul(f.mul(f.mul(6).sub(15)).add(10))
|
|
11
|
+
.toVar('u')
|
|
12
|
+
const du = f
|
|
13
|
+
.mul(f)
|
|
14
|
+
.mul(f.mul(f.sub(2)).add(1))
|
|
15
|
+
.mul(30)
|
|
16
|
+
.toVar('du')
|
|
17
|
+
|
|
18
|
+
const ga = srandom2Vec2(i.add(vec2(0, 0))).toVar('ga')
|
|
19
|
+
const gb = srandom2Vec2(i.add(vec2(1, 0))).toVar('gb')
|
|
20
|
+
const gc = srandom2Vec2(i.add(vec2(0, 1))).toVar('gc')
|
|
21
|
+
const gd = srandom2Vec2(i.add(vec2(1, 1))).toVar('gd')
|
|
22
|
+
|
|
23
|
+
const va = f.sub(vec2(0, 0)).dot(ga).toVar('va')
|
|
24
|
+
const vb = f.sub(vec2(1, 0)).dot(gb).toVar('vb')
|
|
25
|
+
const vc = f.sub(vec2(0, 1)).dot(gc).toVar('vc')
|
|
26
|
+
const vd = f.sub(vec2(1, 1)).dot(gd).toVar('vd')
|
|
27
|
+
|
|
28
|
+
return vec3(
|
|
29
|
+
va
|
|
30
|
+
.add(u.x.mul(vb.sub(va)))
|
|
31
|
+
.add(u.y.mul(vc.sub(va)))
|
|
32
|
+
.add(u.x.mul(u.y).mul(va.sub(vb).sub(vc).add(vd))),
|
|
33
|
+
ga
|
|
34
|
+
.add(u.x.mul(gb.sub(ga)))
|
|
35
|
+
.add(u.y.mul(gc.sub(ga)))
|
|
36
|
+
.add(u.x.mul(u.y).mul(ga.sub(gb).sub(gc).add(gd)))
|
|
37
|
+
.add(du.mul(u.yx.mul(va.sub(vb).sub(vc).add(vd)).add(vec2(vb, vc)).sub(va)))
|
|
38
|
+
)
|
|
39
|
+
}).setLayout({
|
|
40
|
+
name: 'noised',
|
|
41
|
+
type: 'vec3',
|
|
42
|
+
inputs: [{ name: 'p', type: 'vec2' }],
|
|
43
|
+
})
|
|
44
|
+
|
|
45
|
+
export const noisedVec3 = Fn(([pos]: [Vec3]) => {
|
|
46
|
+
const p = pos.floor().toVar('p')
|
|
47
|
+
const w = pos.fract().toVar('w')
|
|
48
|
+
const u = w
|
|
49
|
+
.mul(w)
|
|
50
|
+
.mul(w)
|
|
51
|
+
.mul(w.mul(w.mul(6).sub(15)).add(10))
|
|
52
|
+
.toVar('u')
|
|
53
|
+
const du = w
|
|
54
|
+
.mul(w)
|
|
55
|
+
.mul(w.mul(w.sub(2)).add(1))
|
|
56
|
+
.mul(30)
|
|
57
|
+
.toVar('du')
|
|
58
|
+
|
|
59
|
+
const ga = srandom3Vec3(p.add(vec3(0, 0, 0))).toVar('ga')
|
|
60
|
+
const gb = srandom3Vec3(p.add(vec3(1, 0, 0))).toVar('gb')
|
|
61
|
+
const gc = srandom3Vec3(p.add(vec3(0, 1, 0))).toVar('gc')
|
|
62
|
+
const gd = srandom3Vec3(p.add(vec3(1, 1, 0))).toVar('gd')
|
|
63
|
+
const ge = srandom3Vec3(p.add(vec3(0, 0, 1))).toVar('ge')
|
|
64
|
+
const gf = srandom3Vec3(p.add(vec3(1, 0, 1))).toVar('gf')
|
|
65
|
+
const gg = srandom3Vec3(p.add(vec3(0, 1, 1))).toVar('gg')
|
|
66
|
+
const gh = srandom3Vec3(p.add(vec3(1, 1, 1))).toVar('gh')
|
|
67
|
+
|
|
68
|
+
const va = w.sub(vec3(0, 0, 0)).dot(ga).toVar('va')
|
|
69
|
+
const vb = w.sub(vec3(1, 0, 0)).dot(gb).toVar('vb')
|
|
70
|
+
const vc = w.sub(vec3(0, 1, 0)).dot(gc).toVar('vc')
|
|
71
|
+
const vd = w.sub(vec3(1, 1, 0)).dot(gd).toVar('vd')
|
|
72
|
+
const ve = w.sub(vec3(0, 0, 1)).dot(ge).toVar('ve')
|
|
73
|
+
const vf = w.sub(vec3(1, 0, 1)).dot(gf).toVar('vf')
|
|
74
|
+
const vg = w.sub(vec3(0, 1, 1)).dot(gg).toVar('vg')
|
|
75
|
+
const vh = w.sub(vec3(1, 1, 1)).dot(gh).toVar('vh')
|
|
76
|
+
|
|
77
|
+
const noiseValue = va
|
|
78
|
+
.add(u.x.mul(vb.sub(va)))
|
|
79
|
+
.add(u.y.mul(vc.sub(va)))
|
|
80
|
+
.add(u.z.mul(ve.sub(va)))
|
|
81
|
+
.add(u.x.mul(u.y).mul(va.sub(vb).sub(vc).add(vd)))
|
|
82
|
+
.add(u.y.mul(u.z).mul(va.sub(vc).sub(ve).add(vg)))
|
|
83
|
+
.add(u.z.mul(u.x).mul(va.sub(vb).sub(ve).add(vf)))
|
|
84
|
+
.add(va.negate().add(vb).add(vc).sub(vd).add(ve).sub(vf).sub(vg).add(vh).mul(u.x).mul(u.y).mul(u.z))
|
|
85
|
+
|
|
86
|
+
const gradientValue = ga
|
|
87
|
+
.add(u.x.mul(gb.sub(ga)))
|
|
88
|
+
.add(u.y.mul(gc.sub(ga)))
|
|
89
|
+
.add(u.z.mul(ge.sub(ga)))
|
|
90
|
+
.add(u.x.mul(u.y).mul(ga.sub(gb).sub(gc).add(gd)))
|
|
91
|
+
.add(u.y.mul(u.z).mul(ga.sub(gc).sub(ge).add(gg)))
|
|
92
|
+
.add(u.z.mul(u.x).mul(ga.sub(gb).sub(ge).add(gf)))
|
|
93
|
+
.add(ga.negate().add(gb).add(gc).sub(gd).add(ge).sub(gf).sub(gg).add(gh).mul(u.x).mul(u.y).mul(u.z))
|
|
94
|
+
.add(
|
|
95
|
+
du.mul(
|
|
96
|
+
vec3(vb, vc, ve)
|
|
97
|
+
.sub(va)
|
|
98
|
+
.add(
|
|
99
|
+
u.yzx.mul(
|
|
100
|
+
vec3(
|
|
101
|
+
va.sub(vb).sub(vc).add(vd),
|
|
102
|
+
va.sub(vc).sub(ve).add(vg),
|
|
103
|
+
va.sub(vb).sub(ve).add(vf)
|
|
104
|
+
)
|
|
105
|
+
)
|
|
106
|
+
)
|
|
107
|
+
.add(
|
|
108
|
+
u.zxy.mul(
|
|
109
|
+
vec3(
|
|
110
|
+
va.sub(vb).sub(ve).add(vf),
|
|
111
|
+
va.sub(vb).sub(vc).add(vd),
|
|
112
|
+
va.sub(vc).sub(ve).add(vg)
|
|
113
|
+
)
|
|
114
|
+
)
|
|
115
|
+
)
|
|
116
|
+
.add(
|
|
117
|
+
u.yzx
|
|
118
|
+
.mul(u.zxy)
|
|
119
|
+
.mul(
|
|
120
|
+
va
|
|
121
|
+
.negate()
|
|
122
|
+
.add(vb)
|
|
123
|
+
.add(vc)
|
|
124
|
+
.sub(vd)
|
|
125
|
+
.add(ve)
|
|
126
|
+
.sub(vf)
|
|
127
|
+
.sub(vg)
|
|
128
|
+
.add(vh)
|
|
129
|
+
)
|
|
130
|
+
)
|
|
131
|
+
)
|
|
132
|
+
)
|
|
133
|
+
|
|
134
|
+
return vec4(noiseValue, gradientValue)
|
|
135
|
+
}).setLayout({
|
|
136
|
+
name: 'noisedVec3',
|
|
137
|
+
type: 'vec4',
|
|
138
|
+
inputs: [{ name: 'pos', type: 'vec3' }],
|
|
139
|
+
})
|