@babylonjs/core 5.0.0-alpha.55 → 5.0.0-alpha.59
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Bones/boneIKController.d.ts +1 -2
- package/Bones/boneIKController.js +12 -37
- package/Bones/boneIKController.js.map +1 -1
- package/Buffers/buffer.js +3 -2
- package/Buffers/buffer.js.map +1 -1
- package/Cameras/Inputs/BaseCameraPointersInput.d.ts +0 -1
- package/Cameras/Inputs/BaseCameraPointersInput.js +5 -5
- package/Cameras/Inputs/BaseCameraPointersInput.js.map +1 -1
- package/Cameras/Inputs/freeCameraMouseInput.d.ts +0 -1
- package/Cameras/Inputs/freeCameraMouseInput.js +27 -28
- package/Cameras/Inputs/freeCameraMouseInput.js.map +1 -1
- package/Cameras/camera.d.ts +4 -0
- package/Cameras/camera.js +2 -0
- package/Cameras/camera.js.map +1 -1
- package/Culling/boundingBox.d.ts +7 -1
- package/Culling/boundingBox.js +4 -0
- package/Culling/boundingBox.js.map +1 -1
- package/DeviceInput/Helpers/eventFactory.js +1 -2
- package/DeviceInput/Helpers/eventFactory.js.map +1 -1
- package/DeviceInput/Implementations/webDeviceInputSystem.d.ts +1 -0
- package/DeviceInput/Implementations/webDeviceInputSystem.js +5 -12
- package/DeviceInput/Implementations/webDeviceInputSystem.js.map +1 -1
- package/DeviceInput/InputDevices/deviceEnums.d.ts +1 -3
- package/DeviceInput/InputDevices/deviceEnums.js +0 -2
- package/DeviceInput/InputDevices/deviceEnums.js.map +1 -1
- package/Engines/Extensions/engine.alpha.js +11 -6
- package/Engines/Extensions/engine.alpha.js.map +1 -1
- package/Engines/Extensions/engine.cubeTexture.d.ts +1 -1
- package/Engines/Extensions/engine.cubeTexture.js.map +1 -1
- package/Engines/Extensions/engine.multiRender.d.ts +2 -2
- package/Engines/Extensions/engine.multiRender.js.map +1 -1
- package/Engines/Extensions/engine.renderTarget.d.ts +7 -15
- package/Engines/Extensions/engine.renderTarget.js +6 -63
- package/Engines/Extensions/engine.renderTarget.js.map +1 -1
- package/Engines/Extensions/engine.renderTargetCube.d.ts +1 -1
- package/Engines/Extensions/engine.renderTargetCube.js.map +1 -1
- package/Engines/IDrawContext.d.ts +4 -0
- package/Engines/IDrawContext.js.map +1 -1
- package/Engines/IMaterialContext.d.ts +1 -0
- package/Engines/IMaterialContext.js.map +1 -1
- package/Engines/WebGL/webGLRenderTargetWrapper.d.ts +24 -2
- package/Engines/WebGL/webGLRenderTargetWrapper.js +53 -0
- package/Engines/WebGL/webGLRenderTargetWrapper.js.map +1 -1
- package/Engines/WebGPU/Extensions/engine.alpha.js +20 -31
- package/Engines/WebGPU/Extensions/engine.alpha.js.map +1 -1
- package/Engines/WebGPU/Extensions/engine.cubeTexture.js.map +1 -1
- package/Engines/WebGPU/Extensions/engine.multiRender.js.map +1 -1
- package/Engines/WebGPU/Extensions/engine.renderTarget.js +2 -40
- package/Engines/WebGPU/Extensions/engine.renderTarget.js.map +1 -1
- package/Engines/WebGPU/Extensions/engine.renderTargetCube.js.map +1 -1
- package/Engines/WebGPU/Extensions/engine.storageBuffer.js +1 -1
- package/Engines/WebGPU/Extensions/engine.storageBuffer.js.map +1 -1
- package/Engines/WebGPU/Extensions/engine.uniformBuffer.js +1 -1
- package/Engines/WebGPU/Extensions/engine.uniformBuffer.js.map +1 -1
- package/Engines/WebGPU/webgpuBufferManager.d.ts +1 -0
- package/Engines/WebGPU/webgpuBufferManager.js +3 -0
- package/Engines/WebGPU/webgpuBufferManager.js.map +1 -1
- package/Engines/WebGPU/webgpuCacheBindGroups.d.ts +3 -2
- package/Engines/WebGPU/webgpuCacheBindGroups.js +15 -14
- package/Engines/WebGPU/webgpuCacheBindGroups.js.map +1 -1
- package/Engines/WebGPU/webgpuCacheRenderPipeline.js +18 -18
- package/Engines/WebGPU/webgpuCacheRenderPipeline.js.map +1 -1
- package/Engines/WebGPU/webgpuCacheRenderPipelineTree.d.ts +2 -0
- package/Engines/WebGPU/webgpuCacheRenderPipelineTree.js +17 -0
- package/Engines/WebGPU/webgpuCacheRenderPipelineTree.js.map +1 -1
- package/Engines/WebGPU/webgpuDrawContext.d.ts +24 -2
- package/Engines/WebGPU/webgpuDrawContext.js +75 -1
- package/Engines/WebGPU/webgpuDrawContext.js.map +1 -1
- package/Engines/WebGPU/webgpuMaterialContext.d.ts +1 -6
- package/Engines/WebGPU/webgpuMaterialContext.js +11 -8
- package/Engines/WebGPU/webgpuMaterialContext.js.map +1 -1
- package/Engines/WebGPU/webgpuShaderProcessor.d.ts +1 -0
- package/Engines/WebGPU/webgpuShaderProcessor.js +2 -1
- package/Engines/WebGPU/webgpuShaderProcessor.js.map +1 -1
- package/Engines/WebGPU/webgpuTextureHelper.d.ts +1 -0
- package/Engines/WebGPU/webgpuTextureHelper.js +67 -1
- package/Engines/WebGPU/webgpuTextureHelper.js.map +1 -1
- package/Engines/constants.d.ts +46 -8
- package/Engines/constants.js +46 -8
- package/Engines/constants.js.map +1 -1
- package/Engines/engine.d.ts +37 -2
- package/Engines/engine.js +68 -0
- package/Engines/engine.js.map +1 -1
- package/Engines/engineFeatures.d.ts +2 -0
- package/Engines/engineFeatures.js.map +1 -1
- package/Engines/nativeEngine.d.ts +3 -5
- package/Engines/nativeEngine.js +2 -2
- package/Engines/nativeEngine.js.map +1 -1
- package/Engines/nullEngine.d.ts +1 -1
- package/Engines/nullEngine.js +2 -2
- package/Engines/nullEngine.js.map +1 -1
- package/Engines/renderTargetWrapper.d.ts +10 -3
- package/Engines/renderTargetWrapper.js +29 -10
- package/Engines/renderTargetWrapper.js.map +1 -1
- package/Engines/thinEngine.d.ts +16 -1
- package/Engines/thinEngine.js +82 -2
- package/Engines/thinEngine.js.map +1 -1
- package/Engines/webgpuEngine.d.ts +28 -7
- package/Engines/webgpuEngine.js +177 -58
- package/Engines/webgpuEngine.js.map +1 -1
- package/Inputs/scene.inputManager.js +2 -3
- package/Inputs/scene.inputManager.js.map +1 -1
- package/Layers/effectLayer.d.ts +0 -2
- package/Layers/effectLayer.js +12 -11
- package/Layers/effectLayer.js.map +1 -1
- package/Layers/effectLayerSceneComponent.js +5 -0
- package/Layers/effectLayerSceneComponent.js.map +1 -1
- package/Layers/glowLayer.js +2 -0
- package/Layers/glowLayer.js.map +1 -1
- package/Layers/highlightLayer.js +2 -0
- package/Layers/highlightLayer.js.map +1 -1
- package/LensFlares/lensFlare.d.ts +3 -0
- package/LensFlares/lensFlare.js +5 -0
- package/LensFlares/lensFlare.js.map +1 -1
- package/LensFlares/lensFlareSystem.d.ts +2 -1
- package/LensFlares/lensFlareSystem.js +15 -12
- package/LensFlares/lensFlareSystem.js.map +1 -1
- package/Lights/Shadows/cascadedShadowGenerator.d.ts +0 -2
- package/Lights/Shadows/cascadedShadowGenerator.js +3 -12
- package/Lights/Shadows/cascadedShadowGenerator.js.map +1 -1
- package/Lights/Shadows/shadowGenerator.d.ts +0 -3
- package/Lights/Shadows/shadowGenerator.js +8 -14
- package/Lights/Shadows/shadowGenerator.js.map +1 -1
- package/Lights/light.js +3 -0
- package/Lights/light.js.map +1 -1
- package/Loading/Plugins/babylonFileLoader.js +3 -0
- package/Loading/Plugins/babylonFileLoader.js.map +1 -1
- package/Materials/Background/backgroundMaterial.js +8 -11
- package/Materials/Background/backgroundMaterial.js.map +1 -1
- package/Materials/Node/Blocks/Dual/lightBlock.js +1 -1
- package/Materials/Node/Blocks/Dual/lightBlock.js.map +1 -1
- package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.js +1 -1
- package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.js.map +1 -1
- package/Materials/Node/Blocks/PBR/reflectionBlock.js +1 -1
- package/Materials/Node/Blocks/PBR/reflectionBlock.js.map +1 -1
- package/Materials/Node/Blocks/cloudBlock.d.ts +49 -0
- package/Materials/Node/Blocks/cloudBlock.js +154 -0
- package/Materials/Node/Blocks/cloudBlock.js.map +1 -0
- package/Materials/Node/Blocks/colorMergerBlock.d.ts +21 -0
- package/Materials/Node/Blocks/colorMergerBlock.js +48 -4
- package/Materials/Node/Blocks/colorMergerBlock.js.map +1 -1
- package/Materials/Node/Blocks/index.d.ts +1 -0
- package/Materials/Node/Blocks/index.js +1 -0
- package/Materials/Node/Blocks/index.js.map +1 -1
- package/Materials/Node/Blocks/vectorMergerBlock.d.ts +25 -0
- package/Materials/Node/Blocks/vectorMergerBlock.js +93 -23
- package/Materials/Node/Blocks/vectorMergerBlock.js.map +1 -1
- package/Materials/Node/nodeMaterial.js +17 -7
- package/Materials/Node/nodeMaterial.js.map +1 -1
- package/Materials/Node/nodeMaterialBuildStateSharedData.d.ts +5 -1
- package/Materials/Node/nodeMaterialBuildStateSharedData.js +5 -1
- package/Materials/Node/nodeMaterialBuildStateSharedData.js.map +1 -1
- package/Materials/Node/nodeMaterialDecorator.d.ts +4 -2
- package/Materials/Node/nodeMaterialDecorator.js +4 -2
- package/Materials/Node/nodeMaterialDecorator.js.map +1 -1
- package/Materials/PBR/pbrBaseMaterial.d.ts +4 -2
- package/Materials/PBR/pbrBaseMaterial.js +23 -9
- package/Materials/PBR/pbrBaseMaterial.js.map +1 -1
- package/Materials/PBR/pbrClearCoatConfiguration.js +1 -1
- package/Materials/PBR/pbrClearCoatConfiguration.js.map +1 -1
- package/Materials/PBR/pbrSheenConfiguration.js +1 -1
- package/Materials/PBR/pbrSheenConfiguration.js.map +1 -1
- package/Materials/PBR/pbrSubSurfaceConfiguration.js +1 -1
- package/Materials/PBR/pbrSubSurfaceConfiguration.js.map +1 -1
- package/Materials/Textures/Procedurals/proceduralTexture.d.ts +3 -3
- package/Materials/Textures/Procedurals/proceduralTexture.js.map +1 -1
- package/Materials/Textures/baseTexture.d.ts +2 -0
- package/Materials/Textures/baseTexture.js +2 -0
- package/Materials/Textures/baseTexture.js.map +1 -1
- package/Materials/Textures/multiRenderTarget.d.ts +6 -4
- package/Materials/Textures/multiRenderTarget.js +28 -12
- package/Materials/Textures/multiRenderTarget.js.map +1 -1
- package/Materials/Textures/renderTargetTexture.d.ts +29 -3
- package/Materials/Textures/renderTargetTexture.js +127 -14
- package/Materials/Textures/renderTargetTexture.js.map +1 -1
- package/Materials/Textures/texture.js +11 -4
- package/Materials/Textures/texture.js.map +1 -1
- package/Materials/Textures/textureCreationOptions.d.ts +57 -0
- package/Materials/Textures/textureCreationOptions.js +2 -0
- package/Materials/Textures/textureCreationOptions.js.map +1 -0
- package/Materials/Textures/thinRenderTargetTexture.d.ts +3 -4
- package/Materials/Textures/thinRenderTargetTexture.js.map +1 -1
- package/Materials/Textures/videoTexture.d.ts +10 -7
- package/Materials/Textures/videoTexture.js +17 -11
- package/Materials/Textures/videoTexture.js.map +1 -1
- package/Materials/drawWrapper.d.ts +2 -1
- package/Materials/drawWrapper.js +10 -1
- package/Materials/drawWrapper.js.map +1 -1
- package/Materials/effectRenderer.js +1 -1
- package/Materials/effectRenderer.js.map +1 -1
- package/Materials/material.d.ts +3 -1
- package/Materials/material.detailMapConfiguration.d.ts +1 -1
- package/Materials/material.detailMapConfiguration.js +2 -2
- package/Materials/material.detailMapConfiguration.js.map +1 -1
- package/Materials/material.js +18 -9
- package/Materials/material.js.map +1 -1
- package/Materials/materialHelper.d.ts +7 -0
- package/Materials/materialHelper.js +17 -2
- package/Materials/materialHelper.js.map +1 -1
- package/Materials/pushMaterial.js +1 -1
- package/Materials/pushMaterial.js.map +1 -1
- package/Materials/shaderMaterial.d.ts +1 -1
- package/Materials/shaderMaterial.js +5 -5
- package/Materials/shaderMaterial.js.map +1 -1
- package/Materials/shadowDepthWrapper.d.ts +4 -4
- package/Materials/shadowDepthWrapper.js +16 -15
- package/Materials/shadowDepthWrapper.js.map +1 -1
- package/Materials/standardMaterial.d.ts +4 -2
- package/Materials/standardMaterial.js +23 -9
- package/Materials/standardMaterial.js.map +1 -1
- package/Materials/uniformBuffer.d.ts +10 -2
- package/Materials/uniformBuffer.js +17 -11
- package/Materials/uniformBuffer.js.map +1 -1
- package/Meshes/Builders/capsuleBuilder.d.ts +5 -5
- package/Meshes/Builders/capsuleBuilder.js.map +1 -1
- package/Meshes/abstractMesh.d.ts +13 -0
- package/Meshes/abstractMesh.js +22 -2
- package/Meshes/abstractMesh.js.map +1 -1
- package/Meshes/buffer.d.ts +5 -0
- package/Meshes/buffer.js +6 -0
- package/Meshes/buffer.js.map +1 -0
- package/Meshes/geometry.d.ts +7 -0
- package/Meshes/geometry.js +16 -0
- package/Meshes/geometry.js.map +1 -1
- package/Meshes/linesMesh.js +1 -1
- package/Meshes/linesMesh.js.map +1 -1
- package/Meshes/mesh.js +16 -1
- package/Meshes/mesh.js.map +1 -1
- package/Meshes/mesh.lts.d.ts +5 -1
- package/Meshes/mesh.lts.js +1 -2
- package/Meshes/mesh.lts.js.map +1 -1
- package/Meshes/subMesh.d.ts +10 -9
- package/Meshes/subMesh.js +44 -43
- package/Meshes/subMesh.js.map +1 -1
- package/Misc/environmentTextureTools.js +1 -0
- package/Misc/environmentTextureTools.js.map +1 -1
- package/Misc/fileTools.d.ts +1 -3
- package/Misc/fileTools.js +12 -13
- package/Misc/fileTools.js.map +1 -1
- package/Misc/fileTools.lts.d.ts +16 -1
- package/Misc/fileTools.lts.js +1 -2
- package/Misc/fileTools.lts.js.map +1 -1
- package/Misc/rgbdTextureTools.js +1 -0
- package/Misc/rgbdTextureTools.js.map +1 -1
- package/Misc/sceneSerializer.js +17 -17
- package/Misc/sceneSerializer.js.map +1 -1
- package/Misc/textureTools.js +2 -0
- package/Misc/textureTools.js.map +1 -1
- package/Particles/gpuParticleSystem.d.ts +5 -1
- package/Particles/gpuParticleSystem.js +31 -5
- package/Particles/gpuParticleSystem.js.map +1 -1
- package/Particles/particleSystem.d.ts +5 -1
- package/Particles/particleSystem.js +35 -5
- package/Particles/particleSystem.js.map +1 -1
- package/Physics/Plugins/ammoJSPlugin.d.ts +1 -0
- package/Physics/Plugins/ammoJSPlugin.js +10 -0
- package/Physics/Plugins/ammoJSPlugin.js.map +1 -1
- package/PostProcesses/RenderPipeline/Pipelines/lensRenderingPipeline.js +2 -0
- package/PostProcesses/RenderPipeline/Pipelines/lensRenderingPipeline.js.map +1 -1
- package/PostProcesses/RenderPipeline/Pipelines/ssaoRenderingPipeline.js +1 -0
- package/PostProcesses/RenderPipeline/Pipelines/ssaoRenderingPipeline.js.map +1 -1
- package/PostProcesses/RenderPipeline/Pipelines/standardRenderingPipeline.js +1 -0
- package/PostProcesses/RenderPipeline/Pipelines/standardRenderingPipeline.js.map +1 -1
- package/PostProcesses/bloomMergePostProcess.js +1 -0
- package/PostProcesses/bloomMergePostProcess.js.map +1 -1
- package/PostProcesses/depthOfFieldBlurPostProcess.js +1 -0
- package/PostProcesses/depthOfFieldBlurPostProcess.js.map +1 -1
- package/PostProcesses/depthOfFieldMergePostProcess.js +1 -0
- package/PostProcesses/depthOfFieldMergePostProcess.js.map +1 -1
- package/PostProcesses/extractHighlightsPostProcess.js +1 -0
- package/PostProcesses/extractHighlightsPostProcess.js.map +1 -1
- package/PostProcesses/postProcess.d.ts +6 -0
- package/PostProcesses/postProcess.js +9 -1
- package/PostProcesses/postProcess.js.map +1 -1
- package/PostProcesses/screenSpaceReflectionPostProcess.js +2 -2
- package/PostProcesses/screenSpaceReflectionPostProcess.js.map +1 -1
- package/PostProcesses/tonemapPostProcess.d.ts +2 -1
- package/PostProcesses/tonemapPostProcess.js +3 -2
- package/PostProcesses/tonemapPostProcess.js.map +1 -1
- package/Rendering/boundingBoxRenderer.d.ts +5 -3
- package/Rendering/boundingBoxRenderer.js +46 -14
- package/Rendering/boundingBoxRenderer.js.map +1 -1
- package/Rendering/depthPeelingRenderer.d.ts +85 -0
- package/Rendering/depthPeelingRenderer.js +390 -0
- package/Rendering/depthPeelingRenderer.js.map +1 -0
- package/Rendering/depthPeelingSceneComponent.d.ts +51 -0
- package/Rendering/depthPeelingSceneComponent.js +73 -0
- package/Rendering/depthPeelingSceneComponent.js.map +1 -0
- package/Rendering/depthRenderer.d.ts +9 -2
- package/Rendering/depthRenderer.js +77 -43
- package/Rendering/depthRenderer.js.map +1 -1
- package/Rendering/depthRendererSceneComponent.js +0 -1
- package/Rendering/depthRendererSceneComponent.js.map +1 -1
- package/Rendering/edgesRenderer.d.ts +2 -0
- package/Rendering/edgesRenderer.js +11 -0
- package/Rendering/edgesRenderer.js.map +1 -1
- package/Rendering/geometryBufferRenderer.js +4 -4
- package/Rendering/geometryBufferRenderer.js.map +1 -1
- package/Rendering/index.d.ts +2 -0
- package/Rendering/index.js +2 -0
- package/Rendering/index.js.map +1 -1
- package/Rendering/outlineRenderer.d.ts +5 -4
- package/Rendering/outlineRenderer.js +24 -19
- package/Rendering/outlineRenderer.js.map +1 -1
- package/Rendering/prePassRenderer.js +7 -2
- package/Rendering/prePassRenderer.js.map +1 -1
- package/Rendering/renderingGroup.js +7 -2
- package/Rendering/renderingGroup.js.map +1 -1
- package/Shaders/ShadersInclude/boundingBoxRendererFragmentDeclaration.d.ts +5 -0
- package/Shaders/ShadersInclude/boundingBoxRendererFragmentDeclaration.js +7 -0
- package/Shaders/ShadersInclude/boundingBoxRendererFragmentDeclaration.js.map +1 -0
- package/Shaders/ShadersInclude/boundingBoxRendererUboDeclaration.d.ts +5 -0
- package/Shaders/ShadersInclude/boundingBoxRendererUboDeclaration.js +7 -0
- package/Shaders/ShadersInclude/boundingBoxRendererUboDeclaration.js.map +1 -0
- package/Shaders/ShadersInclude/boundingBoxRendererVertexDeclaration.d.ts +5 -0
- package/Shaders/ShadersInclude/boundingBoxRendererVertexDeclaration.js +7 -0
- package/Shaders/ShadersInclude/boundingBoxRendererVertexDeclaration.js.map +1 -0
- package/Shaders/ShadersInclude/oitDeclaration.d.ts +5 -0
- package/Shaders/ShadersInclude/oitDeclaration.js +7 -0
- package/Shaders/ShadersInclude/oitDeclaration.js.map +1 -0
- package/Shaders/ShadersInclude/oitFragment.d.ts +5 -0
- package/Shaders/ShadersInclude/oitFragment.js +7 -0
- package/Shaders/ShadersInclude/oitFragment.js.map +1 -0
- package/Shaders/boundingBoxRenderer.fragment.d.ts +7 -0
- package/Shaders/boundingBoxRenderer.fragment.js +9 -0
- package/Shaders/boundingBoxRenderer.fragment.js.map +1 -0
- package/Shaders/boundingBoxRenderer.vertex.d.ts +7 -0
- package/Shaders/boundingBoxRenderer.vertex.js +9 -0
- package/Shaders/boundingBoxRenderer.vertex.js.map +1 -0
- package/Shaders/default.fragment.d.ts +2 -0
- package/Shaders/default.fragment.js +3 -1
- package/Shaders/default.fragment.js.map +1 -1
- package/Shaders/oitBackBlend.fragment.d.ts +5 -0
- package/Shaders/oitBackBlend.fragment.js +7 -0
- package/Shaders/oitBackBlend.fragment.js.map +1 -0
- package/Shaders/oitFinal.fragment.d.ts +5 -0
- package/Shaders/oitFinal.fragment.js +7 -0
- package/Shaders/oitFinal.fragment.js.map +1 -0
- package/Shaders/pbr.fragment.d.ts +2 -0
- package/Shaders/pbr.fragment.js +3 -1
- package/Shaders/pbr.fragment.js.map +1 -1
- package/Shaders/screenSpaceReflection.fragment.js +1 -1
- package/Shaders/screenSpaceReflection.fragment.js.map +1 -1
- package/Sprites/spriteManager.d.ts +3 -1
- package/Sprites/spriteManager.js +16 -5
- package/Sprites/spriteManager.js.map +1 -1
- package/Sprites/spriteRenderer.d.ts +1 -0
- package/Sprites/spriteRenderer.js +14 -0
- package/Sprites/spriteRenderer.js.map +1 -1
- package/States/alphaCullingState.js +1 -1
- package/States/alphaCullingState.js.map +1 -1
- package/XR/features/WebXRControllerPointerSelection.d.ts +4 -0
- package/XR/features/WebXRControllerPointerSelection.js +23 -1
- package/XR/features/WebXRControllerPointerSelection.js.map +1 -1
- package/XR/features/WebXRNearInteraction.d.ts +5 -4
- package/XR/features/WebXRNearInteraction.js +15 -13
- package/XR/features/WebXRNearInteraction.js.map +1 -1
- package/XR/features/WebXRWalkingLocomotion.js +28 -13
- package/XR/features/WebXRWalkingLocomotion.js.map +1 -1
- package/XR/webXRSessionManager.js +1 -3
- package/XR/webXRSessionManager.js.map +1 -1
- package/package.json +43 -7
- package/scene.d.ts +18 -4
- package/scene.js +101 -42
- package/scene.js.map +1 -1
- package/scene.lts.d.ts +6 -1
- package/scene.lts.js +1 -2
- package/scene.lts.js.map +1 -1
- package/sceneComponent.d.ts +1 -0
- package/sceneComponent.js +1 -0
- package/sceneComponent.js.map +1 -1
- package/Engines/depthTextureCreationOptions.d.ts +0 -17
- package/Engines/depthTextureCreationOptions.js +0 -10
- package/Engines/depthTextureCreationOptions.js.map +0 -1
- package/Materials/Textures/renderTargetCreationOptions.d.ts +0 -27
- package/Materials/Textures/renderTargetCreationOptions.js +0 -10
- package/Materials/Textures/renderTargetCreationOptions.js.map +0 -1
|
@@ -86,18 +86,18 @@ var ShadowDepthWrapper = /** @class */ (function () {
|
|
|
86
86
|
* Gets the effect to use to generate the depth map
|
|
87
87
|
* @param subMesh subMesh to get the effect for
|
|
88
88
|
* @param shadowGenerator shadow generator to get the effect for
|
|
89
|
-
* @param
|
|
89
|
+
* @param passIdForDrawWrapper Id of the pass for which the effect from the draw wrapper must be retrieved from
|
|
90
90
|
* @returns the effect to use to generate the depth map for the subMesh + shadow generator specified
|
|
91
91
|
*/
|
|
92
|
-
ShadowDepthWrapper.prototype.getEffect = function (subMesh, shadowGenerator,
|
|
92
|
+
ShadowDepthWrapper.prototype.getEffect = function (subMesh, shadowGenerator, passIdForDrawWrapper) {
|
|
93
93
|
var _a;
|
|
94
94
|
var entry = (_a = this._subMeshToDepthWrapper.mm.get(subMesh)) === null || _a === void 0 ? void 0 : _a.get(shadowGenerator);
|
|
95
95
|
if (!entry) {
|
|
96
96
|
return null;
|
|
97
97
|
}
|
|
98
|
-
var drawWrapper = entry.drawWrapper[
|
|
98
|
+
var drawWrapper = entry.drawWrapper[passIdForDrawWrapper];
|
|
99
99
|
if (!drawWrapper) {
|
|
100
|
-
drawWrapper = entry.drawWrapper[
|
|
100
|
+
drawWrapper = entry.drawWrapper[passIdForDrawWrapper] = new DrawWrapper(this._scene.getEngine());
|
|
101
101
|
drawWrapper.setEffect(entry.mainDrawWrapper.effect, entry.mainDrawWrapper.defines);
|
|
102
102
|
}
|
|
103
103
|
return drawWrapper;
|
|
@@ -108,10 +108,10 @@ var ShadowDepthWrapper = /** @class */ (function () {
|
|
|
108
108
|
* @param defines the list of defines to take into account when checking the effect
|
|
109
109
|
* @param shadowGenerator combined with subMesh, it defines the effect to check
|
|
110
110
|
* @param useInstances specifies that instances should be used
|
|
111
|
-
* @param
|
|
111
|
+
* @param passIdForDrawWrapper Id of the pass for which the draw wrapper should be created
|
|
112
112
|
* @returns a boolean indicating that the submesh is ready or not
|
|
113
113
|
*/
|
|
114
|
-
ShadowDepthWrapper.prototype.isReadyForSubMesh = function (subMesh, defines, shadowGenerator, useInstances,
|
|
114
|
+
ShadowDepthWrapper.prototype.isReadyForSubMesh = function (subMesh, defines, shadowGenerator, useInstances, passIdForDrawWrapper) {
|
|
115
115
|
var _a, _b;
|
|
116
116
|
if (this.standalone) {
|
|
117
117
|
// will ensure the effect is (re)created for the base material
|
|
@@ -119,7 +119,7 @@ var ShadowDepthWrapper = /** @class */ (function () {
|
|
|
119
119
|
return false;
|
|
120
120
|
}
|
|
121
121
|
}
|
|
122
|
-
return (_b = (_a = this._makeEffect(subMesh, defines, shadowGenerator,
|
|
122
|
+
return (_b = (_a = this._makeEffect(subMesh, defines, shadowGenerator, passIdForDrawWrapper)) === null || _a === void 0 ? void 0 : _a.isReady()) !== null && _b !== void 0 ? _b : false;
|
|
123
123
|
};
|
|
124
124
|
/**
|
|
125
125
|
* Disposes the resources
|
|
@@ -133,8 +133,8 @@ var ShadowDepthWrapper = /** @class */ (function () {
|
|
|
133
133
|
mesh.onDisposeObservable.remove(observer);
|
|
134
134
|
}
|
|
135
135
|
};
|
|
136
|
-
ShadowDepthWrapper.prototype._makeEffect = function (subMesh, defines, shadowGenerator,
|
|
137
|
-
var _a;
|
|
136
|
+
ShadowDepthWrapper.prototype._makeEffect = function (subMesh, defines, shadowGenerator, passIdForDrawWrapper) {
|
|
137
|
+
var _a, _b, _c, _d, _e, _f, _g, _h;
|
|
138
138
|
var engine = this._scene.getEngine();
|
|
139
139
|
var origEffect = this._subMeshToEffect.get(subMesh);
|
|
140
140
|
if (!origEffect) {
|
|
@@ -143,14 +143,15 @@ var ShadowDepthWrapper = /** @class */ (function () {
|
|
|
143
143
|
var params = this._subMeshToDepthWrapper.get(subMesh, shadowGenerator);
|
|
144
144
|
if (!params) {
|
|
145
145
|
var mainDrawWrapper = new DrawWrapper(engine);
|
|
146
|
-
|
|
146
|
+
var renderPassId = (_e = (_c = (_b = (_a = this._scene.activeCameras) === null || _a === void 0 ? void 0 : _a[0]) === null || _b === void 0 ? void 0 : _b.renderPassId) !== null && _c !== void 0 ? _c : (_d = this._scene.activeCamera) === null || _d === void 0 ? void 0 : _d.renderPassId) !== null && _e !== void 0 ? _e : 0;
|
|
147
|
+
mainDrawWrapper.defines = (_g = (_f = subMesh._getDrawWrapper(renderPassId)) === null || _f === void 0 ? void 0 : _f.defines) !== null && _g !== void 0 ? _g : null;
|
|
147
148
|
params = {
|
|
148
|
-
drawWrapper:
|
|
149
|
+
drawWrapper: [],
|
|
149
150
|
mainDrawWrapper: mainDrawWrapper,
|
|
150
151
|
depthDefines: "",
|
|
151
152
|
token: RandomGUID()
|
|
152
153
|
};
|
|
153
|
-
params.drawWrapper[
|
|
154
|
+
params.drawWrapper[passIdForDrawWrapper] = mainDrawWrapper;
|
|
154
155
|
this._subMeshToDepthWrapper.set(subMesh, shadowGenerator, params);
|
|
155
156
|
}
|
|
156
157
|
var join = defines.join("\n");
|
|
@@ -210,9 +211,9 @@ var ShadowDepthWrapper = /** @class */ (function () {
|
|
|
210
211
|
defines: join + "\n" + origEffect.defines.replace("#define SHADOWS", "").replace(/#define SHADOW\d/g, ""),
|
|
211
212
|
indexParameters: origEffect.getIndexParameters(),
|
|
212
213
|
}, engine);
|
|
213
|
-
for (var
|
|
214
|
-
if (
|
|
215
|
-
(
|
|
214
|
+
for (var id = 0; id < params.drawWrapper.length; ++id) {
|
|
215
|
+
if (id !== passIdForDrawWrapper) {
|
|
216
|
+
(_h = params.drawWrapper[id]) === null || _h === void 0 ? void 0 : _h.setEffect(params.mainDrawWrapper.effect, params.mainDrawWrapper.defines);
|
|
216
217
|
}
|
|
217
218
|
}
|
|
218
219
|
return params.mainDrawWrapper.effect;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shadowDepthWrapper.js","sourceRoot":"","sources":["../../../sourceES6/core/Materials/shadowDepthWrapper.ts"],"names":[],"mappings":"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","sourcesContent":["import { Observer } from \"../Misc/observable\";\r\nimport { Nullable } from \"../types\";\r\nimport { Scene } from \"../scene\";\r\nimport { SubMesh } from \"../Meshes/subMesh\";\r\nimport { Material } from \"./material\";\r\nimport { Effect, IEffectCreationOptions } from './effect';\r\nimport { AbstractMesh } from '../Meshes/abstractMesh';\r\nimport { Node } from '../node';\r\nimport { ShadowGenerator } from '../Lights/Shadows/shadowGenerator';\r\nimport { RandomGUID } from '../Misc/guid';\r\nimport { DrawWrapper } from \"./drawWrapper\";\r\nimport { Engine } from \"../Engines/engine\";\r\n\r\n/**\r\n * Options to be used when creating a shadow depth material\r\n */\r\nexport interface IIOptionShadowDepthMaterial {\r\n /** Variables in the vertex shader code that need to have their names remapped.\r\n * The format is: [\"var_name\", \"var_remapped_name\", \"var_name\", \"var_remapped_name\", ...]\r\n * \"var_name\" should be either: worldPos or vNormalW\r\n * So, if the variable holding the world position in your vertex shader is not named worldPos, you must tell the system\r\n * the name to use instead by using: [\"worldPos\", \"myWorldPosVar\"] assuming the variable is named myWorldPosVar in your code.\r\n * If the normal must also be remapped: [\"worldPos\", \"myWorldPosVar\", \"vNormalW\", \"myWorldNormal\"]\r\n */\r\n remappedVariables?: string[];\r\n\r\n /** Set standalone to true if the base material wrapped by ShadowDepthMaterial is not used for a regular object but for depth shadow generation only */\r\n standalone?: boolean;\r\n}\r\n\r\nclass MapMap<Ka, Kb, V> {\r\n readonly mm = new Map<Ka, Map<Kb, V>>();\r\n\r\n get(a: Ka, b: Kb): V | undefined {\r\n const m = this.mm.get(a);\r\n if (m !== undefined) {\r\n return m.get(b);\r\n }\r\n return undefined;\r\n }\r\n\r\n set(a: Ka, b: Kb, v: V): void {\r\n let m = this.mm.get(a);\r\n if (m === undefined) {\r\n this.mm.set(a, (m = new Map()));\r\n }\r\n m.set(b, v);\r\n }\r\n}\r\n\r\n/**\r\n * Class that can be used to wrap a base material to generate accurate shadows when using custom vertex/fragment code in the base material\r\n */\r\nexport class ShadowDepthWrapper {\r\n\r\n private _scene: Scene;\r\n private _options?: IIOptionShadowDepthMaterial;\r\n private _baseMaterial: Material;\r\n private _onEffectCreatedObserver: Nullable<Observer<{ effect: Effect, subMesh: Nullable<SubMesh> }>>;\r\n private _subMeshToEffect: Map<Nullable<SubMesh>, Effect>;\r\n private _subMeshToDepthWrapper: MapMap<Nullable<SubMesh>, ShadowGenerator, { drawWrapper: { [name: string]: Nullable<DrawWrapper> }, mainDrawWrapper: DrawWrapper, depthDefines: string, token: string }>; // key is (subMesh + shadowGenerator)\r\n private _meshes: Map<AbstractMesh, Nullable<Observer<Node>>>;\r\n\r\n /** Gets the standalone status of the wrapper */\r\n public get standalone(): boolean {\r\n return this._options?.standalone ?? false;\r\n }\r\n\r\n /** Gets the base material the wrapper is built upon */\r\n public get baseMaterial(): Material {\r\n return this._baseMaterial;\r\n }\r\n\r\n /**\r\n * Instantiate a new shadow depth wrapper.\r\n * It works by injecting some specific code in the vertex/fragment shaders of the base material and is used by a shadow generator to\r\n * generate the shadow depth map. For more information, please refer to the documentation:\r\n * https://doc.babylonjs.com/babylon101/shadows\r\n * @param baseMaterial Material to wrap\r\n * @param scene Define the scene the material belongs to\r\n * @param options Options used to create the wrapper\r\n */\r\n constructor(baseMaterial: Material, scene: Scene, options?: IIOptionShadowDepthMaterial) {\r\n this._baseMaterial = baseMaterial;\r\n this._scene = scene ?? Engine.LastCreatedScene;\r\n this._options = options;\r\n\r\n this._subMeshToEffect = new Map();\r\n this._subMeshToDepthWrapper = new MapMap();\r\n this._meshes = new Map();\r\n\r\n // Register for onEffectCreated to store the effect of the base material when it is (re)generated. This effect will be used\r\n // to create the depth effect later on\r\n this._onEffectCreatedObserver = this._baseMaterial.onEffectCreatedObservable.add((params: { effect: Effect, subMesh: Nullable<SubMesh> }) => {\r\n const mesh = params.subMesh?.getMesh();\r\n\r\n if (mesh && !this._meshes.has(mesh)) {\r\n // Register for mesh onDispose to clean up our internal maps when a mesh is disposed\r\n this._meshes.set(mesh,\r\n mesh.onDisposeObservable.add((mesh: Node) => {\r\n const iterator = this._subMeshToEffect.keys();\r\n for (let key = iterator.next(); key.done !== true; key = iterator.next()) {\r\n const subMesh = key.value;\r\n if (subMesh?.getMesh() === mesh as AbstractMesh) {\r\n this._subMeshToEffect.delete(subMesh);\r\n this._subMeshToDepthWrapper.mm.delete(subMesh);\r\n }\r\n }\r\n })\r\n );\r\n }\r\n\r\n this._subMeshToEffect.set(params.subMesh, params.effect);\r\n this._subMeshToDepthWrapper.mm.delete(params.subMesh); // trigger a depth effect recreation\r\n });\r\n }\r\n\r\n /**\r\n * Gets the effect to use to generate the depth map\r\n * @param subMesh subMesh to get the effect for\r\n * @param shadowGenerator shadow generator to get the effect for\r\n * @param nameForDrawWrapper Name of the draw wrapper to retrieve the effect from\r\n * @returns the effect to use to generate the depth map for the subMesh + shadow generator specified\r\n */\r\n public getEffect(subMesh: Nullable<SubMesh>, shadowGenerator: ShadowGenerator, nameForDrawWrapper: string): Nullable<DrawWrapper> {\r\n const entry = this._subMeshToDepthWrapper.mm.get(subMesh)?.get(shadowGenerator);\r\n if (!entry) {\r\n return null;\r\n }\r\n let drawWrapper = entry.drawWrapper[nameForDrawWrapper];\r\n if (!drawWrapper) {\r\n drawWrapper = entry.drawWrapper[nameForDrawWrapper] = new DrawWrapper(this._scene.getEngine());\r\n drawWrapper.setEffect(entry.mainDrawWrapper.effect, entry.mainDrawWrapper.defines);\r\n }\r\n\r\n return drawWrapper;\r\n }\r\n\r\n /**\r\n * Specifies that the submesh is ready to be used for depth rendering\r\n * @param subMesh submesh to check\r\n * @param defines the list of defines to take into account when checking the effect\r\n * @param shadowGenerator combined with subMesh, it defines the effect to check\r\n * @param useInstances specifies that instances should be used\r\n * @param nameForDrawWrapper Name to use to create the draw wrapper\r\n * @returns a boolean indicating that the submesh is ready or not\r\n */\r\n public isReadyForSubMesh(subMesh: SubMesh, defines: string[], shadowGenerator: ShadowGenerator, useInstances: boolean, nameForDrawWrapper: string): boolean {\r\n if (this.standalone) {\r\n // will ensure the effect is (re)created for the base material\r\n if (!this._baseMaterial.isReadyForSubMesh(subMesh.getMesh(), subMesh, useInstances)) {\r\n return false;\r\n }\r\n }\r\n\r\n return this._makeEffect(subMesh, defines, shadowGenerator, nameForDrawWrapper)?.isReady() ?? false;\r\n }\r\n\r\n /**\r\n * Disposes the resources\r\n */\r\n public dispose(): void {\r\n this._baseMaterial.onEffectCreatedObservable.remove(this._onEffectCreatedObserver);\r\n this._onEffectCreatedObserver = null;\r\n\r\n const iterator = this._meshes.entries();\r\n for (let entry = iterator.next(); entry.done !== true; entry = iterator.next()) {\r\n const [mesh, observer] = entry.value;\r\n\r\n mesh.onDisposeObservable.remove(observer);\r\n }\r\n }\r\n\r\n private _makeEffect(subMesh: SubMesh, defines: string[], shadowGenerator: ShadowGenerator, nameForDrawWrapper: string): Nullable<Effect> {\r\n const engine = this._scene.getEngine();\r\n const origEffect = this._subMeshToEffect.get(subMesh);\r\n\r\n if (!origEffect) {\r\n return null;\r\n }\r\n\r\n let params = this._subMeshToDepthWrapper.get(subMesh, shadowGenerator);\r\n if (!params) {\r\n const mainDrawWrapper = new DrawWrapper(engine);\r\n mainDrawWrapper.defines = subMesh._materialDefines;\r\n\r\n params = {\r\n drawWrapper: {},\r\n mainDrawWrapper,\r\n depthDefines: \"\",\r\n token: RandomGUID()\r\n };\r\n params.drawWrapper[nameForDrawWrapper] = mainDrawWrapper;\r\n this._subMeshToDepthWrapper.set(subMesh, shadowGenerator, params);\r\n }\r\n\r\n let join = defines.join(\"\\n\");\r\n\r\n if (params.mainDrawWrapper.effect) {\r\n if (join === params.depthDefines) {\r\n // we already created the depth effect and it is still up to date for this submesh + shadow generator\r\n return params.mainDrawWrapper.effect;\r\n }\r\n }\r\n\r\n params.depthDefines = join;\r\n\r\n // the depth effect is either out of date or has not been created yet\r\n let vertexCode = origEffect.rawVertexSourceCode,\r\n fragmentCode = origEffect.rawFragmentSourceCode;\r\n\r\n // vertex code\r\n const vertexNormalBiasCode = this._options && this._options.remappedVariables ? `#include<shadowMapVertexNormalBias>(${this._options.remappedVariables.join(\",\")})` : Effect.IncludesShadersStore[\"shadowMapVertexNormalBias\"],\r\n vertexMetricCode = this._options && this._options.remappedVariables ? `#include<shadowMapVertexMetric>(${this._options.remappedVariables.join(\",\")})` : Effect.IncludesShadersStore[\"shadowMapVertexMetric\"],\r\n fragmentSoftTransparentShadow = this._options && this._options.remappedVariables ? `#include<shadowMapFragmentSoftTransparentShadow>(${this._options.remappedVariables.join(\",\")})` : Effect.IncludesShadersStore[\"shadowMapFragmentSoftTransparentShadow\"],\r\n fragmentBlockCode = Effect.IncludesShadersStore[\"shadowMapFragment\"];\r\n\r\n vertexCode = vertexCode.replace(/void\\s+?main/g, Effect.IncludesShadersStore[\"shadowMapVertexExtraDeclaration\"] + \"\\r\\nvoid main\");\r\n vertexCode = vertexCode.replace(/#define SHADOWDEPTH_NORMALBIAS|#define CUSTOM_VERTEX_UPDATE_WORLDPOS/g, vertexNormalBiasCode);\r\n\r\n if (vertexCode.indexOf(\"#define SHADOWDEPTH_METRIC\") !== -1) {\r\n vertexCode = vertexCode.replace(/#define SHADOWDEPTH_METRIC/g, vertexMetricCode);\r\n } else {\r\n vertexCode = vertexCode.replace(/}\\s*$/g, vertexMetricCode + \"\\r\\n}\");\r\n }\r\n vertexCode = vertexCode.replace(/#define SHADER_NAME.*?\\n|out vec4 glFragColor;\\n/g, \"\");\r\n\r\n // fragment code\r\n const hasLocationForSoftTransparentShadow = fragmentCode.indexOf(\"#define SHADOWDEPTH_SOFTTRANSPARENTSHADOW\") >= 0 || fragmentCode.indexOf(\"#define CUSTOM_FRAGMENT_BEFORE_FOG\") >= 0;\r\n const hasLocationForFragment = fragmentCode.indexOf(\"#define SHADOWDEPTH_FRAGMENT\") !== -1;\r\n\r\n let fragmentCodeToInjectAtEnd = \"\";\r\n\r\n if (!hasLocationForSoftTransparentShadow) {\r\n fragmentCodeToInjectAtEnd = fragmentSoftTransparentShadow + \"\\r\\n\";\r\n } else {\r\n fragmentCode = fragmentCode.replace(/#define SHADOWDEPTH_SOFTTRANSPARENTSHADOW|#define CUSTOM_FRAGMENT_BEFORE_FOG/g, fragmentSoftTransparentShadow);\r\n }\r\n\r\n fragmentCode = fragmentCode.replace(/void\\s+?main/g, Effect.IncludesShadersStore[\"shadowMapFragmentExtraDeclaration\"] + \"\\r\\nvoid main\");\r\n\r\n if (hasLocationForFragment) {\r\n fragmentCode = fragmentCode.replace(/#define SHADOWDEPTH_FRAGMENT/g, fragmentBlockCode);\r\n } else {\r\n fragmentCodeToInjectAtEnd += fragmentBlockCode + \"\\r\\n\";\r\n }\r\n if (fragmentCodeToInjectAtEnd) {\r\n fragmentCode = fragmentCode.replace(/}\\s*$/g, fragmentCodeToInjectAtEnd + \"}\");\r\n }\r\n\r\n fragmentCode = fragmentCode.replace(/#define SHADER_NAME.*?\\n|out vec4 glFragColor;\\n/g, \"\");\r\n\r\n const uniforms = origEffect.getUniformNames().slice();\r\n\r\n uniforms.push(\"biasAndScaleSM\", \"depthValuesSM\", \"lightDataSM\", \"softTransparentShadowSM\");\r\n\r\n params.mainDrawWrapper.effect = engine.createEffect({\r\n vertexSource: vertexCode,\r\n fragmentSource: fragmentCode,\r\n vertexToken: params.token,\r\n fragmentToken: params.token,\r\n }, <IEffectCreationOptions>{\r\n attributes: origEffect.getAttributesNames(),\r\n uniformsNames: uniforms,\r\n uniformBuffersNames: origEffect.getUniformBuffersNames(),\r\n samplers: origEffect.getSamplers(),\r\n defines: join + \"\\n\" + origEffect.defines.replace(\"#define SHADOWS\", \"\").replace(/#define SHADOW\\d/g, \"\"),\r\n indexParameters: origEffect.getIndexParameters(),\r\n }, engine);\r\n\r\n for (const name in params.drawWrapper) {\r\n if (name !== nameForDrawWrapper) {\r\n params.drawWrapper[name]?.setEffect(params.mainDrawWrapper.effect, params.mainDrawWrapper.defines);\r\n }\r\n }\r\n return params.mainDrawWrapper.effect;\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"shadowDepthWrapper.js","sourceRoot":"","sources":["../../../sourceES6/core/Materials/shadowDepthWrapper.ts"],"names":[],"mappings":"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","sourcesContent":["import { Observer } from \"../Misc/observable\";\r\nimport { Nullable } from \"../types\";\r\nimport { Scene } from \"../scene\";\r\nimport { SubMesh } from \"../Meshes/subMesh\";\r\nimport { Material } from \"./material\";\r\nimport { Effect, IEffectCreationOptions } from './effect';\r\nimport { AbstractMesh } from '../Meshes/abstractMesh';\r\nimport { Node } from '../node';\r\nimport { ShadowGenerator } from '../Lights/Shadows/shadowGenerator';\r\nimport { RandomGUID } from '../Misc/guid';\r\nimport { DrawWrapper } from \"./drawWrapper\";\r\nimport { Engine } from \"../Engines/engine\";\r\n\r\n\r\n/**\r\n * Options to be used when creating a shadow depth material\r\n */\r\nexport interface IIOptionShadowDepthMaterial {\r\n /** Variables in the vertex shader code that need to have their names remapped.\r\n * The format is: [\"var_name\", \"var_remapped_name\", \"var_name\", \"var_remapped_name\", ...]\r\n * \"var_name\" should be either: worldPos or vNormalW\r\n * So, if the variable holding the world position in your vertex shader is not named worldPos, you must tell the system\r\n * the name to use instead by using: [\"worldPos\", \"myWorldPosVar\"] assuming the variable is named myWorldPosVar in your code.\r\n * If the normal must also be remapped: [\"worldPos\", \"myWorldPosVar\", \"vNormalW\", \"myWorldNormal\"]\r\n */\r\n remappedVariables?: string[];\r\n\r\n /** Set standalone to true if the base material wrapped by ShadowDepthMaterial is not used for a regular object but for depth shadow generation only */\r\n standalone?: boolean;\r\n}\r\n\r\nclass MapMap<Ka, Kb, V> {\r\n readonly mm = new Map<Ka, Map<Kb, V>>();\r\n\r\n get(a: Ka, b: Kb): V | undefined {\r\n const m = this.mm.get(a);\r\n if (m !== undefined) {\r\n return m.get(b);\r\n }\r\n return undefined;\r\n }\r\n\r\n set(a: Ka, b: Kb, v: V): void {\r\n let m = this.mm.get(a);\r\n if (m === undefined) {\r\n this.mm.set(a, (m = new Map()));\r\n }\r\n m.set(b, v);\r\n }\r\n}\r\n\r\n/**\r\n * Class that can be used to wrap a base material to generate accurate shadows when using custom vertex/fragment code in the base material\r\n */\r\nexport class ShadowDepthWrapper {\r\n\r\n private _scene: Scene;\r\n private _options?: IIOptionShadowDepthMaterial;\r\n private _baseMaterial: Material;\r\n private _onEffectCreatedObserver: Nullable<Observer<{ effect: Effect, subMesh: Nullable<SubMesh> }>>;\r\n private _subMeshToEffect: Map<Nullable<SubMesh>, Effect>;\r\n private _subMeshToDepthWrapper: MapMap<Nullable<SubMesh>, ShadowGenerator, { drawWrapper: Array<Nullable<DrawWrapper>>, mainDrawWrapper: DrawWrapper, depthDefines: string, token: string }>; // key is (subMesh + shadowGenerator)\r\n private _meshes: Map<AbstractMesh, Nullable<Observer<Node>>>;\r\n\r\n /** Gets the standalone status of the wrapper */\r\n public get standalone(): boolean {\r\n return this._options?.standalone ?? false;\r\n }\r\n\r\n /** Gets the base material the wrapper is built upon */\r\n public get baseMaterial(): Material {\r\n return this._baseMaterial;\r\n }\r\n\r\n /**\r\n * Instantiate a new shadow depth wrapper.\r\n * It works by injecting some specific code in the vertex/fragment shaders of the base material and is used by a shadow generator to\r\n * generate the shadow depth map. For more information, please refer to the documentation:\r\n * https://doc.babylonjs.com/babylon101/shadows\r\n * @param baseMaterial Material to wrap\r\n * @param scene Define the scene the material belongs to\r\n * @param options Options used to create the wrapper\r\n */\r\n constructor(baseMaterial: Material, scene: Scene, options?: IIOptionShadowDepthMaterial) {\r\n this._baseMaterial = baseMaterial;\r\n this._scene = scene ?? Engine.LastCreatedScene;\r\n this._options = options;\r\n\r\n this._subMeshToEffect = new Map();\r\n this._subMeshToDepthWrapper = new MapMap();\r\n this._meshes = new Map();\r\n\r\n // Register for onEffectCreated to store the effect of the base material when it is (re)generated. This effect will be used\r\n // to create the depth effect later on\r\n this._onEffectCreatedObserver = this._baseMaterial.onEffectCreatedObservable.add((params: { effect: Effect, subMesh: Nullable<SubMesh> }) => {\r\n const mesh = params.subMesh?.getMesh();\r\n\r\n if (mesh && !this._meshes.has(mesh)) {\r\n // Register for mesh onDispose to clean up our internal maps when a mesh is disposed\r\n this._meshes.set(mesh,\r\n mesh.onDisposeObservable.add((mesh: Node) => {\r\n const iterator = this._subMeshToEffect.keys();\r\n for (let key = iterator.next(); key.done !== true; key = iterator.next()) {\r\n const subMesh = key.value;\r\n if (subMesh?.getMesh() === mesh as AbstractMesh) {\r\n this._subMeshToEffect.delete(subMesh);\r\n this._subMeshToDepthWrapper.mm.delete(subMesh);\r\n }\r\n }\r\n })\r\n );\r\n }\r\n\r\n this._subMeshToEffect.set(params.subMesh, params.effect);\r\n this._subMeshToDepthWrapper.mm.delete(params.subMesh); // trigger a depth effect recreation\r\n });\r\n }\r\n\r\n /**\r\n * Gets the effect to use to generate the depth map\r\n * @param subMesh subMesh to get the effect for\r\n * @param shadowGenerator shadow generator to get the effect for\r\n * @param passIdForDrawWrapper Id of the pass for which the effect from the draw wrapper must be retrieved from\r\n * @returns the effect to use to generate the depth map for the subMesh + shadow generator specified\r\n */\r\n public getEffect(subMesh: Nullable<SubMesh>, shadowGenerator: ShadowGenerator, passIdForDrawWrapper: number): Nullable<DrawWrapper> {\r\n const entry = this._subMeshToDepthWrapper.mm.get(subMesh)?.get(shadowGenerator);\r\n if (!entry) {\r\n return null;\r\n }\r\n let drawWrapper = entry.drawWrapper[passIdForDrawWrapper];\r\n if (!drawWrapper) {\r\n drawWrapper = entry.drawWrapper[passIdForDrawWrapper] = new DrawWrapper(this._scene.getEngine());\r\n drawWrapper.setEffect(entry.mainDrawWrapper.effect, entry.mainDrawWrapper.defines);\r\n }\r\n\r\n return drawWrapper;\r\n }\r\n\r\n /**\r\n * Specifies that the submesh is ready to be used for depth rendering\r\n * @param subMesh submesh to check\r\n * @param defines the list of defines to take into account when checking the effect\r\n * @param shadowGenerator combined with subMesh, it defines the effect to check\r\n * @param useInstances specifies that instances should be used\r\n * @param passIdForDrawWrapper Id of the pass for which the draw wrapper should be created\r\n * @returns a boolean indicating that the submesh is ready or not\r\n */\r\n public isReadyForSubMesh(subMesh: SubMesh, defines: string[], shadowGenerator: ShadowGenerator, useInstances: boolean, passIdForDrawWrapper: number): boolean {\r\n if (this.standalone) {\r\n // will ensure the effect is (re)created for the base material\r\n if (!this._baseMaterial.isReadyForSubMesh(subMesh.getMesh(), subMesh, useInstances)) {\r\n return false;\r\n }\r\n }\r\n\r\n return this._makeEffect(subMesh, defines, shadowGenerator, passIdForDrawWrapper)?.isReady() ?? false;\r\n }\r\n\r\n /**\r\n * Disposes the resources\r\n */\r\n public dispose(): void {\r\n this._baseMaterial.onEffectCreatedObservable.remove(this._onEffectCreatedObserver);\r\n this._onEffectCreatedObserver = null;\r\n\r\n const iterator = this._meshes.entries();\r\n for (let entry = iterator.next(); entry.done !== true; entry = iterator.next()) {\r\n const [mesh, observer] = entry.value;\r\n\r\n mesh.onDisposeObservable.remove(observer);\r\n }\r\n }\r\n\r\n private _makeEffect(subMesh: SubMesh, defines: string[], shadowGenerator: ShadowGenerator, passIdForDrawWrapper: number): Nullable<Effect> {\r\n const engine = this._scene.getEngine();\r\n const origEffect = this._subMeshToEffect.get(subMesh);\r\n\r\n if (!origEffect) {\r\n return null;\r\n }\r\n\r\n let params = this._subMeshToDepthWrapper.get(subMesh, shadowGenerator);\r\n if (!params) {\r\n const mainDrawWrapper = new DrawWrapper(engine);\r\n const renderPassId = this._scene.activeCameras?.[0]?.renderPassId ?? this._scene.activeCamera?.renderPassId ?? 0;\r\n mainDrawWrapper.defines = subMesh._getDrawWrapper(renderPassId)?.defines ?? null;\r\n\r\n params = {\r\n drawWrapper: [],\r\n mainDrawWrapper,\r\n depthDefines: \"\",\r\n token: RandomGUID()\r\n };\r\n params.drawWrapper[passIdForDrawWrapper] = mainDrawWrapper;\r\n this._subMeshToDepthWrapper.set(subMesh, shadowGenerator, params);\r\n }\r\n\r\n let join = defines.join(\"\\n\");\r\n\r\n if (params.mainDrawWrapper.effect) {\r\n if (join === params.depthDefines) {\r\n // we already created the depth effect and it is still up to date for this submesh + shadow generator\r\n return params.mainDrawWrapper.effect;\r\n }\r\n }\r\n\r\n params.depthDefines = join;\r\n\r\n // the depth effect is either out of date or has not been created yet\r\n let vertexCode = origEffect.rawVertexSourceCode,\r\n fragmentCode = origEffect.rawFragmentSourceCode;\r\n\r\n // vertex code\r\n const vertexNormalBiasCode = this._options && this._options.remappedVariables ? `#include<shadowMapVertexNormalBias>(${this._options.remappedVariables.join(\",\")})` : Effect.IncludesShadersStore[\"shadowMapVertexNormalBias\"],\r\n vertexMetricCode = this._options && this._options.remappedVariables ? `#include<shadowMapVertexMetric>(${this._options.remappedVariables.join(\",\")})` : Effect.IncludesShadersStore[\"shadowMapVertexMetric\"],\r\n fragmentSoftTransparentShadow = this._options && this._options.remappedVariables ? `#include<shadowMapFragmentSoftTransparentShadow>(${this._options.remappedVariables.join(\",\")})` : Effect.IncludesShadersStore[\"shadowMapFragmentSoftTransparentShadow\"],\r\n fragmentBlockCode = Effect.IncludesShadersStore[\"shadowMapFragment\"];\r\n\r\n vertexCode = vertexCode.replace(/void\\s+?main/g, Effect.IncludesShadersStore[\"shadowMapVertexExtraDeclaration\"] + \"\\r\\nvoid main\");\r\n vertexCode = vertexCode.replace(/#define SHADOWDEPTH_NORMALBIAS|#define CUSTOM_VERTEX_UPDATE_WORLDPOS/g, vertexNormalBiasCode);\r\n\r\n if (vertexCode.indexOf(\"#define SHADOWDEPTH_METRIC\") !== -1) {\r\n vertexCode = vertexCode.replace(/#define SHADOWDEPTH_METRIC/g, vertexMetricCode);\r\n } else {\r\n vertexCode = vertexCode.replace(/}\\s*$/g, vertexMetricCode + \"\\r\\n}\");\r\n }\r\n vertexCode = vertexCode.replace(/#define SHADER_NAME.*?\\n|out vec4 glFragColor;\\n/g, \"\");\r\n\r\n // fragment code\r\n const hasLocationForSoftTransparentShadow = fragmentCode.indexOf(\"#define SHADOWDEPTH_SOFTTRANSPARENTSHADOW\") >= 0 || fragmentCode.indexOf(\"#define CUSTOM_FRAGMENT_BEFORE_FOG\") >= 0;\r\n const hasLocationForFragment = fragmentCode.indexOf(\"#define SHADOWDEPTH_FRAGMENT\") !== -1;\r\n\r\n let fragmentCodeToInjectAtEnd = \"\";\r\n\r\n if (!hasLocationForSoftTransparentShadow) {\r\n fragmentCodeToInjectAtEnd = fragmentSoftTransparentShadow + \"\\r\\n\";\r\n } else {\r\n fragmentCode = fragmentCode.replace(/#define SHADOWDEPTH_SOFTTRANSPARENTSHADOW|#define CUSTOM_FRAGMENT_BEFORE_FOG/g, fragmentSoftTransparentShadow);\r\n }\r\n\r\n fragmentCode = fragmentCode.replace(/void\\s+?main/g, Effect.IncludesShadersStore[\"shadowMapFragmentExtraDeclaration\"] + \"\\r\\nvoid main\");\r\n\r\n if (hasLocationForFragment) {\r\n fragmentCode = fragmentCode.replace(/#define SHADOWDEPTH_FRAGMENT/g, fragmentBlockCode);\r\n } else {\r\n fragmentCodeToInjectAtEnd += fragmentBlockCode + \"\\r\\n\";\r\n }\r\n if (fragmentCodeToInjectAtEnd) {\r\n fragmentCode = fragmentCode.replace(/}\\s*$/g, fragmentCodeToInjectAtEnd + \"}\");\r\n }\r\n\r\n fragmentCode = fragmentCode.replace(/#define SHADER_NAME.*?\\n|out vec4 glFragColor;\\n/g, \"\");\r\n\r\n const uniforms = origEffect.getUniformNames().slice();\r\n\r\n uniforms.push(\"biasAndScaleSM\", \"depthValuesSM\", \"lightDataSM\", \"softTransparentShadowSM\");\r\n\r\n params.mainDrawWrapper.effect = engine.createEffect({\r\n vertexSource: vertexCode,\r\n fragmentSource: fragmentCode,\r\n vertexToken: params.token,\r\n fragmentToken: params.token,\r\n }, <IEffectCreationOptions>{\r\n attributes: origEffect.getAttributesNames(),\r\n uniformsNames: uniforms,\r\n uniformBuffersNames: origEffect.getUniformBuffersNames(),\r\n samplers: origEffect.getSamplers(),\r\n defines: join + \"\\n\" + origEffect.defines.replace(\"#define SHADOWS\", \"\").replace(/#define SHADOW\\d/g, \"\"),\r\n indexParameters: origEffect.getIndexParameters(),\r\n }, engine);\r\n\r\n for (let id = 0; id < params.drawWrapper.length; ++id) {\r\n if (id !== passIdForDrawWrapper) {\r\n params.drawWrapper[id]?.setEffect(params.mainDrawWrapper.effect, params.mainDrawWrapper.defines);\r\n }\r\n }\r\n return params.mainDrawWrapper.effect;\r\n }\r\n}\r\n"]}
|
|
@@ -122,8 +122,8 @@ export declare class StandardMaterialDefines extends MaterialDefines implements
|
|
|
122
122
|
PREPASS: boolean;
|
|
123
123
|
PREPASS_IRRADIANCE: boolean;
|
|
124
124
|
PREPASS_IRRADIANCE_INDEX: number;
|
|
125
|
-
|
|
126
|
-
|
|
125
|
+
PREPASS_ALBEDO_SQRT: boolean;
|
|
126
|
+
PREPASS_ALBEDO_SQRT_INDEX: number;
|
|
127
127
|
PREPASS_DEPTH: boolean;
|
|
128
128
|
PREPASS_DEPTH_INDEX: number;
|
|
129
129
|
PREPASS_NORMAL: boolean;
|
|
@@ -152,6 +152,8 @@ export declare class StandardMaterialDefines extends MaterialDefines implements
|
|
|
152
152
|
SAMPLER3DBGRMAP: boolean;
|
|
153
153
|
IMAGEPROCESSINGPOSTPROCESS: boolean;
|
|
154
154
|
MULTIVIEW: boolean;
|
|
155
|
+
ORDER_INDEPENDENT_TRANSPARENCY: boolean;
|
|
156
|
+
ORDER_INDEPENDENT_TRANSPARENCY_16BITS: boolean;
|
|
155
157
|
/**
|
|
156
158
|
* If the reflection texture on this material is in linear color space
|
|
157
159
|
* @hidden
|
|
@@ -126,8 +126,8 @@ var StandardMaterialDefines = /** @class */ (function (_super) {
|
|
|
126
126
|
_this.PREPASS = false;
|
|
127
127
|
_this.PREPASS_IRRADIANCE = false;
|
|
128
128
|
_this.PREPASS_IRRADIANCE_INDEX = -1;
|
|
129
|
-
_this.
|
|
130
|
-
_this.
|
|
129
|
+
_this.PREPASS_ALBEDO_SQRT = false;
|
|
130
|
+
_this.PREPASS_ALBEDO_SQRT_INDEX = -1;
|
|
131
131
|
_this.PREPASS_DEPTH = false;
|
|
132
132
|
_this.PREPASS_DEPTH_INDEX = -1;
|
|
133
133
|
_this.PREPASS_NORMAL = false;
|
|
@@ -156,6 +156,8 @@ var StandardMaterialDefines = /** @class */ (function (_super) {
|
|
|
156
156
|
_this.SAMPLER3DBGRMAP = false;
|
|
157
157
|
_this.IMAGEPROCESSINGPOSTPROCESS = false;
|
|
158
158
|
_this.MULTIVIEW = false;
|
|
159
|
+
_this.ORDER_INDEPENDENT_TRANSPARENCY = false;
|
|
160
|
+
_this.ORDER_INDEPENDENT_TRANSPARENCY_16BITS = false;
|
|
159
161
|
/**
|
|
160
162
|
* If the reflection texture on this material is in linear color space
|
|
161
163
|
* @hidden
|
|
@@ -278,6 +280,7 @@ var StandardMaterial = /** @class */ (function (_super) {
|
|
|
278
280
|
_this._renderTargets = new SmartArray(16);
|
|
279
281
|
_this._worldViewProjectionMatrix = Matrix.Zero();
|
|
280
282
|
_this._globalAmbientColor = new Color3(0, 0, 0);
|
|
283
|
+
_this.buildUniformLayout();
|
|
281
284
|
// Setup the default processing configuration to the scene.
|
|
282
285
|
_this._attachImageProcessingConfiguration(null);
|
|
283
286
|
_this.prePassConfiguration = new PrePassConfiguration();
|
|
@@ -576,11 +579,11 @@ var StandardMaterial = /** @class */ (function (_super) {
|
|
|
576
579
|
return true;
|
|
577
580
|
}
|
|
578
581
|
}
|
|
579
|
-
if (!subMesh.
|
|
582
|
+
if (!subMesh.materialDefines) {
|
|
580
583
|
subMesh.materialDefines = new StandardMaterialDefines();
|
|
581
584
|
}
|
|
582
585
|
var scene = this.getScene();
|
|
583
|
-
var defines = subMesh.
|
|
586
|
+
var defines = subMesh.materialDefines;
|
|
584
587
|
if (this._isReadyForSubMesh(subMesh)) {
|
|
585
588
|
return true;
|
|
586
589
|
}
|
|
@@ -590,7 +593,10 @@ var StandardMaterial = /** @class */ (function (_super) {
|
|
|
590
593
|
// Multiview
|
|
591
594
|
MaterialHelper.PrepareDefinesForMultiview(scene, defines);
|
|
592
595
|
// PrePass
|
|
593
|
-
|
|
596
|
+
var oit = this.needAlphaBlendingForMesh(mesh) && this.getScene().useOrderIndependentTransparency;
|
|
597
|
+
MaterialHelper.PrepareDefinesForPrePass(scene, defines, this.canRenderToMRT && !oit);
|
|
598
|
+
// Order independant transparency
|
|
599
|
+
MaterialHelper.PrepareDefinesForOIT(scene, defines, oit);
|
|
594
600
|
// Textures
|
|
595
601
|
if (defines._areTexturesDirty) {
|
|
596
602
|
defines._needUVs = false;
|
|
@@ -895,7 +901,8 @@ var StandardMaterial = /** @class */ (function (_super) {
|
|
|
895
901
|
];
|
|
896
902
|
var samplers = ["diffuseSampler", "ambientSampler", "opacitySampler", "reflectionCubeSampler",
|
|
897
903
|
"reflection2DSampler", "emissiveSampler", "specularSampler", "bumpSampler", "lightmapSampler",
|
|
898
|
-
"refractionCubeSampler", "refraction2DSampler", "boneSampler", "morphTargets"
|
|
904
|
+
"refractionCubeSampler", "refraction2DSampler", "boneSampler", "morphTargets", "oitDepthSampler",
|
|
905
|
+
"oitFrontColorSampler"];
|
|
899
906
|
var uniformBuffers = ["Material", "Scene", "Mesh"];
|
|
900
907
|
DetailMapConfiguration.AddUniforms(uniforms);
|
|
901
908
|
DetailMapConfiguration.AddSamplers(samplers);
|
|
@@ -950,7 +957,6 @@ var StandardMaterial = /** @class */ (function (_super) {
|
|
|
950
957
|
else {
|
|
951
958
|
scene.resetCachedMaterial();
|
|
952
959
|
subMesh.setEffect(effect, defines, this._materialContext);
|
|
953
|
-
this.buildUniformLayout();
|
|
954
960
|
}
|
|
955
961
|
}
|
|
956
962
|
}
|
|
@@ -1013,7 +1019,7 @@ var StandardMaterial = /** @class */ (function (_super) {
|
|
|
1013
1019
|
* Unbinds the material from the mesh
|
|
1014
1020
|
*/
|
|
1015
1021
|
StandardMaterial.prototype.unbind = function () {
|
|
1016
|
-
if (this._activeEffect) {
|
|
1022
|
+
if (this._activeEffect && !this.getScene().getEngine()._features.needToAlwaysBindUniformBuffers) {
|
|
1017
1023
|
var needFlag = false;
|
|
1018
1024
|
if (this._reflectionTexture && this._reflectionTexture.isRenderTarget) {
|
|
1019
1025
|
this._activeEffect.setTexture("reflection2DSampler", null);
|
|
@@ -1037,7 +1043,7 @@ var StandardMaterial = /** @class */ (function (_super) {
|
|
|
1037
1043
|
*/
|
|
1038
1044
|
StandardMaterial.prototype.bindForSubMesh = function (world, mesh, subMesh) {
|
|
1039
1045
|
var scene = this.getScene();
|
|
1040
|
-
var defines = subMesh.
|
|
1046
|
+
var defines = subMesh.materialDefines;
|
|
1041
1047
|
if (!defines) {
|
|
1042
1048
|
return;
|
|
1043
1049
|
}
|
|
@@ -1203,12 +1209,20 @@ var StandardMaterial = /** @class */ (function (_super) {
|
|
|
1203
1209
|
}
|
|
1204
1210
|
}
|
|
1205
1211
|
}
|
|
1212
|
+
// OIT with depth peeling
|
|
1213
|
+
if (this.getScene().useOrderIndependentTransparency && this.needAlphaBlendingForMesh(mesh)) {
|
|
1214
|
+
this.getScene().depthPeelingRenderer.bind(effect);
|
|
1215
|
+
}
|
|
1206
1216
|
this.detailMap.bindForSubMesh(ubo, scene, this.isFrozen);
|
|
1207
1217
|
// Clip plane
|
|
1208
1218
|
MaterialHelper.BindClipPlane(effect, scene);
|
|
1209
1219
|
// Colors
|
|
1210
1220
|
this.bindEyePosition(effect);
|
|
1211
1221
|
}
|
|
1222
|
+
else if (scene.getEngine()._features.needToAlwaysBindUniformBuffers) {
|
|
1223
|
+
ubo.bindToEffect(effect, "Material");
|
|
1224
|
+
this._needToBindSceneUbo = true;
|
|
1225
|
+
}
|
|
1212
1226
|
if (mustRebind || !this.isFrozen) {
|
|
1213
1227
|
// Lights
|
|
1214
1228
|
if (scene.lightsEnabled && !this._disableLighting) {
|