glre 0.39.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.
Files changed (281) hide show
  1. package/README.md +8 -4
  2. package/dist/addons.cjs +1 -1
  3. package/dist/addons.cjs.map +1 -1
  4. package/dist/addons.d.ts +849 -19
  5. package/dist/addons.js +1 -1
  6. package/dist/addons.js.map +1 -1
  7. package/dist/index.cjs +8 -8
  8. package/dist/index.cjs.map +1 -1
  9. package/dist/index.d.ts +38 -20
  10. package/dist/index.js +8 -8
  11. package/dist/index.js.map +1 -1
  12. package/dist/native.d.ts +48 -22
  13. package/dist/node.cjs +59 -30
  14. package/dist/node.cjs.map +1 -1
  15. package/dist/node.d.ts +34 -22
  16. package/dist/node.js +59 -30
  17. package/dist/node.js.map +1 -1
  18. package/dist/react.d.ts +38 -20
  19. package/dist/solid.d.ts +38 -20
  20. package/package.json +24 -24
  21. package/src/addons/animation/easing/backIn.ts +10 -0
  22. package/src/addons/animation/easing/backInOut.ts +12 -0
  23. package/src/addons/animation/easing/backOut.ts +10 -0
  24. package/src/addons/animation/easing/bounceIn.ts +10 -0
  25. package/src/addons/animation/easing/bounceInOut.ts +13 -0
  26. package/src/addons/animation/easing/bounceOut.ts +30 -0
  27. package/src/addons/animation/easing/circularIn.ts +9 -0
  28. package/src/addons/animation/easing/circularInOut.ts +11 -0
  29. package/src/addons/animation/easing/circularOut.ts +9 -0
  30. package/src/addons/animation/easing/cubicIn.ts +9 -0
  31. package/src/addons/animation/easing/cubicInOut.ts +11 -0
  32. package/src/addons/animation/easing/cubicOut.ts +10 -0
  33. package/src/addons/animation/easing/elasticIn.ts +10 -0
  34. package/src/addons/animation/easing/elasticInOut.ts +21 -0
  35. package/src/addons/animation/easing/elasticOut.ts +12 -0
  36. package/src/addons/animation/easing/exponentialIn.ts +9 -0
  37. package/src/addons/animation/easing/exponentialInOut.ts +13 -0
  38. package/src/addons/animation/easing/exponentialOut.ts +9 -0
  39. package/src/addons/animation/easing/index.ts +33 -0
  40. package/src/addons/animation/easing/linearIn.ts +9 -0
  41. package/src/addons/animation/easing/linearInOut.ts +9 -0
  42. package/src/addons/animation/easing/linearOut.ts +9 -0
  43. package/src/addons/animation/easing/quadraticIn.ts +9 -0
  44. package/src/addons/animation/easing/quadraticInOut.ts +10 -0
  45. package/src/addons/animation/easing/quadraticOut.ts +9 -0
  46. package/src/addons/animation/easing/quarticIn.ts +9 -0
  47. package/src/addons/animation/easing/quarticInOut.ts +11 -0
  48. package/src/addons/animation/easing/quarticOut.ts +10 -0
  49. package/src/addons/animation/easing/quinticIn.ts +9 -0
  50. package/src/addons/animation/easing/quinticInOut.ts +11 -0
  51. package/src/addons/animation/easing/quinticOut.ts +9 -0
  52. package/src/addons/animation/easing/sineIn.ts +10 -0
  53. package/src/addons/animation/easing/sineInOut.ts +10 -0
  54. package/src/addons/animation/easing/sineOut.ts +10 -0
  55. package/src/addons/color/palette/macbeth.ts +42 -0
  56. package/src/addons/color/space/cmyk2rgb.ts +12 -0
  57. package/src/addons/color/space/gamma2linear.ts +19 -0
  58. package/src/addons/color/space/hsl2rgb.ts +20 -0
  59. package/src/addons/color/space/hsv2rgb.ts +18 -0
  60. package/src/addons/color/space/hue2rgb.ts +12 -0
  61. package/src/addons/color/space/index.ts +29 -0
  62. package/src/addons/color/space/lab2lch.ts +22 -0
  63. package/src/addons/color/space/lab2rgb.ts +19 -0
  64. package/src/addons/color/space/lab2xyz.ts +32 -0
  65. package/src/addons/color/space/lch2lab.ts +21 -0
  66. package/src/addons/color/space/lch2rgb.ts +22 -0
  67. package/src/addons/color/space/linear2gamma.ts +19 -0
  68. package/src/addons/color/space/oklab2rgb.ts +35 -0
  69. package/src/addons/color/space/rgb2cmyk.ts +13 -0
  70. package/src/addons/color/space/rgb2hcv.ts +29 -0
  71. package/src/addons/color/space/rgb2hsl.ts +23 -0
  72. package/src/addons/color/space/rgb2hsv.ts +36 -0
  73. package/src/addons/color/space/rgb2hue.ts +29 -0
  74. package/src/addons/color/space/rgb2lab.ts +19 -0
  75. package/src/addons/color/space/rgb2lch.ts +22 -0
  76. package/src/addons/color/space/rgb2oklab.ts +45 -0
  77. package/src/addons/color/space/rgb2srgb.ts +34 -0
  78. package/src/addons/color/space/rgb2xyz.ts +20 -0
  79. package/src/addons/color/space/rgb2yiq.ts +22 -0
  80. package/src/addons/color/space/rgb2yuv.ts +32 -0
  81. package/src/addons/color/space/srgb2rgb.ts +34 -0
  82. package/src/addons/color/space/xyz2lab.ts +27 -0
  83. package/src/addons/color/space/xyz2rgb.ts +30 -0
  84. package/src/addons/color/space/yiq2rgb.ts +22 -0
  85. package/src/addons/color/space/yuv2rgb.ts +32 -0
  86. package/src/addons/draw/arrows.ts +75 -0
  87. package/src/addons/draw/axis.ts +57 -0
  88. package/src/addons/draw/bridge.ts +81 -0
  89. package/src/addons/draw/char.ts +30 -0
  90. package/src/addons/draw/circle.ts +29 -0
  91. package/src/addons/draw/fill.ts +25 -0
  92. package/src/addons/draw/flip.ts +45 -0
  93. package/src/addons/draw/hex.ts +29 -0
  94. package/src/addons/draw/index.ts +13 -0
  95. package/src/addons/draw/line.ts +16 -0
  96. package/src/addons/draw/point.ts +30 -0
  97. package/src/addons/draw/rect.ts +52 -0
  98. package/src/addons/draw/stroke.ts +31 -0
  99. package/src/addons/draw/tri.ts +29 -0
  100. package/src/addons/generative/cnoise.ts +239 -0
  101. package/src/addons/generative/curl.ts +64 -0
  102. package/src/addons/generative/fbm.ts +69 -0
  103. package/src/addons/generative/gerstnerWave.ts +21 -0
  104. package/src/addons/generative/gnoise.ts +113 -0
  105. package/src/addons/generative/index.ts +15 -0
  106. package/src/addons/generative/noised.ts +139 -0
  107. package/src/addons/generative/pnoise.ts +249 -0
  108. package/src/addons/generative/psrdnoise.ts +277 -0
  109. package/src/addons/generative/random.ts +136 -0
  110. package/src/addons/generative/snoise.ts +199 -0
  111. package/src/addons/generative/srandom.ts +90 -0
  112. package/src/addons/generative/voronoi.ts +134 -0
  113. package/src/addons/generative/voronoise.ts +69 -0
  114. package/src/addons/generative/wavelet.ts +77 -0
  115. package/src/addons/generative/worley.ts +99 -0
  116. package/src/addons/geometry/aabb/aabb.ts +8 -0
  117. package/src/addons/geometry/aabb/centroid.ts +10 -0
  118. package/src/addons/geometry/aabb/contain.ts +19 -0
  119. package/src/addons/geometry/aabb/diagonal.ts +10 -0
  120. package/src/addons/geometry/aabb/expand.ts +16 -0
  121. package/src/addons/geometry/aabb/index.ts +7 -0
  122. package/src/addons/geometry/aabb/intersect.ts +20 -0
  123. package/src/addons/geometry/aabb/square.ts +17 -0
  124. package/src/addons/geometry/index.ts +2 -0
  125. package/src/addons/geometry/triangle/area.ts +10 -0
  126. package/src/addons/geometry/triangle/barycentric.ts +50 -0
  127. package/src/addons/geometry/triangle/centroid.ts +10 -0
  128. package/src/addons/geometry/triangle/closestPoint.ts +85 -0
  129. package/src/addons/geometry/triangle/contain.ts +19 -0
  130. package/src/addons/geometry/triangle/distanceSq.ts +38 -0
  131. package/src/addons/geometry/triangle/index.ts +10 -0
  132. package/src/addons/geometry/triangle/intersect.ts +49 -0
  133. package/src/addons/geometry/triangle/normal.ts +12 -0
  134. package/src/addons/geometry/triangle/signedDistance.ts +31 -0
  135. package/src/addons/geometry/triangle/triangle.ts +9 -0
  136. package/src/addons/index.ts +8 -6
  137. package/src/addons/lighting/ray.ts +8 -0
  138. package/src/addons/math/aafloor.ts +13 -0
  139. package/src/addons/math/aafract.ts +38 -0
  140. package/src/addons/math/aamirror.ts +12 -0
  141. package/src/addons/math/aastep.ts +14 -0
  142. package/src/addons/math/absi.ts +9 -0
  143. package/src/addons/math/adaptiveThreshold.ts +24 -0
  144. package/src/addons/math/bump.ts +20 -0
  145. package/src/addons/math/const.ts +19 -0
  146. package/src/addons/math/cubic.ts +101 -0
  147. package/src/addons/math/cubicMix.ts +49 -0
  148. package/src/addons/math/decimate.ts +12 -0
  149. package/src/addons/math/dist.ts +143 -0
  150. package/src/addons/math/fcos.ts +11 -0
  151. package/src/addons/math/frac.ts +9 -0
  152. package/src/addons/math/gain.ts +14 -0
  153. package/src/addons/math/gaussian.ts +14 -0
  154. package/src/addons/math/grad4.ts +19 -0
  155. package/src/addons/math/hammersley.ts +54 -0
  156. package/src/addons/math/highPass.ts +12 -0
  157. package/src/addons/math/index.ts +63 -0
  158. package/src/addons/math/inside.ts +68 -0
  159. package/src/addons/math/invCubic.ts +9 -0
  160. package/src/addons/math/invQuartic.ts +9 -0
  161. package/src/addons/math/inverse.ts +9 -0
  162. package/src/addons/math/lengthSq.ts +10 -0
  163. package/src/addons/math/map.ts +27 -0
  164. package/src/addons/math/mirror.ts +12 -0
  165. package/src/addons/math/mmax.ts +27 -0
  166. package/src/addons/math/mmin.ts +28 -0
  167. package/src/addons/math/mmix.ts +47 -0
  168. package/src/addons/math/mod2.ts +44 -0
  169. package/src/addons/math/mod289.ts +46 -0
  170. package/src/addons/math/modi.ts +15 -0
  171. package/src/addons/math/nyquist.ts +15 -0
  172. package/src/addons/math/pack.ts +15 -0
  173. package/src/addons/math/parabola.ts +12 -0
  174. package/src/addons/math/permute.ts +42 -0
  175. package/src/addons/math/pow2.ts +10 -0
  176. package/src/addons/math/pow3.ts +9 -0
  177. package/src/addons/math/pow5.ts +10 -0
  178. package/src/addons/math/pow7.ts +12 -0
  179. package/src/addons/math/powFast.ts +18 -0
  180. package/src/addons/math/quartic.ts +15 -0
  181. package/src/addons/math/quat/index.ts +14 -0
  182. package/src/addons/math/quat/quat2mat3.ts +28 -0
  183. package/src/addons/math/quat/quat2mat4.ts +16 -0
  184. package/src/addons/math/quat/quatAdd.ts +18 -0
  185. package/src/addons/math/quat/quatConj.ts +14 -0
  186. package/src/addons/math/quat/quatDiv.ts +18 -0
  187. package/src/addons/math/quat/quatIdentity.ts +9 -0
  188. package/src/addons/math/quat/quatInverse.ts +17 -0
  189. package/src/addons/math/quat/quatLength.ts +15 -0
  190. package/src/addons/math/quat/quatLengthSq.ts +14 -0
  191. package/src/addons/math/quat/quatLerp.ts +40 -0
  192. package/src/addons/math/quat/quatMul.ts +38 -0
  193. package/src/addons/math/quat/quatNeg.ts +14 -0
  194. package/src/addons/math/quat/quatNorm.ts +16 -0
  195. package/src/addons/math/quat/quatSub.ts +18 -0
  196. package/src/addons/math/quintic.ts +16 -0
  197. package/src/addons/math/rotate2d.ts +16 -0
  198. package/src/addons/math/rotate3d.ts +37 -0
  199. package/src/addons/math/rotate3dX.ts +20 -0
  200. package/src/addons/math/rotate3dY.ts +20 -0
  201. package/src/addons/math/rotate3dZ.ts +20 -0
  202. package/src/addons/math/rotate4d.ts +41 -0
  203. package/src/addons/math/rotate4dX.ts +21 -0
  204. package/src/addons/math/rotate4dY.ts +16 -0
  205. package/src/addons/math/rotate4dZ.ts +21 -0
  206. package/src/addons/math/saturateMediump.ts +11 -0
  207. package/src/addons/math/scale2d.ts +44 -0
  208. package/src/addons/math/scale3d.ts +17 -0
  209. package/src/addons/math/scale4d.ts +50 -0
  210. package/src/addons/math/smootherstep.ts +16 -0
  211. package/src/addons/math/taylorInvSqrt.ts +9 -0
  212. package/src/addons/math/toMat3.ts +14 -0
  213. package/src/addons/math/toMat4.ts +14 -0
  214. package/src/addons/math/translate4d.ts +31 -0
  215. package/src/addons/math/unpack.ts +88 -0
  216. package/src/addons/sdf/boxSDF.ts +24 -0
  217. package/src/addons/sdf/circleSDF.ts +20 -0
  218. package/src/addons/sdf/crossSDF.ts +17 -0
  219. package/src/addons/sdf/hexSDF.ts +18 -0
  220. package/src/addons/sdf/index.ts +7 -0
  221. package/src/addons/sdf/lineSDF.ts +33 -0
  222. package/src/addons/sdf/rectSDF.ts +46 -0
  223. package/src/addons/sdf/sphereSDF.ts +20 -0
  224. package/src/addons/sdf/triSDF.ts +14 -0
  225. package/src/addons/space/aspect.ts +14 -0
  226. package/src/addons/space/bracketing.ts +44 -0
  227. package/src/addons/space/brickTile.ts +44 -0
  228. package/src/addons/space/cart2polar.ts +20 -0
  229. package/src/addons/space/center.ts +32 -0
  230. package/src/addons/space/checkerTile.ts +41 -0
  231. package/src/addons/space/depth2viewZ.ts +43 -0
  232. package/src/addons/space/displace.ts +55 -0
  233. package/src/addons/space/equirect2xyz.ts +17 -0
  234. package/src/addons/space/eulerView.ts +19 -0
  235. package/src/addons/space/fisheye2xyz.ts +18 -0
  236. package/src/addons/space/flipY.ts +25 -0
  237. package/src/addons/space/hexTile.ts +18 -0
  238. package/src/addons/space/index.ts +38 -0
  239. package/src/addons/space/kaleidoscope.ts +48 -0
  240. package/src/addons/space/linearizeDepth.ts +17 -0
  241. package/src/addons/space/lookAt.ts +49 -0
  242. package/src/addons/space/lookAtView.ts +40 -0
  243. package/src/addons/space/mirrorTile.ts +73 -0
  244. package/src/addons/space/nearest.ts +13 -0
  245. package/src/addons/space/orthographic.ts +25 -0
  246. package/src/addons/space/parallaxMapping.ts +149 -0
  247. package/src/addons/space/perspective.ts +24 -0
  248. package/src/addons/space/polar2cart.ts +24 -0
  249. package/src/addons/space/ratio.ts +14 -0
  250. package/src/addons/space/rotate.ts +37 -0
  251. package/src/addons/space/rotateX.ts +54 -0
  252. package/src/addons/space/rotateY.ts +54 -0
  253. package/src/addons/space/rotateZ.ts +54 -0
  254. package/src/addons/space/scale.ts +13 -0
  255. package/src/addons/space/sprite.ts +16 -0
  256. package/src/addons/space/sqTile.ts +20 -0
  257. package/src/addons/space/tbn.ts +26 -0
  258. package/src/addons/space/translate.ts +12 -0
  259. package/src/addons/space/triTile.ts +32 -0
  260. package/src/addons/space/uncenter.ts +32 -0
  261. package/src/addons/space/unratio.ts +12 -0
  262. package/src/addons/space/viewZ2depth.ts +25 -0
  263. package/src/addons/space/windmillTile.ts +58 -0
  264. package/src/addons/space/xyz2equirect.ts +10 -0
  265. package/src/index.ts +5 -2
  266. package/src/node/build.ts +62 -52
  267. package/src/node/create.ts +3 -0
  268. package/src/node/index.ts +1 -2
  269. package/src/node/scope.ts +26 -25
  270. package/src/node/types.ts +15 -11
  271. package/src/node/utils/const.ts +12 -11
  272. package/src/node/utils/index.ts +14 -12
  273. package/src/node/utils/infer.ts +15 -5
  274. package/src/node/utils/parse.ts +37 -13
  275. package/src/node/utils/utils.ts +46 -23
  276. package/src/types.ts +9 -2
  277. package/src/utils/helpers.ts +56 -0
  278. package/src/utils/pipeline.ts +21 -5
  279. package/src/utils/program.ts +57 -38
  280. package/src/utils/webgl.ts +41 -35
  281. package/src/utils/webgpu.ts +19 -35
@@ -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
+ })
@@ -0,0 +1,249 @@
1
+ import { Fn, Vec2, Vec3, Vec4, vec2, vec3, vec4, mix, step } from '../../node'
2
+ import { mod289Vec4, mod289Vec3 } from '../math/mod289'
3
+ import { permuteVec4 } from '../math/permute'
4
+ import { taylorInvSqrt } from '../math/taylorInvSqrt'
5
+ import { quintic } from '../math/quintic'
6
+
7
+ export const pnoise = Fn(([P, rep]: [Vec2, Vec2]) => {
8
+ const Pi = P.xyxy.floor().add(vec4(0, 0, 1, 1)).toVar('Pi')
9
+ const Pf = P.xyxy.fract().sub(vec4(0, 0, 1, 1)).toVar('Pf')
10
+ Pi.assign(Pi.mod(rep.xyxy))
11
+ Pi.assign(mod289Vec4(Pi))
12
+ const ix = Pi.xzxz.toVar('ix')
13
+ const iy = Pi.yyww.toVar('iy')
14
+ const fx = Pf.xzxz.toVar('fx')
15
+ const fy = Pf.yyww.toVar('fy')
16
+ const i = permuteVec4(permuteVec4(ix).add(iy)).toVar('i')
17
+ const gx = i.div(41).fract().mul(2).sub(1).toVar('gx')
18
+ const gy = gx.abs().sub(0.5).toVar('gy')
19
+ const tx = gx.add(0.5).floor().toVar('tx')
20
+ gx.assign(gx.sub(tx))
21
+ const g00 = vec2(gx.x, gy.x).toVar('g00')
22
+ const g10 = vec2(gx.y, gy.y).toVar('g10')
23
+ const g01 = vec2(gx.z, gy.z).toVar('g01')
24
+ const g11 = vec2(gx.w, gy.w).toVar('g11')
25
+ const norm = taylorInvSqrt(vec4(g00.dot(g00), g01.dot(g01), g10.dot(g10), g11.dot(g11))).toVar('norm')
26
+ g00.mulAssign(norm.x)
27
+ g01.mulAssign(norm.y)
28
+ g10.mulAssign(norm.z)
29
+ g11.mulAssign(norm.w)
30
+ const n00 = g00.dot(vec2(fx.x, fy.x)).toVar('n00')
31
+ const n10 = g10.dot(vec2(fx.y, fy.y)).toVar('n10')
32
+ const n01 = g01.dot(vec2(fx.z, fy.z)).toVar('n01')
33
+ const n11 = g11.dot(vec2(fx.w, fy.w)).toVar('n11')
34
+ const fade_xy = quintic(Pf.xy).toVar('fade_xy')
35
+ const n_x = vec2(n00, n01).mix(vec2(n10, n11), fade_xy.x).toVar('n_x')
36
+ const n_xy = n_x.x.mix(n_x.y, fade_xy.y).toVar('n_xy')
37
+ return n_xy.mul(2.3)
38
+ }).setLayout({
39
+ name: 'pnoise',
40
+ type: 'float',
41
+ inputs: [
42
+ { name: 'P', type: 'vec2' },
43
+ { name: 'rep', type: 'vec2' },
44
+ ],
45
+ })
46
+
47
+ export const pnoiseVec3 = Fn(([P, rep]: [Vec3, Vec3]) => {
48
+ const Pi0 = P.floor().mod(rep).toVar('Pi0')
49
+ const Pi1 = Pi0.add(vec3(1)).mod(rep).toVar('Pi1')
50
+ Pi0.assign(mod289Vec3(Pi0))
51
+ Pi1.assign(mod289Vec3(Pi1))
52
+ const Pf0 = P.fract().toVar('Pf0')
53
+ const Pf1 = Pf0.sub(vec3(1)).toVar('Pf1')
54
+ const ix = vec4(Pi0.x, Pi1.x, Pi0.x, Pi1.x).toVar('ix')
55
+ const iy = vec4(Pi0.yy, Pi1.yy).toVar('iy')
56
+ const iz0 = Pi0.zzzz.toVar('iz0')
57
+ const iz1 = Pi1.zzzz.toVar('iz1')
58
+ const ixy = permuteVec4(permuteVec4(ix).add(iy)).toVar('ixy')
59
+ const ixy0 = permuteVec4(ixy.add(iz0)).toVar('ixy0')
60
+ const ixy1 = permuteVec4(ixy.add(iz1)).toVar('ixy1')
61
+ const gx0 = ixy0.div(7).toVar('gx0')
62
+ const gy0 = gx0.floor().div(7).fract().sub(0.5).toVar('gy0')
63
+ gx0.assign(gx0.fract())
64
+ const gz0 = vec4(0.5).sub(gx0.abs()).sub(gy0.abs()).toVar('gz0')
65
+ const sz0 = gz0.step(vec4(0)).toVar('sz0')
66
+ gx0.subAssign(sz0.mul(gx0.step(vec4(0)).sub(0.5)))
67
+ gy0.subAssign(sz0.mul(gy0.step(vec4(0)).sub(0.5)))
68
+ const gx1 = ixy1.div(7).toVar('gx1')
69
+ const gy1 = gx1.floor().div(7).fract().sub(0.5).toVar('gy1')
70
+ gx1.assign(gx1.fract())
71
+ const gz1 = vec4(0.5).sub(gx1.abs()).sub(gy1.abs()).toVar('gz1')
72
+ const sz1 = gz1.step(vec4(0)).toVar('sz1')
73
+ gx1.subAssign(sz1.mul(gx1.step(vec4(0)).sub(0.5)))
74
+ gy1.subAssign(sz1.mul(gy1.step(vec4(0)).sub(0.5)))
75
+ const g000 = vec3(gx0.x, gy0.x, gz0.x).toVar('g000')
76
+ const g100 = vec3(gx0.y, gy0.y, gz0.y).toVar('g100')
77
+ const g010 = vec3(gx0.z, gy0.z, gz0.z).toVar('g010')
78
+ const g110 = vec3(gx0.w, gy0.w, gz0.w).toVar('g110')
79
+ const g001 = vec3(gx1.x, gy1.x, gz1.x).toVar('g001')
80
+ const g101 = vec3(gx1.y, gy1.y, gz1.y).toVar('g101')
81
+ const g011 = vec3(gx1.z, gy1.z, gz1.z).toVar('g011')
82
+ const g111 = vec3(gx1.w, gy1.w, gz1.w).toVar('g111')
83
+ const norm0 = taylorInvSqrt(vec4(g000.dot(g000), g010.dot(g010), g100.dot(g100), g110.dot(g110))).toVar('norm0')
84
+ g000.mulAssign(norm0.x)
85
+ g010.mulAssign(norm0.y)
86
+ g100.mulAssign(norm0.z)
87
+ g110.mulAssign(norm0.w)
88
+ const norm1 = taylorInvSqrt(vec4(g001.dot(g001), g011.dot(g011), g101.dot(g101), g111.dot(g111))).toVar('norm1')
89
+ g001.mulAssign(norm1.x)
90
+ g011.mulAssign(norm1.y)
91
+ g101.mulAssign(norm1.z)
92
+ g111.mulAssign(norm1.w)
93
+ const n000 = g000.dot(Pf0).toVar('n000')
94
+ const n100 = g100.dot(vec3(Pf1.x, Pf0.yz)).toVar('n100')
95
+ const n010 = g010.dot(vec3(Pf0.x, Pf1.y, Pf0.z)).toVar('n010')
96
+ const n110 = g110.dot(vec3(Pf1.xy, Pf0.z)).toVar('n110')
97
+ const n001 = g001.dot(vec3(Pf0.xy, Pf1.z)).toVar('n001')
98
+ const n101 = g101.dot(vec3(Pf1.x, Pf0.y, Pf1.z)).toVar('n101')
99
+ const n011 = g011.dot(vec3(Pf0.x, Pf1.yz)).toVar('n011')
100
+ const n111 = g111.dot(Pf1).toVar('n111')
101
+ const fade_xyz = quintic(Pf0).toVar('fade_xyz')
102
+ const n_z = vec4(n000, n100, n010, n110).mix(vec4(n001, n101, n011, n111), fade_xyz.z).toVar('n_z')
103
+ const n_yz = n_z.xy.mix(n_z.zw, fade_xyz.y).toVar('n_yz')
104
+ const n_xyz = n_yz.x.mix(n_yz.y, fade_xyz.x).toVar('n_xyz')
105
+ return n_xyz.mul(2.2)
106
+ }).setLayout({
107
+ name: 'pnoiseVec3',
108
+ type: 'float',
109
+ inputs: [
110
+ { name: 'P', type: 'vec3' },
111
+ { name: 'rep', type: 'vec3' },
112
+ ],
113
+ })
114
+
115
+ export const pnoiseVec4 = Fn(([P, rep]: [Vec4, Vec4]) => {
116
+ const Pi0 = P.floor().mod(rep).toVar('Pi0')
117
+ const Pi1 = Pi0.add(1).mod(rep).toVar('Pi1')
118
+ Pi0.assign(mod289Vec4(Pi0))
119
+ Pi1.assign(mod289Vec4(Pi1))
120
+ const Pf0 = P.fract().toVar('Pf0')
121
+ const Pf1 = Pf0.sub(1).toVar('Pf1')
122
+ const ix = vec4(Pi0.x, Pi1.x, Pi0.x, Pi1.x).toVar('ix')
123
+ const iy = vec4(Pi0.yy, Pi1.yy).toVar('iy')
124
+ const iz0 = vec4(Pi0.zzzz).toVar('iz0')
125
+ const iz1 = vec4(Pi1.zzzz).toVar('iz1')
126
+ const iw0 = vec4(Pi0.wwww).toVar('iw0')
127
+ const iw1 = vec4(Pi1.wwww).toVar('iw1')
128
+ const ixy = permuteVec4(permuteVec4(ix).add(iy)).toVar('ixy')
129
+ const ixy0 = permuteVec4(ixy.add(iz0)).toVar('ixy0')
130
+ const ixy1 = permuteVec4(ixy.add(iz1)).toVar('ixy1')
131
+ const ixy00 = permuteVec4(ixy0.add(iw0)).toVar('ixy00')
132
+ const ixy01 = permuteVec4(ixy0.add(iw1)).toVar('ixy01')
133
+ const ixy10 = permuteVec4(ixy1.add(iw0)).toVar('ixy10')
134
+ const ixy11 = permuteVec4(ixy1.add(iw1)).toVar('ixy11')
135
+ const gx00 = ixy00.div(7).toVar('gx00')
136
+ const gy00 = gx00.floor().div(7).toVar('gy00')
137
+ const gz00 = gy00.floor().div(6).toVar('gz00')
138
+ gx00.assign(gx00.fract().sub(0.5))
139
+ gy00.assign(gy00.fract().sub(0.5))
140
+ gz00.assign(gz00.fract().sub(0.5))
141
+ const gw00 = vec4(0.75).sub(gx00.abs()).sub(gy00.abs()).sub(gz00.abs()).toVar('gw00')
142
+ const sw00 = gw00.step(vec4(0)).toVar('sw00')
143
+ gx00.subAssign(sw00.mul(vec4(0).step(gx00).sub(0.5)))
144
+ gy00.subAssign(sw00.mul(vec4(0).step(gy00).sub(0.5)))
145
+ const gx01 = ixy01.div(7).toVar('gx01')
146
+ const gy01 = gx01.floor().div(7).toVar('gy01')
147
+ const gz01 = gy01.floor().div(6).toVar('gz01')
148
+ gx01.assign(gx01.fract().sub(0.5))
149
+ gy01.assign(gy01.fract().sub(0.5))
150
+ gz01.assign(gz01.fract().sub(0.5))
151
+ const gw01 = vec4(0.75).sub(gx01.abs()).sub(gy01.abs()).sub(gz01.abs()).toVar('gw01')
152
+ const sw01 = gw01.step(vec4(0)).toVar('sw01')
153
+ gx01.subAssign(sw01.mul(vec4(0).step(gx01).sub(0.5)))
154
+ gy01.subAssign(sw01.mul(vec4(0).step(gy01).sub(0.5)))
155
+ const gx10 = ixy10.div(7).toVar('gx10')
156
+ const gy10 = gx10.floor().div(7).toVar('gy10')
157
+ const gz10 = gy10.floor().div(6).toVar('gz10')
158
+ gx10.assign(gx10.fract().sub(0.5))
159
+ gy10.assign(gy10.fract().sub(0.5))
160
+ gz10.assign(gz10.fract().sub(0.5))
161
+ const gw10 = vec4(0.75).sub(gx10.abs()).sub(gy10.abs()).sub(gz10.abs()).toVar('gw10')
162
+ const sw10 = gw10.step(vec4(0)).toVar('sw10')
163
+ gx10.subAssign(sw10.mul(vec4(0).step(gx10).sub(0.5)))
164
+ gy10.subAssign(sw10.mul(vec4(0).step(gy10).sub(0.5)))
165
+ const gx11 = ixy11.div(7).toVar('gx11')
166
+ const gy11 = gx11.floor().div(7).toVar('gy11')
167
+ const gz11 = gy11.floor().div(6).toVar('gz11')
168
+ gx11.assign(gx11.fract().sub(0.5))
169
+ gy11.assign(gy11.fract().sub(0.5))
170
+ gz11.assign(gz11.fract().sub(0.5))
171
+ const gw11 = vec4(0.75).sub(gx11.abs()).sub(gy11.abs()).sub(gz11.abs()).toVar('gw11')
172
+ const sw11 = gw11.step(vec4(0)).toVar('sw11')
173
+ gx11.subAssign(sw11.mul(vec4(0).step(gx11).sub(0.5)))
174
+ gy11.subAssign(sw11.mul(vec4(0).step(gy11).sub(0.5)))
175
+ const g0000 = vec4(gx00.x, gy00.x, gz00.x, gw00.x).toVar('g0000')
176
+ const g1000 = vec4(gx00.y, gy00.y, gz00.y, gw00.y).toVar('g1000')
177
+ const g0100 = vec4(gx00.z, gy00.z, gz00.z, gw00.z).toVar('g0100')
178
+ const g1100 = vec4(gx00.w, gy00.w, gz00.w, gw00.w).toVar('g1100')
179
+ const g0010 = vec4(gx10.x, gy10.x, gz10.x, gw10.x).toVar('g0010')
180
+ const g1010 = vec4(gx10.y, gy10.y, gz10.y, gw10.y).toVar('g1010')
181
+ const g0110 = vec4(gx10.z, gy10.z, gz10.z, gw10.z).toVar('g0110')
182
+ const g1110 = vec4(gx10.w, gy10.w, gz10.w, gw10.w).toVar('g1110')
183
+ const g0001 = vec4(gx01.x, gy01.x, gz01.x, gw01.x).toVar('g0001')
184
+ const g1001 = vec4(gx01.y, gy01.y, gz01.y, gw01.y).toVar('g1001')
185
+ const g0101 = vec4(gx01.z, gy01.z, gz01.z, gw01.z).toVar('g0101')
186
+ const g1101 = vec4(gx01.w, gy01.w, gz01.w, gw01.w).toVar('g1101')
187
+ const g0011 = vec4(gx11.x, gy11.x, gz11.x, gw11.x).toVar('g0011')
188
+ const g1011 = vec4(gx11.y, gy11.y, gz11.y, gw11.y).toVar('g1011')
189
+ const g0111 = vec4(gx11.z, gy11.z, gz11.z, gw11.z).toVar('g0111')
190
+ const g1111 = vec4(gx11.w, gy11.w, gz11.w, gw11.w).toVar('g1111')
191
+ const norm00 = taylorInvSqrt(
192
+ vec4(g0000.dot(g0000), g0100.dot(g0100), g1000.dot(g1000), g1100.dot(g1100))
193
+ ).toVar('norm00')
194
+ g0000.mulAssign(norm00.x)
195
+ g0100.mulAssign(norm00.y)
196
+ g1000.mulAssign(norm00.z)
197
+ g1100.mulAssign(norm00.w)
198
+ const norm01 = taylorInvSqrt(
199
+ vec4(g0001.dot(g0001), g0101.dot(g0101), g1001.dot(g1001), g1101.dot(g1101))
200
+ ).toVar('norm01')
201
+ g0001.mulAssign(norm01.x)
202
+ g0101.mulAssign(norm01.y)
203
+ g1001.mulAssign(norm01.z)
204
+ g1101.mulAssign(norm01.w)
205
+ const norm10 = taylorInvSqrt(
206
+ vec4(g0010.dot(g0010), g0110.dot(g0110), g1010.dot(g1010), g1110.dot(g1110))
207
+ ).toVar('norm10')
208
+ g0010.mulAssign(norm10.x)
209
+ g0110.mulAssign(norm10.y)
210
+ g1010.mulAssign(norm10.z)
211
+ g1110.mulAssign(norm10.w)
212
+ const norm11 = taylorInvSqrt(
213
+ vec4(g0011.dot(g0011), g0111.dot(g0111), g1011.dot(g1011), g1111.dot(g1111))
214
+ ).toVar('norm11')
215
+ g0011.mulAssign(norm11.x)
216
+ g0111.mulAssign(norm11.y)
217
+ g1011.mulAssign(norm11.z)
218
+ g1111.mulAssign(norm11.w)
219
+ const n0000 = g0000.dot(Pf0).toVar('n0000')
220
+ const n1000 = g1000.dot(vec4(Pf1.x, Pf0.yzw)).toVar('n1000')
221
+ const n0100 = g0100.dot(vec4(Pf0.x, Pf1.y, Pf0.zw)).toVar('n0100')
222
+ const n1100 = g1100.dot(vec4(Pf1.xy, Pf0.zw)).toVar('n1100')
223
+ const n0010 = g0010.dot(vec4(Pf0.xy, Pf1.z, Pf0.w)).toVar('n0010')
224
+ const n1010 = g1010.dot(vec4(Pf1.x, Pf0.y, Pf1.z, Pf0.w)).toVar('n1010')
225
+ const n0110 = g0110.dot(vec4(Pf0.x, Pf1.yz, Pf0.w)).toVar('n0110')
226
+ const n1110 = g1110.dot(vec4(Pf1.xyz, Pf0.w)).toVar('n1110')
227
+ const n0001 = g0001.dot(vec4(Pf0.xyz, Pf1.w)).toVar('n0001')
228
+ const n1001 = g1001.dot(vec4(Pf1.x, Pf0.yz, Pf1.w)).toVar('n1001')
229
+ const n0101 = g0101.dot(vec4(Pf0.x, Pf1.y, Pf0.z, Pf1.w)).toVar('n0101')
230
+ const n1101 = g1101.dot(vec4(Pf1.xy, Pf0.z, Pf1.w)).toVar('n1101')
231
+ const n0011 = g0011.dot(vec4(Pf0.xy, Pf1.zw)).toVar('n0011')
232
+ const n1011 = g1011.dot(vec4(Pf1.x, Pf0.y, Pf1.zw)).toVar('n1011')
233
+ const n0111 = g0111.dot(vec4(Pf0.x, Pf1.yzw)).toVar('n0111')
234
+ const n1111 = g1111.dot(Pf1).toVar('n1111')
235
+ const fade_xyzw = quintic(Pf0).toVar('fade_xyzw')
236
+ const n_0w = vec4(n0000, n1000, n0100, n1100).mix(vec4(n0001, n1001, n0101, n1101), fade_xyzw.w).toVar('n_0w')
237
+ const n_1w = vec4(n0010, n1010, n0110, n1110).mix(vec4(n0011, n1011, n0111, n1111), fade_xyzw.w).toVar('n_1w')
238
+ const n_zw = n_0w.mix(n_1w, fade_xyzw.z).toVar('n_zw')
239
+ const n_yzw = n_zw.xy.mix(n_zw.zw, fade_xyzw.y).toVar('n_yzw')
240
+ const n_xyzw = n_yzw.x.mix(n_yzw.y, fade_xyzw.x).toVar('n_xyzw')
241
+ return n_xyzw.mul(2.2)
242
+ }).setLayout({
243
+ name: 'pnoiseVec4',
244
+ type: 'float',
245
+ inputs: [
246
+ { name: 'P', type: 'vec4' },
247
+ { name: 'rep', type: 'vec4' },
248
+ ],
249
+ })