@onerjs/core 8.53.5 → 8.53.7
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/Animations/animationGroup.d.ts +0 -1
- package/Animations/animationGroup.js +0 -1
- package/Animations/animationGroup.js.map +1 -1
- package/Animations/animationGroup.pure.js +2 -0
- package/Animations/animationGroup.pure.js.map +1 -1
- package/Animations/runtimeAnimation.js +11 -0
- package/Animations/runtimeAnimation.js.map +1 -1
- package/Audio/audioSceneComponent.pure.js +1 -1
- package/AudioV2/abstractAudio/abstractSound.d.ts +2 -1
- package/AudioV2/abstractAudio/abstractSound.js +7 -2
- package/AudioV2/abstractAudio/abstractSound.js.map +1 -1
- package/AudioV2/abstractAudio/abstractSoundInstance.d.ts +3 -1
- package/AudioV2/abstractAudio/abstractSoundInstance.js.map +1 -1
- package/AudioV2/abstractAudio/staticSound.d.ts +6 -0
- package/AudioV2/abstractAudio/staticSound.js +17 -1
- package/AudioV2/abstractAudio/staticSound.js.map +1 -1
- package/AudioV2/abstractAudio/staticSoundInstance.d.ts +4 -2
- package/AudioV2/abstractAudio/staticSoundInstance.js.map +1 -1
- package/AudioV2/abstractAudio/streamingSound.d.ts +6 -0
- package/AudioV2/abstractAudio/streamingSound.js +9 -1
- package/AudioV2/abstractAudio/streamingSound.js.map +1 -1
- package/AudioV2/webAudio/webAudioStaticSound.d.ts +7 -1
- package/AudioV2/webAudio/webAudioStaticSound.js +56 -8
- package/AudioV2/webAudio/webAudioStaticSound.js.map +1 -1
- package/AudioV2/webAudio/webAudioStreamingSound.d.ts +3 -1
- package/AudioV2/webAudio/webAudioStreamingSound.js +16 -4
- package/AudioV2/webAudio/webAudioStreamingSound.js.map +1 -1
- package/BakedVertexAnimation/bakedVertexAnimationManager.d.ts +2 -2
- package/BakedVertexAnimation/bakedVertexAnimationManager.js +151 -121
- package/BakedVertexAnimation/bakedVertexAnimationManager.js.map +1 -1
- package/Behaviors/Cameras/interpolatingBehavior.d.ts +17 -2
- package/Behaviors/Cameras/interpolatingBehavior.js +53 -23
- package/Behaviors/Cameras/interpolatingBehavior.js.map +1 -1
- package/Bones/bone.pure.js +3 -3
- package/Buffers/buffer.pure.js +0 -12
- package/Buffers/buffer.pure.js.map +1 -1
- package/Cameras/Inputs/BaseCameraMouseWheelInput.js +141 -126
- package/Cameras/Inputs/BaseCameraMouseWheelInput.js.map +1 -1
- package/Cameras/Inputs/BaseCameraPointersInput.d.ts +2 -1
- package/Cameras/Inputs/BaseCameraPointersInput.js +290 -277
- package/Cameras/Inputs/BaseCameraPointersInput.js.map +1 -1
- package/Cameras/Inputs/arcRotateCameraGamepadInput.js +115 -102
- package/Cameras/Inputs/arcRotateCameraGamepadInput.js.map +1 -1
- package/Cameras/Inputs/arcRotateCameraKeyboardMoveInput.d.ts +3 -0
- package/Cameras/Inputs/arcRotateCameraKeyboardMoveInput.js +334 -273
- package/Cameras/Inputs/arcRotateCameraKeyboardMoveInput.js.map +1 -1
- package/Cameras/Inputs/arcRotateCameraMouseWheelInput.js +273 -258
- package/Cameras/Inputs/arcRotateCameraMouseWheelInput.js.map +1 -1
- package/Cameras/Inputs/arcRotateCameraPointersInput.js +237 -213
- package/Cameras/Inputs/arcRotateCameraPointersInput.js.map +1 -1
- package/Cameras/Inputs/flyCameraKeyboardInput.js +199 -168
- package/Cameras/Inputs/flyCameraKeyboardInput.js.map +1 -1
- package/Cameras/Inputs/flyCameraMouseInput.js +243 -229
- package/Cameras/Inputs/flyCameraMouseInput.js.map +1 -1
- package/Cameras/Inputs/followCameraKeyboardMoveInput.js +311 -266
- package/Cameras/Inputs/followCameraKeyboardMoveInput.js.map +1 -1
- package/Cameras/Inputs/followCameraMouseWheelInput.js +139 -119
- package/Cameras/Inputs/followCameraMouseWheelInput.js.map +1 -1
- package/Cameras/Inputs/followCameraPointersInput.js +239 -203
- package/Cameras/Inputs/followCameraPointersInput.js.map +1 -1
- package/Cameras/Inputs/freeCameraGamepadInput.js +127 -114
- package/Cameras/Inputs/freeCameraGamepadInput.js.map +1 -1
- package/Cameras/Inputs/freeCameraKeyboardMoveInput.js +278 -244
- package/Cameras/Inputs/freeCameraKeyboardMoveInput.js.map +1 -1
- package/Cameras/Inputs/freeCameraMouseInput.js +216 -202
- package/Cameras/Inputs/freeCameraMouseInput.js.map +1 -1
- package/Cameras/Inputs/freeCameraMouseWheelInput.js +368 -353
- package/Cameras/Inputs/freeCameraMouseWheelInput.js.map +1 -1
- package/Cameras/Inputs/freeCameraTouchInput.js +185 -172
- package/Cameras/Inputs/freeCameraTouchInput.js.map +1 -1
- package/Cameras/Inputs/geospatialCameraKeyboardInput.d.ts +2 -0
- package/Cameras/Inputs/geospatialCameraKeyboardInput.js +291 -246
- package/Cameras/Inputs/geospatialCameraKeyboardInput.js.map +1 -1
- package/Cameras/Inputs/geospatialCameraPointersInput.d.ts +11 -1
- package/Cameras/Inputs/geospatialCameraPointersInput.js +18 -2
- package/Cameras/Inputs/geospatialCameraPointersInput.js.map +1 -1
- package/Cameras/Inputs/orbitCameraPointersInput.js +112 -96
- package/Cameras/Inputs/orbitCameraPointersInput.js.map +1 -1
- package/Cameras/VR/vrExperienceHelper.d.ts +0 -2
- package/Cameras/VR/vrExperienceHelper.js +0 -2
- package/Cameras/VR/vrExperienceHelper.js.map +1 -1
- package/Cameras/VR/vrExperienceHelper.pure.js +5 -0
- package/Cameras/VR/vrExperienceHelper.pure.js.map +1 -1
- package/Cameras/arcRotateCamera.pure.js +1559 -1479
- package/Cameras/arcRotateCamera.pure.js.map +1 -1
- package/Cameras/camera.pure.js +1225 -1178
- package/Cameras/camera.pure.js.map +1 -1
- package/Cameras/flyCamera.pure.js +369 -351
- package/Cameras/flyCamera.pure.js.map +1 -1
- package/Cameras/followCamera.pure.js +229 -192
- package/Cameras/followCamera.pure.js.map +1 -1
- package/Cameras/freeCamera.pure.js +373 -351
- package/Cameras/freeCamera.pure.js.map +1 -1
- package/Cameras/geospatialCamera.pure.d.ts +30 -7
- package/Cameras/geospatialCamera.pure.js +502 -457
- package/Cameras/geospatialCamera.pure.js.map +1 -1
- package/Cameras/geospatialCameraMovement.js +2 -2
- package/Cameras/geospatialCameraMovement.js.map +1 -1
- package/Cameras/targetCamera.pure.d.ts +7 -0
- package/Cameras/targetCamera.pure.js +550 -509
- package/Cameras/targetCamera.pure.js.map +1 -1
- package/Cameras/universalCamera.pure.js +98 -85
- package/Cameras/universalCamera.pure.js.map +1 -1
- package/Collisions/gpuPicker.d.ts +111 -4
- package/Collisions/gpuPicker.js +696 -119
- package/Collisions/gpuPicker.js.map +1 -1
- package/Compute/computeShader.pure.js +372 -355
- package/Compute/computeShader.pure.js.map +1 -1
- package/Culling/Helper/transformFeedbackBoundingHelper.pure.js +2 -2
- package/Decorators/nodeDecorator.d.ts +11 -1
- package/Decorators/nodeDecorator.js +43 -6
- package/Decorators/nodeDecorator.js.map +1 -1
- package/Engines/AbstractEngine/abstractEngine.loadFile.pure.js +8 -0
- package/Engines/AbstractEngine/abstractEngine.loadFile.pure.js.map +1 -1
- package/Engines/Native/nativeHelpers.js +15 -0
- package/Engines/Native/nativeHelpers.js.map +1 -1
- package/Engines/Native/nativeInterfaces.d.ts +7 -2
- package/Engines/Native/nativeInterfaces.js.map +1 -1
- package/Engines/Native/nativeRenderTargetWrapper.d.ts +5 -0
- package/Engines/Native/nativeRenderTargetWrapper.js +35 -1
- package/Engines/Native/nativeRenderTargetWrapper.js.map +1 -1
- package/Engines/Processors/shaderProcessor.js +5 -3
- package/Engines/Processors/shaderProcessor.js.map +1 -1
- package/Engines/WebGPU/Extensions/engine.videoTexture.pure.js +16 -3
- package/Engines/WebGPU/Extensions/engine.videoTexture.pure.js.map +1 -1
- package/Engines/WebGPU/webgpuClearQuad.pure.js +7 -1
- package/Engines/WebGPU/webgpuClearQuad.pure.js.map +1 -1
- package/Engines/abstractEngine.functions.d.ts +8 -2
- package/Engines/abstractEngine.functions.js +12 -4
- package/Engines/abstractEngine.functions.js.map +1 -1
- package/Engines/abstractEngine.pure.d.ts +20 -1
- package/Engines/abstractEngine.pure.js +21 -134
- package/Engines/abstractEngine.pure.js.map +1 -1
- package/Engines/engine.d.ts +208 -0
- package/Engines/engine.pure.js +0 -15
- package/Engines/engine.pure.js.map +1 -1
- package/Engines/nullEngine.pure.d.ts +66 -0
- package/Engines/nullEngine.pure.js +97 -0
- package/Engines/nullEngine.pure.js.map +1 -1
- package/Engines/thinEngine.pure.d.ts +0 -13
- package/Engines/thinEngine.pure.js +4 -23
- package/Engines/thinEngine.pure.js.map +1 -1
- package/Engines/thinNativeEngine.d.ts +0 -1
- package/Engines/thinNativeEngine.js +0 -1
- package/Engines/thinNativeEngine.js.map +1 -1
- package/Engines/thinNativeEngine.pure.d.ts +27 -0
- package/Engines/thinNativeEngine.pure.js +383 -17
- package/Engines/thinNativeEngine.pure.js.map +1 -1
- package/Engines/webgpuEngine.d.ts +1 -0
- package/Engines/webgpuEngine.js +1 -0
- package/Engines/webgpuEngine.js.map +1 -1
- package/Engines/webgpuEngine.pure.d.ts +9 -0
- package/Engines/webgpuEngine.pure.js +7 -0
- package/Engines/webgpuEngine.pure.js.map +1 -1
- package/FlowGraph/flowGraph.js +9 -0
- package/FlowGraph/flowGraph.js.map +1 -1
- package/FlowGraph/flowGraphContext.js +597 -584
- package/FlowGraph/flowGraphContext.js.map +1 -1
- package/FlowGraph/flowGraphDataConnection.pure.d.ts +14 -0
- package/FlowGraph/flowGraphDataConnection.pure.js +38 -1
- package/FlowGraph/flowGraphDataConnection.pure.js.map +1 -1
- package/FlowGraph/serialization.d.ts +11 -0
- package/FlowGraph/serialization.js +11 -1
- package/FlowGraph/serialization.js.map +1 -1
- package/FrameGraph/Node/Blocks/Layers/glowLayerBlock.pure.js +182 -170
- package/FrameGraph/Node/Blocks/Layers/glowLayerBlock.pure.js.map +1 -1
- package/FrameGraph/Node/Blocks/Layers/highlightLayerBlock.pure.js +196 -184
- package/FrameGraph/Node/Blocks/Layers/highlightLayerBlock.pure.js.map +1 -1
- package/FrameGraph/Node/Blocks/Layers/selectionOutlineLayerBlock.pure.js +222 -210
- package/FrameGraph/Node/Blocks/Layers/selectionOutlineLayerBlock.pure.js.map +1 -1
- package/FrameGraph/Node/Blocks/PostProcesses/basePostProcessBlock.js +123 -111
- package/FrameGraph/Node/Blocks/PostProcesses/basePostProcessBlock.js.map +1 -1
- package/FrameGraph/Node/Blocks/PostProcesses/baseWithPropertiesPostProcessBlock.js +158 -146
- package/FrameGraph/Node/Blocks/PostProcesses/baseWithPropertiesPostProcessBlock.js.map +1 -1
- package/FrameGraph/Node/Blocks/PostProcesses/blackAndWhitePostProcessBlock.pure.js +63 -51
- package/FrameGraph/Node/Blocks/PostProcesses/blackAndWhitePostProcessBlock.pure.js.map +1 -1
- package/FrameGraph/Node/Blocks/PostProcesses/bloomPostProcessBlock.pure.js +122 -110
- package/FrameGraph/Node/Blocks/PostProcesses/bloomPostProcessBlock.pure.js.map +1 -1
- package/FrameGraph/Node/Blocks/PostProcesses/blurPostProcessBlock.pure.js +76 -64
- package/FrameGraph/Node/Blocks/PostProcesses/blurPostProcessBlock.pure.js.map +1 -1
- package/FrameGraph/Node/Blocks/PostProcesses/chromaticAberrationPostProcessBlock.pure.js +89 -77
- package/FrameGraph/Node/Blocks/PostProcesses/chromaticAberrationPostProcessBlock.pure.js.map +1 -1
- package/FrameGraph/Node/Blocks/PostProcesses/circleOfConfusionPostProcessBlock.pure.js +134 -122
- package/FrameGraph/Node/Blocks/PostProcesses/circleOfConfusionPostProcessBlock.pure.js.map +1 -1
- package/FrameGraph/Node/Blocks/PostProcesses/colorCorrectionPostProcessBlock.pure.js +58 -46
- package/FrameGraph/Node/Blocks/PostProcesses/colorCorrectionPostProcessBlock.pure.js.map +1 -1
- package/FrameGraph/Node/Blocks/PostProcesses/convolutionPostProcessBlock.pure.js +107 -95
- package/FrameGraph/Node/Blocks/PostProcesses/convolutionPostProcessBlock.pure.js.map +1 -1
- package/FrameGraph/Node/Blocks/PostProcesses/depthOfFieldPostProcessBlock.pure.js +181 -169
- package/FrameGraph/Node/Blocks/PostProcesses/depthOfFieldPostProcessBlock.pure.js.map +1 -1
- package/FrameGraph/Node/Blocks/PostProcesses/extractHighlightsPostProcessBlock.pure.js +63 -51
- package/FrameGraph/Node/Blocks/PostProcesses/extractHighlightsPostProcessBlock.pure.js.map +1 -1
- package/FrameGraph/Node/Blocks/PostProcesses/filterPostProcessBlock.pure.js +63 -51
- package/FrameGraph/Node/Blocks/PostProcesses/filterPostProcessBlock.pure.js.map +1 -1
- package/FrameGraph/Node/Blocks/PostProcesses/grainPostProcessBlock.pure.js +76 -64
- package/FrameGraph/Node/Blocks/PostProcesses/grainPostProcessBlock.pure.js.map +1 -1
- package/FrameGraph/Node/Blocks/PostProcesses/imageProcessingPostProcessBlock.pure.js +246 -234
- package/FrameGraph/Node/Blocks/PostProcesses/imageProcessingPostProcessBlock.pure.js.map +1 -1
- package/FrameGraph/Node/Blocks/PostProcesses/motionBlurPostProcessBlock.pure.js +108 -96
- package/FrameGraph/Node/Blocks/PostProcesses/motionBlurPostProcessBlock.pure.js.map +1 -1
- package/FrameGraph/Node/Blocks/PostProcesses/screenSpaceCurvaturePostProcessBlock.pure.js +87 -75
- package/FrameGraph/Node/Blocks/PostProcesses/screenSpaceCurvaturePostProcessBlock.pure.js.map +1 -1
- package/FrameGraph/Node/Blocks/PostProcesses/sharpenPostProcessBlock.pure.js +76 -64
- package/FrameGraph/Node/Blocks/PostProcesses/sharpenPostProcessBlock.pure.js.map +1 -1
- package/FrameGraph/Node/Blocks/PostProcesses/ssao2PostProcessBlock.pure.js +313 -301
- package/FrameGraph/Node/Blocks/PostProcesses/ssao2PostProcessBlock.pure.js.map +1 -1
- package/FrameGraph/Node/Blocks/PostProcesses/ssrPostProcessBlock.pure.js +502 -490
- package/FrameGraph/Node/Blocks/PostProcesses/ssrPostProcessBlock.pure.js.map +1 -1
- package/FrameGraph/Node/Blocks/PostProcesses/taaPostProcessBlock.pure.js +147 -135
- package/FrameGraph/Node/Blocks/PostProcesses/taaPostProcessBlock.pure.js.map +1 -1
- package/FrameGraph/Node/Blocks/PostProcesses/tonemapPostProcessBlock.pure.js +90 -78
- package/FrameGraph/Node/Blocks/PostProcesses/tonemapPostProcessBlock.pure.js.map +1 -1
- package/FrameGraph/Node/Blocks/PostProcesses/volumetricLightingBlock.pure.js +179 -167
- package/FrameGraph/Node/Blocks/PostProcesses/volumetricLightingBlock.pure.js.map +1 -1
- package/FrameGraph/Node/Blocks/Rendering/baseObjectRendererBlock.js +462 -451
- package/FrameGraph/Node/Blocks/Rendering/baseObjectRendererBlock.js.map +1 -1
- package/FrameGraph/Node/Blocks/Rendering/baseShadowGeneratorBlock.js +265 -253
- package/FrameGraph/Node/Blocks/Rendering/baseShadowGeneratorBlock.js.map +1 -1
- package/FrameGraph/Node/Blocks/Rendering/csmShadowGeneratorBlock.pure.js +204 -192
- package/FrameGraph/Node/Blocks/Rendering/csmShadowGeneratorBlock.pure.js.map +1 -1
- package/FrameGraph/Node/Blocks/Rendering/geometryRendererBlock.pure.js +611 -550
- package/FrameGraph/Node/Blocks/Rendering/geometryRendererBlock.pure.js.map +1 -1
- package/FrameGraph/Node/Blocks/Rendering/iblShadowsRendererBlock.pure.js +320 -308
- package/FrameGraph/Node/Blocks/Rendering/iblShadowsRendererBlock.pure.js.map +1 -1
- package/FrameGraph/Node/Blocks/Rendering/utilityLayerRendererBlock.pure.js +87 -75
- package/FrameGraph/Node/Blocks/Rendering/utilityLayerRendererBlock.pure.js.map +1 -1
- package/FrameGraph/Node/Blocks/Textures/clearBlock.pure.js +154 -142
- package/FrameGraph/Node/Blocks/Textures/clearBlock.pure.js.map +1 -1
- package/FrameGraph/Node/Blocks/Textures/copyTextureBlock.pure.js +150 -138
- package/FrameGraph/Node/Blocks/Textures/copyTextureBlock.pure.js.map +1 -1
- package/FrameGraph/Node/Blocks/inputBlock.pure.js +270 -256
- package/FrameGraph/Node/Blocks/inputBlock.pure.js.map +1 -1
- package/FrameGraph/Node/Blocks/lightingVolumeBlock.pure.js +95 -83
- package/FrameGraph/Node/Blocks/lightingVolumeBlock.pure.js.map +1 -1
- package/FrameGraph/Node/nodeRenderGraph.js +715 -693
- package/FrameGraph/Node/nodeRenderGraph.js.map +1 -1
- package/FrameGraph/Node/nodeRenderGraphBlock.js +548 -533
- package/FrameGraph/Node/nodeRenderGraphBlock.js.map +1 -1
- package/FrameGraph/Tasks/Rendering/iblShadows/iblShadowsAccumulationTask.d.ts +2 -2
- package/FrameGraph/Tasks/Rendering/iblShadows/iblShadowsAccumulationTask.js +43 -51
- package/FrameGraph/Tasks/Rendering/iblShadows/iblShadowsAccumulationTask.js.map +1 -1
- package/FrameGraph/Tasks/Rendering/iblShadowsRendererTask.d.ts +0 -1
- package/FrameGraph/Tasks/Rendering/iblShadowsRendererTask.js +0 -1
- package/FrameGraph/Tasks/Rendering/iblShadowsRendererTask.js.map +1 -1
- package/FrameGraph/Tasks/Rendering/iblShadowsRendererTask.pure.d.ts +0 -1
- package/FrameGraph/Tasks/Rendering/iblShadowsRendererTask.pure.js +66 -35
- package/FrameGraph/Tasks/Rendering/iblShadowsRendererTask.pure.js.map +1 -1
- package/Helpers/environmentHelper.js +2 -2
- package/Helpers/environmentHelper.js.map +1 -1
- package/Layers/effectLayer.js +529 -519
- package/Layers/effectLayer.js.map +1 -1
- package/Layers/glowLayer.pure.js +428 -413
- package/Layers/glowLayer.pure.js.map +1 -1
- package/Layers/highlightLayer.pure.js +473 -458
- package/Layers/highlightLayer.pure.js.map +1 -1
- package/Layers/selectionOutlineLayer.pure.js +360 -345
- package/Layers/selectionOutlineLayer.pure.js.map +1 -1
- package/Lights/Clustered/clusteredLightContainer.pure.d.ts +1 -1
- package/Lights/Clustered/clusteredLightContainer.pure.js +583 -558
- package/Lights/Clustered/clusteredLightContainer.pure.js.map +1 -1
- package/Lights/Shadows/shadowGenerator.js +6 -1
- package/Lights/Shadows/shadowGenerator.js.map +1 -1
- package/Lights/areaLight.pure.js +61 -39
- package/Lights/areaLight.pure.js.map +1 -1
- package/Lights/directionalLight.pure.js +308 -284
- package/Lights/directionalLight.pure.js.map +1 -1
- package/Lights/hemisphericLight.pure.js +123 -104
- package/Lights/hemisphericLight.pure.js.map +1 -1
- package/Lights/light.d.ts +5 -3
- package/Lights/light.js +869 -827
- package/Lights/light.js.map +1 -1
- package/Lights/pointLight.pure.js +185 -174
- package/Lights/pointLight.pure.js.map +1 -1
- package/Lights/rectAreaLight.pure.d.ts +17 -0
- package/Lights/rectAreaLight.pure.js +238 -159
- package/Lights/rectAreaLight.pure.js.map +1 -1
- package/Lights/shadowLight.js +280 -268
- package/Lights/shadowLight.js.map +1 -1
- package/Lights/spotLight.pure.js +460 -427
- package/Lights/spotLight.pure.js.map +1 -1
- package/Loading/Plugins/babylonFileLoader.pure.js +17 -5
- package/Loading/Plugins/babylonFileLoader.pure.js.map +1 -1
- package/Loading/sceneLoader.d.ts +5 -1
- package/Loading/sceneLoader.js +299 -402
- package/Loading/sceneLoader.js.map +1 -1
- package/Materials/Background/backgroundMaterial.pure.d.ts +18 -18
- package/Materials/Background/backgroundMaterial.pure.js +949 -794
- package/Materials/Background/backgroundMaterial.pure.js.map +1 -1
- package/Materials/GaussianSplatting/gaussianSplattingGpuPickingMaterialPlugin.pure.d.ts +15 -0
- package/Materials/GaussianSplatting/gaussianSplattingGpuPickingMaterialPlugin.pure.js +34 -1
- package/Materials/GaussianSplatting/gaussianSplattingGpuPickingMaterialPlugin.pure.js.map +1 -1
- package/Materials/GaussianSplatting/gaussianSplattingMaterial.pure.d.ts +9 -0
- package/Materials/GaussianSplatting/gaussianSplattingMaterial.pure.js +26 -2
- package/Materials/GaussianSplatting/gaussianSplattingMaterial.pure.js.map +1 -1
- package/Materials/GaussianSplatting/gaussianSplattingSolidColorMaterialPlugin.pure.d.ts +2 -1
- package/Materials/GaussianSplatting/gaussianSplattingSolidColorMaterialPlugin.pure.js +169 -149
- package/Materials/GaussianSplatting/gaussianSplattingSolidColorMaterialPlugin.pure.js.map +1 -1
- package/Materials/Node/Blocks/Dual/imageSourceBlock.pure.js +1 -1
- package/Materials/Node/Blocks/Dual/lightBlock.pure.js +442 -429
- package/Materials/Node/Blocks/Dual/lightBlock.pure.js.map +1 -1
- package/Materials/Node/Blocks/Dual/reflectionTextureBaseBlock.pure.js +396 -383
- package/Materials/Node/Blocks/Dual/reflectionTextureBaseBlock.pure.js.map +1 -1
- package/Materials/Node/Blocks/Dual/sceneDepthBlock.pure.js +237 -220
- package/Materials/Node/Blocks/Dual/sceneDepthBlock.pure.js.map +1 -1
- package/Materials/Node/Blocks/Dual/textureBlock.pure.js +1 -1
- package/Materials/Node/Blocks/Fragment/ambientOcclusionBlock.pure.js +150 -133
- package/Materials/Node/Blocks/Fragment/ambientOcclusionBlock.pure.js.map +1 -1
- package/Materials/Node/Blocks/Fragment/fragmentOutputBlock.pure.js +265 -250
- package/Materials/Node/Blocks/Fragment/fragmentOutputBlock.pure.js.map +1 -1
- package/Materials/Node/Blocks/Fragment/heightToNormalBlock.pure.js +159 -142
- package/Materials/Node/Blocks/Fragment/heightToNormalBlock.pure.js.map +1 -1
- package/Materials/Node/Blocks/Fragment/imageProcessingBlock.pure.js +214 -201
- package/Materials/Node/Blocks/Fragment/imageProcessingBlock.pure.js.map +1 -1
- package/Materials/Node/Blocks/Fragment/perturbNormalBlock.pure.js +419 -400
- package/Materials/Node/Blocks/Fragment/perturbNormalBlock.pure.js.map +1 -1
- package/Materials/Node/Blocks/GaussianSplatting/gaussianSplattingBlock.pure.js +3 -1
- package/Materials/Node/Blocks/GaussianSplatting/gaussianSplattingBlock.pure.js.map +1 -1
- package/Materials/Node/Blocks/PBR/clearCoatBlock.pure.js +302 -289
- package/Materials/Node/Blocks/PBR/clearCoatBlock.pure.js.map +1 -1
- package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.pure.js +1327 -1272
- package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.pure.js.map +1 -1
- package/Materials/Node/Blocks/PBR/reflectionBlock.pure.js +352 -337
- package/Materials/Node/Blocks/PBR/reflectionBlock.pure.js.map +1 -1
- package/Materials/Node/Blocks/PBR/refractionBlock.pure.js +297 -277
- package/Materials/Node/Blocks/PBR/refractionBlock.pure.js.map +1 -1
- package/Materials/Node/Blocks/PBR/sheenBlock.pure.js +146 -131
- package/Materials/Node/Blocks/PBR/sheenBlock.pure.js.map +1 -1
- package/Materials/Node/Blocks/PBR/subSurfaceBlock.pure.js +158 -145
- package/Materials/Node/Blocks/PBR/subSurfaceBlock.pure.js.map +1 -1
- package/Materials/Node/Blocks/clampBlock.pure.js +92 -77
- package/Materials/Node/Blocks/clampBlock.pure.js.map +1 -1
- package/Materials/Node/Blocks/cloudBlock.pure.js +145 -132
- package/Materials/Node/Blocks/cloudBlock.pure.js.map +1 -1
- package/Materials/Node/Blocks/conditionalBlock.pure.js +182 -169
- package/Materials/Node/Blocks/conditionalBlock.pure.js.map +1 -1
- package/Materials/Node/Blocks/curveBlock.pure.js +259 -246
- package/Materials/Node/Blocks/curveBlock.pure.js.map +1 -1
- package/Materials/Node/Blocks/debugBlock.pure.js +119 -106
- package/Materials/Node/Blocks/debugBlock.pure.js.map +1 -1
- package/Materials/Node/Blocks/loopBlock.pure.js +123 -110
- package/Materials/Node/Blocks/loopBlock.pure.js.map +1 -1
- package/Materials/Node/Blocks/meshAttributeExistsBlock.pure.js +185 -172
- package/Materials/Node/Blocks/meshAttributeExistsBlock.pure.js.map +1 -1
- package/Materials/Node/Blocks/remapBlock.pure.js +127 -112
- package/Materials/Node/Blocks/remapBlock.pure.js.map +1 -1
- package/Materials/Node/Blocks/transformBlock.pure.js +196 -185
- package/Materials/Node/Blocks/transformBlock.pure.js.map +1 -1
- package/Materials/Node/Blocks/triPlanarBlock.pure.js +451 -438
- package/Materials/Node/Blocks/triPlanarBlock.pure.js.map +1 -1
- package/Materials/Node/Blocks/trigonometryBlock.pure.js +184 -171
- package/Materials/Node/Blocks/trigonometryBlock.pure.js.map +1 -1
- package/Materials/Node/Blocks/waveBlock.pure.js +97 -84
- package/Materials/Node/Blocks/waveBlock.pure.js.map +1 -1
- package/Materials/Node/Blocks/worleyNoise3DBlock.pure.js +276 -263
- package/Materials/Node/Blocks/worleyNoise3DBlock.pure.js.map +1 -1
- package/Materials/Node/nodeMaterial.pure.js +1765 -1737
- package/Materials/Node/nodeMaterial.pure.js.map +1 -1
- package/Materials/Node/nodeMaterialBuildState.d.ts +3 -3
- package/Materials/PBR/openpbrMaterial.pure.d.ts +102 -102
- package/Materials/PBR/openpbrMaterial.pure.js +3115 -2243
- package/Materials/PBR/openpbrMaterial.pure.js.map +1 -1
- package/Materials/PBR/pbrAnisotropicConfiguration.d.ts +3 -3
- package/Materials/PBR/pbrAnisotropicConfiguration.js +255 -227
- package/Materials/PBR/pbrAnisotropicConfiguration.js.map +1 -1
- package/Materials/PBR/pbrBRDFConfiguration.d.ts +9 -9
- package/Materials/PBR/pbrBRDFConfiguration.js +203 -155
- package/Materials/PBR/pbrBRDFConfiguration.js.map +1 -1
- package/Materials/PBR/pbrBaseMaterial.pure.d.ts +1 -1
- package/Materials/PBR/pbrBaseMaterial.pure.js +1751 -1736
- package/Materials/PBR/pbrBaseMaterial.pure.js.map +1 -1
- package/Materials/PBR/pbrBaseSimpleMaterial.d.ts +13 -13
- package/Materials/PBR/pbrBaseSimpleMaterial.js +205 -117
- package/Materials/PBR/pbrBaseSimpleMaterial.js.map +1 -1
- package/Materials/PBR/pbrClearCoatConfiguration.d.ts +9 -9
- package/Materials/PBR/pbrClearCoatConfiguration.js +464 -406
- package/Materials/PBR/pbrClearCoatConfiguration.js.map +1 -1
- package/Materials/PBR/pbrIridescenceConfiguration.d.ts +3 -3
- package/Materials/PBR/pbrIridescenceConfiguration.js +271 -239
- package/Materials/PBR/pbrIridescenceConfiguration.js.map +1 -1
- package/Materials/PBR/pbrMaterial.pure.d.ts +66 -66
- package/Materials/PBR/pbrMaterial.pure.js +1041 -685
- package/Materials/PBR/pbrMaterial.pure.js.map +1 -1
- package/Materials/PBR/pbrMetallicRoughnessMaterial.pure.d.ts +5 -5
- package/Materials/PBR/pbrMetallicRoughnessMaterial.pure.js +176 -115
- package/Materials/PBR/pbrMetallicRoughnessMaterial.pure.js.map +1 -1
- package/Materials/PBR/pbrSheenConfiguration.d.ts +7 -7
- package/Materials/PBR/pbrSheenConfiguration.js +314 -270
- package/Materials/PBR/pbrSheenConfiguration.js.map +1 -1
- package/Materials/PBR/pbrSpecularGlossinessMaterial.pure.d.ts +5 -5
- package/Materials/PBR/pbrSpecularGlossinessMaterial.pure.js +172 -117
- package/Materials/PBR/pbrSpecularGlossinessMaterial.pure.js.map +1 -1
- package/Materials/PBR/pbrSubSurfaceConfiguration.d.ts +16 -16
- package/Materials/PBR/pbrSubSurfaceConfiguration.js +864 -764
- package/Materials/PBR/pbrSubSurfaceConfiguration.js.map +1 -1
- package/Materials/Textures/HTML/htmlInCanvasPolyfill.d.ts +43 -0
- package/Materials/Textures/HTML/htmlInCanvasPolyfill.js +64 -0
- package/Materials/Textures/HTML/htmlInCanvasPolyfill.js.map +1 -0
- package/Materials/Textures/HTML/htmlInteractionManager.d.ts +69 -0
- package/Materials/Textures/HTML/htmlInteractionManager.js +130 -0
- package/Materials/Textures/HTML/htmlInteractionManager.js.map +1 -0
- package/Materials/Textures/HTML/htmlRaycastInteractionManager.d.ts +84 -0
- package/Materials/Textures/HTML/htmlRaycastInteractionManager.js +246 -0
- package/Materials/Textures/HTML/htmlRaycastInteractionManager.js.map +1 -0
- package/Materials/Textures/HTML/htmlTexture.d.ts +148 -0
- package/Materials/Textures/HTML/htmlTexture.js +455 -0
- package/Materials/Textures/HTML/htmlTexture.js.map +1 -0
- package/Materials/Textures/HTML/index.d.ts +4 -0
- package/Materials/Textures/HTML/index.js +5 -0
- package/Materials/Textures/HTML/index.js.map +1 -0
- package/Materials/Textures/HTML/pure.d.ts +5 -0
- package/Materials/Textures/HTML/pure.js +6 -0
- package/Materials/Textures/HTML/pure.js.map +1 -0
- package/Materials/Textures/Procedurals/proceduralTexture.pure.js +671 -643
- package/Materials/Textures/Procedurals/proceduralTexture.pure.js.map +1 -1
- package/Materials/Textures/baseTexture.pure.js +880 -825
- package/Materials/Textures/baseTexture.pure.js.map +1 -1
- package/Materials/Textures/cubeTexture.d.ts +0 -1
- package/Materials/Textures/cubeTexture.js +0 -1
- package/Materials/Textures/cubeTexture.js.map +1 -1
- package/Materials/Textures/cubeTexture.pure.js +368 -333
- package/Materials/Textures/cubeTexture.pure.js.map +1 -1
- package/Materials/Textures/dynamicTexture.d.ts +0 -1
- package/Materials/Textures/dynamicTexture.js +0 -1
- package/Materials/Textures/dynamicTexture.js.map +1 -1
- package/Materials/Textures/dynamicTexture.pure.js +2 -0
- package/Materials/Textures/dynamicTexture.pure.js.map +1 -1
- package/Materials/Textures/htmlElementTexture.d.ts +0 -2
- package/Materials/Textures/htmlElementTexture.js +0 -2
- package/Materials/Textures/htmlElementTexture.js.map +1 -1
- package/Materials/Textures/htmlElementTexture.pure.js +4 -0
- package/Materials/Textures/htmlElementTexture.pure.js.map +1 -1
- package/Materials/Textures/index.d.ts +1 -0
- package/Materials/Textures/index.js +1 -1
- package/Materials/Textures/index.js.map +1 -1
- package/Materials/Textures/multiRenderTarget.d.ts +0 -1
- package/Materials/Textures/multiRenderTarget.js +0 -1
- package/Materials/Textures/multiRenderTarget.js.map +1 -1
- package/Materials/Textures/multiRenderTarget.pure.js +2 -0
- package/Materials/Textures/multiRenderTarget.pure.js.map +1 -1
- package/Materials/Textures/pure.d.ts +1 -0
- package/Materials/Textures/pure.js +1 -0
- package/Materials/Textures/pure.js.map +1 -1
- package/Materials/Textures/texture.pure.js +961 -923
- package/Materials/Textures/texture.pure.js.map +1 -1
- package/Materials/Textures/videoTexture.pure.d.ts +3 -0
- package/Materials/Textures/videoTexture.pure.js +450 -401
- package/Materials/Textures/videoTexture.pure.js.map +1 -1
- package/Materials/colorCurves.pure.js +510 -477
- package/Materials/colorCurves.pure.js.map +1 -1
- package/Materials/effect.pure.js +0 -7
- package/Materials/effect.pure.js.map +1 -1
- package/Materials/imageProcessing.js +12 -4
- package/Materials/imageProcessing.js.map +1 -1
- package/Materials/imageProcessingConfiguration.pure.js +647 -587
- package/Materials/imageProcessingConfiguration.pure.js.map +1 -1
- package/Materials/material.decalMapConfiguration.pure.d.ts +2 -2
- package/Materials/material.decalMapConfiguration.pure.js +149 -130
- package/Materials/material.decalMapConfiguration.pure.js.map +1 -1
- package/Materials/material.detailMapConfiguration.d.ts +3 -3
- package/Materials/material.detailMapConfiguration.js +213 -175
- package/Materials/material.detailMapConfiguration.js.map +1 -1
- package/Materials/material.pure.js +1815 -1721
- package/Materials/material.pure.js.map +1 -1
- package/Materials/materialPluginBase.pure.js +270 -249
- package/Materials/materialPluginBase.pure.js.map +1 -1
- package/Materials/materialPluginManager.pure.js +18 -8
- package/Materials/materialPluginManager.pure.js.map +1 -1
- package/Materials/materialStencilState.js +211 -200
- package/Materials/materialStencilState.js.map +1 -1
- package/Materials/meshDebugPluginMaterial.pure.d.ts +2 -2
- package/Materials/meshDebugPluginMaterial.pure.js +397 -275
- package/Materials/meshDebugPluginMaterial.pure.js.map +1 -1
- package/Materials/standardMaterial.pure.d.ts +32 -32
- package/Materials/standardMaterial.pure.js +1804 -1394
- package/Materials/standardMaterial.pure.js.map +1 -1
- package/Maths/math.color.pure.js +5 -5
- package/Maths/math.functions.js +38 -30
- package/Maths/math.functions.js.map +1 -1
- package/Maths/math.vector.pure.js +25 -25
- package/Meshes/GaussianSplatting/gaussianSplattingMesh.pure.js +18 -8
- package/Meshes/GaussianSplatting/gaussianSplattingMesh.pure.js.map +1 -1
- package/Meshes/GaussianSplatting/gaussianSplattingMeshBase.pure.d.ts +86 -1
- package/Meshes/GaussianSplatting/gaussianSplattingMeshBase.pure.js +255 -104
- package/Meshes/GaussianSplatting/gaussianSplattingMeshBase.pure.js.map +1 -1
- package/Meshes/GaussianSplatting/gaussianSplattingSortWorker.d.ts +39 -0
- package/Meshes/GaussianSplatting/gaussianSplattingSortWorker.js +322 -0
- package/Meshes/GaussianSplatting/gaussianSplattingSortWorker.js.map +1 -0
- package/Meshes/GreasedLine/greasedLineMesh.pure.js +4 -4
- package/Meshes/GreasedLine/greasedLineRibbonMesh.pure.js +3 -3
- package/Meshes/Node/Blocks/Instances/instantiateBaseBlock.js +107 -94
- package/Meshes/Node/Blocks/Instances/instantiateBaseBlock.js.map +1 -1
- package/Meshes/Node/Blocks/Instances/instantiateOnFacesBlock.pure.js +276 -263
- package/Meshes/Node/Blocks/Instances/instantiateOnFacesBlock.pure.js.map +1 -1
- package/Meshes/Node/Blocks/Instances/instantiateOnVerticesBlock.pure.js +247 -232
- package/Meshes/Node/Blocks/Instances/instantiateOnVerticesBlock.pure.js.map +1 -1
- package/Meshes/Node/Blocks/Instances/instantiateOnVolumeBlock.pure.js +299 -284
- package/Meshes/Node/Blocks/Instances/instantiateOnVolumeBlock.pure.js.map +1 -1
- package/Meshes/Node/Blocks/Set/aggregatorBlock.pure.js +196 -181
- package/Meshes/Node/Blocks/Set/aggregatorBlock.pure.js.map +1 -1
- package/Meshes/Node/Blocks/Set/latticeBlock.pure.js +198 -179
- package/Meshes/Node/Blocks/Set/latticeBlock.pure.js.map +1 -1
- package/Meshes/Node/Blocks/Set/setColorsBlock.pure.js +151 -138
- package/Meshes/Node/Blocks/Set/setColorsBlock.pure.js.map +1 -1
- package/Meshes/Node/Blocks/Set/setMaterialIDBlock.pure.js +107 -94
- package/Meshes/Node/Blocks/Set/setMaterialIDBlock.pure.js.map +1 -1
- package/Meshes/Node/Blocks/Set/setNormalsBlock.pure.js +138 -125
- package/Meshes/Node/Blocks/Set/setNormalsBlock.pure.js.map +1 -1
- package/Meshes/Node/Blocks/Set/setPositionsBlock.pure.js +213 -200
- package/Meshes/Node/Blocks/Set/setPositionsBlock.pure.js.map +1 -1
- package/Meshes/Node/Blocks/Set/setTangentsBlock.pure.js +138 -125
- package/Meshes/Node/Blocks/Set/setTangentsBlock.pure.js.map +1 -1
- package/Meshes/Node/Blocks/Set/setUVsBlock.pure.js +179 -164
- package/Meshes/Node/Blocks/Set/setUVsBlock.pure.js.map +1 -1
- package/Meshes/Node/Blocks/Sources/boxBlock.pure.js +183 -170
- package/Meshes/Node/Blocks/Sources/boxBlock.pure.js.map +1 -1
- package/Meshes/Node/Blocks/Sources/capsuleBlock.pure.js +125 -112
- package/Meshes/Node/Blocks/Sources/capsuleBlock.pure.js.map +1 -1
- package/Meshes/Node/Blocks/Sources/cylinderBlock.pure.js +153 -140
- package/Meshes/Node/Blocks/Sources/cylinderBlock.pure.js.map +1 -1
- package/Meshes/Node/Blocks/Sources/discBlock.pure.js +112 -99
- package/Meshes/Node/Blocks/Sources/discBlock.pure.js.map +1 -1
- package/Meshes/Node/Blocks/Sources/gridBlock.pure.js +133 -120
- package/Meshes/Node/Blocks/Sources/gridBlock.pure.js.map +1 -1
- package/Meshes/Node/Blocks/Sources/icoSphereBlock.pure.js +128 -115
- package/Meshes/Node/Blocks/Sources/icoSphereBlock.pure.js.map +1 -1
- package/Meshes/Node/Blocks/Sources/meshBlock.pure.js +116 -103
- package/Meshes/Node/Blocks/Sources/meshBlock.pure.js.map +1 -1
- package/Meshes/Node/Blocks/Sources/planeBlock.pure.js +160 -147
- package/Meshes/Node/Blocks/Sources/planeBlock.pure.js.map +1 -1
- package/Meshes/Node/Blocks/Sources/sphereBlock.pure.js +144 -131
- package/Meshes/Node/Blocks/Sources/sphereBlock.pure.js.map +1 -1
- package/Meshes/Node/Blocks/Sources/torusBlock.pure.js +112 -99
- package/Meshes/Node/Blocks/Sources/torusBlock.pure.js.map +1 -1
- package/Meshes/Node/Blocks/Textures/geometryTextureFetchBlock.pure.js +200 -185
- package/Meshes/Node/Blocks/Textures/geometryTextureFetchBlock.pure.js.map +1 -1
- package/Meshes/Node/Blocks/bevelBlock.pure.js +111 -98
- package/Meshes/Node/Blocks/bevelBlock.pure.js.map +1 -1
- package/Meshes/Node/Blocks/booleanGeometryBlock.pure.js +182 -165
- package/Meshes/Node/Blocks/booleanGeometryBlock.pure.js.map +1 -1
- package/Meshes/Node/Blocks/cleanGeometryBlock.pure.js +89 -76
- package/Meshes/Node/Blocks/cleanGeometryBlock.pure.js.map +1 -1
- package/Meshes/Node/Blocks/conditionBlock.pure.js +184 -169
- package/Meshes/Node/Blocks/conditionBlock.pure.js.map +1 -1
- package/Meshes/Node/Blocks/extrudeGeometryBlock.pure.js +270 -255
- package/Meshes/Node/Blocks/extrudeGeometryBlock.pure.js.map +1 -1
- package/Meshes/Node/Blocks/geometryCollectionBlock.pure.js +172 -159
- package/Meshes/Node/Blocks/geometryCollectionBlock.pure.js.map +1 -1
- package/Meshes/Node/Blocks/geometryCurveBlock.pure.js +230 -217
- package/Meshes/Node/Blocks/geometryCurveBlock.pure.js.map +1 -1
- package/Meshes/Node/Blocks/geometryEaseBlock.pure.js +256 -245
- package/Meshes/Node/Blocks/geometryEaseBlock.pure.js.map +1 -1
- package/Meshes/Node/Blocks/geometryOptimizeBlock.pure.js +206 -189
- package/Meshes/Node/Blocks/geometryOptimizeBlock.pure.js.map +1 -1
- package/Meshes/Node/Blocks/geometryTransformBlock.pure.js +166 -153
- package/Meshes/Node/Blocks/geometryTransformBlock.pure.js.map +1 -1
- package/Meshes/Node/Blocks/geometryTrigonometryBlock.pure.js +221 -208
- package/Meshes/Node/Blocks/geometryTrigonometryBlock.pure.js.map +1 -1
- package/Meshes/Node/Blocks/mappingBlock.pure.js +150 -137
- package/Meshes/Node/Blocks/mappingBlock.pure.js.map +1 -1
- package/Meshes/Node/Blocks/mathBlock.pure.js +269 -256
- package/Meshes/Node/Blocks/mathBlock.pure.js.map +1 -1
- package/Meshes/Node/Blocks/mergeGeometryBlock.pure.js +141 -128
- package/Meshes/Node/Blocks/mergeGeometryBlock.pure.js.map +1 -1
- package/Meshes/Node/Blocks/randomBlock.pure.js +161 -148
- package/Meshes/Node/Blocks/randomBlock.pure.js.map +1 -1
- package/Meshes/Node/Blocks/subdivideBlock.pure.js +102 -87
- package/Meshes/Node/Blocks/subdivideBlock.pure.js.map +1 -1
- package/Meshes/Node/nodeGeometry.js +560 -538
- package/Meshes/Node/nodeGeometry.js.map +1 -1
- package/Meshes/Node/nodeGeometryBlock.js +473 -458
- package/Meshes/Node/nodeGeometryBlock.js.map +1 -1
- package/Meshes/abstractMesh.pure.js +2218 -2207
- package/Meshes/abstractMesh.pure.js.map +1 -1
- package/Meshes/geometry.js +30 -15
- package/Meshes/geometry.js.map +1 -1
- package/Meshes/mesh.pure.js +26 -14
- package/Meshes/mesh.pure.js.map +1 -1
- package/Meshes/mesh.vertexData.js +1665 -1655
- package/Meshes/mesh.vertexData.js.map +1 -1
- package/Meshes/transformNode.pure.js +1400 -1372
- package/Meshes/transformNode.pure.js.map +1 -1
- package/Misc/decorators.d.ts +34 -19
- package/Misc/decorators.functions.d.ts +33 -2
- package/Misc/decorators.functions.js +114 -35
- package/Misc/decorators.functions.js.map +1 -1
- package/Misc/decorators.js +96 -68
- package/Misc/decorators.js.map +1 -1
- package/Misc/decorators.serialization.js +47 -40
- package/Misc/decorators.serialization.js.map +1 -1
- package/Misc/decorators.serializationUtilities.d.ts +24 -0
- package/Misc/decorators.serializationUtilities.js +20 -0
- package/Misc/decorators.serializationUtilities.js.map +1 -0
- package/Misc/dumpTools.pure.js +43 -33
- package/Misc/dumpTools.pure.js.map +1 -1
- package/Misc/fileTools.pure.js +8 -0
- package/Misc/fileTools.pure.js.map +1 -1
- package/Misc/observable.pure.js +0 -7
- package/Misc/observable.pure.js.map +1 -1
- package/Misc/snapshotRenderingHelper.d.ts +4 -1
- package/Misc/snapshotRenderingHelper.js.map +1 -1
- package/Misc/symbolMetadataPolyfill.d.ts +11 -0
- package/Misc/symbolMetadataPolyfill.js +22 -0
- package/Misc/symbolMetadataPolyfill.js.map +1 -0
- package/Misc/tools.pure.js +2 -2
- package/Misc/tools.pure.js.map +1 -1
- package/Morph/morphTarget.js +382 -365
- package/Morph/morphTarget.js.map +1 -1
- package/Particles/Node/Blocks/Conditions/particleConditionBlock.pure.js +160 -145
- package/Particles/Node/Blocks/Conditions/particleConditionBlock.pure.js.map +1 -1
- package/Particles/Node/Blocks/Emitters/coneShapeBlock.pure.js +187 -174
- package/Particles/Node/Blocks/Emitters/coneShapeBlock.pure.js.map +1 -1
- package/Particles/Node/Blocks/Emitters/meshShapeBlock.pure.js +238 -219
- package/Particles/Node/Blocks/Emitters/meshShapeBlock.pure.js.map +1 -1
- package/Particles/Node/Blocks/Emitters/setupSpriteSheetBlock.pure.js +140 -115
- package/Particles/Node/Blocks/Emitters/setupSpriteSheetBlock.pure.js.map +1 -1
- package/Particles/Node/Blocks/Emitters/sphereShapeBlock.pure.js +157 -144
- package/Particles/Node/Blocks/Emitters/sphereShapeBlock.pure.js.map +1 -1
- package/Particles/Node/Blocks/Triggers/particleTriggerBlock.pure.js +133 -119
- package/Particles/Node/Blocks/Triggers/particleTriggerBlock.pure.js.map +1 -1
- package/Particles/Node/Blocks/Update/alignAngleBlock.pure.js +93 -80
- package/Particles/Node/Blocks/Update/alignAngleBlock.pure.js.map +1 -1
- package/Particles/Node/Blocks/particleDebugBlock.pure.js +117 -105
- package/Particles/Node/Blocks/particleDebugBlock.pure.js.map +1 -1
- package/Particles/Node/Blocks/particleFloatToIntBlock.pure.js +105 -92
- package/Particles/Node/Blocks/particleFloatToIntBlock.pure.js.map +1 -1
- package/Particles/Node/Blocks/particleGradientValueBlock.pure.js +82 -69
- package/Particles/Node/Blocks/particleGradientValueBlock.pure.js.map +1 -1
- package/Particles/Node/Blocks/particleLocalVariableBlock.pure.js +113 -101
- package/Particles/Node/Blocks/particleLocalVariableBlock.pure.js.map +1 -1
- package/Particles/Node/Blocks/particleMathBlock.pure.js +278 -265
- package/Particles/Node/Blocks/particleMathBlock.pure.js.map +1 -1
- package/Particles/Node/Blocks/particleNumberMathBlock.pure.js +155 -142
- package/Particles/Node/Blocks/particleNumberMathBlock.pure.js.map +1 -1
- package/Particles/Node/Blocks/particleRandomBlock.pure.js +156 -143
- package/Particles/Node/Blocks/particleRandomBlock.pure.js.map +1 -1
- package/Particles/Node/Blocks/particleTrigonometryBlock.pure.js +217 -204
- package/Particles/Node/Blocks/particleTrigonometryBlock.pure.js.map +1 -1
- package/Particles/Node/Blocks/particleVectorMathBlock.pure.js +106 -93
- package/Particles/Node/Blocks/particleVectorMathBlock.pure.js.map +1 -1
- package/Particles/Node/Blocks/systemBlock.pure.js +366 -330
- package/Particles/Node/Blocks/systemBlock.pure.js.map +1 -1
- package/Particles/Node/nodeParticleBlock.js +339 -324
- package/Particles/Node/nodeParticleBlock.js.map +1 -1
- package/Particles/Node/nodeParticleSystemSet.js +494 -473
- package/Particles/Node/nodeParticleSystemSet.js.map +1 -1
- package/Particles/gpuParticleSystem.d.ts +0 -1
- package/Particles/gpuParticleSystem.js +0 -1
- package/Particles/gpuParticleSystem.js.map +1 -1
- package/Particles/gpuParticleSystem.pure.d.ts +4 -3
- package/Particles/gpuParticleSystem.pure.js +27 -16
- package/Particles/gpuParticleSystem.pure.js.map +1 -1
- package/Particles/particleSystem.pure.js +57 -2
- package/Particles/particleSystem.pure.js.map +1 -1
- package/Particles/thinParticleSystem.d.ts +0 -1
- package/Particles/thinParticleSystem.js +0 -1
- package/Particles/thinParticleSystem.js.map +1 -1
- package/Particles/thinParticleSystem.pure.js +2 -0
- package/Particles/thinParticleSystem.pure.js.map +1 -1
- package/Particles/webgl2ParticleSystem.pure.js +2 -0
- package/Particles/webgl2ParticleSystem.pure.js.map +1 -1
- package/Physics/v1/physicsImpostor.pure.js +4 -4
- package/PostProcesses/RenderPipeline/Pipelines/defaultRenderingPipeline.pure.js +675 -656
- package/PostProcesses/RenderPipeline/Pipelines/defaultRenderingPipeline.pure.js.map +1 -1
- package/PostProcesses/RenderPipeline/Pipelines/lensRenderingPipeline.d.ts +0 -1
- package/PostProcesses/RenderPipeline/Pipelines/lensRenderingPipeline.js +0 -1
- package/PostProcesses/RenderPipeline/Pipelines/lensRenderingPipeline.js.map +1 -1
- package/PostProcesses/RenderPipeline/Pipelines/ssao2RenderingPipeline.pure.js +521 -486
- package/PostProcesses/RenderPipeline/Pipelines/ssao2RenderingPipeline.pure.js.map +1 -1
- package/PostProcesses/RenderPipeline/Pipelines/ssaoRenderingPipeline.d.ts +0 -1
- package/PostProcesses/RenderPipeline/Pipelines/ssaoRenderingPipeline.js +0 -1
- package/PostProcesses/RenderPipeline/Pipelines/ssaoRenderingPipeline.js.map +1 -1
- package/PostProcesses/RenderPipeline/Pipelines/ssaoRenderingPipeline.pure.js +241 -220
- package/PostProcesses/RenderPipeline/Pipelines/ssaoRenderingPipeline.pure.js.map +1 -1
- package/PostProcesses/RenderPipeline/Pipelines/ssrRenderingPipeline.pure.js +852 -835
- package/PostProcesses/RenderPipeline/Pipelines/ssrRenderingPipeline.pure.js.map +1 -1
- package/PostProcesses/RenderPipeline/Pipelines/standardRenderingPipeline.pure.js +1135 -1073
- package/PostProcesses/RenderPipeline/Pipelines/standardRenderingPipeline.pure.js.map +1 -1
- package/PostProcesses/RenderPipeline/Pipelines/taaRenderingPipeline.pure.js +319 -303
- package/PostProcesses/RenderPipeline/Pipelines/taaRenderingPipeline.pure.js.map +1 -1
- package/PostProcesses/RenderPipeline/postProcessRenderPipeline.js +212 -199
- package/PostProcesses/RenderPipeline/postProcessRenderPipeline.js.map +1 -1
- package/PostProcesses/blackAndWhitePostProcess.pure.js +67 -55
- package/PostProcesses/blackAndWhitePostProcess.pure.js.map +1 -1
- package/PostProcesses/bloomMergePostProcess.pure.js +74 -62
- package/PostProcesses/bloomMergePostProcess.pure.js.map +1 -1
- package/PostProcesses/blurPostProcess.pure.js +127 -115
- package/PostProcesses/blurPostProcess.pure.js.map +1 -1
- package/PostProcesses/chromaticAberrationPostProcess.pure.js +130 -118
- package/PostProcesses/chromaticAberrationPostProcess.pure.js.map +1 -1
- package/PostProcesses/circleOfConfusionPostProcess.pure.js +115 -104
- package/PostProcesses/circleOfConfusionPostProcess.pure.js.map +1 -1
- package/PostProcesses/colorCorrectionPostProcess.pure.js +55 -43
- package/PostProcesses/colorCorrectionPostProcess.pure.js.map +1 -1
- package/PostProcesses/convolutionPostProcess.pure.js +96 -84
- package/PostProcesses/convolutionPostProcess.pure.js.map +1 -1
- package/PostProcesses/extractHighlightsPostProcess.pure.js +68 -57
- package/PostProcesses/extractHighlightsPostProcess.pure.js.map +1 -1
- package/PostProcesses/filterPostProcess.pure.js +66 -54
- package/PostProcesses/filterPostProcess.pure.js.map +1 -1
- package/PostProcesses/fxaaPostProcess.pure.js.map +1 -1
- package/PostProcesses/grainPostProcess.pure.js +82 -70
- package/PostProcesses/grainPostProcess.pure.js.map +1 -1
- package/PostProcesses/imageProcessingPostProcess.js +334 -322
- package/PostProcesses/imageProcessingPostProcess.js.map +1 -1
- package/PostProcesses/motionBlurPostProcess.pure.js +246 -235
- package/PostProcesses/motionBlurPostProcess.pure.js.map +1 -1
- package/PostProcesses/passPostProcess.pure.js +75 -63
- package/PostProcesses/passPostProcess.pure.js.map +1 -1
- package/PostProcesses/postProcess.pure.js +899 -835
- package/PostProcesses/postProcess.pure.js.map +1 -1
- package/PostProcesses/refractionPostProcess.pure.js +114 -87
- package/PostProcesses/refractionPostProcess.pure.js.map +1 -1
- package/PostProcesses/screenSpaceCurvaturePostProcess.pure.js +108 -96
- package/PostProcesses/screenSpaceCurvaturePostProcess.pure.js.map +1 -1
- package/PostProcesses/screenSpaceReflectionPostProcess.pure.js +241 -220
- package/PostProcesses/screenSpaceReflectionPostProcess.pure.js.map +1 -1
- package/PostProcesses/sharpenPostProcess.pure.js +86 -74
- package/PostProcesses/sharpenPostProcess.pure.js.map +1 -1
- package/PostProcesses/tonemapPostProcess.pure.js +82 -70
- package/PostProcesses/tonemapPostProcess.pure.js.map +1 -1
- package/PostProcesses/volumetricLightScatteringPostProcess.pure.js +500 -465
- package/PostProcesses/volumetricLightScatteringPostProcess.pure.js.map +1 -1
- package/PostProcesses/vrMultiviewToSingleviewPostProcess.d.ts +0 -1
- package/PostProcesses/vrMultiviewToSingleviewPostProcess.js +0 -1
- package/PostProcesses/vrMultiviewToSingleviewPostProcess.js.map +1 -1
- package/PostProcesses/vrMultiviewToSingleviewPostProcess.pure.js +2 -0
- package/PostProcesses/vrMultiviewToSingleviewPostProcess.pure.js.map +1 -1
- package/Probes/reflectionProbe.pure.js +238 -224
- package/Probes/reflectionProbe.pure.js.map +1 -1
- package/Rendering/GlobalIllumination/giRSMManager.pure.d.ts +1 -1
- package/Rendering/GlobalIllumination/giRSMManager.pure.js +138 -105
- package/Rendering/GlobalIllumination/giRSMManager.pure.js.map +1 -1
- package/Rendering/IBLShadows/iblShadowsPluginMaterial.pure.d.ts +1 -1
- package/Rendering/IBLShadows/iblShadowsPluginMaterial.pure.js +155 -138
- package/Rendering/IBLShadows/iblShadowsPluginMaterial.pure.js.map +1 -1
- package/Rendering/IBLShadows/iblShadowsRenderPipeline.d.ts +0 -2
- package/Rendering/IBLShadows/iblShadowsRenderPipeline.js +0 -2
- package/Rendering/IBLShadows/iblShadowsRenderPipeline.js.map +1 -1
- package/Rendering/IBLShadows/iblShadowsRenderPipeline.pure.js +5 -0
- package/Rendering/IBLShadows/iblShadowsRenderPipeline.pure.js.map +1 -1
- package/Rendering/IBLShadows/iblShadowsVoxelRenderer.d.ts +0 -1
- package/Rendering/IBLShadows/iblShadowsVoxelRenderer.js +0 -1
- package/Rendering/IBLShadows/iblShadowsVoxelRenderer.js.map +1 -1
- package/Rendering/IBLShadows/iblShadowsVoxelRenderer.pure.d.ts +1 -0
- package/Rendering/IBLShadows/iblShadowsVoxelRenderer.pure.js +34 -0
- package/Rendering/IBLShadows/iblShadowsVoxelRenderer.pure.js.map +1 -1
- package/Rendering/edgesRenderer.pure.js.map +1 -1
- package/Rendering/prePassRenderer.d.ts +0 -2
- package/Rendering/prePassRenderer.js +0 -2
- package/Rendering/prePassRenderer.js.map +1 -1
- package/Rendering/prePassRenderer.pure.js +2 -0
- package/Rendering/prePassRenderer.pure.js.map +1 -1
- package/Rendering/reflectiveShadowMap.pure.d.ts +1 -1
- package/Rendering/reflectiveShadowMap.pure.js +151 -130
- package/Rendering/reflectiveShadowMap.pure.js.map +1 -1
- package/Rendering/thinDepthPeelingRenderer.d.ts +0 -1
- package/Rendering/thinDepthPeelingRenderer.js +0 -1
- package/Rendering/thinDepthPeelingRenderer.js.map +1 -1
- package/Shaders/ShadersInclude/gaussianSplatting.js +1 -0
- package/Shaders/ShadersInclude/gaussianSplatting.js.map +1 -1
- package/Shaders/ShadersInclude/openpbrEnvironmentLighting.js +35 -5
- package/Shaders/ShadersInclude/openpbrEnvironmentLighting.js.map +1 -1
- package/Shaders/gaussianSplatting.fragment.js +17 -1
- package/Shaders/gaussianSplatting.fragment.js.map +1 -1
- package/Shaders/gaussianSplatting.vertex.js +1 -1
- package/Shaders/gaussianSplatting.vertex.js.map +1 -1
- package/Shaders/gaussianSplattingDepth.vertex.js +1 -1
- package/Shaders/gaussianSplattingDepth.vertex.js.map +1 -1
- package/Shaders/picking.fragment.js +39 -3
- package/Shaders/picking.fragment.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/gaussianSplatting.js +3 -1
- package/ShadersWGSL/ShadersInclude/gaussianSplatting.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/helperFunctions.js +2 -2
- package/ShadersWGSL/ShadersInclude/helperFunctions.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/openpbrEnvironmentLighting.js +39 -7
- package/ShadersWGSL/ShadersInclude/openpbrEnvironmentLighting.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/openpbrIblFunctions.js +4 -3
- package/ShadersWGSL/ShadersInclude/openpbrIblFunctions.js.map +1 -1
- package/ShadersWGSL/gaussianSplatting.fragment.js +14 -1
- package/ShadersWGSL/gaussianSplatting.fragment.js.map +1 -1
- package/ShadersWGSL/gaussianSplatting.vertex.js +2 -2
- package/ShadersWGSL/gaussianSplatting.vertex.js.map +1 -1
- package/ShadersWGSL/gaussianSplattingDepth.vertex.js +2 -2
- package/ShadersWGSL/gaussianSplattingDepth.vertex.js.map +1 -1
- package/ShadersWGSL/lightingVolume.compute.js +2 -2
- package/ShadersWGSL/lightingVolume.compute.js.map +1 -1
- package/ShadersWGSL/picking.fragment.js +22 -1
- package/ShadersWGSL/picking.fragment.js.map +1 -1
- package/XR/features/Layers/WebXRCompositionLayer.d.ts +3 -2
- package/XR/features/Layers/WebXRCompositionLayer.js +2 -2
- package/XR/features/Layers/WebXRCompositionLayer.js.map +1 -1
- package/XR/features/Layers/WebXRWebGPUCompositionLayer.d.ts +59 -0
- package/XR/features/Layers/WebXRWebGPUCompositionLayer.js +120 -0
- package/XR/features/Layers/WebXRWebGPUCompositionLayer.js.map +1 -0
- package/XR/features/Layers/WebXRWebGPUProjectionLayer.d.ts +25 -0
- package/XR/features/Layers/WebXRWebGPUProjectionLayer.js +69 -0
- package/XR/features/Layers/WebXRWebGPUProjectionLayer.js.map +1 -0
- package/XR/features/WebXRLayers.pure.d.ts +8 -0
- package/XR/features/WebXRLayers.pure.js +43 -6
- package/XR/features/WebXRLayers.pure.js.map +1 -1
- package/XR/native/nativeXRRenderTarget.d.ts +2 -2
- package/XR/native/nativeXRRenderTarget.js +2 -2
- package/XR/native/nativeXRRenderTarget.js.map +1 -1
- package/XR/webXRExperienceHelper.js +10 -1
- package/XR/webXRExperienceHelper.js.map +1 -1
- package/XR/webXRGraphicsBinding.d.ts +90 -0
- package/XR/webXRGraphicsBinding.js +85 -0
- package/XR/webXRGraphicsBinding.js.map +1 -0
- package/XR/webXRLayerRenderTargetTexture.d.ts +24 -0
- package/XR/webXRLayerRenderTargetTexture.js +30 -0
- package/XR/webXRLayerRenderTargetTexture.js.map +1 -0
- package/XR/webXRManagedOutputCanvas.d.ts +14 -0
- package/XR/webXRManagedOutputCanvas.js +24 -5
- package/XR/webXRManagedOutputCanvas.js.map +1 -1
- package/XR/webXRRenderTargetTextureProvider.d.ts +25 -4
- package/XR/webXRRenderTargetTextureProvider.js +33 -35
- package/XR/webXRRenderTargetTextureProvider.js.map +1 -1
- package/XR/webXRSessionManager.d.ts +11 -0
- package/XR/webXRSessionManager.js +37 -0
- package/XR/webXRSessionManager.js.map +1 -1
- package/XR/webXRTypes.d.ts +9 -6
- package/XR/webXRTypes.js.map +1 -1
- package/XR/webXRWebGLLayer.d.ts +2 -2
- package/XR/webXRWebGLLayer.js +2 -2
- package/XR/webXRWebGLLayer.js.map +1 -1
- package/XR/webXRWebGLRenderTargetTextureProvider.d.ts +12 -0
- package/XR/webXRWebGLRenderTargetTextureProvider.js +58 -0
- package/XR/webXRWebGLRenderTargetTextureProvider.js.map +1 -0
- package/XR/webXRWebGPURenderTargetTextureProvider.d.ts +69 -0
- package/XR/webXRWebGPURenderTargetTextureProvider.js +148 -0
- package/XR/webXRWebGPURenderTargetTextureProvider.js.map +1 -0
- package/index.d.ts +1 -0
- package/index.js +1 -0
- package/index.js.map +1 -1
- package/node.js +878 -845
- package/node.js.map +1 -1
- package/package.json +8 -14
- package/scene.pure.d.ts +12 -0
- package/scene.pure.js +36 -0
- package/scene.pure.js.map +1 -1
- package/tslib.es6.js +304 -150
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { __esDecorate, __runInitializers } from "../../tslib.es6.js";
|
|
2
2
|
import { Observable } from "../../Misc/observable.js";
|
|
3
3
|
import { NodeRenderGraphOutputBlock } from "./Blocks/outputBlock.pure.js";
|
|
4
4
|
import { FrameGraph } from "../frameGraph.js";
|
|
@@ -19,713 +19,735 @@ import { NodeRenderGraphCullObjectsBlock } from "./Blocks/cullObjectsBlock.pure.
|
|
|
19
19
|
/**
|
|
20
20
|
* Defines a node render graph
|
|
21
21
|
*/
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
* Observable raised after the node render graph is built
|
|
45
|
-
* Note that this is the same observable as the one in the underlying FrameGraph!
|
|
46
|
-
*/
|
|
47
|
-
get onBuildObservable() {
|
|
48
|
-
return this._frameGraph.onBuildObservable;
|
|
49
|
-
}
|
|
50
|
-
/**
|
|
51
|
-
* Gets the frame graph used by this node render graph
|
|
52
|
-
*/
|
|
53
|
-
get frameGraph() {
|
|
54
|
-
return this._frameGraph;
|
|
55
|
-
}
|
|
56
|
-
/**
|
|
57
|
-
* Gets the scene used by this node render graph
|
|
58
|
-
* @returns the scene used by this node render graph
|
|
59
|
-
*/
|
|
60
|
-
getScene() {
|
|
61
|
-
return this._scene;
|
|
62
|
-
}
|
|
63
|
-
/**
|
|
64
|
-
* Gets the options used to create this node render graph
|
|
65
|
-
*/
|
|
66
|
-
get options() {
|
|
67
|
-
return this._options;
|
|
68
|
-
}
|
|
69
|
-
/**
|
|
70
|
-
* Creates a new node render graph
|
|
71
|
-
* @param name defines the name of the node render graph
|
|
72
|
-
* @param scene defines the scene to use to execute the graph
|
|
73
|
-
* @param options defines the options to use when creating the graph
|
|
74
|
-
*/
|
|
75
|
-
constructor(name, scene, options) {
|
|
76
|
-
this._buildId = NodeRenderGraph._BuildIdGenerator++;
|
|
77
|
-
this.BJSNODERENDERGRAPHEDITOR = this._getGlobalNodeRenderGraphEditor();
|
|
78
|
-
/**
|
|
79
|
-
* Gets or sets data used by visual editor
|
|
80
|
-
* @see https://nrge.babylonjs.com
|
|
81
|
-
*/
|
|
82
|
-
this.editorData = null;
|
|
83
|
-
/**
|
|
84
|
-
* Gets an array of blocks that needs to be serialized even if they are not yet connected
|
|
85
|
-
*/
|
|
86
|
-
this.attachedBlocks = [];
|
|
87
|
-
/**
|
|
88
|
-
* Observable raised before the node render graph is built
|
|
89
|
-
*/
|
|
90
|
-
this.onBeforeBuildObservable = new Observable();
|
|
91
|
-
/**
|
|
92
|
-
* Observable raised when an error is detected
|
|
93
|
-
*/
|
|
94
|
-
this.onBuildErrorObservable = new Observable();
|
|
95
|
-
/** Gets or sets the RenderGraphOutputBlock used to gather the final node render graph data */
|
|
96
|
-
this.outputBlock = null;
|
|
97
|
-
this._resizeObserver = null;
|
|
98
|
-
this.name = name;
|
|
99
|
-
this._scene = scene;
|
|
100
|
-
this._engine = scene.getEngine();
|
|
101
|
-
options = {
|
|
102
|
-
debugTextures: false,
|
|
103
|
-
autoConfigure: false,
|
|
104
|
-
verbose: false,
|
|
105
|
-
rebuildGraphOnEngineResize: true,
|
|
106
|
-
autoFillExternalInputs: true,
|
|
107
|
-
...options,
|
|
108
|
-
};
|
|
109
|
-
this._options = options;
|
|
110
|
-
this._frameGraph = new FrameGraph(this._scene, options.debugTextures, this);
|
|
111
|
-
this._frameGraph.name = name;
|
|
112
|
-
if (options.rebuildGraphOnEngineResize) {
|
|
113
|
-
this._resizeObserver = this._engine.onResizeObservable.add(async () => {
|
|
114
|
-
await this.buildAsync(false, true, false);
|
|
115
|
-
});
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
/**
|
|
119
|
-
* Gets the current class name ("NodeRenderGraph")
|
|
120
|
-
* @returns the class name
|
|
121
|
-
*/
|
|
122
|
-
getClassName() {
|
|
123
|
-
return "NodeRenderGraph";
|
|
124
|
-
}
|
|
125
|
-
/**
|
|
126
|
-
* Gets a block by its name
|
|
127
|
-
* @param name defines the name of the block to retrieve
|
|
128
|
-
* @returns the required block or null if not found
|
|
129
|
-
*/
|
|
130
|
-
getBlockByName(name) {
|
|
131
|
-
let result = null;
|
|
132
|
-
for (const block of this.attachedBlocks) {
|
|
133
|
-
if (block.name === name) {
|
|
134
|
-
if (!result) {
|
|
135
|
-
result = block;
|
|
22
|
+
let NodeRenderGraph = (() => {
|
|
23
|
+
var _a;
|
|
24
|
+
let _name_decorators;
|
|
25
|
+
let _name_initializers = [];
|
|
26
|
+
let _name_extraInitializers = [];
|
|
27
|
+
let _comment_decorators;
|
|
28
|
+
let _comment_initializers = [];
|
|
29
|
+
let _comment_extraInitializers = [];
|
|
30
|
+
return _a = class NodeRenderGraph {
|
|
31
|
+
/** @returns the inspector from bundle or global */
|
|
32
|
+
_getGlobalNodeRenderGraphEditor() {
|
|
33
|
+
// UMD global name detection from bundle metadata.
|
|
34
|
+
// Note: rollup-built UMD bundles do not expose the editor class
|
|
35
|
+
// directly on the namespace - it lives on `.default.NodeRenderGraphEditor` -
|
|
36
|
+
// so we unwrap that case before falling back to the BABYLON global.
|
|
37
|
+
if (typeof NODERENDERGRAPHEDITOR !== "undefined") {
|
|
38
|
+
if (NODERENDERGRAPHEDITOR.NodeRenderGraphEditor) {
|
|
39
|
+
return NODERENDERGRAPHEDITOR;
|
|
40
|
+
}
|
|
41
|
+
if (NODERENDERGRAPHEDITOR.default?.NodeRenderGraphEditor) {
|
|
42
|
+
return NODERENDERGRAPHEDITOR.default;
|
|
43
|
+
}
|
|
136
44
|
}
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
return
|
|
140
|
-
}
|
|
141
|
-
}
|
|
142
|
-
}
|
|
143
|
-
return result;
|
|
144
|
-
}
|
|
145
|
-
/**
|
|
146
|
-
* Get a block using a predicate
|
|
147
|
-
* @param predicate defines the predicate used to find the good candidate
|
|
148
|
-
* @returns the required block or null if not found
|
|
149
|
-
*/
|
|
150
|
-
getBlockByPredicate(predicate) {
|
|
151
|
-
for (const block of this.attachedBlocks) {
|
|
152
|
-
if (predicate(block)) {
|
|
153
|
-
return block;
|
|
154
|
-
}
|
|
155
|
-
}
|
|
156
|
-
return null;
|
|
157
|
-
}
|
|
158
|
-
/**
|
|
159
|
-
* Get all blocks that match a predicate
|
|
160
|
-
* @param predicate defines the predicate used to find the good candidate(s)
|
|
161
|
-
* @returns the list of blocks found
|
|
162
|
-
*/
|
|
163
|
-
getBlocksByPredicate(predicate) {
|
|
164
|
-
const blocks = [];
|
|
165
|
-
for (const block of this.attachedBlocks) {
|
|
166
|
-
if (predicate(block)) {
|
|
167
|
-
blocks.push(block);
|
|
168
|
-
}
|
|
169
|
-
}
|
|
170
|
-
return blocks;
|
|
171
|
-
}
|
|
172
|
-
/**
|
|
173
|
-
* Gets the list of input blocks attached to this material
|
|
174
|
-
* @returns an array of InputBlocks
|
|
175
|
-
*/
|
|
176
|
-
getInputBlocks() {
|
|
177
|
-
const blocks = [];
|
|
178
|
-
for (const block of this.attachedBlocks) {
|
|
179
|
-
if (block.isInput) {
|
|
180
|
-
blocks.push(block);
|
|
181
|
-
}
|
|
182
|
-
}
|
|
183
|
-
return blocks;
|
|
184
|
-
}
|
|
185
|
-
/**
|
|
186
|
-
* Replaces a camera in all camera input blocks of this node render graph.
|
|
187
|
-
* If the current camera is found in any input block, it is replaced by the new camera,
|
|
188
|
-
* optionally updating the scene's pointer camera and rebuilding the graph.
|
|
189
|
-
* @param currentCamera The camera to replace.
|
|
190
|
-
* @param newCamera The new camera to assign to the matching input blocks.
|
|
191
|
-
* @param updateCameraToUseForPointers If true (default), updates `scene.cameraToUseForPointers` to the new camera when a replacement occurs.
|
|
192
|
-
* @param rebuildGraph If true (default), rebuilds the graph asynchronously after the replacement.
|
|
193
|
-
* @returns A promise that resolves to true if at least one input block was updated, false otherwise.
|
|
194
|
-
*/
|
|
195
|
-
async replaceCameraAsync(currentCamera, newCamera, updateCameraToUseForPointers = true, rebuildGraph = true) {
|
|
196
|
-
const inputBlocks = this.getInputBlocks();
|
|
197
|
-
let updated = false;
|
|
198
|
-
for (const block of inputBlocks) {
|
|
199
|
-
if (block.isCamera() && block.value === currentCamera) {
|
|
200
|
-
block.value = newCamera;
|
|
201
|
-
updated = true;
|
|
202
|
-
}
|
|
203
|
-
}
|
|
204
|
-
if (updated) {
|
|
205
|
-
if (updateCameraToUseForPointers) {
|
|
206
|
-
this._scene.cameraToUseForPointers = newCamera;
|
|
207
|
-
}
|
|
208
|
-
if (rebuildGraph) {
|
|
209
|
-
const currentAutoFill = this._options.autoFillExternalInputs;
|
|
210
|
-
try {
|
|
211
|
-
this._options.autoFillExternalInputs = false; // makes sure that the camera input block(s) we just updated don't get overwritten by autoFillExternalInputs
|
|
212
|
-
await this.buildAsync();
|
|
45
|
+
// In case of module let's check the global emitted from the editor entry point.
|
|
46
|
+
if (typeof BABYLON !== "undefined" && typeof BABYLON.NodeRenderGraphEditor !== "undefined") {
|
|
47
|
+
return BABYLON;
|
|
213
48
|
}
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
49
|
+
return undefined;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Observable raised after the node render graph is built
|
|
53
|
+
* Note that this is the same observable as the one in the underlying FrameGraph!
|
|
54
|
+
*/
|
|
55
|
+
get onBuildObservable() {
|
|
56
|
+
return this._frameGraph.onBuildObservable;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Gets the frame graph used by this node render graph
|
|
60
|
+
*/
|
|
61
|
+
get frameGraph() {
|
|
62
|
+
return this._frameGraph;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Gets the scene used by this node render graph
|
|
66
|
+
* @returns the scene used by this node render graph
|
|
67
|
+
*/
|
|
68
|
+
getScene() {
|
|
69
|
+
return this._scene;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Gets the options used to create this node render graph
|
|
73
|
+
*/
|
|
74
|
+
get options() {
|
|
75
|
+
return this._options;
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Creates a new node render graph
|
|
79
|
+
* @param name defines the name of the node render graph
|
|
80
|
+
* @param scene defines the scene to use to execute the graph
|
|
81
|
+
* @param options defines the options to use when creating the graph
|
|
82
|
+
*/
|
|
83
|
+
constructor(name, scene, options) {
|
|
84
|
+
this._buildId = _a._BuildIdGenerator++;
|
|
85
|
+
this.BJSNODERENDERGRAPHEDITOR = this._getGlobalNodeRenderGraphEditor();
|
|
86
|
+
/**
|
|
87
|
+
* Gets or sets data used by visual editor
|
|
88
|
+
* @see https://nrge.babylonjs.com
|
|
89
|
+
*/
|
|
90
|
+
this.editorData = null;
|
|
91
|
+
/**
|
|
92
|
+
* Gets an array of blocks that needs to be serialized even if they are not yet connected
|
|
93
|
+
*/
|
|
94
|
+
this.attachedBlocks = [];
|
|
95
|
+
/**
|
|
96
|
+
* Observable raised before the node render graph is built
|
|
97
|
+
*/
|
|
98
|
+
this.onBeforeBuildObservable = new Observable();
|
|
99
|
+
/**
|
|
100
|
+
* Observable raised when an error is detected
|
|
101
|
+
*/
|
|
102
|
+
this.onBuildErrorObservable = new Observable();
|
|
103
|
+
/** Gets or sets the RenderGraphOutputBlock used to gather the final node render graph data */
|
|
104
|
+
this.outputBlock = null;
|
|
105
|
+
/**
|
|
106
|
+
* The name of the node render graph
|
|
107
|
+
*/
|
|
108
|
+
this.name = __runInitializers(this, _name_initializers, void 0);
|
|
109
|
+
/**
|
|
110
|
+
* A free comment about the graph
|
|
111
|
+
*/
|
|
112
|
+
this.comment = (__runInitializers(this, _name_extraInitializers), __runInitializers(this, _comment_initializers, void 0));
|
|
113
|
+
this._engine = __runInitializers(this, _comment_extraInitializers);
|
|
114
|
+
this._resizeObserver = null;
|
|
115
|
+
this.name = name;
|
|
116
|
+
this._scene = scene;
|
|
117
|
+
this._engine = scene.getEngine();
|
|
118
|
+
options = {
|
|
119
|
+
debugTextures: false,
|
|
120
|
+
autoConfigure: false,
|
|
121
|
+
verbose: false,
|
|
122
|
+
rebuildGraphOnEngineResize: true,
|
|
123
|
+
autoFillExternalInputs: true,
|
|
124
|
+
...options,
|
|
125
|
+
};
|
|
126
|
+
this._options = options;
|
|
127
|
+
this._frameGraph = new FrameGraph(this._scene, options.debugTextures, this);
|
|
128
|
+
this._frameGraph.name = name;
|
|
129
|
+
if (options.rebuildGraphOnEngineResize) {
|
|
130
|
+
this._resizeObserver = this._engine.onResizeObservable.add(async () => {
|
|
131
|
+
await this.buildAsync(false, true, false);
|
|
132
|
+
});
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Gets the current class name ("NodeRenderGraph")
|
|
137
|
+
* @returns the class name
|
|
138
|
+
*/
|
|
139
|
+
getClassName() {
|
|
140
|
+
return "NodeRenderGraph";
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Gets a block by its name
|
|
144
|
+
* @param name defines the name of the block to retrieve
|
|
145
|
+
* @returns the required block or null if not found
|
|
146
|
+
*/
|
|
147
|
+
getBlockByName(name) {
|
|
148
|
+
let result = null;
|
|
149
|
+
for (const block of this.attachedBlocks) {
|
|
150
|
+
if (block.name === name) {
|
|
151
|
+
if (!result) {
|
|
152
|
+
result = block;
|
|
153
|
+
}
|
|
154
|
+
else {
|
|
155
|
+
Tools.Warn("More than one block was found with the name `" + name + "`");
|
|
156
|
+
return result;
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
return result;
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* Get a block using a predicate
|
|
164
|
+
* @param predicate defines the predicate used to find the good candidate
|
|
165
|
+
* @returns the required block or null if not found
|
|
166
|
+
*/
|
|
167
|
+
getBlockByPredicate(predicate) {
|
|
168
|
+
for (const block of this.attachedBlocks) {
|
|
169
|
+
if (predicate(block)) {
|
|
170
|
+
return block;
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
return null;
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* Get all blocks that match a predicate
|
|
177
|
+
* @param predicate defines the predicate used to find the good candidate(s)
|
|
178
|
+
* @returns the list of blocks found
|
|
179
|
+
*/
|
|
180
|
+
getBlocksByPredicate(predicate) {
|
|
181
|
+
const blocks = [];
|
|
182
|
+
for (const block of this.attachedBlocks) {
|
|
183
|
+
if (predicate(block)) {
|
|
184
|
+
blocks.push(block);
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
return blocks;
|
|
188
|
+
}
|
|
189
|
+
/**
|
|
190
|
+
* Gets the list of input blocks attached to this material
|
|
191
|
+
* @returns an array of InputBlocks
|
|
192
|
+
*/
|
|
193
|
+
getInputBlocks() {
|
|
194
|
+
const blocks = [];
|
|
195
|
+
for (const block of this.attachedBlocks) {
|
|
196
|
+
if (block.isInput) {
|
|
197
|
+
blocks.push(block);
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
return blocks;
|
|
201
|
+
}
|
|
202
|
+
/**
|
|
203
|
+
* Replaces a camera in all camera input blocks of this node render graph.
|
|
204
|
+
* If the current camera is found in any input block, it is replaced by the new camera,
|
|
205
|
+
* optionally updating the scene's pointer camera and rebuilding the graph.
|
|
206
|
+
* @param currentCamera The camera to replace.
|
|
207
|
+
* @param newCamera The new camera to assign to the matching input blocks.
|
|
208
|
+
* @param updateCameraToUseForPointers If true (default), updates `scene.cameraToUseForPointers` to the new camera when a replacement occurs.
|
|
209
|
+
* @param rebuildGraph If true (default), rebuilds the graph asynchronously after the replacement.
|
|
210
|
+
* @returns A promise that resolves to true if at least one input block was updated, false otherwise.
|
|
211
|
+
*/
|
|
212
|
+
async replaceCameraAsync(currentCamera, newCamera, updateCameraToUseForPointers = true, rebuildGraph = true) {
|
|
213
|
+
const inputBlocks = this.getInputBlocks();
|
|
214
|
+
let updated = false;
|
|
215
|
+
for (const block of inputBlocks) {
|
|
216
|
+
if (block.isCamera() && block.value === currentCamera) {
|
|
217
|
+
block.value = newCamera;
|
|
218
|
+
updated = true;
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
if (updated) {
|
|
222
|
+
if (updateCameraToUseForPointers) {
|
|
223
|
+
this._scene.cameraToUseForPointers = newCamera;
|
|
224
|
+
}
|
|
225
|
+
if (rebuildGraph) {
|
|
226
|
+
const currentAutoFill = this._options.autoFillExternalInputs;
|
|
227
|
+
try {
|
|
228
|
+
this._options.autoFillExternalInputs = false; // makes sure that the camera input block(s) we just updated don't get overwritten by autoFillExternalInputs
|
|
229
|
+
await this.buildAsync();
|
|
230
|
+
}
|
|
231
|
+
finally {
|
|
232
|
+
this._options.autoFillExternalInputs = currentAutoFill;
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
return updated;
|
|
237
|
+
}
|
|
238
|
+
/**
|
|
239
|
+
* Launch the node render graph editor
|
|
240
|
+
* @param config Define the configuration of the editor
|
|
241
|
+
* @returns a promise fulfilled when the node editor is visible
|
|
242
|
+
*/
|
|
243
|
+
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
244
|
+
async edit(config) {
|
|
245
|
+
return await new Promise((resolve) => {
|
|
234
246
|
this.BJSNODERENDERGRAPHEDITOR = this.BJSNODERENDERGRAPHEDITOR || this._getGlobalNodeRenderGraphEditor();
|
|
235
|
-
this.
|
|
236
|
-
|
|
247
|
+
if (typeof this.BJSNODERENDERGRAPHEDITOR == "undefined") {
|
|
248
|
+
const editorUrl = config && config.editorURL ? config.editorURL : _a.EditorURL;
|
|
249
|
+
// Load editor and add it to the DOM
|
|
250
|
+
Tools.LoadBabylonScript(editorUrl, () => {
|
|
251
|
+
this.BJSNODERENDERGRAPHEDITOR = this.BJSNODERENDERGRAPHEDITOR || this._getGlobalNodeRenderGraphEditor();
|
|
252
|
+
this._createNodeEditor(config?.nodeRenderGraphEditorConfig);
|
|
253
|
+
resolve();
|
|
254
|
+
});
|
|
255
|
+
}
|
|
256
|
+
else {
|
|
257
|
+
// Otherwise creates the editor
|
|
258
|
+
this._createNodeEditor(config?.nodeRenderGraphEditorConfig);
|
|
259
|
+
resolve();
|
|
260
|
+
}
|
|
237
261
|
});
|
|
238
262
|
}
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
* @param additionalConfig Additional configuration for the FGE
|
|
249
|
-
*/
|
|
250
|
-
_createNodeEditor(additionalConfig) {
|
|
251
|
-
const nodeEditorConfig = {
|
|
252
|
-
nodeRenderGraph: this,
|
|
253
|
-
customBlockDescriptions: NodeRenderGraph.CustomBlockDescriptions,
|
|
254
|
-
...additionalConfig,
|
|
255
|
-
};
|
|
256
|
-
this.BJSNODERENDERGRAPHEDITOR.NodeRenderGraphEditor.Show(nodeEditorConfig);
|
|
257
|
-
}
|
|
258
|
-
/**
|
|
259
|
-
* Build the final list of blocks that will be executed by the "execute" method.
|
|
260
|
-
* It also builds the underlying frame graph unless specified otherwise.
|
|
261
|
-
* @param dontBuildFrameGraph If the underlying frame graph should not be built (default: false)
|
|
262
|
-
* @param waitForReadiness If the method should wait for the frame graph to be ready before resolving (default: true). Note that this parameter has no effect if "dontBuildFrameGraph" is true.
|
|
263
|
-
* @param setAsSceneFrameGraph If the built frame graph must be set as the scene's frame graph (default: true)
|
|
264
|
-
*/
|
|
265
|
-
async buildAsync(dontBuildFrameGraph = false, waitForReadiness = true, setAsSceneFrameGraph = true) {
|
|
266
|
-
if (!this.outputBlock) {
|
|
267
|
-
throw new Error("You must define the outputBlock property before building the node render graph");
|
|
268
|
-
}
|
|
269
|
-
if (setAsSceneFrameGraph) {
|
|
270
|
-
this._scene.frameGraph = this._frameGraph;
|
|
271
|
-
}
|
|
272
|
-
this._initializeBlock(this.outputBlock);
|
|
273
|
-
this._frameGraph.clear();
|
|
274
|
-
const state = new NodeRenderGraphBuildState();
|
|
275
|
-
state.buildId = this._buildId;
|
|
276
|
-
state.verbose = this._options.verbose;
|
|
277
|
-
if (this._options.autoFillExternalInputs) {
|
|
278
|
-
this._autoFillExternalInputs();
|
|
279
|
-
}
|
|
280
|
-
this.onBeforeBuildObservable.notifyObservers(this._frameGraph);
|
|
281
|
-
// Make sure that one of the object renderer is flagged as the main object renderer
|
|
282
|
-
const objectRendererBlocks = this.getBlocksByPredicate((block) => block instanceof NodeRenderGraphBaseObjectRendererBlock);
|
|
283
|
-
if (objectRendererBlocks.length > 0 && !objectRendererBlocks.find((block) => block.isMainObjectRenderer)) {
|
|
284
|
-
objectRendererBlocks[0].isMainObjectRenderer = true;
|
|
285
|
-
}
|
|
286
|
-
try {
|
|
287
|
-
this.outputBlock.build(state);
|
|
288
|
-
if (!dontBuildFrameGraph) {
|
|
289
|
-
await this._frameGraph.buildAsync(waitForReadiness);
|
|
290
|
-
}
|
|
291
|
-
}
|
|
292
|
-
finally {
|
|
293
|
-
this._buildId = NodeRenderGraph._BuildIdGenerator++;
|
|
294
|
-
state.emitErrors(this.onBuildErrorObservable);
|
|
295
|
-
}
|
|
296
|
-
}
|
|
297
|
-
_autoFillExternalInputs() {
|
|
298
|
-
const allInputs = this.getInputBlocks();
|
|
299
|
-
const shadowLights = [];
|
|
300
|
-
for (const light of this._scene.lights) {
|
|
301
|
-
if (light.setShadowProjectionMatrix !== undefined) {
|
|
302
|
-
shadowLights.push(light);
|
|
303
|
-
}
|
|
304
|
-
}
|
|
305
|
-
let cameraIndex = 0;
|
|
306
|
-
let lightIndex = 0;
|
|
307
|
-
for (const input of allInputs) {
|
|
308
|
-
if (!input.isExternal) {
|
|
309
|
-
continue;
|
|
310
|
-
}
|
|
311
|
-
if (!input.isAnAncestorOfType("NodeRenderGraphOutputBlock")) {
|
|
312
|
-
continue;
|
|
313
|
-
}
|
|
314
|
-
if ((input.type & NodeRenderGraphBlockConnectionPointTypes.TextureAllButBackBuffer) !== 0) {
|
|
315
|
-
// nothing to do
|
|
316
|
-
}
|
|
317
|
-
else if (input.isCamera()) {
|
|
318
|
-
const camera = this._scene.cameras[cameraIndex++] || this._scene.cameras[0];
|
|
319
|
-
if (!this._scene.cameraToUseForPointers) {
|
|
320
|
-
this._scene.cameraToUseForPointers = camera;
|
|
321
|
-
}
|
|
322
|
-
input.value = camera;
|
|
323
|
-
}
|
|
324
|
-
else if (input.isObjectList()) {
|
|
325
|
-
input.value = { meshes: this._scene.meshes, particleSystems: this._scene.particleSystems };
|
|
326
|
-
}
|
|
327
|
-
else if (input.isShadowLight()) {
|
|
328
|
-
if (lightIndex < shadowLights.length) {
|
|
329
|
-
input.value = shadowLights[lightIndex++];
|
|
330
|
-
lightIndex = lightIndex % shadowLights.length;
|
|
331
|
-
}
|
|
332
|
-
}
|
|
333
|
-
}
|
|
334
|
-
}
|
|
335
|
-
/**
|
|
336
|
-
* Returns a promise that resolves when the node render graph is ready to be executed
|
|
337
|
-
* This method must be called after the graph has been built (NodeRenderGraph.build called)!
|
|
338
|
-
* @param timeStep Time step in ms between retries (default is 16)
|
|
339
|
-
* @param maxTimeout Maximum time in ms to wait for the graph to be ready (default is 10000)
|
|
340
|
-
* @returns The promise that resolves when the graph is ready
|
|
341
|
-
*/
|
|
342
|
-
async whenReadyAsync(timeStep = 16, maxTimeout = 10000) {
|
|
343
|
-
this._frameGraph.pausedExecution = true;
|
|
344
|
-
await this._frameGraph.whenReadyAsync(timeStep, maxTimeout);
|
|
345
|
-
this._frameGraph.pausedExecution = false;
|
|
346
|
-
}
|
|
347
|
-
/**
|
|
348
|
-
* Execute the graph (the graph must have been built before!)
|
|
349
|
-
*/
|
|
350
|
-
execute() {
|
|
351
|
-
this._frameGraph.execute();
|
|
352
|
-
}
|
|
353
|
-
_initializeBlock(node) {
|
|
354
|
-
node.initialize();
|
|
355
|
-
if (this._options.autoConfigure) {
|
|
356
|
-
node.autoConfigure();
|
|
357
|
-
}
|
|
358
|
-
if (this.attachedBlocks.indexOf(node) === -1) {
|
|
359
|
-
this.attachedBlocks.push(node);
|
|
360
|
-
}
|
|
361
|
-
for (const input of node.inputs) {
|
|
362
|
-
const connectedPoint = input.connectedPoint;
|
|
363
|
-
if (connectedPoint) {
|
|
364
|
-
const block = connectedPoint.ownerBlock;
|
|
365
|
-
if (block !== node) {
|
|
366
|
-
this._initializeBlock(block);
|
|
367
|
-
}
|
|
368
|
-
}
|
|
369
|
-
}
|
|
370
|
-
}
|
|
371
|
-
/**
|
|
372
|
-
* Clear the current graph
|
|
373
|
-
*/
|
|
374
|
-
clear() {
|
|
375
|
-
this.outputBlock = null;
|
|
376
|
-
this.attachedBlocks.length = 0;
|
|
377
|
-
}
|
|
378
|
-
/**
|
|
379
|
-
* Remove a block from the current graph
|
|
380
|
-
* @param block defines the block to remove
|
|
381
|
-
*/
|
|
382
|
-
removeBlock(block) {
|
|
383
|
-
const attachedBlockIndex = this.attachedBlocks.indexOf(block);
|
|
384
|
-
if (attachedBlockIndex > -1) {
|
|
385
|
-
this.attachedBlocks.splice(attachedBlockIndex, 1);
|
|
386
|
-
}
|
|
387
|
-
if (block === this.outputBlock) {
|
|
388
|
-
this.outputBlock = null;
|
|
389
|
-
}
|
|
390
|
-
}
|
|
391
|
-
/**
|
|
392
|
-
* Clear the current graph and load a new one from a serialization object
|
|
393
|
-
* @param source defines the JSON representation of the graph
|
|
394
|
-
* @param merge defines whether or not the source must be merged or replace the current content
|
|
395
|
-
*/
|
|
396
|
-
parseSerializedObject(source, merge = false) {
|
|
397
|
-
if (!merge) {
|
|
398
|
-
this.clear();
|
|
399
|
-
}
|
|
400
|
-
const map = {};
|
|
401
|
-
// Create blocks
|
|
402
|
-
for (const parsedBlock of source.blocks) {
|
|
403
|
-
const blockType = GetClass(parsedBlock.customType);
|
|
404
|
-
if (blockType) {
|
|
405
|
-
const additionalConstructionParameters = parsedBlock.additionalConstructionParameters;
|
|
406
|
-
const block = additionalConstructionParameters
|
|
407
|
-
? new blockType("", this._frameGraph, this._scene, ...additionalConstructionParameters)
|
|
408
|
-
: new blockType("", this._frameGraph, this._scene);
|
|
409
|
-
block._deserialize(parsedBlock);
|
|
410
|
-
map[parsedBlock.id] = block;
|
|
411
|
-
this.attachedBlocks.push(block);
|
|
412
|
-
}
|
|
413
|
-
}
|
|
414
|
-
// Reconnect teleportation
|
|
415
|
-
for (const block of this.attachedBlocks) {
|
|
416
|
-
if (block.isTeleportOut) {
|
|
417
|
-
const teleportOut = block;
|
|
418
|
-
const id = teleportOut._tempEntryPointUniqueId;
|
|
419
|
-
if (id) {
|
|
420
|
-
const source = map[id];
|
|
421
|
-
if (source) {
|
|
422
|
-
source.attachToEndpoint(teleportOut);
|
|
423
|
-
}
|
|
424
|
-
}
|
|
425
|
-
}
|
|
426
|
-
}
|
|
427
|
-
// Connections - Starts with input blocks only (except if in "merge" mode where we scan all blocks)
|
|
428
|
-
for (let blockIndex = 0; blockIndex < source.blocks.length; blockIndex++) {
|
|
429
|
-
const parsedBlock = source.blocks[blockIndex];
|
|
430
|
-
const block = map[parsedBlock.id];
|
|
431
|
-
if (!block) {
|
|
432
|
-
continue;
|
|
433
|
-
}
|
|
434
|
-
if (block.inputs.length && parsedBlock.inputs.some((i) => i.targetConnectionName) && !merge) {
|
|
435
|
-
continue;
|
|
436
|
-
}
|
|
437
|
-
this._restoreConnections(block, source, map);
|
|
438
|
-
}
|
|
439
|
-
// Outputs
|
|
440
|
-
if (source.outputNodeId) {
|
|
441
|
-
this.outputBlock = map[source.outputNodeId];
|
|
442
|
-
}
|
|
443
|
-
// UI related info
|
|
444
|
-
if (source.locations || (source.editorData && source.editorData.locations)) {
|
|
445
|
-
const locations = source.locations || source.editorData.locations;
|
|
446
|
-
for (const location of locations) {
|
|
447
|
-
if (map[location.blockId]) {
|
|
448
|
-
location.blockId = map[location.blockId].uniqueId;
|
|
449
|
-
}
|
|
450
|
-
}
|
|
451
|
-
if (merge && this.editorData && this.editorData.locations) {
|
|
452
|
-
locations.concat(this.editorData.locations);
|
|
453
|
-
}
|
|
454
|
-
if (source.locations) {
|
|
455
|
-
this.editorData = {
|
|
456
|
-
locations: locations,
|
|
263
|
+
/**
|
|
264
|
+
* Creates the node editor window.
|
|
265
|
+
* @param additionalConfig Additional configuration for the FGE
|
|
266
|
+
*/
|
|
267
|
+
_createNodeEditor(additionalConfig) {
|
|
268
|
+
const nodeEditorConfig = {
|
|
269
|
+
nodeRenderGraph: this,
|
|
270
|
+
customBlockDescriptions: _a.CustomBlockDescriptions,
|
|
271
|
+
...additionalConfig,
|
|
457
272
|
};
|
|
273
|
+
this.BJSNODERENDERGRAPHEDITOR.NodeRenderGraphEditor.Show(nodeEditorConfig);
|
|
274
|
+
}
|
|
275
|
+
/**
|
|
276
|
+
* Build the final list of blocks that will be executed by the "execute" method.
|
|
277
|
+
* It also builds the underlying frame graph unless specified otherwise.
|
|
278
|
+
* @param dontBuildFrameGraph If the underlying frame graph should not be built (default: false)
|
|
279
|
+
* @param waitForReadiness If the method should wait for the frame graph to be ready before resolving (default: true). Note that this parameter has no effect if "dontBuildFrameGraph" is true.
|
|
280
|
+
* @param setAsSceneFrameGraph If the built frame graph must be set as the scene's frame graph (default: true)
|
|
281
|
+
*/
|
|
282
|
+
async buildAsync(dontBuildFrameGraph = false, waitForReadiness = true, setAsSceneFrameGraph = true) {
|
|
283
|
+
if (!this.outputBlock) {
|
|
284
|
+
throw new Error("You must define the outputBlock property before building the node render graph");
|
|
285
|
+
}
|
|
286
|
+
if (setAsSceneFrameGraph) {
|
|
287
|
+
this._scene.frameGraph = this._frameGraph;
|
|
288
|
+
}
|
|
289
|
+
this._initializeBlock(this.outputBlock);
|
|
290
|
+
this._frameGraph.clear();
|
|
291
|
+
const state = new NodeRenderGraphBuildState();
|
|
292
|
+
state.buildId = this._buildId;
|
|
293
|
+
state.verbose = this._options.verbose;
|
|
294
|
+
if (this._options.autoFillExternalInputs) {
|
|
295
|
+
this._autoFillExternalInputs();
|
|
296
|
+
}
|
|
297
|
+
this.onBeforeBuildObservable.notifyObservers(this._frameGraph);
|
|
298
|
+
// Make sure that one of the object renderer is flagged as the main object renderer
|
|
299
|
+
const objectRendererBlocks = this.getBlocksByPredicate((block) => block instanceof NodeRenderGraphBaseObjectRendererBlock);
|
|
300
|
+
if (objectRendererBlocks.length > 0 && !objectRendererBlocks.find((block) => block.isMainObjectRenderer)) {
|
|
301
|
+
objectRendererBlocks[0].isMainObjectRenderer = true;
|
|
302
|
+
}
|
|
303
|
+
try {
|
|
304
|
+
this.outputBlock.build(state);
|
|
305
|
+
if (!dontBuildFrameGraph) {
|
|
306
|
+
await this._frameGraph.buildAsync(waitForReadiness);
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
finally {
|
|
310
|
+
this._buildId = _a._BuildIdGenerator++;
|
|
311
|
+
state.emitErrors(this.onBuildErrorObservable);
|
|
312
|
+
}
|
|
458
313
|
}
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
_restoreConnections(block, source, map) {
|
|
472
|
-
for (const outputPoint of block.outputs) {
|
|
473
|
-
for (const candidate of source.blocks) {
|
|
474
|
-
const target = map[candidate.id];
|
|
475
|
-
if (!target) {
|
|
476
|
-
continue;
|
|
477
|
-
}
|
|
478
|
-
for (const input of candidate.inputs) {
|
|
479
|
-
if (map[input.targetBlockId] === block && input.targetConnectionName === outputPoint.name) {
|
|
480
|
-
const inputPoint = target.getInputByName(input.inputName);
|
|
481
|
-
if (!inputPoint || inputPoint.isConnected) {
|
|
482
|
-
continue;
|
|
483
|
-
}
|
|
484
|
-
outputPoint.connectTo(inputPoint, true);
|
|
485
|
-
this._restoreConnections(target, source, map);
|
|
314
|
+
_autoFillExternalInputs() {
|
|
315
|
+
const allInputs = this.getInputBlocks();
|
|
316
|
+
const shadowLights = [];
|
|
317
|
+
for (const light of this._scene.lights) {
|
|
318
|
+
if (light.setShadowProjectionMatrix !== undefined) {
|
|
319
|
+
shadowLights.push(light);
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
let cameraIndex = 0;
|
|
323
|
+
let lightIndex = 0;
|
|
324
|
+
for (const input of allInputs) {
|
|
325
|
+
if (!input.isExternal) {
|
|
486
326
|
continue;
|
|
487
327
|
}
|
|
328
|
+
if (!input.isAnAncestorOfType("NodeRenderGraphOutputBlock")) {
|
|
329
|
+
continue;
|
|
330
|
+
}
|
|
331
|
+
if ((input.type & NodeRenderGraphBlockConnectionPointTypes.TextureAllButBackBuffer) !== 0) {
|
|
332
|
+
// nothing to do
|
|
333
|
+
}
|
|
334
|
+
else if (input.isCamera()) {
|
|
335
|
+
const camera = this._scene.cameras[cameraIndex++] || this._scene.cameras[0];
|
|
336
|
+
if (!this._scene.cameraToUseForPointers) {
|
|
337
|
+
this._scene.cameraToUseForPointers = camera;
|
|
338
|
+
}
|
|
339
|
+
input.value = camera;
|
|
340
|
+
}
|
|
341
|
+
else if (input.isObjectList()) {
|
|
342
|
+
input.value = { meshes: this._scene.meshes, particleSystems: this._scene.particleSystems };
|
|
343
|
+
}
|
|
344
|
+
else if (input.isShadowLight()) {
|
|
345
|
+
if (lightIndex < shadowLights.length) {
|
|
346
|
+
input.value = shadowLights[lightIndex++];
|
|
347
|
+
lightIndex = lightIndex % shadowLights.length;
|
|
348
|
+
}
|
|
349
|
+
}
|
|
488
350
|
}
|
|
489
351
|
}
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
return codeString;
|
|
523
|
-
}
|
|
524
|
-
_gatherBlocks(rootNode, list) {
|
|
525
|
-
if (list.indexOf(rootNode) !== -1) {
|
|
526
|
-
return;
|
|
527
|
-
}
|
|
528
|
-
list.push(rootNode);
|
|
529
|
-
for (const input of rootNode.inputs) {
|
|
530
|
-
const connectedPoint = input.connectedPoint;
|
|
531
|
-
if (connectedPoint) {
|
|
532
|
-
const block = connectedPoint.ownerBlock;
|
|
533
|
-
if (block !== rootNode) {
|
|
534
|
-
this._gatherBlocks(block, list);
|
|
535
|
-
}
|
|
536
|
-
}
|
|
537
|
-
}
|
|
538
|
-
// Teleportation
|
|
539
|
-
if (rootNode.isTeleportOut) {
|
|
540
|
-
const block = rootNode;
|
|
541
|
-
if (block.entryPoint) {
|
|
542
|
-
this._gatherBlocks(block.entryPoint, list);
|
|
543
|
-
}
|
|
544
|
-
}
|
|
545
|
-
}
|
|
546
|
-
/**
|
|
547
|
-
* Clear the current graph and set it to a default state
|
|
548
|
-
*/
|
|
549
|
-
setToDefault() {
|
|
550
|
-
this.clear();
|
|
551
|
-
this.editorData = null;
|
|
552
|
-
// Source textures
|
|
553
|
-
const colorTexture = new NodeRenderGraphInputBlock("Color Texture", this._frameGraph, this._scene, NodeRenderGraphBlockConnectionPointTypes.Texture);
|
|
554
|
-
colorTexture.creationOptions.options.samples = 4;
|
|
555
|
-
const depthTexture = new NodeRenderGraphInputBlock("Depth Texture", this._frameGraph, this._scene, NodeRenderGraphBlockConnectionPointTypes.TextureDepthStencilAttachment);
|
|
556
|
-
depthTexture.creationOptions.options.samples = 4;
|
|
557
|
-
// Clear texture
|
|
558
|
-
const clear = new NodeRenderGraphClearBlock("Clear", this._frameGraph, this._scene);
|
|
559
|
-
clear.clearDepth = true;
|
|
560
|
-
clear.clearStencil = true;
|
|
561
|
-
colorTexture.output.connectTo(clear.target);
|
|
562
|
-
depthTexture.output.connectTo(clear.depth);
|
|
563
|
-
// Object list and culling
|
|
564
|
-
const camera = new NodeRenderGraphInputBlock("Camera", this._frameGraph, this._scene, NodeRenderGraphBlockConnectionPointTypes.Camera);
|
|
565
|
-
const objectList = new NodeRenderGraphInputBlock("Object List", this._frameGraph, this._scene, NodeRenderGraphBlockConnectionPointTypes.ObjectList);
|
|
566
|
-
const cull = new NodeRenderGraphCullObjectsBlock("Cull", this._frameGraph, this._scene);
|
|
567
|
-
camera.output.connectTo(cull.camera);
|
|
568
|
-
objectList.output.connectTo(cull.objects);
|
|
569
|
-
// Render objects
|
|
570
|
-
const mainRendering = new NodeRenderGraphObjectRendererBlock("Main Rendering", this._frameGraph, this._scene);
|
|
571
|
-
camera.output.connectTo(mainRendering.camera);
|
|
572
|
-
cull.output.connectTo(mainRendering.objects);
|
|
573
|
-
clear.output.connectTo(mainRendering.target);
|
|
574
|
-
clear.outputDepth.connectTo(mainRendering.depth);
|
|
575
|
-
// Final output
|
|
576
|
-
const output = new NodeRenderGraphOutputBlock("Output", this._frameGraph, this._scene);
|
|
577
|
-
mainRendering.output.connectTo(output.texture);
|
|
578
|
-
this.outputBlock = output;
|
|
579
|
-
}
|
|
580
|
-
/**
|
|
581
|
-
* Makes a duplicate of the current node render graph.
|
|
582
|
-
* Note that you should call buildAsync() on the returned graph to make it usable.
|
|
583
|
-
* @param name defines the name to use for the new node render graph
|
|
584
|
-
* @returns the new node render graph
|
|
585
|
-
*/
|
|
586
|
-
clone(name) {
|
|
587
|
-
const serializationObject = this.serialize();
|
|
588
|
-
const clone = SerializationHelper.Clone(() => new NodeRenderGraph(name, this._scene), this);
|
|
589
|
-
clone.name = name;
|
|
590
|
-
clone.parseSerializedObject(serializationObject);
|
|
591
|
-
clone._buildId = this._buildId;
|
|
592
|
-
return clone;
|
|
593
|
-
}
|
|
594
|
-
/**
|
|
595
|
-
* Serializes this node render graph in a JSON representation
|
|
596
|
-
* @param selectedBlocks defines the list of blocks to save (if null the whole node render graph will be saved)
|
|
597
|
-
* @returns the serialized node render graph object
|
|
598
|
-
*/
|
|
599
|
-
serialize(selectedBlocks) {
|
|
600
|
-
const serializationObject = selectedBlocks ? {} : SerializationHelper.Serialize(this);
|
|
601
|
-
serializationObject.editorData = JSON.parse(JSON.stringify(this.editorData)); // Copy
|
|
602
|
-
let blocks = [];
|
|
603
|
-
if (selectedBlocks) {
|
|
604
|
-
blocks = selectedBlocks;
|
|
605
|
-
}
|
|
606
|
-
else {
|
|
607
|
-
serializationObject.customType = "BABYLON.NodeRenderGraph";
|
|
608
|
-
if (this.outputBlock) {
|
|
609
|
-
serializationObject.outputNodeId = this.outputBlock.uniqueId;
|
|
610
|
-
}
|
|
611
|
-
}
|
|
612
|
-
// Blocks
|
|
613
|
-
serializationObject.blocks = [];
|
|
614
|
-
for (const block of blocks) {
|
|
615
|
-
serializationObject.blocks.push(block.serialize());
|
|
616
|
-
}
|
|
617
|
-
if (!selectedBlocks) {
|
|
618
|
-
for (const block of this.attachedBlocks) {
|
|
619
|
-
if (blocks.indexOf(block) !== -1) {
|
|
620
|
-
continue;
|
|
621
|
-
}
|
|
622
|
-
serializationObject.blocks.push(block.serialize());
|
|
623
|
-
}
|
|
624
|
-
}
|
|
625
|
-
return serializationObject;
|
|
626
|
-
}
|
|
627
|
-
/**
|
|
628
|
-
* Disposes the resources
|
|
629
|
-
*/
|
|
630
|
-
dispose() {
|
|
631
|
-
for (const block of this.attachedBlocks) {
|
|
632
|
-
block.dispose();
|
|
633
|
-
}
|
|
634
|
-
this._frameGraph.dispose();
|
|
635
|
-
this._frameGraph = undefined;
|
|
636
|
-
this._engine.onResizeObservable.remove(this._resizeObserver);
|
|
637
|
-
this._resizeObserver = null;
|
|
638
|
-
this.attachedBlocks.length = 0;
|
|
639
|
-
this.onBuildErrorObservable.clear();
|
|
640
|
-
}
|
|
641
|
-
/**
|
|
642
|
-
* Creates a new node render graph set to default basic configuration
|
|
643
|
-
* @param name defines the name of the node render graph
|
|
644
|
-
* @param scene defines the scene to use
|
|
645
|
-
* @param nodeRenderGraphOptions defines options to use when creating the node render graph
|
|
646
|
-
* @returns a new NodeRenderGraph
|
|
647
|
-
*/
|
|
648
|
-
static async CreateDefaultAsync(name, scene, nodeRenderGraphOptions) {
|
|
649
|
-
const renderGraph = new NodeRenderGraph(name, scene, nodeRenderGraphOptions);
|
|
650
|
-
renderGraph.setToDefault();
|
|
651
|
-
await renderGraph.buildAsync(false, true, false);
|
|
652
|
-
return renderGraph;
|
|
653
|
-
}
|
|
654
|
-
/**
|
|
655
|
-
* Creates a node render graph from parsed graph data
|
|
656
|
-
* @param source defines the JSON representation of the node render graph
|
|
657
|
-
* @param scene defines the scene to use
|
|
658
|
-
* @param nodeRenderGraphOptions defines options to use when creating the node render
|
|
659
|
-
* @param skipBuild defines whether to skip building the node render graph (default is true)
|
|
660
|
-
* @returns a new node render graph
|
|
661
|
-
*/
|
|
662
|
-
static Parse(source, scene, nodeRenderGraphOptions, skipBuild = true) {
|
|
663
|
-
const renderGraph = SerializationHelper.Parse(() => new NodeRenderGraph(source.name, scene, nodeRenderGraphOptions), source, null);
|
|
664
|
-
renderGraph.parseSerializedObject(source);
|
|
665
|
-
if (!skipBuild) {
|
|
666
|
-
void renderGraph.buildAsync();
|
|
667
|
-
}
|
|
668
|
-
return renderGraph;
|
|
669
|
-
}
|
|
670
|
-
/**
|
|
671
|
-
* Creates a node render graph from a snippet saved by the node render graph editor
|
|
672
|
-
* @param snippetId defines the snippet to load
|
|
673
|
-
* @param scene defines the scene to use
|
|
674
|
-
* @param nodeRenderGraphOptions defines options to use when creating the node render graph
|
|
675
|
-
* @param nodeRenderGraph defines a node render graph to update (instead of creating a new one)
|
|
676
|
-
* @param skipBuild defines whether to skip building the node render graph (default is true)
|
|
677
|
-
* @returns a promise that will resolve to the new node render graph
|
|
678
|
-
*/
|
|
679
|
-
// eslint-disable-next-line @typescript-eslint/promise-function-async, no-restricted-syntax
|
|
680
|
-
static ParseFromSnippetAsync(snippetId, scene, nodeRenderGraphOptions, nodeRenderGraph, skipBuild = true) {
|
|
681
|
-
if (snippetId === "_BLANK") {
|
|
682
|
-
return NodeRenderGraph.CreateDefaultAsync("blank", scene, nodeRenderGraphOptions);
|
|
683
|
-
}
|
|
684
|
-
return new Promise((resolve, reject) => {
|
|
685
|
-
const request = new WebRequest();
|
|
686
|
-
request.addEventListener("readystatechange", async () => {
|
|
687
|
-
if (request.readyState == 4) {
|
|
688
|
-
if (request.status == 200) {
|
|
689
|
-
const snippet = JSON.parse(JSON.parse(request.responseText).jsonPayload);
|
|
690
|
-
const serializationObject = JSON.parse(snippet.nodeRenderGraph);
|
|
691
|
-
if (!nodeRenderGraph) {
|
|
692
|
-
nodeRenderGraph = SerializationHelper.Parse(() => new NodeRenderGraph(snippetId, scene, nodeRenderGraphOptions), serializationObject, null);
|
|
352
|
+
/**
|
|
353
|
+
* Returns a promise that resolves when the node render graph is ready to be executed
|
|
354
|
+
* This method must be called after the graph has been built (NodeRenderGraph.build called)!
|
|
355
|
+
* @param timeStep Time step in ms between retries (default is 16)
|
|
356
|
+
* @param maxTimeout Maximum time in ms to wait for the graph to be ready (default is 10000)
|
|
357
|
+
* @returns The promise that resolves when the graph is ready
|
|
358
|
+
*/
|
|
359
|
+
async whenReadyAsync(timeStep = 16, maxTimeout = 10000) {
|
|
360
|
+
this._frameGraph.pausedExecution = true;
|
|
361
|
+
await this._frameGraph.whenReadyAsync(timeStep, maxTimeout);
|
|
362
|
+
this._frameGraph.pausedExecution = false;
|
|
363
|
+
}
|
|
364
|
+
/**
|
|
365
|
+
* Execute the graph (the graph must have been built before!)
|
|
366
|
+
*/
|
|
367
|
+
execute() {
|
|
368
|
+
this._frameGraph.execute();
|
|
369
|
+
}
|
|
370
|
+
_initializeBlock(node) {
|
|
371
|
+
node.initialize();
|
|
372
|
+
if (this._options.autoConfigure) {
|
|
373
|
+
node.autoConfigure();
|
|
374
|
+
}
|
|
375
|
+
if (this.attachedBlocks.indexOf(node) === -1) {
|
|
376
|
+
this.attachedBlocks.push(node);
|
|
377
|
+
}
|
|
378
|
+
for (const input of node.inputs) {
|
|
379
|
+
const connectedPoint = input.connectedPoint;
|
|
380
|
+
if (connectedPoint) {
|
|
381
|
+
const block = connectedPoint.ownerBlock;
|
|
382
|
+
if (block !== node) {
|
|
383
|
+
this._initializeBlock(block);
|
|
693
384
|
}
|
|
694
|
-
|
|
695
|
-
|
|
696
|
-
|
|
697
|
-
|
|
698
|
-
|
|
385
|
+
}
|
|
386
|
+
}
|
|
387
|
+
}
|
|
388
|
+
/**
|
|
389
|
+
* Clear the current graph
|
|
390
|
+
*/
|
|
391
|
+
clear() {
|
|
392
|
+
this.outputBlock = null;
|
|
393
|
+
this.attachedBlocks.length = 0;
|
|
394
|
+
}
|
|
395
|
+
/**
|
|
396
|
+
* Remove a block from the current graph
|
|
397
|
+
* @param block defines the block to remove
|
|
398
|
+
*/
|
|
399
|
+
removeBlock(block) {
|
|
400
|
+
const attachedBlockIndex = this.attachedBlocks.indexOf(block);
|
|
401
|
+
if (attachedBlockIndex > -1) {
|
|
402
|
+
this.attachedBlocks.splice(attachedBlockIndex, 1);
|
|
403
|
+
}
|
|
404
|
+
if (block === this.outputBlock) {
|
|
405
|
+
this.outputBlock = null;
|
|
406
|
+
}
|
|
407
|
+
}
|
|
408
|
+
/**
|
|
409
|
+
* Clear the current graph and load a new one from a serialization object
|
|
410
|
+
* @param source defines the JSON representation of the graph
|
|
411
|
+
* @param merge defines whether or not the source must be merged or replace the current content
|
|
412
|
+
*/
|
|
413
|
+
parseSerializedObject(source, merge = false) {
|
|
414
|
+
if (!merge) {
|
|
415
|
+
this.clear();
|
|
416
|
+
}
|
|
417
|
+
const map = {};
|
|
418
|
+
// Create blocks
|
|
419
|
+
for (const parsedBlock of source.blocks) {
|
|
420
|
+
const blockType = GetClass(parsedBlock.customType);
|
|
421
|
+
if (blockType) {
|
|
422
|
+
const additionalConstructionParameters = parsedBlock.additionalConstructionParameters;
|
|
423
|
+
const block = additionalConstructionParameters
|
|
424
|
+
? new blockType("", this._frameGraph, this._scene, ...additionalConstructionParameters)
|
|
425
|
+
: new blockType("", this._frameGraph, this._scene);
|
|
426
|
+
block._deserialize(parsedBlock);
|
|
427
|
+
map[parsedBlock.id] = block;
|
|
428
|
+
this.attachedBlocks.push(block);
|
|
429
|
+
}
|
|
430
|
+
}
|
|
431
|
+
// Reconnect teleportation
|
|
432
|
+
for (const block of this.attachedBlocks) {
|
|
433
|
+
if (block.isTeleportOut) {
|
|
434
|
+
const teleportOut = block;
|
|
435
|
+
const id = teleportOut._tempEntryPointUniqueId;
|
|
436
|
+
if (id) {
|
|
437
|
+
const source = map[id];
|
|
438
|
+
if (source) {
|
|
439
|
+
source.attachToEndpoint(teleportOut);
|
|
699
440
|
}
|
|
700
|
-
resolve(nodeRenderGraph);
|
|
701
441
|
}
|
|
702
|
-
|
|
703
|
-
|
|
704
|
-
|
|
442
|
+
}
|
|
443
|
+
}
|
|
444
|
+
// Connections - Starts with input blocks only (except if in "merge" mode where we scan all blocks)
|
|
445
|
+
for (let blockIndex = 0; blockIndex < source.blocks.length; blockIndex++) {
|
|
446
|
+
const parsedBlock = source.blocks[blockIndex];
|
|
447
|
+
const block = map[parsedBlock.id];
|
|
448
|
+
if (!block) {
|
|
449
|
+
continue;
|
|
450
|
+
}
|
|
451
|
+
if (block.inputs.length && parsedBlock.inputs.some((i) => i.targetConnectionName) && !merge) {
|
|
452
|
+
continue;
|
|
453
|
+
}
|
|
454
|
+
this._restoreConnections(block, source, map);
|
|
455
|
+
}
|
|
456
|
+
// Outputs
|
|
457
|
+
if (source.outputNodeId) {
|
|
458
|
+
this.outputBlock = map[source.outputNodeId];
|
|
459
|
+
}
|
|
460
|
+
// UI related info
|
|
461
|
+
if (source.locations || (source.editorData && source.editorData.locations)) {
|
|
462
|
+
const locations = source.locations || source.editorData.locations;
|
|
463
|
+
for (const location of locations) {
|
|
464
|
+
if (map[location.blockId]) {
|
|
465
|
+
location.blockId = map[location.blockId].uniqueId;
|
|
705
466
|
}
|
|
706
467
|
}
|
|
468
|
+
if (merge && this.editorData && this.editorData.locations) {
|
|
469
|
+
locations.concat(this.editorData.locations);
|
|
470
|
+
}
|
|
471
|
+
if (source.locations) {
|
|
472
|
+
this.editorData = {
|
|
473
|
+
locations: locations,
|
|
474
|
+
};
|
|
475
|
+
}
|
|
707
476
|
else {
|
|
708
|
-
|
|
709
|
-
|
|
710
|
-
}
|
|
711
|
-
|
|
712
|
-
|
|
713
|
-
|
|
714
|
-
|
|
715
|
-
|
|
716
|
-
|
|
717
|
-
|
|
718
|
-
|
|
719
|
-
|
|
720
|
-
|
|
721
|
-
|
|
722
|
-
|
|
723
|
-
|
|
724
|
-
|
|
725
|
-
|
|
726
|
-
|
|
727
|
-
]
|
|
728
|
-
|
|
729
|
-
|
|
730
|
-
|
|
477
|
+
this.editorData = source.editorData;
|
|
478
|
+
this.editorData.locations = locations;
|
|
479
|
+
}
|
|
480
|
+
const blockMap = {};
|
|
481
|
+
for (const key in map) {
|
|
482
|
+
blockMap[key] = map[key].uniqueId;
|
|
483
|
+
}
|
|
484
|
+
this.editorData.map = blockMap;
|
|
485
|
+
}
|
|
486
|
+
this.comment = source.comment;
|
|
487
|
+
}
|
|
488
|
+
_restoreConnections(block, source, map) {
|
|
489
|
+
for (const outputPoint of block.outputs) {
|
|
490
|
+
for (const candidate of source.blocks) {
|
|
491
|
+
const target = map[candidate.id];
|
|
492
|
+
if (!target) {
|
|
493
|
+
continue;
|
|
494
|
+
}
|
|
495
|
+
for (const input of candidate.inputs) {
|
|
496
|
+
if (map[input.targetBlockId] === block && input.targetConnectionName === outputPoint.name) {
|
|
497
|
+
const inputPoint = target.getInputByName(input.inputName);
|
|
498
|
+
if (!inputPoint || inputPoint.isConnected) {
|
|
499
|
+
continue;
|
|
500
|
+
}
|
|
501
|
+
outputPoint.connectTo(inputPoint, true);
|
|
502
|
+
this._restoreConnections(target, source, map);
|
|
503
|
+
continue;
|
|
504
|
+
}
|
|
505
|
+
}
|
|
506
|
+
}
|
|
507
|
+
}
|
|
508
|
+
}
|
|
509
|
+
/**
|
|
510
|
+
* Generate a string containing the code declaration required to create an equivalent of this node render graph
|
|
511
|
+
* @returns a string
|
|
512
|
+
*/
|
|
513
|
+
generateCode() {
|
|
514
|
+
let alreadyDumped = [];
|
|
515
|
+
const blocks = [];
|
|
516
|
+
const uniqueNames = ["const", "var", "let"];
|
|
517
|
+
// Gets active blocks
|
|
518
|
+
if (this.outputBlock) {
|
|
519
|
+
this._gatherBlocks(this.outputBlock, blocks);
|
|
520
|
+
}
|
|
521
|
+
// Generate
|
|
522
|
+
const options = JSON.stringify(this._options);
|
|
523
|
+
let codeString = `let nodeRenderGraph = new BABYLON.NodeRenderGraph("${this.name || "render graph"}", scene, ${options});\n`;
|
|
524
|
+
for (const node of blocks) {
|
|
525
|
+
if (node.isInput && alreadyDumped.indexOf(node) === -1) {
|
|
526
|
+
codeString += node._dumpCode(uniqueNames, alreadyDumped) + "\n";
|
|
527
|
+
}
|
|
528
|
+
}
|
|
529
|
+
if (this.outputBlock) {
|
|
530
|
+
// Connections
|
|
531
|
+
alreadyDumped = [];
|
|
532
|
+
codeString += "// Connections\n";
|
|
533
|
+
codeString += this.outputBlock._dumpCodeForOutputConnections(alreadyDumped);
|
|
534
|
+
// Output nodes
|
|
535
|
+
codeString += "// Output nodes\n";
|
|
536
|
+
codeString += `nodeRenderGraph.outputBlock = ${this.outputBlock._codeVariableName};\n`;
|
|
537
|
+
codeString += `nodeRenderGraph.build();\n`;
|
|
538
|
+
}
|
|
539
|
+
return codeString;
|
|
540
|
+
}
|
|
541
|
+
_gatherBlocks(rootNode, list) {
|
|
542
|
+
if (list.indexOf(rootNode) !== -1) {
|
|
543
|
+
return;
|
|
544
|
+
}
|
|
545
|
+
list.push(rootNode);
|
|
546
|
+
for (const input of rootNode.inputs) {
|
|
547
|
+
const connectedPoint = input.connectedPoint;
|
|
548
|
+
if (connectedPoint) {
|
|
549
|
+
const block = connectedPoint.ownerBlock;
|
|
550
|
+
if (block !== rootNode) {
|
|
551
|
+
this._gatherBlocks(block, list);
|
|
552
|
+
}
|
|
553
|
+
}
|
|
554
|
+
}
|
|
555
|
+
// Teleportation
|
|
556
|
+
if (rootNode.isTeleportOut) {
|
|
557
|
+
const block = rootNode;
|
|
558
|
+
if (block.entryPoint) {
|
|
559
|
+
this._gatherBlocks(block.entryPoint, list);
|
|
560
|
+
}
|
|
561
|
+
}
|
|
562
|
+
}
|
|
563
|
+
/**
|
|
564
|
+
* Clear the current graph and set it to a default state
|
|
565
|
+
*/
|
|
566
|
+
setToDefault() {
|
|
567
|
+
this.clear();
|
|
568
|
+
this.editorData = null;
|
|
569
|
+
// Source textures
|
|
570
|
+
const colorTexture = new NodeRenderGraphInputBlock("Color Texture", this._frameGraph, this._scene, NodeRenderGraphBlockConnectionPointTypes.Texture);
|
|
571
|
+
colorTexture.creationOptions.options.samples = 4;
|
|
572
|
+
const depthTexture = new NodeRenderGraphInputBlock("Depth Texture", this._frameGraph, this._scene, NodeRenderGraphBlockConnectionPointTypes.TextureDepthStencilAttachment);
|
|
573
|
+
depthTexture.creationOptions.options.samples = 4;
|
|
574
|
+
// Clear texture
|
|
575
|
+
const clear = new NodeRenderGraphClearBlock("Clear", this._frameGraph, this._scene);
|
|
576
|
+
clear.clearDepth = true;
|
|
577
|
+
clear.clearStencil = true;
|
|
578
|
+
colorTexture.output.connectTo(clear.target);
|
|
579
|
+
depthTexture.output.connectTo(clear.depth);
|
|
580
|
+
// Object list and culling
|
|
581
|
+
const camera = new NodeRenderGraphInputBlock("Camera", this._frameGraph, this._scene, NodeRenderGraphBlockConnectionPointTypes.Camera);
|
|
582
|
+
const objectList = new NodeRenderGraphInputBlock("Object List", this._frameGraph, this._scene, NodeRenderGraphBlockConnectionPointTypes.ObjectList);
|
|
583
|
+
const cull = new NodeRenderGraphCullObjectsBlock("Cull", this._frameGraph, this._scene);
|
|
584
|
+
camera.output.connectTo(cull.camera);
|
|
585
|
+
objectList.output.connectTo(cull.objects);
|
|
586
|
+
// Render objects
|
|
587
|
+
const mainRendering = new NodeRenderGraphObjectRendererBlock("Main Rendering", this._frameGraph, this._scene);
|
|
588
|
+
camera.output.connectTo(mainRendering.camera);
|
|
589
|
+
cull.output.connectTo(mainRendering.objects);
|
|
590
|
+
clear.output.connectTo(mainRendering.target);
|
|
591
|
+
clear.outputDepth.connectTo(mainRendering.depth);
|
|
592
|
+
// Final output
|
|
593
|
+
const output = new NodeRenderGraphOutputBlock("Output", this._frameGraph, this._scene);
|
|
594
|
+
mainRendering.output.connectTo(output.texture);
|
|
595
|
+
this.outputBlock = output;
|
|
596
|
+
}
|
|
597
|
+
/**
|
|
598
|
+
* Makes a duplicate of the current node render graph.
|
|
599
|
+
* Note that you should call buildAsync() on the returned graph to make it usable.
|
|
600
|
+
* @param name defines the name to use for the new node render graph
|
|
601
|
+
* @returns the new node render graph
|
|
602
|
+
*/
|
|
603
|
+
clone(name) {
|
|
604
|
+
const serializationObject = this.serialize();
|
|
605
|
+
const clone = SerializationHelper.Clone(() => new _a(name, this._scene), this);
|
|
606
|
+
clone.name = name;
|
|
607
|
+
clone.parseSerializedObject(serializationObject);
|
|
608
|
+
clone._buildId = this._buildId;
|
|
609
|
+
return clone;
|
|
610
|
+
}
|
|
611
|
+
/**
|
|
612
|
+
* Serializes this node render graph in a JSON representation
|
|
613
|
+
* @param selectedBlocks defines the list of blocks to save (if null the whole node render graph will be saved)
|
|
614
|
+
* @returns the serialized node render graph object
|
|
615
|
+
*/
|
|
616
|
+
serialize(selectedBlocks) {
|
|
617
|
+
const serializationObject = selectedBlocks ? {} : SerializationHelper.Serialize(this);
|
|
618
|
+
serializationObject.editorData = JSON.parse(JSON.stringify(this.editorData)); // Copy
|
|
619
|
+
let blocks = [];
|
|
620
|
+
if (selectedBlocks) {
|
|
621
|
+
blocks = selectedBlocks;
|
|
622
|
+
}
|
|
623
|
+
else {
|
|
624
|
+
serializationObject.customType = "BABYLON.NodeRenderGraph";
|
|
625
|
+
if (this.outputBlock) {
|
|
626
|
+
serializationObject.outputNodeId = this.outputBlock.uniqueId;
|
|
627
|
+
}
|
|
628
|
+
}
|
|
629
|
+
// Blocks
|
|
630
|
+
serializationObject.blocks = [];
|
|
631
|
+
for (const block of blocks) {
|
|
632
|
+
serializationObject.blocks.push(block.serialize());
|
|
633
|
+
}
|
|
634
|
+
if (!selectedBlocks) {
|
|
635
|
+
for (const block of this.attachedBlocks) {
|
|
636
|
+
if (blocks.indexOf(block) !== -1) {
|
|
637
|
+
continue;
|
|
638
|
+
}
|
|
639
|
+
serializationObject.blocks.push(block.serialize());
|
|
640
|
+
}
|
|
641
|
+
}
|
|
642
|
+
return serializationObject;
|
|
643
|
+
}
|
|
644
|
+
/**
|
|
645
|
+
* Disposes the resources
|
|
646
|
+
*/
|
|
647
|
+
dispose() {
|
|
648
|
+
for (const block of this.attachedBlocks) {
|
|
649
|
+
block.dispose();
|
|
650
|
+
}
|
|
651
|
+
this._frameGraph.dispose();
|
|
652
|
+
this._frameGraph = undefined;
|
|
653
|
+
this._engine.onResizeObservable.remove(this._resizeObserver);
|
|
654
|
+
this._resizeObserver = null;
|
|
655
|
+
this.attachedBlocks.length = 0;
|
|
656
|
+
this.onBuildErrorObservable.clear();
|
|
657
|
+
}
|
|
658
|
+
/**
|
|
659
|
+
* Creates a new node render graph set to default basic configuration
|
|
660
|
+
* @param name defines the name of the node render graph
|
|
661
|
+
* @param scene defines the scene to use
|
|
662
|
+
* @param nodeRenderGraphOptions defines options to use when creating the node render graph
|
|
663
|
+
* @returns a new NodeRenderGraph
|
|
664
|
+
*/
|
|
665
|
+
static async CreateDefaultAsync(name, scene, nodeRenderGraphOptions) {
|
|
666
|
+
const renderGraph = new _a(name, scene, nodeRenderGraphOptions);
|
|
667
|
+
renderGraph.setToDefault();
|
|
668
|
+
await renderGraph.buildAsync(false, true, false);
|
|
669
|
+
return renderGraph;
|
|
670
|
+
}
|
|
671
|
+
/**
|
|
672
|
+
* Creates a node render graph from parsed graph data
|
|
673
|
+
* @param source defines the JSON representation of the node render graph
|
|
674
|
+
* @param scene defines the scene to use
|
|
675
|
+
* @param nodeRenderGraphOptions defines options to use when creating the node render
|
|
676
|
+
* @param skipBuild defines whether to skip building the node render graph (default is true)
|
|
677
|
+
* @returns a new node render graph
|
|
678
|
+
*/
|
|
679
|
+
static Parse(source, scene, nodeRenderGraphOptions, skipBuild = true) {
|
|
680
|
+
const renderGraph = SerializationHelper.Parse(() => new _a(source.name, scene, nodeRenderGraphOptions), source, null);
|
|
681
|
+
renderGraph.parseSerializedObject(source);
|
|
682
|
+
if (!skipBuild) {
|
|
683
|
+
void renderGraph.buildAsync();
|
|
684
|
+
}
|
|
685
|
+
return renderGraph;
|
|
686
|
+
}
|
|
687
|
+
/**
|
|
688
|
+
* Creates a node render graph from a snippet saved by the node render graph editor
|
|
689
|
+
* @param snippetId defines the snippet to load
|
|
690
|
+
* @param scene defines the scene to use
|
|
691
|
+
* @param nodeRenderGraphOptions defines options to use when creating the node render graph
|
|
692
|
+
* @param nodeRenderGraph defines a node render graph to update (instead of creating a new one)
|
|
693
|
+
* @param skipBuild defines whether to skip building the node render graph (default is true)
|
|
694
|
+
* @returns a promise that will resolve to the new node render graph
|
|
695
|
+
*/
|
|
696
|
+
// eslint-disable-next-line @typescript-eslint/promise-function-async, no-restricted-syntax
|
|
697
|
+
static ParseFromSnippetAsync(snippetId, scene, nodeRenderGraphOptions, nodeRenderGraph, skipBuild = true) {
|
|
698
|
+
if (snippetId === "_BLANK") {
|
|
699
|
+
return _a.CreateDefaultAsync("blank", scene, nodeRenderGraphOptions);
|
|
700
|
+
}
|
|
701
|
+
return new Promise((resolve, reject) => {
|
|
702
|
+
const request = new WebRequest();
|
|
703
|
+
request.addEventListener("readystatechange", async () => {
|
|
704
|
+
if (request.readyState == 4) {
|
|
705
|
+
if (request.status == 200) {
|
|
706
|
+
const snippet = JSON.parse(JSON.parse(request.responseText).jsonPayload);
|
|
707
|
+
const serializationObject = JSON.parse(snippet.nodeRenderGraph);
|
|
708
|
+
if (!nodeRenderGraph) {
|
|
709
|
+
nodeRenderGraph = SerializationHelper.Parse(() => new _a(snippetId, scene, nodeRenderGraphOptions), serializationObject, null);
|
|
710
|
+
}
|
|
711
|
+
nodeRenderGraph.parseSerializedObject(serializationObject);
|
|
712
|
+
nodeRenderGraph.snippetId = snippetId;
|
|
713
|
+
try {
|
|
714
|
+
if (!skipBuild) {
|
|
715
|
+
await nodeRenderGraph.buildAsync();
|
|
716
|
+
}
|
|
717
|
+
resolve(nodeRenderGraph);
|
|
718
|
+
}
|
|
719
|
+
catch (err) {
|
|
720
|
+
// eslint-disable-next-line @typescript-eslint/prefer-promise-reject-errors
|
|
721
|
+
reject(err);
|
|
722
|
+
}
|
|
723
|
+
}
|
|
724
|
+
else {
|
|
725
|
+
// eslint-disable-next-line @typescript-eslint/prefer-promise-reject-errors
|
|
726
|
+
reject("Unable to load the snippet " + snippetId);
|
|
727
|
+
}
|
|
728
|
+
}
|
|
729
|
+
});
|
|
730
|
+
request.open("GET", this.SnippetUrl + "/" + snippetId.replace(/#/g, "/"));
|
|
731
|
+
request.send();
|
|
732
|
+
});
|
|
733
|
+
}
|
|
734
|
+
},
|
|
735
|
+
(() => {
|
|
736
|
+
const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(null) : void 0;
|
|
737
|
+
_name_decorators = [serialize()];
|
|
738
|
+
_comment_decorators = [serialize("comment")];
|
|
739
|
+
__esDecorate(null, null, _name_decorators, { kind: "field", name: "name", static: false, private: false, access: { has: obj => "name" in obj, get: obj => obj.name, set: (obj, value) => { obj.name = value; } }, metadata: _metadata }, _name_initializers, _name_extraInitializers);
|
|
740
|
+
__esDecorate(null, null, _comment_decorators, { kind: "field", name: "comment", static: false, private: false, access: { has: obj => "comment" in obj, get: obj => obj.comment, set: (obj, value) => { obj.comment = value; } }, metadata: _metadata }, _comment_initializers, _comment_extraInitializers);
|
|
741
|
+
if (_metadata) Object.defineProperty(_a, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
742
|
+
})(),
|
|
743
|
+
_a._BuildIdGenerator = 0,
|
|
744
|
+
/** Define the Url to load node editor script */
|
|
745
|
+
_a.EditorURL = `${Tools._DefaultCdnUrl}/v${Engine.Version}/nodeRenderGraphEditor/babylon.nodeRenderGraphEditor.js`,
|
|
746
|
+
/** Define the Url to load snippets */
|
|
747
|
+
_a.SnippetUrl = `https://snippet.babylonjs.com`,
|
|
748
|
+
/** Description of custom blocks to use in the node render graph editor */
|
|
749
|
+
_a.CustomBlockDescriptions = [],
|
|
750
|
+
_a;
|
|
751
|
+
})();
|
|
752
|
+
export { NodeRenderGraph };
|
|
731
753
|
//# sourceMappingURL=nodeRenderGraph.js.map
|