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.
Files changed (295) hide show
  1. package/README.md +8 -4
  2. package/dist/addons.cjs +2 -0
  3. package/dist/addons.cjs.map +1 -0
  4. package/dist/addons.d.ts +1287 -0
  5. package/dist/addons.js +2 -0
  6. package/dist/addons.js.map +1 -0
  7. package/dist/index.cjs +31 -43
  8. package/dist/index.cjs.map +1 -1
  9. package/dist/index.d.ts +187 -323
  10. package/dist/index.js +31 -43
  11. package/dist/index.js.map +1 -1
  12. package/dist/native.cjs +1 -48
  13. package/dist/native.cjs.map +1 -1
  14. package/dist/native.d.ts +536 -10
  15. package/dist/native.js +1 -48
  16. package/dist/native.js.map +1 -1
  17. package/dist/node.cjs +69 -0
  18. package/dist/node.cjs.map +1 -0
  19. package/dist/node.d.ts +626 -0
  20. package/dist/node.js +69 -0
  21. package/dist/node.js.map +1 -0
  22. package/dist/react.cjs +1 -48
  23. package/dist/react.cjs.map +1 -1
  24. package/dist/react.d.ts +524 -4
  25. package/dist/react.js +1 -48
  26. package/dist/react.js.map +1 -1
  27. package/dist/solid.cjs +1 -48
  28. package/dist/solid.cjs.map +1 -1
  29. package/dist/solid.d.ts +524 -4
  30. package/dist/solid.js +1 -48
  31. package/dist/solid.js.map +1 -1
  32. package/package.json +64 -11
  33. package/src/addons/animation/easing/backIn.ts +10 -0
  34. package/src/addons/animation/easing/backInOut.ts +12 -0
  35. package/src/addons/animation/easing/backOut.ts +10 -0
  36. package/src/addons/animation/easing/bounceIn.ts +10 -0
  37. package/src/addons/animation/easing/bounceInOut.ts +13 -0
  38. package/src/addons/animation/easing/bounceOut.ts +30 -0
  39. package/src/addons/animation/easing/circularIn.ts +9 -0
  40. package/src/addons/animation/easing/circularInOut.ts +11 -0
  41. package/src/addons/animation/easing/circularOut.ts +9 -0
  42. package/src/addons/animation/easing/cubicIn.ts +9 -0
  43. package/src/addons/animation/easing/cubicInOut.ts +11 -0
  44. package/src/addons/animation/easing/cubicOut.ts +10 -0
  45. package/src/addons/animation/easing/elasticIn.ts +10 -0
  46. package/src/addons/animation/easing/elasticInOut.ts +21 -0
  47. package/src/addons/animation/easing/elasticOut.ts +12 -0
  48. package/src/addons/animation/easing/exponentialIn.ts +9 -0
  49. package/src/addons/animation/easing/exponentialInOut.ts +13 -0
  50. package/src/addons/animation/easing/exponentialOut.ts +9 -0
  51. package/src/addons/animation/easing/index.ts +33 -0
  52. package/src/addons/animation/easing/linearIn.ts +9 -0
  53. package/src/addons/animation/easing/linearInOut.ts +9 -0
  54. package/src/addons/animation/easing/linearOut.ts +9 -0
  55. package/src/addons/animation/easing/quadraticIn.ts +9 -0
  56. package/src/addons/animation/easing/quadraticInOut.ts +10 -0
  57. package/src/addons/animation/easing/quadraticOut.ts +9 -0
  58. package/src/addons/animation/easing/quarticIn.ts +9 -0
  59. package/src/addons/animation/easing/quarticInOut.ts +11 -0
  60. package/src/addons/animation/easing/quarticOut.ts +10 -0
  61. package/src/addons/animation/easing/quinticIn.ts +9 -0
  62. package/src/addons/animation/easing/quinticInOut.ts +11 -0
  63. package/src/addons/animation/easing/quinticOut.ts +9 -0
  64. package/src/addons/animation/easing/sineIn.ts +10 -0
  65. package/src/addons/animation/easing/sineInOut.ts +10 -0
  66. package/src/addons/animation/easing/sineOut.ts +10 -0
  67. package/src/addons/color/palette/macbeth.ts +42 -0
  68. package/src/addons/color/space/cmyk2rgb.ts +12 -0
  69. package/src/addons/color/space/gamma2linear.ts +19 -0
  70. package/src/addons/color/space/hsl2rgb.ts +20 -0
  71. package/src/addons/color/space/hsv2rgb.ts +18 -0
  72. package/src/addons/color/space/hue2rgb.ts +12 -0
  73. package/src/addons/color/space/index.ts +29 -0
  74. package/src/addons/color/space/lab2lch.ts +22 -0
  75. package/src/addons/color/space/lab2rgb.ts +19 -0
  76. package/src/addons/color/space/lab2xyz.ts +32 -0
  77. package/src/addons/color/space/lch2lab.ts +21 -0
  78. package/src/addons/color/space/lch2rgb.ts +22 -0
  79. package/src/addons/color/space/linear2gamma.ts +19 -0
  80. package/src/addons/color/space/oklab2rgb.ts +35 -0
  81. package/src/addons/color/space/rgb2cmyk.ts +13 -0
  82. package/src/addons/color/space/rgb2hcv.ts +29 -0
  83. package/src/addons/color/space/rgb2hsl.ts +23 -0
  84. package/src/addons/color/space/rgb2hsv.ts +36 -0
  85. package/src/addons/color/space/rgb2hue.ts +29 -0
  86. package/src/addons/color/space/rgb2lab.ts +19 -0
  87. package/src/addons/color/space/rgb2lch.ts +22 -0
  88. package/src/addons/color/space/rgb2oklab.ts +45 -0
  89. package/src/addons/color/space/rgb2srgb.ts +34 -0
  90. package/src/addons/color/space/rgb2xyz.ts +20 -0
  91. package/src/addons/color/space/rgb2yiq.ts +22 -0
  92. package/src/addons/color/space/rgb2yuv.ts +32 -0
  93. package/src/addons/color/space/srgb2rgb.ts +34 -0
  94. package/src/addons/color/space/xyz2lab.ts +27 -0
  95. package/src/addons/color/space/xyz2rgb.ts +30 -0
  96. package/src/addons/color/space/yiq2rgb.ts +22 -0
  97. package/src/addons/color/space/yuv2rgb.ts +32 -0
  98. package/src/addons/draw/arrows.ts +75 -0
  99. package/src/addons/draw/axis.ts +57 -0
  100. package/src/addons/draw/bridge.ts +81 -0
  101. package/src/addons/draw/char.ts +30 -0
  102. package/src/addons/draw/circle.ts +29 -0
  103. package/src/addons/draw/fill.ts +25 -0
  104. package/src/addons/draw/flip.ts +45 -0
  105. package/src/addons/draw/hex.ts +29 -0
  106. package/src/addons/draw/index.ts +13 -0
  107. package/src/addons/draw/line.ts +16 -0
  108. package/src/addons/draw/point.ts +30 -0
  109. package/src/addons/draw/rect.ts +52 -0
  110. package/src/addons/draw/stroke.ts +31 -0
  111. package/src/addons/draw/tri.ts +29 -0
  112. package/src/addons/generative/cnoise.ts +239 -0
  113. package/src/addons/generative/curl.ts +64 -0
  114. package/src/addons/generative/fbm.ts +69 -0
  115. package/src/addons/generative/gerstnerWave.ts +21 -0
  116. package/src/addons/generative/gnoise.ts +113 -0
  117. package/src/addons/generative/index.ts +15 -0
  118. package/src/addons/generative/noised.ts +139 -0
  119. package/src/addons/generative/pnoise.ts +249 -0
  120. package/src/addons/generative/psrdnoise.ts +277 -0
  121. package/src/addons/generative/random.ts +136 -0
  122. package/src/addons/generative/snoise.ts +199 -0
  123. package/src/addons/generative/srandom.ts +90 -0
  124. package/src/addons/generative/voronoi.ts +134 -0
  125. package/src/addons/generative/voronoise.ts +69 -0
  126. package/src/addons/generative/wavelet.ts +77 -0
  127. package/src/addons/generative/worley.ts +99 -0
  128. package/src/addons/geometry/aabb/aabb.ts +8 -0
  129. package/src/addons/geometry/aabb/centroid.ts +10 -0
  130. package/src/addons/geometry/aabb/contain.ts +19 -0
  131. package/src/addons/geometry/aabb/diagonal.ts +10 -0
  132. package/src/addons/geometry/aabb/expand.ts +16 -0
  133. package/src/addons/geometry/aabb/index.ts +7 -0
  134. package/src/addons/geometry/aabb/intersect.ts +20 -0
  135. package/src/addons/geometry/aabb/square.ts +17 -0
  136. package/src/addons/geometry/index.ts +2 -0
  137. package/src/addons/geometry/triangle/area.ts +10 -0
  138. package/src/addons/geometry/triangle/barycentric.ts +50 -0
  139. package/src/addons/geometry/triangle/centroid.ts +10 -0
  140. package/src/addons/geometry/triangle/closestPoint.ts +85 -0
  141. package/src/addons/geometry/triangle/contain.ts +19 -0
  142. package/src/addons/geometry/triangle/distanceSq.ts +38 -0
  143. package/src/addons/geometry/triangle/index.ts +10 -0
  144. package/src/addons/geometry/triangle/intersect.ts +49 -0
  145. package/src/addons/geometry/triangle/normal.ts +12 -0
  146. package/src/addons/geometry/triangle/signedDistance.ts +31 -0
  147. package/src/addons/geometry/triangle/triangle.ts +9 -0
  148. package/src/addons/index.ts +8 -0
  149. package/src/addons/lighting/ray.ts +8 -0
  150. package/src/addons/math/aafloor.ts +13 -0
  151. package/src/addons/math/aafract.ts +38 -0
  152. package/src/addons/math/aamirror.ts +12 -0
  153. package/src/addons/math/aastep.ts +14 -0
  154. package/src/addons/math/absi.ts +9 -0
  155. package/src/addons/math/adaptiveThreshold.ts +24 -0
  156. package/src/addons/math/bump.ts +20 -0
  157. package/src/addons/math/const.ts +19 -0
  158. package/src/addons/math/cubic.ts +101 -0
  159. package/src/addons/math/cubicMix.ts +49 -0
  160. package/src/addons/math/decimate.ts +12 -0
  161. package/src/addons/math/dist.ts +143 -0
  162. package/src/addons/math/fcos.ts +11 -0
  163. package/src/addons/math/frac.ts +9 -0
  164. package/src/addons/math/gain.ts +14 -0
  165. package/src/addons/math/gaussian.ts +14 -0
  166. package/src/addons/math/grad4.ts +19 -0
  167. package/src/addons/math/hammersley.ts +54 -0
  168. package/src/addons/math/highPass.ts +12 -0
  169. package/src/addons/math/index.ts +63 -0
  170. package/src/addons/math/inside.ts +68 -0
  171. package/src/addons/math/invCubic.ts +9 -0
  172. package/src/addons/math/invQuartic.ts +9 -0
  173. package/src/addons/math/inverse.ts +9 -0
  174. package/src/addons/math/lengthSq.ts +10 -0
  175. package/src/addons/math/map.ts +27 -0
  176. package/src/addons/math/mirror.ts +12 -0
  177. package/src/addons/math/mmax.ts +27 -0
  178. package/src/addons/math/mmin.ts +28 -0
  179. package/src/addons/math/mmix.ts +47 -0
  180. package/src/addons/math/mod2.ts +44 -0
  181. package/src/addons/math/mod289.ts +46 -0
  182. package/src/addons/math/modi.ts +15 -0
  183. package/src/addons/math/nyquist.ts +15 -0
  184. package/src/addons/math/pack.ts +15 -0
  185. package/src/addons/math/parabola.ts +12 -0
  186. package/src/addons/math/permute.ts +42 -0
  187. package/src/addons/math/pow2.ts +10 -0
  188. package/src/addons/math/pow3.ts +9 -0
  189. package/src/addons/math/pow5.ts +10 -0
  190. package/src/addons/math/pow7.ts +12 -0
  191. package/src/addons/math/powFast.ts +18 -0
  192. package/src/addons/math/quartic.ts +15 -0
  193. package/src/addons/math/quat/index.ts +14 -0
  194. package/src/addons/math/quat/quat2mat3.ts +28 -0
  195. package/src/addons/math/quat/quat2mat4.ts +16 -0
  196. package/src/addons/math/quat/quatAdd.ts +18 -0
  197. package/src/addons/math/quat/quatConj.ts +14 -0
  198. package/src/addons/math/quat/quatDiv.ts +18 -0
  199. package/src/addons/math/quat/quatIdentity.ts +9 -0
  200. package/src/addons/math/quat/quatInverse.ts +17 -0
  201. package/src/addons/math/quat/quatLength.ts +15 -0
  202. package/src/addons/math/quat/quatLengthSq.ts +14 -0
  203. package/src/addons/math/quat/quatLerp.ts +40 -0
  204. package/src/addons/math/quat/quatMul.ts +38 -0
  205. package/src/addons/math/quat/quatNeg.ts +14 -0
  206. package/src/addons/math/quat/quatNorm.ts +16 -0
  207. package/src/addons/math/quat/quatSub.ts +18 -0
  208. package/src/addons/math/quintic.ts +16 -0
  209. package/src/addons/math/rotate2d.ts +16 -0
  210. package/src/addons/math/rotate3d.ts +37 -0
  211. package/src/addons/math/rotate3dX.ts +20 -0
  212. package/src/addons/math/rotate3dY.ts +20 -0
  213. package/src/addons/math/rotate3dZ.ts +20 -0
  214. package/src/addons/math/rotate4d.ts +41 -0
  215. package/src/addons/math/rotate4dX.ts +21 -0
  216. package/src/addons/math/rotate4dY.ts +16 -0
  217. package/src/addons/math/rotate4dZ.ts +21 -0
  218. package/src/addons/math/saturateMediump.ts +11 -0
  219. package/src/addons/math/scale2d.ts +44 -0
  220. package/src/addons/math/scale3d.ts +17 -0
  221. package/src/addons/math/scale4d.ts +50 -0
  222. package/src/addons/math/smootherstep.ts +16 -0
  223. package/src/addons/math/taylorInvSqrt.ts +9 -0
  224. package/src/addons/math/toMat3.ts +14 -0
  225. package/src/addons/math/toMat4.ts +14 -0
  226. package/src/addons/math/translate4d.ts +31 -0
  227. package/src/addons/math/unpack.ts +88 -0
  228. package/src/addons/sdf/boxSDF.ts +24 -0
  229. package/src/addons/sdf/circleSDF.ts +20 -0
  230. package/src/addons/sdf/crossSDF.ts +17 -0
  231. package/src/addons/sdf/hexSDF.ts +18 -0
  232. package/src/addons/sdf/index.ts +7 -0
  233. package/src/addons/sdf/lineSDF.ts +33 -0
  234. package/src/addons/sdf/rectSDF.ts +46 -0
  235. package/src/addons/sdf/sphereSDF.ts +20 -0
  236. package/src/addons/sdf/triSDF.ts +14 -0
  237. package/src/addons/space/aspect.ts +14 -0
  238. package/src/addons/space/bracketing.ts +44 -0
  239. package/src/addons/space/brickTile.ts +44 -0
  240. package/src/addons/space/cart2polar.ts +20 -0
  241. package/src/addons/space/center.ts +32 -0
  242. package/src/addons/space/checkerTile.ts +41 -0
  243. package/src/addons/space/depth2viewZ.ts +43 -0
  244. package/src/addons/space/displace.ts +55 -0
  245. package/src/addons/space/equirect2xyz.ts +17 -0
  246. package/src/addons/space/eulerView.ts +19 -0
  247. package/src/addons/space/fisheye2xyz.ts +18 -0
  248. package/src/addons/space/flipY.ts +25 -0
  249. package/src/addons/space/hexTile.ts +18 -0
  250. package/src/addons/space/index.ts +38 -0
  251. package/src/addons/space/kaleidoscope.ts +48 -0
  252. package/src/addons/space/linearizeDepth.ts +17 -0
  253. package/src/addons/space/lookAt.ts +49 -0
  254. package/src/addons/space/lookAtView.ts +40 -0
  255. package/src/addons/space/mirrorTile.ts +73 -0
  256. package/src/addons/space/nearest.ts +13 -0
  257. package/src/addons/space/orthographic.ts +25 -0
  258. package/src/addons/space/parallaxMapping.ts +149 -0
  259. package/src/addons/space/perspective.ts +24 -0
  260. package/src/addons/space/polar2cart.ts +24 -0
  261. package/src/addons/space/ratio.ts +14 -0
  262. package/src/addons/space/rotate.ts +37 -0
  263. package/src/addons/space/rotateX.ts +54 -0
  264. package/src/addons/space/rotateY.ts +54 -0
  265. package/src/addons/space/rotateZ.ts +54 -0
  266. package/src/addons/space/scale.ts +13 -0
  267. package/src/addons/space/sprite.ts +16 -0
  268. package/src/addons/space/sqTile.ts +20 -0
  269. package/src/addons/space/tbn.ts +26 -0
  270. package/src/addons/space/translate.ts +12 -0
  271. package/src/addons/space/triTile.ts +32 -0
  272. package/src/addons/space/uncenter.ts +32 -0
  273. package/src/addons/space/unratio.ts +12 -0
  274. package/src/addons/space/viewZ2depth.ts +25 -0
  275. package/src/addons/space/windmillTile.ts +58 -0
  276. package/src/addons/space/xyz2equirect.ts +10 -0
  277. package/src/index.ts +10 -23
  278. package/src/node/build.ts +127 -0
  279. package/src/node/create.ts +76 -0
  280. package/src/node/index.ts +64 -49
  281. package/src/node/scope.ts +66 -62
  282. package/src/node/types.ts +221 -187
  283. package/src/node/utils/const.ts +74 -13
  284. package/src/node/utils/index.ts +19 -14
  285. package/src/node/utils/infer.ts +32 -34
  286. package/src/node/utils/parse.ts +48 -24
  287. package/src/node/utils/utils.ts +52 -29
  288. package/src/types.ts +11 -6
  289. package/src/utils/helpers.ts +56 -0
  290. package/src/utils/pipeline.ts +24 -8
  291. package/src/utils/program.ts +62 -38
  292. package/src/{webgl.ts → utils/webgl.ts} +46 -30
  293. package/src/{webgpu.ts → utils/webgpu.ts} +22 -17
  294. package/src/node/core.ts +0 -121
  295. 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
+ })