@babylonjs/core 5.45.2 → 5.46.0
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/Actions/condition.js +23 -23
- package/Actions/condition.js.map +1 -1
- package/Animations/animatable.js +48 -48
- package/Animations/animatable.js.map +1 -1
- package/Animations/animation.js +53 -53
- package/Animations/animation.js.map +1 -1
- package/Animations/animationGroup.js +53 -53
- package/Animations/animationGroup.js.map +1 -1
- package/Animations/runtimeAnimation.js +36 -36
- package/Animations/runtimeAnimation.js.map +1 -1
- package/Audio/audioEngine.js +14 -14
- package/Audio/audioEngine.js.map +1 -1
- package/Audio/audioSceneComponent.js +14 -14
- package/Audio/audioSceneComponent.js.map +1 -1
- package/Audio/sound.js +47 -47
- package/Audio/sound.js.map +1 -1
- package/Behaviors/Meshes/baseSixDofDragBehavior.d.ts +1 -1
- package/Behaviors/Meshes/fadeInOutBehavior.js +11 -11
- package/Behaviors/Meshes/fadeInOutBehavior.js.map +1 -1
- package/Behaviors/Meshes/pointerDragBehavior.js +34 -34
- package/Behaviors/Meshes/pointerDragBehavior.js.map +1 -1
- package/Bones/bone.js +15 -15
- package/Bones/bone.js.map +1 -1
- package/Bones/boneIKController.js +9 -9
- package/Bones/boneIKController.js.map +1 -1
- package/Bones/boneLookController.js +50 -50
- package/Bones/boneLookController.js.map +1 -1
- package/Bones/skeleton.js +35 -35
- package/Bones/skeleton.js.map +1 -1
- package/Buffers/buffer.js +14 -14
- package/Buffers/buffer.js.map +1 -1
- package/Buffers/dataBuffer.js +6 -6
- package/Buffers/dataBuffer.js.map +1 -1
- package/Cameras/Inputs/freeCameraDeviceOrientationInput.js +42 -42
- package/Cameras/Inputs/freeCameraDeviceOrientationInput.js.map +1 -1
- package/Cameras/Stereoscopic/stereoscopicScreenUniversalCamera.js +18 -18
- package/Cameras/Stereoscopic/stereoscopicScreenUniversalCamera.js.map +1 -1
- package/Cameras/VR/vrExperienceHelper.js +178 -178
- package/Cameras/VR/vrExperienceHelper.js.map +1 -1
- package/Cameras/arcRotateCamera.js +176 -176
- package/Cameras/arcRotateCamera.js.map +1 -1
- package/Cameras/camera.js +90 -90
- package/Cameras/camera.js.map +1 -1
- package/Cameras/flyCamera.js +82 -82
- package/Cameras/flyCamera.js.map +1 -1
- package/Cameras/freeCamera.js +54 -54
- package/Cameras/freeCamera.js.map +1 -1
- package/Compute/computeShader.js +12 -12
- package/Compute/computeShader.js.map +1 -1
- package/Culling/ray.d.ts +1 -1
- package/Debug/axesViewer.js +12 -12
- package/Debug/axesViewer.js.map +1 -1
- package/Debug/debugLayer.js +21 -21
- package/Debug/debugLayer.js.map +1 -1
- package/Debug/directionalLightFrustumViewer.js +20 -20
- package/Debug/directionalLightFrustumViewer.js.map +1 -1
- package/Debug/rayHelper.js +10 -10
- package/Debug/rayHelper.js.map +1 -1
- package/Debug/skeletonViewer.js +81 -81
- package/Debug/skeletonViewer.js.map +1 -1
- package/DeviceInput/InputDevices/deviceSource.d.ts +1 -1
- package/DeviceInput/InputDevices/deviceSourceManager.js +31 -31
- package/DeviceInput/InputDevices/deviceSourceManager.js.map +1 -1
- package/DeviceInput/InputDevices/deviceTypes.d.ts +1 -1
- package/DeviceInput/internalDeviceSourceManager.d.ts +2 -2
- package/Engines/Extensions/engine.computeShader.d.ts +3 -3
- package/Engines/Extensions/engine.multiRender.js +1 -1
- package/Engines/Extensions/engine.multiRender.js.map +1 -1
- package/Engines/Extensions/engine.query.d.ts +1 -1
- package/Engines/Extensions/engine.renderTarget.d.ts +1 -1
- package/Engines/Extensions/engine.renderTarget.js +1 -1
- package/Engines/Extensions/engine.renderTarget.js.map +1 -1
- package/Engines/Native/nativeDataStream.d.ts +1 -1
- package/Engines/Native/nativeHardwareTexture.js +3 -3
- package/Engines/Native/nativeHardwareTexture.js.map +1 -1
- package/Engines/Native/nativeInterfaces.d.ts +5 -5
- package/Engines/Native/nativePipelineContext.js +7 -7
- package/Engines/Native/nativePipelineContext.js.map +1 -1
- package/Engines/Native/nativeRenderTargetWrapper.js +6 -6
- package/Engines/Native/nativeRenderTargetWrapper.js.map +1 -1
- package/Engines/Processors/shaderCodeInliner.js +4 -4
- package/Engines/Processors/shaderCodeInliner.js.map +1 -1
- package/Engines/Processors/shaderProcessingOptions.d.ts +1 -1
- package/Engines/WebGL/webGLHardwareTexture.js +3 -3
- package/Engines/WebGL/webGLHardwareTexture.js.map +1 -1
- package/Engines/WebGPU/webgpuBufferManager.js +3 -3
- package/Engines/WebGPU/webgpuBufferManager.js.map +1 -1
- package/Engines/WebGPU/webgpuCacheBindGroups.js +6 -6
- package/Engines/WebGPU/webgpuCacheBindGroups.js.map +1 -1
- package/Engines/WebGPU/webgpuCacheRenderPipelineTree.js +5 -5
- package/Engines/WebGPU/webgpuCacheRenderPipelineTree.js.map +1 -1
- package/Engines/WebGPU/webgpuClearQuad.js +11 -11
- package/Engines/WebGPU/webgpuClearQuad.js.map +1 -1
- package/Engines/WebGPU/webgpuComputeContext.js +7 -7
- package/Engines/WebGPU/webgpuComputeContext.js.map +1 -1
- package/Engines/WebGPU/webgpuComputePipelineContext.js +4 -4
- package/Engines/WebGPU/webgpuComputePipelineContext.js.map +1 -1
- package/Engines/WebGPU/webgpuDrawContext.js +7 -7
- package/Engines/WebGPU/webgpuDrawContext.js.map +1 -1
- package/Engines/WebGPU/webgpuHardwareTexture.js +9 -9
- package/Engines/WebGPU/webgpuHardwareTexture.js.map +1 -1
- package/Engines/WebGPU/webgpuMaterialContext.js +5 -5
- package/Engines/WebGPU/webgpuMaterialContext.js.map +1 -1
- package/Engines/WebGPU/webgpuOcclusionQuery.js +10 -10
- package/Engines/WebGPU/webgpuOcclusionQuery.js.map +1 -1
- package/Engines/WebGPU/webgpuPipelineContext.js +6 -6
- package/Engines/WebGPU/webgpuPipelineContext.js.map +1 -1
- package/Engines/WebGPU/webgpuQuerySet.js +3 -3
- package/Engines/WebGPU/webgpuQuerySet.js.map +1 -1
- package/Engines/WebGPU/webgpuShaderProcessingContext.js +3 -3
- package/Engines/WebGPU/webgpuShaderProcessingContext.js.map +1 -1
- package/Engines/WebGPU/webgpuTextureHelper.js +3 -3
- package/Engines/WebGPU/webgpuTextureHelper.js.map +1 -1
- package/Engines/WebGPU/webgpuTimestampQuery.js +3 -3
- package/Engines/WebGPU/webgpuTimestampQuery.js.map +1 -1
- package/Engines/engine.js +134 -134
- package/Engines/engine.js.map +1 -1
- package/Engines/nativeEngine.js +6 -6
- package/Engines/nativeEngine.js.map +1 -1
- package/Engines/nullEngine.js +25 -25
- package/Engines/nullEngine.js.map +1 -1
- package/Engines/renderTargetWrapper.js +25 -25
- package/Engines/renderTargetWrapper.js.map +1 -1
- package/Engines/thinEngine.js +243 -243
- package/Engines/thinEngine.js.map +1 -1
- package/Engines/webgpuEngine.js +132 -132
- package/Engines/webgpuEngine.js.map +1 -1
- package/Events/keyboardEvents.js +10 -10
- package/Events/keyboardEvents.js.map +1 -1
- package/Events/pointerEvents.js +9 -9
- package/Events/pointerEvents.js.map +1 -1
- package/Gamepads/Controllers/poseEnabledController.js +9 -9
- package/Gamepads/Controllers/poseEnabledController.js.map +1 -1
- package/Gamepads/Controllers/webVRController.js +13 -13
- package/Gamepads/Controllers/webVRController.js.map +1 -1
- package/Gamepads/gamepad.js +20 -20
- package/Gamepads/gamepad.js.map +1 -1
- package/Gizmos/axisDragGizmo.js +45 -45
- package/Gizmos/axisDragGizmo.js.map +1 -1
- package/Gizmos/axisScaleGizmo.js +12 -12
- package/Gizmos/axisScaleGizmo.js.map +1 -1
- package/Gizmos/boundingBoxGizmo.js +74 -74
- package/Gizmos/boundingBoxGizmo.js.map +1 -1
- package/Gizmos/gizmo.js +34 -34
- package/Gizmos/gizmo.js.map +1 -1
- package/Gizmos/gizmoManager.js +40 -40
- package/Gizmos/gizmoManager.js.map +1 -1
- package/Gizmos/planeDragGizmo.js +23 -23
- package/Gizmos/planeDragGizmo.js.map +1 -1
- package/Gizmos/planeRotationGizmo.js +12 -12
- package/Gizmos/planeRotationGizmo.js.map +1 -1
- package/Gizmos/positionGizmo.js +40 -40
- package/Gizmos/positionGizmo.js.map +1 -1
- package/Gizmos/rotationGizmo.js +47 -47
- package/Gizmos/rotationGizmo.js.map +1 -1
- package/Gizmos/scaleGizmo.js +41 -41
- package/Gizmos/scaleGizmo.js.map +1 -1
- package/Helpers/environmentHelper.js +18 -18
- package/Helpers/environmentHelper.js.map +1 -1
- package/Helpers/textureDome.js +96 -96
- package/Helpers/textureDome.js.map +1 -1
- package/IAccessibilityTag.d.ts +2 -2
- package/Instrumentation/engineInstrumentation.js +21 -21
- package/Instrumentation/engineInstrumentation.js.map +1 -1
- package/Instrumentation/sceneInstrumentation.js +90 -90
- package/Instrumentation/sceneInstrumentation.js.map +1 -1
- package/Layers/effectLayer.js +48 -48
- package/Layers/effectLayer.js.map +1 -1
- package/Layers/glowLayer.js +32 -32
- package/Layers/glowLayer.js.map +1 -1
- package/Layers/highlightLayer.js +26 -26
- package/Layers/highlightLayer.js.map +1 -1
- package/Layers/layer.js +40 -40
- package/Layers/layer.js.map +1 -1
- package/LensFlares/lensFlare.js +15 -15
- package/LensFlares/lensFlare.js.map +1 -1
- package/LensFlares/lensFlareSystem.js +4 -4
- package/LensFlares/lensFlareSystem.js.map +1 -1
- package/Lights/Shadows/cascadedShadowGenerator.js +18 -18
- package/Lights/Shadows/cascadedShadowGenerator.js.map +1 -1
- package/Lights/Shadows/shadowGenerator.js +115 -115
- package/Lights/Shadows/shadowGenerator.js.map +1 -1
- package/Lights/directionalLight.js +31 -31
- package/Lights/directionalLight.js.map +1 -1
- package/Lights/light.js +72 -72
- package/Lights/light.js.map +1 -1
- package/Lights/pointLight.js +18 -18
- package/Lights/pointLight.js.map +1 -1
- package/Lights/spotLight.js +30 -30
- package/Lights/spotLight.js.map +1 -1
- package/Loading/sceneLoader.d.ts +1 -1
- package/Materials/Background/backgroundMaterial.js +124 -124
- package/Materials/Background/backgroundMaterial.js.map +1 -1
- package/Materials/Node/Blocks/Dual/imageSourceBlock.js +8 -8
- package/Materials/Node/Blocks/Dual/imageSourceBlock.js.map +1 -1
- package/Materials/Node/Blocks/Dual/lightBlock.js +14 -14
- package/Materials/Node/Blocks/Dual/lightBlock.js.map +1 -1
- package/Materials/Node/Blocks/Dual/reflectionTextureBaseBlock.js +9 -9
- package/Materials/Node/Blocks/Dual/reflectionTextureBaseBlock.js.map +1 -1
- package/Materials/Node/Blocks/Dual/textureBlock.js +26 -26
- package/Materials/Node/Blocks/Dual/textureBlock.js.map +1 -1
- package/Materials/Node/Blocks/Input/inputBlock.js +34 -34
- package/Materials/Node/Blocks/Input/inputBlock.js.map +1 -1
- package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.js +14 -14
- package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.js.map +1 -1
- package/Materials/Node/Blocks/PBR/reflectionBlock.js +16 -16
- package/Materials/Node/Blocks/PBR/reflectionBlock.js.map +1 -1
- package/Materials/Node/Blocks/customBlock.js +7 -7
- package/Materials/Node/Blocks/customBlock.js.map +1 -1
- package/Materials/Node/Blocks/gradientBlock.js +13 -13
- package/Materials/Node/Blocks/gradientBlock.js.map +1 -1
- package/Materials/Node/Blocks/triPlanarBlock.js +30 -30
- package/Materials/Node/Blocks/triPlanarBlock.js.map +1 -1
- package/Materials/Node/nodeMaterial.d.ts +1 -1
- package/Materials/Node/nodeMaterial.js +60 -60
- package/Materials/Node/nodeMaterial.js.map +1 -1
- package/Materials/Node/nodeMaterialBlock.js +35 -35
- package/Materials/Node/nodeMaterialBlock.js.map +1 -1
- package/Materials/Node/nodeMaterialBlockConnectionPoint.js +50 -50
- package/Materials/Node/nodeMaterialBlockConnectionPoint.js.map +1 -1
- package/Materials/PBR/pbrAnisotropicConfiguration.js +5 -5
- package/Materials/PBR/pbrAnisotropicConfiguration.js.map +1 -1
- package/Materials/PBR/pbrBRDFConfiguration.js +4 -4
- package/Materials/PBR/pbrBRDFConfiguration.js.map +1 -1
- package/Materials/PBR/pbrBaseMaterial.js +52 -52
- package/Materials/PBR/pbrBaseMaterial.js.map +1 -1
- package/Materials/PBR/pbrBaseSimpleMaterial.js +17 -17
- package/Materials/PBR/pbrBaseSimpleMaterial.js.map +1 -1
- package/Materials/PBR/pbrClearCoatConfiguration.js +5 -5
- package/Materials/PBR/pbrClearCoatConfiguration.js.map +1 -1
- package/Materials/PBR/pbrIridescenceConfiguration.js +5 -5
- package/Materials/PBR/pbrIridescenceConfiguration.js.map +1 -1
- package/Materials/PBR/pbrMaterial.js +209 -209
- package/Materials/PBR/pbrMaterial.js.map +1 -1
- package/Materials/PBR/pbrSheenConfiguration.js +5 -5
- package/Materials/PBR/pbrSheenConfiguration.js.map +1 -1
- package/Materials/PBR/pbrSpecularGlossinessMaterial.js +6 -6
- package/Materials/PBR/pbrSpecularGlossinessMaterial.js.map +1 -1
- package/Materials/PBR/pbrSubSurfaceConfiguration.js +51 -51
- package/Materials/PBR/pbrSubSurfaceConfiguration.js.map +1 -1
- package/Materials/Textures/baseTexture.js +99 -99
- package/Materials/Textures/baseTexture.js.map +1 -1
- package/Materials/Textures/cubeTexture.js +61 -61
- package/Materials/Textures/cubeTexture.js.map +1 -1
- package/Materials/Textures/externalTexture.js +16 -16
- package/Materials/Textures/externalTexture.js.map +1 -1
- package/Materials/Textures/hdrCubeTexture.js +44 -44
- package/Materials/Textures/hdrCubeTexture.js.map +1 -1
- package/Materials/Textures/internalTexture.js +31 -31
- package/Materials/Textures/internalTexture.js.map +1 -1
- package/Materials/Textures/mirrorTexture.js +73 -73
- package/Materials/Textures/mirrorTexture.js.map +1 -1
- package/Materials/Textures/multiRenderTarget.js +47 -47
- package/Materials/Textures/multiRenderTarget.js.map +1 -1
- package/Materials/Textures/rawTexture2DArray.js +6 -6
- package/Materials/Textures/rawTexture2DArray.js.map +1 -1
- package/Materials/Textures/renderTargetTexture.js +142 -142
- package/Materials/Textures/renderTargetTexture.js.map +1 -1
- package/Materials/Textures/texture.d.ts +1 -1
- package/Materials/Textures/texture.js +26 -26
- package/Materials/Textures/texture.js.map +1 -1
- package/Materials/Textures/textureCreationOptions.d.ts +1 -1
- package/Materials/Textures/textureSampler.js +20 -20
- package/Materials/Textures/textureSampler.js.map +1 -1
- package/Materials/Textures/thinRenderTargetTexture.js +6 -6
- package/Materials/Textures/thinRenderTargetTexture.js.map +1 -1
- package/Materials/Textures/thinTexture.js +39 -39
- package/Materials/Textures/thinTexture.js.map +1 -1
- package/Materials/Textures/videoTexture.js +40 -40
- package/Materials/Textures/videoTexture.js.map +1 -1
- package/Materials/drawWrapper.js +6 -6
- package/Materials/drawWrapper.js.map +1 -1
- package/Materials/effect.js +18 -18
- package/Materials/effect.js.map +1 -1
- package/Materials/effectRenderer.js +9 -9
- package/Materials/effectRenderer.js.map +1 -1
- package/Materials/fresnelParameters.d.ts +2 -2
- package/Materials/fresnelParameters.js +13 -13
- package/Materials/fresnelParameters.js.map +1 -1
- package/Materials/material.detailMapConfiguration.js +5 -5
- package/Materials/material.detailMapConfiguration.js.map +1 -1
- package/Materials/material.js +223 -223
- package/Materials/material.js.map +1 -1
- package/Materials/materialPluginBase.js +5 -5
- package/Materials/materialPluginBase.js.map +1 -1
- package/Materials/materialPluginEvent.d.ts +14 -14
- package/Materials/materialPluginManager.d.ts +1 -1
- package/Materials/multiMaterial.js +16 -16
- package/Materials/multiMaterial.js.map +1 -1
- package/Materials/shadowDepthWrapper.js +14 -14
- package/Materials/shadowDepthWrapper.js.map +1 -1
- package/Materials/standardMaterial.js +100 -100
- package/Materials/standardMaterial.js.map +1 -1
- package/Materials/uniformBufferEffectCommonAccessor.js +3 -3
- package/Materials/uniformBufferEffectCommonAccessor.js.map +1 -1
- package/Maths/math.functions.js +2 -0
- package/Maths/math.functions.js.map +1 -1
- package/Maths/math.path.js +11 -11
- package/Maths/math.path.js.map +1 -1
- package/Maths/math.vector.d.ts +6 -7
- package/Maths/math.vector.js +48 -48
- package/Maths/math.vector.js.map +1 -1
- package/Meshes/Builders/goldbergBuilder.d.ts +2 -2
- package/Meshes/Compression/dracoCompression.js +23 -23
- package/Meshes/Compression/dracoCompression.js.map +1 -1
- package/Meshes/Compression/meshoptCompression.js +9 -9
- package/Meshes/Compression/meshoptCompression.js.map +1 -1
- package/Meshes/abstractMesh.js +179 -179
- package/Meshes/abstractMesh.js.map +1 -1
- package/Meshes/geometry.js +32 -32
- package/Meshes/geometry.js.map +1 -1
- package/Meshes/goldbergMesh.d.ts +1 -1
- package/Meshes/linesMesh.js +3 -3
- package/Meshes/linesMesh.js.map +1 -1
- package/Meshes/mesh.js +165 -165
- package/Meshes/mesh.js.map +1 -1
- package/Meshes/mesh.vertexData.js.map +1 -1
- package/Meshes/polygonMesh.js +5 -5
- package/Meshes/polygonMesh.js.map +1 -1
- package/Meshes/subMesh.js +59 -59
- package/Meshes/subMesh.js.map +1 -1
- package/Meshes/transformNode.js +52 -52
- package/Meshes/transformNode.js.map +1 -1
- package/Misc/PerformanceViewer/performanceViewerCollectionStrategies.d.ts +1 -1
- package/Misc/PerformanceViewer/performanceViewerCollector.js +12 -12
- package/Misc/PerformanceViewer/performanceViewerCollector.js.map +1 -1
- package/Misc/arrayTools.d.ts +1 -1
- package/Misc/copyTextureToTexture.js +3 -3
- package/Misc/copyTextureToTexture.js.map +1 -1
- package/Misc/coroutine.d.ts +5 -5
- package/Misc/deferred.js +9 -9
- package/Misc/deferred.js.map +1 -1
- package/Misc/depthReducer.js +7 -7
- package/Misc/depthReducer.js.map +1 -1
- package/Misc/environmentTextureTools.d.ts +1 -1
- package/Misc/error.d.ts +1 -1
- package/Misc/fileTools.d.ts +5 -5
- package/Misc/filesInput.js +6 -6
- package/Misc/filesInput.js.map +1 -1
- package/Misc/khronosTextureContainer2.js +9 -9
- package/Misc/khronosTextureContainer2.js.map +1 -1
- package/Misc/observable.js +12 -12
- package/Misc/observable.js.map +1 -1
- package/Misc/perfCounter.js +16 -16
- package/Misc/perfCounter.js.map +1 -1
- package/Misc/sceneOptimizer.js +76 -76
- package/Misc/sceneOptimizer.js.map +1 -1
- package/Misc/stringDictionary.d.ts +1 -1
- package/Misc/trajectoryClassifier.js +67 -67
- package/Misc/trajectoryClassifier.js.map +1 -1
- package/Misc/videoRecorder.js +15 -15
- package/Misc/videoRecorder.js.map +1 -1
- package/Misc/virtualJoystick.js +12 -12
- package/Misc/virtualJoystick.js.map +1 -1
- package/Morph/morphTarget.js +28 -28
- package/Morph/morphTarget.js.map +1 -1
- package/Morph/morphTargetManager.js +18 -18
- package/Morph/morphTargetManager.js.map +1 -1
- package/Offline/database.js +12 -12
- package/Offline/database.js.map +1 -1
- package/Particles/EmitterTypes/coneParticleEmitter.js +25 -25
- package/Particles/EmitterTypes/coneParticleEmitter.js.map +1 -1
- package/Particles/EmitterTypes/meshParticleEmitter.js +20 -20
- package/Particles/EmitterTypes/meshParticleEmitter.js.map +1 -1
- package/Particles/baseParticleSystem.js +232 -232
- package/Particles/baseParticleSystem.js.map +1 -1
- package/Particles/cloudPoint.js +9 -9
- package/Particles/cloudPoint.js.map +1 -1
- package/Particles/gpuParticleSystem.js +123 -123
- package/Particles/gpuParticleSystem.js.map +1 -1
- package/Particles/particleSystem.js +102 -102
- package/Particles/particleSystem.js.map +1 -1
- package/Particles/pointsCloudSystem.js +18 -18
- package/Particles/pointsCloudSystem.js.map +1 -1
- package/Particles/solidParticle.js +23 -23
- package/Particles/solidParticle.js.map +1 -1
- package/Physics/v1/physicsEngine.js +14 -14
- package/Physics/v1/physicsEngine.js.map +1 -1
- package/Physics/v1/physicsImpostor.js +149 -149
- package/Physics/v1/physicsImpostor.js.map +1 -1
- package/Physics/v2/physicsEngine.js +14 -14
- package/Physics/v2/physicsEngine.js.map +1 -1
- package/PostProcesses/RenderPipeline/Pipelines/defaultRenderingPipeline.js +129 -129
- package/PostProcesses/RenderPipeline/Pipelines/defaultRenderingPipeline.js.map +1 -1
- package/PostProcesses/RenderPipeline/Pipelines/ssao2RenderingPipeline.js +68 -68
- package/PostProcesses/RenderPipeline/Pipelines/ssao2RenderingPipeline.js.map +1 -1
- package/PostProcesses/RenderPipeline/Pipelines/ssaoRenderingPipeline.js +6 -6
- package/PostProcesses/RenderPipeline/Pipelines/ssaoRenderingPipeline.js.map +1 -1
- package/PostProcesses/RenderPipeline/Pipelines/standardRenderingPipeline.js +226 -225
- package/PostProcesses/RenderPipeline/Pipelines/standardRenderingPipeline.js.map +1 -1
- package/PostProcesses/RenderPipeline/postProcessRenderPipeline.js +10 -10
- package/PostProcesses/RenderPipeline/postProcessRenderPipeline.js.map +1 -1
- package/PostProcesses/anaglyphPostProcess.js +7 -7
- package/PostProcesses/anaglyphPostProcess.js.map +1 -1
- package/PostProcesses/blackAndWhitePostProcess.js +7 -7
- package/PostProcesses/blackAndWhitePostProcess.js.map +1 -1
- package/PostProcesses/bloomEffect.js +28 -28
- package/PostProcesses/bloomEffect.js.map +1 -1
- package/PostProcesses/bloomMergePostProcess.js +7 -7
- package/PostProcesses/bloomMergePostProcess.js.map +1 -1
- package/PostProcesses/blurPostProcess.js +32 -32
- package/PostProcesses/blurPostProcess.js.map +1 -1
- package/PostProcesses/chromaticAberrationPostProcess.js +7 -7
- package/PostProcesses/chromaticAberrationPostProcess.js.map +1 -1
- package/PostProcesses/circleOfConfusionPostProcess.js +7 -7
- package/PostProcesses/circleOfConfusionPostProcess.js.map +1 -1
- package/PostProcesses/colorCorrectionPostProcess.js +7 -7
- package/PostProcesses/colorCorrectionPostProcess.js.map +1 -1
- package/PostProcesses/convolutionPostProcess.js +7 -7
- package/PostProcesses/convolutionPostProcess.js.map +1 -1
- package/PostProcesses/depthOfFieldBlurPostProcess.js +7 -7
- package/PostProcesses/depthOfFieldBlurPostProcess.js.map +1 -1
- package/PostProcesses/depthOfFieldEffect.js +36 -36
- package/PostProcesses/depthOfFieldEffect.js.map +1 -1
- package/PostProcesses/depthOfFieldMergePostProcess.js +7 -7
- package/PostProcesses/depthOfFieldMergePostProcess.js.map +1 -1
- package/PostProcesses/extractHighlightsPostProcess.js +7 -7
- package/PostProcesses/extractHighlightsPostProcess.js.map +1 -1
- package/PostProcesses/filterPostProcess.js +7 -7
- package/PostProcesses/filterPostProcess.js.map +1 -1
- package/PostProcesses/grainPostProcess.js +7 -7
- package/PostProcesses/grainPostProcess.js.map +1 -1
- package/PostProcesses/imageProcessingPostProcess.js +42 -42
- package/PostProcesses/imageProcessingPostProcess.js.map +1 -1
- package/PostProcesses/motionBlurPostProcess.js +41 -41
- package/PostProcesses/motionBlurPostProcess.js.map +1 -1
- package/PostProcesses/passPostProcess.js +15 -15
- package/PostProcesses/passPostProcess.js.map +1 -1
- package/PostProcesses/postProcess.d.ts +2 -2
- package/PostProcesses/postProcess.js +123 -123
- package/PostProcesses/postProcess.js.map +1 -1
- package/PostProcesses/refractionPostProcess.js +21 -21
- package/PostProcesses/refractionPostProcess.js.map +1 -1
- package/PostProcesses/screenSpaceCurvaturePostProcess.js +7 -7
- package/PostProcesses/screenSpaceCurvaturePostProcess.js.map +1 -1
- package/PostProcesses/screenSpaceReflectionPostProcess.js +19 -19
- package/PostProcesses/screenSpaceReflectionPostProcess.js.map +1 -1
- package/PostProcesses/sharpenPostProcess.js +7 -7
- package/PostProcesses/sharpenPostProcess.js.map +1 -1
- package/PostProcesses/stereoscopicInterlacePostProcess.js +14 -14
- package/PostProcesses/stereoscopicInterlacePostProcess.js.map +1 -1
- package/PostProcesses/tonemapPostProcess.js +7 -7
- package/PostProcesses/tonemapPostProcess.js.map +1 -1
- package/PostProcesses/volumetricLightScatteringPostProcess.js +11 -11
- package/PostProcesses/volumetricLightScatteringPostProcess.js.map +1 -1
- package/PostProcesses/vrDistortionCorrectionPostProcess.js +7 -7
- package/PostProcesses/vrDistortionCorrectionPostProcess.js.map +1 -1
- package/Rendering/depthPeelingRenderer.js +36 -36
- package/Rendering/depthPeelingRenderer.js.map +1 -1
- package/Rendering/depthRenderer.js +8 -8
- package/Rendering/depthRenderer.js.map +1 -1
- package/Rendering/edgesRenderer.js +34 -34
- package/Rendering/edgesRenderer.js.map +1 -1
- package/Rendering/fluidRenderer/fluidRenderer.js +8 -8
- package/Rendering/fluidRenderer/fluidRenderer.js.map +1 -1
- package/Rendering/fluidRenderer/fluidRenderingDepthTextureCopy.js +3 -3
- package/Rendering/fluidRenderer/fluidRenderingDepthTextureCopy.js.map +1 -1
- package/Rendering/fluidRenderer/fluidRenderingObject.js +19 -19
- package/Rendering/fluidRenderer/fluidRenderingObject.js.map +1 -1
- package/Rendering/fluidRenderer/fluidRenderingObjectCustomParticles.js +12 -12
- package/Rendering/fluidRenderer/fluidRenderingObjectCustomParticles.js.map +1 -1
- package/Rendering/fluidRenderer/fluidRenderingObjectParticleSystem.js +18 -18
- package/Rendering/fluidRenderer/fluidRenderingObjectParticleSystem.js.map +1 -1
- package/Rendering/fluidRenderer/fluidRenderingTargetRenderer.js +68 -68
- package/Rendering/fluidRenderer/fluidRenderingTargetRenderer.js.map +1 -1
- package/Rendering/fluidRenderer/fluidRenderingTextures.js +29 -29
- package/Rendering/fluidRenderer/fluidRenderingTextures.js.map +1 -1
- package/Rendering/geometryBufferRenderer.js +44 -44
- package/Rendering/geometryBufferRenderer.js.map +1 -1
- package/Rendering/prePassRenderer.js +51 -51
- package/Rendering/prePassRenderer.js.map +1 -1
- package/Rendering/renderingGroup.js +25 -25
- package/Rendering/renderingGroup.js.map +1 -1
- package/Rendering/renderingManager.js +21 -21
- package/Rendering/renderingManager.js.map +1 -1
- package/Rendering/subSurfaceConfiguration.js +18 -18
- package/Rendering/subSurfaceConfiguration.js.map +1 -1
- package/Rendering/utilityLayerRenderer.js +76 -76
- package/Rendering/utilityLayerRenderer.js.map +1 -1
- package/Sprites/sprite.js +16 -16
- package/Sprites/sprite.js.map +1 -1
- package/Sprites/spriteManager.js +81 -81
- package/Sprites/spriteManager.js.map +1 -1
- package/Sprites/spriteMap.js +32 -32
- package/Sprites/spriteMap.js.map +1 -1
- package/Sprites/spriteRenderer.js +6 -6
- package/Sprites/spriteRenderer.js.map +1 -1
- package/Sprites/thinSprite.js +22 -22
- package/Sprites/thinSprite.js.map +1 -1
- package/States/stencilStateComposer.js +10 -10
- package/States/stencilStateComposer.js.map +1 -1
- package/XR/features/WebXRAnchorSystem.js +7 -7
- package/XR/features/WebXRAnchorSystem.js.map +1 -1
- package/XR/features/WebXRControllerMovement.d.ts +3 -3
- package/XR/features/WebXRControllerMovement.js +97 -97
- package/XR/features/WebXRControllerMovement.js.map +1 -1
- package/XR/features/WebXRControllerPhysics.js +24 -24
- package/XR/features/WebXRControllerPhysics.js.map +1 -1
- package/XR/features/WebXRControllerTeleportation.js +26 -26
- package/XR/features/WebXRControllerTeleportation.js.map +1 -1
- package/XR/features/WebXRDOMOverlay.d.ts +1 -1
- package/XR/features/WebXRFeaturePointSystem.js +6 -6
- package/XR/features/WebXRFeaturePointSystem.js.map +1 -1
- package/XR/features/WebXRHandTracking.d.ts +1 -1
- package/XR/features/WebXRHandTracking.js +95 -95
- package/XR/features/WebXRHandTracking.js.map +1 -1
- package/XR/features/WebXRWalkingLocomotion.js +21 -21
- package/XR/features/WebXRWalkingLocomotion.js.map +1 -1
- package/XR/motionController/webXRAbstractMotionController.d.ts +3 -3
- package/XR/motionController/webXRMotionControllerManager.d.ts +1 -1
- package/XR/native/nativeXRFrame.js +3 -3
- package/XR/native/nativeXRFrame.js.map +1 -1
- package/XR/webXRFeaturesManager.d.ts +1 -1
- package/XR/webXRLayerWrapper.d.ts +2 -2
- package/XR/webXRLayerWrapper.js +17 -17
- package/XR/webXRLayerWrapper.js.map +1 -1
- package/abstractScene.d.ts +2 -2
- package/node.d.ts +1 -1
- package/node.js +71 -71
- package/node.js.map +1 -1
- package/package.json +1 -1
- package/scene.js +777 -777
- package/scene.js.map +1 -1
- package/sceneComponent.d.ts +12 -12
- package/types.d.ts +11 -11
|
@@ -9,24 +9,24 @@ declare type AbstractMesh = import("../Meshes/abstractMesh").AbstractMesh;
|
|
|
9
9
|
declare type IAnimatable = import("../Animations/animatable.interface").IAnimatable;
|
|
10
10
|
declare type RenderTargetTexture = import("./Textures/renderTargetTexture").RenderTargetTexture;
|
|
11
11
|
/** @internal */
|
|
12
|
-
export
|
|
12
|
+
export type MaterialPluginCreated = {};
|
|
13
13
|
/** @internal */
|
|
14
|
-
export
|
|
14
|
+
export type MaterialPluginDisposed = {
|
|
15
15
|
forceDisposeTextures?: boolean;
|
|
16
16
|
};
|
|
17
17
|
/** @internal */
|
|
18
|
-
export
|
|
18
|
+
export type MaterialPluginHasTexture = {
|
|
19
19
|
hasTexture: boolean;
|
|
20
20
|
texture: BaseTexture;
|
|
21
21
|
};
|
|
22
22
|
/** @internal */
|
|
23
|
-
export
|
|
23
|
+
export type MaterialPluginIsReadyForSubMesh = {
|
|
24
24
|
isReadyForSubMesh: boolean;
|
|
25
25
|
defines: MaterialDefines;
|
|
26
26
|
subMesh: SubMesh;
|
|
27
27
|
};
|
|
28
28
|
/** @internal */
|
|
29
|
-
export
|
|
29
|
+
export type MaterialPluginGetDefineNames = {
|
|
30
30
|
defineNames?: {
|
|
31
31
|
[name: string]: {
|
|
32
32
|
type: string;
|
|
@@ -35,7 +35,7 @@ export declare type MaterialPluginGetDefineNames = {
|
|
|
35
35
|
};
|
|
36
36
|
};
|
|
37
37
|
/** @internal */
|
|
38
|
-
export
|
|
38
|
+
export type MaterialPluginPrepareEffect = {
|
|
39
39
|
defines: MaterialDefines;
|
|
40
40
|
fallbacks: EffectFallbacks;
|
|
41
41
|
fallbackRank: number;
|
|
@@ -47,36 +47,36 @@ export declare type MaterialPluginPrepareEffect = {
|
|
|
47
47
|
mesh: AbstractMesh;
|
|
48
48
|
};
|
|
49
49
|
/** @internal */
|
|
50
|
-
export
|
|
50
|
+
export type MaterialPluginPrepareDefines = {
|
|
51
51
|
defines: MaterialDefines;
|
|
52
52
|
mesh: AbstractMesh;
|
|
53
53
|
};
|
|
54
54
|
/** @internal */
|
|
55
|
-
export
|
|
55
|
+
export type MaterialPluginPrepareUniformBuffer = {
|
|
56
56
|
ubo: UniformBuffer;
|
|
57
57
|
};
|
|
58
58
|
/** @internal */
|
|
59
|
-
export
|
|
59
|
+
export type MaterialPluginBindForSubMesh = {
|
|
60
60
|
subMesh: SubMesh;
|
|
61
61
|
};
|
|
62
62
|
/** @internal */
|
|
63
|
-
export
|
|
63
|
+
export type MaterialPluginGetAnimatables = {
|
|
64
64
|
animatables: IAnimatable[];
|
|
65
65
|
};
|
|
66
66
|
/** @internal */
|
|
67
|
-
export
|
|
67
|
+
export type MaterialPluginGetActiveTextures = {
|
|
68
68
|
activeTextures: BaseTexture[];
|
|
69
69
|
};
|
|
70
70
|
/** @internal */
|
|
71
|
-
export
|
|
71
|
+
export type MaterialPluginFillRenderTargetTextures = {
|
|
72
72
|
renderTargets: SmartArray<RenderTargetTexture>;
|
|
73
73
|
};
|
|
74
74
|
/** @internal */
|
|
75
|
-
export
|
|
75
|
+
export type MaterialPluginHasRenderTargetTextures = {
|
|
76
76
|
hasRenderTargetTextures: boolean;
|
|
77
77
|
};
|
|
78
78
|
/** @internal */
|
|
79
|
-
export
|
|
79
|
+
export type MaterialPluginHardBindForSubMesh = {
|
|
80
80
|
subMesh: SubMesh;
|
|
81
81
|
};
|
|
82
82
|
/**
|
|
@@ -79,7 +79,7 @@ export declare class MaterialPluginManager {
|
|
|
79
79
|
/**
|
|
80
80
|
* Type for plugin material factories.
|
|
81
81
|
*/
|
|
82
|
-
export
|
|
82
|
+
export type PluginMaterialFactory = (material: Material) => Nullable<MaterialPluginBase>;
|
|
83
83
|
/**
|
|
84
84
|
* Registers a new material plugin through a factory, or updates it. This makes the plugin available to all materials instantiated after its registration.
|
|
85
85
|
* @param pluginName The plugin name
|
|
@@ -7,22 +7,6 @@ import { RegisterClass } from "../Misc/typeStore.js";
|
|
|
7
7
|
* @see https://doc.babylonjs.com/features/featuresDeepDive/materials/using/multiMaterials
|
|
8
8
|
*/
|
|
9
9
|
export class MultiMaterial extends Material {
|
|
10
|
-
/**
|
|
11
|
-
* Instantiates a new Multi Material
|
|
12
|
-
* A multi-material is used to apply different materials to different parts of the same object without the need of
|
|
13
|
-
* separate meshes. This can be use to improve performances.
|
|
14
|
-
* @see https://doc.babylonjs.com/features/featuresDeepDive/materials/using/multiMaterials
|
|
15
|
-
* @param name Define the name in the scene
|
|
16
|
-
* @param scene Define the scene the material belongs to
|
|
17
|
-
*/
|
|
18
|
-
constructor(name, scene) {
|
|
19
|
-
super(name, scene, true);
|
|
20
|
-
/** @internal */
|
|
21
|
-
this._waitingSubMaterialsUniqueIds = [];
|
|
22
|
-
this.getScene().multiMaterials.push(this);
|
|
23
|
-
this.subMaterials = new Array();
|
|
24
|
-
this._storeEffectOnSubMeshes = true; // multimaterial is considered like a push material
|
|
25
|
-
}
|
|
26
10
|
/**
|
|
27
11
|
* Gets or Sets the list of Materials used within the multi material.
|
|
28
12
|
* They need to be ordered according to the submeshes order in the associated mesh
|
|
@@ -41,6 +25,22 @@ export class MultiMaterial extends Material {
|
|
|
41
25
|
getChildren() {
|
|
42
26
|
return this.subMaterials;
|
|
43
27
|
}
|
|
28
|
+
/**
|
|
29
|
+
* Instantiates a new Multi Material
|
|
30
|
+
* A multi-material is used to apply different materials to different parts of the same object without the need of
|
|
31
|
+
* separate meshes. This can be use to improve performances.
|
|
32
|
+
* @see https://doc.babylonjs.com/features/featuresDeepDive/materials/using/multiMaterials
|
|
33
|
+
* @param name Define the name in the scene
|
|
34
|
+
* @param scene Define the scene the material belongs to
|
|
35
|
+
*/
|
|
36
|
+
constructor(name, scene) {
|
|
37
|
+
super(name, scene, true);
|
|
38
|
+
/** @internal */
|
|
39
|
+
this._waitingSubMaterialsUniqueIds = [];
|
|
40
|
+
this.getScene().multiMaterials.push(this);
|
|
41
|
+
this.subMaterials = new Array();
|
|
42
|
+
this._storeEffectOnSubMeshes = true; // multimaterial is considered like a push material
|
|
43
|
+
}
|
|
44
44
|
_hookArray(array) {
|
|
45
45
|
const oldPush = array.push;
|
|
46
46
|
array.push = (...items) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"multiMaterial.js","sourceRoot":"","sources":["../../../../lts/core/generated/Materials/multiMaterial.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Nullable } from \"../types\";\r\nimport type { Scene } from \"../scene\";\r\nimport type { AbstractMesh } from \"../Meshes/abstractMesh\";\r\nimport type { SubMesh } from \"../Meshes/subMesh\";\r\nimport type { BaseTexture } from \"../Materials/Textures/baseTexture\";\r\nimport { Material } from \"../Materials/material\";\r\nimport { Tags } from \"../Misc/tags\";\r\nimport { RegisterClass } from \"../Misc/typeStore\";\r\n\r\n/**\r\n * A multi-material is used to apply different materials to different parts of the same object without the need of\r\n * separate meshes. This can be use to improve performances.\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/materials/using/multiMaterials\r\n */\r\nexport class MultiMaterial extends Material {\r\n private _subMaterials: Nullable<Material>[];\r\n /** @internal */\r\n public _waitingSubMaterialsUniqueIds: string[] = [];\r\n\r\n /**\r\n * Gets or Sets the list of Materials used within the multi material.\r\n * They need to be ordered according to the submeshes order in the associated mesh\r\n */\r\n public get subMaterials(): Nullable<Material>[] {\r\n return this._subMaterials;\r\n }\r\n\r\n public set subMaterials(value: Nullable<Material>[]) {\r\n this._subMaterials = value;\r\n this._hookArray(value);\r\n }\r\n\r\n /**\r\n * Function used to align with Node.getChildren()\r\n * @returns the list of Materials used within the multi material\r\n */\r\n public getChildren(): Nullable<Material>[] {\r\n return this.subMaterials;\r\n }\r\n\r\n /**\r\n * Instantiates a new Multi Material\r\n * A multi-material is used to apply different materials to different parts of the same object without the need of\r\n * separate meshes. This can be use to improve performances.\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/materials/using/multiMaterials\r\n * @param name Define the name in the scene\r\n * @param scene Define the scene the material belongs to\r\n */\r\n constructor(name: string, scene?: Scene) {\r\n super(name, scene, true);\r\n\r\n this.getScene().multiMaterials.push(this);\r\n\r\n this.subMaterials = new Array<Material>();\r\n\r\n this._storeEffectOnSubMeshes = true; // multimaterial is considered like a push material\r\n }\r\n\r\n private _hookArray(array: Nullable<Material>[]): void {\r\n const oldPush = array.push;\r\n array.push = (...items: Nullable<Material>[]) => {\r\n const result = oldPush.apply(array, items);\r\n\r\n this._markAllSubMeshesAsTexturesDirty();\r\n\r\n return result;\r\n };\r\n\r\n const oldSplice = array.splice;\r\n array.splice = (index: number, deleteCount?: number) => {\r\n const deleted = oldSplice.apply(array, [index, deleteCount]);\r\n\r\n this._markAllSubMeshesAsTexturesDirty();\r\n\r\n return deleted;\r\n };\r\n }\r\n\r\n /**\r\n * Get one of the submaterial by its index in the submaterials array\r\n * @param index The index to look the sub material at\r\n * @returns The Material if the index has been defined\r\n */\r\n public getSubMaterial(index: number): Nullable<Material> {\r\n if (index < 0 || index >= this.subMaterials.length) {\r\n return this.getScene().defaultMaterial;\r\n }\r\n\r\n return this.subMaterials[index];\r\n }\r\n\r\n /**\r\n * Get the list of active textures for the whole sub materials list.\r\n * @returns All the textures that will be used during the rendering\r\n */\r\n public getActiveTextures(): BaseTexture[] {\r\n return super.getActiveTextures().concat(\r\n ...this.subMaterials.map((subMaterial) => {\r\n if (subMaterial) {\r\n return subMaterial.getActiveTextures();\r\n } else {\r\n return [];\r\n }\r\n })\r\n );\r\n }\r\n\r\n /**\r\n * Specifies if any sub-materials of this multi-material use a given texture.\r\n * @param texture Defines the texture to check against this multi-material's sub-materials.\r\n * @returns A boolean specifying if any sub-material of this multi-material uses the texture.\r\n */\r\n public hasTexture(texture: BaseTexture): boolean {\r\n if (super.hasTexture(texture)) {\r\n return true;\r\n }\r\n\r\n for (let i = 0; i < this.subMaterials.length; i++) {\r\n if (this.subMaterials[i]?.hasTexture(texture)) {\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n\r\n /**\r\n * Gets the current class name of the material e.g. \"MultiMaterial\"\r\n * Mainly use in serialization.\r\n * @returns the class name\r\n */\r\n public getClassName(): string {\r\n return \"MultiMaterial\";\r\n }\r\n\r\n /**\r\n * Checks if the material is ready to render the requested sub mesh\r\n * @param mesh Define the mesh the submesh belongs to\r\n * @param subMesh Define the sub mesh to look readiness for\r\n * @param useInstances Define whether or not the material is used with instances\r\n * @returns true if ready, otherwise false\r\n */\r\n public isReadyForSubMesh(mesh: AbstractMesh, subMesh: SubMesh, useInstances?: boolean): boolean {\r\n for (let index = 0; index < this.subMaterials.length; index++) {\r\n const subMaterial = this.subMaterials[index];\r\n if (subMaterial) {\r\n if (subMaterial._storeEffectOnSubMeshes) {\r\n if (!subMaterial.isReadyForSubMesh(mesh, subMesh, useInstances)) {\r\n return false;\r\n }\r\n continue;\r\n }\r\n\r\n if (!subMaterial.isReady(mesh)) {\r\n return false;\r\n }\r\n }\r\n }\r\n\r\n return true;\r\n }\r\n\r\n /**\r\n * Clones the current material and its related sub materials\r\n * @param name Define the name of the newly cloned material\r\n * @param cloneChildren Define if submaterial will be cloned or shared with the parent instance\r\n * @returns the cloned material\r\n */\r\n public clone(name: string, cloneChildren?: boolean): MultiMaterial {\r\n const newMultiMaterial = new MultiMaterial(name, this.getScene());\r\n\r\n for (let index = 0; index < this.subMaterials.length; index++) {\r\n let subMaterial: Nullable<Material> = null;\r\n const current = this.subMaterials[index];\r\n if (cloneChildren && current) {\r\n subMaterial = current.clone(name + \"-\" + current.name);\r\n } else {\r\n subMaterial = this.subMaterials[index];\r\n }\r\n newMultiMaterial.subMaterials.push(subMaterial);\r\n }\r\n\r\n return newMultiMaterial;\r\n }\r\n\r\n /**\r\n * Serializes the materials into a JSON representation.\r\n * @returns the JSON representation\r\n */\r\n public serialize(): any {\r\n const serializationObject: any = {};\r\n\r\n serializationObject.name = this.name;\r\n serializationObject.id = this.id;\r\n serializationObject.uniqueId = this.uniqueId;\r\n if (Tags) {\r\n serializationObject.tags = Tags.GetTags(this);\r\n }\r\n serializationObject.materialsUniqueIds = [];\r\n serializationObject.materials = [];\r\n\r\n for (let matIndex = 0; matIndex < this.subMaterials.length; matIndex++) {\r\n const subMat = this.subMaterials[matIndex];\r\n\r\n if (subMat) {\r\n serializationObject.materialsUniqueIds.push(subMat.uniqueId);\r\n serializationObject.materials.push(subMat.id);\r\n } else {\r\n serializationObject.materialsUniqueIds.push(null);\r\n serializationObject.materials.push(null);\r\n }\r\n }\r\n\r\n return serializationObject;\r\n }\r\n\r\n /**\r\n * Dispose the material and release its associated resources\r\n * @param forceDisposeEffect Define if we want to force disposing the associated effect (if false the shader is not released and could be reuse later on)\r\n * @param forceDisposeTextures Define if we want to force disposing the associated textures (if false, they will not be disposed and can still be use elsewhere in the app)\r\n * @param forceDisposeChildren Define if we want to force disposing the associated submaterials (if false, they will not be disposed and can still be use elsewhere in the app)\r\n */\r\n public dispose(forceDisposeEffect?: boolean, forceDisposeTextures?: boolean, forceDisposeChildren?: boolean): void {\r\n const scene = this.getScene();\r\n if (!scene) {\r\n return;\r\n }\r\n\r\n if (forceDisposeChildren) {\r\n for (let index = 0; index < this.subMaterials.length; index++) {\r\n const subMaterial = this.subMaterials[index];\r\n if (subMaterial) {\r\n subMaterial.dispose(forceDisposeEffect, forceDisposeTextures);\r\n }\r\n }\r\n }\r\n\r\n const index = scene.multiMaterials.indexOf(this);\r\n if (index >= 0) {\r\n scene.multiMaterials.splice(index, 1);\r\n }\r\n\r\n super.dispose(forceDisposeEffect, forceDisposeTextures);\r\n }\r\n\r\n /**\r\n * Creates a MultiMaterial from parsed MultiMaterial data.\r\n * @param parsedMultiMaterial defines parsed MultiMaterial data.\r\n * @param scene defines the hosting scene\r\n * @returns a new MultiMaterial\r\n */\r\n public static ParseMultiMaterial(parsedMultiMaterial: any, scene: Scene): MultiMaterial {\r\n const multiMaterial = new MultiMaterial(parsedMultiMaterial.name, scene);\r\n\r\n multiMaterial.id = parsedMultiMaterial.id;\r\n multiMaterial._loadedUniqueId = parsedMultiMaterial.uniqueId;\r\n\r\n if (Tags) {\r\n Tags.AddTagsTo(multiMaterial, parsedMultiMaterial.tags);\r\n }\r\n\r\n if (parsedMultiMaterial.materialsUniqueIds) {\r\n multiMaterial._waitingSubMaterialsUniqueIds = parsedMultiMaterial.materialsUniqueIds;\r\n } else {\r\n parsedMultiMaterial.materials.forEach((subMatId: string) => multiMaterial.subMaterials.push(scene.getLastMaterialById(subMatId)));\r\n }\r\n\r\n return multiMaterial;\r\n }\r\n}\r\n\r\nRegisterClass(\"BABYLON.MultiMaterial\", MultiMaterial);\r\n"]}
|
|
1
|
+
{"version":3,"file":"multiMaterial.js","sourceRoot":"","sources":["../../../../lts/core/generated/Materials/multiMaterial.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Nullable } from \"../types\";\r\nimport type { Scene } from \"../scene\";\r\nimport type { AbstractMesh } from \"../Meshes/abstractMesh\";\r\nimport type { SubMesh } from \"../Meshes/subMesh\";\r\nimport type { BaseTexture } from \"../Materials/Textures/baseTexture\";\r\nimport { Material } from \"../Materials/material\";\r\nimport { Tags } from \"../Misc/tags\";\r\nimport { RegisterClass } from \"../Misc/typeStore\";\r\n\r\n/**\r\n * A multi-material is used to apply different materials to different parts of the same object without the need of\r\n * separate meshes. This can be use to improve performances.\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/materials/using/multiMaterials\r\n */\r\nexport class MultiMaterial extends Material {\r\n private _subMaterials: Nullable<Material>[];\r\n /** @internal */\r\n public _waitingSubMaterialsUniqueIds: string[] = [];\r\n\r\n /**\r\n * Gets or Sets the list of Materials used within the multi material.\r\n * They need to be ordered according to the submeshes order in the associated mesh\r\n */\r\n public get subMaterials(): Nullable<Material>[] {\r\n return this._subMaterials;\r\n }\r\n\r\n public set subMaterials(value: Nullable<Material>[]) {\r\n this._subMaterials = value;\r\n this._hookArray(value);\r\n }\r\n\r\n /**\r\n * Function used to align with Node.getChildren()\r\n * @returns the list of Materials used within the multi material\r\n */\r\n public getChildren(): Nullable<Material>[] {\r\n return this.subMaterials;\r\n }\r\n\r\n /**\r\n * Instantiates a new Multi Material\r\n * A multi-material is used to apply different materials to different parts of the same object without the need of\r\n * separate meshes. This can be use to improve performances.\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/materials/using/multiMaterials\r\n * @param name Define the name in the scene\r\n * @param scene Define the scene the material belongs to\r\n */\r\n constructor(name: string, scene?: Scene) {\r\n super(name, scene, true);\r\n\r\n this.getScene().multiMaterials.push(this);\r\n\r\n this.subMaterials = new Array<Material>();\r\n\r\n this._storeEffectOnSubMeshes = true; // multimaterial is considered like a push material\r\n }\r\n\r\n private _hookArray(array: Nullable<Material>[]): void {\r\n const oldPush = array.push;\r\n array.push = (...items: Nullable<Material>[]) => {\r\n const result = oldPush.apply(array, items);\r\n\r\n this._markAllSubMeshesAsTexturesDirty();\r\n\r\n return result;\r\n };\r\n\r\n const oldSplice = array.splice;\r\n array.splice = (index: number, deleteCount?: number) => {\r\n const deleted = oldSplice.apply(array, [index, deleteCount]);\r\n\r\n this._markAllSubMeshesAsTexturesDirty();\r\n\r\n return deleted;\r\n };\r\n }\r\n\r\n /**\r\n * Get one of the submaterial by its index in the submaterials array\r\n * @param index The index to look the sub material at\r\n * @returns The Material if the index has been defined\r\n */\r\n public getSubMaterial(index: number): Nullable<Material> {\r\n if (index < 0 || index >= this.subMaterials.length) {\r\n return this.getScene().defaultMaterial;\r\n }\r\n\r\n return this.subMaterials[index];\r\n }\r\n\r\n /**\r\n * Get the list of active textures for the whole sub materials list.\r\n * @returns All the textures that will be used during the rendering\r\n */\r\n public getActiveTextures(): BaseTexture[] {\r\n return super.getActiveTextures().concat(\r\n ...this.subMaterials.map((subMaterial) => {\r\n if (subMaterial) {\r\n return subMaterial.getActiveTextures();\r\n } else {\r\n return [];\r\n }\r\n })\r\n );\r\n }\r\n\r\n /**\r\n * Specifies if any sub-materials of this multi-material use a given texture.\r\n * @param texture Defines the texture to check against this multi-material's sub-materials.\r\n * @returns A boolean specifying if any sub-material of this multi-material uses the texture.\r\n */\r\n public hasTexture(texture: BaseTexture): boolean {\r\n if (super.hasTexture(texture)) {\r\n return true;\r\n }\r\n\r\n for (let i = 0; i < this.subMaterials.length; i++) {\r\n if (this.subMaterials[i]?.hasTexture(texture)) {\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n\r\n /**\r\n * Gets the current class name of the material e.g. \"MultiMaterial\"\r\n * Mainly use in serialization.\r\n * @returns the class name\r\n */\r\n public getClassName(): string {\r\n return \"MultiMaterial\";\r\n }\r\n\r\n /**\r\n * Checks if the material is ready to render the requested sub mesh\r\n * @param mesh Define the mesh the submesh belongs to\r\n * @param subMesh Define the sub mesh to look readiness for\r\n * @param useInstances Define whether or not the material is used with instances\r\n * @returns true if ready, otherwise false\r\n */\r\n public isReadyForSubMesh(mesh: AbstractMesh, subMesh: SubMesh, useInstances?: boolean): boolean {\r\n for (let index = 0; index < this.subMaterials.length; index++) {\r\n const subMaterial = this.subMaterials[index];\r\n if (subMaterial) {\r\n if (subMaterial._storeEffectOnSubMeshes) {\r\n if (!subMaterial.isReadyForSubMesh(mesh, subMesh, useInstances)) {\r\n return false;\r\n }\r\n continue;\r\n }\r\n\r\n if (!subMaterial.isReady(mesh)) {\r\n return false;\r\n }\r\n }\r\n }\r\n\r\n return true;\r\n }\r\n\r\n /**\r\n * Clones the current material and its related sub materials\r\n * @param name Define the name of the newly cloned material\r\n * @param cloneChildren Define if submaterial will be cloned or shared with the parent instance\r\n * @returns the cloned material\r\n */\r\n public clone(name: string, cloneChildren?: boolean): MultiMaterial {\r\n const newMultiMaterial = new MultiMaterial(name, this.getScene());\r\n\r\n for (let index = 0; index < this.subMaterials.length; index++) {\r\n let subMaterial: Nullable<Material> = null;\r\n const current = this.subMaterials[index];\r\n if (cloneChildren && current) {\r\n subMaterial = current.clone(name + \"-\" + current.name);\r\n } else {\r\n subMaterial = this.subMaterials[index];\r\n }\r\n newMultiMaterial.subMaterials.push(subMaterial);\r\n }\r\n\r\n return newMultiMaterial;\r\n }\r\n\r\n /**\r\n * Serializes the materials into a JSON representation.\r\n * @returns the JSON representation\r\n */\r\n public serialize(): any {\r\n const serializationObject: any = {};\r\n\r\n serializationObject.name = this.name;\r\n serializationObject.id = this.id;\r\n serializationObject.uniqueId = this.uniqueId;\r\n if (Tags) {\r\n serializationObject.tags = Tags.GetTags(this);\r\n }\r\n serializationObject.materialsUniqueIds = [];\r\n serializationObject.materials = [];\r\n\r\n for (let matIndex = 0; matIndex < this.subMaterials.length; matIndex++) {\r\n const subMat = this.subMaterials[matIndex];\r\n\r\n if (subMat) {\r\n serializationObject.materialsUniqueIds.push(subMat.uniqueId);\r\n serializationObject.materials.push(subMat.id);\r\n } else {\r\n serializationObject.materialsUniqueIds.push(null);\r\n serializationObject.materials.push(null);\r\n }\r\n }\r\n\r\n return serializationObject;\r\n }\r\n\r\n /**\r\n * Dispose the material and release its associated resources\r\n * @param forceDisposeEffect Define if we want to force disposing the associated effect (if false the shader is not released and could be reuse later on)\r\n * @param forceDisposeTextures Define if we want to force disposing the associated textures (if false, they will not be disposed and can still be use elsewhere in the app)\r\n * @param forceDisposeChildren Define if we want to force disposing the associated submaterials (if false, they will not be disposed and can still be use elsewhere in the app)\r\n */\r\n public dispose(forceDisposeEffect?: boolean, forceDisposeTextures?: boolean, forceDisposeChildren?: boolean): void {\r\n const scene = this.getScene();\r\n if (!scene) {\r\n return;\r\n }\r\n\r\n if (forceDisposeChildren) {\r\n for (let index = 0; index < this.subMaterials.length; index++) {\r\n const subMaterial = this.subMaterials[index];\r\n if (subMaterial) {\r\n subMaterial.dispose(forceDisposeEffect, forceDisposeTextures);\r\n }\r\n }\r\n }\r\n\r\n const index = scene.multiMaterials.indexOf(this);\r\n if (index >= 0) {\r\n scene.multiMaterials.splice(index, 1);\r\n }\r\n\r\n super.dispose(forceDisposeEffect, forceDisposeTextures);\r\n }\r\n\r\n /**\r\n * Creates a MultiMaterial from parsed MultiMaterial data.\r\n * @param parsedMultiMaterial defines parsed MultiMaterial data.\r\n * @param scene defines the hosting scene\r\n * @returns a new MultiMaterial\r\n */\r\n public static ParseMultiMaterial(parsedMultiMaterial: any, scene: Scene): MultiMaterial {\r\n const multiMaterial = new MultiMaterial(parsedMultiMaterial.name, scene);\r\n\r\n multiMaterial.id = parsedMultiMaterial.id;\r\n multiMaterial._loadedUniqueId = parsedMultiMaterial.uniqueId;\r\n\r\n if (Tags) {\r\n Tags.AddTagsTo(multiMaterial, parsedMultiMaterial.tags);\r\n }\r\n\r\n if (parsedMultiMaterial.materialsUniqueIds) {\r\n multiMaterial._waitingSubMaterialsUniqueIds = parsedMultiMaterial.materialsUniqueIds;\r\n } else {\r\n parsedMultiMaterial.materials.forEach((subMatId: string) => multiMaterial.subMaterials.push(scene.getLastMaterialById(subMatId)));\r\n }\r\n\r\n return multiMaterial;\r\n }\r\n}\r\n\r\nRegisterClass(\"BABYLON.MultiMaterial\", MultiMaterial);\r\n"]}
|
|
@@ -25,6 +25,20 @@ class MapMap {
|
|
|
25
25
|
* Class that can be used to wrap a base material to generate accurate shadows when using custom vertex/fragment code in the base material
|
|
26
26
|
*/
|
|
27
27
|
export class ShadowDepthWrapper {
|
|
28
|
+
/** Gets the standalone status of the wrapper */
|
|
29
|
+
get standalone() {
|
|
30
|
+
var _a, _b;
|
|
31
|
+
return (_b = (_a = this._options) === null || _a === void 0 ? void 0 : _a.standalone) !== null && _b !== void 0 ? _b : false;
|
|
32
|
+
}
|
|
33
|
+
/** Gets the base material the wrapper is built upon */
|
|
34
|
+
get baseMaterial() {
|
|
35
|
+
return this._baseMaterial;
|
|
36
|
+
}
|
|
37
|
+
/** Gets the doNotInjectCode status of the wrapper */
|
|
38
|
+
get doNotInjectCode() {
|
|
39
|
+
var _a, _b;
|
|
40
|
+
return (_b = (_a = this._options) === null || _a === void 0 ? void 0 : _a.doNotInjectCode) !== null && _b !== void 0 ? _b : false;
|
|
41
|
+
}
|
|
28
42
|
/**
|
|
29
43
|
* Instantiate a new shadow depth wrapper.
|
|
30
44
|
* It works by injecting some specific code in the vertex/fragment shaders of the base material and is used by a shadow generator to
|
|
@@ -63,20 +77,6 @@ export class ShadowDepthWrapper {
|
|
|
63
77
|
this._subMeshToDepthWrapper.mm.delete(params.subMesh); // trigger a depth effect recreation
|
|
64
78
|
});
|
|
65
79
|
}
|
|
66
|
-
/** Gets the standalone status of the wrapper */
|
|
67
|
-
get standalone() {
|
|
68
|
-
var _a, _b;
|
|
69
|
-
return (_b = (_a = this._options) === null || _a === void 0 ? void 0 : _a.standalone) !== null && _b !== void 0 ? _b : false;
|
|
70
|
-
}
|
|
71
|
-
/** Gets the base material the wrapper is built upon */
|
|
72
|
-
get baseMaterial() {
|
|
73
|
-
return this._baseMaterial;
|
|
74
|
-
}
|
|
75
|
-
/** Gets the doNotInjectCode status of the wrapper */
|
|
76
|
-
get doNotInjectCode() {
|
|
77
|
-
var _a, _b;
|
|
78
|
-
return (_b = (_a = this._options) === null || _a === void 0 ? void 0 : _a.doNotInjectCode) !== null && _b !== void 0 ? _b : false;
|
|
79
|
-
}
|
|
80
80
|
/**
|
|
81
81
|
* Gets the effect to use to generate the depth map
|
|
82
82
|
* @param subMesh subMesh to get the effect for
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shadowDepthWrapper.js","sourceRoot":"","sources":["../../../../lts/core/generated/Materials/shadowDepthWrapper.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Observer } from \"../Misc/observable\";\r\nimport type { Nullable } from \"../types\";\r\nimport type { Scene } from \"../scene\";\r\nimport type { SubMesh } from \"../Meshes/subMesh\";\r\nimport type { Material } from \"./material\";\r\nimport type { IEffectCreationOptions } from \"./effect\";\r\nimport { Effect } from \"./effect\";\r\nimport type { AbstractMesh } from \"../Meshes/abstractMesh\";\r\nimport type { Node } from \"../node\";\r\nimport type { ShadowGenerator } from \"../Lights/Shadows/shadowGenerator\";\r\nimport { RandomGUID } from \"../Misc/guid\";\r\nimport { DrawWrapper } from \"./drawWrapper\";\r\nimport { EngineStore } from \"../Engines/engineStore\";\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 /** Set doNotInjectCode if the specific shadow map generation code is already implemented by the material. That will prevent this code to be injected twice by ShadowDepthWrapper */\r\n doNotInjectCode?: 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 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, number]>;\r\n private _subMeshToDepthWrapper: MapMap<\r\n Nullable<SubMesh>,\r\n ShadowGenerator,\r\n { drawWrapper: Array<Nullable<DrawWrapper>>; mainDrawWrapper: DrawWrapper; depthDefines: string; token: string }\r\n >; // 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 /** Gets the doNotInjectCode status of the wrapper */\r\n public get doNotInjectCode(): boolean {\r\n return this._options?.doNotInjectCode ?? false;\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/features/featuresDeepDive/lights/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 ?? <Scene>EngineStore.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(\r\n 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, this._scene.getEngine().currentRenderPassId]);\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 origEffectAndRenderPassId = this._subMeshToEffect.get(subMesh);\r\n\r\n if (!origEffectAndRenderPassId) {\r\n return null;\r\n }\r\n\r\n const [origEffect, origRenderPassId] = origEffectAndRenderPassId;\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._getDrawWrapper(origRenderPassId)?.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 const 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 const uniforms = origEffect.getUniformNames().slice();\r\n\r\n // the depth effect is either out of date or has not been created yet\r\n let vertexCode = origEffect.vertexSourceCodeBeforeMigration,\r\n fragmentCode = origEffect.fragmentSourceCodeBeforeMigration;\r\n\r\n if (!this.doNotInjectCode) {\r\n // vertex code\r\n const vertexNormalBiasCode =\r\n this._options && this._options.remappedVariables\r\n ? `#include<shadowMapVertexNormalBias>(${this._options.remappedVariables.join(\",\")})`\r\n : Effect.IncludesShadersStore[\"shadowMapVertexNormalBias\"],\r\n vertexMetricCode =\r\n this._options && this._options.remappedVariables\r\n ? `#include<shadowMapVertexMetric>(${this._options.remappedVariables.join(\",\")})`\r\n : Effect.IncludesShadersStore[\"shadowMapVertexMetric\"],\r\n fragmentSoftTransparentShadow =\r\n this._options && this._options.remappedVariables\r\n ? `#include<shadowMapFragmentSoftTransparentShadow>(${this._options.remappedVariables.join(\",\")})`\r\n : 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 =\r\n 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 uniforms.push(\"biasAndScaleSM\", \"depthValuesSM\", \"lightDataSM\", \"softTransparentShadowSM\");\r\n }\r\n\r\n params.mainDrawWrapper.effect = engine.createEffect(\r\n {\r\n vertexSource: vertexCode,\r\n fragmentSource: fragmentCode,\r\n vertexToken: params.token,\r\n fragmentToken: params.token,\r\n },\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 },\r\n engine\r\n );\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"]}
|
|
1
|
+
{"version":3,"file":"shadowDepthWrapper.js","sourceRoot":"","sources":["../../../../lts/core/generated/Materials/shadowDepthWrapper.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Observer } from \"../Misc/observable\";\r\nimport type { Nullable } from \"../types\";\r\nimport type { Scene } from \"../scene\";\r\nimport type { SubMesh } from \"../Meshes/subMesh\";\r\nimport type { Material } from \"./material\";\r\nimport type { IEffectCreationOptions } from \"./effect\";\r\nimport { Effect } from \"./effect\";\r\nimport type { AbstractMesh } from \"../Meshes/abstractMesh\";\r\nimport type { Node } from \"../node\";\r\nimport type { ShadowGenerator } from \"../Lights/Shadows/shadowGenerator\";\r\nimport { RandomGUID } from \"../Misc/guid\";\r\nimport { DrawWrapper } from \"./drawWrapper\";\r\nimport { EngineStore } from \"../Engines/engineStore\";\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 /** Set doNotInjectCode if the specific shadow map generation code is already implemented by the material. That will prevent this code to be injected twice by ShadowDepthWrapper */\r\n doNotInjectCode?: 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 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, number]>;\r\n private _subMeshToDepthWrapper: MapMap<\r\n Nullable<SubMesh>,\r\n ShadowGenerator,\r\n { drawWrapper: Array<Nullable<DrawWrapper>>; mainDrawWrapper: DrawWrapper; depthDefines: string; token: string }\r\n >; // 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 /** Gets the doNotInjectCode status of the wrapper */\r\n public get doNotInjectCode(): boolean {\r\n return this._options?.doNotInjectCode ?? false;\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/features/featuresDeepDive/lights/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 ?? <Scene>EngineStore.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(\r\n 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, this._scene.getEngine().currentRenderPassId]);\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 origEffectAndRenderPassId = this._subMeshToEffect.get(subMesh);\r\n\r\n if (!origEffectAndRenderPassId) {\r\n return null;\r\n }\r\n\r\n const [origEffect, origRenderPassId] = origEffectAndRenderPassId;\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._getDrawWrapper(origRenderPassId)?.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 const 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 const uniforms = origEffect.getUniformNames().slice();\r\n\r\n // the depth effect is either out of date or has not been created yet\r\n let vertexCode = origEffect.vertexSourceCodeBeforeMigration,\r\n fragmentCode = origEffect.fragmentSourceCodeBeforeMigration;\r\n\r\n if (!this.doNotInjectCode) {\r\n // vertex code\r\n const vertexNormalBiasCode =\r\n this._options && this._options.remappedVariables\r\n ? `#include<shadowMapVertexNormalBias>(${this._options.remappedVariables.join(\",\")})`\r\n : Effect.IncludesShadersStore[\"shadowMapVertexNormalBias\"],\r\n vertexMetricCode =\r\n this._options && this._options.remappedVariables\r\n ? `#include<shadowMapVertexMetric>(${this._options.remappedVariables.join(\",\")})`\r\n : Effect.IncludesShadersStore[\"shadowMapVertexMetric\"],\r\n fragmentSoftTransparentShadow =\r\n this._options && this._options.remappedVariables\r\n ? `#include<shadowMapFragmentSoftTransparentShadow>(${this._options.remappedVariables.join(\",\")})`\r\n : 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 =\r\n 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 uniforms.push(\"biasAndScaleSM\", \"depthValuesSM\", \"lightDataSM\", \"softTransparentShadowSM\");\r\n }\r\n\r\n params.mainDrawWrapper.effect = engine.createEffect(\r\n {\r\n vertexSource: vertexCode,\r\n fragmentSource: fragmentCode,\r\n vertexToken: params.token,\r\n fragmentToken: params.token,\r\n },\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 },\r\n engine\r\n );\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"]}
|
|
@@ -205,106 +205,6 @@ export class StandardMaterialDefines extends MaterialDefines {
|
|
|
205
205
|
* @see https://doc.babylonjs.com/features/featuresDeepDive/materials/using/materials_introduction
|
|
206
206
|
*/
|
|
207
207
|
export class StandardMaterial extends PushMaterial {
|
|
208
|
-
/**
|
|
209
|
-
* Instantiates a new standard material.
|
|
210
|
-
* This is the default material used in Babylon. It is the best trade off between quality
|
|
211
|
-
* and performances.
|
|
212
|
-
* @see https://doc.babylonjs.com/features/featuresDeepDive/materials/using/materials_introduction
|
|
213
|
-
* @param name Define the name of the material in the scene
|
|
214
|
-
* @param scene Define the scene the material belong to
|
|
215
|
-
*/
|
|
216
|
-
constructor(name, scene) {
|
|
217
|
-
super(name, scene);
|
|
218
|
-
this._diffuseTexture = null;
|
|
219
|
-
this._ambientTexture = null;
|
|
220
|
-
this._opacityTexture = null;
|
|
221
|
-
this._reflectionTexture = null;
|
|
222
|
-
this._emissiveTexture = null;
|
|
223
|
-
this._specularTexture = null;
|
|
224
|
-
this._bumpTexture = null;
|
|
225
|
-
this._lightmapTexture = null;
|
|
226
|
-
this._refractionTexture = null;
|
|
227
|
-
/**
|
|
228
|
-
* The color of the material lit by the environmental background lighting.
|
|
229
|
-
* @see https://doc.babylonjs.com/features/featuresDeepDive/materials/using/materials_introduction#ambient-color-example
|
|
230
|
-
*/
|
|
231
|
-
this.ambientColor = new Color3(0, 0, 0);
|
|
232
|
-
/**
|
|
233
|
-
* The basic color of the material as viewed under a light.
|
|
234
|
-
*/
|
|
235
|
-
this.diffuseColor = new Color3(1, 1, 1);
|
|
236
|
-
/**
|
|
237
|
-
* Define how the color and intensity of the highlight given by the light in the material.
|
|
238
|
-
*/
|
|
239
|
-
this.specularColor = new Color3(1, 1, 1);
|
|
240
|
-
/**
|
|
241
|
-
* Define the color of the material as if self lit.
|
|
242
|
-
* This will be mixed in the final result even in the absence of light.
|
|
243
|
-
*/
|
|
244
|
-
this.emissiveColor = new Color3(0, 0, 0);
|
|
245
|
-
/**
|
|
246
|
-
* Defines how sharp are the highlights in the material.
|
|
247
|
-
* The bigger the value the sharper giving a more glossy feeling to the result.
|
|
248
|
-
* Reversely, the smaller the value the blurrier giving a more rough feeling to the result.
|
|
249
|
-
*/
|
|
250
|
-
this.specularPower = 64;
|
|
251
|
-
this._useAlphaFromDiffuseTexture = false;
|
|
252
|
-
this._useEmissiveAsIllumination = false;
|
|
253
|
-
this._linkEmissiveWithDiffuse = false;
|
|
254
|
-
this._useSpecularOverAlpha = false;
|
|
255
|
-
this._useReflectionOverAlpha = false;
|
|
256
|
-
this._disableLighting = false;
|
|
257
|
-
this._useObjectSpaceNormalMap = false;
|
|
258
|
-
this._useParallax = false;
|
|
259
|
-
this._useParallaxOcclusion = false;
|
|
260
|
-
/**
|
|
261
|
-
* Apply a scaling factor that determine which "depth" the height map should reprensent. A value between 0.05 and 0.1 is reasonnable in Parallax, you can reach 0.2 using Parallax Occlusion.
|
|
262
|
-
*/
|
|
263
|
-
this.parallaxScaleBias = 0.05;
|
|
264
|
-
this._roughness = 0;
|
|
265
|
-
/**
|
|
266
|
-
* In case of refraction, define the value of the index of refraction.
|
|
267
|
-
* @see https://doc.babylonjs.com/features/featuresDeepDive/materials/using/reflectionTexture#how-to-obtain-reflections-and-refractions
|
|
268
|
-
*/
|
|
269
|
-
this.indexOfRefraction = 0.98;
|
|
270
|
-
/**
|
|
271
|
-
* Invert the refraction texture alongside the y axis.
|
|
272
|
-
* It can be useful with procedural textures or probe for instance.
|
|
273
|
-
* @see https://doc.babylonjs.com/features/featuresDeepDive/materials/using/reflectionTexture#how-to-obtain-reflections-and-refractions
|
|
274
|
-
*/
|
|
275
|
-
this.invertRefractionY = true;
|
|
276
|
-
/**
|
|
277
|
-
* Defines the alpha limits in alpha test mode.
|
|
278
|
-
*/
|
|
279
|
-
this.alphaCutOff = 0.4;
|
|
280
|
-
this._useLightmapAsShadowmap = false;
|
|
281
|
-
this._useReflectionFresnelFromSpecular = false;
|
|
282
|
-
this._useGlossinessFromSpecularMapAlpha = false;
|
|
283
|
-
this._maxSimultaneousLights = 4;
|
|
284
|
-
this._invertNormalMapX = false;
|
|
285
|
-
this._invertNormalMapY = false;
|
|
286
|
-
this._twoSidedLighting = false;
|
|
287
|
-
this._renderTargets = new SmartArray(16);
|
|
288
|
-
this._worldViewProjectionMatrix = Matrix.Zero();
|
|
289
|
-
this._globalAmbientColor = new Color3(0, 0, 0);
|
|
290
|
-
this._cacheHasRenderTargetTextures = false;
|
|
291
|
-
this.detailMap = new DetailMapConfiguration(this);
|
|
292
|
-
// Setup the default processing configuration to the scene.
|
|
293
|
-
this._attachImageProcessingConfiguration(null);
|
|
294
|
-
this.prePassConfiguration = new PrePassConfiguration();
|
|
295
|
-
this.getRenderTargetTextures = () => {
|
|
296
|
-
this._renderTargets.reset();
|
|
297
|
-
if (StandardMaterial.ReflectionTextureEnabled && this._reflectionTexture && this._reflectionTexture.isRenderTarget) {
|
|
298
|
-
this._renderTargets.push(this._reflectionTexture);
|
|
299
|
-
}
|
|
300
|
-
if (StandardMaterial.RefractionTextureEnabled && this._refractionTexture && this._refractionTexture.isRenderTarget) {
|
|
301
|
-
this._renderTargets.push(this._refractionTexture);
|
|
302
|
-
}
|
|
303
|
-
this._eventInfo.renderTargets = this._renderTargets;
|
|
304
|
-
this._callbackPluginEventFillRenderTargetTextures(this._eventInfo);
|
|
305
|
-
return this._renderTargets;
|
|
306
|
-
};
|
|
307
|
-
}
|
|
308
208
|
/**
|
|
309
209
|
* Gets the image processing configuration used either in this material.
|
|
310
210
|
*/
|
|
@@ -453,6 +353,106 @@ export class StandardMaterial extends PushMaterial {
|
|
|
453
353
|
get canRenderToMRT() {
|
|
454
354
|
return true;
|
|
455
355
|
}
|
|
356
|
+
/**
|
|
357
|
+
* Instantiates a new standard material.
|
|
358
|
+
* This is the default material used in Babylon. It is the best trade off between quality
|
|
359
|
+
* and performances.
|
|
360
|
+
* @see https://doc.babylonjs.com/features/featuresDeepDive/materials/using/materials_introduction
|
|
361
|
+
* @param name Define the name of the material in the scene
|
|
362
|
+
* @param scene Define the scene the material belong to
|
|
363
|
+
*/
|
|
364
|
+
constructor(name, scene) {
|
|
365
|
+
super(name, scene);
|
|
366
|
+
this._diffuseTexture = null;
|
|
367
|
+
this._ambientTexture = null;
|
|
368
|
+
this._opacityTexture = null;
|
|
369
|
+
this._reflectionTexture = null;
|
|
370
|
+
this._emissiveTexture = null;
|
|
371
|
+
this._specularTexture = null;
|
|
372
|
+
this._bumpTexture = null;
|
|
373
|
+
this._lightmapTexture = null;
|
|
374
|
+
this._refractionTexture = null;
|
|
375
|
+
/**
|
|
376
|
+
* The color of the material lit by the environmental background lighting.
|
|
377
|
+
* @see https://doc.babylonjs.com/features/featuresDeepDive/materials/using/materials_introduction#ambient-color-example
|
|
378
|
+
*/
|
|
379
|
+
this.ambientColor = new Color3(0, 0, 0);
|
|
380
|
+
/**
|
|
381
|
+
* The basic color of the material as viewed under a light.
|
|
382
|
+
*/
|
|
383
|
+
this.diffuseColor = new Color3(1, 1, 1);
|
|
384
|
+
/**
|
|
385
|
+
* Define how the color and intensity of the highlight given by the light in the material.
|
|
386
|
+
*/
|
|
387
|
+
this.specularColor = new Color3(1, 1, 1);
|
|
388
|
+
/**
|
|
389
|
+
* Define the color of the material as if self lit.
|
|
390
|
+
* This will be mixed in the final result even in the absence of light.
|
|
391
|
+
*/
|
|
392
|
+
this.emissiveColor = new Color3(0, 0, 0);
|
|
393
|
+
/**
|
|
394
|
+
* Defines how sharp are the highlights in the material.
|
|
395
|
+
* The bigger the value the sharper giving a more glossy feeling to the result.
|
|
396
|
+
* Reversely, the smaller the value the blurrier giving a more rough feeling to the result.
|
|
397
|
+
*/
|
|
398
|
+
this.specularPower = 64;
|
|
399
|
+
this._useAlphaFromDiffuseTexture = false;
|
|
400
|
+
this._useEmissiveAsIllumination = false;
|
|
401
|
+
this._linkEmissiveWithDiffuse = false;
|
|
402
|
+
this._useSpecularOverAlpha = false;
|
|
403
|
+
this._useReflectionOverAlpha = false;
|
|
404
|
+
this._disableLighting = false;
|
|
405
|
+
this._useObjectSpaceNormalMap = false;
|
|
406
|
+
this._useParallax = false;
|
|
407
|
+
this._useParallaxOcclusion = false;
|
|
408
|
+
/**
|
|
409
|
+
* Apply a scaling factor that determine which "depth" the height map should reprensent. A value between 0.05 and 0.1 is reasonnable in Parallax, you can reach 0.2 using Parallax Occlusion.
|
|
410
|
+
*/
|
|
411
|
+
this.parallaxScaleBias = 0.05;
|
|
412
|
+
this._roughness = 0;
|
|
413
|
+
/**
|
|
414
|
+
* In case of refraction, define the value of the index of refraction.
|
|
415
|
+
* @see https://doc.babylonjs.com/features/featuresDeepDive/materials/using/reflectionTexture#how-to-obtain-reflections-and-refractions
|
|
416
|
+
*/
|
|
417
|
+
this.indexOfRefraction = 0.98;
|
|
418
|
+
/**
|
|
419
|
+
* Invert the refraction texture alongside the y axis.
|
|
420
|
+
* It can be useful with procedural textures or probe for instance.
|
|
421
|
+
* @see https://doc.babylonjs.com/features/featuresDeepDive/materials/using/reflectionTexture#how-to-obtain-reflections-and-refractions
|
|
422
|
+
*/
|
|
423
|
+
this.invertRefractionY = true;
|
|
424
|
+
/**
|
|
425
|
+
* Defines the alpha limits in alpha test mode.
|
|
426
|
+
*/
|
|
427
|
+
this.alphaCutOff = 0.4;
|
|
428
|
+
this._useLightmapAsShadowmap = false;
|
|
429
|
+
this._useReflectionFresnelFromSpecular = false;
|
|
430
|
+
this._useGlossinessFromSpecularMapAlpha = false;
|
|
431
|
+
this._maxSimultaneousLights = 4;
|
|
432
|
+
this._invertNormalMapX = false;
|
|
433
|
+
this._invertNormalMapY = false;
|
|
434
|
+
this._twoSidedLighting = false;
|
|
435
|
+
this._renderTargets = new SmartArray(16);
|
|
436
|
+
this._worldViewProjectionMatrix = Matrix.Zero();
|
|
437
|
+
this._globalAmbientColor = new Color3(0, 0, 0);
|
|
438
|
+
this._cacheHasRenderTargetTextures = false;
|
|
439
|
+
this.detailMap = new DetailMapConfiguration(this);
|
|
440
|
+
// Setup the default processing configuration to the scene.
|
|
441
|
+
this._attachImageProcessingConfiguration(null);
|
|
442
|
+
this.prePassConfiguration = new PrePassConfiguration();
|
|
443
|
+
this.getRenderTargetTextures = () => {
|
|
444
|
+
this._renderTargets.reset();
|
|
445
|
+
if (StandardMaterial.ReflectionTextureEnabled && this._reflectionTexture && this._reflectionTexture.isRenderTarget) {
|
|
446
|
+
this._renderTargets.push(this._reflectionTexture);
|
|
447
|
+
}
|
|
448
|
+
if (StandardMaterial.RefractionTextureEnabled && this._refractionTexture && this._refractionTexture.isRenderTarget) {
|
|
449
|
+
this._renderTargets.push(this._refractionTexture);
|
|
450
|
+
}
|
|
451
|
+
this._eventInfo.renderTargets = this._renderTargets;
|
|
452
|
+
this._callbackPluginEventFillRenderTargetTextures(this._eventInfo);
|
|
453
|
+
return this._renderTargets;
|
|
454
|
+
};
|
|
455
|
+
}
|
|
456
456
|
/**
|
|
457
457
|
* Gets a boolean indicating that current material needs to register RTT
|
|
458
458
|
*/
|