@babylonjs/core 8.4.0 → 8.4.2

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 (68) hide show
  1. package/Collisions/gpuPicker.js +26 -14
  2. package/Collisions/gpuPicker.js.map +1 -1
  3. package/Engines/abstractEngine.js +2 -2
  4. package/Engines/abstractEngine.js.map +1 -1
  5. package/Materials/Textures/Loaders/EXR/exrLoader.decoder.js +24 -3
  6. package/Materials/Textures/Loaders/EXR/exrLoader.decoder.js.map +1 -1
  7. package/Materials/Textures/texture.js +1 -1
  8. package/Materials/Textures/texture.js.map +1 -1
  9. package/Materials/shadowDepthWrapper.js +6 -0
  10. package/Materials/shadowDepthWrapper.js.map +1 -1
  11. package/Materials/uniformBuffer.js +4 -0
  12. package/Materials/uniformBuffer.js.map +1 -1
  13. package/Meshes/GaussianSplatting/gaussianSplattingMesh.js +24 -7
  14. package/Meshes/GaussianSplatting/gaussianSplattingMesh.js.map +1 -1
  15. package/Meshes/geometry.js +30 -28
  16. package/Meshes/geometry.js.map +1 -1
  17. package/Meshes/mesh.vertexData.js +2 -2
  18. package/Meshes/mesh.vertexData.js.map +1 -1
  19. package/Misc/observable.d.ts +3 -2
  20. package/Misc/observable.js +5 -4
  21. package/Misc/observable.js.map +1 -1
  22. package/Particles/Queue/executionQueue.d.ts +18 -0
  23. package/Particles/Queue/executionQueue.js +28 -0
  24. package/Particles/Queue/executionQueue.js.map +1 -0
  25. package/Particles/attractor.d.ts +21 -0
  26. package/Particles/attractor.js +36 -0
  27. package/Particles/attractor.js.map +1 -0
  28. package/Particles/baseParticleSystem.d.ts +27 -13
  29. package/Particles/baseParticleSystem.js +34 -4
  30. package/Particles/baseParticleSystem.js.map +1 -1
  31. package/Particles/index.d.ts +1 -0
  32. package/Particles/index.js +1 -0
  33. package/Particles/index.js.map +1 -1
  34. package/Particles/particleSystem.d.ts +18 -0
  35. package/Particles/particleSystem.js +59 -0
  36. package/Particles/particleSystem.js.map +1 -1
  37. package/Particles/thinParticleSystem.d.ts +81 -12
  38. package/Particles/thinParticleSystem.function.d.ts +84 -0
  39. package/Particles/thinParticleSystem.function.js +340 -0
  40. package/Particles/thinParticleSystem.function.js.map +1 -0
  41. package/Particles/thinParticleSystem.js +380 -316
  42. package/Particles/thinParticleSystem.js.map +1 -1
  43. package/PostProcesses/RenderPipeline/Pipelines/lensRenderingPipeline.js +1 -0
  44. package/PostProcesses/RenderPipeline/Pipelines/lensRenderingPipeline.js.map +1 -1
  45. package/PostProcesses/RenderPipeline/Pipelines/ssao2RenderingPipeline.js +1 -0
  46. package/PostProcesses/RenderPipeline/Pipelines/ssao2RenderingPipeline.js.map +1 -1
  47. package/PostProcesses/RenderPipeline/Pipelines/ssaoRenderingPipeline.js +1 -0
  48. package/PostProcesses/RenderPipeline/Pipelines/ssaoRenderingPipeline.js.map +1 -1
  49. package/PostProcesses/RenderPipeline/Pipelines/ssrRenderingPipeline.js +1 -0
  50. package/PostProcesses/RenderPipeline/Pipelines/ssrRenderingPipeline.js.map +1 -1
  51. package/PostProcesses/RenderPipeline/Pipelines/standardRenderingPipeline.js +1 -0
  52. package/PostProcesses/RenderPipeline/Pipelines/standardRenderingPipeline.js.map +1 -1
  53. package/PostProcesses/RenderPipeline/Pipelines/taaRenderingPipeline.js +1 -0
  54. package/PostProcesses/RenderPipeline/Pipelines/taaRenderingPipeline.js.map +1 -1
  55. package/Rendering/IBLShadows/iblShadowsAccumulationPass.d.ts +2 -0
  56. package/Rendering/IBLShadows/iblShadowsAccumulationPass.js +22 -12
  57. package/Rendering/IBLShadows/iblShadowsAccumulationPass.js.map +1 -1
  58. package/Rendering/IBLShadows/iblShadowsRenderPipeline.js +1 -0
  59. package/Rendering/IBLShadows/iblShadowsRenderPipeline.js.map +1 -1
  60. package/Rendering/IBLShadows/iblShadowsSpatialBlurPass.d.ts +2 -0
  61. package/Rendering/IBLShadows/iblShadowsSpatialBlurPass.js +22 -12
  62. package/Rendering/IBLShadows/iblShadowsSpatialBlurPass.js.map +1 -1
  63. package/Rendering/IBLShadows/iblShadowsVoxelTracingPass.d.ts +2 -0
  64. package/Rendering/IBLShadows/iblShadowsVoxelTracingPass.js +28 -14
  65. package/Rendering/IBLShadows/iblShadowsVoxelTracingPass.js.map +1 -1
  66. package/ShadersWGSL/gaussianSplatting.vertex.js +1 -1
  67. package/ShadersWGSL/gaussianSplatting.vertex.js.map +1 -1
  68. package/package.json +1 -1
@@ -0,0 +1,84 @@
1
+ import type { Particle } from "./particle.js";
2
+ import type { ThinParticleSystem } from "./thinParticleSystem.js";
3
+ /** Color */
4
+ /** @internal */
5
+ export declare function _CreateColorData(particle: Particle, system: ThinParticleSystem): void;
6
+ /** @internal */
7
+ export declare function _CreateColorGradientsData(particle: Particle, system: ThinParticleSystem): void;
8
+ /** @internal */
9
+ export declare function _ProcessColorGradients(particle: Particle, system: ThinParticleSystem): void;
10
+ /** @internal */
11
+ export declare function _ProcessColor(particle: Particle, system: ThinParticleSystem): void;
12
+ /** Angular speed */
13
+ /** @internal */
14
+ export declare function _ProcessAngularSpeedGradients(particle: Particle, system: ThinParticleSystem): void;
15
+ /** @internal */
16
+ export declare function _ProcessAngularSpeed(particle: Particle, system: ThinParticleSystem): void;
17
+ /** Velocity & direction */
18
+ /** @internal */
19
+ export declare function _CreateDirectionData(particle: Particle, system: ThinParticleSystem): void;
20
+ /** @internal */
21
+ export declare function _CreateCustomDirectionData(particle: Particle, system: ThinParticleSystem): void;
22
+ /** @internal */
23
+ export declare function _CreateVelocityGradients(particle: Particle, system: ThinParticleSystem): void;
24
+ /** @internal */
25
+ export declare function _CreateLimitVelocityGradients(particle: Particle, system: ThinParticleSystem): void;
26
+ /** @internal */
27
+ export declare function _ProcessVelocityGradients(particle: Particle, system: ThinParticleSystem): void;
28
+ /** @internal */
29
+ export declare function _ProcessLimitVelocityGradients(particle: Particle, system: ThinParticleSystem): void;
30
+ /** @internal */
31
+ export declare function _ProcessDirection(particle: Particle, system: ThinParticleSystem): void;
32
+ /** Position */
33
+ /** @internal */
34
+ export declare function _CreatePositionData(particle: Particle, system: ThinParticleSystem): void;
35
+ /** @internal */
36
+ export declare function _CreateCustomPositionData(particle: Particle, system: ThinParticleSystem): void;
37
+ /** @internal */
38
+ export declare function _CreateIsLocalData(particle: Particle, system: ThinParticleSystem): void;
39
+ /** @internal */
40
+ export declare function _ProcessPosition(particle: Particle, system: ThinParticleSystem): void;
41
+ /** Drag */
42
+ /** @internal */
43
+ export declare function _CreateDragData(particle: Particle, system: ThinParticleSystem): void;
44
+ /** @internal */
45
+ export declare function _ProcessDragGradients(particle: Particle, system: ThinParticleSystem): void;
46
+ /** Noise */
47
+ /** @internal */
48
+ export declare function _CreateNoiseData(particle: Particle, system: ThinParticleSystem): void;
49
+ /** @internal */
50
+ export declare function _ProcessNoise(particle: Particle, system: ThinParticleSystem): void;
51
+ /** Gravity */
52
+ /** @internal */
53
+ export declare function _ProcessGravity(particle: Particle, system: ThinParticleSystem): void;
54
+ /** Size */
55
+ /** @internal */
56
+ export declare function _CreateSizeData(particle: Particle, system: ThinParticleSystem): void;
57
+ /** @internal */
58
+ export declare function _CreateSizeGradientsData(particle: Particle, system: ThinParticleSystem): void;
59
+ /** @internal */
60
+ export declare function _CreateStartSizeGradientsData(particle: Particle, system: ThinParticleSystem): void;
61
+ /** @internal */
62
+ export declare function _ProcessSizeGradients(particle: Particle, system: ThinParticleSystem): void;
63
+ /** Ramp */
64
+ /** @internal */
65
+ export declare function _CreateRampData(particle: Particle, system: ThinParticleSystem): void;
66
+ /** Remap */
67
+ /** @internal */
68
+ export declare function _ProcessRemapGradients(particle: Particle, system: ThinParticleSystem): void;
69
+ /** Life */
70
+ /** @internal */
71
+ export declare function _CreateLifeGradientsData(particle: Particle, system: ThinParticleSystem): void;
72
+ /** @internal */
73
+ export declare function _CreateLifetimeData(particle: Particle, system: ThinParticleSystem): void;
74
+ /** Emit power */
75
+ /** @internal */
76
+ export declare function _CreateEmitPowerData(particle: Particle, system: ThinParticleSystem): void;
77
+ /** Angle */
78
+ /** @internal */
79
+ export declare function _CreateAngleData(particle: Particle, system: ThinParticleSystem): void;
80
+ /** @internal */
81
+ export declare function _CreateAngleGradientsData(particle: Particle, system: ThinParticleSystem): void;
82
+ /** Sheet */
83
+ /** @internal */
84
+ export declare function _CreateSheetData(particle: Particle, system: ThinParticleSystem): void;
@@ -0,0 +1,340 @@
1
+ import { Color4 } from "../Maths/math.color.js";
2
+ import { GradientHelper } from "../Misc/gradients.js";
3
+ import { Clamp, Lerp, RandomRange } from "../Maths/math.scalar.functions.js";
4
+ import { TmpVectors, Vector3, Vector4 } from "../Maths/math.vector.js";
5
+ /** Color */
6
+ /** @internal */
7
+ export function _CreateColorData(particle, system) {
8
+ const step = RandomRange(0, 1.0);
9
+ Color4.LerpToRef(system.color1, system.color2, step, particle.color);
10
+ system.colorDead.subtractToRef(particle.color, system._colorDiff);
11
+ system._colorDiff.scaleToRef(1.0 / particle.lifeTime, particle.colorStep);
12
+ }
13
+ /** @internal */
14
+ export function _CreateColorGradientsData(particle, system) {
15
+ particle._currentColorGradient = system._colorGradients[0];
16
+ particle._currentColorGradient.getColorToRef(particle.color);
17
+ particle._currentColor1.copyFrom(particle.color);
18
+ if (system._colorGradients.length > 1) {
19
+ system._colorGradients[1].getColorToRef(particle._currentColor2);
20
+ }
21
+ else {
22
+ particle._currentColor2.copyFrom(particle.color);
23
+ }
24
+ }
25
+ /** @internal */
26
+ export function _ProcessColorGradients(particle, system) {
27
+ const colorGradients = system._colorGradients;
28
+ GradientHelper.GetCurrentGradient(system._ratio, colorGradients, (currentGradient, nextGradient, scale) => {
29
+ if (currentGradient !== particle._currentColorGradient) {
30
+ particle._currentColor1.copyFrom(particle._currentColor2);
31
+ nextGradient.getColorToRef(particle._currentColor2);
32
+ particle._currentColorGradient = currentGradient;
33
+ }
34
+ Color4.LerpToRef(particle._currentColor1, particle._currentColor2, scale, particle.color);
35
+ });
36
+ }
37
+ /** @internal */
38
+ export function _ProcessColor(particle, system) {
39
+ particle.colorStep.scaleToRef(system._scaledUpdateSpeed, system._scaledColorStep);
40
+ particle.color.addInPlace(system._scaledColorStep);
41
+ if (particle.color.a < 0) {
42
+ particle.color.a = 0;
43
+ }
44
+ }
45
+ /** Angular speed */
46
+ /** @internal */
47
+ export function _ProcessAngularSpeedGradients(particle, system) {
48
+ GradientHelper.GetCurrentGradient(system._ratio, system._angularSpeedGradients, (currentGradient, nextGradient, scale) => {
49
+ if (currentGradient !== particle._currentAngularSpeedGradient) {
50
+ particle._currentAngularSpeed1 = particle._currentAngularSpeed2;
51
+ particle._currentAngularSpeed2 = nextGradient.getFactor();
52
+ particle._currentAngularSpeedGradient = currentGradient;
53
+ }
54
+ particle.angularSpeed = Lerp(particle._currentAngularSpeed1, particle._currentAngularSpeed2, scale);
55
+ });
56
+ }
57
+ /** @internal */
58
+ export function _ProcessAngularSpeed(particle, system) {
59
+ particle.angle += particle.angularSpeed * system._scaledUpdateSpeed;
60
+ }
61
+ /** Velocity & direction */
62
+ /** @internal */
63
+ export function _CreateDirectionData(particle, system) {
64
+ system.particleEmitterType.startDirectionFunction(system._emitterWorldMatrix, particle.direction, particle, system.isLocal, system._emitterInverseWorldMatrix);
65
+ }
66
+ /** @internal */
67
+ export function _CreateCustomDirectionData(particle, system) {
68
+ system.startDirectionFunction(system._emitterWorldMatrix, particle.direction, particle, system.isLocal);
69
+ }
70
+ /** @internal */
71
+ export function _CreateVelocityGradients(particle, system) {
72
+ particle._currentVelocityGradient = system._velocityGradients[0];
73
+ particle._currentVelocity1 = particle._currentVelocityGradient.getFactor();
74
+ if (system._velocityGradients.length > 1) {
75
+ particle._currentVelocity2 = system._velocityGradients[1].getFactor();
76
+ }
77
+ else {
78
+ particle._currentVelocity2 = particle._currentVelocity1;
79
+ }
80
+ }
81
+ /** @internal */
82
+ export function _CreateLimitVelocityGradients(particle, system) {
83
+ particle._currentLimitVelocityGradient = system._limitVelocityGradients[0];
84
+ particle._currentLimitVelocity1 = particle._currentLimitVelocityGradient.getFactor();
85
+ if (system._limitVelocityGradients.length > 1) {
86
+ particle._currentLimitVelocity2 = system._limitVelocityGradients[1].getFactor();
87
+ }
88
+ else {
89
+ particle._currentLimitVelocity2 = particle._currentLimitVelocity1;
90
+ }
91
+ }
92
+ /** @internal */
93
+ export function _ProcessVelocityGradients(particle, system) {
94
+ GradientHelper.GetCurrentGradient(system._ratio, system._velocityGradients, (currentGradient, nextGradient, scale) => {
95
+ if (currentGradient !== particle._currentVelocityGradient) {
96
+ particle._currentVelocity1 = particle._currentVelocity2;
97
+ particle._currentVelocity2 = nextGradient.getFactor();
98
+ particle._currentVelocityGradient = currentGradient;
99
+ }
100
+ system._directionScale *= Lerp(particle._currentVelocity1, particle._currentVelocity2, scale);
101
+ });
102
+ }
103
+ /** @internal */
104
+ export function _ProcessLimitVelocityGradients(particle, system) {
105
+ GradientHelper.GetCurrentGradient(system._ratio, system._limitVelocityGradients, (currentGradient, nextGradient, scale) => {
106
+ if (currentGradient !== particle._currentLimitVelocityGradient) {
107
+ particle._currentLimitVelocity1 = particle._currentLimitVelocity2;
108
+ particle._currentLimitVelocity2 = nextGradient.getFactor();
109
+ particle._currentLimitVelocityGradient = currentGradient;
110
+ }
111
+ const limitVelocity = Lerp(particle._currentLimitVelocity1, particle._currentLimitVelocity2, scale);
112
+ const currentVelocity = particle.direction.length();
113
+ if (currentVelocity > limitVelocity) {
114
+ particle.direction.scaleInPlace(system.limitVelocityDamping);
115
+ }
116
+ });
117
+ }
118
+ /** @internal */
119
+ export function _ProcessDirection(particle, system) {
120
+ particle.direction.scaleToRef(system._directionScale, system._scaledDirection);
121
+ }
122
+ /** Position */
123
+ /** @internal */
124
+ export function _CreatePositionData(particle, system) {
125
+ system.particleEmitterType.startPositionFunction(system._emitterWorldMatrix, particle.position, particle, system.isLocal);
126
+ }
127
+ /** @internal */
128
+ export function _CreateCustomPositionData(particle, system) {
129
+ system.startPositionFunction(system._emitterWorldMatrix, particle.position, particle, system.isLocal);
130
+ }
131
+ /** @internal */
132
+ export function _CreateIsLocalData(particle, system) {
133
+ if (!particle._localPosition) {
134
+ particle._localPosition = particle.position.clone();
135
+ }
136
+ else {
137
+ particle._localPosition.copyFrom(particle.position);
138
+ }
139
+ Vector3.TransformCoordinatesToRef(particle._localPosition, system._emitterWorldMatrix, particle.position);
140
+ }
141
+ /** @internal */
142
+ export function _ProcessPosition(particle, system) {
143
+ if (system.isLocal && particle._localPosition) {
144
+ particle._localPosition.addInPlace(system._scaledDirection);
145
+ Vector3.TransformCoordinatesToRef(particle._localPosition, system._emitterWorldMatrix, particle.position);
146
+ }
147
+ else {
148
+ particle.position.addInPlace(system._scaledDirection);
149
+ }
150
+ }
151
+ /** Drag */
152
+ /** @internal */
153
+ export function _CreateDragData(particle, system) {
154
+ particle._currentDragGradient = system._dragGradients[0];
155
+ particle._currentDrag1 = particle._currentDragGradient.getFactor();
156
+ if (system._dragGradients.length > 1) {
157
+ particle._currentDrag2 = system._dragGradients[1].getFactor();
158
+ }
159
+ else {
160
+ particle._currentDrag2 = particle._currentDrag1;
161
+ }
162
+ }
163
+ /** @internal */
164
+ export function _ProcessDragGradients(particle, system) {
165
+ GradientHelper.GetCurrentGradient(system._ratio, system._dragGradients, (currentGradient, nextGradient, scale) => {
166
+ if (currentGradient !== particle._currentDragGradient) {
167
+ particle._currentDrag1 = particle._currentDrag2;
168
+ particle._currentDrag2 = nextGradient.getFactor();
169
+ particle._currentDragGradient = currentGradient;
170
+ }
171
+ const drag = Lerp(particle._currentDrag1, particle._currentDrag2, scale);
172
+ system._scaledDirection.scaleInPlace(1.0 - drag);
173
+ });
174
+ }
175
+ /** Noise */
176
+ /** @internal */
177
+ export function _CreateNoiseData(particle, system) {
178
+ if (particle._randomNoiseCoordinates1) {
179
+ particle._randomNoiseCoordinates1.copyFromFloats(Math.random(), Math.random(), Math.random());
180
+ particle._randomNoiseCoordinates2.copyFromFloats(Math.random(), Math.random(), Math.random());
181
+ }
182
+ else {
183
+ particle._randomNoiseCoordinates1 = new Vector3(Math.random(), Math.random(), Math.random());
184
+ particle._randomNoiseCoordinates2 = new Vector3(Math.random(), Math.random(), Math.random());
185
+ }
186
+ }
187
+ /** @internal */
188
+ export function _ProcessNoise(particle, system) {
189
+ const noiseTextureData = system._noiseTextureData;
190
+ const noiseTextureSize = system._noiseTextureSize;
191
+ if (noiseTextureData && noiseTextureSize && particle._randomNoiseCoordinates1) {
192
+ const fetchedColorR = system._fetchR(particle._randomNoiseCoordinates1.x, particle._randomNoiseCoordinates1.y, noiseTextureSize.width, noiseTextureSize.height, noiseTextureData);
193
+ const fetchedColorG = system._fetchR(particle._randomNoiseCoordinates1.z, particle._randomNoiseCoordinates2.x, noiseTextureSize.width, noiseTextureSize.height, noiseTextureData);
194
+ const fetchedColorB = system._fetchR(particle._randomNoiseCoordinates2.y, particle._randomNoiseCoordinates2.z, noiseTextureSize.width, noiseTextureSize.height, noiseTextureData);
195
+ const force = TmpVectors.Vector3[0];
196
+ const scaledForce = TmpVectors.Vector3[1];
197
+ force.copyFromFloats((2 * fetchedColorR - 1) * system.noiseStrength.x, (2 * fetchedColorG - 1) * system.noiseStrength.y, (2 * fetchedColorB - 1) * system.noiseStrength.z);
198
+ force.scaleToRef(system._tempScaledUpdateSpeed, scaledForce);
199
+ particle.direction.addInPlace(scaledForce);
200
+ }
201
+ }
202
+ /** Gravity */
203
+ /** @internal */
204
+ export function _ProcessGravity(particle, system) {
205
+ system.gravity.scaleToRef(system._tempScaledUpdateSpeed, system._scaledGravity);
206
+ particle.direction.addInPlace(system._scaledGravity);
207
+ }
208
+ /** Size */
209
+ /** @internal */
210
+ export function _CreateSizeData(particle, system) {
211
+ particle.size = RandomRange(system.minSize, system.maxSize);
212
+ particle.scale.copyFromFloats(RandomRange(system.minScaleX, system.maxScaleX), RandomRange(system.minScaleY, system.maxScaleY));
213
+ }
214
+ /** @internal */
215
+ export function _CreateSizeGradientsData(particle, system) {
216
+ particle._currentSizeGradient = system._sizeGradients[0];
217
+ particle._currentSize1 = particle._currentSizeGradient.getFactor();
218
+ particle.size = particle._currentSize1;
219
+ if (system._sizeGradients.length > 1) {
220
+ particle._currentSize2 = system._sizeGradients[1].getFactor();
221
+ }
222
+ else {
223
+ particle._currentSize2 = particle._currentSize1;
224
+ }
225
+ particle.scale.copyFromFloats(RandomRange(system.minScaleX, system.maxScaleX), RandomRange(system.minScaleY, system.maxScaleY));
226
+ }
227
+ /** @internal */
228
+ export function _CreateStartSizeGradientsData(particle, system) {
229
+ const ratio = system._actualFrame / system.targetStopDuration;
230
+ GradientHelper.GetCurrentGradient(ratio, system._startSizeGradients, (currentGradient, nextGradient, scale) => {
231
+ if (currentGradient !== system._currentStartSizeGradient) {
232
+ system._currentStartSize1 = system._currentStartSize2;
233
+ system._currentStartSize2 = nextGradient.getFactor();
234
+ system._currentStartSizeGradient = currentGradient;
235
+ }
236
+ const value = Lerp(system._currentStartSize1, system._currentStartSize2, scale);
237
+ particle.scale.scaleInPlace(value);
238
+ });
239
+ }
240
+ /** @internal */
241
+ export function _ProcessSizeGradients(particle, system) {
242
+ GradientHelper.GetCurrentGradient(system._ratio, system._sizeGradients, (currentGradient, nextGradient, scale) => {
243
+ if (currentGradient !== particle._currentSizeGradient) {
244
+ particle._currentSize1 = particle._currentSize2;
245
+ particle._currentSize2 = nextGradient.getFactor();
246
+ particle._currentSizeGradient = currentGradient;
247
+ }
248
+ particle.size = Lerp(particle._currentSize1, particle._currentSize2, scale);
249
+ });
250
+ }
251
+ /** Ramp */
252
+ /** @internal */
253
+ export function _CreateRampData(particle, system) {
254
+ particle.remapData = new Vector4(0, 1, 0, 1);
255
+ }
256
+ /** Remap */
257
+ /** @internal */
258
+ export function _ProcessRemapGradients(particle, system) {
259
+ if (system._colorRemapGradients && system._colorRemapGradients.length > 0) {
260
+ GradientHelper.GetCurrentGradient(system._ratio, system._colorRemapGradients, (currentGradient, nextGradient, scale) => {
261
+ const min = Lerp(currentGradient.factor1, nextGradient.factor1, scale);
262
+ const max = Lerp(currentGradient.factor2, nextGradient.factor2, scale);
263
+ particle.remapData.x = min;
264
+ particle.remapData.y = max - min;
265
+ });
266
+ }
267
+ if (system._alphaRemapGradients && system._alphaRemapGradients.length > 0) {
268
+ GradientHelper.GetCurrentGradient(system._ratio, system._alphaRemapGradients, (currentGradient, nextGradient, scale) => {
269
+ const min = Lerp(currentGradient.factor1, nextGradient.factor1, scale);
270
+ const max = Lerp(currentGradient.factor2, nextGradient.factor2, scale);
271
+ particle.remapData.z = min;
272
+ particle.remapData.w = max - min;
273
+ });
274
+ }
275
+ }
276
+ /** Life */
277
+ /** @internal */
278
+ export function _CreateLifeGradientsData(particle, system) {
279
+ const ratio = Clamp(system._actualFrame / system.targetStopDuration);
280
+ GradientHelper.GetCurrentGradient(ratio, system._lifeTimeGradients, (currentGradient, nextGradient) => {
281
+ const factorGradient1 = currentGradient;
282
+ const factorGradient2 = nextGradient;
283
+ const lifeTime1 = factorGradient1.getFactor();
284
+ const lifeTime2 = factorGradient2.getFactor();
285
+ const gradient = (ratio - factorGradient1.gradient) / (factorGradient2.gradient - factorGradient1.gradient);
286
+ particle.lifeTime = Lerp(lifeTime1, lifeTime2, gradient);
287
+ });
288
+ system._emitPower = RandomRange(system.minEmitPower, system.maxEmitPower);
289
+ }
290
+ /** @internal */
291
+ export function _CreateLifetimeData(particle, system) {
292
+ particle.lifeTime = RandomRange(system.minLifeTime, system.maxLifeTime);
293
+ system._emitPower = RandomRange(system.minEmitPower, system.maxEmitPower);
294
+ }
295
+ /** Emit power */
296
+ /** @internal */
297
+ export function _CreateEmitPowerData(particle, system) {
298
+ if (system._emitPower === 0) {
299
+ if (!particle._initialDirection) {
300
+ particle._initialDirection = particle.direction.clone();
301
+ }
302
+ else {
303
+ particle._initialDirection.copyFrom(particle.direction);
304
+ }
305
+ particle.direction.set(0, 0, 0);
306
+ }
307
+ else {
308
+ particle._initialDirection = null;
309
+ particle.direction.scaleInPlace(system._emitPower);
310
+ }
311
+ // Inherited Velocity
312
+ particle.direction.addInPlace(system._inheritedVelocityOffset);
313
+ }
314
+ /** Angle */
315
+ /** @internal */
316
+ export function _CreateAngleData(particle, system) {
317
+ particle.angularSpeed = RandomRange(system.minAngularSpeed, system.maxAngularSpeed);
318
+ particle.angle = RandomRange(system.minInitialRotation, system.maxInitialRotation);
319
+ }
320
+ /** @internal */
321
+ export function _CreateAngleGradientsData(particle, system) {
322
+ particle._currentAngularSpeedGradient = system._angularSpeedGradients[0];
323
+ particle.angularSpeed = particle._currentAngularSpeedGradient.getFactor();
324
+ particle._currentAngularSpeed1 = particle.angularSpeed;
325
+ if (system._angularSpeedGradients.length > 1) {
326
+ particle._currentAngularSpeed2 = system._angularSpeedGradients[1].getFactor();
327
+ }
328
+ else {
329
+ particle._currentAngularSpeed2 = particle._currentAngularSpeed1;
330
+ }
331
+ particle.angle = RandomRange(system.minInitialRotation, system.maxInitialRotation);
332
+ }
333
+ /** Sheet */
334
+ /** @internal */
335
+ export function _CreateSheetData(particle, system) {
336
+ particle._initialStartSpriteCellID = system.startSpriteCellID;
337
+ particle._initialEndSpriteCellID = system.endSpriteCellID;
338
+ particle._initialSpriteCellLoop = system.spriteCellLoop;
339
+ }
340
+ //# sourceMappingURL=thinParticleSystem.function.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"thinParticleSystem.function.js","sourceRoot":"","sources":["../../../../dev/core/src/Particles/thinParticleSystem.function.ts"],"names":[],"mappings":"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","sourcesContent":["import { Color4 } from \"core/Maths/math.color\";\r\nimport type { ColorGradient, FactorGradient } from \"core/Misc/gradients\";\r\nimport { GradientHelper } from \"core/Misc/gradients\";\r\nimport type { Particle } from \"./particle\";\r\nimport type { ThinParticleSystem } from \"./thinParticleSystem\";\r\nimport { Clamp, Lerp, RandomRange } from \"core/Maths/math.scalar.functions\";\r\nimport { TmpVectors, Vector3, Vector4 } from \"core/Maths/math.vector\";\r\n\r\n/** Color */\r\n\r\n/** @internal */\r\nexport function _CreateColorData(particle: Particle, system: ThinParticleSystem) {\r\n const step = RandomRange(0, 1.0);\r\n\r\n Color4.LerpToRef(system.color1, system.color2, step, particle.color);\r\n\r\n system.colorDead.subtractToRef(particle.color, system._colorDiff);\r\n system._colorDiff.scaleToRef(1.0 / particle.lifeTime, particle.colorStep);\r\n}\r\n\r\n/** @internal */\r\nexport function _CreateColorGradientsData(particle: Particle, system: ThinParticleSystem) {\r\n particle._currentColorGradient = system._colorGradients![0];\r\n particle._currentColorGradient.getColorToRef(particle.color);\r\n particle._currentColor1.copyFrom(particle.color);\r\n\r\n if (system._colorGradients!.length > 1) {\r\n system._colorGradients![1].getColorToRef(particle._currentColor2);\r\n } else {\r\n particle._currentColor2.copyFrom(particle.color);\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport function _ProcessColorGradients(particle: Particle, system: ThinParticleSystem) {\r\n const colorGradients = system._colorGradients;\r\n GradientHelper.GetCurrentGradient(system._ratio, colorGradients!, (currentGradient, nextGradient, scale) => {\r\n if (currentGradient !== particle._currentColorGradient) {\r\n particle._currentColor1.copyFrom(particle._currentColor2);\r\n (<ColorGradient>nextGradient).getColorToRef(particle._currentColor2);\r\n particle._currentColorGradient = <ColorGradient>currentGradient;\r\n }\r\n Color4.LerpToRef(particle._currentColor1, particle._currentColor2, scale, particle.color);\r\n });\r\n}\r\n\r\n/** @internal */\r\nexport function _ProcessColor(particle: Particle, system: ThinParticleSystem) {\r\n particle.colorStep.scaleToRef(system._scaledUpdateSpeed, system._scaledColorStep);\r\n particle.color.addInPlace(system._scaledColorStep);\r\n\r\n if (particle.color.a < 0) {\r\n particle.color.a = 0;\r\n }\r\n}\r\n\r\n/** Angular speed */\r\n\r\n/** @internal */\r\nexport function _ProcessAngularSpeedGradients(particle: Particle, system: ThinParticleSystem) {\r\n GradientHelper.GetCurrentGradient(system._ratio, system._angularSpeedGradients!, (currentGradient, nextGradient, scale) => {\r\n if (currentGradient !== particle._currentAngularSpeedGradient) {\r\n particle._currentAngularSpeed1 = particle._currentAngularSpeed2;\r\n particle._currentAngularSpeed2 = (<FactorGradient>nextGradient).getFactor();\r\n particle._currentAngularSpeedGradient = <FactorGradient>currentGradient;\r\n }\r\n particle.angularSpeed = Lerp(particle._currentAngularSpeed1, particle._currentAngularSpeed2, scale);\r\n });\r\n}\r\n\r\n/** @internal */\r\nexport function _ProcessAngularSpeed(particle: Particle, system: ThinParticleSystem) {\r\n particle.angle += particle.angularSpeed * system._scaledUpdateSpeed;\r\n}\r\n\r\n/** Velocity & direction */\r\n\r\n/** @internal */\r\nexport function _CreateDirectionData(particle: Particle, system: ThinParticleSystem) {\r\n system.particleEmitterType.startDirectionFunction(system._emitterWorldMatrix, particle.direction, particle, system.isLocal, system._emitterInverseWorldMatrix);\r\n}\r\n\r\n/** @internal */\r\nexport function _CreateCustomDirectionData(particle: Particle, system: ThinParticleSystem) {\r\n system.startDirectionFunction!(system._emitterWorldMatrix, particle.direction, particle, system.isLocal);\r\n}\r\n\r\n/** @internal */\r\nexport function _CreateVelocityGradients(particle: Particle, system: ThinParticleSystem) {\r\n particle._currentVelocityGradient = system._velocityGradients![0];\r\n particle._currentVelocity1 = particle._currentVelocityGradient.getFactor();\r\n\r\n if (system._velocityGradients!.length > 1) {\r\n particle._currentVelocity2 = system._velocityGradients![1].getFactor();\r\n } else {\r\n particle._currentVelocity2 = particle._currentVelocity1;\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport function _CreateLimitVelocityGradients(particle: Particle, system: ThinParticleSystem) {\r\n particle._currentLimitVelocityGradient = system._limitVelocityGradients![0];\r\n particle._currentLimitVelocity1 = particle._currentLimitVelocityGradient.getFactor();\r\n\r\n if (system._limitVelocityGradients!.length > 1) {\r\n particle._currentLimitVelocity2 = system._limitVelocityGradients![1].getFactor();\r\n } else {\r\n particle._currentLimitVelocity2 = particle._currentLimitVelocity1;\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport function _ProcessVelocityGradients(particle: Particle, system: ThinParticleSystem) {\r\n GradientHelper.GetCurrentGradient(system._ratio, system._velocityGradients!, (currentGradient, nextGradient, scale) => {\r\n if (currentGradient !== particle._currentVelocityGradient) {\r\n particle._currentVelocity1 = particle._currentVelocity2;\r\n particle._currentVelocity2 = (<FactorGradient>nextGradient).getFactor();\r\n particle._currentVelocityGradient = <FactorGradient>currentGradient;\r\n }\r\n system._directionScale *= Lerp(particle._currentVelocity1, particle._currentVelocity2, scale);\r\n });\r\n}\r\n\r\n/** @internal */\r\nexport function _ProcessLimitVelocityGradients(particle: Particle, system: ThinParticleSystem) {\r\n GradientHelper.GetCurrentGradient(system._ratio, system._limitVelocityGradients!, (currentGradient, nextGradient, scale) => {\r\n if (currentGradient !== particle._currentLimitVelocityGradient) {\r\n particle._currentLimitVelocity1 = particle._currentLimitVelocity2;\r\n particle._currentLimitVelocity2 = (<FactorGradient>nextGradient).getFactor();\r\n particle._currentLimitVelocityGradient = <FactorGradient>currentGradient;\r\n }\r\n\r\n const limitVelocity = Lerp(particle._currentLimitVelocity1, particle._currentLimitVelocity2, scale);\r\n const currentVelocity = particle.direction.length();\r\n\r\n if (currentVelocity > limitVelocity) {\r\n particle.direction.scaleInPlace(system.limitVelocityDamping);\r\n }\r\n });\r\n}\r\n\r\n/** @internal */\r\nexport function _ProcessDirection(particle: Particle, system: ThinParticleSystem) {\r\n particle.direction.scaleToRef(system._directionScale, system._scaledDirection);\r\n}\r\n\r\n/** Position */\r\n\r\n/** @internal */\r\nexport function _CreatePositionData(particle: Particle, system: ThinParticleSystem) {\r\n system.particleEmitterType.startPositionFunction(system._emitterWorldMatrix, particle.position, particle, system.isLocal);\r\n}\r\n\r\n/** @internal */\r\nexport function _CreateCustomPositionData(particle: Particle, system: ThinParticleSystem) {\r\n system.startPositionFunction!(system._emitterWorldMatrix, particle.position, particle, system.isLocal);\r\n}\r\n\r\n/** @internal */\r\nexport function _CreateIsLocalData(particle: Particle, system: ThinParticleSystem) {\r\n if (!particle._localPosition) {\r\n particle._localPosition = particle.position.clone();\r\n } else {\r\n particle._localPosition.copyFrom(particle.position);\r\n }\r\n Vector3.TransformCoordinatesToRef(particle._localPosition!, system._emitterWorldMatrix, particle.position);\r\n}\r\n\r\n/** @internal */\r\nexport function _ProcessPosition(particle: Particle, system: ThinParticleSystem) {\r\n if (system.isLocal && particle._localPosition) {\r\n particle._localPosition!.addInPlace(system._scaledDirection);\r\n Vector3.TransformCoordinatesToRef(particle._localPosition!, system._emitterWorldMatrix, particle.position);\r\n } else {\r\n particle.position.addInPlace(system._scaledDirection);\r\n }\r\n}\r\n\r\n/** Drag */\r\n\r\n/** @internal */\r\nexport function _CreateDragData(particle: Particle, system: ThinParticleSystem) {\r\n particle._currentDragGradient = system._dragGradients![0];\r\n particle._currentDrag1 = particle._currentDragGradient.getFactor();\r\n\r\n if (system._dragGradients!.length > 1) {\r\n particle._currentDrag2 = system._dragGradients![1].getFactor();\r\n } else {\r\n particle._currentDrag2 = particle._currentDrag1;\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport function _ProcessDragGradients(particle: Particle, system: ThinParticleSystem) {\r\n GradientHelper.GetCurrentGradient(system._ratio, system._dragGradients!, (currentGradient, nextGradient, scale) => {\r\n if (currentGradient !== particle._currentDragGradient) {\r\n particle._currentDrag1 = particle._currentDrag2;\r\n particle._currentDrag2 = (<FactorGradient>nextGradient).getFactor();\r\n particle._currentDragGradient = <FactorGradient>currentGradient;\r\n }\r\n\r\n const drag = Lerp(particle._currentDrag1, particle._currentDrag2, scale);\r\n\r\n system._scaledDirection.scaleInPlace(1.0 - drag);\r\n });\r\n}\r\n\r\n/** Noise */\r\n\r\n/** @internal */\r\nexport function _CreateNoiseData(particle: Particle, system: ThinParticleSystem) {\r\n if (particle._randomNoiseCoordinates1) {\r\n particle._randomNoiseCoordinates1.copyFromFloats(Math.random(), Math.random(), Math.random());\r\n particle._randomNoiseCoordinates2.copyFromFloats(Math.random(), Math.random(), Math.random());\r\n } else {\r\n particle._randomNoiseCoordinates1 = new Vector3(Math.random(), Math.random(), Math.random());\r\n particle._randomNoiseCoordinates2 = new Vector3(Math.random(), Math.random(), Math.random());\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport function _ProcessNoise(particle: Particle, system: ThinParticleSystem) {\r\n const noiseTextureData = system._noiseTextureData;\r\n const noiseTextureSize = system._noiseTextureSize;\r\n\r\n if (noiseTextureData && noiseTextureSize && particle._randomNoiseCoordinates1) {\r\n const fetchedColorR = system._fetchR(\r\n particle._randomNoiseCoordinates1.x,\r\n particle._randomNoiseCoordinates1.y,\r\n noiseTextureSize.width,\r\n noiseTextureSize.height,\r\n noiseTextureData\r\n );\r\n const fetchedColorG = system._fetchR(\r\n particle._randomNoiseCoordinates1.z,\r\n particle._randomNoiseCoordinates2.x,\r\n noiseTextureSize.width,\r\n noiseTextureSize.height,\r\n noiseTextureData\r\n );\r\n const fetchedColorB = system._fetchR(\r\n particle._randomNoiseCoordinates2.y,\r\n particle._randomNoiseCoordinates2.z,\r\n noiseTextureSize.width,\r\n noiseTextureSize.height,\r\n noiseTextureData\r\n );\r\n\r\n const force = TmpVectors.Vector3[0];\r\n const scaledForce = TmpVectors.Vector3[1];\r\n\r\n force.copyFromFloats((2 * fetchedColorR - 1) * system.noiseStrength.x, (2 * fetchedColorG - 1) * system.noiseStrength.y, (2 * fetchedColorB - 1) * system.noiseStrength.z);\r\n\r\n force.scaleToRef(system._tempScaledUpdateSpeed, scaledForce);\r\n particle.direction.addInPlace(scaledForce);\r\n }\r\n}\r\n\r\n/** Gravity */\r\n\r\n/** @internal */\r\nexport function _ProcessGravity(particle: Particle, system: ThinParticleSystem) {\r\n system.gravity.scaleToRef(system._tempScaledUpdateSpeed, system._scaledGravity);\r\n particle.direction.addInPlace(system._scaledGravity);\r\n}\r\n\r\n/** Size */\r\n\r\n/** @internal */\r\nexport function _CreateSizeData(particle: Particle, system: ThinParticleSystem) {\r\n particle.size = RandomRange(system.minSize, system.maxSize);\r\n particle.scale.copyFromFloats(RandomRange(system.minScaleX, system.maxScaleX), RandomRange(system.minScaleY, system.maxScaleY));\r\n}\r\n\r\n/** @internal */\r\nexport function _CreateSizeGradientsData(particle: Particle, system: ThinParticleSystem) {\r\n particle._currentSizeGradient = system._sizeGradients![0];\r\n particle._currentSize1 = particle._currentSizeGradient.getFactor();\r\n particle.size = particle._currentSize1;\r\n\r\n if (system._sizeGradients!.length > 1) {\r\n particle._currentSize2 = system._sizeGradients![1].getFactor();\r\n } else {\r\n particle._currentSize2 = particle._currentSize1;\r\n }\r\n\r\n particle.scale.copyFromFloats(RandomRange(system.minScaleX, system.maxScaleX), RandomRange(system.minScaleY, system.maxScaleY));\r\n}\r\n\r\n/** @internal */\r\nexport function _CreateStartSizeGradientsData(particle: Particle, system: ThinParticleSystem) {\r\n const ratio = system._actualFrame / system.targetStopDuration;\r\n GradientHelper.GetCurrentGradient(ratio, system._startSizeGradients!, (currentGradient, nextGradient, scale) => {\r\n if (currentGradient !== system._currentStartSizeGradient) {\r\n system._currentStartSize1 = system._currentStartSize2;\r\n system._currentStartSize2 = (<FactorGradient>nextGradient).getFactor();\r\n system._currentStartSizeGradient = <FactorGradient>currentGradient;\r\n }\r\n\r\n const value = Lerp(system._currentStartSize1, system._currentStartSize2, scale);\r\n particle.scale.scaleInPlace(value);\r\n });\r\n}\r\n\r\n/** @internal */\r\nexport function _ProcessSizeGradients(particle: Particle, system: ThinParticleSystem) {\r\n GradientHelper.GetCurrentGradient(system._ratio, system._sizeGradients!, (currentGradient, nextGradient, scale) => {\r\n if (currentGradient !== particle._currentSizeGradient) {\r\n particle._currentSize1 = particle._currentSize2;\r\n particle._currentSize2 = (<FactorGradient>nextGradient).getFactor();\r\n particle._currentSizeGradient = <FactorGradient>currentGradient;\r\n }\r\n particle.size = Lerp(particle._currentSize1, particle._currentSize2, scale);\r\n });\r\n}\r\n\r\n/** Ramp */\r\n\r\n/** @internal */\r\nexport function _CreateRampData(particle: Particle, system: ThinParticleSystem) {\r\n particle.remapData = new Vector4(0, 1, 0, 1);\r\n}\r\n\r\n/** Remap */\r\n\r\n/** @internal */\r\nexport function _ProcessRemapGradients(particle: Particle, system: ThinParticleSystem) {\r\n if (system._colorRemapGradients && system._colorRemapGradients.length > 0) {\r\n GradientHelper.GetCurrentGradient(system._ratio, system._colorRemapGradients, (currentGradient, nextGradient, scale) => {\r\n const min = Lerp((<FactorGradient>currentGradient).factor1, (<FactorGradient>nextGradient).factor1, scale);\r\n const max = Lerp((<FactorGradient>currentGradient).factor2!, (<FactorGradient>nextGradient).factor2!, scale);\r\n\r\n particle.remapData.x = min;\r\n particle.remapData.y = max - min;\r\n });\r\n }\r\n\r\n if (system._alphaRemapGradients && system._alphaRemapGradients.length > 0) {\r\n GradientHelper.GetCurrentGradient(system._ratio, system._alphaRemapGradients, (currentGradient, nextGradient, scale) => {\r\n const min = Lerp((<FactorGradient>currentGradient).factor1, (<FactorGradient>nextGradient).factor1, scale);\r\n const max = Lerp((<FactorGradient>currentGradient).factor2!, (<FactorGradient>nextGradient).factor2!, scale);\r\n\r\n particle.remapData.z = min;\r\n particle.remapData.w = max - min;\r\n });\r\n }\r\n}\r\n\r\n/** Life */\r\n\r\n/** @internal */\r\nexport function _CreateLifeGradientsData(particle: Particle, system: ThinParticleSystem) {\r\n const ratio = Clamp(system._actualFrame / system.targetStopDuration);\r\n GradientHelper.GetCurrentGradient(ratio, system._lifeTimeGradients!, (currentGradient, nextGradient) => {\r\n const factorGradient1 = <FactorGradient>currentGradient;\r\n const factorGradient2 = <FactorGradient>nextGradient;\r\n const lifeTime1 = factorGradient1.getFactor();\r\n const lifeTime2 = factorGradient2.getFactor();\r\n const gradient = (ratio - factorGradient1.gradient) / (factorGradient2.gradient - factorGradient1.gradient);\r\n particle.lifeTime = Lerp(lifeTime1, lifeTime2, gradient);\r\n });\r\n system._emitPower = RandomRange(system.minEmitPower, system.maxEmitPower);\r\n}\r\n\r\n/** @internal */\r\nexport function _CreateLifetimeData(particle: Particle, system: ThinParticleSystem) {\r\n particle.lifeTime = RandomRange(system.minLifeTime, system.maxLifeTime);\r\n system._emitPower = RandomRange(system.minEmitPower, system.maxEmitPower);\r\n}\r\n\r\n/** Emit power */\r\n\r\n/** @internal */\r\nexport function _CreateEmitPowerData(particle: Particle, system: ThinParticleSystem) {\r\n if (system._emitPower === 0) {\r\n if (!particle._initialDirection) {\r\n particle._initialDirection = particle.direction.clone();\r\n } else {\r\n particle._initialDirection.copyFrom(particle.direction);\r\n }\r\n particle.direction.set(0, 0, 0);\r\n } else {\r\n particle._initialDirection = null;\r\n particle.direction.scaleInPlace(system._emitPower);\r\n }\r\n\r\n // Inherited Velocity\r\n particle.direction.addInPlace(system._inheritedVelocityOffset);\r\n}\r\n\r\n/** Angle */\r\n\r\n/** @internal */\r\nexport function _CreateAngleData(particle: Particle, system: ThinParticleSystem) {\r\n particle.angularSpeed = RandomRange(system.minAngularSpeed, system.maxAngularSpeed);\r\n particle.angle = RandomRange(system.minInitialRotation, system.maxInitialRotation);\r\n}\r\n\r\n/** @internal */\r\nexport function _CreateAngleGradientsData(particle: Particle, system: ThinParticleSystem) {\r\n particle._currentAngularSpeedGradient = system._angularSpeedGradients![0];\r\n particle.angularSpeed = particle._currentAngularSpeedGradient.getFactor();\r\n particle._currentAngularSpeed1 = particle.angularSpeed;\r\n\r\n if (system._angularSpeedGradients!.length > 1) {\r\n particle._currentAngularSpeed2 = system._angularSpeedGradients![1].getFactor();\r\n } else {\r\n particle._currentAngularSpeed2 = particle._currentAngularSpeed1;\r\n }\r\n particle.angle = RandomRange(system.minInitialRotation, system.maxInitialRotation);\r\n}\r\n\r\n/** Sheet */\r\n\r\n/** @internal */\r\nexport function _CreateSheetData(particle: Particle, system: ThinParticleSystem) {\r\n particle._initialStartSpriteCellID = system.startSpriteCellID;\r\n particle._initialEndSpriteCellID = system.endSpriteCellID;\r\n particle._initialSpriteCellLoop = system.spriteCellLoop;\r\n}\r\n"]}