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,10 @@
|
|
|
1
|
+
import { Fn, Vec3 } from '../../../node'
|
|
2
|
+
import { AABBType } from './aabb'
|
|
3
|
+
|
|
4
|
+
export const aabbCentroid = Fn(([box]: [AABBType]): Vec3 => {
|
|
5
|
+
return box.minBounds.add(box.maxBounds).mul(0.5)
|
|
6
|
+
}).setLayout({
|
|
7
|
+
name: 'aabbCentroid',
|
|
8
|
+
type: 'vec3',
|
|
9
|
+
inputs: [{ name: 'box', type: 'auto' }],
|
|
10
|
+
})
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { Fn, Vec3, Bool } from '../../../node'
|
|
2
|
+
import { AABBType } from './aabb'
|
|
3
|
+
|
|
4
|
+
export const aabbContain = Fn(([box, point]: [AABBType, Vec3]): Bool => {
|
|
5
|
+
return point.x
|
|
6
|
+
.greaterThan(box.minBounds.x)
|
|
7
|
+
.and(point.x.lessThanEqual(box.maxBounds.x))
|
|
8
|
+
.and(point.y.greaterThan(box.minBounds.y))
|
|
9
|
+
.and(point.y.lessThanEqual(box.maxBounds.y))
|
|
10
|
+
.and(point.z.greaterThan(box.minBounds.z))
|
|
11
|
+
.and(point.z.lessThanEqual(box.maxBounds.z))
|
|
12
|
+
}).setLayout({
|
|
13
|
+
name: 'aabbContain',
|
|
14
|
+
type: 'bool',
|
|
15
|
+
inputs: [
|
|
16
|
+
{ name: 'box', type: 'auto' },
|
|
17
|
+
{ name: 'point', type: 'vec3' },
|
|
18
|
+
],
|
|
19
|
+
})
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { Fn, Vec3 } from '../../../node'
|
|
2
|
+
import { AABBType } from './aabb'
|
|
3
|
+
|
|
4
|
+
export const diagonal = Fn(([box]: [AABBType]): Vec3 => {
|
|
5
|
+
return box.maxBounds.sub(box.minBounds).abs()
|
|
6
|
+
}).setLayout({
|
|
7
|
+
name: 'diagonal',
|
|
8
|
+
type: 'vec3',
|
|
9
|
+
inputs: [{ name: 'box', type: 'auto' }],
|
|
10
|
+
})
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { Fn, Vec3, Float } from '../../../node'
|
|
2
|
+
import { AABBType, AABB } from './aabb'
|
|
3
|
+
|
|
4
|
+
export const expand = Fn(([box, value]: [AABBType, Float]): AABBType => {
|
|
5
|
+
return AABB({
|
|
6
|
+
minBounds: box.minBounds.sub(value),
|
|
7
|
+
maxBounds: box.maxBounds.add(value),
|
|
8
|
+
})
|
|
9
|
+
}).setLayout({
|
|
10
|
+
name: 'expand',
|
|
11
|
+
type: 'auto',
|
|
12
|
+
inputs: [
|
|
13
|
+
{ name: 'box', type: 'auto' },
|
|
14
|
+
{ name: 'value', type: 'float' },
|
|
15
|
+
],
|
|
16
|
+
})
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { Fn, Vec3, Vec2, vec2 } from '../../../node'
|
|
2
|
+
import { AABBType } from './aabb'
|
|
3
|
+
|
|
4
|
+
export const aabbIntersect = Fn(([box, rayOrigin, rayDir]: [AABBType, Vec3, Vec3]): Vec2 => {
|
|
5
|
+
const tMin = box.minBounds.sub(rayOrigin).div(rayDir)
|
|
6
|
+
const tMax = box.maxBounds.sub(rayOrigin).div(rayDir)
|
|
7
|
+
const t1 = tMin.min(tMax)
|
|
8
|
+
const t2 = tMin.max(tMax)
|
|
9
|
+
const tNear = t1.x.max(t1.y).max(t1.z)
|
|
10
|
+
const tFar = t2.x.min(t2.y).min(t2.z)
|
|
11
|
+
return vec2(tNear, tFar)
|
|
12
|
+
}).setLayout({
|
|
13
|
+
name: 'aabbIntersect',
|
|
14
|
+
type: 'vec2',
|
|
15
|
+
inputs: [
|
|
16
|
+
{ name: 'box', type: 'auto' },
|
|
17
|
+
{ name: 'rayOrigin', type: 'vec3' },
|
|
18
|
+
{ name: 'rayDir', type: 'vec3' },
|
|
19
|
+
],
|
|
20
|
+
})
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { Fn, Float, Vec3, max, abs } from '../../../node'
|
|
2
|
+
import { AABBType, AABB } from './aabb'
|
|
3
|
+
import { diagonal } from './diagonal'
|
|
4
|
+
|
|
5
|
+
export const square = Fn(([box]: [AABBType]): AABBType => {
|
|
6
|
+
const diag = diagonal(box).mul(0.5).toVar('diag')
|
|
7
|
+
const center = box.minBounds.add(diag).toVar('center')
|
|
8
|
+
const maxDim = max(abs(diag.x), max(abs(diag.y), abs(diag.z))).toVar('maxDim')
|
|
9
|
+
return AABB({
|
|
10
|
+
minBounds: center.sub(maxDim),
|
|
11
|
+
maxBounds: center.add(maxDim),
|
|
12
|
+
})
|
|
13
|
+
}).setLayout({
|
|
14
|
+
name: 'square',
|
|
15
|
+
type: 'auto',
|
|
16
|
+
inputs: [{ name: 'box', type: 'auto' }],
|
|
17
|
+
})
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { Fn, Float, length, cross } from '../../../node'
|
|
2
|
+
import { TriangleType } from './triangle'
|
|
3
|
+
|
|
4
|
+
export const area = Fn(([tri]: [TriangleType]): Float => {
|
|
5
|
+
return length(cross(tri.b.sub(tri.a), tri.c.sub(tri.a))).mul(0.5)
|
|
6
|
+
}).setLayout({
|
|
7
|
+
name: 'area',
|
|
8
|
+
type: 'float',
|
|
9
|
+
inputs: [{ name: 'tri', type: 'auto' }],
|
|
10
|
+
})
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { Fn, Vec3, length, cross, dot, vec3, float } from '../../../node'
|
|
2
|
+
import { area } from './area'
|
|
3
|
+
import { TriangleType } from './triangle'
|
|
4
|
+
|
|
5
|
+
export const barycentricFromVec3 = Fn(([a, b, c]: [Vec3, Vec3, Vec3]): Vec3 => {
|
|
6
|
+
const daa = dot(a, a).toVar('daa')
|
|
7
|
+
const dab = dot(a, b).toVar('dab')
|
|
8
|
+
const dbb = dot(b, b).toVar('dbb')
|
|
9
|
+
const dca = dot(c, a).toVar('dca')
|
|
10
|
+
const dcb = dot(c, b).toVar('dcb')
|
|
11
|
+
const denom = daa.mul(dbb).sub(dab.mul(dab)).toVar('denom')
|
|
12
|
+
const y = dbb.mul(dca).sub(dab.mul(dcb)).div(denom).toVar('y')
|
|
13
|
+
const z = daa.mul(dcb).sub(dab.mul(dca)).div(denom).toVar('z')
|
|
14
|
+
return vec3(float(1).sub(y).sub(z), y, z)
|
|
15
|
+
}).setLayout({
|
|
16
|
+
name: 'barycentricFromVec3',
|
|
17
|
+
type: 'vec3',
|
|
18
|
+
inputs: [
|
|
19
|
+
{ name: 'a', type: 'vec3' },
|
|
20
|
+
{ name: 'b', type: 'vec3' },
|
|
21
|
+
{ name: 'c', type: 'vec3' },
|
|
22
|
+
],
|
|
23
|
+
})
|
|
24
|
+
|
|
25
|
+
// barycentric(Triangle tri) - Triangle structから座標計算
|
|
26
|
+
export const barycentric = Fn(([tri]: [TriangleType]): Vec3 => {
|
|
27
|
+
return barycentricFromVec3(tri.a, tri.b, tri.c)
|
|
28
|
+
}).setLayout({
|
|
29
|
+
name: 'barycentric',
|
|
30
|
+
type: 'vec3',
|
|
31
|
+
inputs: [{ name: 'tri', type: 'auto' }],
|
|
32
|
+
})
|
|
33
|
+
|
|
34
|
+
export const barycentricFromPosition = Fn(([tri, pos]: [TriangleType, Vec3]): Vec3 => {
|
|
35
|
+
const a = tri.a
|
|
36
|
+
const b = tri.b
|
|
37
|
+
const c = tri.c
|
|
38
|
+
const f0 = a.sub(pos).toVar('f0')
|
|
39
|
+
const f1 = b.sub(pos).toVar('f1')
|
|
40
|
+
const f2 = c.sub(pos).toVar('f2')
|
|
41
|
+
const areaValue = area(tri).toVar('area')
|
|
42
|
+
return vec3(length(cross(f1, f2)), length(cross(f2, f0)), length(cross(f0, f1))).div(areaValue)
|
|
43
|
+
}).setLayout({
|
|
44
|
+
name: 'barycentricFromPosition',
|
|
45
|
+
type: 'vec3',
|
|
46
|
+
inputs: [
|
|
47
|
+
{ name: 'tri', type: 'auto' },
|
|
48
|
+
{ name: 'pos', type: 'vec3' },
|
|
49
|
+
],
|
|
50
|
+
})
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { Fn, Vec3 } from '../../../node'
|
|
2
|
+
import { TriangleType } from './triangle'
|
|
3
|
+
|
|
4
|
+
export const triangleCentroid = Fn(([tri]: [TriangleType]): Vec3 => {
|
|
5
|
+
return tri.a.add(tri.b).add(tri.c).div(3)
|
|
6
|
+
}).setLayout({
|
|
7
|
+
name: 'triangleCentroid',
|
|
8
|
+
type: 'vec3',
|
|
9
|
+
inputs: [{ name: 'tri', type: 'auto' }],
|
|
10
|
+
})
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import { Fn, Vec3, dot, length, cross, normalize, max, min, vec3, float, If, Return } from '../../../node'
|
|
2
|
+
import { barycentricFromVec3 } from './barycentric'
|
|
3
|
+
import { TriangleType } from './triangle'
|
|
4
|
+
|
|
5
|
+
export const closestPointWithNormal = Fn(([tri, triNormal, pos]: [TriangleType, Vec3, Vec3]): Vec3 => {
|
|
6
|
+
const a = tri.a
|
|
7
|
+
const b = tri.b
|
|
8
|
+
const c = tri.c
|
|
9
|
+
const ab = b.sub(a)
|
|
10
|
+
const ac = c.sub(a)
|
|
11
|
+
const p = pos.sub(dot(triNormal, pos.sub(a)).mul(triNormal))
|
|
12
|
+
const ap = p.sub(a)
|
|
13
|
+
const bcoords = barycentricFromVec3(ab, ac, ap)
|
|
14
|
+
|
|
15
|
+
If(bcoords.x.lessThan(0), () => {
|
|
16
|
+
const bc = c.sub(b).toVar('bc')
|
|
17
|
+
const n = length(bc).toVar('n')
|
|
18
|
+
const t = max(float(0), min(dot(bc, p.sub(b)).div(n), n)).toVar('t')
|
|
19
|
+
Return(b.add(t.div(n).mul(bc)))
|
|
20
|
+
})
|
|
21
|
+
|
|
22
|
+
If(bcoords.y.lessThan(0), () => {
|
|
23
|
+
const ca = a.sub(c).toVar('ca')
|
|
24
|
+
const n = length(ca).toVar('n')
|
|
25
|
+
const t = max(float(0), min(dot(ca, p.sub(c)).div(n), n)).toVar('t')
|
|
26
|
+
Return(c.add(t.div(n).mul(ca)))
|
|
27
|
+
})
|
|
28
|
+
|
|
29
|
+
If(bcoords.z.lessThan(0), () => {
|
|
30
|
+
const n = length(ab).toVar('n')
|
|
31
|
+
const t = max(float(0), min(dot(ab, p.sub(a)).div(n), n)).toVar('t')
|
|
32
|
+
Return(a.add(t.div(n).mul(ab)))
|
|
33
|
+
})
|
|
34
|
+
|
|
35
|
+
return a.mul(bcoords.x).add(b.mul(bcoords.y)).add(c.mul(bcoords.z))
|
|
36
|
+
}).setLayout({
|
|
37
|
+
name: 'closestPointWithNormal',
|
|
38
|
+
type: 'vec3',
|
|
39
|
+
inputs: [
|
|
40
|
+
{ name: 'tri', type: 'auto' },
|
|
41
|
+
{ name: 'triNormal', type: 'vec3' },
|
|
42
|
+
{ name: 'pos', type: 'vec3' },
|
|
43
|
+
],
|
|
44
|
+
})
|
|
45
|
+
|
|
46
|
+
export const closestPoint = Fn(([tri, pos]: [TriangleType, Vec3]): Vec3 => {
|
|
47
|
+
const a = tri.a
|
|
48
|
+
const b = tri.b
|
|
49
|
+
const c = tri.c
|
|
50
|
+
const ab = b.sub(a) // .toVar('ab') @TODO FIX
|
|
51
|
+
const ac = c.sub(a)
|
|
52
|
+
const normal = normalize(cross(ac, ab))
|
|
53
|
+
const p = pos.sub(dot(normal, pos.sub(a)).mul(normal))
|
|
54
|
+
const ap = p.sub(a)
|
|
55
|
+
const bcoords = barycentricFromVec3(ab, ac, ap)
|
|
56
|
+
|
|
57
|
+
If(bcoords.x.lessThan(0), () => {
|
|
58
|
+
const bc = c.sub(b).toVar('bc')
|
|
59
|
+
const n = length(bc).toVar('n')
|
|
60
|
+
const t = max(float(0), min(dot(bc, p.sub(b)).div(n), n)).toVar('t')
|
|
61
|
+
Return(b.add(t.div(n).mul(bc)))
|
|
62
|
+
})
|
|
63
|
+
|
|
64
|
+
If(bcoords.y.lessThan(0), () => {
|
|
65
|
+
const ca = a.sub(c).toVar('ca')
|
|
66
|
+
const n = length(ca).toVar('n')
|
|
67
|
+
const t = max(float(0), min(dot(ca, p.sub(c)).div(n), n)).toVar('t')
|
|
68
|
+
Return(c.add(t.div(n).mul(ca)))
|
|
69
|
+
})
|
|
70
|
+
|
|
71
|
+
If(bcoords.z.lessThan(0), () => {
|
|
72
|
+
const n = length(ab).toVar('n')
|
|
73
|
+
const t = max(float(0), min(dot(ab, p.sub(a)).div(n), n)).toVar('t')
|
|
74
|
+
Return(a.add(t.div(n).mul(ab)))
|
|
75
|
+
})
|
|
76
|
+
|
|
77
|
+
return a.mul(bcoords.x).add(b.mul(bcoords.y)).add(c.mul(bcoords.z))
|
|
78
|
+
}).setLayout({
|
|
79
|
+
name: 'closestPoint',
|
|
80
|
+
type: 'vec3',
|
|
81
|
+
inputs: [
|
|
82
|
+
{ name: 'tri', type: 'auto' },
|
|
83
|
+
{ name: 'pos', type: 'vec3' },
|
|
84
|
+
],
|
|
85
|
+
})
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { Fn, Bool, Vec3, cross, dot } from '../../../node'
|
|
2
|
+
import { TriangleType } from './triangle'
|
|
3
|
+
|
|
4
|
+
export const triangleContain = Fn(([tri, pos]: [TriangleType, Vec3]): Bool => {
|
|
5
|
+
const localA = tri.a.sub(pos).toVar('localA')
|
|
6
|
+
const localB = tri.b.sub(pos).toVar('localB')
|
|
7
|
+
const localC = tri.c.sub(pos).toVar('localC')
|
|
8
|
+
const u = cross(localB, localC).toVar('u')
|
|
9
|
+
const v = cross(localC, localA).toVar('v')
|
|
10
|
+
const w = cross(localA, localB).toVar('w')
|
|
11
|
+
return dot(u, v).greaterThanEqual(0).and(dot(u, w).greaterThanEqual(0))
|
|
12
|
+
}).setLayout({
|
|
13
|
+
name: 'triangleContain',
|
|
14
|
+
type: 'bool',
|
|
15
|
+
inputs: [
|
|
16
|
+
{ name: 'tri', type: 'auto' },
|
|
17
|
+
{ name: 'pos', type: 'vec3' },
|
|
18
|
+
],
|
|
19
|
+
})
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { Fn, Float, Vec3, cross, dot, sign, sqrt, min } from '../../../node'
|
|
2
|
+
import { lengthSq } from '../../math/lengthSq'
|
|
3
|
+
import { TriangleType } from './triangle'
|
|
4
|
+
|
|
5
|
+
export const distanceSq = Fn(([tri, pos]: [TriangleType, Vec3]): Float => {
|
|
6
|
+
const a = tri.a
|
|
7
|
+
const b = tri.b
|
|
8
|
+
const c = tri.c
|
|
9
|
+
const v21 = b.sub(a)
|
|
10
|
+
const p1 = pos.sub(a)
|
|
11
|
+
const v32 = c.sub(b)
|
|
12
|
+
const p2 = pos.sub(b)
|
|
13
|
+
const v13 = a.sub(c)
|
|
14
|
+
const p3 = pos.sub(c)
|
|
15
|
+
const nor = cross(v21, v13)
|
|
16
|
+
|
|
17
|
+
const s1 = sign(dot(cross(v21, nor), p1))
|
|
18
|
+
const s2 = sign(dot(cross(v32, nor), p2))
|
|
19
|
+
const s3 = sign(dot(cross(v13, nor), p3))
|
|
20
|
+
const signSum = s1.add(s2).add(s3)
|
|
21
|
+
|
|
22
|
+
const edge1 = lengthSq(v21.mul(dot(v21, p1).div(lengthSq(v21)).saturate()).sub(p1))
|
|
23
|
+
const edge2 = lengthSq(v32.mul(dot(v32, p2).div(lengthSq(v32)).saturate()).sub(p2))
|
|
24
|
+
const edge3 = lengthSq(v13.mul(dot(v13, p3).div(lengthSq(v13)).saturate()).sub(p3))
|
|
25
|
+
const edgeDistance = min(min(edge1, edge2), edge3)
|
|
26
|
+
|
|
27
|
+
const planeDistance = dot(nor, p1).mul(dot(nor, p1)).div(lengthSq(nor))
|
|
28
|
+
|
|
29
|
+
// @ts-ignore
|
|
30
|
+
return sqrt(edgeDistance.select(planeDistance, signSum.lessThan(2))) as Float
|
|
31
|
+
}).setLayout({
|
|
32
|
+
name: 'distanceSq',
|
|
33
|
+
type: 'float',
|
|
34
|
+
inputs: [
|
|
35
|
+
{ name: 'tri', type: 'auto' },
|
|
36
|
+
{ name: 'pos', type: 'vec3' },
|
|
37
|
+
],
|
|
38
|
+
})
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export * from './area'
|
|
2
|
+
export * from './barycentric'
|
|
3
|
+
export * from './centroid'
|
|
4
|
+
export * from './closestPoint'
|
|
5
|
+
export * from './contain'
|
|
6
|
+
export * from './distanceSq'
|
|
7
|
+
export * from './intersect'
|
|
8
|
+
export * from './normal'
|
|
9
|
+
export * from './signedDistance'
|
|
10
|
+
export * from './triangle'
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { Fn, Float, Vec3, cross, dot, float, struct, vec3 } from '../../../node'
|
|
2
|
+
import { TriangleType } from './triangle'
|
|
3
|
+
|
|
4
|
+
export const Ray = struct({
|
|
5
|
+
origin: vec3(),
|
|
6
|
+
direction: vec3(),
|
|
7
|
+
})
|
|
8
|
+
|
|
9
|
+
export type RayType = ReturnType<typeof Ray>
|
|
10
|
+
|
|
11
|
+
export const triangleIntersect = Fn(([tri, rayOrigin, rayDir]: [TriangleType, Vec3, Vec3]): Float => {
|
|
12
|
+
const v1v0 = tri.b.sub(tri.a)
|
|
13
|
+
const v2v0 = tri.c.sub(tri.a)
|
|
14
|
+
const rov0 = rayOrigin.sub(tri.a)
|
|
15
|
+
const point = cross(v1v0, v2v0)
|
|
16
|
+
const q = cross(rov0, rayDir)
|
|
17
|
+
const d = float(1).div(dot(rayDir, point))
|
|
18
|
+
const u = d.mul(dot(q, v2v0).negate())
|
|
19
|
+
const v = d.mul(dot(q, v1v0))
|
|
20
|
+
const t = d.mul(dot(point, rov0).negate())
|
|
21
|
+
|
|
22
|
+
const isOutside = u
|
|
23
|
+
.lessThan(0)
|
|
24
|
+
.or(u.greaterThan(1))
|
|
25
|
+
.or(v.lessThan(0))
|
|
26
|
+
.or(u.add(v).greaterThan(1))
|
|
27
|
+
.or(t.lessThan(0))
|
|
28
|
+
|
|
29
|
+
return float(9999999.9).select(t, isOutside)
|
|
30
|
+
}).setLayout({
|
|
31
|
+
name: 'triangleIntersect',
|
|
32
|
+
type: 'float',
|
|
33
|
+
inputs: [
|
|
34
|
+
{ name: 'tri', type: 'auto' },
|
|
35
|
+
{ name: 'rayOrigin', type: 'vec3' },
|
|
36
|
+
{ name: 'rayDir', type: 'vec3' },
|
|
37
|
+
],
|
|
38
|
+
})
|
|
39
|
+
|
|
40
|
+
export const triangleIntersectRay = Fn(([tri, ray]: [TriangleType, RayType]): Float => {
|
|
41
|
+
return triangleIntersect(tri, ray.origin, ray.direction)
|
|
42
|
+
}).setLayout({
|
|
43
|
+
name: 'triangleIntersectRay',
|
|
44
|
+
type: 'float',
|
|
45
|
+
inputs: [
|
|
46
|
+
{ name: 'tri', type: 'auto' },
|
|
47
|
+
{ name: 'ray', type: 'auto' },
|
|
48
|
+
],
|
|
49
|
+
})
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { Fn, Vec3, cross, normalize } from '../../../node'
|
|
2
|
+
import { TriangleType } from './triangle'
|
|
3
|
+
|
|
4
|
+
export const normal = Fn(([tri]: [TriangleType]): Vec3 => {
|
|
5
|
+
return normalize(cross(tri.b.sub(tri.a), tri.c.sub(tri.a)))
|
|
6
|
+
}).setLayout({
|
|
7
|
+
name: 'normal',
|
|
8
|
+
type: 'vec3',
|
|
9
|
+
inputs: [
|
|
10
|
+
{ name: 'tri', type: 'auto' },
|
|
11
|
+
],
|
|
12
|
+
})
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { Fn, Float, Vec3, length, sign, dot } from '../../../node'
|
|
2
|
+
import { normal } from './normal'
|
|
3
|
+
import { closestPointWithNormal } from './closestPoint'
|
|
4
|
+
import { TriangleType } from './triangle'
|
|
5
|
+
|
|
6
|
+
export const signedDistanceWithNormal = Fn(([tri, triNormal, pos]: [TriangleType, Vec3, Vec3]): Float => {
|
|
7
|
+
const nearest = closestPointWithNormal(tri, triNormal, pos).toVar('nearest')
|
|
8
|
+
const delta = pos.sub(nearest).toVar('delta')
|
|
9
|
+
const distance = length(delta).toVar('distance')
|
|
10
|
+
return distance.mul(sign(dot(delta.div(distance), triNormal)))
|
|
11
|
+
}).setLayout({
|
|
12
|
+
name: 'signedDistanceWithNormal',
|
|
13
|
+
type: 'float',
|
|
14
|
+
inputs: [
|
|
15
|
+
{ name: 'tri', type: 'auto' },
|
|
16
|
+
{ name: 'triNormal', type: 'vec3' },
|
|
17
|
+
{ name: 'pos', type: 'vec3' },
|
|
18
|
+
],
|
|
19
|
+
})
|
|
20
|
+
|
|
21
|
+
export const signedDistance = Fn(([tri, pos]: [TriangleType, Vec3]): Float => {
|
|
22
|
+
const triNormal = normal(tri).toVar('triNormal')
|
|
23
|
+
return signedDistanceWithNormal(tri, triNormal, pos)
|
|
24
|
+
}).setLayout({
|
|
25
|
+
name: 'signedDistance',
|
|
26
|
+
type: 'float',
|
|
27
|
+
inputs: [
|
|
28
|
+
{ name: 'tri', type: 'auto' },
|
|
29
|
+
{ name: 'pos', type: 'vec3' },
|
|
30
|
+
],
|
|
31
|
+
})
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { Fn, X, dFdx, dFdy, fract, float, select } from '../../node'
|
|
2
|
+
import { mapRange } from './map'
|
|
3
|
+
|
|
4
|
+
export const aafloor = Fn(([x]: [X]): X => {
|
|
5
|
+
const afwidth = dFdx(x).pow(2).add(dFdy(x).pow(2)).sqrt().mul(2).toVar()
|
|
6
|
+
const fx = fract(x).toVar()
|
|
7
|
+
const idx = afwidth.oneMinus().toVar()
|
|
8
|
+
return select(x.sub(fx), mapRange(fx, idx, float(1), x.sub(fx), x), fx.lessThan(idx))
|
|
9
|
+
}).setLayout({
|
|
10
|
+
name: 'aafloor',
|
|
11
|
+
type: 'auto',
|
|
12
|
+
inputs: [{ name: 'x', type: 'auto' }],
|
|
13
|
+
})
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { Fn, Float, Vec2, X, dFdx, dFdy, fract, length, mix, smoothstep, vec2, select, float } from '../../node'
|
|
2
|
+
|
|
3
|
+
const nyquist = Fn(([x, width]: [Float, Float]): Float => {
|
|
4
|
+
const cutoffStart = float(0.25).toVar('cutoffStart') // NYQUIST_FILTER_CENTER - NYQUIST_FILTER_WIDTH
|
|
5
|
+
const cutoffEnd = float(0.75).toVar('cutoffEnd') // NYQUIST_FILTER_CENTER + NYQUIST_FILTER_WIDTH
|
|
6
|
+
const f = smoothstep(cutoffEnd, cutoffStart, width).toVar('f')
|
|
7
|
+
return mix(float(0.5), x, f)
|
|
8
|
+
}).setLayout({
|
|
9
|
+
name: 'nyquist',
|
|
10
|
+
type: 'float',
|
|
11
|
+
inputs: [
|
|
12
|
+
{ name: 'x', type: 'float' },
|
|
13
|
+
{ name: 'width', type: 'float' },
|
|
14
|
+
],
|
|
15
|
+
})
|
|
16
|
+
|
|
17
|
+
export const aafract = Fn(([x]: [X]): X => {
|
|
18
|
+
const afwidth = length(vec2(dFdx(x), dFdy(x)))
|
|
19
|
+
.mul(2)
|
|
20
|
+
.toVar('afwidth')
|
|
21
|
+
const fx = fract(x).toVar('fx')
|
|
22
|
+
const idx = afwidth.oneMinus().toVar('idx')
|
|
23
|
+
const v = select(fx.div(idx as any), fx.oneMinus().div(afwidth as any), fx.lessThan(idx as any)).toVar('v')
|
|
24
|
+
return nyquist(v as any, afwidth as any)
|
|
25
|
+
}).setLayout({
|
|
26
|
+
name: 'aafract',
|
|
27
|
+
type: 'auto',
|
|
28
|
+
inputs: [{ name: 'x', type: 'auto' }],
|
|
29
|
+
})
|
|
30
|
+
|
|
31
|
+
// Vector overloads
|
|
32
|
+
export const aafractVec2 = Fn(([v]: [Vec2]): Vec2 => {
|
|
33
|
+
return vec2(aafract(v.x), aafract(v.y))
|
|
34
|
+
}).setLayout({
|
|
35
|
+
name: 'aafractVec2',
|
|
36
|
+
type: 'vec2',
|
|
37
|
+
inputs: [{ name: 'v', type: 'vec2' }],
|
|
38
|
+
})
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { Fn, Float, X, dFdx, dFdy, length, vec2, floor, abs } from '../../node'
|
|
2
|
+
import { nyquist } from './nyquist'
|
|
3
|
+
|
|
4
|
+
export const aamirror = Fn(([x]: [X]): X => {
|
|
5
|
+
const afwidth = length(vec2(dFdx(x), dFdy(x)))
|
|
6
|
+
const v = abs(x.sub(floor(x.add(0.5)))).mul(2)
|
|
7
|
+
return nyquist(v, afwidth)
|
|
8
|
+
}).setLayout({
|
|
9
|
+
name: 'aamirror',
|
|
10
|
+
type: 'auto',
|
|
11
|
+
inputs: [{ name: 'x', type: 'auto' }],
|
|
12
|
+
})
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { Fn, Float, length, vec2, dFdx, dFdy, smoothstep } from '../../node'
|
|
2
|
+
|
|
3
|
+
export const aastep = Fn(([threshold, value]: [Float, Float]): Float => {
|
|
4
|
+
const derivative = vec2(dFdx(value), dFdy(value))
|
|
5
|
+
const afwidth = length(derivative).mul(0.7)
|
|
6
|
+
return smoothstep(threshold.sub(afwidth), threshold.add(afwidth), value)
|
|
7
|
+
}).setLayout({
|
|
8
|
+
name: 'aastep',
|
|
9
|
+
type: 'float',
|
|
10
|
+
inputs: [
|
|
11
|
+
{ name: 'threshold', type: 'float' },
|
|
12
|
+
{ name: 'value', type: 'float' },
|
|
13
|
+
],
|
|
14
|
+
})
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { Fn, Float, step } from '../../node'
|
|
2
|
+
|
|
3
|
+
export const adaptiveThreshold = Fn(([v, blur_v, b]: [Float, Float, Float]): Float => {
|
|
4
|
+
return step(blur_v.add(b), v)
|
|
5
|
+
}).setLayout({
|
|
6
|
+
name: 'adaptiveThreshold',
|
|
7
|
+
type: 'float',
|
|
8
|
+
inputs: [
|
|
9
|
+
{ name: 'v', type: 'float' },
|
|
10
|
+
{ name: 'blur_v', type: 'float' },
|
|
11
|
+
{ name: 'b', type: 'float' },
|
|
12
|
+
],
|
|
13
|
+
})
|
|
14
|
+
|
|
15
|
+
export const adaptiveThresholdSimple = Fn(([v, blur_v]: [Float, Float]): Float => {
|
|
16
|
+
return step(blur_v.sub(0.05), v)
|
|
17
|
+
}).setLayout({
|
|
18
|
+
name: 'adaptiveThresholdSimple',
|
|
19
|
+
type: 'float',
|
|
20
|
+
inputs: [
|
|
21
|
+
{ name: 'v', type: 'float' },
|
|
22
|
+
{ name: 'blur_v', type: 'float' },
|
|
23
|
+
],
|
|
24
|
+
})
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { Fn, X } from '../../node'
|
|
2
|
+
|
|
3
|
+
export const bump = Fn(([x, k]: [X, X]): X => {
|
|
4
|
+
return x.mul(x).sub(1).negate().sub(k).saturate()
|
|
5
|
+
}).setLayout({
|
|
6
|
+
name: 'bump',
|
|
7
|
+
type: 'auto',
|
|
8
|
+
inputs: [
|
|
9
|
+
{ name: 'x', type: 'auto' },
|
|
10
|
+
{ name: 'k', type: 'auto' },
|
|
11
|
+
],
|
|
12
|
+
})
|
|
13
|
+
|
|
14
|
+
export const bumpSimple = Fn(([x]: [X]): X => {
|
|
15
|
+
return x.mul(x).sub(1).negate().max(0)
|
|
16
|
+
}).setLayout({
|
|
17
|
+
name: 'bumpSimple',
|
|
18
|
+
type: 'auto',
|
|
19
|
+
inputs: [{ name: 'x', type: 'auto' }],
|
|
20
|
+
})
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { float } from "../../node"
|
|
2
|
+
|
|
3
|
+
// Mathematical constants as float nodes
|
|
4
|
+
export const EIGHTH_PI = float(0.39269908169)
|
|
5
|
+
export const QTR_PI = float(0.78539816339)
|
|
6
|
+
export const HALF_PI = float(1.5707963267948966192313216916398)
|
|
7
|
+
export const PI = float(3.1415926535897932384626433832795)
|
|
8
|
+
export const TWO_PI = float(6.2831853071795864769252867665590)
|
|
9
|
+
export const TAU = float(6.2831853071795864769252867665590)
|
|
10
|
+
export const INV_PI = float(0.31830988618379067153776752674503)
|
|
11
|
+
export const INV_SQRT_TAU = float(0.39894228040143267793994605993439)
|
|
12
|
+
export const SQRT_HALF_PI = float(1.25331413732)
|
|
13
|
+
export const PHI = float(1.618033988749894848204586834)
|
|
14
|
+
export const EPSILON = float(0.00001)
|
|
15
|
+
export const GOLDEN_RATIO = float(1.6180339887)
|
|
16
|
+
export const GOLDEN_RATIO_CONJUGATE = float(0.61803398875)
|
|
17
|
+
export const GOLDEN_ANGLE = float(2.39996323)
|
|
18
|
+
export const DEG2RAD = PI.div(180)
|
|
19
|
+
export const RAD2DEG = float(180).div(PI)
|