sparcoon 0.7.2 → 0.9.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 +124 -76
- package/dist/artifact/FXArtifact.d.ts +120 -0
- package/dist/artifact/FXArtifact.js +1 -0
- package/dist/coreLayout.d.ts +22 -0
- package/dist/coreLayout.js +32 -0
- package/dist/effect/FXEffect.d.ts +77 -0
- package/dist/effect/FXEffect.js +454 -0
- package/dist/effect/FXEffectSampling.Internal.d.ts +24 -0
- package/dist/effect/FXEffectSampling.Internal.js +165 -0
- package/dist/effect/FXEffectSpec.d.ts +115 -0
- package/dist/effect/FXEffectSpec.js +1 -0
- package/dist/emitter/FXEmitter.Internal.d.ts +23 -58
- package/dist/emitter/FXEmitter.Internal.js +13 -29
- package/dist/emitter/FXEmitter.d.ts +46 -48
- package/dist/emitter/FXEmitter.js +355 -186
- package/dist/emitter/FXFromArtifactsOptions.d.ts +13 -0
- package/dist/emitter/FXFromArtifactsOptions.js +1 -0
- package/dist/emitter/FXObjectMotion.Internal.d.ts +33 -0
- package/dist/emitter/FXObjectMotion.Internal.js +87 -0
- package/dist/emitter/FXSimulationHolder.d.ts +1 -0
- package/dist/emitter/FXSimulationHolder.js +43 -0
- package/dist/index.d.ts +10 -39
- package/dist/index.js +13 -36
- package/dist/instancedParticle/FXInstancedParticle.d.ts +1 -22
- package/dist/instancedParticle/FXInstancedParticle.js +145 -85
- package/dist/instancedParticle/glTypeInfo.d.ts +5 -0
- package/dist/instancedParticle/glTypeInfo.js +3 -0
- package/dist/instancedParticle/primitiveGeometry.d.ts +1 -0
- package/dist/instancedParticle/primitiveGeometry.js +30 -0
- package/dist/miscellaneous/asserts.d.ts +1 -18
- package/dist/miscellaneous/asserts.js +21 -28
- package/dist/miscellaneous/fxMath.d.ts +26 -0
- package/dist/miscellaneous/fxMath.js +261 -0
- package/dist/miscellaneous/math.d.ts +2 -7
- package/dist/miscellaneous/math.js +8 -9
- package/dist/miscellaneous/texture/fxDataTexture.d.ts +26 -0
- package/dist/miscellaneous/texture/fxDataTexture.js +20 -0
- package/dist/render/FXArtifactMaterial.Internal.d.ts +16 -0
- package/dist/render/FXArtifactMaterial.Internal.js +944 -0
- package/dist/render/FXArtifactMaterial.d.ts +1 -0
- package/dist/render/FXArtifactMaterial.js +79 -0
- package/dist/render/FXMaterialOptions.d.ts +27 -0
- package/dist/render/FXMaterialOptions.js +5 -0
- package/dist/render/FXMeshMaterial.d.ts +40 -0
- package/dist/render/FXMeshMaterial.js +77 -0
- package/dist/world/FXWorld.d.ts +42 -0
- package/dist/world/FXWorld.js +103 -0
- package/package.json +45 -29
- package/dist/_virtual/2d.js +0 -3
- package/dist/_virtual/3d.js +0 -3
- package/dist/_virtual/4d.js +0 -3
- package/dist/_virtual/mod.js +0 -5
- package/dist/_virtual/mod2.js +0 -3
- package/dist/emitter/behavior/FXBehavior.d.ts +0 -24
- package/dist/emitter/behavior/FXBehavior.js +0 -10
- package/dist/emitter/behavior/FXBehaviorDirectionalForce.d.ts +0 -23
- package/dist/emitter/behavior/FXBehaviorDirectionalForce.js +0 -72
- package/dist/emitter/behavior/FXBehaviorPointForce.d.ts +0 -36
- package/dist/emitter/behavior/FXBehaviorPointForce.js +0 -94
- package/dist/emitter/behavior/FXBehaviorScaleOverLife.d.ts +0 -24
- package/dist/emitter/behavior/FXBehaviorScaleOverLife.js +0 -55
- package/dist/emitter/behavior/FXBehaviorTorqueDamping.d.ts +0 -20
- package/dist/emitter/behavior/FXBehaviorTorqueDamping.js +0 -48
- package/dist/emitter/behavior/FXBehaviorTorqueNoise.d.ts +0 -25
- package/dist/emitter/behavior/FXBehaviorTorqueNoise.js +0 -67
- package/dist/emitter/behavior/FXBehaviorTorqueOverLife.d.ts +0 -19
- package/dist/emitter/behavior/FXBehaviorTorqueOverLife.js +0 -41
- package/dist/emitter/behavior/FXBehaviorVelocityDamping.d.ts +0 -20
- package/dist/emitter/behavior/FXBehaviorVelocityDamping.js +0 -50
- package/dist/emitter/behavior/FXBehaviorVelocityNoise.d.ts +0 -25
- package/dist/emitter/behavior/FXBehaviorVelocityNoise.js +0 -76
- package/dist/emitter/behavior/FXBehaviorVelocityOverLife.d.ts +0 -22
- package/dist/emitter/behavior/FXBehaviorVelocityOverLife.js +0 -55
- package/dist/emitter/spawn/FXSpawn.d.ts +0 -11
- package/dist/emitter/spawn/FXSpawn.js +0 -10
- package/dist/emitter/spawn/FXSpawnBox.d.ts +0 -18
- package/dist/emitter/spawn/FXSpawnBox.js +0 -50
- package/dist/emitter/spawn/FXSpawnLifetime.d.ts +0 -17
- package/dist/emitter/spawn/FXSpawnLifetime.js +0 -44
- package/dist/emitter/spawn/FXSpawnOffset.d.ts +0 -21
- package/dist/emitter/spawn/FXSpawnOffset.js +0 -49
- package/dist/emitter/spawn/FXSpawnPoint.d.ts +0 -18
- package/dist/emitter/spawn/FXSpawnPoint.js +0 -46
- package/dist/emitter/spawn/FXSpawnRotation.d.ts +0 -17
- package/dist/emitter/spawn/FXSpawnRotation.js +0 -42
- package/dist/emitter/spawn/FXSpawnScale.d.ts +0 -22
- package/dist/emitter/spawn/FXSpawnScale.js +0 -56
- package/dist/emitter/spawn/FXSpawnSphere.d.ts +0 -36
- package/dist/emitter/spawn/FXSpawnSphere.js +0 -87
- package/dist/emitter/spawn/FXSpawnTorque.d.ts +0 -17
- package/dist/emitter/spawn/FXSpawnTorque.js +0 -42
- package/dist/emitter/spawn/FXSpawnVelocity.d.ts +0 -29
- package/dist/emitter/spawn/FXSpawnVelocity.js +0 -91
- package/dist/instancedParticle/FXInstancedParticle.Internal.d.ts +0 -2
- package/dist/instancedParticle/shared.d.ts +0 -19
- package/dist/instancedParticle/shared.js +0 -116
- package/dist/materials/FXDiffuseMaterial/FXDiffuseMaterial.Internal.d.ts +0 -24
- package/dist/materials/FXDiffuseMaterial/FXDiffuseMaterial.Internal.js +0 -275
- package/dist/materials/FXDiffuseMaterial/FXDiffuseMaterial.d.ts +0 -75
- package/dist/materials/FXDiffuseMaterial/FXDiffuseMaterial.js +0 -63
- package/dist/materials/FXMaterial/FXBlending.Internal.d.ts +0 -24
- package/dist/materials/FXMaterial/FXBlending.Internal.js +0 -64
- package/dist/materials/FXMaterial/FXDepthMaterial.Internal.d.ts +0 -4
- package/dist/materials/FXMaterial/FXDepthMaterial.Internal.js +0 -144
- package/dist/materials/FXMaterial/FXDistanceMaterial.Internal.d.ts +0 -4
- package/dist/materials/FXMaterial/FXDistanceMaterial.Internal.js +0 -175
- package/dist/materials/FXMaterial/FXMaterial.d.ts +0 -70
- package/dist/materials/FXMaterial/FXMaterial.js +0 -51
- package/dist/materials/FXUnlitMaterial/FXUnlitMaterial.Internal.d.ts +0 -7
- package/dist/materials/FXUnlitMaterial/FXUnlitMaterial.Internal.js +0 -103
- package/dist/materials/FXUnlitMaterial/FXUnlitMaterial.d.ts +0 -7
- package/dist/materials/FXUnlitMaterial/FXUnlitMaterial.js +0 -21
- package/dist/miscellaneous/color/FXColor.Internal.d.ts +0 -7
- package/dist/miscellaneous/color/FXColor.Internal.js +0 -42
- package/dist/miscellaneous/color/FXColor.d.ts +0 -234
- package/dist/miscellaneous/color/FXColor.js +0 -636
- package/dist/miscellaneous/curve/FXCurve1D.Internal.d.ts +0 -20
- package/dist/miscellaneous/curve/FXCurve1D.d.ts +0 -17
- package/dist/miscellaneous/curve/FXCurve1D.js +0 -94
- package/dist/miscellaneous/miscellaneous.d.ts +0 -34
- package/dist/miscellaneous/miscellaneous.js +0 -85
- package/dist/miscellaneous/texture/FXTextureView.Internal.d.ts +0 -49
- package/dist/miscellaneous/texture/FXTextureView.Internal.js +0 -6
- package/dist/miscellaneous/texture/FXTextureView.d.ts +0 -72
- package/dist/miscellaneous/texture/FXTextureView.js +0 -234
- package/dist/miscellaneous/webglCapabilities.d.ts +0 -1
- package/dist/miscellaneous/webglCapabilities.js +0 -45
- package/dist/node_modules/fast-simplex-noise/lib/2d.js +0 -93
- package/dist/node_modules/fast-simplex-noise/lib/3d.js +0 -142
- package/dist/node_modules/fast-simplex-noise/lib/4d.js +0 -196
- package/dist/node_modules/fast-simplex-noise/lib/mod.js +0 -24
- package/dist/nodes/FXNode.d.ts +0 -5
- package/dist/nodes/FXNode.js +0 -10
- package/dist/nodes/blending/FXNodeBlending.d.ts +0 -6
- package/dist/nodes/blending/FXNodeBlending.js +0 -9
- package/dist/nodes/blending/FXNodeLightnessBlendingMask.d.ts +0 -19
- package/dist/nodes/blending/FXNodeLightnessBlendingMask.js +0 -65
- package/dist/nodes/color/FXNodeColor.d.ts +0 -6
- package/dist/nodes/color/FXNodeColor.js +0 -9
- package/dist/nodes/color/FXNodeColorOverLife.d.ts +0 -22
- package/dist/nodes/color/FXNodeColorOverLife.js +0 -64
- package/dist/nodes/color/FXNodeSphericalClip.d.ts +0 -21
- package/dist/nodes/color/FXNodeSphericalClip.js +0 -54
- package/dist/nodes/normal/FXNodeFlatNormal.d.ts +0 -6
- package/dist/nodes/normal/FXNodeFlatNormal.js +0 -17
- package/dist/nodes/normal/FXNodeNormal.d.ts +0 -6
- package/dist/nodes/normal/FXNodeNormal.js +0 -9
- package/dist/nodes/normal/FXNodeSphericalNormal.d.ts +0 -6
- package/dist/nodes/normal/FXNodeSphericalNormal.js +0 -24
- package/dist/nodes/texture/FXNodeAnimatedTexture.d.ts +0 -52
- package/dist/nodes/texture/FXNodeAnimatedTexture.js +0 -151
- package/dist/nodes/texture/FXNodeStaticTexture.d.ts +0 -20
- package/dist/nodes/texture/FXNodeStaticTexture.js +0 -67
- package/dist/nodes/texture/FXNodeTexture.d.ts +0 -6
- package/dist/nodes/texture/FXNodeTexture.js +0 -9
|
@@ -1,93 +0,0 @@
|
|
|
1
|
-
import { __exports as _2d } from '../../../_virtual/2d.js';
|
|
2
|
-
|
|
3
|
-
var hasRequired_2d;
|
|
4
|
-
|
|
5
|
-
function require_2d () {
|
|
6
|
-
if (hasRequired_2d) return _2d;
|
|
7
|
-
hasRequired_2d = 1;
|
|
8
|
-
/*
|
|
9
|
-
* Based on example code by Stefan Gustavson (stegu@itn.liu.se).
|
|
10
|
-
* Optimisations by Peter Eastman (peastman@drizzle.stanford.edu).
|
|
11
|
-
* Better rank ordering method by Stefan Gustavson in 2012.
|
|
12
|
-
*
|
|
13
|
-
* This code was placed in the public domain by its original author,
|
|
14
|
-
* Stefan Gustavson. You may use it as you see fit, but
|
|
15
|
-
* attribution is appreciated.
|
|
16
|
-
*/
|
|
17
|
-
Object.defineProperty(_2d, "__esModule", { value: true });
|
|
18
|
-
_2d.makeNoise2D = void 0;
|
|
19
|
-
var G2 = (3.0 - Math.sqrt(3.0)) / 6.0;
|
|
20
|
-
var Grad = [
|
|
21
|
-
[1, 1],
|
|
22
|
-
[-1, 1],
|
|
23
|
-
[1, -1],
|
|
24
|
-
[-1, -1],
|
|
25
|
-
[1, 0],
|
|
26
|
-
[-1, 0],
|
|
27
|
-
[1, 0],
|
|
28
|
-
[-1, 0],
|
|
29
|
-
[0, 1],
|
|
30
|
-
[0, -1],
|
|
31
|
-
[0, 1],
|
|
32
|
-
[0, -1],
|
|
33
|
-
];
|
|
34
|
-
function makeNoise2D(random) {
|
|
35
|
-
if (random === void 0) { random = Math.random; }
|
|
36
|
-
var p = new Uint8Array(256);
|
|
37
|
-
for (var i = 0; i < 256; i++)
|
|
38
|
-
p[i] = i;
|
|
39
|
-
var n;
|
|
40
|
-
var q;
|
|
41
|
-
for (var i = 255; i > 0; i--) {
|
|
42
|
-
n = Math.floor((i + 1) * random());
|
|
43
|
-
q = p[i];
|
|
44
|
-
p[i] = p[n];
|
|
45
|
-
p[n] = q;
|
|
46
|
-
}
|
|
47
|
-
var perm = new Uint8Array(512);
|
|
48
|
-
var permMod12 = new Uint8Array(512);
|
|
49
|
-
for (var i = 0; i < 512; i++) {
|
|
50
|
-
perm[i] = p[i & 255];
|
|
51
|
-
permMod12[i] = perm[i] % 12;
|
|
52
|
-
}
|
|
53
|
-
return function (x, y) {
|
|
54
|
-
// Skew the input space to determine which simplex cell we're in
|
|
55
|
-
var s = (x + y) * 0.5 * (Math.sqrt(3.0) - 1.0); // Hairy factor for 2D
|
|
56
|
-
var i = Math.floor(x + s);
|
|
57
|
-
var j = Math.floor(y + s);
|
|
58
|
-
var t = (i + j) * G2;
|
|
59
|
-
var X0 = i - t; // Unskew the cell origin back to (x,y) space
|
|
60
|
-
var Y0 = j - t;
|
|
61
|
-
var x0 = x - X0; // The x,y distances from the cell origin
|
|
62
|
-
var y0 = y - Y0;
|
|
63
|
-
// Determine which simplex we are in.
|
|
64
|
-
var i1 = x0 > y0 ? 1 : 0;
|
|
65
|
-
var j1 = x0 > y0 ? 0 : 1;
|
|
66
|
-
// Offsets for corners
|
|
67
|
-
var x1 = x0 - i1 + G2;
|
|
68
|
-
var y1 = y0 - j1 + G2;
|
|
69
|
-
var x2 = x0 - 1.0 + 2.0 * G2;
|
|
70
|
-
var y2 = y0 - 1.0 + 2.0 * G2;
|
|
71
|
-
// Work out the hashed gradient indices of the three simplex corners
|
|
72
|
-
var ii = i & 255;
|
|
73
|
-
var jj = j & 255;
|
|
74
|
-
var g0 = Grad[permMod12[ii + perm[jj]]];
|
|
75
|
-
var g1 = Grad[permMod12[ii + i1 + perm[jj + j1]]];
|
|
76
|
-
var g2 = Grad[permMod12[ii + 1 + perm[jj + 1]]];
|
|
77
|
-
// Calculate the contribution from the three corners
|
|
78
|
-
var t0 = 0.5 - x0 * x0 - y0 * y0;
|
|
79
|
-
var n0 = t0 < 0 ? 0.0 : Math.pow(t0, 4) * (g0[0] * x0 + g0[1] * y0);
|
|
80
|
-
var t1 = 0.5 - x1 * x1 - y1 * y1;
|
|
81
|
-
var n1 = t1 < 0 ? 0.0 : Math.pow(t1, 4) * (g1[0] * x1 + g1[1] * y1);
|
|
82
|
-
var t2 = 0.5 - x2 * x2 - y2 * y2;
|
|
83
|
-
var n2 = t2 < 0 ? 0.0 : Math.pow(t2, 4) * (g2[0] * x2 + g2[1] * y2);
|
|
84
|
-
// Add contributions from each corner to get the final noise value.
|
|
85
|
-
// The result is scaled to return values in the interval [-1, 1]
|
|
86
|
-
return 70.14805770653952 * (n0 + n1 + n2);
|
|
87
|
-
};
|
|
88
|
-
}
|
|
89
|
-
_2d.makeNoise2D = makeNoise2D;
|
|
90
|
-
return _2d;
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
export { require_2d as __require };
|
|
@@ -1,142 +0,0 @@
|
|
|
1
|
-
import { __exports as _3d } from '../../../_virtual/3d.js';
|
|
2
|
-
|
|
3
|
-
var hasRequired_3d;
|
|
4
|
-
|
|
5
|
-
function require_3d () {
|
|
6
|
-
if (hasRequired_3d) return _3d;
|
|
7
|
-
hasRequired_3d = 1;
|
|
8
|
-
/*
|
|
9
|
-
* Based on example code by Stefan Gustavson (stegu@itn.liu.se).
|
|
10
|
-
* Optimisations by Peter Eastman (peastman@drizzle.stanford.edu).
|
|
11
|
-
* Better rank ordering method by Stefan Gustavson in 2012.
|
|
12
|
-
*
|
|
13
|
-
* This code was placed in the public domain by its original author,
|
|
14
|
-
* Stefan Gustavson. You may use it as you see fit, but
|
|
15
|
-
* attribution is appreciated.
|
|
16
|
-
*/
|
|
17
|
-
Object.defineProperty(_3d, "__esModule", { value: true });
|
|
18
|
-
_3d.makeNoise3D = void 0;
|
|
19
|
-
var G3 = 1.0 / 6.0;
|
|
20
|
-
var Grad = [
|
|
21
|
-
[1, 1, 0],
|
|
22
|
-
[-1, 1, 0],
|
|
23
|
-
[1, -1, 0],
|
|
24
|
-
[-1, -1, 0],
|
|
25
|
-
[1, 0, 1],
|
|
26
|
-
[-1, 0, 1],
|
|
27
|
-
[1, 0, -1],
|
|
28
|
-
[-1, 0, -1],
|
|
29
|
-
[0, 1, 1],
|
|
30
|
-
[0, -1, -1],
|
|
31
|
-
[0, 1, -1],
|
|
32
|
-
[0, -1, -1],
|
|
33
|
-
];
|
|
34
|
-
function makeNoise3D(random) {
|
|
35
|
-
if (random === void 0) { random = Math.random; }
|
|
36
|
-
var p = new Uint8Array(256);
|
|
37
|
-
for (var i = 0; i < 256; i++)
|
|
38
|
-
p[i] = i;
|
|
39
|
-
var n;
|
|
40
|
-
var q;
|
|
41
|
-
for (var i = 255; i > 0; i--) {
|
|
42
|
-
n = Math.floor((i + 1) * random());
|
|
43
|
-
q = p[i];
|
|
44
|
-
p[i] = p[n];
|
|
45
|
-
p[n] = q;
|
|
46
|
-
}
|
|
47
|
-
var perm = new Uint8Array(512);
|
|
48
|
-
var permMod12 = new Uint8Array(512);
|
|
49
|
-
for (var i = 0; i < 512; i++) {
|
|
50
|
-
perm[i] = p[i & 255];
|
|
51
|
-
permMod12[i] = perm[i] % 12;
|
|
52
|
-
}
|
|
53
|
-
return function (x, y, z) {
|
|
54
|
-
// Skew the input space to determine which simplex cell we're in
|
|
55
|
-
var s = (x + y + z) / 3.0; // Very nice and simple skew factor for 3D
|
|
56
|
-
var i = Math.floor(x + s);
|
|
57
|
-
var j = Math.floor(y + s);
|
|
58
|
-
var k = Math.floor(z + s);
|
|
59
|
-
var t = (i + j + k) * G3;
|
|
60
|
-
var X0 = i - t; // Unskew the cell origin back to (x,y,z) space
|
|
61
|
-
var Y0 = j - t;
|
|
62
|
-
var Z0 = k - t;
|
|
63
|
-
var x0 = x - X0; // The x,y,z distances from the cell origin
|
|
64
|
-
var y0 = y - Y0;
|
|
65
|
-
var z0 = z - Z0;
|
|
66
|
-
// Deterine which simplex we are in
|
|
67
|
-
var i1, j1, k1 // Offsets for second corner of simplex in (i,j,k) coords
|
|
68
|
-
;
|
|
69
|
-
var i2, j2, k2 // Offsets for third corner of simplex in (i,j,k) coords
|
|
70
|
-
;
|
|
71
|
-
if (x0 >= y0) {
|
|
72
|
-
if (y0 >= z0) {
|
|
73
|
-
i1 = i2 = j2 = 1;
|
|
74
|
-
j1 = k1 = k2 = 0;
|
|
75
|
-
}
|
|
76
|
-
else if (x0 >= z0) {
|
|
77
|
-
i1 = i2 = k2 = 1;
|
|
78
|
-
j1 = k1 = j2 = 0;
|
|
79
|
-
}
|
|
80
|
-
else {
|
|
81
|
-
k1 = i2 = k2 = 1;
|
|
82
|
-
i1 = j1 = j2 = 0;
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
else {
|
|
86
|
-
if (y0 < z0) {
|
|
87
|
-
k1 = j2 = k2 = 1;
|
|
88
|
-
i1 = j1 = i2 = 0;
|
|
89
|
-
}
|
|
90
|
-
else if (x0 < z0) {
|
|
91
|
-
j1 = j2 = k2 = 1;
|
|
92
|
-
i1 = k1 = i2 = 0;
|
|
93
|
-
}
|
|
94
|
-
else {
|
|
95
|
-
j1 = i2 = j2 = 1;
|
|
96
|
-
i1 = k1 = k2 = 0;
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
var x1 = x0 - i1 + G3; // Offsets for second corner in (x,y,z) coords
|
|
100
|
-
var y1 = y0 - j1 + G3;
|
|
101
|
-
var z1 = z0 - k1 + G3;
|
|
102
|
-
var x2 = x0 - i2 + 2.0 * G3; // Offsets for third corner in (x,y,z) coords
|
|
103
|
-
var y2 = y0 - j2 + 2.0 * G3;
|
|
104
|
-
var z2 = z0 - k2 + 2.0 * G3;
|
|
105
|
-
var x3 = x0 - 1.0 + 3.0 * G3; // Offsets for last corner in (x,y,z) coords
|
|
106
|
-
var y3 = y0 - 1.0 + 3.0 * G3;
|
|
107
|
-
var z3 = z0 - 1.0 + 3.0 * G3;
|
|
108
|
-
// Work out the hashed gradient indices of the four simplex corners
|
|
109
|
-
var ii = i & 255;
|
|
110
|
-
var jj = j & 255;
|
|
111
|
-
var kk = k & 255;
|
|
112
|
-
var g0 = Grad[permMod12[ii + perm[jj + perm[kk]]]];
|
|
113
|
-
var g1 = Grad[permMod12[ii + i1 + perm[jj + j1 + perm[kk + k1]]]];
|
|
114
|
-
var g2 = Grad[permMod12[ii + i2 + perm[jj + j2 + perm[kk + k2]]]];
|
|
115
|
-
var g3 = Grad[permMod12[ii + 1 + perm[jj + 1 + perm[kk + 1]]]];
|
|
116
|
-
// Calculate the contribution from the four corners
|
|
117
|
-
var t0 = 0.5 - x0 * x0 - y0 * y0 - z0 * z0;
|
|
118
|
-
var n0 = t0 < 0
|
|
119
|
-
? 0.0
|
|
120
|
-
: Math.pow(t0, 4) * (g0[0] * x0 + g0[1] * y0 + g0[2] * z0);
|
|
121
|
-
var t1 = 0.5 - x1 * x1 - y1 * y1 - z1 * z1;
|
|
122
|
-
var n1 = t1 < 0
|
|
123
|
-
? 0.0
|
|
124
|
-
: Math.pow(t1, 4) * (g1[0] * x1 + g1[1] * y1 + g1[2] * z1);
|
|
125
|
-
var t2 = 0.5 - x2 * x2 - y2 * y2 - z2 * z2;
|
|
126
|
-
var n2 = t2 < 0
|
|
127
|
-
? 0.0
|
|
128
|
-
: Math.pow(t2, 4) * (g2[0] * x2 + g2[1] * y2 + g2[2] * z2);
|
|
129
|
-
var t3 = 0.5 - x3 * x3 - y3 * y3 - z3 * z3;
|
|
130
|
-
var n3 = t3 < 0
|
|
131
|
-
? 0.0
|
|
132
|
-
: Math.pow(t3, 4) * (g3[0] * x3 + g3[1] * y3 + g3[2] * z3);
|
|
133
|
-
// Add contributions from each corner to get the final noise value.
|
|
134
|
-
// The result is scaled to stay just inside [-1,1]
|
|
135
|
-
return 94.68493150681972 * (n0 + n1 + n2 + n3);
|
|
136
|
-
};
|
|
137
|
-
}
|
|
138
|
-
_3d.makeNoise3D = makeNoise3D;
|
|
139
|
-
return _3d;
|
|
140
|
-
}
|
|
141
|
-
|
|
142
|
-
export { require_3d as __require };
|
|
@@ -1,196 +0,0 @@
|
|
|
1
|
-
import { __exports as _4d } from '../../../_virtual/4d.js';
|
|
2
|
-
|
|
3
|
-
var hasRequired_4d;
|
|
4
|
-
|
|
5
|
-
function require_4d () {
|
|
6
|
-
if (hasRequired_4d) return _4d;
|
|
7
|
-
hasRequired_4d = 1;
|
|
8
|
-
/*
|
|
9
|
-
* Based on example code by Stefan Gustavson (stegu@itn.liu.se).
|
|
10
|
-
* Optimisations by Peter Eastman (peastman@drizzle.stanford.edu).
|
|
11
|
-
* Better rank ordering method by Stefan Gustavson in 2012.
|
|
12
|
-
*
|
|
13
|
-
* This code was placed in the public domain by its original author,
|
|
14
|
-
* Stefan Gustavson. You may use it as you see fit, but
|
|
15
|
-
* attribution is appreciated.
|
|
16
|
-
*/
|
|
17
|
-
Object.defineProperty(_4d, "__esModule", { value: true });
|
|
18
|
-
_4d.makeNoise4D = void 0;
|
|
19
|
-
var G4 = (5.0 - Math.sqrt(5.0)) / 20.0;
|
|
20
|
-
var Grad = [
|
|
21
|
-
[0, 1, 1, 1],
|
|
22
|
-
[0, 1, 1, -1],
|
|
23
|
-
[0, 1, -1, 1],
|
|
24
|
-
[0, 1, -1, -1],
|
|
25
|
-
[0, -1, 1, 1],
|
|
26
|
-
[0, -1, 1, -1],
|
|
27
|
-
[0, -1, -1, 1],
|
|
28
|
-
[0, -1, -1, -1],
|
|
29
|
-
[1, 0, 1, 1],
|
|
30
|
-
[1, 0, 1, -1],
|
|
31
|
-
[1, 0, -1, 1],
|
|
32
|
-
[1, 0, -1, -1],
|
|
33
|
-
[-1, 0, 1, 1],
|
|
34
|
-
[-1, 0, 1, -1],
|
|
35
|
-
[-1, 0, -1, 1],
|
|
36
|
-
[-1, 0, -1, -1],
|
|
37
|
-
[1, 1, 0, 1],
|
|
38
|
-
[1, 1, 0, -1],
|
|
39
|
-
[1, -1, 0, 1],
|
|
40
|
-
[1, -1, 0, -1],
|
|
41
|
-
[-1, 1, 0, 1],
|
|
42
|
-
[-1, 1, 0, -1],
|
|
43
|
-
[-1, -1, 0, 1],
|
|
44
|
-
[-1, -1, 0, -1],
|
|
45
|
-
[1, 1, 1, 0],
|
|
46
|
-
[1, 1, -1, 0],
|
|
47
|
-
[1, -1, 1, 0],
|
|
48
|
-
[1, -1, -1, 0],
|
|
49
|
-
[-1, 1, 1, 0],
|
|
50
|
-
[-1, 1, -1, 0],
|
|
51
|
-
[-1, -1, 1, 0],
|
|
52
|
-
[-1, -1, -1, 0],
|
|
53
|
-
];
|
|
54
|
-
function makeNoise4D(random) {
|
|
55
|
-
if (random === void 0) { random = Math.random; }
|
|
56
|
-
var p = new Uint8Array(256);
|
|
57
|
-
for (var i = 0; i < 256; i++)
|
|
58
|
-
p[i] = i;
|
|
59
|
-
var n;
|
|
60
|
-
var q;
|
|
61
|
-
for (var i = 255; i > 0; i--) {
|
|
62
|
-
n = Math.floor((i + 1) * random());
|
|
63
|
-
q = p[i];
|
|
64
|
-
p[i] = p[n];
|
|
65
|
-
p[n] = q;
|
|
66
|
-
}
|
|
67
|
-
var perm = new Uint8Array(512);
|
|
68
|
-
var permMod12 = new Uint8Array(512);
|
|
69
|
-
for (var i = 0; i < 512; i++) {
|
|
70
|
-
perm[i] = p[i & 255];
|
|
71
|
-
permMod12[i] = perm[i] % 12;
|
|
72
|
-
}
|
|
73
|
-
return function (x, y, z, w) {
|
|
74
|
-
// Skew the (x,y,z,w) space to determine which cell of 24 simplices we're in
|
|
75
|
-
var s = (x + y + z + w) * (Math.sqrt(5.0) - 1.0) / 4.0; // Factor for 4D skewing
|
|
76
|
-
var i = Math.floor(x + s);
|
|
77
|
-
var j = Math.floor(y + s);
|
|
78
|
-
var k = Math.floor(z + s);
|
|
79
|
-
var l = Math.floor(w + s);
|
|
80
|
-
var t = (i + j + k + l) * G4; // Factor for 4D unskewing
|
|
81
|
-
var X0 = i - t; // Unskew the cell origin back to (x,y,z,w) space
|
|
82
|
-
var Y0 = j - t;
|
|
83
|
-
var Z0 = k - t;
|
|
84
|
-
var W0 = l - t;
|
|
85
|
-
var x0 = x - X0; // The x,y,z,w distances from the cell origin
|
|
86
|
-
var y0 = y - Y0;
|
|
87
|
-
var z0 = z - Z0;
|
|
88
|
-
var w0 = w - W0;
|
|
89
|
-
// To find out which of the 24 possible simplices we're in, we need to determine the
|
|
90
|
-
// magnitude ordering of x0, y0, z0 and w0. Six pair-wise comparisons are performed between
|
|
91
|
-
// each possible pair of the four coordinates, and the results are used to rank the numbers.
|
|
92
|
-
var rankx = 0;
|
|
93
|
-
var ranky = 0;
|
|
94
|
-
var rankz = 0;
|
|
95
|
-
var rankw = 0;
|
|
96
|
-
if (x0 > y0)
|
|
97
|
-
rankx++;
|
|
98
|
-
else
|
|
99
|
-
ranky++;
|
|
100
|
-
if (x0 > z0)
|
|
101
|
-
rankx++;
|
|
102
|
-
else
|
|
103
|
-
rankz++;
|
|
104
|
-
if (x0 > w0)
|
|
105
|
-
rankx++;
|
|
106
|
-
else
|
|
107
|
-
rankw++;
|
|
108
|
-
if (y0 > z0)
|
|
109
|
-
ranky++;
|
|
110
|
-
else
|
|
111
|
-
rankz++;
|
|
112
|
-
if (y0 > w0)
|
|
113
|
-
ranky++;
|
|
114
|
-
else
|
|
115
|
-
rankw++;
|
|
116
|
-
if (z0 > w0)
|
|
117
|
-
rankz++;
|
|
118
|
-
else
|
|
119
|
-
rankw++;
|
|
120
|
-
// simplex[c] is a 4-vector with the numbers 0, 1, 2 and 3 in some order.
|
|
121
|
-
// Many values of c will never occur, since e.g. x>y>z>w makes x<z, y<w and x<w
|
|
122
|
-
// impossible. Only the 24 indices which have non-zero entries make any sense.
|
|
123
|
-
// We use a thresholding to set the coordinates in turn from the largest magnitude.
|
|
124
|
-
// Rank 3 denotes the largest coordinate.
|
|
125
|
-
var i1 = rankx >= 3 ? 1 : 0;
|
|
126
|
-
var j1 = ranky >= 3 ? 1 : 0;
|
|
127
|
-
var k1 = rankz >= 3 ? 1 : 0;
|
|
128
|
-
var l1 = rankw >= 3 ? 1 : 0;
|
|
129
|
-
// Rank 2 denotes the second largest coordinate.
|
|
130
|
-
var i2 = rankx >= 2 ? 1 : 0;
|
|
131
|
-
var j2 = ranky >= 2 ? 1 : 0;
|
|
132
|
-
var k2 = rankz >= 2 ? 1 : 0;
|
|
133
|
-
var l2 = rankw >= 2 ? 1 : 0;
|
|
134
|
-
// Rank 1 denotes the second smallest coordinate.
|
|
135
|
-
var i3 = rankx >= 1 ? 1 : 0;
|
|
136
|
-
var j3 = ranky >= 1 ? 1 : 0;
|
|
137
|
-
var k3 = rankz >= 1 ? 1 : 0;
|
|
138
|
-
var l3 = rankw >= 1 ? 1 : 0;
|
|
139
|
-
// The fifth corner has all coordinate offsets = 1, so no need to compute that.
|
|
140
|
-
var x1 = x0 - i1 + G4; // Offsets for second corner in (x,y,z,w) coords
|
|
141
|
-
var y1 = y0 - j1 + G4;
|
|
142
|
-
var z1 = z0 - k1 + G4;
|
|
143
|
-
var w1 = w0 - l1 + G4;
|
|
144
|
-
var x2 = x0 - i2 + 2.0 * G4; // Offsets for third corner in (x,y,z,w) coords
|
|
145
|
-
var y2 = y0 - j2 + 2.0 * G4;
|
|
146
|
-
var z2 = z0 - k2 + 2.0 * G4;
|
|
147
|
-
var w2 = w0 - l2 + 2.0 * G4;
|
|
148
|
-
var x3 = x0 - i3 + 3.0 * G4; // Offsets for fourth corner in (x,y,z,w) coords
|
|
149
|
-
var y3 = y0 - j3 + 3.0 * G4;
|
|
150
|
-
var z3 = z0 - k3 + 3.0 * G4;
|
|
151
|
-
var w3 = w0 - l3 + 3.0 * G4;
|
|
152
|
-
var x4 = x0 - 1.0 + 4.0 * G4; // Offsets for last corner in (x,y,z,w) coords
|
|
153
|
-
var y4 = y0 - 1.0 + 4.0 * G4;
|
|
154
|
-
var z4 = z0 - 1.0 + 4.0 * G4;
|
|
155
|
-
var w4 = w0 - 1.0 + 4.0 * G4;
|
|
156
|
-
// Work out the hashed gradient indices of the five simplex corners
|
|
157
|
-
var ii = i & 255;
|
|
158
|
-
var jj = j & 255;
|
|
159
|
-
var kk = k & 255;
|
|
160
|
-
var ll = l & 255;
|
|
161
|
-
var g0 = Grad[perm[ii + perm[jj + perm[kk + perm[ll]]]] %
|
|
162
|
-
32];
|
|
163
|
-
var g1 = Grad[perm[ii + i1 + perm[jj + j1 + perm[kk + k1 + perm[ll + l1]]]] % 32];
|
|
164
|
-
var g2 = Grad[perm[ii + i2 + perm[jj + j2 + perm[kk + k2 + perm[ll + l2]]]] % 32];
|
|
165
|
-
var g3 = Grad[perm[ii + i3 + perm[jj + j3 + perm[kk + k3 + perm[ll + l3]]]] % 32];
|
|
166
|
-
var g4 = Grad[perm[ii + 1 + perm[jj + 1 + perm[kk + 1 + perm[ll + 1]]]] % 32];
|
|
167
|
-
// Calculate the contribution from the five corners
|
|
168
|
-
var t0 = 0.5 - x0 * x0 - y0 * y0 - z0 * z0 - w0 * w0;
|
|
169
|
-
var n0 = t0 < 0
|
|
170
|
-
? 0.0
|
|
171
|
-
: Math.pow(t0, 4) * (g0[0] * x0 + g0[1] * y0 + g0[2] * z0 + g0[3] * w0);
|
|
172
|
-
var t1 = 0.5 - x1 * x1 - y1 * y1 - z1 * z1 - w1 * w1;
|
|
173
|
-
var n1 = t1 < 0
|
|
174
|
-
? 0.0
|
|
175
|
-
: Math.pow(t1, 4) * (g1[0] * x1 + g1[1] * y1 + g1[2] * z1 + g1[3] * w1);
|
|
176
|
-
var t2 = 0.5 - x2 * x2 - y2 * y2 - z2 * z2 - w2 * w2;
|
|
177
|
-
var n2 = t2 < 0
|
|
178
|
-
? 0.0
|
|
179
|
-
: Math.pow(t2, 4) * (g2[0] * x2 + g2[1] * y2 + g2[2] * z2 + g2[3] * w2);
|
|
180
|
-
var t3 = 0.5 - x3 * x3 - y3 * y3 - z3 * z3 - w3 * w3;
|
|
181
|
-
var n3 = t3 < 0
|
|
182
|
-
? 0.0
|
|
183
|
-
: Math.pow(t3, 4) * (g3[0] * x3 + g3[1] * y3 + g3[2] * z3 + g3[3] * w3);
|
|
184
|
-
var t4 = 0.5 - x4 * x4 - y4 * y4 - z4 * z4 - w4 * w4;
|
|
185
|
-
var n4 = t4 < 0
|
|
186
|
-
? 0.0
|
|
187
|
-
: Math.pow(t4, 4) * (g4[0] * x4 + g4[1] * y4 + g4[2] * z4 + g4[3] * w4);
|
|
188
|
-
// Sum up and scale the result to cover the range [-1,1]
|
|
189
|
-
return 72.37855765153665 * (n0 + n1 + n2 + n3 + n4);
|
|
190
|
-
};
|
|
191
|
-
}
|
|
192
|
-
_4d.makeNoise4D = makeNoise4D;
|
|
193
|
-
return _4d;
|
|
194
|
-
}
|
|
195
|
-
|
|
196
|
-
export { require_4d as __require };
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
import { __exports as mod } from '../../../_virtual/mod2.js';
|
|
2
|
-
import { __require as require_2d } from './2d.js';
|
|
3
|
-
import { __require as require_3d } from './3d.js';
|
|
4
|
-
import { __require as require_4d } from './4d.js';
|
|
5
|
-
|
|
6
|
-
var hasRequiredMod;
|
|
7
|
-
|
|
8
|
-
function requireMod () {
|
|
9
|
-
if (hasRequiredMod) return mod;
|
|
10
|
-
hasRequiredMod = 1;
|
|
11
|
-
(function (exports$1) {
|
|
12
|
-
Object.defineProperty(exports$1, "__esModule", { value: true });
|
|
13
|
-
exports$1.makeNoise4D = exports$1.makeNoise3D = exports$1.makeNoise2D = void 0;
|
|
14
|
-
var _2d_1 = require_2d();
|
|
15
|
-
Object.defineProperty(exports$1, "makeNoise2D", { enumerable: true, get: function () { return _2d_1.makeNoise2D; } });
|
|
16
|
-
var _3d_1 = require_3d();
|
|
17
|
-
Object.defineProperty(exports$1, "makeNoise3D", { enumerable: true, get: function () { return _3d_1.makeNoise3D; } });
|
|
18
|
-
var _4d_1 = require_4d();
|
|
19
|
-
Object.defineProperty(exports$1, "makeNoise4D", { enumerable: true, get: function () { return _4d_1.makeNoise4D; } });
|
|
20
|
-
} (mod));
|
|
21
|
-
return mod;
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
export { requireMod as __require };
|
package/dist/nodes/FXNode.d.ts
DELETED
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
export declare const CURRENT_EXPRESSION_VALUE_PLACEHOLDER = "CURRENT_EXPRESSION_VALUE_PLACEHOLDER";
|
|
2
|
-
export declare const BLENDING_EXPRESSION_CURRENT_COLOR_PLACEHOLDER = "BLENDING_EXPRESSION_CURRENT_COLOR_PLACEHOLDER";
|
|
3
|
-
export declare abstract class FXNode {
|
|
4
|
-
destroy?(): void;
|
|
5
|
-
}
|
package/dist/nodes/FXNode.js
DELETED
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
const CURRENT_EXPRESSION_VALUE_PLACEHOLDER = "CURRENT_EXPRESSION_VALUE_PLACEHOLDER";
|
|
2
|
-
const BLENDING_EXPRESSION_CURRENT_COLOR_PLACEHOLDER = "BLENDING_EXPRESSION_CURRENT_COLOR_PLACEHOLDER";
|
|
3
|
-
class FXNode {
|
|
4
|
-
constructor() {
|
|
5
|
-
/** @internal */
|
|
6
|
-
this.affectsDepth = false;
|
|
7
|
-
}
|
|
8
|
-
}
|
|
9
|
-
|
|
10
|
-
export { BLENDING_EXPRESSION_CURRENT_COLOR_PLACEHOLDER, CURRENT_EXPRESSION_VALUE_PLACEHOLDER, FXNode };
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import { FXNodeBlending } from "./FXNodeBlending";
|
|
2
|
-
export declare class FXNodeLightnessBlendingMask extends FXNodeBlending {
|
|
3
|
-
private uniformNameEdge0;
|
|
4
|
-
private uniformNameEdge1;
|
|
5
|
-
private edge0Internal;
|
|
6
|
-
private edge1Internal;
|
|
7
|
-
private isPrepared;
|
|
8
|
-
/**
|
|
9
|
-
* @param edge0 - brightness threshold where mask starts (below this: NormalBlending). Defaults to `0.3`
|
|
10
|
-
* @param edge1 - brightness threshold where mask is fully active (above this: full FXBlending effect). Defaults to `0.7`
|
|
11
|
-
*/
|
|
12
|
-
constructor(edge0?: number, edge1?: number);
|
|
13
|
-
/** Brightness threshold where mask starts (below this: NormalBlending) */
|
|
14
|
-
get edge0(): number;
|
|
15
|
-
/** Brightness threshold where mask is fully active (above this: full FXBlending effect) */
|
|
16
|
-
get edge1(): number;
|
|
17
|
-
set edge0(value: number);
|
|
18
|
-
set edge1(value: number);
|
|
19
|
-
}
|
|
@@ -1,65 +0,0 @@
|
|
|
1
|
-
import { assertValidNonNegativeNumber } from '../../miscellaneous/asserts.js';
|
|
2
|
-
import { CURRENT_EXPRESSION_VALUE_PLACEHOLDER, BLENDING_EXPRESSION_CURRENT_COLOR_PLACEHOLDER } from '../FXNode.js';
|
|
3
|
-
import { FXNodeBlending } from './FXNodeBlending.js';
|
|
4
|
-
|
|
5
|
-
class FXNodeLightnessBlendingMask extends FXNodeBlending {
|
|
6
|
-
/**
|
|
7
|
-
* @param edge0 - brightness threshold where mask starts (below this: NormalBlending). Defaults to `0.3`
|
|
8
|
-
* @param edge1 - brightness threshold where mask is fully active (above this: full FXBlending effect). Defaults to `0.7`
|
|
9
|
-
*/
|
|
10
|
-
constructor(edge0 = 0.3, edge1 = 0.7) {
|
|
11
|
-
super();
|
|
12
|
-
/** @internal */
|
|
13
|
-
this.cacheKey = "lightness-blending-mask";
|
|
14
|
-
this._private_isPrepared = false;
|
|
15
|
-
assertValidNonNegativeNumber(edge0, "FXNodeLightnessBlendingMask.constructor.edge0");
|
|
16
|
-
assertValidNonNegativeNumber(edge1, "FXNodeLightnessBlendingMask.constructor.edge1");
|
|
17
|
-
this._private_edge0Internal = edge0;
|
|
18
|
-
this._private_edge1Internal = edge1;
|
|
19
|
-
}
|
|
20
|
-
/** Brightness threshold where mask starts (below this: NormalBlending) */
|
|
21
|
-
get edge0() {
|
|
22
|
-
return this._private_edge0Internal;
|
|
23
|
-
}
|
|
24
|
-
/** Brightness threshold where mask is fully active (above this: full FXBlending effect) */
|
|
25
|
-
get edge1() {
|
|
26
|
-
return this._private_edge1Internal;
|
|
27
|
-
}
|
|
28
|
-
set edge0(value) {
|
|
29
|
-
assertValidNonNegativeNumber(value, "FXNodeLightnessBlendingMask.edge0");
|
|
30
|
-
this._private_edge0Internal = value;
|
|
31
|
-
if (this._private_isPrepared) {
|
|
32
|
-
this.uniforms[this._private_uniformNameEdge0].value = value;
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
set edge1(value) {
|
|
36
|
-
assertValidNonNegativeNumber(value, "FXNodeLightnessBlendingMask.edge1");
|
|
37
|
-
this._private_edge1Internal = value;
|
|
38
|
-
if (this._private_isPrepared) {
|
|
39
|
-
this.uniforms[this._private_uniformNameEdge1].value = value;
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
/** @internal */
|
|
43
|
-
prepare(index) {
|
|
44
|
-
this._private_uniformNameEdge0 = `u_LightnessBlendingMaskEdge0_${index}`;
|
|
45
|
-
this._private_uniformNameEdge1 = `u_LightnessBlendingMaskEdge1_${index}`;
|
|
46
|
-
this.uniformDeclarations = [
|
|
47
|
-
`uniform float ${this._private_uniformNameEdge0};`,
|
|
48
|
-
`uniform float ${this._private_uniformNameEdge1};`,
|
|
49
|
-
];
|
|
50
|
-
this.uniforms = {
|
|
51
|
-
[this._private_uniformNameEdge0]: { value: this._private_edge0Internal },
|
|
52
|
-
[this._private_uniformNameEdge1]: { value: this._private_edge1Internal },
|
|
53
|
-
};
|
|
54
|
-
this.helperFunctions = `
|
|
55
|
-
float fxLightnessBlendingMask(vec4 color, float edge0, float edge1) {
|
|
56
|
-
float brightness = dot(color.rgb, vec3(0.2126, 0.7152, 0.0722));
|
|
57
|
-
return smoothstep(edge0, edge1, brightness);
|
|
58
|
-
}
|
|
59
|
-
`;
|
|
60
|
-
this.blendingExpression = `${CURRENT_EXPRESSION_VALUE_PLACEHOLDER} * fxLightnessBlendingMask(${BLENDING_EXPRESSION_CURRENT_COLOR_PLACEHOLDER}, ${this._private_uniformNameEdge0}, ${this._private_uniformNameEdge1})`;
|
|
61
|
-
this._private_isPrepared = true;
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
export { FXNodeLightnessBlendingMask };
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
import type { FXColor } from "../../miscellaneous/color/FXColor";
|
|
2
|
-
import type { FXCurve1DConfig } from "../../miscellaneous/curve/FXCurve1D";
|
|
3
|
-
import { FXCurve1D } from "../../miscellaneous/curve/FXCurve1D";
|
|
4
|
-
import { FXNodeColor } from "./FXNodeColor";
|
|
5
|
-
/**
|
|
6
|
-
* Color node that animates particle color along a gradient curve over its lifetime
|
|
7
|
-
*/
|
|
8
|
-
export declare class FXNodeColorOverLife extends FXNodeColor {
|
|
9
|
-
private uniformName;
|
|
10
|
-
private gradientTexture;
|
|
11
|
-
private curveInternal;
|
|
12
|
-
private isPrepared;
|
|
13
|
-
/**
|
|
14
|
-
* @param curve - Color gradient defining the animation over the particle lifetime
|
|
15
|
-
*/
|
|
16
|
-
constructor(curve: FXCurve1DConfig<FXColor>);
|
|
17
|
-
/** Current color gradient curve */
|
|
18
|
-
get curve(): FXCurve1D<FXColor>;
|
|
19
|
-
set curve(value: FXCurve1DConfig<FXColor>);
|
|
20
|
-
/** Releases the backing gradient texture */
|
|
21
|
-
destroy(): void;
|
|
22
|
-
}
|
|
@@ -1,64 +0,0 @@
|
|
|
1
|
-
import { FXCurve1D } from '../../miscellaneous/curve/FXCurve1D.js';
|
|
2
|
-
import { buildGradientTexture } from '../../miscellaneous/miscellaneous.js';
|
|
3
|
-
import { checkSRGBSupport } from '../../miscellaneous/webglCapabilities.js';
|
|
4
|
-
import { CURRENT_EXPRESSION_VALUE_PLACEHOLDER } from '../FXNode.js';
|
|
5
|
-
import { FXNodeColor } from './FXNodeColor.js';
|
|
6
|
-
|
|
7
|
-
/**
|
|
8
|
-
* Color node that animates particle color along a gradient curve over its lifetime
|
|
9
|
-
*/
|
|
10
|
-
class FXNodeColorOverLife extends FXNodeColor {
|
|
11
|
-
/**
|
|
12
|
-
* @param curve - Color gradient defining the animation over the particle lifetime
|
|
13
|
-
*/
|
|
14
|
-
constructor(curve) {
|
|
15
|
-
super();
|
|
16
|
-
/** @internal */
|
|
17
|
-
this.affectsDepth = true;
|
|
18
|
-
/** @internal */
|
|
19
|
-
this.cacheKey = "color-over-life";
|
|
20
|
-
this._private_isPrepared = false;
|
|
21
|
-
this._private_curveInternal = new FXCurve1D(curve);
|
|
22
|
-
this._private_gradientTexture = buildGradientTexture(this._private_curveInternal);
|
|
23
|
-
}
|
|
24
|
-
/** Current color gradient curve */
|
|
25
|
-
get curve() {
|
|
26
|
-
return this._private_curveInternal;
|
|
27
|
-
}
|
|
28
|
-
set curve(value) {
|
|
29
|
-
this._private_curveInternal = new FXCurve1D(value);
|
|
30
|
-
this._private_gradientTexture.dispose();
|
|
31
|
-
this._private_gradientTexture = buildGradientTexture(this._private_curveInternal);
|
|
32
|
-
if (this._private_isPrepared) {
|
|
33
|
-
this.uniforms[this._private_uniformName].value = this._private_gradientTexture;
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
/** Releases the backing gradient texture */
|
|
37
|
-
destroy() {
|
|
38
|
-
this._private_gradientTexture.dispose();
|
|
39
|
-
}
|
|
40
|
-
/** @internal */
|
|
41
|
-
prepare(index) {
|
|
42
|
-
this._private_uniformName = `u_ColorOverLife_${index}`;
|
|
43
|
-
this.uniformDeclarations = [`uniform sampler2D ${this._private_uniformName};`];
|
|
44
|
-
this.uniforms = {
|
|
45
|
-
[this._private_uniformName]: { value: this._private_gradientTexture },
|
|
46
|
-
};
|
|
47
|
-
this.helperFunctions = `
|
|
48
|
-
vec4 fxSampleColorOverLife(sampler2D gradientTexture) {
|
|
49
|
-
// Normalized particle age [0, 1] maps to the gradient texture's x-axis
|
|
50
|
-
float lifetimeRatio = clamp(PARTICLE_AGE / PARTICLE_LIFETIME, 0.0, 1.0);
|
|
51
|
-
vec4 color = texture2D(gradientTexture, vec2(lifetimeRatio, 0.5));
|
|
52
|
-
|
|
53
|
-
// Apply gamma correction when sRGB textures are not natively supported
|
|
54
|
-
${checkSRGBSupport() ? "" : "color = vec4(pow(color.rgb, vec3(2.2)), color.a);"}
|
|
55
|
-
|
|
56
|
-
return color;
|
|
57
|
-
}
|
|
58
|
-
`;
|
|
59
|
-
this.colorExpression = `${CURRENT_EXPRESSION_VALUE_PLACEHOLDER} * fxSampleColorOverLife(${this._private_uniformName})`;
|
|
60
|
-
this._private_isPrepared = true;
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
export { FXNodeColorOverLife };
|