@babylonjs/core 8.23.0 → 8.23.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.
- package/Bones/skeleton.d.ts +4 -0
- package/Bones/skeleton.js +12 -0
- package/Bones/skeleton.js.map +1 -1
- package/Buffers/storageBuffer.d.ts +6 -0
- package/Buffers/storageBuffer.js +8 -0
- package/Buffers/storageBuffer.js.map +1 -1
- package/Engines/Extensions/engine.multiRender.d.ts +2 -1
- package/Engines/Extensions/engine.multiRender.js +12 -7
- package/Engines/Extensions/engine.multiRender.js.map +1 -1
- package/Engines/WebGPU/Extensions/engine.multiRender.d.ts +2 -1
- package/Engines/WebGPU/Extensions/engine.multiRender.js +12 -7
- package/Engines/WebGPU/Extensions/engine.multiRender.js.map +1 -1
- package/Engines/WebGPU/webgpuDrawContext.d.ts +6 -0
- package/Engines/WebGPU/webgpuDrawContext.js +9 -0
- package/Engines/WebGPU/webgpuDrawContext.js.map +1 -1
- package/Engines/abstractEngine.js +2 -2
- package/Engines/abstractEngine.js.map +1 -1
- package/Engines/engineCapabilities.d.ts +4 -0
- package/Engines/engineCapabilities.js.map +1 -1
- package/Engines/nativeEngine.js +2 -0
- package/Engines/nativeEngine.js.map +1 -1
- package/Engines/nullEngine.js +2 -0
- package/Engines/nullEngine.js.map +1 -1
- package/Engines/thinEngine.js +15 -0
- package/Engines/thinEngine.js.map +1 -1
- package/Engines/webgpuEngine.d.ts +7 -0
- package/Engines/webgpuEngine.js +12 -1
- package/Engines/webgpuEngine.js.map +1 -1
- package/FrameGraph/Node/Blocks/Rendering/baseObjectRendererBlock.d.ts +12 -0
- package/FrameGraph/Node/Blocks/Rendering/baseObjectRendererBlock.js +52 -0
- package/FrameGraph/Node/Blocks/Rendering/baseObjectRendererBlock.js.map +1 -1
- package/FrameGraph/Node/Blocks/Rendering/geometryRendererBlock.js +0 -3
- package/FrameGraph/Node/Blocks/Rendering/geometryRendererBlock.js.map +1 -1
- package/FrameGraph/Node/nodeRenderGraph.js +7 -2
- package/FrameGraph/Node/nodeRenderGraph.js.map +1 -1
- package/FrameGraph/Tasks/Layers/baseLayerTask.js +1 -1
- package/FrameGraph/Tasks/Layers/baseLayerTask.js.map +1 -1
- package/FrameGraph/Tasks/Misc/cullObjectsTask.js +11 -2
- package/FrameGraph/Tasks/Misc/cullObjectsTask.js.map +1 -1
- package/FrameGraph/Tasks/Rendering/geometryRendererTask.js +6 -6
- package/FrameGraph/Tasks/Rendering/geometryRendererTask.js.map +1 -1
- package/FrameGraph/Tasks/Rendering/objectRendererTask.d.ts +27 -1
- package/FrameGraph/Tasks/Rendering/objectRendererTask.js +76 -8
- package/FrameGraph/Tasks/Rendering/objectRendererTask.js.map +1 -1
- package/FrameGraph/Tasks/Texture/clearTextureTask.js +2 -1
- package/FrameGraph/Tasks/Texture/clearTextureTask.js.map +1 -1
- package/FrameGraph/frameGraph.js +0 -7
- package/FrameGraph/frameGraph.js.map +1 -1
- package/FrameGraph/frameGraphRenderTarget.js +1 -1
- package/FrameGraph/frameGraphRenderTarget.js.map +1 -1
- package/Lights/Clustered/clusteredLightContainer.d.ts +90 -0
- package/Lights/Clustered/clusteredLightContainer.js +401 -0
- package/Lights/Clustered/clusteredLightContainer.js.map +1 -0
- package/Lights/Clustered/clusteredLightingSceneComponent.d.ts +34 -0
- package/Lights/Clustered/clusteredLightingSceneComponent.js +47 -0
- package/Lights/Clustered/clusteredLightingSceneComponent.js.map +1 -0
- package/Lights/Clustered/index.d.ts +6 -0
- package/Lights/Clustered/index.js +7 -0
- package/Lights/Clustered/index.js.map +1 -0
- package/Lights/Shadows/shadowGenerator.js +9 -8
- package/Lights/Shadows/shadowGenerator.js.map +1 -1
- package/Lights/index.d.ts +1 -0
- package/Lights/index.js +1 -0
- package/Lights/index.js.map +1 -1
- package/Lights/light.d.ts +2 -1
- package/Lights/light.js +2 -1
- package/Lights/light.js.map +1 -1
- package/Lights/lightConstants.d.ts +4 -0
- package/Lights/lightConstants.js +4 -0
- package/Lights/lightConstants.js.map +1 -1
- package/Lights/spotLight.d.ts +6 -3
- package/Lights/spotLight.js.map +1 -1
- package/Materials/PBR/pbrBaseMaterial.js +1 -1
- package/Materials/PBR/pbrBaseMaterial.js.map +1 -1
- package/Materials/materialHelper.functions.d.ts +2 -1
- package/Materials/materialHelper.functions.js +9 -3
- package/Materials/materialHelper.functions.js.map +1 -1
- package/Materials/standardMaterial.js +2 -2
- package/Materials/standardMaterial.js.map +1 -1
- package/Materials/uniformBuffer.d.ts +1 -1
- package/Materials/uniformBuffer.js +2 -2
- package/Materials/uniformBuffer.js.map +1 -1
- package/Meshes/abstractMesh.d.ts +4 -0
- package/Meshes/abstractMesh.js +4 -0
- package/Meshes/abstractMesh.js.map +1 -1
- package/Meshes/csg2.js +1 -1
- package/Meshes/csg2.js.map +1 -1
- package/Meshes/geometry.js +1 -1
- package/Meshes/geometry.js.map +1 -1
- package/Meshes/mesh.js +2 -7
- package/Meshes/mesh.js.map +1 -1
- package/Misc/dumpTools.d.ts +1 -1
- package/Misc/dumpTools.js +23 -14
- package/Misc/dumpTools.js.map +1 -1
- package/Misc/fileTools.js +7 -0
- package/Misc/fileTools.js.map +1 -1
- package/Misc/index.d.ts +1 -0
- package/Misc/index.js +1 -0
- package/Misc/index.js.map +1 -1
- package/Misc/lazy.d.ts +16 -0
- package/Misc/lazy.js +25 -0
- package/Misc/lazy.js.map +1 -0
- package/Morph/morphTargetManager.d.ts +4 -0
- package/Morph/morphTargetManager.js +12 -0
- package/Morph/morphTargetManager.js.map +1 -1
- package/Particles/Node/Blocks/Emitters/createParticleBlock.d.ts +4 -0
- package/Particles/Node/Blocks/Emitters/createParticleBlock.js +13 -2
- package/Particles/Node/Blocks/Emitters/createParticleBlock.js.map +1 -1
- package/Particles/Node/Blocks/Emitters/meshShapeBlock.d.ts +4 -0
- package/Particles/Node/Blocks/Emitters/meshShapeBlock.js +18 -0
- package/Particles/Node/Blocks/Emitters/meshShapeBlock.js.map +1 -1
- package/Particles/Node/Blocks/Update/basicColorUpdateBlock.d.ts +31 -0
- package/Particles/Node/Blocks/Update/basicColorUpdateBlock.js +67 -0
- package/Particles/Node/Blocks/Update/basicColorUpdateBlock.js.map +1 -0
- package/Particles/Node/Blocks/index.d.ts +1 -0
- package/Particles/Node/Blocks/index.js +1 -0
- package/Particles/Node/Blocks/index.js.map +1 -1
- package/Particles/Node/Blocks/particleInputBlock.js +2 -0
- package/Particles/Node/Blocks/particleInputBlock.js.map +1 -1
- package/Particles/Node/Blocks/particleSourceTextureBlock.d.ts +2 -2
- package/Particles/Node/Blocks/particleSourceTextureBlock.js +3 -3
- package/Particles/Node/Blocks/particleSourceTextureBlock.js.map +1 -1
- package/Particles/Node/Enums/nodeParticleContextualSources.d.ts +5 -1
- package/Particles/Node/Enums/nodeParticleContextualSources.js +4 -0
- package/Particles/Node/Enums/nodeParticleContextualSources.js.map +1 -1
- package/Particles/Node/nodeParticleBuildState.js +4 -0
- package/Particles/Node/nodeParticleBuildState.js.map +1 -1
- package/Particles/Node/nodeParticleSystemSet.helper.d.ts +2 -1
- package/Particles/Node/nodeParticleSystemSet.helper.js +88 -61
- package/Particles/Node/nodeParticleSystemSet.helper.js.map +1 -1
- package/Particles/gpuParticleSystem.d.ts +4 -0
- package/Particles/gpuParticleSystem.js +10 -0
- package/Particles/gpuParticleSystem.js.map +1 -1
- package/Particles/particle.d.ts +4 -0
- package/Particles/particle.js +5 -0
- package/Particles/particle.js.map +1 -1
- package/Particles/particleSystem.d.ts +4 -0
- package/Particles/particleSystem.js +10 -0
- package/Particles/particleSystem.js.map +1 -1
- package/Rendering/objectRenderer.d.ts +17 -3
- package/Rendering/objectRenderer.js +111 -26
- package/Rendering/objectRenderer.js.map +1 -1
- package/Shaders/ShadersInclude/clusteredLightingFunctions.d.ts +5 -0
- package/Shaders/ShadersInclude/clusteredLightingFunctions.js +18 -0
- package/Shaders/ShadersInclude/clusteredLightingFunctions.js.map +1 -0
- package/Shaders/ShadersInclude/helperFunctions.js +5 -1
- package/Shaders/ShadersInclude/helperFunctions.js.map +1 -1
- package/Shaders/ShadersInclude/lightFragment.js +33 -1
- package/Shaders/ShadersInclude/lightFragment.js.map +1 -1
- package/Shaders/ShadersInclude/lightFragmentDeclaration.js +3 -0
- package/Shaders/ShadersInclude/lightFragmentDeclaration.js.map +1 -1
- package/Shaders/ShadersInclude/lightUboDeclaration.js +5 -0
- package/Shaders/ShadersInclude/lightUboDeclaration.js.map +1 -1
- package/Shaders/ShadersInclude/lightVxUboDeclaration.js +2 -0
- package/Shaders/ShadersInclude/lightVxUboDeclaration.js.map +1 -1
- package/Shaders/ShadersInclude/lightsFragmentFunctions.d.ts +1 -0
- package/Shaders/ShadersInclude/lightsFragmentFunctions.js +20 -0
- package/Shaders/ShadersInclude/lightsFragmentFunctions.js.map +1 -1
- package/Shaders/ShadersInclude/pbrBlockPrePass.js +3 -1
- package/Shaders/ShadersInclude/pbrBlockPrePass.js.map +1 -1
- package/Shaders/ShadersInclude/pbrClusteredLightingFunctions.d.ts +7 -0
- package/Shaders/ShadersInclude/pbrClusteredLightingFunctions.js +125 -0
- package/Shaders/ShadersInclude/pbrClusteredLightingFunctions.js.map +1 -0
- package/Shaders/default.fragment.js +2 -0
- package/Shaders/default.fragment.js.map +1 -1
- package/Shaders/lightProxy.fragment.d.ts +5 -0
- package/Shaders/lightProxy.fragment.js +13 -0
- package/Shaders/lightProxy.fragment.js.map +1 -0
- package/Shaders/lightProxy.vertex.d.ts +8 -0
- package/Shaders/lightProxy.vertex.js +19 -0
- package/Shaders/lightProxy.vertex.js.map +1 -0
- package/Shaders/pbr.fragment.d.ts +1 -0
- package/Shaders/pbr.fragment.js +4 -0
- package/Shaders/pbr.fragment.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/clusteredLightingFunctions.d.ts +5 -0
- package/ShadersWGSL/ShadersInclude/clusteredLightingFunctions.js +23 -0
- package/ShadersWGSL/ShadersInclude/clusteredLightingFunctions.js.map +1 -0
- package/ShadersWGSL/ShadersInclude/lightFragment.js +33 -1
- package/ShadersWGSL/ShadersInclude/lightFragment.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/lightUboDeclaration.js +5 -0
- package/ShadersWGSL/ShadersInclude/lightUboDeclaration.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/lightVxUboDeclaration.js +2 -0
- package/ShadersWGSL/ShadersInclude/lightVxUboDeclaration.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/lightsFragmentFunctions.d.ts +1 -0
- package/ShadersWGSL/ShadersInclude/lightsFragmentFunctions.js +21 -1
- package/ShadersWGSL/ShadersInclude/lightsFragmentFunctions.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/pbrBlockPrePass.js +3 -1
- package/ShadersWGSL/ShadersInclude/pbrBlockPrePass.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/pbrDirectLightingFunctions.d.ts +2 -0
- package/ShadersWGSL/ShadersInclude/pbrDirectLightingFunctions.js +114 -0
- package/ShadersWGSL/ShadersInclude/pbrDirectLightingFunctions.js.map +1 -1
- package/ShadersWGSL/default.fragment.js +2 -0
- package/ShadersWGSL/default.fragment.js.map +1 -1
- package/ShadersWGSL/lightProxy.fragment.d.ts +5 -0
- package/ShadersWGSL/lightProxy.fragment.js +13 -0
- package/ShadersWGSL/lightProxy.fragment.js.map +1 -0
- package/ShadersWGSL/lightProxy.vertex.d.ts +7 -0
- package/ShadersWGSL/lightProxy.vertex.js +19 -0
- package/ShadersWGSL/lightProxy.vertex.js.map +1 -0
- package/package.json +1 -1
- package/scene.d.ts +1 -0
- package/scene.js +140 -30
- package/scene.js.map +1 -1
- package/sceneComponent.d.ts +2 -0
- package/sceneComponent.js +2 -0
- package/sceneComponent.js.map +1 -1
|
@@ -7,84 +7,111 @@ import { PointShapeBlock } from "./Blocks/Emitters/pointShapeBlock.js";
|
|
|
7
7
|
import { SphereShapeBlock } from "./Blocks/Emitters/sphereShapeBlock.js";
|
|
8
8
|
import { CylinderShapeBlock } from "./Blocks/Emitters/cylinderShapeBlock.js";
|
|
9
9
|
import { MeshShapeBlock } from "./Blocks/Emitters/meshShapeBlock.js";
|
|
10
|
+
import { ParticleTextureSourceBlock } from "./Blocks/particleSourceTextureBlock.js";
|
|
11
|
+
import { BasicPositionUpdateBlock } from "./Blocks/Update/basicPositionUpdateBlock.js";
|
|
12
|
+
import { BasicColorUpdateBlock } from "./Blocks/Update/basicColorUpdateBlock.js";
|
|
10
13
|
function _CreateAndConnectInput(connectionPoint, name, defaultValue) {
|
|
11
14
|
const input = new ParticleInputBlock(name);
|
|
12
15
|
input.value = defaultValue;
|
|
13
16
|
input.output.connectTo(connectionPoint);
|
|
14
17
|
}
|
|
18
|
+
async function _ExtractDatafromParticleSystemAsync(particleSystem, target) {
|
|
19
|
+
// Main system
|
|
20
|
+
const system = new SystemBlock(particleSystem.name);
|
|
21
|
+
// Create particle
|
|
22
|
+
const createParticleBlock = new CreateParticleBlock("Create particle");
|
|
23
|
+
// Shape
|
|
24
|
+
let shapeBlock = null;
|
|
25
|
+
switch (particleSystem.particleEmitterType.getClassName()) {
|
|
26
|
+
case "BoxParticleEmitter": {
|
|
27
|
+
const source = particleSystem.particleEmitterType;
|
|
28
|
+
shapeBlock = new BoxShapeBlock("Box shape");
|
|
29
|
+
const target = shapeBlock;
|
|
30
|
+
_CreateAndConnectInput(target.direction1, "Direction 1", source.direction1);
|
|
31
|
+
_CreateAndConnectInput(target.direction2, "Direction 2", source.direction2);
|
|
32
|
+
_CreateAndConnectInput(target.minEmitBox, "Min Emit Box", source.minEmitBox);
|
|
33
|
+
_CreateAndConnectInput(target.maxEmitBox, "Max Emit Box", source.maxEmitBox);
|
|
34
|
+
break;
|
|
35
|
+
}
|
|
36
|
+
case "PointParticleEmitter": {
|
|
37
|
+
const source = particleSystem.particleEmitterType;
|
|
38
|
+
shapeBlock = new PointShapeBlock("Point shape");
|
|
39
|
+
const target = shapeBlock;
|
|
40
|
+
_CreateAndConnectInput(target.direction1, "Direction 1", source.direction1);
|
|
41
|
+
_CreateAndConnectInput(target.direction2, "Direction 2", source.direction2);
|
|
42
|
+
break;
|
|
43
|
+
}
|
|
44
|
+
case "SphereParticleEmitter": {
|
|
45
|
+
const source = particleSystem.particleEmitterType;
|
|
46
|
+
shapeBlock = new SphereShapeBlock("Sphere shape");
|
|
47
|
+
const target = shapeBlock;
|
|
48
|
+
_CreateAndConnectInput(target.radius, "Radius", source.radius);
|
|
49
|
+
_CreateAndConnectInput(target.radiusRange, "Radius Range", source.radiusRange);
|
|
50
|
+
_CreateAndConnectInput(target.directionRandomizer, "Direction Randomizer", source.directionRandomizer);
|
|
51
|
+
break;
|
|
52
|
+
}
|
|
53
|
+
case "CylinderParticleEmitter": {
|
|
54
|
+
const source = particleSystem.particleEmitterType;
|
|
55
|
+
shapeBlock = new CylinderShapeBlock("Cylinder shape");
|
|
56
|
+
const target = shapeBlock;
|
|
57
|
+
_CreateAndConnectInput(target.height, "Height", source.height);
|
|
58
|
+
_CreateAndConnectInput(target.radius, "Radius", source.radius);
|
|
59
|
+
_CreateAndConnectInput(target.radiusRange, "Radius Range", source.radiusRange);
|
|
60
|
+
_CreateAndConnectInput(target.directionRandomizer, "Direction Randomizer", source.directionRandomizer);
|
|
61
|
+
break;
|
|
62
|
+
}
|
|
63
|
+
case "MeshParticleEmitter": {
|
|
64
|
+
const source = particleSystem.particleEmitterType;
|
|
65
|
+
shapeBlock = new MeshShapeBlock("Mesh shape");
|
|
66
|
+
const target = shapeBlock;
|
|
67
|
+
_CreateAndConnectInput(target.direction1, "Direction 1", source.direction1);
|
|
68
|
+
_CreateAndConnectInput(target.direction2, "Direction 2", source.direction2);
|
|
69
|
+
target.mesh = source.mesh;
|
|
70
|
+
break;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
if (!shapeBlock) {
|
|
74
|
+
throw new Error(`Unsupported particle emitter type: ${particleSystem.particleEmitterType.getClassName()}`);
|
|
75
|
+
}
|
|
76
|
+
createParticleBlock.particle.connectTo(shapeBlock.particle);
|
|
77
|
+
createParticleBlock.colorDead.value = particleSystem.colorDead;
|
|
78
|
+
// Texture
|
|
79
|
+
const textureBlock = new ParticleTextureSourceBlock("Texture");
|
|
80
|
+
const url = particleSystem.particleTexture.url || "";
|
|
81
|
+
if (url) {
|
|
82
|
+
textureBlock.url = url;
|
|
83
|
+
}
|
|
84
|
+
else {
|
|
85
|
+
textureBlock.sourceTexture = particleSystem.particleTexture;
|
|
86
|
+
}
|
|
87
|
+
textureBlock.texture.connectTo(system.texture);
|
|
88
|
+
// Default position update
|
|
89
|
+
const basicPositionUpdateBlock = new BasicPositionUpdateBlock("Position update");
|
|
90
|
+
shapeBlock.output.connectTo(basicPositionUpdateBlock.particle);
|
|
91
|
+
// Default color update
|
|
92
|
+
const basicColorUpdateBlock = new BasicColorUpdateBlock("Color update");
|
|
93
|
+
basicPositionUpdateBlock.output.connectTo(basicColorUpdateBlock.particle);
|
|
94
|
+
basicColorUpdateBlock.output.connectTo(system.particle);
|
|
95
|
+
// Register
|
|
96
|
+
target.systemBlocks.push(system);
|
|
97
|
+
}
|
|
15
98
|
/**
|
|
16
99
|
* Converts a ParticleSystem to a NodeParticleSystemSet.
|
|
17
100
|
* @param name The name of the node particle system set.
|
|
18
101
|
* @param particleSystems The particle systems to convert.
|
|
19
102
|
* @returns The converted node particle system set or null if conversion failed.
|
|
103
|
+
* #0K3AQ2#3625
|
|
20
104
|
*/
|
|
21
|
-
export function
|
|
105
|
+
export async function ConvertToNodeParticleSystemSetAsync(name, particleSystems) {
|
|
22
106
|
if (!particleSystems || !particleSystems.length) {
|
|
23
107
|
return null;
|
|
24
108
|
}
|
|
25
109
|
const nodeParticleSystemSet = new NodeParticleSystemSet(name);
|
|
110
|
+
const promises = [];
|
|
26
111
|
for (const particleSystem of particleSystems) {
|
|
27
|
-
|
|
28
|
-
const system = new SystemBlock(particleSystem.name);
|
|
29
|
-
// Create particle
|
|
30
|
-
const createParticleBlock = new CreateParticleBlock("Create particle");
|
|
31
|
-
// Shape
|
|
32
|
-
let shapeBlock = null;
|
|
33
|
-
switch (particleSystem.particleEmitterType.getClassName()) {
|
|
34
|
-
case "BoxParticleEmitter": {
|
|
35
|
-
const source = particleSystem.particleEmitterType;
|
|
36
|
-
shapeBlock = new BoxShapeBlock("Box shape");
|
|
37
|
-
const target = shapeBlock;
|
|
38
|
-
_CreateAndConnectInput(target.direction1, "Direction 1", source.direction1);
|
|
39
|
-
_CreateAndConnectInput(target.direction2, "Direction 2", source.direction2);
|
|
40
|
-
_CreateAndConnectInput(target.minEmitBox, "Min Emit Box", source.minEmitBox);
|
|
41
|
-
_CreateAndConnectInput(target.maxEmitBox, "Max Emit Box", source.maxEmitBox);
|
|
42
|
-
break;
|
|
43
|
-
}
|
|
44
|
-
case "PointParticleEmitter": {
|
|
45
|
-
const source = particleSystem.particleEmitterType;
|
|
46
|
-
shapeBlock = new PointShapeBlock("Point shape");
|
|
47
|
-
const target = shapeBlock;
|
|
48
|
-
_CreateAndConnectInput(target.direction1, "Direction 1", source.direction1);
|
|
49
|
-
_CreateAndConnectInput(target.direction2, "Direction 2", source.direction2);
|
|
50
|
-
break;
|
|
51
|
-
}
|
|
52
|
-
case "SphereParticleEmitter": {
|
|
53
|
-
const source = particleSystem.particleEmitterType;
|
|
54
|
-
shapeBlock = new SphereShapeBlock("Sphere shape");
|
|
55
|
-
const target = shapeBlock;
|
|
56
|
-
_CreateAndConnectInput(target.radius, "Radius", source.radius);
|
|
57
|
-
_CreateAndConnectInput(target.radiusRange, "Radius Range", source.radiusRange);
|
|
58
|
-
_CreateAndConnectInput(target.directionRandomizer, "Direction Randomizer", source.directionRandomizer);
|
|
59
|
-
break;
|
|
60
|
-
}
|
|
61
|
-
case "CylinderParticleEmitter": {
|
|
62
|
-
const source = particleSystem.particleEmitterType;
|
|
63
|
-
shapeBlock = new CylinderShapeBlock("Cylinder shape");
|
|
64
|
-
const target = shapeBlock;
|
|
65
|
-
_CreateAndConnectInput(target.height, "Height", source.height);
|
|
66
|
-
_CreateAndConnectInput(target.radius, "Radius", source.radius);
|
|
67
|
-
_CreateAndConnectInput(target.radiusRange, "Radius Range", source.radiusRange);
|
|
68
|
-
_CreateAndConnectInput(target.directionRandomizer, "Direction Randomizer", source.directionRandomizer);
|
|
69
|
-
break;
|
|
70
|
-
}
|
|
71
|
-
case "MeshParticleEmitter": {
|
|
72
|
-
const source = particleSystem.particleEmitterType;
|
|
73
|
-
shapeBlock = new MeshShapeBlock("Mesh shape");
|
|
74
|
-
const target = shapeBlock;
|
|
75
|
-
_CreateAndConnectInput(target.direction1, "Direction 1", source.direction1);
|
|
76
|
-
_CreateAndConnectInput(target.direction2, "Direction 2", source.direction2);
|
|
77
|
-
target.mesh = source.mesh;
|
|
78
|
-
break;
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
if (!shapeBlock) {
|
|
82
|
-
throw new Error(`Unsupported particle emitter type: ${particleSystem.particleEmitterType.getClassName()}`);
|
|
83
|
-
}
|
|
84
|
-
createParticleBlock.particle.connectTo(shapeBlock.particle);
|
|
85
|
-
shapeBlock.output.connectTo(system.particle);
|
|
86
|
-
nodeParticleSystemSet.systemBlocks.push(system);
|
|
112
|
+
promises.push(_ExtractDatafromParticleSystemAsync(particleSystem, nodeParticleSystemSet));
|
|
87
113
|
}
|
|
114
|
+
await Promise.all(promises);
|
|
88
115
|
return nodeParticleSystemSet;
|
|
89
116
|
}
|
|
90
117
|
//# sourceMappingURL=nodeParticleSystemSet.helper.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nodeParticleSystemSet.helper.js","sourceRoot":"","sources":["../../../../../dev/core/src/Particles/Node/nodeParticleSystemSet.helper.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Nullable } from \"core/types\";\r\nimport type { ParticleSystem } from \"../particleSystem\";\r\nimport { NodeParticleSystemSet } from \"./nodeParticleSystemSet\";\r\nimport { SystemBlock } from \"./Blocks/systemBlock\";\r\nimport { CreateParticleBlock } from \"./Blocks/Emitters/createParticleBlock\";\r\nimport { BoxShapeBlock } from \"./Blocks/Emitters/boxShapeBlock\";\r\nimport type { IShapeBlock } from \"./Blocks/Emitters/IShapeBlock\";\r\nimport type { Vector3 } from \"core/Maths/math.vector\";\r\nimport type { NodeParticleConnectionPoint } from \"./nodeParticleBlockConnectionPoint\";\r\nimport type { BoxParticleEmitter } from \"../EmitterTypes/boxParticleEmitter\";\r\nimport type { PointParticleEmitter } from \"../EmitterTypes/pointParticleEmitter\";\r\nimport type { SphereParticleEmitter } from \"../EmitterTypes/sphereParticleEmitter\";\r\nimport type { CylinderParticleEmitter, MeshParticleEmitter } from \"../EmitterTypes\";\r\nimport type { Mesh } from \"core/Meshes/mesh\";\r\nimport { ParticleInputBlock } from \"./Blocks/particleInputBlock\";\r\nimport { PointShapeBlock } from \"./Blocks/Emitters/pointShapeBlock\";\r\nimport { SphereShapeBlock } from \"./Blocks/Emitters/sphereShapeBlock\";\r\nimport { CylinderShapeBlock } from \"./Blocks/Emitters/cylinderShapeBlock\";\r\nimport { MeshShapeBlock } from \"./Blocks/Emitters/meshShapeBlock\";\r\n\r\nfunction _CreateAndConnectInput(connectionPoint: NodeParticleConnectionPoint, name: string, defaultValue: Vector3 | number) {\r\n const input = new ParticleInputBlock(name);\r\n input.value = defaultValue;\r\n input.output.connectTo(connectionPoint);\r\n}\r\n\r\n/**\r\n * Converts a ParticleSystem to a NodeParticleSystemSet.\r\n * @param name The name of the node particle system set.\r\n * @param particleSystems The particle systems to convert.\r\n * @returns The converted node particle system set or null if conversion failed.\r\n */\r\nexport function ConvertToNodeParticleSystemSet(name: string, particleSystems: ParticleSystem[]): Nullable<NodeParticleSystemSet> {\r\n if (!particleSystems || !particleSystems.length) {\r\n return null;\r\n }\r\n\r\n const nodeParticleSystemSet = new NodeParticleSystemSet(name);\r\n\r\n for (const particleSystem of particleSystems) {\r\n // Main system\r\n const system = new SystemBlock(particleSystem.name);\r\n\r\n // Create particle\r\n const createParticleBlock = new CreateParticleBlock(\"Create particle\");\r\n\r\n // Shape\r\n let shapeBlock: Nullable<IShapeBlock> = null;\r\n switch (particleSystem.particleEmitterType.getClassName()) {\r\n case \"BoxParticleEmitter\": {\r\n const source = particleSystem.particleEmitterType as BoxParticleEmitter;\r\n shapeBlock = new BoxShapeBlock(\"Box shape\");\r\n\r\n const target = shapeBlock as BoxShapeBlock;\r\n _CreateAndConnectInput(target.direction1, \"Direction 1\", source.direction1);\r\n _CreateAndConnectInput(target.direction2, \"Direction 2\", source.direction2);\r\n _CreateAndConnectInput(target.minEmitBox, \"Min Emit Box\", source.minEmitBox);\r\n _CreateAndConnectInput(target.maxEmitBox, \"Max Emit Box\", source.maxEmitBox);\r\n break;\r\n }\r\n case \"PointParticleEmitter\": {\r\n const source = particleSystem.particleEmitterType as PointParticleEmitter;\r\n shapeBlock = new PointShapeBlock(\"Point shape\");\r\n\r\n const target = shapeBlock as PointShapeBlock;\r\n _CreateAndConnectInput(target.direction1, \"Direction 1\", source.direction1);\r\n _CreateAndConnectInput(target.direction2, \"Direction 2\", source.direction2);\r\n break;\r\n }\r\n case \"SphereParticleEmitter\": {\r\n const source = particleSystem.particleEmitterType as SphereParticleEmitter;\r\n shapeBlock = new SphereShapeBlock(\"Sphere shape\");\r\n\r\n const target = shapeBlock as SphereShapeBlock;\r\n _CreateAndConnectInput(target.radius, \"Radius\", source.radius);\r\n _CreateAndConnectInput(target.radiusRange, \"Radius Range\", source.radiusRange);\r\n _CreateAndConnectInput(target.directionRandomizer, \"Direction Randomizer\", source.directionRandomizer);\r\n break;\r\n }\r\n case \"CylinderParticleEmitter\": {\r\n const source = particleSystem.particleEmitterType as CylinderParticleEmitter;\r\n shapeBlock = new CylinderShapeBlock(\"Cylinder shape\");\r\n\r\n const target = shapeBlock as CylinderShapeBlock;\r\n _CreateAndConnectInput(target.height, \"Height\", source.height);\r\n _CreateAndConnectInput(target.radius, \"Radius\", source.radius);\r\n _CreateAndConnectInput(target.radiusRange, \"Radius Range\", source.radiusRange);\r\n _CreateAndConnectInput(target.directionRandomizer, \"Direction Randomizer\", source.directionRandomizer);\r\n break;\r\n }\r\n case \"MeshParticleEmitter\": {\r\n const source = particleSystem.particleEmitterType as MeshParticleEmitter;\r\n shapeBlock = new MeshShapeBlock(\"Mesh shape\");\r\n\r\n const target = shapeBlock as MeshShapeBlock;\r\n _CreateAndConnectInput(target.direction1, \"Direction 1\", source.direction1);\r\n _CreateAndConnectInput(target.direction2, \"Direction 2\", source.direction2);\r\n\r\n target.mesh = source.mesh as Mesh;\r\n break;\r\n }\r\n }\r\n\r\n if (!shapeBlock) {\r\n throw new Error(`Unsupported particle emitter type: ${particleSystem.particleEmitterType.getClassName()}`);\r\n }\r\n\r\n createParticleBlock.particle.connectTo(shapeBlock.particle);\r\n shapeBlock.output.connectTo(system.particle);\r\n\r\n nodeParticleSystemSet.systemBlocks.push(system);\r\n }\r\n\r\n return nodeParticleSystemSet;\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"nodeParticleSystemSet.helper.js","sourceRoot":"","sources":["../../../../../dev/core/src/Particles/Node/nodeParticleSystemSet.helper.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Nullable } from \"core/types\";\r\nimport type { ParticleSystem } from \"../particleSystem\";\r\nimport { NodeParticleSystemSet } from \"./nodeParticleSystemSet\";\r\nimport { SystemBlock } from \"./Blocks/systemBlock\";\r\nimport { CreateParticleBlock } from \"./Blocks/Emitters/createParticleBlock\";\r\nimport { BoxShapeBlock } from \"./Blocks/Emitters/boxShapeBlock\";\r\nimport type { IShapeBlock } from \"./Blocks/Emitters/IShapeBlock\";\r\nimport type { Vector3 } from \"core/Maths/math.vector\";\r\nimport type { NodeParticleConnectionPoint } from \"./nodeParticleBlockConnectionPoint\";\r\nimport type { BoxParticleEmitter } from \"../EmitterTypes/boxParticleEmitter\";\r\nimport type { PointParticleEmitter } from \"../EmitterTypes/pointParticleEmitter\";\r\nimport type { SphereParticleEmitter } from \"../EmitterTypes/sphereParticleEmitter\";\r\nimport type { CylinderParticleEmitter, MeshParticleEmitter } from \"../EmitterTypes\";\r\nimport type { Mesh } from \"core/Meshes/mesh\";\r\nimport { ParticleInputBlock } from \"./Blocks/particleInputBlock\";\r\nimport { PointShapeBlock } from \"./Blocks/Emitters/pointShapeBlock\";\r\nimport { SphereShapeBlock } from \"./Blocks/Emitters/sphereShapeBlock\";\r\nimport { CylinderShapeBlock } from \"./Blocks/Emitters/cylinderShapeBlock\";\r\nimport { MeshShapeBlock } from \"./Blocks/Emitters/meshShapeBlock\";\r\nimport { ParticleTextureSourceBlock } from \"./Blocks/particleSourceTextureBlock\";\r\nimport type { Texture } from \"../../Materials/Textures/texture\";\r\nimport { BasicPositionUpdateBlock } from \"./Blocks/Update/basicPositionUpdateBlock\";\r\nimport { BasicColorUpdateBlock } from \"./Blocks/Update/basicColorUpdateBlock\";\r\n\r\nfunction _CreateAndConnectInput(connectionPoint: NodeParticleConnectionPoint, name: string, defaultValue: Vector3 | number) {\r\n const input = new ParticleInputBlock(name);\r\n input.value = defaultValue;\r\n input.output.connectTo(connectionPoint);\r\n}\r\n\r\nasync function _ExtractDatafromParticleSystemAsync(particleSystem: ParticleSystem, target: NodeParticleSystemSet) {\r\n // Main system\r\n const system = new SystemBlock(particleSystem.name);\r\n\r\n // Create particle\r\n const createParticleBlock = new CreateParticleBlock(\"Create particle\");\r\n\r\n // Shape\r\n let shapeBlock: Nullable<IShapeBlock> = null;\r\n switch (particleSystem.particleEmitterType.getClassName()) {\r\n case \"BoxParticleEmitter\": {\r\n const source = particleSystem.particleEmitterType as BoxParticleEmitter;\r\n shapeBlock = new BoxShapeBlock(\"Box shape\");\r\n\r\n const target = shapeBlock as BoxShapeBlock;\r\n _CreateAndConnectInput(target.direction1, \"Direction 1\", source.direction1);\r\n _CreateAndConnectInput(target.direction2, \"Direction 2\", source.direction2);\r\n _CreateAndConnectInput(target.minEmitBox, \"Min Emit Box\", source.minEmitBox);\r\n _CreateAndConnectInput(target.maxEmitBox, \"Max Emit Box\", source.maxEmitBox);\r\n break;\r\n }\r\n case \"PointParticleEmitter\": {\r\n const source = particleSystem.particleEmitterType as PointParticleEmitter;\r\n shapeBlock = new PointShapeBlock(\"Point shape\");\r\n\r\n const target = shapeBlock as PointShapeBlock;\r\n _CreateAndConnectInput(target.direction1, \"Direction 1\", source.direction1);\r\n _CreateAndConnectInput(target.direction2, \"Direction 2\", source.direction2);\r\n break;\r\n }\r\n case \"SphereParticleEmitter\": {\r\n const source = particleSystem.particleEmitterType as SphereParticleEmitter;\r\n shapeBlock = new SphereShapeBlock(\"Sphere shape\");\r\n\r\n const target = shapeBlock as SphereShapeBlock;\r\n _CreateAndConnectInput(target.radius, \"Radius\", source.radius);\r\n _CreateAndConnectInput(target.radiusRange, \"Radius Range\", source.radiusRange);\r\n _CreateAndConnectInput(target.directionRandomizer, \"Direction Randomizer\", source.directionRandomizer);\r\n break;\r\n }\r\n case \"CylinderParticleEmitter\": {\r\n const source = particleSystem.particleEmitterType as CylinderParticleEmitter;\r\n shapeBlock = new CylinderShapeBlock(\"Cylinder shape\");\r\n\r\n const target = shapeBlock as CylinderShapeBlock;\r\n _CreateAndConnectInput(target.height, \"Height\", source.height);\r\n _CreateAndConnectInput(target.radius, \"Radius\", source.radius);\r\n _CreateAndConnectInput(target.radiusRange, \"Radius Range\", source.radiusRange);\r\n _CreateAndConnectInput(target.directionRandomizer, \"Direction Randomizer\", source.directionRandomizer);\r\n break;\r\n }\r\n case \"MeshParticleEmitter\": {\r\n const source = particleSystem.particleEmitterType as MeshParticleEmitter;\r\n shapeBlock = new MeshShapeBlock(\"Mesh shape\");\r\n\r\n const target = shapeBlock as MeshShapeBlock;\r\n _CreateAndConnectInput(target.direction1, \"Direction 1\", source.direction1);\r\n _CreateAndConnectInput(target.direction2, \"Direction 2\", source.direction2);\r\n\r\n target.mesh = source.mesh as Mesh;\r\n break;\r\n }\r\n }\r\n\r\n if (!shapeBlock) {\r\n throw new Error(`Unsupported particle emitter type: ${particleSystem.particleEmitterType.getClassName()}`);\r\n }\r\n\r\n createParticleBlock.particle.connectTo(shapeBlock.particle);\r\n createParticleBlock.colorDead.value = particleSystem.colorDead;\r\n\r\n // Texture\r\n const textureBlock = new ParticleTextureSourceBlock(\"Texture\");\r\n const url = (particleSystem.particleTexture as Texture).url || \"\";\r\n if (url) {\r\n textureBlock.url = url;\r\n } else {\r\n textureBlock.sourceTexture = particleSystem.particleTexture;\r\n }\r\n textureBlock.texture.connectTo(system.texture);\r\n\r\n // Default position update\r\n const basicPositionUpdateBlock = new BasicPositionUpdateBlock(\"Position update\");\r\n shapeBlock.output.connectTo(basicPositionUpdateBlock.particle);\r\n\r\n // Default color update\r\n const basicColorUpdateBlock = new BasicColorUpdateBlock(\"Color update\");\r\n basicPositionUpdateBlock.output.connectTo(basicColorUpdateBlock.particle);\r\n basicColorUpdateBlock.output.connectTo(system.particle);\r\n\r\n // Register\r\n target.systemBlocks.push(system);\r\n}\r\n\r\n/**\r\n * Converts a ParticleSystem to a NodeParticleSystemSet.\r\n * @param name The name of the node particle system set.\r\n * @param particleSystems The particle systems to convert.\r\n * @returns The converted node particle system set or null if conversion failed.\r\n * #0K3AQ2#3625\r\n */\r\nexport async function ConvertToNodeParticleSystemSetAsync(name: string, particleSystems: ParticleSystem[]): Promise<Nullable<NodeParticleSystemSet>> {\r\n if (!particleSystems || !particleSystems.length) {\r\n return null;\r\n }\r\n\r\n const nodeParticleSystemSet = new NodeParticleSystemSet(name);\r\n const promises: Promise<void>[] = [];\r\n\r\n for (const particleSystem of particleSystems) {\r\n promises.push(_ExtractDatafromParticleSystemAsync(particleSystem, nodeParticleSystemSet));\r\n }\r\n\r\n await Promise.all(promises);\r\n return nodeParticleSystemSet;\r\n}\r\n"]}
|
|
@@ -115,6 +115,10 @@ export declare class GPUParticleSystem extends BaseParticleSystem implements IDi
|
|
|
115
115
|
readonly isGPU = true;
|
|
116
116
|
/** Gets or sets a matrix to use to compute projection */
|
|
117
117
|
defaultProjectionMatrix: Matrix;
|
|
118
|
+
/**
|
|
119
|
+
* Gets or sets an object used to store user defined information for the particle system
|
|
120
|
+
*/
|
|
121
|
+
metadata: any;
|
|
118
122
|
/**
|
|
119
123
|
* Creates a Point Emitter for the particle system (emits directly from the emitter position)
|
|
120
124
|
* @param direction1 Particles are emitted between the direction1 and direction2 from within the box
|
|
@@ -732,6 +732,10 @@ export class GPUParticleSystem extends BaseParticleSystem {
|
|
|
732
732
|
this.isLocal = false;
|
|
733
733
|
/** Indicates that the particle system is GPU based */
|
|
734
734
|
this.isGPU = true;
|
|
735
|
+
/**
|
|
736
|
+
* Gets or sets an object used to store user defined information for the particle system
|
|
737
|
+
*/
|
|
738
|
+
this.metadata = null;
|
|
735
739
|
/** Flow map */
|
|
736
740
|
/** @internal */
|
|
737
741
|
this._flowMap = null;
|
|
@@ -1664,6 +1668,9 @@ export class GPUParticleSystem extends BaseParticleSystem {
|
|
|
1664
1668
|
serializationObject.customShader = this.customShader;
|
|
1665
1669
|
serializationObject.preventAutoStart = this.preventAutoStart;
|
|
1666
1670
|
serializationObject.worldOffset = this.worldOffset.asArray();
|
|
1671
|
+
if (this.metadata) {
|
|
1672
|
+
serializationObject.metadata = this.metadata;
|
|
1673
|
+
}
|
|
1667
1674
|
return serializationObject;
|
|
1668
1675
|
}
|
|
1669
1676
|
/**
|
|
@@ -1709,6 +1716,9 @@ export class GPUParticleSystem extends BaseParticleSystem {
|
|
|
1709
1716
|
if (parsedParticleSystem.preventAutoStart) {
|
|
1710
1717
|
particleSystem.preventAutoStart = parsedParticleSystem.preventAutoStart;
|
|
1711
1718
|
}
|
|
1719
|
+
if (parsedParticleSystem.metadata) {
|
|
1720
|
+
particleSystem.metadata = parsedParticleSystem.metadata;
|
|
1721
|
+
}
|
|
1712
1722
|
if (!doNotStart && !particleSystem.preventAutoStart) {
|
|
1713
1723
|
particleSystem.start();
|
|
1714
1724
|
}
|