@onerjs/core 8.48.3 → 8.48.5
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/Cameras/Inputs/geospatialCameraPointersInput.js +10 -8
- package/Cameras/Inputs/geospatialCameraPointersInput.js.map +1 -1
- package/Cameras/geospatialCameraMovement.js +2 -2
- package/Cameras/geospatialCameraMovement.js.map +1 -1
- package/FrameGraph/Node/Blocks/Rendering/iblShadowsRendererBlock.d.ts +105 -0
- package/FrameGraph/Node/Blocks/Rendering/iblShadowsRendererBlock.js +318 -0
- package/FrameGraph/Node/Blocks/Rendering/iblShadowsRendererBlock.js.map +1 -0
- package/FrameGraph/Node/Blocks/index.d.ts +1 -0
- package/FrameGraph/Node/Blocks/index.js +1 -0
- package/FrameGraph/Node/Blocks/index.js.map +1 -1
- package/FrameGraph/Tasks/Rendering/iblShadows/iblShadowsAccumulationTask.d.ts +34 -0
- package/FrameGraph/Tasks/Rendering/iblShadows/iblShadowsAccumulationTask.js +144 -0
- package/FrameGraph/Tasks/Rendering/iblShadows/iblShadowsAccumulationTask.js.map +1 -0
- package/FrameGraph/Tasks/Rendering/iblShadows/iblShadowsSpatialBlurTask.d.ts +26 -0
- package/FrameGraph/Tasks/Rendering/iblShadows/iblShadowsSpatialBlurTask.js +82 -0
- package/FrameGraph/Tasks/Rendering/iblShadows/iblShadowsSpatialBlurTask.js.map +1 -0
- package/FrameGraph/Tasks/Rendering/iblShadows/iblShadowsTracingTask.d.ts +61 -0
- package/FrameGraph/Tasks/Rendering/iblShadows/iblShadowsTracingTask.js +207 -0
- package/FrameGraph/Tasks/Rendering/iblShadows/iblShadowsTracingTask.js.map +1 -0
- package/FrameGraph/Tasks/Rendering/iblShadows/iblShadowsVoxelizationTask.d.ts +104 -0
- package/FrameGraph/Tasks/Rendering/iblShadows/iblShadowsVoxelizationTask.js +218 -0
- package/FrameGraph/Tasks/Rendering/iblShadows/iblShadowsVoxelizationTask.js.map +1 -0
- package/FrameGraph/Tasks/Rendering/iblShadowsRendererTask.d.ts +217 -0
- package/FrameGraph/Tasks/Rendering/iblShadowsRendererTask.js +640 -0
- package/FrameGraph/Tasks/Rendering/iblShadowsRendererTask.js.map +1 -0
- package/FrameGraph/frameGraph.js +1 -0
- package/FrameGraph/frameGraph.js.map +1 -1
- package/FrameGraph/index.d.ts +1 -0
- package/FrameGraph/index.js +1 -0
- package/FrameGraph/index.js.map +1 -1
- package/Materials/PBR/openpbrMaterial.d.ts +13 -2
- package/Materials/PBR/openpbrMaterial.js +47 -16
- package/Materials/PBR/openpbrMaterial.js.map +1 -1
- package/Materials/PBR/pbrBRDFConfiguration.js +1 -1
- package/Materials/PBR/pbrBRDFConfiguration.js.map +1 -1
- package/Materials/Textures/Filtering/hdrFiltering.js +6 -0
- package/Materials/Textures/Filtering/hdrFiltering.js.map +1 -1
- package/Materials/Textures/envCubeTexture.js +13 -13
- package/Materials/Textures/envCubeTexture.js.map +1 -1
- package/Materials/materialHelper.functions.js +1 -1
- package/Materials/materialHelper.functions.js.map +1 -1
- package/Meshes/instancedMesh.js +44 -42
- package/Meshes/instancedMesh.js.map +1 -1
- package/Misc/textureTools.d.ts +3 -1
- package/Misc/textureTools.js +74 -13
- package/Misc/textureTools.js.map +1 -1
- package/Particles/baseParticleSystem.d.ts +33 -1
- package/Particles/baseParticleSystem.js +65 -0
- package/Particles/baseParticleSystem.js.map +1 -1
- package/Particles/computeShaderParticleSystem.js +6 -0
- package/Particles/computeShaderParticleSystem.js.map +1 -1
- package/Particles/gpuParticleSystem.d.ts +24 -6
- package/Particles/gpuParticleSystem.js +85 -36
- package/Particles/gpuParticleSystem.js.map +1 -1
- package/Particles/particleSystem.d.ts +0 -7
- package/Particles/particleSystem.js +3 -15
- package/Particles/particleSystem.js.map +1 -1
- package/Particles/thinParticleSystem.d.ts +1 -3
- package/Particles/thinParticleSystem.js +1 -27
- package/Particles/thinParticleSystem.js.map +1 -1
- package/Particles/webgl2ParticleSystem.js +7 -0
- package/Particles/webgl2ParticleSystem.js.map +1 -1
- package/Rendering/IBLShadows/iblShadowsAccumulationPass.js +1 -1
- package/Rendering/IBLShadows/iblShadowsAccumulationPass.js.map +1 -1
- package/Rendering/IBLShadows/iblShadowsPluginMaterial.d.ts +3 -1
- package/Rendering/IBLShadows/iblShadowsPluginMaterial.js +11 -1
- package/Rendering/IBLShadows/iblShadowsPluginMaterial.js.map +1 -1
- package/Rendering/IBLShadows/iblShadowsRenderPipeline.d.ts +0 -19
- package/Rendering/IBLShadows/iblShadowsRenderPipeline.js +21 -65
- package/Rendering/IBLShadows/iblShadowsRenderPipeline.js.map +1 -1
- package/Rendering/IBLShadows/iblShadowsVoxelRenderer.d.ts +15 -52
- package/Rendering/IBLShadows/iblShadowsVoxelRenderer.js +129 -220
- package/Rendering/IBLShadows/iblShadowsVoxelRenderer.js.map +1 -1
- package/Rendering/IBLShadows/iblShadowsVoxelTracingPass.js +3 -0
- package/Rendering/IBLShadows/iblShadowsVoxelTracingPass.js.map +1 -1
- package/Rendering/geometryBufferRenderer.d.ts +14 -5
- package/Rendering/geometryBufferRenderer.js +6 -2
- package/Rendering/geometryBufferRenderer.js.map +1 -1
- package/Rendering/geometryBufferRendererSceneComponent.d.ts +4 -6
- package/Rendering/geometryBufferRendererSceneComponent.js.map +1 -1
- package/Rendering/iblCdfGenerator.d.ts +10 -0
- package/Rendering/iblCdfGenerator.js +52 -17
- package/Rendering/iblCdfGenerator.js.map +1 -1
- package/Rendering/index.d.ts +0 -6
- package/Rendering/index.js +0 -6
- package/Rendering/index.js.map +1 -1
- package/Shaders/ShadersInclude/openpbrDirectLighting.js +6 -1
- package/Shaders/ShadersInclude/openpbrDirectLighting.js.map +1 -1
- package/Shaders/ShadersInclude/openpbrEnvironmentLighting.js +1 -1
- package/Shaders/ShadersInclude/openpbrEnvironmentLighting.js.map +1 -1
- package/Shaders/gpuUpdateParticles.vertex.js +12 -6
- package/Shaders/gpuUpdateParticles.vertex.js.map +1 -1
- package/Shaders/iblShadowVoxelTracing.fragment.js +5 -1
- package/Shaders/iblShadowVoxelTracing.fragment.js.map +1 -1
- package/Shaders/iblVoxelGrid.fragment.d.ts +1 -0
- package/Shaders/iblVoxelGrid.fragment.js +33 -5
- package/Shaders/iblVoxelGrid.fragment.js.map +1 -1
- package/Shaders/lod3D.fragment.d.ts +5 -0
- package/Shaders/lod3D.fragment.js +13 -0
- package/Shaders/lod3D.fragment.js.map +1 -0
- package/Shaders/openpbr.fragment.js +5 -0
- package/Shaders/openpbr.fragment.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/openpbrDirectLighting.js +6 -1
- package/ShadersWGSL/ShadersInclude/openpbrDirectLighting.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/openpbrEnvironmentLighting.js +1 -1
- package/ShadersWGSL/ShadersInclude/openpbrEnvironmentLighting.js.map +1 -1
- package/ShadersWGSL/gpuUpdateParticles.compute.js +14 -7
- package/ShadersWGSL/gpuUpdateParticles.compute.js.map +1 -1
- package/ShadersWGSL/iblShadowVoxelTracing.fragment.js +5 -1
- package/ShadersWGSL/iblShadowVoxelTracing.fragment.js.map +1 -1
- package/ShadersWGSL/iblVoxelGrid.fragment.js +1 -1
- package/ShadersWGSL/iblVoxelGrid.fragment.js.map +1 -1
- package/ShadersWGSL/lod3D.fragment.d.ts +5 -0
- package/ShadersWGSL/lod3D.fragment.js +13 -0
- package/ShadersWGSL/lod3D.fragment.js.map +1 -0
- package/ShadersWGSL/openpbr.fragment.js +5 -0
- package/ShadersWGSL/openpbr.fragment.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"computeShaderParticleSystem.js","sourceRoot":"","sources":["../../../../dev/core/src/Particles/computeShaderParticleSystem.ts"],"names":[],"mappings":"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","sourcesContent":["import { type WebGPUEngine } from \"../Engines/webgpuEngine\";\r\nimport { StorageBuffer } from \"../Buffers/storageBuffer\";\r\nimport { ComputeShader } from \"../Compute/computeShader\";\r\nimport { UniformBuffer } from \"../Materials/uniformBuffer\";\r\nimport { type IGPUParticleSystemPlatform } from \"./IGPUParticleSystemPlatform\";\r\nimport { type Buffer, type VertexBuffer } from \"../Buffers/buffer\";\r\nimport { type GPUParticleSystem } from \"./gpuParticleSystem\";\r\n\r\nimport { type DataArray, type Nullable } from \"../types\";\r\nimport { type DataBuffer } from \"../Buffers/dataBuffer\";\r\nimport { Constants } from \"../Engines/constants\";\r\nimport { UniformBufferEffectCommonAccessor } from \"../Materials/uniformBufferEffectCommonAccessor\";\r\nimport { type ComputeBindingMapping } from \"../Engines/Extensions/engine.computeShader\";\r\nimport { type Effect } from \"../Materials/effect\";\r\nimport { RegisterClass } from \"../Misc/typeStore\";\r\n\r\nimport \"../ShadersWGSL/gpuUpdateParticles.compute\";\r\n\r\n/** @internal */\r\nexport class ComputeShaderParticleSystem implements IGPUParticleSystemPlatform {\r\n private _parent: GPUParticleSystem;\r\n private _engine: WebGPUEngine;\r\n private _updateComputeShader: ComputeShader;\r\n private _simParamsComputeShader: UniformBuffer;\r\n private _bufferComputeShader: StorageBuffer[] = [];\r\n private _renderVertexBuffers: Array<{ [key: string]: VertexBuffer }> = [];\r\n\r\n /** @internal */\r\n public readonly alignDataInBuffer = true;\r\n\r\n /** @internal */\r\n constructor(parent: GPUParticleSystem, engine: WebGPUEngine) {\r\n this._parent = parent;\r\n this._engine = engine;\r\n }\r\n\r\n /** @internal */\r\n public contextLost(): void {\r\n this._updateComputeShader = undefined as any;\r\n this._bufferComputeShader.length = 0;\r\n this._renderVertexBuffers.length = 0;\r\n }\r\n\r\n /** @internal */\r\n public isUpdateBufferCreated(): boolean {\r\n return !!this._updateComputeShader;\r\n }\r\n\r\n /** @internal */\r\n public isUpdateBufferReady(): boolean {\r\n return this._updateComputeShader?.isReady() ?? false;\r\n }\r\n\r\n /** @internal */\r\n public createUpdateBuffer(defines: string): UniformBufferEffectCommonAccessor {\r\n const bindingsMapping: ComputeBindingMapping = {\r\n params: { group: 0, binding: 0 },\r\n particlesIn: { group: 0, binding: 1 },\r\n particlesOut: { group: 0, binding: 2 },\r\n randomTexture: { group: 0, binding: 3 },\r\n randomTexture2: { group: 0, binding: 4 },\r\n };\r\n if (this._parent._sizeGradientsTexture) {\r\n bindingsMapping[\"sizeGradientTexture\"] = { group: 1, binding: 1 };\r\n }\r\n if (this._parent._angularSpeedGradientsTexture) {\r\n bindingsMapping[\"angularSpeedGradientTexture\"] = { group: 1, binding: 3 };\r\n }\r\n if (this._parent._velocityGradientsTexture) {\r\n bindingsMapping[\"velocityGradientTexture\"] = { group: 1, binding: 5 };\r\n }\r\n if (this._parent._limitVelocityGradientsTexture) {\r\n bindingsMapping[\"limitVelocityGradientTexture\"] = { group: 1, binding: 7 };\r\n }\r\n if (this._parent._dragGradientsTexture) {\r\n bindingsMapping[\"dragGradientTexture\"] = { group: 1, binding: 9 };\r\n }\r\n if (this._parent.noiseTexture) {\r\n bindingsMapping[\"noiseTexture\"] = { group: 1, binding: 11 };\r\n }\r\n if (this._parent.flowMap) {\r\n bindingsMapping[\"flowMapTexture\"] = { group: 1, binding: 13 };\r\n }\r\n\r\n this._updateComputeShader = new ComputeShader(\"updateParticles\", this._engine, \"gpuUpdateParticles\", { bindingsMapping, defines: defines.split(\"\\n\") });\r\n\r\n this._simParamsComputeShader?.dispose();\r\n this._simParamsComputeShader = new UniformBuffer(this._engine, undefined, undefined, \"ComputeShaderParticleSystemUBO\");\r\n\r\n this._simParamsComputeShader.addUniform(\"currentCount\", 1);\r\n this._simParamsComputeShader.addUniform(\"timeDelta\", 1);\r\n this._simParamsComputeShader.addUniform(\"stopFactor\", 1);\r\n this._simParamsComputeShader.addUniform(\"randomTextureSize\", 1);\r\n this._simParamsComputeShader.addUniform(\"lifeTime\", 2);\r\n this._simParamsComputeShader.addUniform(\"emitPower\", 2);\r\n this._simParamsComputeShader.addUniform(\"emitIndex\", 1);\r\n this._simParamsComputeShader.addUniform(\"emitCount\", 1);\r\n if (!this._parent._colorGradientsTexture) {\r\n this._simParamsComputeShader.addUniform(\"color1\", 4);\r\n this._simParamsComputeShader.addUniform(\"color2\", 4);\r\n }\r\n this._simParamsComputeShader.addUniform(\"sizeRange\", 2);\r\n this._simParamsComputeShader.addUniform(\"scaleRange\", 4);\r\n this._simParamsComputeShader.addUniform(\"angleRange\", 4);\r\n this._simParamsComputeShader.addUniform(\"gravity\", 3);\r\n if (this._parent._limitVelocityGradientsTexture) {\r\n this._simParamsComputeShader.addUniform(\"limitVelocityDamping\", 1);\r\n }\r\n if (this._parent.isAnimationSheetEnabled) {\r\n this._simParamsComputeShader.addUniform(\"cellInfos\", 4);\r\n }\r\n if (this._parent.noiseTexture) {\r\n this._simParamsComputeShader.addUniform(\"noiseStrength\", 3);\r\n }\r\n if (this._parent.flowMap) {\r\n this._simParamsComputeShader.addUniform(\"flowMapProjection\", 16);\r\n this._simParamsComputeShader.addUniform(\"flowMapStrength\", 1);\r\n }\r\n if (!this._parent.isLocal) {\r\n this._simParamsComputeShader.addUniform(\"emitterWM\", 16);\r\n }\r\n if (this._parent.particleEmitterType) {\r\n this._parent.particleEmitterType.buildUniformLayout(this._simParamsComputeShader);\r\n }\r\n\r\n this._updateComputeShader.setUniformBuffer(\"params\", this._simParamsComputeShader);\r\n\r\n return new UniformBufferEffectCommonAccessor(this._simParamsComputeShader);\r\n }\r\n\r\n /** @internal */\r\n public createVertexBuffers(updateBuffer: Buffer, renderVertexBuffers: { [key: string]: VertexBuffer }): void {\r\n this._renderVertexBuffers.push(renderVertexBuffers);\r\n }\r\n\r\n /** @internal */\r\n public createParticleBuffer(data: number[]): DataArray | DataBuffer {\r\n const buffer = new StorageBuffer(\r\n this._engine,\r\n data.length * 4,\r\n Constants.BUFFER_CREATIONFLAG_READWRITE | Constants.BUFFER_CREATIONFLAG_VERTEX,\r\n \"ComputeShaderParticleSystemBuffer\"\r\n );\r\n\r\n buffer.update(data);\r\n this._bufferComputeShader.push(buffer);\r\n\r\n return buffer.getBuffer();\r\n }\r\n\r\n /** @internal */\r\n public bindDrawBuffers(index: number, effect: Effect, indexBuffer: Nullable<DataBuffer>): void {\r\n this._engine.bindBuffers(this._renderVertexBuffers[index], indexBuffer, effect);\r\n }\r\n\r\n /** @internal */\r\n public preUpdateParticleBuffer(): void {}\r\n\r\n /** @internal */\r\n public updateParticleBuffer(index: number, targetBuffer: Buffer, currentActiveCount: number): void {\r\n this._simParamsComputeShader.update();\r\n\r\n this._updateComputeShader.setTexture(\"randomTexture\", this._parent._randomTexture, false);\r\n this._updateComputeShader.setTexture(\"randomTexture2\", this._parent._randomTexture2, false);\r\n if (this._parent._sizeGradientsTexture) {\r\n this._updateComputeShader.setTexture(\"sizeGradientTexture\", this._parent._sizeGradientsTexture);\r\n }\r\n\r\n if (this._parent._angularSpeedGradientsTexture) {\r\n this._updateComputeShader.setTexture(\"angularSpeedGradientTexture\", this._parent._angularSpeedGradientsTexture);\r\n }\r\n\r\n if (this._parent._velocityGradientsTexture) {\r\n this._updateComputeShader.setTexture(\"velocityGradientTexture\", this._parent._velocityGradientsTexture);\r\n }\r\n\r\n if (this._parent._limitVelocityGradientsTexture) {\r\n this._updateComputeShader.setTexture(\"limitVelocityGradientTexture\", this._parent._limitVelocityGradientsTexture);\r\n }\r\n\r\n if (this._parent._dragGradientsTexture) {\r\n this._updateComputeShader.setTexture(\"dragGradientTexture\", this._parent._dragGradientsTexture);\r\n }\r\n\r\n if (this._parent.noiseTexture) {\r\n this._updateComputeShader.setTexture(\"noiseTexture\", this._parent.noiseTexture);\r\n }\r\n\r\n if (this._parent.flowMap) {\r\n this._updateComputeShader.setTexture(\"flowMapTexture\", this._parent.flowMap);\r\n }\r\n\r\n this._updateComputeShader.setStorageBuffer(\"particlesIn\", this._bufferComputeShader[index]);\r\n this._updateComputeShader.setStorageBuffer(\"particlesOut\", this._bufferComputeShader[index ^ 1]);\r\n\r\n this._updateComputeShader.dispatch(Math.ceil(currentActiveCount / 64));\r\n }\r\n\r\n /** @internal */\r\n public releaseBuffers(): void {\r\n for (let i = 0; i < this._bufferComputeShader.length; ++i) {\r\n this._bufferComputeShader[i].dispose();\r\n }\r\n\r\n this._bufferComputeShader.length = 0;\r\n\r\n this._simParamsComputeShader?.dispose();\r\n (<any>this._simParamsComputeShader) = null;\r\n\r\n (<any>this._updateComputeShader) = null;\r\n }\r\n\r\n /** @internal */\r\n public releaseVertexBuffers(): void {\r\n this._renderVertexBuffers.length = 0;\r\n }\r\n}\r\n\r\nRegisterClass(\"BABYLON.ComputeShaderParticleSystem\", ComputeShaderParticleSystem);\r\n"]}
|
|
1
|
+
{"version":3,"file":"computeShaderParticleSystem.js","sourceRoot":"","sources":["../../../../dev/core/src/Particles/computeShaderParticleSystem.ts"],"names":[],"mappings":"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","sourcesContent":["import { type WebGPUEngine } from \"../Engines/webgpuEngine\";\r\nimport { StorageBuffer } from \"../Buffers/storageBuffer\";\r\nimport { ComputeShader } from \"../Compute/computeShader\";\r\nimport { UniformBuffer } from \"../Materials/uniformBuffer\";\r\nimport { type IGPUParticleSystemPlatform } from \"./IGPUParticleSystemPlatform\";\r\nimport { type Buffer, type VertexBuffer } from \"../Buffers/buffer\";\r\nimport { type GPUParticleSystem } from \"./gpuParticleSystem\";\r\n\r\nimport { type DataArray, type Nullable } from \"../types\";\r\nimport { type DataBuffer } from \"../Buffers/dataBuffer\";\r\nimport { Constants } from \"../Engines/constants\";\r\nimport { UniformBufferEffectCommonAccessor } from \"../Materials/uniformBufferEffectCommonAccessor\";\r\nimport { type ComputeBindingMapping } from \"../Engines/Extensions/engine.computeShader\";\r\nimport { type Effect } from \"../Materials/effect\";\r\nimport { RegisterClass } from \"../Misc/typeStore\";\r\n\r\nimport \"../ShadersWGSL/gpuUpdateParticles.compute\";\r\n\r\n/** @internal */\r\nexport class ComputeShaderParticleSystem implements IGPUParticleSystemPlatform {\r\n private _parent: GPUParticleSystem;\r\n private _engine: WebGPUEngine;\r\n private _updateComputeShader: ComputeShader;\r\n private _simParamsComputeShader: UniformBuffer;\r\n private _bufferComputeShader: StorageBuffer[] = [];\r\n private _renderVertexBuffers: Array<{ [key: string]: VertexBuffer }> = [];\r\n\r\n /** @internal */\r\n public readonly alignDataInBuffer = true;\r\n\r\n /** @internal */\r\n constructor(parent: GPUParticleSystem, engine: WebGPUEngine) {\r\n this._parent = parent;\r\n this._engine = engine;\r\n }\r\n\r\n /** @internal */\r\n public contextLost(): void {\r\n this._updateComputeShader = undefined as any;\r\n this._bufferComputeShader.length = 0;\r\n this._renderVertexBuffers.length = 0;\r\n }\r\n\r\n /** @internal */\r\n public isUpdateBufferCreated(): boolean {\r\n return !!this._updateComputeShader;\r\n }\r\n\r\n /** @internal */\r\n public isUpdateBufferReady(): boolean {\r\n return this._updateComputeShader?.isReady() ?? false;\r\n }\r\n\r\n /** @internal */\r\n public createUpdateBuffer(defines: string): UniformBufferEffectCommonAccessor {\r\n const bindingsMapping: ComputeBindingMapping = {\r\n params: { group: 0, binding: 0 },\r\n particlesIn: { group: 0, binding: 1 },\r\n particlesOut: { group: 0, binding: 2 },\r\n randomTexture: { group: 0, binding: 3 },\r\n randomTexture2: { group: 0, binding: 4 },\r\n };\r\n if (this._parent._sizeGradientsTexture) {\r\n bindingsMapping[\"sizeGradientTexture\"] = { group: 1, binding: 1 };\r\n }\r\n if (this._parent._angularSpeedGradientsTexture) {\r\n bindingsMapping[\"angularSpeedGradientTexture\"] = { group: 1, binding: 3 };\r\n }\r\n if (this._parent._velocityGradientsTexture) {\r\n bindingsMapping[\"velocityGradientTexture\"] = { group: 1, binding: 5 };\r\n }\r\n if (this._parent._limitVelocityGradientsTexture) {\r\n bindingsMapping[\"limitVelocityGradientTexture\"] = { group: 1, binding: 7 };\r\n }\r\n if (this._parent._dragGradientsTexture) {\r\n bindingsMapping[\"dragGradientTexture\"] = { group: 1, binding: 9 };\r\n }\r\n if (this._parent.noiseTexture) {\r\n bindingsMapping[\"noiseTexture\"] = { group: 1, binding: 11 };\r\n }\r\n if (this._parent.flowMap) {\r\n bindingsMapping[\"flowMapTexture\"] = { group: 1, binding: 13 };\r\n }\r\n\r\n this._updateComputeShader = new ComputeShader(\"updateParticles\", this._engine, \"gpuUpdateParticles\", { bindingsMapping, defines: defines.split(\"\\n\") });\r\n\r\n this._simParamsComputeShader?.dispose();\r\n this._simParamsComputeShader = new UniformBuffer(this._engine, undefined, undefined, \"ComputeShaderParticleSystemUBO\");\r\n\r\n this._simParamsComputeShader.addUniform(\"currentCount\", 1);\r\n this._simParamsComputeShader.addUniform(\"timeDelta\", 1);\r\n this._simParamsComputeShader.addUniform(\"stopFactor\", 1);\r\n this._simParamsComputeShader.addUniform(\"randomTextureSize\", 1);\r\n this._simParamsComputeShader.addUniform(\"lifeTime\", 2);\r\n this._simParamsComputeShader.addUniform(\"emitPower\", 2);\r\n this._simParamsComputeShader.addUniform(\"emitIndex\", 1);\r\n this._simParamsComputeShader.addUniform(\"emitCount\", 1);\r\n if (!this._parent._colorGradientsTexture) {\r\n this._simParamsComputeShader.addUniform(\"color1\", 4);\r\n this._simParamsComputeShader.addUniform(\"color2\", 4);\r\n }\r\n this._simParamsComputeShader.addUniform(\"sizeRange\", 2);\r\n this._simParamsComputeShader.addUniform(\"scaleRange\", 4);\r\n this._simParamsComputeShader.addUniform(\"angleRange\", 4);\r\n this._simParamsComputeShader.addUniform(\"gravity\", 3);\r\n if (this._parent._limitVelocityGradientsTexture) {\r\n this._simParamsComputeShader.addUniform(\"limitVelocityDamping\", 1);\r\n }\r\n if (this._parent.isAnimationSheetEnabled) {\r\n this._simParamsComputeShader.addUniform(\"cellInfos\", 4);\r\n }\r\n if (this._parent.noiseTexture) {\r\n this._simParamsComputeShader.addUniform(\"noiseStrength\", 3);\r\n }\r\n if (this._parent.flowMap) {\r\n this._simParamsComputeShader.addUniform(\"flowMapProjection\", 16);\r\n this._simParamsComputeShader.addUniform(\"flowMapStrength\", 1);\r\n }\r\n if (!this._parent.isLocal) {\r\n this._simParamsComputeShader.addUniform(\"emitterWM\", 16);\r\n }\r\n if (this._parent.attractors.length > 0) {\r\n this._simParamsComputeShader.addUniform(\"attractorCount\", 1);\r\n for (let i = 0; i < this._parent.maxAttractors; i++) {\r\n this._simParamsComputeShader.addUniform(\"attractorPositionAndStrength[\" + i + \"]\", 4);\r\n }\r\n }\r\n if (this._parent.particleEmitterType) {\r\n this._parent.particleEmitterType.buildUniformLayout(this._simParamsComputeShader);\r\n }\r\n\r\n this._updateComputeShader.setUniformBuffer(\"params\", this._simParamsComputeShader);\r\n\r\n return new UniformBufferEffectCommonAccessor(this._simParamsComputeShader);\r\n }\r\n\r\n /** @internal */\r\n public createVertexBuffers(updateBuffer: Buffer, renderVertexBuffers: { [key: string]: VertexBuffer }): void {\r\n this._renderVertexBuffers.push(renderVertexBuffers);\r\n }\r\n\r\n /** @internal */\r\n public createParticleBuffer(data: number[]): DataArray | DataBuffer {\r\n const buffer = new StorageBuffer(\r\n this._engine,\r\n data.length * 4,\r\n Constants.BUFFER_CREATIONFLAG_READWRITE | Constants.BUFFER_CREATIONFLAG_VERTEX,\r\n \"ComputeShaderParticleSystemBuffer\"\r\n );\r\n\r\n buffer.update(data);\r\n this._bufferComputeShader.push(buffer);\r\n\r\n return buffer.getBuffer();\r\n }\r\n\r\n /** @internal */\r\n public bindDrawBuffers(index: number, effect: Effect, indexBuffer: Nullable<DataBuffer>): void {\r\n this._engine.bindBuffers(this._renderVertexBuffers[index], indexBuffer, effect);\r\n }\r\n\r\n /** @internal */\r\n public preUpdateParticleBuffer(): void {}\r\n\r\n /** @internal */\r\n public updateParticleBuffer(index: number, targetBuffer: Buffer, currentActiveCount: number): void {\r\n this._simParamsComputeShader.update();\r\n\r\n this._updateComputeShader.setTexture(\"randomTexture\", this._parent._randomTexture, false);\r\n this._updateComputeShader.setTexture(\"randomTexture2\", this._parent._randomTexture2, false);\r\n if (this._parent._sizeGradientsTexture) {\r\n this._updateComputeShader.setTexture(\"sizeGradientTexture\", this._parent._sizeGradientsTexture);\r\n }\r\n\r\n if (this._parent._angularSpeedGradientsTexture) {\r\n this._updateComputeShader.setTexture(\"angularSpeedGradientTexture\", this._parent._angularSpeedGradientsTexture);\r\n }\r\n\r\n if (this._parent._velocityGradientsTexture) {\r\n this._updateComputeShader.setTexture(\"velocityGradientTexture\", this._parent._velocityGradientsTexture);\r\n }\r\n\r\n if (this._parent._limitVelocityGradientsTexture) {\r\n this._updateComputeShader.setTexture(\"limitVelocityGradientTexture\", this._parent._limitVelocityGradientsTexture);\r\n }\r\n\r\n if (this._parent._dragGradientsTexture) {\r\n this._updateComputeShader.setTexture(\"dragGradientTexture\", this._parent._dragGradientsTexture);\r\n }\r\n\r\n if (this._parent.noiseTexture) {\r\n this._updateComputeShader.setTexture(\"noiseTexture\", this._parent.noiseTexture);\r\n }\r\n\r\n if (this._parent.flowMap) {\r\n this._updateComputeShader.setTexture(\"flowMapTexture\", this._parent.flowMap);\r\n }\r\n\r\n this._updateComputeShader.setStorageBuffer(\"particlesIn\", this._bufferComputeShader[index]);\r\n this._updateComputeShader.setStorageBuffer(\"particlesOut\", this._bufferComputeShader[index ^ 1]);\r\n\r\n this._updateComputeShader.dispatch(Math.ceil(currentActiveCount / 64));\r\n }\r\n\r\n /** @internal */\r\n public releaseBuffers(): void {\r\n for (let i = 0; i < this._bufferComputeShader.length; ++i) {\r\n this._bufferComputeShader[i].dispose();\r\n }\r\n\r\n this._bufferComputeShader.length = 0;\r\n\r\n this._simParamsComputeShader?.dispose();\r\n (<any>this._simParamsComputeShader) = null;\r\n\r\n (<any>this._updateComputeShader) = null;\r\n }\r\n\r\n /** @internal */\r\n public releaseVertexBuffers(): void {\r\n this._renderVertexBuffers.length = 0;\r\n }\r\n}\r\n\r\nRegisterClass(\"BABYLON.ComputeShaderParticleSystem\", ComputeShaderParticleSystem);\r\n"]}
|
|
@@ -6,6 +6,7 @@ import { Color4 } from "../Maths/math.color.js";
|
|
|
6
6
|
import { VertexBuffer } from "../Buffers/buffer.js";
|
|
7
7
|
import { type IParticleSystem } from "./IParticleSystem.js";
|
|
8
8
|
import { BaseParticleSystem } from "./baseParticleSystem.js";
|
|
9
|
+
import { Attractor } from "./attractor.js";
|
|
9
10
|
import { BoxParticleEmitter } from "../Particles/EmitterTypes/boxParticleEmitter.js";
|
|
10
11
|
import { type IDisposable, Scene } from "../scene.js";
|
|
11
12
|
import { type Effect } from "../Materials/effect.js";
|
|
@@ -129,6 +130,18 @@ export declare class GPUParticleSystem extends BaseParticleSystem implements IDi
|
|
|
129
130
|
isLocal: boolean;
|
|
130
131
|
/** Indicates that the particle system is GPU based */
|
|
131
132
|
readonly isGPU = true;
|
|
133
|
+
/** Attractors */
|
|
134
|
+
/**
|
|
135
|
+
* Maximum number of attractors for this GPU particle system instance.
|
|
136
|
+
* Determined at construction time via the `maxAttractors` option (default 8).
|
|
137
|
+
* Limited by the fixed-size uniform arrays in the update shaders.
|
|
138
|
+
*/
|
|
139
|
+
readonly maxAttractors: number;
|
|
140
|
+
/**
|
|
141
|
+
* Add an attractor to the particle system. Attractors are used to change the direction of the particles in the system.
|
|
142
|
+
* @param attractor - The attractor to add to the particle system
|
|
143
|
+
*/
|
|
144
|
+
addAttractor(attractor: Attractor): void;
|
|
132
145
|
/** Gets or sets a matrix to use to compute projection */
|
|
133
146
|
defaultProjectionMatrix: Matrix;
|
|
134
147
|
/**
|
|
@@ -321,14 +334,14 @@ export declare class GPUParticleSystem extends BaseParticleSystem implements IDi
|
|
|
321
334
|
_limitVelocityGradientsTexture: RawTexture;
|
|
322
335
|
/** @internal */
|
|
323
336
|
_dragGradientsTexture: RawTexture;
|
|
324
|
-
private _addFactorGradient;
|
|
325
337
|
/**
|
|
326
338
|
* Adds a new size gradient
|
|
327
339
|
* @param gradient defines the gradient to use (between 0 and 1)
|
|
328
340
|
* @param factor defines the size factor to affect to the specified gradient
|
|
341
|
+
* @param factor2 defines an additional factor used to define a range ([factor, factor2]) with main value to pick the final value from
|
|
329
342
|
* @returns the current particle system
|
|
330
343
|
*/
|
|
331
|
-
addSizeGradient(gradient: number, factor: number): GPUParticleSystem;
|
|
344
|
+
addSizeGradient(gradient: number, factor: number, factor2?: number): GPUParticleSystem;
|
|
332
345
|
/**
|
|
333
346
|
* Remove a specific size gradient
|
|
334
347
|
* @param gradient defines the gradient to remove
|
|
@@ -340,9 +353,10 @@ export declare class GPUParticleSystem extends BaseParticleSystem implements IDi
|
|
|
340
353
|
* Adds a new angular speed gradient
|
|
341
354
|
* @param gradient defines the gradient to use (between 0 and 1)
|
|
342
355
|
* @param factor defines the angular speed to affect to the specified gradient
|
|
356
|
+
* @param factor2 defines an additional factor used to define a range ([factor, factor2]) with main value to pick the final value from
|
|
343
357
|
* @returns the current particle system
|
|
344
358
|
*/
|
|
345
|
-
addAngularSpeedGradient(gradient: number, factor: number): GPUParticleSystem;
|
|
359
|
+
addAngularSpeedGradient(gradient: number, factor: number, factor2?: number): GPUParticleSystem;
|
|
346
360
|
/**
|
|
347
361
|
* Remove a specific angular speed gradient
|
|
348
362
|
* @param gradient defines the gradient to remove
|
|
@@ -353,9 +367,10 @@ export declare class GPUParticleSystem extends BaseParticleSystem implements IDi
|
|
|
353
367
|
* Adds a new velocity gradient
|
|
354
368
|
* @param gradient defines the gradient to use (between 0 and 1)
|
|
355
369
|
* @param factor defines the velocity to affect to the specified gradient
|
|
370
|
+
* @param factor2 defines an additional factor used to define a range ([factor, factor2]) with main value to pick the final value from
|
|
356
371
|
* @returns the current particle system
|
|
357
372
|
*/
|
|
358
|
-
addVelocityGradient(gradient: number, factor: number): GPUParticleSystem;
|
|
373
|
+
addVelocityGradient(gradient: number, factor: number, factor2?: number): GPUParticleSystem;
|
|
359
374
|
/**
|
|
360
375
|
* Remove a specific velocity gradient
|
|
361
376
|
* @param gradient defines the gradient to remove
|
|
@@ -366,9 +381,10 @@ export declare class GPUParticleSystem extends BaseParticleSystem implements IDi
|
|
|
366
381
|
* Adds a new limit velocity gradient
|
|
367
382
|
* @param gradient defines the gradient to use (between 0 and 1)
|
|
368
383
|
* @param factor defines the limit velocity value to affect to the specified gradient
|
|
384
|
+
* @param factor2 defines an additional factor used to define a range ([factor, factor2]) with main value to pick the final value from
|
|
369
385
|
* @returns the current particle system
|
|
370
386
|
*/
|
|
371
|
-
addLimitVelocityGradient(gradient: number, factor: number): GPUParticleSystem;
|
|
387
|
+
addLimitVelocityGradient(gradient: number, factor: number, factor2?: number): GPUParticleSystem;
|
|
372
388
|
/**
|
|
373
389
|
* Remove a specific limit velocity gradient
|
|
374
390
|
* @param gradient defines the gradient to remove
|
|
@@ -379,9 +395,10 @@ export declare class GPUParticleSystem extends BaseParticleSystem implements IDi
|
|
|
379
395
|
* Adds a new drag gradient
|
|
380
396
|
* @param gradient defines the gradient to use (between 0 and 1)
|
|
381
397
|
* @param factor defines the drag value to affect to the specified gradient
|
|
398
|
+
* @param factor2 defines an additional factor used to define a range ([factor, factor2]) with main value to pick the final value from
|
|
382
399
|
* @returns the current particle system
|
|
383
400
|
*/
|
|
384
|
-
addDragGradient(gradient: number, factor: number): GPUParticleSystem;
|
|
401
|
+
addDragGradient(gradient: number, factor: number, factor2?: number): GPUParticleSystem;
|
|
385
402
|
/**
|
|
386
403
|
* Remove a specific drag gradient
|
|
387
404
|
* @param gradient defines the gradient to remove
|
|
@@ -473,6 +490,7 @@ export declare class GPUParticleSystem extends BaseParticleSystem implements IDi
|
|
|
473
490
|
capacity: number;
|
|
474
491
|
randomTextureSize: number;
|
|
475
492
|
emitRateControl: boolean;
|
|
493
|
+
maxAttractors: number;
|
|
476
494
|
}>, sceneOrEngine: Scene | AbstractEngine, customEffect?: Nullable<Effect>, isAnimationSheetEnabled?: boolean);
|
|
477
495
|
protected _reset(): void;
|
|
478
496
|
private _createVertexBuffers;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { ColorGradient, GradientHelper } from "../Misc/gradients.js";
|
|
2
2
|
import { Observable } from "../Misc/observable.js";
|
|
3
3
|
import { Vector3, Matrix, TmpVectors } from "../Maths/math.vector.js";
|
|
4
4
|
import { Color4, TmpColors } from "../Maths/math.color.js";
|
|
@@ -6,6 +6,8 @@ import { Lerp } from "../Maths/math.scalar.functions.js";
|
|
|
6
6
|
import { VertexBuffer, Buffer } from "../Buffers/buffer.js";
|
|
7
7
|
import { BaseParticleSystem } from "./baseParticleSystem.js";
|
|
8
8
|
import { ParticleSystem } from "./particleSystem.js";
|
|
9
|
+
import { Attractor } from "./attractor.js";
|
|
10
|
+
import { Logger } from "../Misc/logger.js";
|
|
9
11
|
import { BoxParticleEmitter } from "../Particles/EmitterTypes/boxParticleEmitter.js";
|
|
10
12
|
import { Scene } from "../scene.js";
|
|
11
13
|
import { ImageProcessingConfiguration } from "../Materials/imageProcessingConfiguration.js";
|
|
@@ -79,6 +81,17 @@ export class GPUParticleSystem extends BaseParticleSystem {
|
|
|
79
81
|
set activeParticleCount(value) {
|
|
80
82
|
this.maxActiveParticleCount = value;
|
|
81
83
|
}
|
|
84
|
+
/**
|
|
85
|
+
* Add an attractor to the particle system. Attractors are used to change the direction of the particles in the system.
|
|
86
|
+
* @param attractor - The attractor to add to the particle system
|
|
87
|
+
*/
|
|
88
|
+
addAttractor(attractor) {
|
|
89
|
+
if (this._attractors.length >= this.maxAttractors) {
|
|
90
|
+
Logger.Warn(`GPU particle system supports a maximum of ${this.maxAttractors} attractors. Ignoring additional attractor.`);
|
|
91
|
+
return;
|
|
92
|
+
}
|
|
93
|
+
super.addAttractor(attractor);
|
|
94
|
+
}
|
|
82
95
|
/**
|
|
83
96
|
* Creates a Point Emitter for the particle system (emits directly from the emitter position)
|
|
84
97
|
* @param direction1 Particles are emitted between the direction1 and direction2 from within the box
|
|
@@ -430,23 +443,19 @@ export class GPUParticleSystem extends BaseParticleSystem {
|
|
|
430
443
|
drawWrapper.drawContext?.reset();
|
|
431
444
|
}
|
|
432
445
|
}
|
|
433
|
-
_addFactorGradient(factorGradients, gradient, factor) {
|
|
434
|
-
const valueGradient = new FactorGradient(gradient, factor);
|
|
435
|
-
factorGradients.push(valueGradient);
|
|
436
|
-
this._releaseBuffers();
|
|
437
|
-
}
|
|
438
446
|
/**
|
|
439
447
|
* Adds a new size gradient
|
|
440
448
|
* @param gradient defines the gradient to use (between 0 and 1)
|
|
441
449
|
* @param factor defines the size factor to affect to the specified gradient
|
|
450
|
+
* @param factor2 defines an additional factor used to define a range ([factor, factor2]) with main value to pick the final value from
|
|
442
451
|
* @returns the current particle system
|
|
443
452
|
*/
|
|
444
|
-
addSizeGradient(gradient, factor) {
|
|
453
|
+
addSizeGradient(gradient, factor, factor2) {
|
|
445
454
|
if (!this._sizeGradients) {
|
|
446
455
|
this._sizeGradients = [];
|
|
447
456
|
}
|
|
448
|
-
this._addFactorGradient(this._sizeGradients, gradient, factor);
|
|
449
|
-
this._refreshFactorGradient(this._sizeGradients, "_sizeGradientsTexture"
|
|
457
|
+
this._addFactorGradient(this._sizeGradients, gradient, factor, factor2);
|
|
458
|
+
this._refreshFactorGradient(this._sizeGradients, "_sizeGradientsTexture");
|
|
450
459
|
this._releaseBuffers();
|
|
451
460
|
return this;
|
|
452
461
|
}
|
|
@@ -460,21 +469,10 @@ export class GPUParticleSystem extends BaseParticleSystem {
|
|
|
460
469
|
this._sizeGradientsTexture = null;
|
|
461
470
|
return this;
|
|
462
471
|
}
|
|
463
|
-
_refreshFactorGradient(factorGradients, textureName
|
|
472
|
+
_refreshFactorGradient(factorGradients, textureName) {
|
|
464
473
|
if (!factorGradients) {
|
|
465
474
|
return;
|
|
466
475
|
}
|
|
467
|
-
if (reorder) {
|
|
468
|
-
factorGradients.sort((a, b) => {
|
|
469
|
-
if (a.gradient < b.gradient) {
|
|
470
|
-
return -1;
|
|
471
|
-
}
|
|
472
|
-
else if (a.gradient > b.gradient) {
|
|
473
|
-
return 1;
|
|
474
|
-
}
|
|
475
|
-
return 0;
|
|
476
|
-
});
|
|
477
|
-
}
|
|
478
476
|
const that = this;
|
|
479
477
|
if (that[textureName]) {
|
|
480
478
|
that[textureName].dispose();
|
|
@@ -485,14 +483,15 @@ export class GPUParticleSystem extends BaseParticleSystem {
|
|
|
485
483
|
* Adds a new angular speed gradient
|
|
486
484
|
* @param gradient defines the gradient to use (between 0 and 1)
|
|
487
485
|
* @param factor defines the angular speed to affect to the specified gradient
|
|
486
|
+
* @param factor2 defines an additional factor used to define a range ([factor, factor2]) with main value to pick the final value from
|
|
488
487
|
* @returns the current particle system
|
|
489
488
|
*/
|
|
490
|
-
addAngularSpeedGradient(gradient, factor) {
|
|
489
|
+
addAngularSpeedGradient(gradient, factor, factor2) {
|
|
491
490
|
if (!this._angularSpeedGradients) {
|
|
492
491
|
this._angularSpeedGradients = [];
|
|
493
492
|
}
|
|
494
|
-
this._addFactorGradient(this._angularSpeedGradients, gradient, factor);
|
|
495
|
-
this._refreshFactorGradient(this._angularSpeedGradients, "_angularSpeedGradientsTexture"
|
|
493
|
+
this._addFactorGradient(this._angularSpeedGradients, gradient, factor, factor2);
|
|
494
|
+
this._refreshFactorGradient(this._angularSpeedGradients, "_angularSpeedGradientsTexture");
|
|
496
495
|
this._releaseBuffers();
|
|
497
496
|
return this;
|
|
498
497
|
}
|
|
@@ -510,14 +509,15 @@ export class GPUParticleSystem extends BaseParticleSystem {
|
|
|
510
509
|
* Adds a new velocity gradient
|
|
511
510
|
* @param gradient defines the gradient to use (between 0 and 1)
|
|
512
511
|
* @param factor defines the velocity to affect to the specified gradient
|
|
512
|
+
* @param factor2 defines an additional factor used to define a range ([factor, factor2]) with main value to pick the final value from
|
|
513
513
|
* @returns the current particle system
|
|
514
514
|
*/
|
|
515
|
-
addVelocityGradient(gradient, factor) {
|
|
515
|
+
addVelocityGradient(gradient, factor, factor2) {
|
|
516
516
|
if (!this._velocityGradients) {
|
|
517
517
|
this._velocityGradients = [];
|
|
518
518
|
}
|
|
519
|
-
this._addFactorGradient(this._velocityGradients, gradient, factor);
|
|
520
|
-
this._refreshFactorGradient(this._velocityGradients, "_velocityGradientsTexture"
|
|
519
|
+
this._addFactorGradient(this._velocityGradients, gradient, factor, factor2);
|
|
520
|
+
this._refreshFactorGradient(this._velocityGradients, "_velocityGradientsTexture");
|
|
521
521
|
this._releaseBuffers();
|
|
522
522
|
return this;
|
|
523
523
|
}
|
|
@@ -535,14 +535,15 @@ export class GPUParticleSystem extends BaseParticleSystem {
|
|
|
535
535
|
* Adds a new limit velocity gradient
|
|
536
536
|
* @param gradient defines the gradient to use (between 0 and 1)
|
|
537
537
|
* @param factor defines the limit velocity value to affect to the specified gradient
|
|
538
|
+
* @param factor2 defines an additional factor used to define a range ([factor, factor2]) with main value to pick the final value from
|
|
538
539
|
* @returns the current particle system
|
|
539
540
|
*/
|
|
540
|
-
addLimitVelocityGradient(gradient, factor) {
|
|
541
|
+
addLimitVelocityGradient(gradient, factor, factor2) {
|
|
541
542
|
if (!this._limitVelocityGradients) {
|
|
542
543
|
this._limitVelocityGradients = [];
|
|
543
544
|
}
|
|
544
|
-
this._addFactorGradient(this._limitVelocityGradients, gradient, factor);
|
|
545
|
-
this._refreshFactorGradient(this._limitVelocityGradients, "_limitVelocityGradientsTexture"
|
|
545
|
+
this._addFactorGradient(this._limitVelocityGradients, gradient, factor, factor2);
|
|
546
|
+
this._refreshFactorGradient(this._limitVelocityGradients, "_limitVelocityGradientsTexture");
|
|
546
547
|
this._releaseBuffers();
|
|
547
548
|
return this;
|
|
548
549
|
}
|
|
@@ -560,14 +561,15 @@ export class GPUParticleSystem extends BaseParticleSystem {
|
|
|
560
561
|
* Adds a new drag gradient
|
|
561
562
|
* @param gradient defines the gradient to use (between 0 and 1)
|
|
562
563
|
* @param factor defines the drag value to affect to the specified gradient
|
|
564
|
+
* @param factor2 defines an additional factor used to define a range ([factor, factor2]) with main value to pick the final value from
|
|
563
565
|
* @returns the current particle system
|
|
564
566
|
*/
|
|
565
|
-
addDragGradient(gradient, factor) {
|
|
567
|
+
addDragGradient(gradient, factor, factor2) {
|
|
566
568
|
if (!this._dragGradients) {
|
|
567
569
|
this._dragGradients = [];
|
|
568
570
|
}
|
|
569
|
-
this._addFactorGradient(this._dragGradients, gradient, factor);
|
|
570
|
-
this._refreshFactorGradient(this._dragGradients, "_dragGradientsTexture"
|
|
571
|
+
this._addFactorGradient(this._dragGradients, gradient, factor, factor2);
|
|
572
|
+
this._refreshFactorGradient(this._dragGradients, "_dragGradientsTexture");
|
|
571
573
|
this._releaseBuffers();
|
|
572
574
|
return this;
|
|
573
575
|
}
|
|
@@ -817,6 +819,7 @@ export class GPUParticleSystem extends BaseParticleSystem {
|
|
|
817
819
|
this._currentActiveCount = 0;
|
|
818
820
|
this._isAnimationSheetEnabled = isAnimationSheetEnabled;
|
|
819
821
|
this._emitRateControl = !!options.emitRateControl;
|
|
822
|
+
this.maxAttractors = options.maxAttractors ?? 8;
|
|
820
823
|
this.particleEmitterType = new BoxParticleEmitter();
|
|
821
824
|
// Random data
|
|
822
825
|
const maxTextureSize = Math.min(this._engine.getCaps().maxTextureSize, fullOptions.randomTextureSize);
|
|
@@ -1123,6 +1126,10 @@ export class GPUParticleSystem extends BaseParticleSystem {
|
|
|
1123
1126
|
if (this.isLocal) {
|
|
1124
1127
|
defines += "\n#define LOCAL";
|
|
1125
1128
|
}
|
|
1129
|
+
if (this._attractors.length > 0) {
|
|
1130
|
+
defines += "\n#define ATTRACTORS";
|
|
1131
|
+
defines += "\n#define MAX_ATTRACTORS " + this.maxAttractors;
|
|
1132
|
+
}
|
|
1126
1133
|
if (this._emitRateControl) {
|
|
1127
1134
|
defines += "\n#define EMITRATECTRL";
|
|
1128
1135
|
}
|
|
@@ -1288,14 +1295,17 @@ export class GPUParticleSystem extends BaseParticleSystem {
|
|
|
1288
1295
|
if (!factorGradients || !factorGradients.length || texture) {
|
|
1289
1296
|
return;
|
|
1290
1297
|
}
|
|
1291
|
-
const data = new Float32Array(this._rawTextureWidth);
|
|
1298
|
+
const data = new Float32Array(this._rawTextureWidth * 2);
|
|
1292
1299
|
for (let x = 0; x < this._rawTextureWidth; x++) {
|
|
1293
1300
|
const ratio = x / this._rawTextureWidth;
|
|
1294
1301
|
GradientHelper.GetCurrentGradient(ratio, factorGradients, (currentGradient, nextGradient, scale) => {
|
|
1295
|
-
|
|
1302
|
+
const cg = currentGradient;
|
|
1303
|
+
const ng = nextGradient;
|
|
1304
|
+
data[x * 2] = Lerp(cg.factor1, ng.factor1, scale);
|
|
1305
|
+
data[x * 2 + 1] = Lerp(cg.factor2 ?? cg.factor1, ng.factor2 ?? ng.factor1, scale);
|
|
1296
1306
|
});
|
|
1297
1307
|
}
|
|
1298
|
-
this[textureName] = RawTexture
|
|
1308
|
+
this[textureName] = new RawTexture(data, this._rawTextureWidth, 1, 7, this._scene || this._engine, false, false, 1, 1);
|
|
1299
1309
|
this[textureName].name = textureName.substring(1);
|
|
1300
1310
|
}
|
|
1301
1311
|
_createSizeGradientTexture() {
|
|
@@ -1460,6 +1470,27 @@ export class GPUParticleSystem extends BaseParticleSystem {
|
|
|
1460
1470
|
if (!this.isLocal) {
|
|
1461
1471
|
this._updateBuffer.setMatrix("emitterWM", emitterWM);
|
|
1462
1472
|
}
|
|
1473
|
+
if (this._attractors.length > 0) {
|
|
1474
|
+
this._updateBuffer.setInt("attractorCount", this._attractors.length);
|
|
1475
|
+
// Compute inverse world matrix once for all attractors when in local space
|
|
1476
|
+
let invWorld;
|
|
1477
|
+
if (this.isLocal) {
|
|
1478
|
+
invWorld = TmpVectors.Matrix[1];
|
|
1479
|
+
emitterWM.invertToRef(invWorld);
|
|
1480
|
+
}
|
|
1481
|
+
for (let i = 0; i < this._attractors.length; i++) {
|
|
1482
|
+
const attractor = this._attractors[i];
|
|
1483
|
+
const name = "attractorPositionAndStrength[" + i + "]";
|
|
1484
|
+
if (invWorld) {
|
|
1485
|
+
const localPos = TmpVectors.Vector3[0];
|
|
1486
|
+
Vector3.TransformCoordinatesToRef(attractor.position, invWorld, localPos);
|
|
1487
|
+
this._updateBuffer.setFloat4(name, localPos.x, localPos.y, localPos.z, attractor.strength);
|
|
1488
|
+
}
|
|
1489
|
+
else {
|
|
1490
|
+
this._updateBuffer.setFloat4(name, attractor.position.x, attractor.position.y, attractor.position.z, attractor.strength);
|
|
1491
|
+
}
|
|
1492
|
+
}
|
|
1493
|
+
}
|
|
1463
1494
|
this._platform.updateParticleBuffer(this._targetIndex, this._targetBuffer, this._currentActiveCount);
|
|
1464
1495
|
// Switch VAOs
|
|
1465
1496
|
this._targetIndex++;
|
|
@@ -1750,12 +1781,20 @@ export class GPUParticleSystem extends BaseParticleSystem {
|
|
|
1750
1781
|
serializationObject.activeParticleCount = this.activeParticleCount;
|
|
1751
1782
|
serializationObject.randomTextureSize = this._randomTextureSize;
|
|
1752
1783
|
serializationObject.emitRateControl = this._emitRateControl;
|
|
1784
|
+
serializationObject.maxAttractors = this.maxAttractors;
|
|
1753
1785
|
serializationObject.customShader = this.customShader;
|
|
1754
1786
|
serializationObject.preventAutoStart = this.preventAutoStart;
|
|
1755
1787
|
serializationObject.worldOffset = this.worldOffset.asArray();
|
|
1756
1788
|
if (this.metadata) {
|
|
1757
1789
|
serializationObject.metadata = this.metadata;
|
|
1758
1790
|
}
|
|
1791
|
+
// Attractors
|
|
1792
|
+
if (this._attractors.length > 0) {
|
|
1793
|
+
serializationObject.attractors = [];
|
|
1794
|
+
for (const attractor of this._attractors) {
|
|
1795
|
+
serializationObject.attractors.push(attractor.serialize());
|
|
1796
|
+
}
|
|
1797
|
+
}
|
|
1759
1798
|
return serializationObject;
|
|
1760
1799
|
}
|
|
1761
1800
|
/**
|
|
@@ -1782,6 +1821,7 @@ export class GPUParticleSystem extends BaseParticleSystem {
|
|
|
1782
1821
|
capacity: capacity || parsedParticleSystem.capacity,
|
|
1783
1822
|
randomTextureSize: parsedParticleSystem.randomTextureSize,
|
|
1784
1823
|
emitRateControl: parsedParticleSystem.emitRateControl,
|
|
1824
|
+
maxAttractors: parsedParticleSystem.maxAttractors,
|
|
1785
1825
|
}, sceneOrEngine, null, parsedParticleSystem.isAnimationSheetEnabled);
|
|
1786
1826
|
particleSystem._rootUrl = rootUrl;
|
|
1787
1827
|
if (parsedParticleSystem.customShader && engine.createEffectForParticles) {
|
|
@@ -1808,6 +1848,15 @@ export class GPUParticleSystem extends BaseParticleSystem {
|
|
|
1808
1848
|
if (parsedParticleSystem.metadata) {
|
|
1809
1849
|
particleSystem.metadata = parsedParticleSystem.metadata;
|
|
1810
1850
|
}
|
|
1851
|
+
// Attractors
|
|
1852
|
+
if (parsedParticleSystem.attractors) {
|
|
1853
|
+
for (const attractorData of parsedParticleSystem.attractors) {
|
|
1854
|
+
const attractor = new Attractor();
|
|
1855
|
+
attractor.position = Vector3.FromArray(attractorData.position);
|
|
1856
|
+
attractor.strength = attractorData.strength;
|
|
1857
|
+
particleSystem.addAttractor(attractor);
|
|
1858
|
+
}
|
|
1859
|
+
}
|
|
1811
1860
|
if (!doNotStart && !particleSystem.preventAutoStart) {
|
|
1812
1861
|
particleSystem.start();
|
|
1813
1862
|
}
|