David Catuhe il y a 8 ans
Parent
commit
05216bfcea

+ 40 - 4
Tools/DevLoader/BabylonLoader.js

@@ -185,11 +185,44 @@ var BABYLONDEVTOOLS;
             }
         }
 
+        Loader.prototype.processDependency = function(settings, dependency, filesToLoad) {
+            if (dependency.dependencies) {
+                for (var i = 0; i < dependency.dependencies.length; i++ ) {
+                    var dependencyName = dependency.dependencies[i];
+                    var parent = settings.dependencies[dependencyName];
+                    this.processDependency(settings, parent, filesToLoad);
+                }
+            }
+
+            for (var i = 0; i< dependency.files.length; i++) {
+                var file = dependency.files[i];
+
+                if (filesToLoad.indexOf(file) === -1) {
+                    filesToLoad.push(file);
+                }
+            }
+        }
+
         Loader.prototype.loadBJSScripts = function (settings) {
+            var loadModules = true;
 
+            // Main bjs files
             if (!useDist) {
-                this.loadScripts(settings.core.files);
-                this.loadScripts(settings.extras.files);
+                var currentConfig = settings.build.currentConfig;
+                var buildConfiguration = settings.buildConfigurations[currentConfig];
+                var filesToLoad = [];
+
+                for (var index = 0; index < buildConfiguration.length; index++) {
+                    var dependencyName = buildConfiguration[index];
+                    var dependency = settings.dependencies[dependencyName];
+                    this.processDependency(settings, dependency, filesToLoad);
+                }
+
+                this.loadScripts(filesToLoad);
+
+                if (currentConfig !== "all") {
+                    loadModules = false;
+                }
             }
             else if (min) {
                 this.loadScript('/dist/preview release/babylon.js');
@@ -198,8 +231,11 @@ var BABYLONDEVTOOLS;
                 this.loadScript('/dist/preview release/babylon.max.js');
             }
 
-            for (var i = 0; i< settings.modules.length; i++) {
-                this.loadModule(settings[settings.modules[i]]);
+            // Modules
+            if (loadModules) {
+                for (var i = 0; i< settings.modules.length; i++) {
+               //     this.loadModule(settings[settings.modules[i]]);
+                }
             }
         }
 

+ 586 - 169
Tools/Gulp/config.json

@@ -2,168 +2,602 @@
     "build": {
         "filename": "babylon.max.js",
         "minFilename": "babylon.js",
-        "minNoWorkerFilename": "babylon.noworker.js",
+        "minWorkerFilename": "babylon.worker.js",
         "minCoreFilename": "babylon.core.js",
         "declarationFilename": "babylon.d.ts",
         "declarationModuleFilename": "babylon.module.d.ts",
         "outputDirectory": "../../dist/preview release",
-        "srcOutputDirectory": "../../src/"
+        "srcOutputDirectory": "../../src/",
+        "currentConfig": "all"
+    },
+    "buildConfigurations": {
+        "all": [
+                "standardMaterial", "pbrMaterial", "freeCamera", "arcRotateCamera", "hemisphericLight", 
+                "pointLight", "directionalLight", "spotLight", "animations", "actions", "sprites", "picking", "collisions",
+                "particles", "solidParticles", "additionalMeshes", "meshBuilder", "audio", "additionalTextures", "shadows",
+                "loader", "userData", "offline", "fresnel", "multiMaterial", "touchCamera", "procedural", "gamepad",
+                "additionalCameras", "postProcesses", "renderingPipeline", "depthRenderer", "additionalPostProcesses",
+                "bones", "hdr"
+        ],
+        "minimal": ["meshBuilder", "standardMaterial", "freeCamera", "hemisphericLight"]
+    },
+    "dependencies" :
+    {
+        "core" :
+        {
+            "files":[
+                "../../src/Math/babylon.math.js",
+                "../../src/babylon.mixins.js",
+                "../../src/Tools/babylon.decorators.js",
+                "../../src/Tools/babylon.observable.js",
+                "../../src/Tools/babylon.smartArray.js",
+                "../../src/Tools/babylon.tools.js",
+                "../../src/States/babylon.alphaCullingState.js",
+                "../../src/States/babylon.depthCullingState.js",
+                "../../src/States/babylon.stencilState.js",
+                "../../src/babylon.engine.js",
+                "../../src/babylon.node.js",
+                "../../src/Culling/babylon.boundingSphere.js",
+                "../../src/Culling/babylon.boundingBox.js",
+                "../../src/Culling/babylon.boundingInfo.js",
+                "../../src/Mesh/babylon.abstractMesh.js",
+                "../../src/Lights/babylon.light.js",
+                "../../src/Cameras/babylon.camera.js",
+                "../../src/Rendering/babylon.renderingManager.js",
+                "../../src/Rendering/babylon.renderingGroup.js",
+                "../../src/babylon.scene.js",
+                "../../src/Mesh/babylon.buffer.js",
+                "../../src/Mesh/babylon.vertexBuffer.js",
+                "../../src/Materials/Textures/babylon.baseTexture.js",
+                "../../src/Materials/Textures/babylon.texture.js",
+                "../../src/Mesh/babylon.mesh.js",
+                "../../src/Mesh/babylon.subMesh.js",
+                "../../src/Materials/babylon.effect.js",
+                "../../src/Materials/babylon.materialHelper.js",
+                "../../src/Materials/babylon.material.js",
+                "../../src/Materials/babylon.pushMaterial.js",
+                "../../src/Mesh/babylon.mesh.vertexData.js",
+                "../../src/Mesh/babylon.geometry.js",
+                "../../src/PostProcess/babylon.postProcessManager.js"                
+            ]
+        },
+        "particles" : 
+        {
+            "files": [
+                "../../src/Particles/babylon.particle.js",
+                "../../src/Particles/babylon.particleSystem.js"
+            ],
+            "dependencies" : [
+                "core"
+            ]
+        }, 
+        "solidParticles" : 
+        {
+            "files": [
+                "../../src/Particles/babylon.solidParticle.js",
+                "../../src/Particles/babylon.solidParticleSystem.js"
+            ],
+            "dependencies" : [
+                "core"
+            ]
+        },         
+        "collisions" : 
+        {
+            "files": [
+                "../../src/Collisions/babylon.collider.js",
+                "../../src/Collisions/babylon.collisionCoordinator.js"
+            ],
+            "dependencies" : [
+                "core"
+            ]
+        },  
+        "picking" : 
+        {
+            "files": [
+                "../../src/Collisions/babylon.pickingInfo.js",
+                "../../src/Culling/babylon.ray.js",
+                "../../src/Debug/babylon.rayHelper.js"
+            ],
+            "dependencies" : [
+                "core"
+            ]
+        },   
+        "sprites" : 
+        {
+            "files": [
+                "../../src/Sprites/babylon.spriteManager.js",
+                "../../src/Sprites/babylon.sprite.js"
+            ],
+            "dependencies" : [
+                "core"
+            ]
+        },         
+        "animations" : 
+        {
+            "files": [
+                "../../src/Animations/babylon.animation.js",
+                "../../src/Animations/babylon.animatable.js",
+                "../../src/Animations/babylon.easing.js"
+            ],
+            "dependencies" : [
+                "core"
+            ]
+        },   
+        "actions" : 
+        {
+            "files": [
+                "../../src/Actions/babylon.condition.js",
+                "../../src/Actions/babylon.action.js",
+                "../../src/Actions/babylon.actionManager.js",
+                "../../src/Actions/babylon.interpolateValueAction.js",
+                "../../src/Actions/babylon.directActions.js"
+            ],
+            "dependencies" : [
+                "core"
+            ]
+        },                             
+        "additionalMeshes" : 
+        {
+            "files": [
+                "../../src/Mesh/babylon.groundMesh.js",
+                "../../src/Mesh/babylon.instancedMesh.js",
+                "../../src/Mesh/babylon.linesMesh.js"
+            ],
+            "dependencies" : [
+                "core"
+            ],
+            "shaders": [
+                "color.vertex",
+                "color.fragment"
+            ]
+        },                               
+        "meshBuilder" : 
+        {
+            "files": [
+                "../../src/Mesh/babylon.meshBuilder.js"
+            ],
+            "dependencies" : [
+                "core",
+                "shaderMaterial"
+            ]
+        },
+        "shaderMaterial" : 
+        {
+            "files": [
+                "../../src/Materials/babylon.shaderMaterial.js"
+            ],
+            "dependencies" : [
+                "core"
+            ]
+        },
+        "standardMaterial" : 
+        {
+            "files": [
+                "../../src/Materials/babylon.standardMaterial.js"
+            ],
+            "dependencies" : [
+                "core"
+            ],
+            "shaders": [
+                "default.vertex",
+                "default.fragment"
+            ],
+            "shaderIncludes": [
+                "bonesDeclaration",
+                "instancesDeclaration",
+                "pointCloudVertexDeclaration",
+                "bumpVertexDeclaration",
+                "clipPlaneVertexDeclaration",
+                "fogVertexDeclaration",
+                "shadowsVertexDeclaration",
+                "morphTargetsVertexGlobalDeclaration",
+                "morphTargetsVertexDeclaration",
+                "logDepthDeclaration",
+                "morphTargetsVertex",
+                "instancesVertex",
+                "bonesVertex",
+                "bumpVertex",
+                "clipPlaneVertex",
+                "fogVertex",
+                "shadowsVertex",
+                "pointCloudVertex",
+                "logDepthVertex",
+                "helperFunctions",
+                "lightFragmentDeclaration",
+                "lightsFragmentFunctions",
+                "shadowsFragmentFunctions",
+                "fresnelFunction",
+                "reflectionFunction",
+                "colorGradingDefinition",
+                "colorGrading",
+                "colorCurvesDefinition",
+                "colorCurves",
+                "bumpFragmentFunctions",
+                "clipPlaneFragmentDeclaration",
+                "logDepthDeclaration",
+                "fogFragmentDeclaration",
+                "clipPlaneFragment",
+                "bumpFragment",
+                "lightFragment",
+                "logDepthFragment",
+                "fogFragment"
+            ]
+        },
+        "pbrMaterial" : 
+        {
+            "files": [
+                "../../src/Materials/babylon.pbrMaterial.js"
+            ],
+            "dependencies" : [
+                "core"
+            ],
+            "shaders": [
+                "pbr.vertex",
+                "pbr.fragment"
+            ],
+            "shaderIncludes": [
+                "bonesDeclaration",
+                "instancesDeclaration",
+                "bumpVertexDeclaration",
+                "clipPlaneVertexDeclaration",
+                "fogVertexDeclaration",
+                "shadowsVertexDeclaration",
+                "morphTargetsVertexGlobalDeclaration",
+                "morphTargetsVertexDeclaration",
+                "logDepthDeclaration",
+                "morphTargetsVertex",
+                "instancesVertex",
+                "bonesVertex",
+                "bumpVertex",
+                "clipPlaneVertex",
+                "fogVertex",
+                "shadowsVertex",
+                "logDepthVertex",
+                "lightFragmentDeclaration",
+                "fresnelFunction",
+                "reflectionFunction",
+            ]
+        },
+        "freeCamera" : 
+        {
+            "files": [               
+                "../../src/Cameras/babylon.cameraInputsManager.js",                
+                "../../src/Cameras/Inputs/babylon.freeCameraMouseInput.js",
+                "../../src/Cameras/Inputs/babylon.freeCameraKeyboardMoveInput.js",
+                "../../src/Cameras/babylon.freeCameraInputsManager.js",            
+                "../../src/Cameras/babylon.targetCamera.js",
+                "../../src/Cameras/babylon.freeCamera.js"
+            ],
+            "dependencies" : [
+                "core"
+            ]
+        },
+        "arcRotateCamera" : 
+        {
+            "files": [               
+                "../../src/Cameras/babylon.cameraInputsManager.js",                
+                "../../src/Cameras/babylon.targetCamera.js",
+                "../../src/Cameras/Inputs/babylon.arcRotateCameraKeyboardMoveInput.js",
+                "../../src/Cameras/Inputs/babylon.arcRotateCameraMouseWheelInput.js",
+                "../../src/Cameras/Inputs/babylon.arcRotateCameraPointersInput.js",
+                "../../src/Cameras/babylon.arcRotateCamera.js",
+                "../../src/Cameras/babylon.arcRotateCameraInputsManager.js"                
+            ],
+            "dependencies" : [
+                "core"
+            ]
+        },
+        "hemisphericLight" : 
+        {
+            "files": [
+                "../../src/Lights/babylon.hemisphericLight.js"
+            ],
+            "dependencies" : [
+                "core"
+            ]
+        },
+        "pointLight" : 
+        {
+            "files": [
+                "../../src/Lights/babylon.pointLight.js"
+            ],
+            "dependencies" : [
+                "core"
+            ]
+        },
+        "directionalLight" : 
+        {
+            "files": [
+                "../../src/Lights/babylon.directionalLight.js"
+            ],
+            "dependencies" : [
+                "core"
+            ]
+        },
+        "spotLight" : 
+        {
+            "files": [
+                "../../src/Lights/babylon.spotLight.js"
+            ],
+            "dependencies" : [
+                "core"
+            ]
+        },
+        "audio" : 
+        {
+            "files": [
+                "../../src/Audio/babylon.audioEngine.js",
+                "../../src/Audio/babylon.sound.js",
+                "../../src/Audio/babylon.soundtrack.js",
+                "../../src/Audio/babylon.analyser.js"                
+            ],
+            "dependencies" : [
+                "core"
+            ]
+        },
+        "additionalTextures" : 
+        {
+            "files": [
+                "../../src/Materials/Textures/babylon.cubeTexture.js",
+                "../../src/Materials/Textures/babylon.renderTargetTexture.js",
+                "../../src/Materials/Textures/babylon.mirrorTexture.js",
+                "../../src/Materials/Textures/babylon.refractionTexture.js",
+                "../../src/Materials/Textures/babylon.dynamicTexture.js",
+                "../../src/Materials/Textures/babylon.videoTexture.js"
+            ],
+            "dependencies" : [
+                "core"
+            ]
+        },
+        "shadows" : 
+        {
+            "files": [
+                "../../src/Lights/Shadows/babylon.shadowGenerator.js"
+            ],
+            "dependencies" : [
+                "postProcesses"
+            ],
+            "shaders" : [
+                "shadowMap.vertex",
+                "shadowMap.fragment",
+                "depthBoxBlur.fragment"
+            ]
+        },
+        "loader" : 
+        {
+            "files": [
+                "../../src/Loading/babylon.sceneLoader.js",
+                "../../src/Loading/Plugins/babylon.babylonFileLoader.js"
+            ],
+            "dependencies" : [
+                "core"
+            ]
+        },
+        "userData" : 
+        {
+            "files": [
+                "../../src/Tools/babylon.stringDictionary.js",
+                "../../src/Tools/babylon.tags.js",
+                "../../src/Tools/babylon.andOrNotEvaluator.js"
+            ],
+            "dependencies" : [
+                "core"
+            ]
+        },
+        "offline" : 
+        {
+            "files": [
+                "../../src/Tools/babylon.database.js"
+            ],
+            "dependencies" : [
+                "core"
+            ]
+        },
+        "fresnel" : 
+        {
+            "files": [
+                "../../src/Materials/babylon.fresnelParameters.js"
+            ],
+            "dependencies" : [
+                "core"
+            ]
+        },
+        "multiMaterial" : 
+        {
+            "files": [
+                "../../src/Materials/babylon.multiMaterial.js"
+            ],
+            "dependencies" : [
+                "core"
+            ]
+        },
+        "touchCamera" : 
+        {
+            "files": [
+                "../../src/Cameras/Inputs/babylon.freeCameraTouchInput.js",
+                "../../src/Cameras/babylon.touchCamera.js"
+            ],
+            "dependencies" : [
+                "core"
+            ]
+        },
+        "procedural" : 
+        {
+            "files": [
+                "../../src/Materials/Textures/Procedurals/babylon.proceduralTexture.js",
+                "../../src/Materials/Textures/Procedurals/babylon.customProceduralTexture.js"
+            ],
+            "dependencies" : [
+                "core"
+            ],
+            "shaders": [
+                "procedural.vertex"
+            ]
+        },        
+        "gamepad" : 
+        {
+            "files": [
+                "../../src/Cameras/Inputs/babylon.freeCameraGamepadInput.js",
+                "../../src/Cameras/Inputs/babylon.arcRotateCameraGamepadInput.js",
+                "../../src/Tools/babylon.gamepads.js",
+                "../../src/Tools/babylon.extendedGamepad.js"
+            ],
+            "dependencies" : [
+                "core"
+            ]
+        },        
+        "additionalCameras" : 
+        {
+            "files": [
+                "../../src/Cameras/babylon.followCamera.js",            
+                "../../src/Cameras/babylon.universalCamera.js",
+                "../../src/Cameras/babylon.gamepadCamera.js"
+            ],
+            "dependencies" : [
+                "gamepad"
+            ]
+        },  
+        "depthRenderer" : 
+        {
+            "files": [
+                "../../src/Rendering/babylon.depthRenderer.js"
+            ],
+            "dependencies" : [
+                "core"
+            ], 
+            "shaders" : [
+                "depth.vertex",
+                "depth.fragment"
+            ],
+            "shaderIncludes": [
+                "bonesDeclaration",
+                "instancesDeclaration",
+                "instancesVertex",
+                "bonesVertex"
+            ]
+        },      
+        "postProcesses" : 
+        {
+            "files": [
+                "../../src/PostProcess/babylon.postProcess.js",
+                "../../src/PostProcess/babylon.passPostProcess.js"
+            ],
+            "dependencies" : [
+                "core"
+            ], 
+            "shaders" : [
+                "postprocess.vertex",
+                "pass.fragment"
+            ]
+        },    
+        "additionalPostProcesses" : 
+        {
+            "files": [
+                "../../src/PostProcess/babylon.anaglyphPostProcess.js",
+                "../../src/PostProcess/babylon.blurPostProcess.js",
+                "../../src/PostProcess/babylon.refractionPostProcess.js",
+                "../../src/PostProcess/babylon.blackAndWhitePostProcess.js",
+                "../../src/PostProcess/babylon.convolutionPostProcess.js",
+                "../../src/PostProcess/babylon.filterPostProcess.js",
+                "../../src/PostProcess/babylon.fxaaPostProcess.js",
+                "../../src/PostProcess/babylon.volumetricLightScatteringPostProcess.js",
+                "../../src/PostProcess/babylon.stereoscopicInterlacePostProcess.js",
+                "../../src/PostProcess/babylon.colorCorrectionPostProcess.js",
+                "../../src/PostProcess/babylon.tonemapPostProcess.js"                                      
+            ],
+            "dependencies" : [
+                "postProcesses"
+            ], 
+            "shaders" : [
+                "anaglyph.fragment",
+                "blur.fragment",
+                "refraction.fragment",
+                "blackAndWhite.fragment",
+                "convolution.fragment",
+                "filter.fragment",
+                "fxaa.fragment",
+                "volumetricLightScattering.fragment",
+                "volumetricLightScatteringPass.fragment",
+                "stereoscopicInterlace.fragment",
+                "colorCorrection.fragment",
+                "tonemap.fragment"
+            ]
+        },                         
+        "renderingPipeline" : 
+        {
+            "files": [
+                "../../src/PostProcess/RenderPipeline/babylon.postProcessRenderPipelineManager.js",
+                "../../src/PostProcess/RenderPipeline/babylon.postProcessRenderPass.js",
+                "../../src/PostProcess/RenderPipeline/babylon.postProcessRenderEffect.js",
+                "../../src/PostProcess/RenderPipeline/babylon.postProcessRenderPipeline.js",           
+                "../../src/PostProcess/babylon.ssaoRenderingPipeline.js",
+                "../../src/PostProcess/babylon.lensRenderingPipeline.js",
+                "../../src/PostProcess/babylon.hdrRenderingPipeline.js",
+                "../../src/PostProcess/babylon.standardRenderingPipeline.js"
+            ],
+            "dependencies" : [
+                "depthRenderer",
+                "postProcesses"
+            ], 
+            "shaders" : [
+                "ssao.fragment",
+                "ssaoCombine.fragment",
+                "chromaticAberration.fragment",
+                "lensHighlights.fragment",
+                "depthOfField.fragment",
+                "standard.fragment",
+                "hdr.fragment"
+            ]
+        },
+        "bones" : 
+        {
+            "files": [
+                "../../src/Bones/babylon.bone.js",
+                "../../src/Bones/babylon.boneIKController.js",
+                "../../src/Bones/babylon.boneLookController.js",
+                "../../src/Bones/babylon.skeleton.js"
+            ],
+            "dependencies" : [
+                "core"
+            ]
+        },
+        "hdr" : 
+        {
+            "files": [
+                "../../src/Tools/HDR/babylon.cubemapToSphericalPolynomial.js",
+                "../../src/Tools/HDR/babylon.panoramaToCubemap.js",
+                "../../src/Tools/HDR/babylon.hdr.js",
+                "../../src/Tools/HDR/babylon.pmremgenerator.js",
+                "../../src/Materials/Textures/babylon.hdrCubeTexture.js"
+            ],
+            "dependencies" : [
+                "core"
+            ]
+        }                            
     },
     "core": {
         "typescript": [
             "../../src/**/*.ts",
             "!../../src/**/*.d.ts"
         ],
-        "files": [
-            "../../src/Math/babylon.math.js",
-            "../../src/babylon.mixins.js",
-            "../../src/Tools/babylon.decorators.js",
-            "../../src/Tools/babylon.observable.js",
-            "../../src/Tools/babylon.database.js",
+        "files": [            
+                "../../src/PostProcess/babylon.vrDistortionCorrectionPostProcess.js",
+
             "../../src/Tools/babylon.tga.js",
-            "../../src/Tools/babylon.smartArray.js",
-            "../../src/Tools/babylon.stringDictionary.js",
-            "../../src/Tools/babylon.tools.js",
-            "../../src/States/babylon.alphaCullingState.js",
-            "../../src/States/babylon.depthCullingState.js",
-            "../../src/States/babylon.stencilState.js",
             "../../src/Tools/babylon.loadingScreen.js",
-            "../../src/babylon.engine.js",
-            "../../src/babylon.node.js",
             "../../src/Tools/babylon.filesInput.js",
-            "../../src/Collisions/babylon.pickingInfo.js",
-            "../../src/Culling/babylon.boundingSphere.js",
-            "../../src/Culling/babylon.boundingBox.js",
-            "../../src/Culling/babylon.boundingInfo.js",
-            "../../src/Culling/babylon.ray.js",
-            "../../src/Debug/babylon.rayHelper.js",
-            "../../src/Mesh/babylon.abstractMesh.js",
-            "../../src/Lights/babylon.light.js",
-            "../../src/Lights/babylon.pointLight.js",
-            "../../src/Lights/babylon.spotLight.js",
-            "../../src/Lights/babylon.hemisphericLight.js",
-            "../../src/Lights/babylon.directionalLight.js",
-            "../../src/Lights/Shadows/babylon.shadowGenerator.js",
-            "../../src/Collisions/babylon.collider.js",
-            "../../src/Collisions/babylon.collisionCoordinator.js",
-            "../../src/Cameras/babylon.camera.js",
-            "../../src/Cameras/babylon.cameraInputsManager.js",
-            "../../src/Cameras/Inputs/babylon.freeCameraMouseInput.js",
-            "../../src/Cameras/Inputs/babylon.freeCameraKeyboardMoveInput.js",
-            "../../src/Cameras/Inputs/babylon.freeCameraTouchInput.js",
             "../../src/Cameras/Inputs/babylon.freeCameraDeviceOrientationInput.js",
-            "../../src/Cameras/Inputs/babylon.freeCameraGamepadInput.js",
-            "../../src/Cameras/Inputs/babylon.arcRotateCameraKeyboardMoveInput.js",
-            "../../src/Cameras/Inputs/babylon.arcRotateCameraMouseWheelInput.js",
-            "../../src/Cameras/Inputs/babylon.arcRotateCameraPointersInput.js",
-            "../../src/Cameras/Inputs/babylon.arcRotateCameraGamepadInput.js",
             "../../src/Cameras/Inputs/babylon.arcRotateCameraVRDeviceOrientationInput.js",
-            "../../src/Cameras/babylon.targetCamera.js",
-            "../../src/Cameras/babylon.freeCamera.js",
-            "../../src/Cameras/babylon.freeCameraInputsManager.js",
-            "../../src/Cameras/babylon.followCamera.js",
-            "../../src/Cameras/babylon.touchCamera.js",
-            "../../src/Cameras/babylon.arcRotateCamera.js",
-            "../../src/Cameras/babylon.arcRotateCameraInputsManager.js",
-            "../../src/Rendering/babylon.renderingManager.js",
-            "../../src/Rendering/babylon.renderingGroup.js",
-            "../../src/PostProcess/babylon.postProcessManager.js",
-            "../../src/PostProcess/RenderPipeline/babylon.postProcessRenderPipelineManager.js",
             "../../src/Rendering/babylon.boundingBoxRenderer.js",
-            "../../src/babylon.scene.js",
-            "../../src/Mesh/babylon.buffer.js",
-            "../../src/Mesh/babylon.vertexBuffer.js",
-            "../../src/Mesh/babylon.instancedMesh.js",
-            "../../src/Mesh/babylon.mesh.js",
-            "../../src/Mesh/babylon.subMesh.js",
-            "../../src/Mesh/babylon.meshBuilder.js",
-            "../../src/Materials/Textures/babylon.baseTexture.js",
-            "../../src/Materials/Textures/babylon.texture.js",
-            "../../src/Materials/Textures/babylon.cubeTexture.js",
-            "../../src/Materials/Textures/babylon.renderTargetTexture.js",
-            "../../src/Materials/Textures/Procedurals/babylon.proceduralTexture.js",
-            "../../src/Materials/Textures/babylon.mirrorTexture.js",
-            "../../src/Materials/Textures/babylon.refractionTexture.js",
-            "../../src/Materials/Textures/babylon.dynamicTexture.js",
-            "../../src/Materials/Textures/babylon.videoTexture.js",
-            "../../src/Materials/Textures/Procedurals/babylon.customProceduralTexture.js",
-            "../../src/Materials/babylon.effect.js",
-            "../../src/Materials/babylon.materialHelper.js",
-            "../../src/Materials/babylon.fresnelParameters.js",
-            "../../src/Materials/babylon.material.js",
-            "../../src/Materials/babylon.pushMaterial.js",
-            "../../src/Materials/babylon.standardMaterial.js",
-            "../../src/Materials/babylon.multiMaterial.js",
-            "../../src/Loading/babylon.sceneLoader.js",
-            "../../src/Loading/Plugins/babylon.babylonFileLoader.js",
-            "../../src/Sprites/babylon.spriteManager.js",
-            "../../src/Sprites/babylon.sprite.js",
             "../../src/Layer/babylon.layer.js",
-            "../../src/Particles/babylon.particle.js",
-            "../../src/Particles/babylon.particleSystem.js",
-            "../../src/Animations/babylon.animation.js",
-            "../../src/Animations/babylon.animatable.js",
-            "../../src/Animations/babylon.easing.js",
-            "../../src/Bones/babylon.bone.js",
-            "../../src/Bones/babylon.boneIKController.js",
-            "../../src/Bones/babylon.boneLookController.js",
-            "../../src/Bones/babylon.skeleton.js",
-            "../../src/PostProcess/babylon.postProcess.js",
-            "../../src/PostProcess/babylon.passPostProcess.js",
             "../../src/Physics/babylon.physicsJoint.js",
             "../../src/Physics/babylon.physicsImpostor.js",
             "../../src/Physics/babylon.physicsEngine.js",
-            "../../src/Mesh/babylon.mesh.vertexData.js",
-            "../../src/Tools/babylon.tags.js",
-            "../../src/Tools/babylon.andOrNotEvaluator.js",
-            "../../src/PostProcess/RenderPipeline/babylon.postProcessRenderPass.js",
-            "../../src/PostProcess/RenderPipeline/babylon.postProcessRenderEffect.js",
-            "../../src/PostProcess/RenderPipeline/babylon.postProcessRenderPipeline.js",
-            "../../src/Actions/babylon.condition.js",
-            "../../src/Actions/babylon.action.js",
-            "../../src/Actions/babylon.actionManager.js",
-            "../../src/Actions/babylon.interpolateValueAction.js",
-            "../../src/Actions/babylon.directActions.js",
-            "../../src/Mesh/babylon.geometry.js",
-            "../../src/Mesh/babylon.groundMesh.js",
-            "../../src/Mesh/babylon.instancedMesh.js",
-            "../../src/Mesh/babylon.linesMesh.js",
-            "../../src/Audio/babylon.audioEngine.js",
-            "../../src/Audio/babylon.sound.js",
-            "../../src/Audio/babylon.soundtrack.js",
-            "../../src/Layer/babylon.highlightlayer.js"
-        ]
-    },
-    "shadersDirectories": [
-        {
-            "variable": "BABYLON.Effect.ShadersStore",
-            "files": "../../src/Shaders/*.fx"
-        }
-    ],
-    "includeShadersDirectories": [
-        {
-            "variable": "BABYLON.Effect.IncludesShadersStore",
-            "files": "../../src/Shaders/ShadersInclude/*.fx"
-        }
-    ],
-    "workers": [
-        {
-            "variable": "BABYLON.CollisionWorker",
-            "files": [
-                "../../src/Collisions/babylon.collider.js",
-                "../../src/Collisions/babylon.collisionWorker.js",
-                "../../src/Collisions/babylon.collisionCoordinator.js",
-                "../../src/Math/babylon.math.js"
-            ]
-        }
-    ],
-    "extras": {
-        "files": [
-            "../../src/Math/babylon.math.SIMD.js",
+            "../../src/Layer/babylon.highlightlayer.js",
+                        "../../src/Math/babylon.math.SIMD.js",
             "../../src/Tools/babylon.rectPackingMap.js",
             "../../src/Tools/babylon.dynamicFloatArray.js",
             "../../src/Materials/Textures/babylon.mapTexture.js",
-            "../../src/Materials/babylon.shaderMaterial.js",
             "../../src/Tools/babylon.dds.js",
             "../../src/Tools/babylon.khronosTextureContainer.js",
             "../../src/Physics/Plugins/babylon.cannonJSPlugin.js",
@@ -173,11 +607,9 @@
             "../../src/Tools/babylon.sceneSerializer.js",
             "../../src/Tools/babylon.earcut.js",
             "../../src/Mesh/babylon.csg.js",
-            "../../src/PostProcess/babylon.vrDistortionCorrectionPostProcess.js",
             "../../src/Tools/babylon.virtualJoystick.js",
             "../../src/Cameras/babylon.virtualJoysticksCamera.js",
             "../../src/Cameras/Inputs/babylon.freeCameraVirtualJoystickInput.js",
-            "../../src/PostProcess/babylon.anaglyphPostProcess.js",
             "../../src/Rendering/babylon.outlineRenderer.js",
             "../../src/Tools/babylon.assetsManager.js",
             "../../src/Cameras/VR/babylon.vrCameraMetrics.js",
@@ -188,39 +620,13 @@
             "../../src/Mesh/babylon.polygonMesh.js",
             "../../src/Culling/Octrees/babylon.octree.js",
             "../../src/Culling/Octrees/babylon.octreeBlock.js",
-            "../../src/PostProcess/babylon.blurPostProcess.js",
-            "../../src/PostProcess/babylon.refractionPostProcess.js",
-            "../../src/PostProcess/babylon.blackAndWhitePostProcess.js",
-            "../../src/PostProcess/babylon.convolutionPostProcess.js",
-            "../../src/PostProcess/babylon.filterPostProcess.js",
-            "../../src/PostProcess/babylon.fxaaPostProcess.js",
-            "../../src/PostProcess/babylon.stereoscopicInterlacePostProcess.js",
             "../../src/LensFlare/babylon.lensFlare.js",
             "../../src/LensFlare/babylon.lensFlareSystem.js",
             "../../src/Cameras/babylon.deviceOrientationCamera.js",
-            "../../src/Cameras/VR/babylon.vrDeviceOrientationCamera.js",
-            "../../src/Cameras/babylon.universalCamera.js",
-            "../../src/Tools/babylon.gamepads.js",
-            "../../src/Tools/babylon.extendedGamepad.js",
-            "../../src/Cameras/babylon.gamepadCamera.js",
-            "../../src/Audio/babylon.analyser.js",
-            "../../src/Rendering/babylon.depthRenderer.js",
-            "../../src/PostProcess/babylon.ssaoRenderingPipeline.js",
-            "../../src/PostProcess/babylon.volumetricLightScatteringPostProcess.js",
-            "../../src/PostProcess/babylon.lensRenderingPipeline.js",
-            "../../src/PostProcess/babylon.colorCorrectionPostProcess.js",
+            "../../src/Cameras/VR/babylon.vrDeviceOrientationCamera.js",            
             "../../src/Cameras/babylon.stereoscopicCameras.js",
-            "../../src/PostProcess/babylon.hdrRenderingPipeline.js",
             "../../src/Rendering/babylon.edgesRenderer.js",
-            "../../src/PostProcess/babylon.tonemapPostProcess.js",
             "../../src/Probes/babylon.reflectionProbe.js",
-            "../../src/Particles/babylon.solidParticle.js",
-            "../../src/Particles/babylon.solidParticleSystem.js",
-            "../../src/Tools/HDR/babylon.cubemapToSphericalPolynomial.js",
-            "../../src/Tools/HDR/babylon.panoramaToCubemap.js",
-            "../../src/Tools/HDR/babylon.hdr.js",
-            "../../src/Tools/HDR/babylon.pmremgenerator.js",
-            "../../src/Materials/Textures/babylon.hdrCubeTexture.js",
             "../../src/Debug/babylon.skeletonViewer.js",
             "../../src/Debug/babylon.axesViewer.js",
             "../../src/Debug/babylon.boneAxesViewer.js",
@@ -228,11 +634,22 @@
             "../../src/Materials/babylon.colorCurves.js",
             "../../src/Materials/babylon.pbrMaterial.js",
             "../../src/Debug/babylon.debugLayer.js",
-            "../../src/PostProcess/babylon.standardRenderingPipeline.js",
             "../../src/Morph/babylon.morphTarget.js",
             "../../src/Morph/babylon.morphTargetManager.js"
+
         ]
     },
+    "workers": [
+        {
+            "variable": "BABYLON.CollisionWorker",
+            "files": [
+                "../../src/Collisions/babylon.collider.js",
+                "../../src/Collisions/babylon.collisionWorker.js",
+                "../../src/Collisions/babylon.collisionCoordinator.js",
+                "../../src/Math/babylon.math.js"
+            ]
+        }
+    ],
     "modules": [
         "canvas2D",
         "materialsLibrary",

+ 0 - 205
Tools/Gulp/custom.config.json

@@ -1,205 +0,0 @@
-{
-  "build": {
-    "filename": "babylon.custom.max.js",
-    "minFilename": "babylon.custom.js",
-    "outputDirectory": "../../dist/preview release",
-    "srcOutputDirectory": "../../src/"
-  },
-  "core": {
-    "typescript": [
-      "../../src/**/*.ts",
-      "!../../src/**/*.d.ts"
-    ],
-    "files": [
-            "../../src/Math/babylon.math.js",
-            "../../src/babylon.mixins.js",
-            "../../src/Tools/babylon.decorators.js",
-            "../../src/Tools/babylon.observable.js",
-            "../../src/Tools/babylon.database.js",
-            "../../src/Tools/babylon.tga.js",
-            "../../src/Tools/babylon.smartArray.js",
-            "../../src/Tools/babylon.stringDictionary.js",
-            "../../src/Tools/babylon.tools.js",
-            "../../src/States/babylon.alphaCullingState.js",
-            "../../src/States/babylon.depthCullingState.js",
-            "../../src/States/babylon.stencilState.js",
-            "../../src/Tools/babylon.loadingScreen.js",
-            "../../src/babylon.engine.js",
-            "../../src/babylon.node.js",
-            "../../src/Tools/babylon.filesInput.js",
-            "../../src/Collisions/babylon.pickingInfo.js",
-            "../../src/Culling/babylon.boundingSphere.js",
-            "../../src/Culling/babylon.boundingBox.js",
-            "../../src/Culling/babylon.boundingInfo.js",
-            "../../src/Culling/babylon.ray.js",
-            "../../src/Debug/babylon.rayHelper.js",
-            "../../src/Mesh/babylon.abstractMesh.js",
-            "../../src/Lights/babylon.light.js",
-            "../../src/Lights/babylon.pointLight.js",
-            "../../src/Lights/babylon.spotLight.js",
-            "../../src/Lights/babylon.hemisphericLight.js",
-            "../../src/Lights/babylon.directionalLight.js",
-            "../../src/Lights/Shadows/babylon.shadowGenerator.js",
-            "../../src/Collisions/babylon.collider.js",
-            "../../src/Collisions/babylon.collisionCoordinator.js",
-            "../../src/Cameras/babylon.camera.js",
-            "../../src/Cameras/babylon.cameraInputsManager.js",
-            "../../src/Cameras/Inputs/babylon.freeCameraMouseInput.js",
-            "../../src/Cameras/Inputs/babylon.freeCameraKeyboardMoveInput.js",
-            "../../src/Cameras/Inputs/babylon.freeCameraTouchInput.js",
-            "../../src/Cameras/Inputs/babylon.freeCameraDeviceOrientationInput.js",
-            "../../src/Cameras/Inputs/babylon.freeCameraGamepadInput.js",
-            "../../src/Cameras/Inputs/babylon.arcRotateCameraKeyboardMoveInput.js",
-            "../../src/Cameras/Inputs/babylon.arcRotateCameraMouseWheelInput.js",
-            "../../src/Cameras/Inputs/babylon.arcRotateCameraPointersInput.js",
-            "../../src/Cameras/Inputs/babylon.arcRotateCameraGamepadInput.js",
-            "../../src/Cameras/Inputs/babylon.arcRotateCameraVRDeviceOrientationInput.js",
-            "../../src/Cameras/babylon.targetCamera.js",
-            "../../src/Cameras/babylon.freeCamera.js",
-            "../../src/Cameras/babylon.freeCameraInputsManager.js",
-            "../../src/Cameras/babylon.followCamera.js",
-            "../../src/Cameras/babylon.touchCamera.js",
-            "../../src/Cameras/babylon.arcRotateCamera.js",
-            "../../src/Cameras/babylon.arcRotateCameraInputsManager.js",
-            "../../src/Rendering/babylon.renderingManager.js",
-            "../../src/Rendering/babylon.renderingGroup.js",
-            "../../src/PostProcess/babylon.postProcessManager.js",
-            "../../src/PostProcess/RenderPipeline/babylon.postProcessRenderPipelineManager.js",
-            "../../src/Rendering/babylon.boundingBoxRenderer.js",
-            "../../src/babylon.scene.js",
-            "../../src/Mesh/babylon.buffer.js",
-            "../../src/Mesh/babylon.vertexBuffer.js",
-            "../../src/Mesh/babylon.instancedMesh.js",
-            "../../src/Mesh/babylon.mesh.js",
-            "../../src/Mesh/babylon.subMesh.js",
-            "../../src/Mesh/babylon.meshBuilder.js",
-            "../../src/Materials/Textures/babylon.baseTexture.js",
-            "../../src/Materials/Textures/babylon.texture.js",
-            "../../src/Materials/Textures/babylon.cubeTexture.js",
-            "../../src/Materials/Textures/babylon.renderTargetTexture.js",
-            "../../src/Materials/Textures/Procedurals/babylon.proceduralTexture.js",
-            "../../src/Materials/Textures/babylon.mirrorTexture.js",
-            "../../src/Materials/Textures/babylon.refractionTexture.js",
-            "../../src/Materials/Textures/babylon.dynamicTexture.js",
-            "../../src/Materials/Textures/babylon.videoTexture.js",
-            "../../src/Materials/Textures/Procedurals/babylon.customProceduralTexture.js",
-            "../../src/Materials/babylon.effect.js",
-            "../../src/Materials/babylon.materialHelper.js",
-            "../../src/Materials/babylon.fresnelParameters.js",
-            "../../src/Materials/babylon.material.js",
-            "../../src/Materials/babylon.pushMaterial.js",
-            "../../src/Materials/babylon.standardMaterial.js",
-            "../../src/Materials/babylon.multiMaterial.js",
-            "../../src/Loading/babylon.sceneLoader.js",
-            "../../src/Loading/Plugins/babylon.babylonFileLoader.js",
-            "../../src/Sprites/babylon.spriteManager.js",
-            "../../src/Sprites/babylon.sprite.js",
-            "../../src/Layer/babylon.layer.js",
-            "../../src/Particles/babylon.particle.js",
-            "../../src/Particles/babylon.particleSystem.js",
-            "../../src/Animations/babylon.animation.js",
-            "../../src/Animations/babylon.animatable.js",
-            "../../src/Animations/babylon.easing.js",
-            "../../src/Bones/babylon.bone.js",
-            "../../src/Bones/babylon.boneIKController.js",
-            "../../src/Bones/babylon.boneLookController.js",
-            "../../src/Bones/babylon.skeleton.js",
-            "../../src/PostProcess/babylon.postProcess.js",
-            "../../src/PostProcess/babylon.passPostProcess.js",
-            "../../src/Physics/babylon.physicsJoint.js",
-            "../../src/Physics/babylon.physicsImpostor.js",
-            "../../src/Physics/babylon.physicsEngine.js",
-            "../../src/Mesh/babylon.mesh.vertexData.js",
-            "../../src/Tools/babylon.tags.js",
-            "../../src/Tools/babylon.andOrNotEvaluator.js",
-            "../../src/PostProcess/RenderPipeline/babylon.postProcessRenderPass.js",
-            "../../src/PostProcess/RenderPipeline/babylon.postProcessRenderEffect.js",
-            "../../src/PostProcess/RenderPipeline/babylon.postProcessRenderPipeline.js",
-            "../../src/Actions/babylon.condition.js",
-            "../../src/Actions/babylon.action.js",
-            "../../src/Actions/babylon.actionManager.js",
-            "../../src/Actions/babylon.interpolateValueAction.js",
-            "../../src/Actions/babylon.directActions.js",
-            "../../src/Mesh/babylon.geometry.js",
-            "../../src/Mesh/babylon.groundMesh.js",
-            "../../src/Mesh/babylon.instancedMesh.js",
-            "../../src/Mesh/babylon.linesMesh.js",
-            "../../src/Audio/babylon.audioEngine.js",
-            "../../src/Audio/babylon.sound.js",
-            "../../src/Audio/babylon.soundtrack.js",
-            "../../src/Layer/babylon.highlightlayer.js",
-            "../../src/Math/babylon.math.SIMD.js",
-            "../../src/Tools/babylon.rectPackingMap.js",
-            "../../src/Tools/babylon.dynamicFloatArray.js",
-            "../../src/Materials/Textures/babylon.mapTexture.js",
-            "../../src/Materials/babylon.shaderMaterial.js",
-            "../../src/Tools/babylon.dds.js",
-            "../../src/Tools/babylon.khronosTextureContainer.js",
-            "../../src/Physics/Plugins/babylon.cannonJSPlugin.js",
-            "../../src/Physics/Plugins/babylon.oimoJSPlugin.js",
-            "../../src/PostProcess/babylon.displayPassPostProcess.js",
-            "../../src/Mesh/babylon.meshSimplification.js",
-            "../../src/Tools/babylon.sceneSerializer.js",
-            "../../src/Tools/babylon.earcut.js",
-            "../../src/Mesh/babylon.csg.js",
-            "../../src/PostProcess/babylon.vrDistortionCorrectionPostProcess.js",
-            "../../src/Tools/babylon.virtualJoystick.js",
-            "../../src/Cameras/babylon.virtualJoysticksCamera.js",
-            "../../src/Cameras/Inputs/babylon.freeCameraVirtualJoystickInput.js",
-            "../../src/PostProcess/babylon.anaglyphPostProcess.js",
-            "../../src/Rendering/babylon.outlineRenderer.js",
-            "../../src/Tools/babylon.assetsManager.js",
-            "../../src/Cameras/VR/babylon.vrCameraMetrics.js",
-            "../../src/Cameras/VR/babylon.webVRCamera.js",
-            "../../src/Tools/babylon.sceneOptimizer.js",
-            "../../src/Mesh/babylon.meshLODLevel.js",
-            "../../src/Materials/Textures/babylon.rawTexture.js",
-            "../../src/Mesh/babylon.polygonMesh.js",
-            "../../src/Culling/Octrees/babylon.octree.js",
-            "../../src/Culling/Octrees/babylon.octreeBlock.js",
-            "../../src/PostProcess/babylon.blurPostProcess.js",
-            "../../src/PostProcess/babylon.refractionPostProcess.js",
-            "../../src/PostProcess/babylon.blackAndWhitePostProcess.js",
-            "../../src/PostProcess/babylon.convolutionPostProcess.js",
-            "../../src/PostProcess/babylon.filterPostProcess.js",
-            "../../src/PostProcess/babylon.fxaaPostProcess.js",
-            "../../src/PostProcess/babylon.stereoscopicInterlacePostProcess.js",
-            "../../src/LensFlare/babylon.lensFlare.js",
-            "../../src/LensFlare/babylon.lensFlareSystem.js",
-            "../../src/Cameras/babylon.deviceOrientationCamera.js",
-            "../../src/Cameras/VR/babylon.vrDeviceOrientationCamera.js",
-            "../../src/Cameras/babylon.universalCamera.js",
-            "../../src/Tools/babylon.gamepads.js",
-            "../../src/Tools/babylon.extendedGamepad.js",
-            "../../src/Cameras/babylon.gamepadCamera.js",
-            "../../src/Audio/babylon.analyser.js",
-            "../../src/Rendering/babylon.depthRenderer.js",
-            "../../src/PostProcess/babylon.ssaoRenderingPipeline.js",
-            "../../src/PostProcess/babylon.volumetricLightScatteringPostProcess.js",
-            "../../src/PostProcess/babylon.lensRenderingPipeline.js",
-            "../../src/PostProcess/babylon.colorCorrectionPostProcess.js",
-            "../../src/Cameras/babylon.stereoscopicCameras.js",
-            "../../src/PostProcess/babylon.hdrRenderingPipeline.js",
-            "../../src/Rendering/babylon.edgesRenderer.js",
-            "../../src/PostProcess/babylon.tonemapPostProcess.js",
-            "../../src/Probes/babylon.reflectionProbe.js",
-            "../../src/Particles/babylon.solidParticle.js",
-            "../../src/Particles/babylon.solidParticleSystem.js",
-            "../../src/Tools/HDR/babylon.cubemapToSphericalPolynomial.js",
-            "../../src/Tools/HDR/babylon.panoramaToCubemap.js",
-            "../../src/Tools/HDR/babylon.hdr.js",
-            "../../src/Tools/HDR/babylon.pmremgenerator.js",
-            "../../src/Materials/Textures/babylon.hdrCubeTexture.js",
-            "../../src/Debug/babylon.skeletonViewer.js",
-            "../../src/Debug/babylon.axesViewer.js",
-            "../../src/Debug/babylon.boneAxesViewer.js",
-            "../../src/Materials/Textures/babylon.colorGradingTexture.js",
-            "../../src/Materials/babylon.colorCurves.js",
-            "../../src/Materials/babylon.pbrMaterial.js",
-            "../../src/Debug/babylon.debugLayer.js",
-            "../../src/PostProcess/babylon.standardRenderingPipeline.js",
-            "../../src/Morph/babylon.morphTarget.js",
-            "../../src/Morph/babylon.morphTargetManager.js"
-    ]
-  }
-}

+ 74 - 68
Tools/Gulp/gulpfile.js

@@ -24,7 +24,6 @@ var webpack = require('webpack-stream');
 var zip = require('gulp-zip');
 
 var config = require("./config.json");
-var customConfig = require("./custom.config.json");
 
 var del = require('del');
 
@@ -58,6 +57,54 @@ var externalTsConfig = {
     isolatedModules: false
 };
 
+function processDependency(kind, dependency, filesToLoad) {
+    if (dependency.dependencies) {
+        for (var i = 0; i < dependency.dependencies.length; i++ ) {
+            var dependencyName = dependency.dependencies[i];
+            var parent = config.dependencies[dependencyName];
+            processDependency(kind, parent, filesToLoad);
+        }
+    }
+
+    var content = dependency[kind];
+    if (!content) {
+        return;
+    }
+
+    for (var i = 0; i< content.length; i++) {
+        var file = content[i];
+
+        if (filesToLoad.indexOf(file) === -1) {
+            filesToLoad.push(file);
+        }
+    }
+}
+
+function determineFilesToProcess(kind) {
+    var currentConfig = config.build.currentConfig;
+    var buildConfiguration = config.buildConfigurations[currentConfig];
+    var filesToLoad = [];
+
+    for (var index = 0; index < buildConfiguration.length; index++) {
+        var dependencyName = buildConfiguration[index];
+        var dependency = config.dependencies[dependencyName];
+        processDependency(kind, dependency, filesToLoad);
+    }
+
+    if (kind === "shaderIncludes") {
+        for (var index = 0; index < filesToLoad.length; index++) {
+            filesToLoad[index] = "../../src/Shaders/ShadersInclude/" + filesToLoad[index] + ".fx";
+        }
+    } else if (kind === "shaders") {
+        for (var index = 0; index < filesToLoad.length; index++) {
+            var name = filesToLoad[index];
+            filesToLoad[index] = "../../src/Shaders/" + filesToLoad[index] + ".fx";
+        }
+    }
+
+    return filesToLoad;
+}
+
 /*
  * Shader Management.
  */
@@ -76,26 +123,24 @@ function includeShadersName(filename) {
  * Main necessary files stream Management.
  */
 gulp.task("includeShaders", function (cb) {
-    includeShadersStream = config.includeShadersDirectories.map(function (shadersDef) {
-        return gulp.src(shadersDef.files).
-            pipe(expect.real({ errorOnFailure: true }, shadersDef.files)).
-            pipe(uncommentShader()).
-            pipe(srcToVariable({
-            variableName: shadersDef.variable, asMap: true, namingCallback: includeShadersName
-        }));
-    });
+    var filesToProcess = determineFilesToProcess("shaderIncludes");
+    includeShadersStream = gulp.src(filesToProcess).
+        pipe(expect.real({ errorOnFailure: true }, filesToProcess)).
+        pipe(uncommentShader()).
+        pipe(srcToVariable({
+            variableName: "BABYLON.Effect.IncludesShadersStore", asMap: true, namingCallback: includeShadersName
+    }));
     cb();
 });
 
 gulp.task("shaders", ["includeShaders"], function (cb) {
-    shadersStream = config.shadersDirectories.map(function (shadersDef) {
-        return gulp.src(shadersDef.files).
-            pipe(expect.real({ errorOnFailure: true }, shadersDef.files)).
-            pipe(uncommentShader()).
-            pipe(srcToVariable({
-            variableName: shadersDef.variable, asMap: true, namingCallback: shadersName
-        }));
-    });
+    var filesToProcess = determineFilesToProcess("shaders");
+    shadersStream = gulp.src(filesToProcess).
+        pipe(expect.real({ errorOnFailure: true}, filesToProcess)).
+        pipe(uncommentShader()).
+        pipe(srcToVariable({
+            variableName: "BABYLON.Effect.ShadersStore", asMap: true, namingCallback: shadersName
+    }));
     cb();
 });
 
@@ -114,14 +159,16 @@ gulp.task("workers", function (cb) {
 /**
  * Build tasks to concat minify uflify optimise the BJS js in different flavor (workers...).
  */
-gulp.task("buildCore", ["shaders"], function () {
+gulp.task("buildWorker", ["workers", "shaders"], function () {
+    var filesToProcess = determineFilesToProcess("files");
     return merge2(
-        gulp.src(config.core.files).        
-            pipe(expect.real({ errorOnFailure: true }, config.core.files)),
+        gulp.src(filesToProcess).        
+            pipe(expect.real({ errorOnFailure: true }, filesToProcess)),
         shadersStream,
-        includeShadersStream
+        includeShadersStream,
+        workersStream
         )
-        .pipe(concat(config.build.minCoreFilename))
+        .pipe(concat(config.build.minWorkerFilename))
         .pipe(cleants())
         .pipe(replace(extendsSearchRegex, ""))
         .pipe(replace(decorateSearchRegex, ""))
@@ -131,35 +178,14 @@ gulp.task("buildCore", ["shaders"], function () {
         .pipe(gulp.dest(config.build.outputDirectory));
 });
 
-gulp.task("buildNoWorker", ["shaders"], function () {
+gulp.task("build", ["shaders"], function () {
+    var filesToProcess = determineFilesToProcess("files");
     return merge2(
-        gulp.src(config.core.files).        
-            pipe(expect.real({ errorOnFailure: true }, config.core.files)),
-        gulp.src(config.extras.files).        
-            pipe(expect.real({ errorOnFailure: true }, config.extras.files)),
+        gulp.src(filesToProcess).        
+            pipe(expect.real({ errorOnFailure: true }, filesToProcess)),
         shadersStream,
         includeShadersStream
         )
-        .pipe(concat(config.build.minNoWorkerFilename))
-        .pipe(cleants())
-        .pipe(replace(extendsSearchRegex, ""))
-        .pipe(replace(decorateSearchRegex, ""))
-        .pipe(addModuleExports("BABYLON"))
-        .pipe(uglify())
-        .pipe(optimisejs())
-        .pipe(gulp.dest(config.build.outputDirectory));
-});
-
-gulp.task("build", ["workers", "shaders"], function () {
-    return merge2(
-        gulp.src(config.core.files).        
-            pipe(expect.real({ errorOnFailure: true }, config.core.files)),
-        gulp.src(config.extras.files).        
-            pipe(expect.real({ errorOnFailure: true }, config.extras.files)),   
-        shadersStream,
-        includeShadersStream,
-        workersStream
-        )
         .pipe(concat(config.build.filename))
         .pipe(cleants())
         .pipe(replace(extendsSearchRegex, ""))
@@ -172,26 +198,6 @@ gulp.task("build", ["workers", "shaders"], function () {
         .pipe(gulp.dest(config.build.outputDirectory));
 });
 
-gulp.task("build-custom", ["shaders"], function () {
-    return merge2(
-        gulp.src(customConfig.core.files).        
-            pipe(expect.real({ errorOnFailure: true }, customConfig.core.files)),  
-        shadersStream,
-        includeShadersStream
-        )
-        .pipe(concat(customConfig.build.filename))
-        .pipe(cleants())
-        .pipe(replace(extendsSearchRegex, ""))
-        .pipe(replace(decorateSearchRegex, ""))
-        .pipe(addModuleExports("BABYLON"))
-        .pipe(gulp.dest(customConfig.build.outputDirectory))
-        .pipe(rename(customConfig.build.minFilename))
-        .pipe(uglify())
-        .pipe(optimisejs())
-        .pipe(gulp.dest(customConfig.build.outputDirectory));
-});
-
-
 /*
 * Compiles all typescript files and creating a js and a declaration file.
 */
@@ -307,7 +313,7 @@ var buildExternalLibrary= function(library, settings, watch) {
  * The default task, concat and min the main BJS files.
  */
 gulp.task('default', function (cb) {
-    runSequence("buildNoWorker", "build", "buildCore", cb);
+    runSequence("buildWorker", "build", cb);
 });
 
 /**

BIN
assets/textures/grass.jpg


BIN
assets/textures/misc.jpg


BIN
assets/textures/room.hdr


BIN
assets/textures/tree.png


Fichier diff supprimé car celui-ci est trop grand
+ 0 - 31
dist/preview release/babylon.core.js


+ 460 - 459
dist/preview release/babylon.d.ts

@@ -158,7 +158,7 @@ declare module BABYLON {
         cullBackFaces: boolean;
         renderEvenInBackground: boolean;
         preventCacheWipeBetweenFrames: boolean;
-        enableOfflineSupport: boolean;
+        enableOfflineSupport: typeof Database;
         scenes: Scene[];
         vrDisplaysPromise: any;
         private _vrDisplays;
@@ -1517,7 +1517,8 @@ declare module BABYLON {
         gravity: Vector3;
         postProcessesEnabled: boolean;
         postProcessManager: PostProcessManager;
-        postProcessRenderPipelineManager: PostProcessRenderPipelineManager;
+        private _postProcessRenderPipelineManager;
+        readonly postProcessRenderPipelineManager: PostProcessRenderPipelineManager;
         renderTargetsEnabled: boolean;
         dumpNextRenderTargets: boolean;
         customRenderTargets: RenderTargetTexture[];
@@ -3186,6 +3187,249 @@ declare module BABYLON {
 }
 
 declare module BABYLON {
+    class Collider {
+        radius: Vector3;
+        retry: number;
+        velocity: Vector3;
+        basePoint: Vector3;
+        epsilon: number;
+        collisionFound: boolean;
+        velocityWorldLength: number;
+        basePointWorld: Vector3;
+        velocityWorld: Vector3;
+        normalizedVelocity: Vector3;
+        initialVelocity: Vector3;
+        initialPosition: Vector3;
+        nearestDistance: number;
+        intersectionPoint: Vector3;
+        collidedMesh: AbstractMesh;
+        private _collisionPoint;
+        private _planeIntersectionPoint;
+        private _tempVector;
+        private _tempVector2;
+        private _tempVector3;
+        private _tempVector4;
+        private _edge;
+        private _baseToVertex;
+        private _destinationPoint;
+        private _slidePlaneNormal;
+        private _displacementVector;
+        private _collisionMask;
+        collisionMask: number;
+        _initialize(source: Vector3, dir: Vector3, e: number): void;
+        _checkPointInTriangle(point: Vector3, pa: Vector3, pb: Vector3, pc: Vector3, n: Vector3): boolean;
+        _canDoCollision(sphereCenter: Vector3, sphereRadius: number, vecMin: Vector3, vecMax: Vector3): boolean;
+        _testTriangle(faceIndex: number, trianglePlaneArray: Array<Plane>, p1: Vector3, p2: Vector3, p3: Vector3, hasMaterial: boolean): void;
+        _collide(trianglePlaneArray: Array<Plane>, pts: Vector3[], indices: IndicesArray, indexStart: number, indexEnd: number, decal: number, hasMaterial: boolean): void;
+        _getResponse(pos: Vector3, vel: Vector3): void;
+    }
+}
+
+declare module BABYLON {
+    var CollisionWorker: string;
+    interface ICollisionCoordinator {
+        getNewPosition(position: Vector3, velocity: Vector3, collider: Collider, maximumRetry: number, excludedMesh: AbstractMesh, onNewPosition: (collisionIndex: number, newPosition: Vector3, collidedMesh?: AbstractMesh) => void, collisionIndex: number): void;
+        init(scene: Scene): void;
+        destroy(): void;
+        onMeshAdded(mesh: AbstractMesh): any;
+        onMeshUpdated(mesh: AbstractMesh): any;
+        onMeshRemoved(mesh: AbstractMesh): any;
+        onGeometryAdded(geometry: Geometry): any;
+        onGeometryUpdated(geometry: Geometry): any;
+        onGeometryDeleted(geometry: Geometry): any;
+    }
+    interface SerializedMesh {
+        id: string;
+        name: string;
+        uniqueId: number;
+        geometryId: string;
+        sphereCenter: Array<number>;
+        sphereRadius: number;
+        boxMinimum: Array<number>;
+        boxMaximum: Array<number>;
+        worldMatrixFromCache: any;
+        subMeshes: Array<SerializedSubMesh>;
+        checkCollisions: boolean;
+    }
+    interface SerializedSubMesh {
+        position: number;
+        verticesStart: number;
+        verticesCount: number;
+        indexStart: number;
+        indexCount: number;
+        hasMaterial: boolean;
+        sphereCenter: Array<number>;
+        sphereRadius: number;
+        boxMinimum: Array<number>;
+        boxMaximum: Array<number>;
+    }
+    interface SerializedGeometry {
+        id: string;
+        positions: Float32Array;
+        indices: Uint32Array;
+        normals: Float32Array;
+    }
+    interface BabylonMessage {
+        taskType: WorkerTaskType;
+        payload: InitPayload | CollidePayload | UpdatePayload;
+    }
+    interface SerializedColliderToWorker {
+        position: Array<number>;
+        velocity: Array<number>;
+        radius: Array<number>;
+    }
+    enum WorkerTaskType {
+        INIT = 0,
+        UPDATE = 1,
+        COLLIDE = 2,
+    }
+    interface WorkerReply {
+        error: WorkerReplyType;
+        taskType: WorkerTaskType;
+        payload?: any;
+    }
+    interface CollisionReplyPayload {
+        newPosition: Array<number>;
+        collisionId: number;
+        collidedMeshUniqueId: number;
+    }
+    interface InitPayload {
+    }
+    interface CollidePayload {
+        collisionId: number;
+        collider: SerializedColliderToWorker;
+        maximumRetry: number;
+        excludedMeshUniqueId?: number;
+    }
+    interface UpdatePayload {
+        updatedMeshes: {
+            [n: number]: SerializedMesh;
+        };
+        updatedGeometries: {
+            [s: string]: SerializedGeometry;
+        };
+        removedMeshes: Array<number>;
+        removedGeometries: Array<string>;
+    }
+    enum WorkerReplyType {
+        SUCCESS = 0,
+        UNKNOWN_ERROR = 1,
+    }
+    class CollisionCoordinatorWorker implements ICollisionCoordinator {
+        private _scene;
+        private _scaledPosition;
+        private _scaledVelocity;
+        private _collisionsCallbackArray;
+        private _init;
+        private _runningUpdated;
+        private _runningCollisionTask;
+        private _worker;
+        private _addUpdateMeshesList;
+        private _addUpdateGeometriesList;
+        private _toRemoveMeshesArray;
+        private _toRemoveGeometryArray;
+        constructor();
+        static SerializeMesh: (mesh: AbstractMesh) => SerializedMesh;
+        static SerializeGeometry: (geometry: Geometry) => SerializedGeometry;
+        getNewPosition(position: Vector3, velocity: Vector3, collider: Collider, maximumRetry: number, excludedMesh: AbstractMesh, onNewPosition: (collisionIndex: number, newPosition: Vector3, collidedMesh?: AbstractMesh) => void, collisionIndex: number): void;
+        init(scene: Scene): void;
+        destroy(): void;
+        onMeshAdded(mesh: AbstractMesh): void;
+        onMeshUpdated: (mesh: AbstractMesh) => void;
+        onMeshRemoved(mesh: AbstractMesh): void;
+        onGeometryAdded(geometry: Geometry): void;
+        onGeometryUpdated: (geometry: Geometry) => void;
+        onGeometryDeleted(geometry: Geometry): void;
+        private _afterRender;
+        private _onMessageFromWorker;
+    }
+    class CollisionCoordinatorLegacy implements ICollisionCoordinator {
+        private _scene;
+        private _scaledPosition;
+        private _scaledVelocity;
+        private _finalPosition;
+        getNewPosition(position: Vector3, velocity: Vector3, collider: Collider, maximumRetry: number, excludedMesh: AbstractMesh, onNewPosition: (collisionIndex: number, newPosition: Vector3, collidedMesh?: AbstractMesh) => void, collisionIndex: number): void;
+        init(scene: Scene): void;
+        destroy(): void;
+        onMeshAdded(mesh: AbstractMesh): void;
+        onMeshUpdated(mesh: AbstractMesh): void;
+        onMeshRemoved(mesh: AbstractMesh): void;
+        onGeometryAdded(geometry: Geometry): void;
+        onGeometryUpdated(geometry: Geometry): void;
+        onGeometryDeleted(geometry: Geometry): void;
+        private _collideWithWorld(position, velocity, collider, maximumRetry, finalPosition, excludedMesh?);
+    }
+}
+
+declare module BABYLON {
+    var WorkerIncluded: boolean;
+    class CollisionCache {
+        private _meshes;
+        private _geometries;
+        getMeshes(): {
+            [n: number]: SerializedMesh;
+        };
+        getGeometries(): {
+            [s: number]: SerializedGeometry;
+        };
+        getMesh(id: any): SerializedMesh;
+        addMesh(mesh: SerializedMesh): void;
+        removeMesh(uniqueId: number): void;
+        getGeometry(id: string): SerializedGeometry;
+        addGeometry(geometry: SerializedGeometry): void;
+        removeGeometry(id: string): void;
+    }
+    class CollideWorker {
+        collider: Collider;
+        private _collisionCache;
+        private finalPosition;
+        private collisionsScalingMatrix;
+        private collisionTranformationMatrix;
+        constructor(collider: Collider, _collisionCache: CollisionCache, finalPosition: Vector3);
+        collideWithWorld(position: Vector3, velocity: Vector3, maximumRetry: number, excludedMeshUniqueId?: number): void;
+        private checkCollision(mesh);
+        private processCollisionsForSubMeshes(transformMatrix, mesh);
+        private collideForSubMesh(subMesh, transformMatrix, meshGeometry);
+        private checkSubmeshCollision(subMesh);
+    }
+    interface ICollisionDetector {
+        onInit(payload: InitPayload): void;
+        onUpdate(payload: UpdatePayload): void;
+        onCollision(payload: CollidePayload): void;
+    }
+    class CollisionDetectorTransferable implements ICollisionDetector {
+        private _collisionCache;
+        onInit(payload: InitPayload): void;
+        onUpdate(payload: UpdatePayload): void;
+        onCollision(payload: CollidePayload): void;
+    }
+}
+
+declare module BABYLON {
+    class IntersectionInfo {
+        bu: number;
+        bv: number;
+        distance: number;
+        faceId: number;
+        subMeshId: number;
+        constructor(bu: number, bv: number, distance: number);
+    }
+    class PickingInfo {
+        hit: boolean;
+        distance: number;
+        pickedPoint: Vector3;
+        pickedMesh: AbstractMesh;
+        bu: number;
+        bv: number;
+        faceId: number;
+        subMeshId: number;
+        pickedSprite: Sprite;
+        getNormal(useWorldCoordinates?: boolean, useVerticesNormals?: boolean): Vector3;
+        getTextureCoordinates(): Vector2;
+    }
+}
+
+declare module BABYLON {
     class ArcRotateCamera extends TargetCamera {
         alpha: number;
         beta: number;
@@ -3646,354 +3890,6 @@ declare module BABYLON {
 }
 
 declare module BABYLON {
-    class Collider {
-        radius: Vector3;
-        retry: number;
-        velocity: Vector3;
-        basePoint: Vector3;
-        epsilon: number;
-        collisionFound: boolean;
-        velocityWorldLength: number;
-        basePointWorld: Vector3;
-        velocityWorld: Vector3;
-        normalizedVelocity: Vector3;
-        initialVelocity: Vector3;
-        initialPosition: Vector3;
-        nearestDistance: number;
-        intersectionPoint: Vector3;
-        collidedMesh: AbstractMesh;
-        private _collisionPoint;
-        private _planeIntersectionPoint;
-        private _tempVector;
-        private _tempVector2;
-        private _tempVector3;
-        private _tempVector4;
-        private _edge;
-        private _baseToVertex;
-        private _destinationPoint;
-        private _slidePlaneNormal;
-        private _displacementVector;
-        private _collisionMask;
-        collisionMask: number;
-        _initialize(source: Vector3, dir: Vector3, e: number): void;
-        _checkPointInTriangle(point: Vector3, pa: Vector3, pb: Vector3, pc: Vector3, n: Vector3): boolean;
-        _canDoCollision(sphereCenter: Vector3, sphereRadius: number, vecMin: Vector3, vecMax: Vector3): boolean;
-        _testTriangle(faceIndex: number, trianglePlaneArray: Array<Plane>, p1: Vector3, p2: Vector3, p3: Vector3, hasMaterial: boolean): void;
-        _collide(trianglePlaneArray: Array<Plane>, pts: Vector3[], indices: IndicesArray, indexStart: number, indexEnd: number, decal: number, hasMaterial: boolean): void;
-        _getResponse(pos: Vector3, vel: Vector3): void;
-    }
-}
-
-declare module BABYLON {
-    var CollisionWorker: string;
-    interface ICollisionCoordinator {
-        getNewPosition(position: Vector3, velocity: Vector3, collider: Collider, maximumRetry: number, excludedMesh: AbstractMesh, onNewPosition: (collisionIndex: number, newPosition: Vector3, collidedMesh?: AbstractMesh) => void, collisionIndex: number): void;
-        init(scene: Scene): void;
-        destroy(): void;
-        onMeshAdded(mesh: AbstractMesh): any;
-        onMeshUpdated(mesh: AbstractMesh): any;
-        onMeshRemoved(mesh: AbstractMesh): any;
-        onGeometryAdded(geometry: Geometry): any;
-        onGeometryUpdated(geometry: Geometry): any;
-        onGeometryDeleted(geometry: Geometry): any;
-    }
-    interface SerializedMesh {
-        id: string;
-        name: string;
-        uniqueId: number;
-        geometryId: string;
-        sphereCenter: Array<number>;
-        sphereRadius: number;
-        boxMinimum: Array<number>;
-        boxMaximum: Array<number>;
-        worldMatrixFromCache: any;
-        subMeshes: Array<SerializedSubMesh>;
-        checkCollisions: boolean;
-    }
-    interface SerializedSubMesh {
-        position: number;
-        verticesStart: number;
-        verticesCount: number;
-        indexStart: number;
-        indexCount: number;
-        hasMaterial: boolean;
-        sphereCenter: Array<number>;
-        sphereRadius: number;
-        boxMinimum: Array<number>;
-        boxMaximum: Array<number>;
-    }
-    interface SerializedGeometry {
-        id: string;
-        positions: Float32Array;
-        indices: Uint32Array;
-        normals: Float32Array;
-    }
-    interface BabylonMessage {
-        taskType: WorkerTaskType;
-        payload: InitPayload | CollidePayload | UpdatePayload;
-    }
-    interface SerializedColliderToWorker {
-        position: Array<number>;
-        velocity: Array<number>;
-        radius: Array<number>;
-    }
-    enum WorkerTaskType {
-        INIT = 0,
-        UPDATE = 1,
-        COLLIDE = 2,
-    }
-    interface WorkerReply {
-        error: WorkerReplyType;
-        taskType: WorkerTaskType;
-        payload?: any;
-    }
-    interface CollisionReplyPayload {
-        newPosition: Array<number>;
-        collisionId: number;
-        collidedMeshUniqueId: number;
-    }
-    interface InitPayload {
-    }
-    interface CollidePayload {
-        collisionId: number;
-        collider: SerializedColliderToWorker;
-        maximumRetry: number;
-        excludedMeshUniqueId?: number;
-    }
-    interface UpdatePayload {
-        updatedMeshes: {
-            [n: number]: SerializedMesh;
-        };
-        updatedGeometries: {
-            [s: string]: SerializedGeometry;
-        };
-        removedMeshes: Array<number>;
-        removedGeometries: Array<string>;
-    }
-    enum WorkerReplyType {
-        SUCCESS = 0,
-        UNKNOWN_ERROR = 1,
-    }
-    class CollisionCoordinatorWorker implements ICollisionCoordinator {
-        private _scene;
-        private _scaledPosition;
-        private _scaledVelocity;
-        private _collisionsCallbackArray;
-        private _init;
-        private _runningUpdated;
-        private _runningCollisionTask;
-        private _worker;
-        private _addUpdateMeshesList;
-        private _addUpdateGeometriesList;
-        private _toRemoveMeshesArray;
-        private _toRemoveGeometryArray;
-        constructor();
-        static SerializeMesh: (mesh: AbstractMesh) => SerializedMesh;
-        static SerializeGeometry: (geometry: Geometry) => SerializedGeometry;
-        getNewPosition(position: Vector3, velocity: Vector3, collider: Collider, maximumRetry: number, excludedMesh: AbstractMesh, onNewPosition: (collisionIndex: number, newPosition: Vector3, collidedMesh?: AbstractMesh) => void, collisionIndex: number): void;
-        init(scene: Scene): void;
-        destroy(): void;
-        onMeshAdded(mesh: AbstractMesh): void;
-        onMeshUpdated: (mesh: AbstractMesh) => void;
-        onMeshRemoved(mesh: AbstractMesh): void;
-        onGeometryAdded(geometry: Geometry): void;
-        onGeometryUpdated: (geometry: Geometry) => void;
-        onGeometryDeleted(geometry: Geometry): void;
-        private _afterRender;
-        private _onMessageFromWorker;
-    }
-    class CollisionCoordinatorLegacy implements ICollisionCoordinator {
-        private _scene;
-        private _scaledPosition;
-        private _scaledVelocity;
-        private _finalPosition;
-        getNewPosition(position: Vector3, velocity: Vector3, collider: Collider, maximumRetry: number, excludedMesh: AbstractMesh, onNewPosition: (collisionIndex: number, newPosition: Vector3, collidedMesh?: AbstractMesh) => void, collisionIndex: number): void;
-        init(scene: Scene): void;
-        destroy(): void;
-        onMeshAdded(mesh: AbstractMesh): void;
-        onMeshUpdated(mesh: AbstractMesh): void;
-        onMeshRemoved(mesh: AbstractMesh): void;
-        onGeometryAdded(geometry: Geometry): void;
-        onGeometryUpdated(geometry: Geometry): void;
-        onGeometryDeleted(geometry: Geometry): void;
-        private _collideWithWorld(position, velocity, collider, maximumRetry, finalPosition, excludedMesh?);
-    }
-}
-
-declare module BABYLON {
-    var WorkerIncluded: boolean;
-    class CollisionCache {
-        private _meshes;
-        private _geometries;
-        getMeshes(): {
-            [n: number]: SerializedMesh;
-        };
-        getGeometries(): {
-            [s: number]: SerializedGeometry;
-        };
-        getMesh(id: any): SerializedMesh;
-        addMesh(mesh: SerializedMesh): void;
-        removeMesh(uniqueId: number): void;
-        getGeometry(id: string): SerializedGeometry;
-        addGeometry(geometry: SerializedGeometry): void;
-        removeGeometry(id: string): void;
-    }
-    class CollideWorker {
-        collider: Collider;
-        private _collisionCache;
-        private finalPosition;
-        private collisionsScalingMatrix;
-        private collisionTranformationMatrix;
-        constructor(collider: Collider, _collisionCache: CollisionCache, finalPosition: Vector3);
-        collideWithWorld(position: Vector3, velocity: Vector3, maximumRetry: number, excludedMeshUniqueId?: number): void;
-        private checkCollision(mesh);
-        private processCollisionsForSubMeshes(transformMatrix, mesh);
-        private collideForSubMesh(subMesh, transformMatrix, meshGeometry);
-        private checkSubmeshCollision(subMesh);
-    }
-    interface ICollisionDetector {
-        onInit(payload: InitPayload): void;
-        onUpdate(payload: UpdatePayload): void;
-        onCollision(payload: CollidePayload): void;
-    }
-    class CollisionDetectorTransferable implements ICollisionDetector {
-        private _collisionCache;
-        onInit(payload: InitPayload): void;
-        onUpdate(payload: UpdatePayload): void;
-        onCollision(payload: CollidePayload): void;
-    }
-}
-
-declare module BABYLON {
-    class IntersectionInfo {
-        bu: number;
-        bv: number;
-        distance: number;
-        faceId: number;
-        subMeshId: number;
-        constructor(bu: number, bv: number, distance: number);
-    }
-    class PickingInfo {
-        hit: boolean;
-        distance: number;
-        pickedPoint: Vector3;
-        pickedMesh: AbstractMesh;
-        bu: number;
-        bv: number;
-        faceId: number;
-        subMeshId: number;
-        pickedSprite: Sprite;
-        getNormal(useWorldCoordinates?: boolean, useVerticesNormals?: boolean): Vector3;
-        getTextureCoordinates(): Vector2;
-    }
-}
-
-declare module BABYLON.Debug {
-    class AxesViewer {
-        private _xline;
-        private _yline;
-        private _zline;
-        private _xmesh;
-        private _ymesh;
-        private _zmesh;
-        scene: Scene;
-        scaleLines: number;
-        constructor(scene: Scene, scaleLines?: number);
-        update(position: Vector3, xaxis: Vector3, yaxis: Vector3, zaxis: Vector3): void;
-        dispose(): void;
-    }
-}
-
-declare module BABYLON.Debug {
-    class BoneAxesViewer extends Debug.AxesViewer {
-        mesh: Mesh;
-        bone: Bone;
-        pos: Vector3;
-        xaxis: Vector3;
-        yaxis: Vector3;
-        zaxis: Vector3;
-        constructor(scene: Scene, bone: Bone, mesh: Mesh, scaleLines?: number);
-        update(): void;
-        dispose(): void;
-    }
-}
-
-declare module BABYLON {
-    class DebugLayer {
-        private _scene;
-        static InspectorURL: string;
-        private _inspector;
-        constructor(scene: Scene);
-        /** Creates the inspector window. */
-        private _createInspector(config?);
-        isVisible(): boolean;
-        hide(): void;
-        show(config?: {
-            popup?: boolean;
-            initialTab?: number;
-            parentElement?: HTMLElement;
-            newColors?: {
-                backgroundColor?: string;
-                backgroundColorLighter?: string;
-                backgroundColorLighter2?: string;
-                backgroundColorLighter3?: string;
-                color?: string;
-                colorTop?: string;
-                colorBot?: string;
-            };
-        }): void;
-    }
-}
-
-declare module BABYLON {
-    class RayHelper {
-        ray: Ray;
-        private _renderPoints;
-        private _renderLine;
-        private _renderFunction;
-        private _scene;
-        private _updateToMeshFunction;
-        private _attachedToMesh;
-        private _meshSpaceDirection;
-        private _meshSpaceOrigin;
-        static CreateAndShow(ray: Ray, scene: Scene, color: Color3): RayHelper;
-        constructor(ray: Ray);
-        show(scene: Scene, color: Color3): void;
-        hide(): void;
-        private _render();
-        attachToMesh(mesh: AbstractMesh, meshSpaceDirection?: Vector3, meshSpaceOrigin?: Vector3, length?: number): void;
-        detachFromMesh(): void;
-        private _updateToMesh();
-        dispose(): void;
-    }
-}
-
-declare module BABYLON.Debug {
-    /**
-    * Demo available here: http://www.babylonjs-playground.com/#1BZJVJ#8
-    */
-    class SkeletonViewer {
-        skeleton: Skeleton;
-        mesh: AbstractMesh;
-        autoUpdateBonesMatrices: boolean;
-        renderingGroupId: number;
-        color: Color3;
-        private _scene;
-        private _debugLines;
-        private _debugMesh;
-        private _isEnabled;
-        private _renderFunction;
-        constructor(skeleton: Skeleton, mesh: AbstractMesh, scene: Scene, autoUpdateBonesMatrices?: boolean, renderingGroupId?: number);
-        isEnabled: boolean;
-        private _getBonePosition(position, bone, meshMat, x?, y?, z?);
-        private _getLinesForBonesWithLength(bones, meshMat);
-        private _getLinesForBonesNoLength(bones, meshMat);
-        update(): void;
-        dispose(): void;
-    }
-}
-
-declare module BABYLON {
     class BoundingBox implements ICullable {
         minimum: Vector3;
         maximum: Vector3;
@@ -4107,6 +4003,111 @@ declare module BABYLON {
     }
 }
 
+declare module BABYLON.Debug {
+    class AxesViewer {
+        private _xline;
+        private _yline;
+        private _zline;
+        private _xmesh;
+        private _ymesh;
+        private _zmesh;
+        scene: Scene;
+        scaleLines: number;
+        constructor(scene: Scene, scaleLines?: number);
+        update(position: Vector3, xaxis: Vector3, yaxis: Vector3, zaxis: Vector3): void;
+        dispose(): void;
+    }
+}
+
+declare module BABYLON.Debug {
+    class BoneAxesViewer extends Debug.AxesViewer {
+        mesh: Mesh;
+        bone: Bone;
+        pos: Vector3;
+        xaxis: Vector3;
+        yaxis: Vector3;
+        zaxis: Vector3;
+        constructor(scene: Scene, bone: Bone, mesh: Mesh, scaleLines?: number);
+        update(): void;
+        dispose(): void;
+    }
+}
+
+declare module BABYLON {
+    class DebugLayer {
+        private _scene;
+        static InspectorURL: string;
+        private _inspector;
+        constructor(scene: Scene);
+        /** Creates the inspector window. */
+        private _createInspector(config?);
+        isVisible(): boolean;
+        hide(): void;
+        show(config?: {
+            popup?: boolean;
+            initialTab?: number;
+            parentElement?: HTMLElement;
+            newColors?: {
+                backgroundColor?: string;
+                backgroundColorLighter?: string;
+                backgroundColorLighter2?: string;
+                backgroundColorLighter3?: string;
+                color?: string;
+                colorTop?: string;
+                colorBot?: string;
+            };
+        }): void;
+    }
+}
+
+declare module BABYLON {
+    class RayHelper {
+        ray: Ray;
+        private _renderPoints;
+        private _renderLine;
+        private _renderFunction;
+        private _scene;
+        private _updateToMeshFunction;
+        private _attachedToMesh;
+        private _meshSpaceDirection;
+        private _meshSpaceOrigin;
+        static CreateAndShow(ray: Ray, scene: Scene, color: Color3): RayHelper;
+        constructor(ray: Ray);
+        show(scene: Scene, color: Color3): void;
+        hide(): void;
+        private _render();
+        attachToMesh(mesh: AbstractMesh, meshSpaceDirection?: Vector3, meshSpaceOrigin?: Vector3, length?: number): void;
+        detachFromMesh(): void;
+        private _updateToMesh();
+        dispose(): void;
+    }
+}
+
+declare module BABYLON.Debug {
+    /**
+    * Demo available here: http://www.babylonjs-playground.com/#1BZJVJ#8
+    */
+    class SkeletonViewer {
+        skeleton: Skeleton;
+        mesh: AbstractMesh;
+        autoUpdateBonesMatrices: boolean;
+        renderingGroupId: number;
+        color: Color3;
+        private _scene;
+        private _debugLines;
+        private _debugMesh;
+        private _isEnabled;
+        private _renderFunction;
+        constructor(skeleton: Skeleton, mesh: AbstractMesh, scene: Scene, autoUpdateBonesMatrices?: boolean, renderingGroupId?: number);
+        isEnabled: boolean;
+        private _getBonePosition(position, bone, meshMat, x?, y?, z?);
+        private _getLinesForBonesWithLength(bones, meshMat);
+        private _getLinesForBonesNoLength(bones, meshMat);
+        update(): void;
+        dispose(): void;
+    }
+}
+
 declare module BABYLON {
     /**
      * Highlight layer options. This helps customizing the behaviour
@@ -4408,6 +4409,58 @@ declare module BABYLON {
 }
 
 declare module BABYLON {
+    interface ISceneLoaderPluginExtensions {
+        [extension: string]: {
+            isBinary: boolean;
+        };
+    }
+    interface ISceneLoaderPlugin {
+        extensions: string | ISceneLoaderPluginExtensions;
+        importMesh: (meshesNames: any, scene: Scene, data: any, rootUrl: string, meshes: AbstractMesh[], particleSystems: ParticleSystem[], skeletons: Skeleton[]) => boolean;
+        load: (scene: Scene, data: string, rootUrl: string) => boolean;
+    }
+    interface ISceneLoaderPluginAsync {
+        extensions: string | ISceneLoaderPluginExtensions;
+        importMeshAsync: (meshesNames: any, scene: Scene, data: any, rootUrl: string, onsuccess: (meshes: AbstractMesh[], particleSystems: ParticleSystem[], skeletons: Skeleton[]) => void, onerror: () => void) => void;
+        loadAsync: (scene: Scene, data: string, rootUrl: string, onsuccess: () => void, onerror: () => void) => void;
+    }
+    class SceneLoader {
+        private static _ForceFullSceneLoadingForIncremental;
+        private static _ShowLoadingScreen;
+        static readonly NO_LOGGING: number;
+        static readonly MINIMAL_LOGGING: number;
+        static readonly SUMMARY_LOGGING: number;
+        static readonly DETAILED_LOGGING: number;
+        private static _loggingLevel;
+        static ForceFullSceneLoadingForIncremental: boolean;
+        static ShowLoadingScreen: boolean;
+        static loggingLevel: number;
+        private static _registeredPlugins;
+        private static _getDefaultPlugin();
+        private static _getPluginForExtension(extension);
+        private static _getPluginForFilename(sceneFilename);
+        private static _getDirectLoad(sceneFilename);
+        static GetPluginForExtension(extension: string): ISceneLoaderPlugin | ISceneLoaderPluginAsync;
+        static RegisterPlugin(plugin: ISceneLoaderPlugin | ISceneLoaderPluginAsync): void;
+        static ImportMesh(meshesNames: any, rootUrl: string, sceneFilename: string, scene: Scene, onsuccess?: (meshes: AbstractMesh[], particleSystems: ParticleSystem[], skeletons: Skeleton[]) => void, progressCallBack?: () => void, onerror?: (scene: Scene, message: string, exception?: any) => void): void;
+        /**
+        * Load a scene
+        * @param rootUrl a string that defines the root url for scene and resources
+        * @param sceneFilename a string that defines the name of the scene file. can start with "data:" following by the stringified version of the scene
+        * @param engine is the instance of BABYLON.Engine to use to create the scene
+        */
+        static Load(rootUrl: string, sceneFilename: any, engine: Engine, onsuccess?: (scene: Scene) => void, progressCallBack?: any, onerror?: (scene: Scene) => void): void;
+        /**
+        * Append a scene
+        * @param rootUrl a string that defines the root url for scene and resources
+        * @param sceneFilename a string that defines the name of the scene file. can start with "data:" following by the stringified version of the scene
+        * @param scene is the instance of BABYLON.Scene to append to
+        */
+        static Append(rootUrl: string, sceneFilename: any, scene: Scene, onsuccess?: (scene: Scene) => void, progressCallBack?: any, onerror?: (scene: Scene) => void): void;
+    }
+}
+
+declare module BABYLON {
     class DirectionalLight extends Light implements IShadowLight {
         position: Vector3;
         direction: Vector3;
@@ -4793,58 +4846,6 @@ declare module BABYLON {
 }
 
 declare module BABYLON {
-    interface ISceneLoaderPluginExtensions {
-        [extension: string]: {
-            isBinary: boolean;
-        };
-    }
-    interface ISceneLoaderPlugin {
-        extensions: string | ISceneLoaderPluginExtensions;
-        importMesh: (meshesNames: any, scene: Scene, data: any, rootUrl: string, meshes: AbstractMesh[], particleSystems: ParticleSystem[], skeletons: Skeleton[]) => boolean;
-        load: (scene: Scene, data: string, rootUrl: string) => boolean;
-    }
-    interface ISceneLoaderPluginAsync {
-        extensions: string | ISceneLoaderPluginExtensions;
-        importMeshAsync: (meshesNames: any, scene: Scene, data: any, rootUrl: string, onsuccess: (meshes: AbstractMesh[], particleSystems: ParticleSystem[], skeletons: Skeleton[]) => void, onerror: () => void) => void;
-        loadAsync: (scene: Scene, data: string, rootUrl: string, onsuccess: () => void, onerror: () => void) => void;
-    }
-    class SceneLoader {
-        private static _ForceFullSceneLoadingForIncremental;
-        private static _ShowLoadingScreen;
-        static readonly NO_LOGGING: number;
-        static readonly MINIMAL_LOGGING: number;
-        static readonly SUMMARY_LOGGING: number;
-        static readonly DETAILED_LOGGING: number;
-        private static _loggingLevel;
-        static ForceFullSceneLoadingForIncremental: boolean;
-        static ShowLoadingScreen: boolean;
-        static loggingLevel: number;
-        private static _registeredPlugins;
-        private static _getDefaultPlugin();
-        private static _getPluginForExtension(extension);
-        private static _getPluginForFilename(sceneFilename);
-        private static _getDirectLoad(sceneFilename);
-        static GetPluginForExtension(extension: string): ISceneLoaderPlugin | ISceneLoaderPluginAsync;
-        static RegisterPlugin(plugin: ISceneLoaderPlugin | ISceneLoaderPluginAsync): void;
-        static ImportMesh(meshesNames: any, rootUrl: string, sceneFilename: string, scene: Scene, onsuccess?: (meshes: AbstractMesh[], particleSystems: ParticleSystem[], skeletons: Skeleton[]) => void, progressCallBack?: () => void, onerror?: (scene: Scene, message: string, exception?: any) => void): void;
-        /**
-        * Load a scene
-        * @param rootUrl a string that defines the root url for scene and resources
-        * @param sceneFilename a string that defines the name of the scene file. can start with "data:" following by the stringified version of the scene
-        * @param engine is the instance of BABYLON.Engine to use to create the scene
-        */
-        static Load(rootUrl: string, sceneFilename: any, engine: Engine, onsuccess?: (scene: Scene) => void, progressCallBack?: any, onerror?: (scene: Scene) => void): void;
-        /**
-        * Append a scene
-        * @param rootUrl a string that defines the root url for scene and resources
-        * @param sceneFilename a string that defines the name of the scene file. can start with "data:" following by the stringified version of the scene
-        * @param scene is the instance of BABYLON.Scene to append to
-        */
-        static Append(rootUrl: string, sceneFilename: any, scene: Scene, onsuccess?: (scene: Scene) => void, progressCallBack?: any, onerror?: (scene: Scene) => void): void;
-    }
-}
-
-declare module BABYLON {
     /**
      * The color grading curves provide additional color adjustmnent that is applied after any color grading transform (3D LUT).
      * They allow basic adjustment of saturation and small exposure adjustments, along with color filter tinting to provide white balance adjustment or more stylistic effects.
@@ -7997,60 +7998,6 @@ declare module BABYLON {
 }
 
 declare module BABYLON {
-    class MorphTarget {
-        name: string;
-        private _positions;
-        private _normals;
-        private _influence;
-        onInfluenceChanged: Observable<boolean>;
-        influence: number;
-        constructor(name: string, influence?: number);
-        readonly hasNormals: boolean;
-        setPositions(data: Float32Array | number[]): void;
-        getPositions(): Float32Array;
-        setNormals(data: Float32Array | number[]): void;
-        getNormals(): Float32Array;
-        /**
-         * Serializes the current target into a Serialization object.
-         * Returns the serialized object.
-         */
-        serialize(): any;
-        static Parse(serializationObject: any): MorphTarget;
-        static FromMesh(mesh: AbstractMesh, name?: string, influence?: number): MorphTarget;
-    }
-}
-
-declare module BABYLON {
-    class MorphTargetManager {
-        private _targets;
-        private _targetObservable;
-        private _activeTargets;
-        private _scene;
-        private _influences;
-        private _supportsNormals;
-        private _vertexCount;
-        private _uniqueId;
-        constructor(scene?: Scene);
-        readonly uniqueId: number;
-        readonly vertexCount: number;
-        readonly supportsNormals: boolean;
-        readonly numInfluencers: number;
-        readonly influences: Float32Array;
-        getActiveTarget(index: number): MorphTarget;
-        addTarget(target: MorphTarget): void;
-        removeTarget(target: MorphTarget): void;
-        /**
-         * Serializes the current manager into a Serialization object.
-         * Returns the serialized object.
-         */
-        serialize(): any;
-        private _onInfluenceChanged(needUpdate);
-        private _syncActiveTargets(needUpdate);
-        static Parse(serializationObject: any, scene: Scene): MorphTargetManager;
-    }
-}
-
-declare module BABYLON {
     class AbstractMesh extends Node implements IDisposable, ICullable, IGetSetVerticesData {
         private static _BILLBOARDMODE_NONE;
         private static _BILLBOARDMODE_X;
@@ -11272,6 +11219,60 @@ declare module BABYLON {
 }
 
 declare module BABYLON {
+    class MorphTarget {
+        name: string;
+        private _positions;
+        private _normals;
+        private _influence;
+        onInfluenceChanged: Observable<boolean>;
+        influence: number;
+        constructor(name: string, influence?: number);
+        readonly hasNormals: boolean;
+        setPositions(data: Float32Array | number[]): void;
+        getPositions(): Float32Array;
+        setNormals(data: Float32Array | number[]): void;
+        getNormals(): Float32Array;
+        /**
+         * Serializes the current target into a Serialization object.
+         * Returns the serialized object.
+         */
+        serialize(): any;
+        static Parse(serializationObject: any): MorphTarget;
+        static FromMesh(mesh: AbstractMesh, name?: string, influence?: number): MorphTarget;
+    }
+}
+
+declare module BABYLON {
+    class MorphTargetManager {
+        private _targets;
+        private _targetObservable;
+        private _activeTargets;
+        private _scene;
+        private _influences;
+        private _supportsNormals;
+        private _vertexCount;
+        private _uniqueId;
+        constructor(scene?: Scene);
+        readonly uniqueId: number;
+        readonly vertexCount: number;
+        readonly supportsNormals: boolean;
+        readonly numInfluencers: number;
+        readonly influences: Float32Array;
+        getActiveTarget(index: number): MorphTarget;
+        addTarget(target: MorphTarget): void;
+        removeTarget(target: MorphTarget): void;
+        /**
+         * Serializes the current manager into a Serialization object.
+         * Returns the serialized object.
+         */
+        serialize(): any;
+        private _onInfluenceChanged(needUpdate);
+        private _syncActiveTargets(needUpdate);
+        static Parse(serializationObject: any, scene: Scene): MorphTargetManager;
+    }
+}
+
+declare module BABYLON {
     class Particle {
         position: Vector3;
         direction: Vector3;
@@ -14865,6 +14866,9 @@ declare module BABYLON {
     }
 }
 
+declare module BABYLON.Internals {
+}
+
 declare module BABYLON {
     interface IShadowGenerator {
         getShadowMap(): RenderTargetTexture;
@@ -14978,9 +14982,6 @@ declare module BABYLON {
     }
 }
 
-declare module BABYLON.Internals {
-}
-
 declare module BABYLON {
     class BaseTexture {
         name: string;

Fichier diff supprimé car celui-ci est trop grand
+ 34 - 43
dist/preview release/babylon.js


Fichier diff supprimé car celui-ci est trop grand
+ 36561 - 46937
dist/preview release/babylon.max.js


+ 460 - 459
dist/preview release/babylon.module.d.ts

@@ -158,7 +158,7 @@ declare module BABYLON {
         cullBackFaces: boolean;
         renderEvenInBackground: boolean;
         preventCacheWipeBetweenFrames: boolean;
-        enableOfflineSupport: boolean;
+        enableOfflineSupport: typeof Database;
         scenes: Scene[];
         vrDisplaysPromise: any;
         private _vrDisplays;
@@ -1517,7 +1517,8 @@ declare module BABYLON {
         gravity: Vector3;
         postProcessesEnabled: boolean;
         postProcessManager: PostProcessManager;
-        postProcessRenderPipelineManager: PostProcessRenderPipelineManager;
+        private _postProcessRenderPipelineManager;
+        readonly postProcessRenderPipelineManager: PostProcessRenderPipelineManager;
         renderTargetsEnabled: boolean;
         dumpNextRenderTargets: boolean;
         customRenderTargets: RenderTargetTexture[];
@@ -3186,6 +3187,249 @@ declare module BABYLON {
 }
 
 declare module BABYLON {
+    class Collider {
+        radius: Vector3;
+        retry: number;
+        velocity: Vector3;
+        basePoint: Vector3;
+        epsilon: number;
+        collisionFound: boolean;
+        velocityWorldLength: number;
+        basePointWorld: Vector3;
+        velocityWorld: Vector3;
+        normalizedVelocity: Vector3;
+        initialVelocity: Vector3;
+        initialPosition: Vector3;
+        nearestDistance: number;
+        intersectionPoint: Vector3;
+        collidedMesh: AbstractMesh;
+        private _collisionPoint;
+        private _planeIntersectionPoint;
+        private _tempVector;
+        private _tempVector2;
+        private _tempVector3;
+        private _tempVector4;
+        private _edge;
+        private _baseToVertex;
+        private _destinationPoint;
+        private _slidePlaneNormal;
+        private _displacementVector;
+        private _collisionMask;
+        collisionMask: number;
+        _initialize(source: Vector3, dir: Vector3, e: number): void;
+        _checkPointInTriangle(point: Vector3, pa: Vector3, pb: Vector3, pc: Vector3, n: Vector3): boolean;
+        _canDoCollision(sphereCenter: Vector3, sphereRadius: number, vecMin: Vector3, vecMax: Vector3): boolean;
+        _testTriangle(faceIndex: number, trianglePlaneArray: Array<Plane>, p1: Vector3, p2: Vector3, p3: Vector3, hasMaterial: boolean): void;
+        _collide(trianglePlaneArray: Array<Plane>, pts: Vector3[], indices: IndicesArray, indexStart: number, indexEnd: number, decal: number, hasMaterial: boolean): void;
+        _getResponse(pos: Vector3, vel: Vector3): void;
+    }
+}
+
+declare module BABYLON {
+    var CollisionWorker: string;
+    interface ICollisionCoordinator {
+        getNewPosition(position: Vector3, velocity: Vector3, collider: Collider, maximumRetry: number, excludedMesh: AbstractMesh, onNewPosition: (collisionIndex: number, newPosition: Vector3, collidedMesh?: AbstractMesh) => void, collisionIndex: number): void;
+        init(scene: Scene): void;
+        destroy(): void;
+        onMeshAdded(mesh: AbstractMesh): any;
+        onMeshUpdated(mesh: AbstractMesh): any;
+        onMeshRemoved(mesh: AbstractMesh): any;
+        onGeometryAdded(geometry: Geometry): any;
+        onGeometryUpdated(geometry: Geometry): any;
+        onGeometryDeleted(geometry: Geometry): any;
+    }
+    interface SerializedMesh {
+        id: string;
+        name: string;
+        uniqueId: number;
+        geometryId: string;
+        sphereCenter: Array<number>;
+        sphereRadius: number;
+        boxMinimum: Array<number>;
+        boxMaximum: Array<number>;
+        worldMatrixFromCache: any;
+        subMeshes: Array<SerializedSubMesh>;
+        checkCollisions: boolean;
+    }
+    interface SerializedSubMesh {
+        position: number;
+        verticesStart: number;
+        verticesCount: number;
+        indexStart: number;
+        indexCount: number;
+        hasMaterial: boolean;
+        sphereCenter: Array<number>;
+        sphereRadius: number;
+        boxMinimum: Array<number>;
+        boxMaximum: Array<number>;
+    }
+    interface SerializedGeometry {
+        id: string;
+        positions: Float32Array;
+        indices: Uint32Array;
+        normals: Float32Array;
+    }
+    interface BabylonMessage {
+        taskType: WorkerTaskType;
+        payload: InitPayload | CollidePayload | UpdatePayload;
+    }
+    interface SerializedColliderToWorker {
+        position: Array<number>;
+        velocity: Array<number>;
+        radius: Array<number>;
+    }
+    enum WorkerTaskType {
+        INIT = 0,
+        UPDATE = 1,
+        COLLIDE = 2,
+    }
+    interface WorkerReply {
+        error: WorkerReplyType;
+        taskType: WorkerTaskType;
+        payload?: any;
+    }
+    interface CollisionReplyPayload {
+        newPosition: Array<number>;
+        collisionId: number;
+        collidedMeshUniqueId: number;
+    }
+    interface InitPayload {
+    }
+    interface CollidePayload {
+        collisionId: number;
+        collider: SerializedColliderToWorker;
+        maximumRetry: number;
+        excludedMeshUniqueId?: number;
+    }
+    interface UpdatePayload {
+        updatedMeshes: {
+            [n: number]: SerializedMesh;
+        };
+        updatedGeometries: {
+            [s: string]: SerializedGeometry;
+        };
+        removedMeshes: Array<number>;
+        removedGeometries: Array<string>;
+    }
+    enum WorkerReplyType {
+        SUCCESS = 0,
+        UNKNOWN_ERROR = 1,
+    }
+    class CollisionCoordinatorWorker implements ICollisionCoordinator {
+        private _scene;
+        private _scaledPosition;
+        private _scaledVelocity;
+        private _collisionsCallbackArray;
+        private _init;
+        private _runningUpdated;
+        private _runningCollisionTask;
+        private _worker;
+        private _addUpdateMeshesList;
+        private _addUpdateGeometriesList;
+        private _toRemoveMeshesArray;
+        private _toRemoveGeometryArray;
+        constructor();
+        static SerializeMesh: (mesh: AbstractMesh) => SerializedMesh;
+        static SerializeGeometry: (geometry: Geometry) => SerializedGeometry;
+        getNewPosition(position: Vector3, velocity: Vector3, collider: Collider, maximumRetry: number, excludedMesh: AbstractMesh, onNewPosition: (collisionIndex: number, newPosition: Vector3, collidedMesh?: AbstractMesh) => void, collisionIndex: number): void;
+        init(scene: Scene): void;
+        destroy(): void;
+        onMeshAdded(mesh: AbstractMesh): void;
+        onMeshUpdated: (mesh: AbstractMesh) => void;
+        onMeshRemoved(mesh: AbstractMesh): void;
+        onGeometryAdded(geometry: Geometry): void;
+        onGeometryUpdated: (geometry: Geometry) => void;
+        onGeometryDeleted(geometry: Geometry): void;
+        private _afterRender;
+        private _onMessageFromWorker;
+    }
+    class CollisionCoordinatorLegacy implements ICollisionCoordinator {
+        private _scene;
+        private _scaledPosition;
+        private _scaledVelocity;
+        private _finalPosition;
+        getNewPosition(position: Vector3, velocity: Vector3, collider: Collider, maximumRetry: number, excludedMesh: AbstractMesh, onNewPosition: (collisionIndex: number, newPosition: Vector3, collidedMesh?: AbstractMesh) => void, collisionIndex: number): void;
+        init(scene: Scene): void;
+        destroy(): void;
+        onMeshAdded(mesh: AbstractMesh): void;
+        onMeshUpdated(mesh: AbstractMesh): void;
+        onMeshRemoved(mesh: AbstractMesh): void;
+        onGeometryAdded(geometry: Geometry): void;
+        onGeometryUpdated(geometry: Geometry): void;
+        onGeometryDeleted(geometry: Geometry): void;
+        private _collideWithWorld(position, velocity, collider, maximumRetry, finalPosition, excludedMesh?);
+    }
+}
+
+declare module BABYLON {
+    var WorkerIncluded: boolean;
+    class CollisionCache {
+        private _meshes;
+        private _geometries;
+        getMeshes(): {
+            [n: number]: SerializedMesh;
+        };
+        getGeometries(): {
+            [s: number]: SerializedGeometry;
+        };
+        getMesh(id: any): SerializedMesh;
+        addMesh(mesh: SerializedMesh): void;
+        removeMesh(uniqueId: number): void;
+        getGeometry(id: string): SerializedGeometry;
+        addGeometry(geometry: SerializedGeometry): void;
+        removeGeometry(id: string): void;
+    }
+    class CollideWorker {
+        collider: Collider;
+        private _collisionCache;
+        private finalPosition;
+        private collisionsScalingMatrix;
+        private collisionTranformationMatrix;
+        constructor(collider: Collider, _collisionCache: CollisionCache, finalPosition: Vector3);
+        collideWithWorld(position: Vector3, velocity: Vector3, maximumRetry: number, excludedMeshUniqueId?: number): void;
+        private checkCollision(mesh);
+        private processCollisionsForSubMeshes(transformMatrix, mesh);
+        private collideForSubMesh(subMesh, transformMatrix, meshGeometry);
+        private checkSubmeshCollision(subMesh);
+    }
+    interface ICollisionDetector {
+        onInit(payload: InitPayload): void;
+        onUpdate(payload: UpdatePayload): void;
+        onCollision(payload: CollidePayload): void;
+    }
+    class CollisionDetectorTransferable implements ICollisionDetector {
+        private _collisionCache;
+        onInit(payload: InitPayload): void;
+        onUpdate(payload: UpdatePayload): void;
+        onCollision(payload: CollidePayload): void;
+    }
+}
+
+declare module BABYLON {
+    class IntersectionInfo {
+        bu: number;
+        bv: number;
+        distance: number;
+        faceId: number;
+        subMeshId: number;
+        constructor(bu: number, bv: number, distance: number);
+    }
+    class PickingInfo {
+        hit: boolean;
+        distance: number;
+        pickedPoint: Vector3;
+        pickedMesh: AbstractMesh;
+        bu: number;
+        bv: number;
+        faceId: number;
+        subMeshId: number;
+        pickedSprite: Sprite;
+        getNormal(useWorldCoordinates?: boolean, useVerticesNormals?: boolean): Vector3;
+        getTextureCoordinates(): Vector2;
+    }
+}
+
+declare module BABYLON {
     class ArcRotateCamera extends TargetCamera {
         alpha: number;
         beta: number;
@@ -3646,354 +3890,6 @@ declare module BABYLON {
 }
 
 declare module BABYLON {
-    class Collider {
-        radius: Vector3;
-        retry: number;
-        velocity: Vector3;
-        basePoint: Vector3;
-        epsilon: number;
-        collisionFound: boolean;
-        velocityWorldLength: number;
-        basePointWorld: Vector3;
-        velocityWorld: Vector3;
-        normalizedVelocity: Vector3;
-        initialVelocity: Vector3;
-        initialPosition: Vector3;
-        nearestDistance: number;
-        intersectionPoint: Vector3;
-        collidedMesh: AbstractMesh;
-        private _collisionPoint;
-        private _planeIntersectionPoint;
-        private _tempVector;
-        private _tempVector2;
-        private _tempVector3;
-        private _tempVector4;
-        private _edge;
-        private _baseToVertex;
-        private _destinationPoint;
-        private _slidePlaneNormal;
-        private _displacementVector;
-        private _collisionMask;
-        collisionMask: number;
-        _initialize(source: Vector3, dir: Vector3, e: number): void;
-        _checkPointInTriangle(point: Vector3, pa: Vector3, pb: Vector3, pc: Vector3, n: Vector3): boolean;
-        _canDoCollision(sphereCenter: Vector3, sphereRadius: number, vecMin: Vector3, vecMax: Vector3): boolean;
-        _testTriangle(faceIndex: number, trianglePlaneArray: Array<Plane>, p1: Vector3, p2: Vector3, p3: Vector3, hasMaterial: boolean): void;
-        _collide(trianglePlaneArray: Array<Plane>, pts: Vector3[], indices: IndicesArray, indexStart: number, indexEnd: number, decal: number, hasMaterial: boolean): void;
-        _getResponse(pos: Vector3, vel: Vector3): void;
-    }
-}
-
-declare module BABYLON {
-    var CollisionWorker: string;
-    interface ICollisionCoordinator {
-        getNewPosition(position: Vector3, velocity: Vector3, collider: Collider, maximumRetry: number, excludedMesh: AbstractMesh, onNewPosition: (collisionIndex: number, newPosition: Vector3, collidedMesh?: AbstractMesh) => void, collisionIndex: number): void;
-        init(scene: Scene): void;
-        destroy(): void;
-        onMeshAdded(mesh: AbstractMesh): any;
-        onMeshUpdated(mesh: AbstractMesh): any;
-        onMeshRemoved(mesh: AbstractMesh): any;
-        onGeometryAdded(geometry: Geometry): any;
-        onGeometryUpdated(geometry: Geometry): any;
-        onGeometryDeleted(geometry: Geometry): any;
-    }
-    interface SerializedMesh {
-        id: string;
-        name: string;
-        uniqueId: number;
-        geometryId: string;
-        sphereCenter: Array<number>;
-        sphereRadius: number;
-        boxMinimum: Array<number>;
-        boxMaximum: Array<number>;
-        worldMatrixFromCache: any;
-        subMeshes: Array<SerializedSubMesh>;
-        checkCollisions: boolean;
-    }
-    interface SerializedSubMesh {
-        position: number;
-        verticesStart: number;
-        verticesCount: number;
-        indexStart: number;
-        indexCount: number;
-        hasMaterial: boolean;
-        sphereCenter: Array<number>;
-        sphereRadius: number;
-        boxMinimum: Array<number>;
-        boxMaximum: Array<number>;
-    }
-    interface SerializedGeometry {
-        id: string;
-        positions: Float32Array;
-        indices: Uint32Array;
-        normals: Float32Array;
-    }
-    interface BabylonMessage {
-        taskType: WorkerTaskType;
-        payload: InitPayload | CollidePayload | UpdatePayload;
-    }
-    interface SerializedColliderToWorker {
-        position: Array<number>;
-        velocity: Array<number>;
-        radius: Array<number>;
-    }
-    enum WorkerTaskType {
-        INIT = 0,
-        UPDATE = 1,
-        COLLIDE = 2,
-    }
-    interface WorkerReply {
-        error: WorkerReplyType;
-        taskType: WorkerTaskType;
-        payload?: any;
-    }
-    interface CollisionReplyPayload {
-        newPosition: Array<number>;
-        collisionId: number;
-        collidedMeshUniqueId: number;
-    }
-    interface InitPayload {
-    }
-    interface CollidePayload {
-        collisionId: number;
-        collider: SerializedColliderToWorker;
-        maximumRetry: number;
-        excludedMeshUniqueId?: number;
-    }
-    interface UpdatePayload {
-        updatedMeshes: {
-            [n: number]: SerializedMesh;
-        };
-        updatedGeometries: {
-            [s: string]: SerializedGeometry;
-        };
-        removedMeshes: Array<number>;
-        removedGeometries: Array<string>;
-    }
-    enum WorkerReplyType {
-        SUCCESS = 0,
-        UNKNOWN_ERROR = 1,
-    }
-    class CollisionCoordinatorWorker implements ICollisionCoordinator {
-        private _scene;
-        private _scaledPosition;
-        private _scaledVelocity;
-        private _collisionsCallbackArray;
-        private _init;
-        private _runningUpdated;
-        private _runningCollisionTask;
-        private _worker;
-        private _addUpdateMeshesList;
-        private _addUpdateGeometriesList;
-        private _toRemoveMeshesArray;
-        private _toRemoveGeometryArray;
-        constructor();
-        static SerializeMesh: (mesh: AbstractMesh) => SerializedMesh;
-        static SerializeGeometry: (geometry: Geometry) => SerializedGeometry;
-        getNewPosition(position: Vector3, velocity: Vector3, collider: Collider, maximumRetry: number, excludedMesh: AbstractMesh, onNewPosition: (collisionIndex: number, newPosition: Vector3, collidedMesh?: AbstractMesh) => void, collisionIndex: number): void;
-        init(scene: Scene): void;
-        destroy(): void;
-        onMeshAdded(mesh: AbstractMesh): void;
-        onMeshUpdated: (mesh: AbstractMesh) => void;
-        onMeshRemoved(mesh: AbstractMesh): void;
-        onGeometryAdded(geometry: Geometry): void;
-        onGeometryUpdated: (geometry: Geometry) => void;
-        onGeometryDeleted(geometry: Geometry): void;
-        private _afterRender;
-        private _onMessageFromWorker;
-    }
-    class CollisionCoordinatorLegacy implements ICollisionCoordinator {
-        private _scene;
-        private _scaledPosition;
-        private _scaledVelocity;
-        private _finalPosition;
-        getNewPosition(position: Vector3, velocity: Vector3, collider: Collider, maximumRetry: number, excludedMesh: AbstractMesh, onNewPosition: (collisionIndex: number, newPosition: Vector3, collidedMesh?: AbstractMesh) => void, collisionIndex: number): void;
-        init(scene: Scene): void;
-        destroy(): void;
-        onMeshAdded(mesh: AbstractMesh): void;
-        onMeshUpdated(mesh: AbstractMesh): void;
-        onMeshRemoved(mesh: AbstractMesh): void;
-        onGeometryAdded(geometry: Geometry): void;
-        onGeometryUpdated(geometry: Geometry): void;
-        onGeometryDeleted(geometry: Geometry): void;
-        private _collideWithWorld(position, velocity, collider, maximumRetry, finalPosition, excludedMesh?);
-    }
-}
-
-declare module BABYLON {
-    var WorkerIncluded: boolean;
-    class CollisionCache {
-        private _meshes;
-        private _geometries;
-        getMeshes(): {
-            [n: number]: SerializedMesh;
-        };
-        getGeometries(): {
-            [s: number]: SerializedGeometry;
-        };
-        getMesh(id: any): SerializedMesh;
-        addMesh(mesh: SerializedMesh): void;
-        removeMesh(uniqueId: number): void;
-        getGeometry(id: string): SerializedGeometry;
-        addGeometry(geometry: SerializedGeometry): void;
-        removeGeometry(id: string): void;
-    }
-    class CollideWorker {
-        collider: Collider;
-        private _collisionCache;
-        private finalPosition;
-        private collisionsScalingMatrix;
-        private collisionTranformationMatrix;
-        constructor(collider: Collider, _collisionCache: CollisionCache, finalPosition: Vector3);
-        collideWithWorld(position: Vector3, velocity: Vector3, maximumRetry: number, excludedMeshUniqueId?: number): void;
-        private checkCollision(mesh);
-        private processCollisionsForSubMeshes(transformMatrix, mesh);
-        private collideForSubMesh(subMesh, transformMatrix, meshGeometry);
-        private checkSubmeshCollision(subMesh);
-    }
-    interface ICollisionDetector {
-        onInit(payload: InitPayload): void;
-        onUpdate(payload: UpdatePayload): void;
-        onCollision(payload: CollidePayload): void;
-    }
-    class CollisionDetectorTransferable implements ICollisionDetector {
-        private _collisionCache;
-        onInit(payload: InitPayload): void;
-        onUpdate(payload: UpdatePayload): void;
-        onCollision(payload: CollidePayload): void;
-    }
-}
-
-declare module BABYLON {
-    class IntersectionInfo {
-        bu: number;
-        bv: number;
-        distance: number;
-        faceId: number;
-        subMeshId: number;
-        constructor(bu: number, bv: number, distance: number);
-    }
-    class PickingInfo {
-        hit: boolean;
-        distance: number;
-        pickedPoint: Vector3;
-        pickedMesh: AbstractMesh;
-        bu: number;
-        bv: number;
-        faceId: number;
-        subMeshId: number;
-        pickedSprite: Sprite;
-        getNormal(useWorldCoordinates?: boolean, useVerticesNormals?: boolean): Vector3;
-        getTextureCoordinates(): Vector2;
-    }
-}
-
-declare module BABYLON.Debug {
-    class AxesViewer {
-        private _xline;
-        private _yline;
-        private _zline;
-        private _xmesh;
-        private _ymesh;
-        private _zmesh;
-        scene: Scene;
-        scaleLines: number;
-        constructor(scene: Scene, scaleLines?: number);
-        update(position: Vector3, xaxis: Vector3, yaxis: Vector3, zaxis: Vector3): void;
-        dispose(): void;
-    }
-}
-
-declare module BABYLON.Debug {
-    class BoneAxesViewer extends Debug.AxesViewer {
-        mesh: Mesh;
-        bone: Bone;
-        pos: Vector3;
-        xaxis: Vector3;
-        yaxis: Vector3;
-        zaxis: Vector3;
-        constructor(scene: Scene, bone: Bone, mesh: Mesh, scaleLines?: number);
-        update(): void;
-        dispose(): void;
-    }
-}
-
-declare module BABYLON {
-    class DebugLayer {
-        private _scene;
-        static InspectorURL: string;
-        private _inspector;
-        constructor(scene: Scene);
-        /** Creates the inspector window. */
-        private _createInspector(config?);
-        isVisible(): boolean;
-        hide(): void;
-        show(config?: {
-            popup?: boolean;
-            initialTab?: number;
-            parentElement?: HTMLElement;
-            newColors?: {
-                backgroundColor?: string;
-                backgroundColorLighter?: string;
-                backgroundColorLighter2?: string;
-                backgroundColorLighter3?: string;
-                color?: string;
-                colorTop?: string;
-                colorBot?: string;
-            };
-        }): void;
-    }
-}
-
-declare module BABYLON {
-    class RayHelper {
-        ray: Ray;
-        private _renderPoints;
-        private _renderLine;
-        private _renderFunction;
-        private _scene;
-        private _updateToMeshFunction;
-        private _attachedToMesh;
-        private _meshSpaceDirection;
-        private _meshSpaceOrigin;
-        static CreateAndShow(ray: Ray, scene: Scene, color: Color3): RayHelper;
-        constructor(ray: Ray);
-        show(scene: Scene, color: Color3): void;
-        hide(): void;
-        private _render();
-        attachToMesh(mesh: AbstractMesh, meshSpaceDirection?: Vector3, meshSpaceOrigin?: Vector3, length?: number): void;
-        detachFromMesh(): void;
-        private _updateToMesh();
-        dispose(): void;
-    }
-}
-
-declare module BABYLON.Debug {
-    /**
-    * Demo available here: http://www.babylonjs-playground.com/#1BZJVJ#8
-    */
-    class SkeletonViewer {
-        skeleton: Skeleton;
-        mesh: AbstractMesh;
-        autoUpdateBonesMatrices: boolean;
-        renderingGroupId: number;
-        color: Color3;
-        private _scene;
-        private _debugLines;
-        private _debugMesh;
-        private _isEnabled;
-        private _renderFunction;
-        constructor(skeleton: Skeleton, mesh: AbstractMesh, scene: Scene, autoUpdateBonesMatrices?: boolean, renderingGroupId?: number);
-        isEnabled: boolean;
-        private _getBonePosition(position, bone, meshMat, x?, y?, z?);
-        private _getLinesForBonesWithLength(bones, meshMat);
-        private _getLinesForBonesNoLength(bones, meshMat);
-        update(): void;
-        dispose(): void;
-    }
-}
-
-declare module BABYLON {
     class BoundingBox implements ICullable {
         minimum: Vector3;
         maximum: Vector3;
@@ -4107,6 +4003,111 @@ declare module BABYLON {
     }
 }
 
+declare module BABYLON.Debug {
+    class AxesViewer {
+        private _xline;
+        private _yline;
+        private _zline;
+        private _xmesh;
+        private _ymesh;
+        private _zmesh;
+        scene: Scene;
+        scaleLines: number;
+        constructor(scene: Scene, scaleLines?: number);
+        update(position: Vector3, xaxis: Vector3, yaxis: Vector3, zaxis: Vector3): void;
+        dispose(): void;
+    }
+}
+
+declare module BABYLON.Debug {
+    class BoneAxesViewer extends Debug.AxesViewer {
+        mesh: Mesh;
+        bone: Bone;
+        pos: Vector3;
+        xaxis: Vector3;
+        yaxis: Vector3;
+        zaxis: Vector3;
+        constructor(scene: Scene, bone: Bone, mesh: Mesh, scaleLines?: number);
+        update(): void;
+        dispose(): void;
+    }
+}
+
+declare module BABYLON {
+    class DebugLayer {
+        private _scene;
+        static InspectorURL: string;
+        private _inspector;
+        constructor(scene: Scene);
+        /** Creates the inspector window. */
+        private _createInspector(config?);
+        isVisible(): boolean;
+        hide(): void;
+        show(config?: {
+            popup?: boolean;
+            initialTab?: number;
+            parentElement?: HTMLElement;
+            newColors?: {
+                backgroundColor?: string;
+                backgroundColorLighter?: string;
+                backgroundColorLighter2?: string;
+                backgroundColorLighter3?: string;
+                color?: string;
+                colorTop?: string;
+                colorBot?: string;
+            };
+        }): void;
+    }
+}
+
+declare module BABYLON {
+    class RayHelper {
+        ray: Ray;
+        private _renderPoints;
+        private _renderLine;
+        private _renderFunction;
+        private _scene;
+        private _updateToMeshFunction;
+        private _attachedToMesh;
+        private _meshSpaceDirection;
+        private _meshSpaceOrigin;
+        static CreateAndShow(ray: Ray, scene: Scene, color: Color3): RayHelper;
+        constructor(ray: Ray);
+        show(scene: Scene, color: Color3): void;
+        hide(): void;
+        private _render();
+        attachToMesh(mesh: AbstractMesh, meshSpaceDirection?: Vector3, meshSpaceOrigin?: Vector3, length?: number): void;
+        detachFromMesh(): void;
+        private _updateToMesh();
+        dispose(): void;
+    }
+}
+
+declare module BABYLON.Debug {
+    /**
+    * Demo available here: http://www.babylonjs-playground.com/#1BZJVJ#8
+    */
+    class SkeletonViewer {
+        skeleton: Skeleton;
+        mesh: AbstractMesh;
+        autoUpdateBonesMatrices: boolean;
+        renderingGroupId: number;
+        color: Color3;
+        private _scene;
+        private _debugLines;
+        private _debugMesh;
+        private _isEnabled;
+        private _renderFunction;
+        constructor(skeleton: Skeleton, mesh: AbstractMesh, scene: Scene, autoUpdateBonesMatrices?: boolean, renderingGroupId?: number);
+        isEnabled: boolean;
+        private _getBonePosition(position, bone, meshMat, x?, y?, z?);
+        private _getLinesForBonesWithLength(bones, meshMat);
+        private _getLinesForBonesNoLength(bones, meshMat);
+        update(): void;
+        dispose(): void;
+    }
+}
+
 declare module BABYLON {
     /**
      * Highlight layer options. This helps customizing the behaviour
@@ -4408,6 +4409,58 @@ declare module BABYLON {
 }
 
 declare module BABYLON {
+    interface ISceneLoaderPluginExtensions {
+        [extension: string]: {
+            isBinary: boolean;
+        };
+    }
+    interface ISceneLoaderPlugin {
+        extensions: string | ISceneLoaderPluginExtensions;
+        importMesh: (meshesNames: any, scene: Scene, data: any, rootUrl: string, meshes: AbstractMesh[], particleSystems: ParticleSystem[], skeletons: Skeleton[]) => boolean;
+        load: (scene: Scene, data: string, rootUrl: string) => boolean;
+    }
+    interface ISceneLoaderPluginAsync {
+        extensions: string | ISceneLoaderPluginExtensions;
+        importMeshAsync: (meshesNames: any, scene: Scene, data: any, rootUrl: string, onsuccess: (meshes: AbstractMesh[], particleSystems: ParticleSystem[], skeletons: Skeleton[]) => void, onerror: () => void) => void;
+        loadAsync: (scene: Scene, data: string, rootUrl: string, onsuccess: () => void, onerror: () => void) => void;
+    }
+    class SceneLoader {
+        private static _ForceFullSceneLoadingForIncremental;
+        private static _ShowLoadingScreen;
+        static readonly NO_LOGGING: number;
+        static readonly MINIMAL_LOGGING: number;
+        static readonly SUMMARY_LOGGING: number;
+        static readonly DETAILED_LOGGING: number;
+        private static _loggingLevel;
+        static ForceFullSceneLoadingForIncremental: boolean;
+        static ShowLoadingScreen: boolean;
+        static loggingLevel: number;
+        private static _registeredPlugins;
+        private static _getDefaultPlugin();
+        private static _getPluginForExtension(extension);
+        private static _getPluginForFilename(sceneFilename);
+        private static _getDirectLoad(sceneFilename);
+        static GetPluginForExtension(extension: string): ISceneLoaderPlugin | ISceneLoaderPluginAsync;
+        static RegisterPlugin(plugin: ISceneLoaderPlugin | ISceneLoaderPluginAsync): void;
+        static ImportMesh(meshesNames: any, rootUrl: string, sceneFilename: string, scene: Scene, onsuccess?: (meshes: AbstractMesh[], particleSystems: ParticleSystem[], skeletons: Skeleton[]) => void, progressCallBack?: () => void, onerror?: (scene: Scene, message: string, exception?: any) => void): void;
+        /**
+        * Load a scene
+        * @param rootUrl a string that defines the root url for scene and resources
+        * @param sceneFilename a string that defines the name of the scene file. can start with "data:" following by the stringified version of the scene
+        * @param engine is the instance of BABYLON.Engine to use to create the scene
+        */
+        static Load(rootUrl: string, sceneFilename: any, engine: Engine, onsuccess?: (scene: Scene) => void, progressCallBack?: any, onerror?: (scene: Scene) => void): void;
+        /**
+        * Append a scene
+        * @param rootUrl a string that defines the root url for scene and resources
+        * @param sceneFilename a string that defines the name of the scene file. can start with "data:" following by the stringified version of the scene
+        * @param scene is the instance of BABYLON.Scene to append to
+        */
+        static Append(rootUrl: string, sceneFilename: any, scene: Scene, onsuccess?: (scene: Scene) => void, progressCallBack?: any, onerror?: (scene: Scene) => void): void;
+    }
+}
+
+declare module BABYLON {
     class DirectionalLight extends Light implements IShadowLight {
         position: Vector3;
         direction: Vector3;
@@ -4793,58 +4846,6 @@ declare module BABYLON {
 }
 
 declare module BABYLON {
-    interface ISceneLoaderPluginExtensions {
-        [extension: string]: {
-            isBinary: boolean;
-        };
-    }
-    interface ISceneLoaderPlugin {
-        extensions: string | ISceneLoaderPluginExtensions;
-        importMesh: (meshesNames: any, scene: Scene, data: any, rootUrl: string, meshes: AbstractMesh[], particleSystems: ParticleSystem[], skeletons: Skeleton[]) => boolean;
-        load: (scene: Scene, data: string, rootUrl: string) => boolean;
-    }
-    interface ISceneLoaderPluginAsync {
-        extensions: string | ISceneLoaderPluginExtensions;
-        importMeshAsync: (meshesNames: any, scene: Scene, data: any, rootUrl: string, onsuccess: (meshes: AbstractMesh[], particleSystems: ParticleSystem[], skeletons: Skeleton[]) => void, onerror: () => void) => void;
-        loadAsync: (scene: Scene, data: string, rootUrl: string, onsuccess: () => void, onerror: () => void) => void;
-    }
-    class SceneLoader {
-        private static _ForceFullSceneLoadingForIncremental;
-        private static _ShowLoadingScreen;
-        static readonly NO_LOGGING: number;
-        static readonly MINIMAL_LOGGING: number;
-        static readonly SUMMARY_LOGGING: number;
-        static readonly DETAILED_LOGGING: number;
-        private static _loggingLevel;
-        static ForceFullSceneLoadingForIncremental: boolean;
-        static ShowLoadingScreen: boolean;
-        static loggingLevel: number;
-        private static _registeredPlugins;
-        private static _getDefaultPlugin();
-        private static _getPluginForExtension(extension);
-        private static _getPluginForFilename(sceneFilename);
-        private static _getDirectLoad(sceneFilename);
-        static GetPluginForExtension(extension: string): ISceneLoaderPlugin | ISceneLoaderPluginAsync;
-        static RegisterPlugin(plugin: ISceneLoaderPlugin | ISceneLoaderPluginAsync): void;
-        static ImportMesh(meshesNames: any, rootUrl: string, sceneFilename: string, scene: Scene, onsuccess?: (meshes: AbstractMesh[], particleSystems: ParticleSystem[], skeletons: Skeleton[]) => void, progressCallBack?: () => void, onerror?: (scene: Scene, message: string, exception?: any) => void): void;
-        /**
-        * Load a scene
-        * @param rootUrl a string that defines the root url for scene and resources
-        * @param sceneFilename a string that defines the name of the scene file. can start with "data:" following by the stringified version of the scene
-        * @param engine is the instance of BABYLON.Engine to use to create the scene
-        */
-        static Load(rootUrl: string, sceneFilename: any, engine: Engine, onsuccess?: (scene: Scene) => void, progressCallBack?: any, onerror?: (scene: Scene) => void): void;
-        /**
-        * Append a scene
-        * @param rootUrl a string that defines the root url for scene and resources
-        * @param sceneFilename a string that defines the name of the scene file. can start with "data:" following by the stringified version of the scene
-        * @param scene is the instance of BABYLON.Scene to append to
-        */
-        static Append(rootUrl: string, sceneFilename: any, scene: Scene, onsuccess?: (scene: Scene) => void, progressCallBack?: any, onerror?: (scene: Scene) => void): void;
-    }
-}
-
-declare module BABYLON {
     /**
      * The color grading curves provide additional color adjustmnent that is applied after any color grading transform (3D LUT).
      * They allow basic adjustment of saturation and small exposure adjustments, along with color filter tinting to provide white balance adjustment or more stylistic effects.
@@ -7997,60 +7998,6 @@ declare module BABYLON {
 }
 
 declare module BABYLON {
-    class MorphTarget {
-        name: string;
-        private _positions;
-        private _normals;
-        private _influence;
-        onInfluenceChanged: Observable<boolean>;
-        influence: number;
-        constructor(name: string, influence?: number);
-        readonly hasNormals: boolean;
-        setPositions(data: Float32Array | number[]): void;
-        getPositions(): Float32Array;
-        setNormals(data: Float32Array | number[]): void;
-        getNormals(): Float32Array;
-        /**
-         * Serializes the current target into a Serialization object.
-         * Returns the serialized object.
-         */
-        serialize(): any;
-        static Parse(serializationObject: any): MorphTarget;
-        static FromMesh(mesh: AbstractMesh, name?: string, influence?: number): MorphTarget;
-    }
-}
-
-declare module BABYLON {
-    class MorphTargetManager {
-        private _targets;
-        private _targetObservable;
-        private _activeTargets;
-        private _scene;
-        private _influences;
-        private _supportsNormals;
-        private _vertexCount;
-        private _uniqueId;
-        constructor(scene?: Scene);
-        readonly uniqueId: number;
-        readonly vertexCount: number;
-        readonly supportsNormals: boolean;
-        readonly numInfluencers: number;
-        readonly influences: Float32Array;
-        getActiveTarget(index: number): MorphTarget;
-        addTarget(target: MorphTarget): void;
-        removeTarget(target: MorphTarget): void;
-        /**
-         * Serializes the current manager into a Serialization object.
-         * Returns the serialized object.
-         */
-        serialize(): any;
-        private _onInfluenceChanged(needUpdate);
-        private _syncActiveTargets(needUpdate);
-        static Parse(serializationObject: any, scene: Scene): MorphTargetManager;
-    }
-}
-
-declare module BABYLON {
     class AbstractMesh extends Node implements IDisposable, ICullable, IGetSetVerticesData {
         private static _BILLBOARDMODE_NONE;
         private static _BILLBOARDMODE_X;
@@ -11272,6 +11219,60 @@ declare module BABYLON {
 }
 
 declare module BABYLON {
+    class MorphTarget {
+        name: string;
+        private _positions;
+        private _normals;
+        private _influence;
+        onInfluenceChanged: Observable<boolean>;
+        influence: number;
+        constructor(name: string, influence?: number);
+        readonly hasNormals: boolean;
+        setPositions(data: Float32Array | number[]): void;
+        getPositions(): Float32Array;
+        setNormals(data: Float32Array | number[]): void;
+        getNormals(): Float32Array;
+        /**
+         * Serializes the current target into a Serialization object.
+         * Returns the serialized object.
+         */
+        serialize(): any;
+        static Parse(serializationObject: any): MorphTarget;
+        static FromMesh(mesh: AbstractMesh, name?: string, influence?: number): MorphTarget;
+    }
+}
+
+declare module BABYLON {
+    class MorphTargetManager {
+        private _targets;
+        private _targetObservable;
+        private _activeTargets;
+        private _scene;
+        private _influences;
+        private _supportsNormals;
+        private _vertexCount;
+        private _uniqueId;
+        constructor(scene?: Scene);
+        readonly uniqueId: number;
+        readonly vertexCount: number;
+        readonly supportsNormals: boolean;
+        readonly numInfluencers: number;
+        readonly influences: Float32Array;
+        getActiveTarget(index: number): MorphTarget;
+        addTarget(target: MorphTarget): void;
+        removeTarget(target: MorphTarget): void;
+        /**
+         * Serializes the current manager into a Serialization object.
+         * Returns the serialized object.
+         */
+        serialize(): any;
+        private _onInfluenceChanged(needUpdate);
+        private _syncActiveTargets(needUpdate);
+        static Parse(serializationObject: any, scene: Scene): MorphTargetManager;
+    }
+}
+
+declare module BABYLON {
     class Particle {
         position: Vector3;
         direction: Vector3;
@@ -14865,6 +14866,9 @@ declare module BABYLON {
     }
 }
 
+declare module BABYLON.Internals {
+}
+
 declare module BABYLON {
     interface IShadowGenerator {
         getShadowMap(): RenderTargetTexture;
@@ -14978,9 +14982,6 @@ declare module BABYLON {
     }
 }
 
-declare module BABYLON.Internals {
-}
-
 declare module BABYLON {
     class BaseTexture {
         name: string;

Fichier diff supprimé car celui-ci est trop grand
+ 0 - 41
dist/preview release/babylon.noworker.js


Fichier diff supprimé car celui-ci est trop grand
+ 36 - 0
dist/preview release/babylon.worker.js


+ 5 - 2
src/Cameras/babylon.arcRotateCamera.ts

@@ -187,7 +187,7 @@ module BABYLON {
         public onCollide: (collidedMesh: AbstractMesh) => void;
         public checkCollisions = false;
         public collisionRadius = new Vector3(0.5, 0.5, 0.5);
-        private _collider = new Collider();
+        private _collider: Collider;
         private _previousPosition = Vector3.Zero();
         private _collisionVelocity = Vector3.Zero();
         private _newPosition = Vector3.Zero();
@@ -214,7 +214,7 @@ module BABYLON {
 
             this.getViewMatrix();
             this.inputs = new ArcRotateCameraInputsManager(this);
-            this.inputs.addKeyboard().addMouseWheel().addPointers().addGamepad();
+            this.inputs.addKeyboard().addMouseWheel().addPointers();
         }      
 
         // Cache
@@ -437,6 +437,9 @@ module BABYLON {
             var target = this._getTargetPosition();
             target.addToRef(new Vector3(this.radius * cosa * sinb, this.radius * cosb, this.radius * sina * sinb), this._newPosition);
             if (this.getScene().collisionsEnabled && this.checkCollisions) {
+                if (!this._collider) {
+                    this._collider = new Collider();
+                }
                 this._collider.radius = this.collisionRadius;
                 this._newPosition.subtractToRef(this.position, this._collisionVelocity);
                 this._collisionTriggered = true;

+ 6 - 1
src/Cameras/babylon.freeCamera.ts

@@ -76,7 +76,7 @@
         
         public onCollide: (collidedMesh: AbstractMesh) => void;
         
-        private _collider = new Collider();
+        private _collider: Collider;
         private _needMoveForGravity = false;
         private _oldPosition = Vector3.Zero();
         private _diffPosition = Vector3.Zero();
@@ -124,6 +124,11 @@
             }
 
             globalPosition.subtractFromFloatsToRef(0, this.ellipsoid.y, 0, this._oldPosition);
+
+            if (!this._collider) {
+                this._collider = new Collider();
+            }
+
             this._collider.radius = this.ellipsoid;
             this._collider.collisionMask = this._collisionMask;
 		

+ 1 - 1
src/Loading/babylon.sceneLoader.ts

@@ -146,7 +146,7 @@
                 return;
             }
 
-            var directLoad = SceneLoader._getDirectLoad(sceneFilename);
+            var directLoad =SceneLoader._getDirectLoad(sceneFilename);
 
             var loadingToken = {};
             scene._addPendingData(loadingToken);

+ 6 - 2
src/Materials/babylon.pbrMaterial.ts

@@ -1152,8 +1152,12 @@
 
                 var samplers = ["albedoSampler", "ambientSampler", "opacitySampler", "reflectionCubeSampler", "reflection2DSampler", "emissiveSampler", "reflectivitySampler", "microSurfaceSampler", "bumpSampler", "lightmapSampler", "refractionCubeSampler", "refraction2DSampler"];
                 
-                ColorCurves.PrepareUniforms(uniforms); 
-                ColorGradingTexture.PrepareUniformsAndSamplers(uniforms, samplers); 
+                if (this._defines.CAMERACOLORCURVES) {
+                    ColorCurves.PrepareUniforms(uniforms);
+                }
+                if (this._defines.CAMERACOLORGRADING) {
+                    ColorGradingTexture.PrepareUniformsAndSamplers(uniforms, samplers);
+                }
                 MaterialHelper.PrepareUniformsAndSamplersList(uniforms, samplers, this._defines, this.maxSimultaneousLights); 
                 
                 this._effect = scene.getEngine().createEffect("pbr",

+ 6 - 1
src/Mesh/babylon.abstractMesh.ts

@@ -258,7 +258,7 @@
         private _collisionGroup = -1;
         public ellipsoid = new Vector3(0.5, 1, 0.5);
         public ellipsoidOffset = new Vector3(0, 0, 0);
-        private _collider = new Collider();
+        private _collider: Collider;
         private _oldPositionForCollisions = new Vector3(0, 0, 0);
         private _diffPositionForCollisions = new Vector3(0, 0, 0);
         private _newPositionForCollisions = new Vector3(0, 0, 0);
@@ -1401,6 +1401,11 @@
 
             globalPosition.subtractFromFloatsToRef(0, this.ellipsoid.y, 0, this._oldPositionForCollisions);
             this._oldPositionForCollisions.addInPlace(this.ellipsoidOffset);
+
+            if (!this._collider) {
+                this._collider = new Collider();
+            }
+
             this._collider.radius = this.ellipsoid;
 
             this.getScene().collisionCoordinator.getNewPosition(this._oldPositionForCollisions, velocity, this._collider, 3, this, this._onCollisionPositionChange, this.uniqueId);

+ 17 - 6
src/babylon.engine.ts

@@ -440,7 +440,7 @@
         public renderEvenInBackground = true;
         public preventCacheWipeBetweenFrames = false;
         // To enable/disable IDB support and avoid XHR on .manifest
-        public enableOfflineSupport = true;
+        public enableOfflineSupport = BABYLON.Database;
         public scenes = new Array<Scene>();
 
         //WebVR 
@@ -554,9 +554,7 @@
         constructor(canvas: HTMLCanvasElement, antialias?: boolean, options?: EngineOptions, adaptToDeviceRatio = false) {
             this._renderingCanvas = canvas;
 
-            Engine.Instances.push(this);
-
-            this._externalData = new StringDictionary<Object>();
+            Engine.Instances.push(this);            
 
             options = options || {};
 
@@ -3121,10 +3119,10 @@
 
             // Video
             var alreadyActivated = false;
-            if (texture instanceof VideoTexture) {
+            if ((<VideoTexture>texture).video) {
                 this.activateTexture(this._gl["TEXTURE" + channel]);
                 alreadyActivated = true;
-                texture.update();
+                (<VideoTexture>texture).update();
             } else if (texture.delayLoadState === Engine.DELAYLOADSTATE_NOTLOADED) { // Delay loading
                 texture.delayLoad();
                 return;
@@ -3237,6 +3235,9 @@
          * @return true if no such key were already present and the data was added successfully, false otherwise
          */
         public addExternalData<T>(key: string, data: T): boolean {
+            if (!this._externalData) {
+                this._externalData = new StringDictionary<Object>();
+            }
             return this._externalData.add(key, data);
         }
 
@@ -3246,6 +3247,9 @@
          * @return the associated data, if present (can be null), or undefined if not present
          */
         public getExternalData<T>(key: string): T {
+            if (!this._externalData) {
+                this._externalData = new StringDictionary<Object>();
+            }
             return <T>this._externalData.get(key);
         }
 
@@ -3256,6 +3260,9 @@
          * @return the associated data, can be null if the factory returned null.
          */
         public getOrAddExternalDataWithFactory<T>(key: string, factory: (k: string) => T): T {
+            if (!this._externalData) {
+                this._externalData = new StringDictionary<Object>();
+            }
             return <T>this._externalData.getOrAddWithFactory(key, factory);
         }
 
@@ -3265,6 +3272,10 @@
          * @return true if the data was successfully removed, false if it doesn't exist
          */
         public removeExternalData(key): boolean {
+            if (!this._externalData) {
+                this._externalData = new StringDictionary<Object>();
+            }
+            
             return this._externalData.remove(key);
         }
 

+ 67 - 28
src/babylon.scene.ts

@@ -582,7 +582,14 @@
         // Postprocesses
         public postProcessesEnabled = true;
         public postProcessManager: PostProcessManager;
-        public postProcessRenderPipelineManager: PostProcessRenderPipelineManager;
+        private _postProcessRenderPipelineManager: PostProcessRenderPipelineManager
+        public get postProcessRenderPipelineManager(): PostProcessRenderPipelineManager {
+            if (!this._postProcessRenderPipelineManager) {
+                this._postProcessRenderPipelineManager = new PostProcessRenderPipelineManager();
+            }
+
+            return this._postProcessRenderPipelineManager;
+        }
 
         // Customs render targets
         public renderTargetsEnabled = true;
@@ -714,18 +721,12 @@
             this._engine = engine || Engine.LastCreatedEngine;
 
             this._engine.scenes.push(this);
-
-            this._externalData = new StringDictionary<Object>();
             this._uid = null;
 
             this._renderingManager = new RenderingManager(this);
 
             this.postProcessManager = new PostProcessManager(this);
 
-            this.postProcessRenderPipelineManager = new PostProcessRenderPipelineManager();
-
-            this._boundingBoxRenderer = new BoundingBoxRenderer(this);
-
             if (OutlineRenderer) {
                 this._outlineRenderer = new OutlineRenderer(this);
             }
@@ -754,6 +755,9 @@
         }
 
         public set workerCollisions(enabled: boolean) {
+            if (!BABYLON.CollisionCoordinatorLegacy) {
+                return;
+            }
 
             enabled = (enabled && !!Worker);
 
@@ -808,6 +812,10 @@
         }
 
         public getBoundingBoxRenderer(): BoundingBoxRenderer {
+            if (!this._boundingBoxRenderer) {
+                this._boundingBoxRenderer = new BoundingBoxRenderer(this);
+            }
+
             return this._boundingBoxRenderer;
         }
 
@@ -940,7 +948,9 @@
                 if (!this._meshPickProceed) {
                     let pickResult = this.pick(this._unTranslatedPointerX, this._unTranslatedPointerY, this.pointerDownPredicate, false, this.cameraToUseForPointers);
                     this._currentPickResult = pickResult;
-                    act = (pickResult.hit && pickResult.pickedMesh) ? pickResult.pickedMesh.actionManager : null;
+                    if (pickResult) {
+                        act = (pickResult.hit && pickResult.pickedMesh) ? pickResult.pickedMesh.actionManager : null;
+                    }
                     this._meshPickProceed = true;
                 }
                 return act;
@@ -965,7 +975,7 @@
                     let checkPicking = obs1.hasSpecificMask(PointerEventTypes.POINTERPICK) || obs2.hasSpecificMask(PointerEventTypes.POINTERPICK)
                                     || obs1.hasSpecificMask(PointerEventTypes.POINTERTAP) || obs2.hasSpecificMask(PointerEventTypes.POINTERTAP)
                                     || obs1.hasSpecificMask(PointerEventTypes.POINTERDOUBLETAP) || obs2.hasSpecificMask(PointerEventTypes.POINTERDOUBLETAP);
-                    if (!checkPicking && ActionManager.HasPickTriggers) {
+                    if (!checkPicking && BABYLON.ActionManager && ActionManager.HasPickTriggers) {
                         act = this._initActionManager(act, clickInfo);
                         if (act)
                             checkPicking = act.hasPickTriggers;
@@ -1097,7 +1107,7 @@
                 // Meshes
                 var pickResult = this.pick(this._unTranslatedPointerX, this._unTranslatedPointerY, this.pointerMovePredicate, false, this.cameraToUseForPointers);
 
-                if (pickResult.hit && pickResult.pickedMesh) {
+                if (pickResult && pickResult.hit && pickResult.pickedMesh) {
                     this.setPointerOverSprite(null);
 
                     this.setPointerOverMesh(pickResult.pickedMesh);
@@ -1116,7 +1126,7 @@
                     // Sprites
                     pickResult = this.pickSprite(this._unTranslatedPointerX, this._unTranslatedPointerY, spritePredicate, false, this.cameraToUseForPointers);
 
-                    if (pickResult.hit && pickResult.pickedSprite) {
+                    if (pickResult && pickResult.hit && pickResult.pickedSprite) {
                         this.setPointerOverSprite(pickResult.pickedSprite);
                         if (this._pointerOverSprite.actionManager && this._pointerOverSprite.actionManager.hoverCursor) {
                             canvas.style.cursor = this._pointerOverSprite.actionManager.hoverCursor;
@@ -1176,7 +1186,7 @@
                 this._pickedDownMesh = null;
                 var pickResult = this.pick(this._unTranslatedPointerX, this._unTranslatedPointerY, this.pointerDownPredicate, false, this.cameraToUseForPointers);
 
-                if (pickResult.hit && pickResult.pickedMesh) {
+                if (pickResult && pickResult.hit && pickResult.pickedMesh) {
                     this._pickedDownMesh = pickResult.pickedMesh;
                     var actionManager = pickResult.pickedMesh.actionManager;
                     if (actionManager) {
@@ -1201,7 +1211,7 @@
                                     (mesh: AbstractMesh): boolean => mesh.isPickable && mesh.isVisible && mesh.isReady() && mesh.actionManager && mesh.actionManager.hasSpecificTrigger(ActionManager.OnLongPressTrigger) && mesh == this._pickedDownMesh,
                                     false, this.cameraToUseForPointers);
 
-                                if (pickResult.hit && pickResult.pickedMesh) {
+                                if (pickResult && pickResult.hit && pickResult.pickedMesh) {
                                     if (this._isButtonPressed &&
                                         ((new Date().getTime() - this._startingPointerTime) > Scene.LongPressDelay) &&
                                         (Math.abs(this._startingPointerPosition.x - this._pointerX) < Scene.DragMovementThreshold &&
@@ -1230,7 +1240,7 @@
                 if (this.spriteManagers.length > 0) {
                     pickResult = this.pickSprite(this._unTranslatedPointerX, this._unTranslatedPointerY, spritePredicate, false, this.cameraToUseForPointers);
 
-                    if (pickResult.hit && pickResult.pickedSprite) {
+                    if (pickResult && pickResult.hit && pickResult.pickedSprite) {
                         if (pickResult.pickedSprite.actionManager) {
                             this._pickedDownSprite = pickResult.pickedSprite;
                             switch (evt.button) {
@@ -1303,14 +1313,14 @@
                     }
 
                     // Meshes
-                    if (!this._meshPickProceed && (ActionManager.HasTriggers || this.onPointerObservable.hasObservers())) {
+                    if (!this._meshPickProceed && (BABYLON.ActionManager && ActionManager.HasTriggers || this.onPointerObservable.hasObservers())) {
                         this._initActionManager(null, clickInfo);
                     }
                     if (!pickResult) {
                         pickResult = this._currentPickResult;
                     }
 
-                    if (pickResult && pickResult.pickedMesh) {
+                    if (pickResult && pickResult && pickResult.pickedMesh) {
                         this._pickedUpMesh = pickResult.pickedMesh;
                         if (this._pickedDownMesh === this._pickedUpMesh) {
                             if (this.onPointerPick) {
@@ -1696,7 +1706,9 @@
             var position = this.meshes.push(newMesh);
 
             //notify the collision coordinator
-            this.collisionCoordinator.onMeshAdded(newMesh);
+            if (this.collisionCoordinator) {
+                this.collisionCoordinator.onMeshAdded(newMesh);
+            }
 
             this.onNewMeshAddedObservable.notifyObservers(newMesh);
         }
@@ -1708,7 +1720,9 @@
                 this.meshes.splice(index, 1);
             }
             //notify the collision coordinator
-            this.collisionCoordinator.onMeshRemoved(toRemove);
+            if (this.collisionCoordinator) {
+                this.collisionCoordinator.onMeshRemoved(toRemove);
+            }
 
             this.onMeshRemovedObservable.notifyObservers(toRemove);
 
@@ -2040,7 +2054,9 @@
             this._geometries.push(geometry);
 
             //notify the collision coordinator
-            this.collisionCoordinator.onGeometryAdded(geometry);
+            if (this.collisionCoordinator) {
+                this.collisionCoordinator.onGeometryAdded(geometry);
+            }
 
             this.onNewGeometryAddedObservable.notifyObservers(geometry);
 
@@ -2059,7 +2075,9 @@
                 this._geometries.splice(index, 1);
 
                 //notify the collision coordinator
-                this.collisionCoordinator.onGeometryDeleted(geometry);
+                if (this.collisionCoordinator) {
+                    this.collisionCoordinator.onGeometryDeleted(geometry);
+                }
 
                 this.onGeometryRemovedObservable.notifyObservers(geometry);
                 return true;
@@ -2343,7 +2361,7 @@
                 var material = subMesh.getMaterial();
 
                 if (mesh.showSubMeshesBoundingBox) {
-                    this._boundingBoxRenderer.renderList.push(subMesh.getBoundingInfo().boundingBox);
+                    this.getBoundingBoxRenderer().renderList.push(subMesh.getBoundingInfo().boundingBox);
                 }
 
                 if (material) {
@@ -2375,7 +2393,9 @@
             this._activeParticleSystems.reset();
             this._activeSkeletons.reset();
             this._softwareSkinnedMeshes.reset();
-            this._boundingBoxRenderer.reset();
+            if (this._boundingBoxRenderer) {
+                this._boundingBoxRenderer.reset();
+            }
             this._edgesRenderers.reset();
 
             // Meshes
@@ -2464,7 +2484,7 @@
             }
 
             if (sourceMesh.showBoundingBox || this.forceShowBoundingBoxes) {
-                this._boundingBoxRenderer.renderList.push(sourceMesh.getBoundingInfo().boundingBox);
+                this.getBoundingBoxRenderer().renderList.push(sourceMesh.getBoundingInfo().boundingBox);
             }
 
             if (sourceMesh._edgesRenderer) {
@@ -2628,7 +2648,9 @@
             Tools.EndPerformanceCounter("Main render");
 
             // Bounding boxes
-            this._boundingBoxRenderer.render();
+            if (this._boundingBoxRenderer) {
+                this._boundingBoxRenderer.render();
+            }
 
             // Edges
             for (var edgesRendererIndex = 0; edgesRendererIndex < this._edgesRenderers.length; edgesRendererIndex++) {
@@ -2860,7 +2882,9 @@
             }
 
             // RenderPipeline
-            this.postProcessRenderPipelineManager.update();
+            if (this._postProcessRenderPipelineManager) {
+                this._postProcessRenderPipelineManager.update();
+            }
 
             // Multi-cameras?
             if (this.activeCameras.length > 0) {
@@ -3070,8 +3094,6 @@
             this.skeletons = [];
             this.morphTargetManagers = [];
 
-            this._boundingBoxRenderer.dispose();
-
             if (this._depthRenderer) {
                 this._depthRenderer.dispose();
             }
@@ -3087,7 +3109,9 @@
             this._activeParticleSystems.dispose();
             this._activeSkeletons.dispose();
             this._softwareSkinnedMeshes.dispose();
-            this._boundingBoxRenderer.dispose();
+            if (this._boundingBoxRenderer) {
+                this._boundingBoxRenderer.dispose();
+            }
             this._edgesRenderers.dispose();
             this._meshesForIntersections.dispose();
             this._toBeDisposed.dispose();
@@ -3249,6 +3273,10 @@
         }
 
         public createPickingRayInCameraSpace(x: number, y: number, camera: Camera): Ray {
+            if (!BABYLON.PickingInfo) {
+                return null;
+            }
+
             var engine = this._engine;
 
             if (!camera) {
@@ -3269,6 +3297,10 @@
         }
 
         private _internalPick(rayFunction: (world: Matrix) => Ray, predicate: (mesh: AbstractMesh) => boolean, fastCheck?: boolean): PickingInfo {
+            if (!BABYLON.PickingInfo) {
+                return null;
+            }
+
             var pickingInfo = null;
 
             for (var meshIndex = 0; meshIndex < this.meshes.length; meshIndex++) {
@@ -3303,6 +3335,9 @@
         }
 
         private _internalMultiPick(rayFunction: (world: Matrix) => Ray, predicate: (mesh: AbstractMesh) => boolean): PickingInfo[] {
+            if (!BABYLON.PickingInfo) {
+                return null;
+            }            
             var pickingInfos = new Array<PickingInfo>();
 
             for (var meshIndex = 0; meshIndex < this.meshes.length; meshIndex++) {
@@ -3331,6 +3366,10 @@
 
 
         private _internalPickSprites(ray: Ray, predicate?: (sprite: Sprite) => boolean, fastCheck?: boolean, camera?: Camera): PickingInfo {
+            if (!BABYLON.PickingInfo) {
+                return null;
+            }
+
             var pickingInfo = null;
 
             camera = camera || this.activeCamera;