@babylonjs/core 5.0.0-alpha.57 → 5.0.0-alpha.60
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Buffers/buffer.js +3 -2
- package/Buffers/buffer.js.map +1 -1
- package/Cameras/Inputs/BaseCameraPointersInput.d.ts +0 -1
- package/Cameras/Inputs/BaseCameraPointersInput.js +5 -5
- package/Cameras/Inputs/BaseCameraPointersInput.js.map +1 -1
- package/Cameras/Inputs/freeCameraMouseInput.d.ts +0 -1
- package/Cameras/Inputs/freeCameraMouseInput.js +27 -28
- package/Cameras/Inputs/freeCameraMouseInput.js.map +1 -1
- package/Cameras/camera.d.ts +4 -0
- package/Cameras/camera.js +2 -0
- package/Cameras/camera.js.map +1 -1
- package/Culling/boundingBox.d.ts +7 -1
- package/Culling/boundingBox.js +4 -0
- package/Culling/boundingBox.js.map +1 -1
- package/DeviceInput/Helpers/eventFactory.js +1 -2
- package/DeviceInput/Helpers/eventFactory.js.map +1 -1
- package/DeviceInput/Implementations/webDeviceInputSystem.d.ts +1 -0
- package/DeviceInput/Implementations/webDeviceInputSystem.js +5 -12
- package/DeviceInput/Implementations/webDeviceInputSystem.js.map +1 -1
- package/DeviceInput/InputDevices/deviceEnums.d.ts +1 -3
- package/DeviceInput/InputDevices/deviceEnums.js +0 -2
- package/DeviceInput/InputDevices/deviceEnums.js.map +1 -1
- package/Engines/Extensions/engine.alpha.js +6 -6
- package/Engines/Extensions/engine.alpha.js.map +1 -1
- package/Engines/Extensions/engine.renderTarget.js +1 -1
- package/Engines/Extensions/engine.renderTarget.js.map +1 -1
- package/Engines/IDrawContext.d.ts +4 -0
- package/Engines/IDrawContext.js.map +1 -1
- package/Engines/IMaterialContext.d.ts +1 -0
- package/Engines/IMaterialContext.js.map +1 -1
- package/Engines/WebGPU/Extensions/engine.alpha.js +20 -31
- package/Engines/WebGPU/Extensions/engine.alpha.js.map +1 -1
- package/Engines/WebGPU/Extensions/engine.renderTarget.js +1 -38
- package/Engines/WebGPU/Extensions/engine.renderTarget.js.map +1 -1
- package/Engines/WebGPU/Extensions/engine.storageBuffer.js +1 -1
- package/Engines/WebGPU/Extensions/engine.storageBuffer.js.map +1 -1
- package/Engines/WebGPU/Extensions/engine.uniformBuffer.js +1 -1
- package/Engines/WebGPU/Extensions/engine.uniformBuffer.js.map +1 -1
- package/Engines/WebGPU/webgpuBufferManager.d.ts +1 -0
- package/Engines/WebGPU/webgpuBufferManager.js +3 -0
- package/Engines/WebGPU/webgpuBufferManager.js.map +1 -1
- package/Engines/WebGPU/webgpuCacheBindGroups.d.ts +3 -2
- package/Engines/WebGPU/webgpuCacheBindGroups.js +15 -14
- package/Engines/WebGPU/webgpuCacheBindGroups.js.map +1 -1
- package/Engines/WebGPU/webgpuCacheRenderPipeline.js +18 -18
- package/Engines/WebGPU/webgpuCacheRenderPipeline.js.map +1 -1
- package/Engines/WebGPU/webgpuCacheRenderPipelineTree.d.ts +2 -0
- package/Engines/WebGPU/webgpuCacheRenderPipelineTree.js +17 -0
- package/Engines/WebGPU/webgpuCacheRenderPipelineTree.js.map +1 -1
- package/Engines/WebGPU/webgpuDrawContext.d.ts +24 -2
- package/Engines/WebGPU/webgpuDrawContext.js +75 -1
- package/Engines/WebGPU/webgpuDrawContext.js.map +1 -1
- package/Engines/WebGPU/webgpuMaterialContext.d.ts +1 -6
- package/Engines/WebGPU/webgpuMaterialContext.js +11 -8
- package/Engines/WebGPU/webgpuMaterialContext.js.map +1 -1
- package/Engines/WebGPU/webgpuShaderProcessor.d.ts +1 -0
- package/Engines/WebGPU/webgpuShaderProcessor.js +2 -1
- package/Engines/WebGPU/webgpuShaderProcessor.js.map +1 -1
- package/Engines/WebGPU/webgpuTextureHelper.d.ts +1 -0
- package/Engines/WebGPU/webgpuTextureHelper.js +67 -1
- package/Engines/WebGPU/webgpuTextureHelper.js.map +1 -1
- package/Engines/constants.d.ts +40 -7
- package/Engines/constants.js +40 -7
- package/Engines/constants.js.map +1 -1
- package/Engines/engine.d.ts +37 -2
- package/Engines/engine.js +68 -0
- package/Engines/engine.js.map +1 -1
- package/Engines/engineFeatures.d.ts +2 -0
- package/Engines/engineFeatures.js.map +1 -1
- package/Engines/nativeEngine.js +19 -13
- package/Engines/nativeEngine.js.map +1 -1
- package/Engines/nullEngine.js +1 -0
- package/Engines/nullEngine.js.map +1 -1
- package/Engines/thinEngine.d.ts +8 -2
- package/Engines/thinEngine.js +10 -5
- package/Engines/thinEngine.js.map +1 -1
- package/Engines/webgpuEngine.d.ts +28 -7
- package/Engines/webgpuEngine.js +177 -58
- package/Engines/webgpuEngine.js.map +1 -1
- package/Inputs/scene.inputManager.js +2 -3
- package/Inputs/scene.inputManager.js.map +1 -1
- package/Layers/effectLayer.d.ts +0 -2
- package/Layers/effectLayer.js +12 -11
- package/Layers/effectLayer.js.map +1 -1
- package/Layers/effectLayerSceneComponent.js +5 -0
- package/Layers/effectLayerSceneComponent.js.map +1 -1
- package/Layers/glowLayer.js +2 -0
- package/Layers/glowLayer.js.map +1 -1
- package/Layers/highlightLayer.js +2 -0
- package/Layers/highlightLayer.js.map +1 -1
- package/LensFlares/lensFlare.d.ts +3 -0
- package/LensFlares/lensFlare.js +5 -0
- package/LensFlares/lensFlare.js.map +1 -1
- package/LensFlares/lensFlareSystem.d.ts +2 -1
- package/LensFlares/lensFlareSystem.js +15 -12
- package/LensFlares/lensFlareSystem.js.map +1 -1
- package/Lights/Shadows/cascadedShadowGenerator.d.ts +0 -2
- package/Lights/Shadows/cascadedShadowGenerator.js +3 -12
- package/Lights/Shadows/cascadedShadowGenerator.js.map +1 -1
- package/Lights/Shadows/shadowGenerator.d.ts +0 -3
- package/Lights/Shadows/shadowGenerator.js +8 -14
- package/Lights/Shadows/shadowGenerator.js.map +1 -1
- package/Lights/light.js +3 -0
- package/Lights/light.js.map +1 -1
- package/Loading/Plugins/babylonFileLoader.js +3 -0
- package/Loading/Plugins/babylonFileLoader.js.map +1 -1
- package/Materials/Background/backgroundMaterial.js +8 -11
- package/Materials/Background/backgroundMaterial.js.map +1 -1
- package/Materials/Node/Blocks/PBR/reflectionBlock.js +1 -1
- package/Materials/Node/Blocks/PBR/reflectionBlock.js.map +1 -1
- package/Materials/Node/Blocks/cloudBlock.d.ts +4 -0
- package/Materials/Node/Blocks/cloudBlock.js +27 -8
- package/Materials/Node/Blocks/cloudBlock.js.map +1 -1
- package/Materials/Node/Blocks/colorMergerBlock.d.ts +21 -0
- package/Materials/Node/Blocks/colorMergerBlock.js +48 -4
- package/Materials/Node/Blocks/colorMergerBlock.js.map +1 -1
- package/Materials/Node/Blocks/vectorMergerBlock.d.ts +25 -0
- package/Materials/Node/Blocks/vectorMergerBlock.js +93 -23
- package/Materials/Node/Blocks/vectorMergerBlock.js.map +1 -1
- package/Materials/Node/nodeMaterial.js +4 -4
- package/Materials/Node/nodeMaterial.js.map +1 -1
- package/Materials/PBR/pbrBaseMaterial.d.ts +1 -0
- package/Materials/PBR/pbrBaseMaterial.js +10 -5
- package/Materials/PBR/pbrBaseMaterial.js.map +1 -1
- package/Materials/PBR/pbrClearCoatConfiguration.js +1 -1
- package/Materials/PBR/pbrClearCoatConfiguration.js.map +1 -1
- package/Materials/PBR/pbrSheenConfiguration.js +1 -1
- package/Materials/PBR/pbrSheenConfiguration.js.map +1 -1
- package/Materials/PBR/pbrSubSurfaceConfiguration.js +1 -1
- package/Materials/PBR/pbrSubSurfaceConfiguration.js.map +1 -1
- package/Materials/Textures/baseTexture.d.ts +2 -0
- package/Materials/Textures/baseTexture.js +2 -0
- package/Materials/Textures/baseTexture.js.map +1 -1
- package/Materials/Textures/renderTargetTexture.d.ts +27 -0
- package/Materials/Textures/renderTargetTexture.js +127 -14
- package/Materials/Textures/renderTargetTexture.js.map +1 -1
- package/Materials/Textures/texture.js +11 -4
- package/Materials/Textures/texture.js.map +1 -1
- package/Materials/drawWrapper.d.ts +2 -1
- package/Materials/drawWrapper.js +10 -1
- package/Materials/drawWrapper.js.map +1 -1
- package/Materials/material.d.ts +3 -1
- package/Materials/material.detailMapConfiguration.d.ts +1 -1
- package/Materials/material.detailMapConfiguration.js +2 -2
- package/Materials/material.detailMapConfiguration.js.map +1 -1
- package/Materials/material.js +18 -9
- package/Materials/material.js.map +1 -1
- package/Materials/materialHelper.js +3 -1
- package/Materials/materialHelper.js.map +1 -1
- package/Materials/pushMaterial.js +1 -1
- package/Materials/pushMaterial.js.map +1 -1
- package/Materials/shaderMaterial.d.ts +0 -1
- package/Materials/shaderMaterial.js +3 -4
- package/Materials/shaderMaterial.js.map +1 -1
- package/Materials/shadowDepthWrapper.d.ts +4 -4
- package/Materials/shadowDepthWrapper.js +16 -15
- package/Materials/shadowDepthWrapper.js.map +1 -1
- package/Materials/standardMaterial.d.ts +1 -0
- package/Materials/standardMaterial.js +10 -5
- package/Materials/standardMaterial.js.map +1 -1
- package/Materials/uniformBuffer.d.ts +10 -2
- package/Materials/uniformBuffer.js +17 -11
- package/Materials/uniformBuffer.js.map +1 -1
- package/Meshes/abstractMesh.d.ts +13 -0
- package/Meshes/abstractMesh.js +22 -2
- package/Meshes/abstractMesh.js.map +1 -1
- package/Meshes/geometry.d.ts +7 -0
- package/Meshes/geometry.js +16 -0
- package/Meshes/geometry.js.map +1 -1
- package/Meshes/linesMesh.js +1 -1
- package/Meshes/linesMesh.js.map +1 -1
- package/Meshes/mesh.js +15 -0
- package/Meshes/mesh.js.map +1 -1
- package/Meshes/subMesh.d.ts +10 -9
- package/Meshes/subMesh.js +44 -43
- package/Meshes/subMesh.js.map +1 -1
- package/Misc/basis.d.ts +3 -2
- package/Misc/basis.js +16 -15
- package/Misc/basis.js.map +1 -1
- package/Misc/environmentTextureTools.js +1 -0
- package/Misc/environmentTextureTools.js.map +1 -1
- package/Misc/rgbdTextureTools.js +1 -0
- package/Misc/rgbdTextureTools.js.map +1 -1
- package/Misc/sceneSerializer.js +17 -17
- package/Misc/sceneSerializer.js.map +1 -1
- package/Misc/textureTools.js +2 -0
- package/Misc/textureTools.js.map +1 -1
- package/Particles/gpuParticleSystem.d.ts +5 -1
- package/Particles/gpuParticleSystem.js +31 -5
- package/Particles/gpuParticleSystem.js.map +1 -1
- package/Particles/particleSystem.d.ts +5 -1
- package/Particles/particleSystem.js +35 -5
- package/Particles/particleSystem.js.map +1 -1
- package/Physics/Plugins/ammoJSPlugin.d.ts +1 -0
- package/Physics/Plugins/ammoJSPlugin.js +10 -0
- package/Physics/Plugins/ammoJSPlugin.js.map +1 -1
- package/PostProcesses/RenderPipeline/Pipelines/lensRenderingPipeline.js +2 -0
- package/PostProcesses/RenderPipeline/Pipelines/lensRenderingPipeline.js.map +1 -1
- package/PostProcesses/RenderPipeline/Pipelines/ssaoRenderingPipeline.js +1 -0
- package/PostProcesses/RenderPipeline/Pipelines/ssaoRenderingPipeline.js.map +1 -1
- package/PostProcesses/RenderPipeline/Pipelines/standardRenderingPipeline.js +1 -0
- package/PostProcesses/RenderPipeline/Pipelines/standardRenderingPipeline.js.map +1 -1
- package/PostProcesses/bloomMergePostProcess.js +1 -0
- package/PostProcesses/bloomMergePostProcess.js.map +1 -1
- package/PostProcesses/depthOfFieldBlurPostProcess.js +1 -0
- package/PostProcesses/depthOfFieldBlurPostProcess.js.map +1 -1
- package/PostProcesses/depthOfFieldMergePostProcess.js +1 -0
- package/PostProcesses/depthOfFieldMergePostProcess.js.map +1 -1
- package/PostProcesses/extractHighlightsPostProcess.js +1 -0
- package/PostProcesses/extractHighlightsPostProcess.js.map +1 -1
- package/PostProcesses/postProcess.d.ts +6 -0
- package/PostProcesses/postProcess.js +9 -1
- package/PostProcesses/postProcess.js.map +1 -1
- package/PostProcesses/screenSpaceReflectionPostProcess.js +1 -1
- package/PostProcesses/screenSpaceReflectionPostProcess.js.map +1 -1
- package/PostProcesses/tonemapPostProcess.d.ts +2 -1
- package/PostProcesses/tonemapPostProcess.js +3 -2
- package/PostProcesses/tonemapPostProcess.js.map +1 -1
- package/Rendering/boundingBoxRenderer.d.ts +5 -3
- package/Rendering/boundingBoxRenderer.js +46 -14
- package/Rendering/boundingBoxRenderer.js.map +1 -1
- package/Rendering/depthPeelingRenderer.d.ts +20 -1
- package/Rendering/depthPeelingRenderer.js +125 -32
- package/Rendering/depthPeelingRenderer.js.map +1 -1
- package/Rendering/depthPeelingSceneComponent.d.ts +2 -0
- package/Rendering/depthPeelingSceneComponent.js +16 -0
- package/Rendering/depthPeelingSceneComponent.js.map +1 -1
- package/Rendering/depthRenderer.d.ts +9 -2
- package/Rendering/depthRenderer.js +77 -43
- package/Rendering/depthRenderer.js.map +1 -1
- package/Rendering/depthRendererSceneComponent.js +0 -1
- package/Rendering/depthRendererSceneComponent.js.map +1 -1
- package/Rendering/edgesRenderer.d.ts +2 -0
- package/Rendering/edgesRenderer.js +11 -0
- package/Rendering/edgesRenderer.js.map +1 -1
- package/Rendering/geometryBufferRenderer.js +4 -4
- package/Rendering/geometryBufferRenderer.js.map +1 -1
- package/Rendering/outlineRenderer.d.ts +5 -4
- package/Rendering/outlineRenderer.js +24 -19
- package/Rendering/outlineRenderer.js.map +1 -1
- package/Rendering/prePassRenderer.js +3 -2
- package/Rendering/prePassRenderer.js.map +1 -1
- package/Shaders/ShadersInclude/boundingBoxRendererFragmentDeclaration.d.ts +5 -0
- package/Shaders/ShadersInclude/boundingBoxRendererFragmentDeclaration.js +7 -0
- package/Shaders/ShadersInclude/boundingBoxRendererFragmentDeclaration.js.map +1 -0
- package/Shaders/ShadersInclude/boundingBoxRendererUboDeclaration.d.ts +5 -0
- package/Shaders/ShadersInclude/boundingBoxRendererUboDeclaration.js +7 -0
- package/Shaders/ShadersInclude/boundingBoxRendererUboDeclaration.js.map +1 -0
- package/Shaders/ShadersInclude/boundingBoxRendererVertexDeclaration.d.ts +5 -0
- package/Shaders/ShadersInclude/boundingBoxRendererVertexDeclaration.js +7 -0
- package/Shaders/ShadersInclude/boundingBoxRendererVertexDeclaration.js.map +1 -0
- package/Shaders/ShadersInclude/oitFragment.js +1 -1
- package/Shaders/ShadersInclude/oitFragment.js.map +1 -1
- package/Shaders/ShadersInclude/shadowsFragmentFunctions.js +1 -1
- package/Shaders/ShadersInclude/shadowsFragmentFunctions.js.map +1 -1
- package/Shaders/boundingBoxRenderer.fragment.d.ts +7 -0
- package/Shaders/boundingBoxRenderer.fragment.js +9 -0
- package/Shaders/boundingBoxRenderer.fragment.js.map +1 -0
- package/Shaders/boundingBoxRenderer.vertex.d.ts +7 -0
- package/Shaders/boundingBoxRenderer.vertex.js +9 -0
- package/Shaders/boundingBoxRenderer.vertex.js.map +1 -0
- package/Sprites/spriteManager.d.ts +3 -1
- package/Sprites/spriteManager.js +16 -5
- package/Sprites/spriteManager.js.map +1 -1
- package/Sprites/spriteRenderer.d.ts +2 -0
- package/Sprites/spriteRenderer.js +26 -0
- package/Sprites/spriteRenderer.js.map +1 -1
- package/XR/features/WebXRWalkingLocomotion.js +28 -13
- package/XR/features/WebXRWalkingLocomotion.js.map +1 -1
- package/package.json +16 -1
- package/scene.d.ts +18 -4
- package/scene.js +100 -41
- package/scene.js.map +1 -1
|
@@ -33,7 +33,7 @@ var CircleBuffer = /** @class */ (function () {
|
|
|
33
33
|
}());
|
|
34
34
|
var FirstStepDetector = /** @class */ (function () {
|
|
35
35
|
function FirstStepDetector() {
|
|
36
|
-
this._samples = new CircleBuffer(
|
|
36
|
+
this._samples = new CircleBuffer(20);
|
|
37
37
|
this._entropy = 0;
|
|
38
38
|
this.onFirstStepDetected = new Observable();
|
|
39
39
|
}
|
|
@@ -112,7 +112,7 @@ var FirstStepDetector = /** @class */ (function () {
|
|
|
112
112
|
};
|
|
113
113
|
Object.defineProperty(FirstStepDetector.prototype, "_samePointCheckStartIdx", {
|
|
114
114
|
get: function () {
|
|
115
|
-
return this._samples.length / 3;
|
|
115
|
+
return Math.floor(this._samples.length / 3);
|
|
116
116
|
},
|
|
117
117
|
enumerable: false,
|
|
118
118
|
configurable: true
|
|
@@ -154,14 +154,14 @@ var FirstStepDetector = /** @class */ (function () {
|
|
|
154
154
|
});
|
|
155
155
|
Object.defineProperty(FirstStepDetector.prototype, "_entropyDecayFactor", {
|
|
156
156
|
get: function () {
|
|
157
|
-
return 0.
|
|
157
|
+
return 0.93;
|
|
158
158
|
},
|
|
159
159
|
enumerable: false,
|
|
160
160
|
configurable: true
|
|
161
161
|
});
|
|
162
162
|
Object.defineProperty(FirstStepDetector.prototype, "_entropyThreshold", {
|
|
163
163
|
get: function () {
|
|
164
|
-
return 0.
|
|
164
|
+
return 0.4;
|
|
165
165
|
},
|
|
166
166
|
enumerable: false,
|
|
167
167
|
configurable: true
|
|
@@ -217,7 +217,7 @@ var WalkingTracker = /** @class */ (function () {
|
|
|
217
217
|
this._t = dot / (this._axisLength * this._axisLength);
|
|
218
218
|
var projDistSquared = this._currentPosition.lengthSquared() - (dot / this._axisLength) * (dot / this._axisLength);
|
|
219
219
|
// TODO: Extricate the magic.
|
|
220
|
-
this._vitality *= (0.
|
|
220
|
+
this._vitality *= (0.92 - 100 * Math.max(projDistSquared - 0.0016, 0) + Math.max(this._t - priorT, 0));
|
|
221
221
|
};
|
|
222
222
|
WalkingTracker.prototype.update = function (x, y) {
|
|
223
223
|
if (this._vitality < this._vitalityThreshold) {
|
|
@@ -270,12 +270,14 @@ var WalkingTracker = /** @class */ (function () {
|
|
|
270
270
|
return WalkingTracker;
|
|
271
271
|
}());
|
|
272
272
|
var Walker = /** @class */ (function () {
|
|
273
|
-
function Walker() {
|
|
273
|
+
function Walker(engine) {
|
|
274
274
|
var _this = this;
|
|
275
275
|
this._detector = new FirstStepDetector();
|
|
276
276
|
this._walker = null;
|
|
277
277
|
this._movement = new Vector2();
|
|
278
|
+
this._millisecondsSinceLastUpdate = Walker._MillisecondsPerUpdate;
|
|
278
279
|
this.movementThisFrame = Vector3.Zero();
|
|
280
|
+
this._engine = engine;
|
|
279
281
|
this._detector.onFirstStepDetected.add(function (event) {
|
|
280
282
|
if (!_this._walker) {
|
|
281
283
|
_this._walker = new WalkingTracker(event.leftApex, event.rightApex, event.currentPosition, event.currentStepDirection);
|
|
@@ -288,18 +290,31 @@ var Walker = /** @class */ (function () {
|
|
|
288
290
|
}
|
|
289
291
|
});
|
|
290
292
|
}
|
|
293
|
+
Object.defineProperty(Walker, "_MillisecondsPerUpdate", {
|
|
294
|
+
get: function () {
|
|
295
|
+
// 15 FPS
|
|
296
|
+
return 1000 / 15;
|
|
297
|
+
},
|
|
298
|
+
enumerable: false,
|
|
299
|
+
configurable: true
|
|
300
|
+
});
|
|
291
301
|
Walker.prototype.update = function (position, forward) {
|
|
292
302
|
forward.y = 0;
|
|
293
303
|
forward.normalize();
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
304
|
+
// Enforce reduced framerate
|
|
305
|
+
this._millisecondsSinceLastUpdate += this._engine.getDeltaTime();
|
|
306
|
+
if (this._millisecondsSinceLastUpdate >= Walker._MillisecondsPerUpdate) {
|
|
307
|
+
this._millisecondsSinceLastUpdate -= Walker._MillisecondsPerUpdate;
|
|
308
|
+
this._detector.update(position.x, position.z, forward.x, forward.z);
|
|
309
|
+
if (this._walker) {
|
|
310
|
+
var updated = this._walker.update(position.x, position.z);
|
|
311
|
+
if (!updated) {
|
|
312
|
+
this._walker = null;
|
|
313
|
+
}
|
|
299
314
|
}
|
|
315
|
+
this._movement.scaleInPlace(0.85);
|
|
300
316
|
}
|
|
301
317
|
this.movementThisFrame.set(this._movement.x, 0, this._movement.y);
|
|
302
|
-
this._movement.scaleInPlace(0.96);
|
|
303
318
|
};
|
|
304
319
|
return Walker;
|
|
305
320
|
}());
|
|
@@ -392,7 +407,7 @@ var WebXRWalkingLocomotion = /** @class */ (function (_super) {
|
|
|
392
407
|
if (!this.isCompatible || !_super.prototype.attach.call(this)) {
|
|
393
408
|
return false;
|
|
394
409
|
}
|
|
395
|
-
this._walker = new Walker();
|
|
410
|
+
this._walker = new Walker(this._sessionManager.scene.getEngine());
|
|
396
411
|
return true;
|
|
397
412
|
};
|
|
398
413
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WebXRWalkingLocomotion.js","sourceRoot":"","sources":["../../../../sourceES6/core/XR/features/WebXRWalkingLocomotion.ts"],"names":[],"mappings":"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","sourcesContent":["import { TmpVectors, Vector2, Vector3 } from \"../../Maths/math.vector\";\r\nimport { TransformNode } from \"../../Meshes/transformNode\";\r\nimport { Logger } from \"../../Misc/logger\";\r\nimport { Observable } from \"../../Misc/observable\";\r\nimport { Nullable } from \"../../types\";\r\nimport { WebXRCamera } from \"../webXRCamera\";\r\nimport { WebXRFeatureName, WebXRFeaturesManager } from \"../webXRFeaturesManager\";\r\nimport { WebXRSessionManager } from \"../webXRSessionManager\";\r\nimport { WebXRAbstractFeature } from \"./WebXRAbstractFeature\";\r\n\r\nclass CircleBuffer {\r\n private _samples: Array<Vector2> = [];\r\n private _idx: number = 0;\r\n\r\n constructor (numSamples: number, initializer?: () => Vector2) {\r\n for (let idx = 0; idx < numSamples; ++idx) {\r\n this._samples.push(initializer ? initializer() : Vector2.Zero());\r\n }\r\n }\r\n\r\n public get length() {\r\n return this._samples.length;\r\n }\r\n\r\n public push(x: number, y: number) {\r\n this._idx = (this._idx + this._samples.length - 1) % this._samples.length;\r\n this.at(0).copyFromFloats(x, y);\r\n }\r\n\r\n public at(idx: number) {\r\n if (idx >= this._samples.length) {\r\n throw new Error(\"Index out of bounds\");\r\n }\r\n return this._samples[(this._idx + idx) % this._samples.length];\r\n }\r\n}\r\n\r\ninterface IDetectedStep {\r\n leftApex: Vector2;\r\n rightApex: Vector2;\r\n currentPosition: Vector2;\r\n currentStepDirection: \"left\" | \"right\";\r\n}\r\n\r\nclass FirstStepDetector {\r\n private _samples = new CircleBuffer(60);\r\n private _entropy = 0;\r\n\r\n public onFirstStepDetected: Observable<IDetectedStep> = new Observable<IDetectedStep>();\r\n\r\n public update(posX: number, posY: number, forwardX: number, forwardY: number) {\r\n this._samples.push(posX, posY);\r\n const origin = this._samples.at(0);\r\n\r\n this._entropy *= this._entropyDecayFactor;\r\n this._entropy += Vector2.Distance(origin, this._samples.at(1));\r\n if (this._entropy > this._entropyThreshold) {\r\n return;\r\n }\r\n\r\n let samePointIdx;\r\n for (samePointIdx = this._samePointCheckStartIdx; samePointIdx < this._samples.length; ++samePointIdx) {\r\n if (Vector2.DistanceSquared(origin, this._samples.at(samePointIdx)) < this._samePointSquaredDistanceThreshold) {\r\n break;\r\n }\r\n }\r\n\r\n if (samePointIdx === this._samples.length) {\r\n return;\r\n }\r\n\r\n let apexDistSquared = -1;\r\n let apexIdx = 0;\r\n for (let distSquared, idx = 1; idx < samePointIdx; ++idx) {\r\n distSquared = Vector2.DistanceSquared(origin, this._samples.at(idx));\r\n if (distSquared > apexDistSquared) {\r\n apexIdx = idx;\r\n apexDistSquared = distSquared;\r\n }\r\n }\r\n\r\n if (apexDistSquared < this._apexSquaredDistanceThreshold) {\r\n return;\r\n }\r\n\r\n const apex = this._samples.at(apexIdx);\r\n const axis = apex.subtract(origin);\r\n axis.normalize();\r\n\r\n const vec = TmpVectors.Vector2[0];\r\n let dot;\r\n let sample;\r\n let sumSquaredProjectionDistances = 0;\r\n for (let idx = 1; idx < samePointIdx; ++idx) {\r\n sample = this._samples.at(idx);\r\n sample.subtractToRef(origin, vec);\r\n dot = Vector2.Dot(axis, vec);\r\n sumSquaredProjectionDistances += vec.lengthSquared() - (dot * dot);\r\n }\r\n\r\n if (sumSquaredProjectionDistances > (samePointIdx * this._squaredProjectionDistanceThreshold)) {\r\n return;\r\n }\r\n\r\n const forwardVec = TmpVectors.Vector3[0];\r\n forwardVec.set(forwardX, forwardY, 0);\r\n const axisVec = TmpVectors.Vector3[1];\r\n axisVec.set(axis.x, axis.y, 0);\r\n const isApexLeft = Vector3.Cross(forwardVec, axisVec).z > 0;\r\n const leftApex = origin.clone();\r\n const rightApex = origin.clone();\r\n apex.subtractToRef(origin, axis);\r\n if (isApexLeft) {\r\n axis.scaleAndAddToRef(this._axisToApexShrinkFactor, leftApex);\r\n axis.scaleAndAddToRef(this._axisToApexExtendFactor, rightApex);\r\n } else {\r\n axis.scaleAndAddToRef(this._axisToApexExtendFactor, leftApex);\r\n axis.scaleAndAddToRef(this._axisToApexShrinkFactor, rightApex);\r\n }\r\n this.onFirstStepDetected.notifyObservers({\r\n leftApex: leftApex,\r\n rightApex: rightApex,\r\n currentPosition: origin,\r\n currentStepDirection: isApexLeft ? \"right\" : \"left\"\r\n });\r\n }\r\n\r\n public reset() {\r\n for (let idx = 0; idx < this._samples.length; ++idx) {\r\n this._samples.at(idx).copyFromFloats(0, 0);\r\n }\r\n }\r\n\r\n private get _samePointCheckStartIdx() {\r\n return this._samples.length / 3;\r\n }\r\n\r\n private get _samePointSquaredDistanceThreshold() {\r\n return 0.03 * 0.03;\r\n }\r\n\r\n private get _apexSquaredDistanceThreshold() {\r\n return 0.09 * 0.09;\r\n }\r\n\r\n private get _squaredProjectionDistanceThreshold() {\r\n return 0.03 * 0.03;\r\n }\r\n\r\n private get _axisToApexShrinkFactor() {\r\n return 0.8;\r\n }\r\n\r\n private get _axisToApexExtendFactor() {\r\n return -1.6;\r\n }\r\n\r\n private get _entropyDecayFactor() {\r\n return 0.98;\r\n }\r\n\r\n private get _entropyThreshold() {\r\n return 0.25;\r\n }\r\n}\r\n\r\nclass WalkingTracker {\r\n private _leftApex = new Vector2();\r\n private _rightApex = new Vector2();\r\n private _currentPosition = new Vector2();\r\n private _axis = new Vector2();\r\n private _axisLength = -1;\r\n private _forward = new Vector2();\r\n private _steppingLeft = false;\r\n private _t = -1;\r\n private _maxT = -1;\r\n private _maxTPosition = new Vector2();\r\n private _vitality = 0;\r\n\r\n public onMovement = new Observable<{ deltaT: number }>();\r\n public onFootfall = new Observable<{ foot: \"left\" | \"right\" }>();\r\n\r\n constructor(leftApex: Vector2, rightApex: Vector2, currentPosition: Vector2, currentStepDirection: \"left\" | \"right\") {\r\n this._reset(leftApex, rightApex, currentPosition, currentStepDirection === \"left\");\r\n }\r\n\r\n private _reset(leftApex: Vector2, rightApex: Vector2, currentPosition: Vector2, steppingLeft: boolean) {\r\n this._leftApex.copyFrom(leftApex);\r\n this._rightApex.copyFrom(rightApex);\r\n this._steppingLeft = steppingLeft;\r\n\r\n if (this._steppingLeft) {\r\n this._leftApex.subtractToRef(this._rightApex, this._axis);\r\n this._forward.copyFromFloats(-this._axis.y, this._axis.x);\r\n } else {\r\n this._rightApex.subtractToRef(this._leftApex, this._axis);\r\n this._forward.copyFromFloats(this._axis.y, -this._axis.x);\r\n }\r\n this._axisLength = this._axis.length();\r\n this._forward.scaleInPlace(1 / this._axisLength);\r\n\r\n this._updateTAndVitality(currentPosition.x, currentPosition.y);\r\n this._maxT = this._t;\r\n this._maxTPosition.copyFrom(currentPosition);\r\n\r\n this._vitality = 1;\r\n }\r\n\r\n private _updateTAndVitality(x: number, y: number) {\r\n this._currentPosition.copyFromFloats(x, y);\r\n\r\n if (this._steppingLeft) {\r\n this._currentPosition.subtractInPlace(this._rightApex);\r\n } else {\r\n this._currentPosition.subtractInPlace(this._leftApex);\r\n }\r\n const priorT = this._t;\r\n const dot = Vector2.Dot(this._currentPosition, this._axis);\r\n this._t = dot / (this._axisLength * this._axisLength);\r\n const projDistSquared = this._currentPosition.lengthSquared() - (dot / this._axisLength) * (dot / this._axisLength);\r\n\r\n // TODO: Extricate the magic.\r\n this._vitality *= (0.95 - 100 * Math.max(projDistSquared - 0.0016, 0) + Math.max(this._t - priorT, 0));\r\n }\r\n\r\n public update(x: number, y: number) {\r\n if (this._vitality < this._vitalityThreshold) {\r\n return false;\r\n }\r\n\r\n const priorT = this._t;\r\n this._updateTAndVitality(x, y);\r\n\r\n if (this._t > this._maxT) {\r\n this._maxT = this._t;\r\n this._maxTPosition.copyFromFloats(x, y);\r\n }\r\n\r\n if (this._vitality < this._vitalityThreshold) {\r\n return false;\r\n }\r\n\r\n if (this._t > priorT) {\r\n this.onMovement.notifyObservers({ deltaT: (this._t - priorT) });\r\n\r\n if (priorT < 0.5 && this._t >= 0.5) {\r\n this.onFootfall.notifyObservers({ foot: this._steppingLeft ? \"left\" : \"right\" });\r\n }\r\n }\r\n\r\n if (this._t < 0.95 * this._maxT) {\r\n this._currentPosition.copyFromFloats(x, y);\r\n if (this._steppingLeft) {\r\n this._leftApex.copyFrom(this._maxTPosition);\r\n } else {\r\n this._rightApex.copyFrom(this._maxTPosition);\r\n }\r\n this._reset(this._leftApex, this._rightApex, this._currentPosition, !this._steppingLeft);\r\n }\r\n\r\n if (this._axisLength < 0.03) {\r\n return false;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n private get _vitalityThreshold() {\r\n return 0.1;\r\n }\r\n\r\n get forward() {\r\n return this._forward;\r\n }\r\n}\r\n\r\nclass Walker {\r\n private _detector = new FirstStepDetector();\r\n private _walker: Nullable<WalkingTracker> = null;\r\n private _movement = new Vector2();\r\n\r\n public movementThisFrame: Vector3 = Vector3.Zero();\r\n\r\n constructor() {\r\n this._detector.onFirstStepDetected.add((event) => {\r\n if (!this._walker) {\r\n this._walker = new WalkingTracker(event.leftApex, event.rightApex, event.currentPosition, event.currentStepDirection);\r\n this._walker.onFootfall.add(() => {\r\n console.log(\"Footfall!\");\r\n });\r\n this._walker.onMovement.add((event) => {\r\n this._walker!.forward.scaleAndAddToRef(0.024 * event.deltaT, this._movement);\r\n });\r\n }\r\n });\r\n }\r\n\r\n public update(position: Vector3, forward: Vector3) {\r\n forward.y = 0;\r\n forward.normalize();\r\n\r\n this._detector.update(position.x, position.z, forward.x, forward.z);\r\n if (this._walker) {\r\n const updated = this._walker.update(position.x, position.z);\r\n if (!updated) {\r\n this._walker = null;\r\n }\r\n }\r\n\r\n this.movementThisFrame.set(this._movement.x, 0, this._movement.y);\r\n this._movement.scaleInPlace(0.96);\r\n }\r\n}\r\n\r\n/**\r\n * Options for the walking locomotion feature.\r\n */\r\nexport interface IWebXRWalkingLocomotionOptions {\r\n /**\r\n * The target to be moved by walking locomotion. This should be the transform node\r\n * which is the root of the XR space (i.e., the WebXRCamera's parent node). However,\r\n * for simple cases and legacy purposes, articulating the WebXRCamera itself is also\r\n * supported as a deprecated feature.\r\n */\r\n locomotionTarget: WebXRCamera | TransformNode;\r\n}\r\n\r\n/**\r\n * A module that will enable VR locomotion by detecting when the user walks in place.\r\n */\r\nexport class WebXRWalkingLocomotion extends WebXRAbstractFeature {\r\n /**\r\n * The module's name.\r\n */\r\n public static get Name(): string {\r\n return WebXRFeatureName.WALKING_LOCOMOTION;\r\n }\r\n\r\n /**\r\n * The (Babylon) version of this module.\r\n * This is an integer representing the implementation version.\r\n * This number has no external basis.\r\n */\r\n public static get Version(): number {\r\n return 1;\r\n }\r\n\r\n private _sessionManager: WebXRSessionManager;\r\n private _up: Vector3 = new Vector3();\r\n private _forward: Vector3 = new Vector3();\r\n private _position: Vector3 = new Vector3();\r\n private _movement: Vector3 = new Vector3();\r\n private _walker: Nullable<Walker>;\r\n\r\n private _locomotionTarget: WebXRCamera | TransformNode;\r\n private _isLocomotionTargetWebXRCamera: boolean;\r\n\r\n /**\r\n * The target to be articulated by walking locomotion.\r\n * When the walking locomotion feature detects walking in place, this element's\r\n * X and Z coordinates will be modified to reflect locomotion. This target should\r\n * be either the XR space's origin (i.e., the parent node of the WebXRCamera) or\r\n * the WebXRCamera itself. Note that the WebXRCamera path will modify the position\r\n * of the WebXRCamera directly and is thus discouraged.\r\n */\r\n public get locomotionTarget(): WebXRCamera | TransformNode {\r\n return this._locomotionTarget;\r\n }\r\n\r\n /**\r\n * The target to be articulated by walking locomotion.\r\n * When the walking locomotion feature detects walking in place, this element's\r\n * X and Z coordinates will be modified to reflect locomotion. This target should\r\n * be either the XR space's origin (i.e., the parent node of the WebXRCamera) or\r\n * the WebXRCamera itself. Note that the WebXRCamera path will modify the position\r\n * of the WebXRCamera directly and is thus discouraged.\r\n */\r\n public set locomotionTarget(locomotionTarget: WebXRCamera | TransformNode) {\r\n this._locomotionTarget = locomotionTarget;\r\n this._isLocomotionTargetWebXRCamera = this._locomotionTarget.getClassName() === 'WebXRCamera';\r\n }\r\n\r\n /**\r\n * Construct a new Walking Locomotion feature.\r\n * @param sessionManager manager for the current XR session\r\n * @param options creation options, prominently including the vector target for locomotion\r\n */\r\n public constructor(sessionManager: WebXRSessionManager, options: IWebXRWalkingLocomotionOptions) {\r\n super(sessionManager);\r\n this._sessionManager = sessionManager;\r\n this.locomotionTarget = options.locomotionTarget;\r\n if (this._isLocomotionTargetWebXRCamera) {\r\n Logger.Warn(\"Using walking locomotion directly on a WebXRCamera may have unintended interactions with other XR techniques. Using an XR space parent is highly recommended\");\r\n }\r\n }\r\n\r\n /**\r\n * Checks whether this feature is compatible with the current WebXR session.\r\n * Walking locomotion is only compatible with \"immersive-vr\" sessions.\r\n * @returns true if compatible, false otherwise\r\n */\r\n public isCompatible(): boolean {\r\n return (this._sessionManager.sessionMode === undefined || this._sessionManager.sessionMode === \"immersive-vr\");\r\n }\r\n\r\n /**\r\n * Attaches the feature.\r\n * Typically called automatically by the features manager.\r\n * @returns true if attach succeeded, false otherwise\r\n */\r\n public attach(): boolean {\r\n if (!this.isCompatible || !super.attach()) {\r\n return false;\r\n }\r\n\r\n this._walker = new Walker();\r\n return true;\r\n }\r\n\r\n /**\r\n * Detaches the feature.\r\n * Typically called automatically by the features manager.\r\n * @returns true if detach succeeded, false otherwise\r\n */\r\n public detach(): boolean {\r\n if (!super.detach()) {\r\n return false;\r\n }\r\n\r\n this._walker = null;\r\n return true;\r\n }\r\n\r\n protected _onXRFrame(frame: XRFrame): void {\r\n const pose = frame.getViewerPose(this._sessionManager.baseReferenceSpace);\r\n if (!pose) {\r\n return;\r\n }\r\n\r\n const handednessScalar = this.locomotionTarget.getScene().useRightHandedSystem ? 1 : -1;\r\n\r\n const m = pose.transform.matrix;\r\n this._up.copyFromFloats(m[4], m[5], handednessScalar * m[6]);\r\n this._forward.copyFromFloats(m[8], m[9], handednessScalar * m[10]);\r\n this._position.copyFromFloats(m[12], m[13], handednessScalar * m[14]);\r\n\r\n // Compute the nape position\r\n this._forward.scaleAndAddToRef(0.05, this._position);\r\n this._up.scaleAndAddToRef(-0.05, this._position);\r\n this._walker!.update(this._position, this._forward);\r\n this._movement.copyFrom(this._walker!.movementThisFrame);\r\n if (!this._isLocomotionTargetWebXRCamera) {\r\n Vector3.TransformNormalToRef(this._movement, this.locomotionTarget.getWorldMatrix(), this._movement);\r\n }\r\n this.locomotionTarget.position.addInPlace(this._movement);\r\n }\r\n}\r\n\r\n//register the plugin\r\nWebXRFeaturesManager.AddWebXRFeature(\r\n WebXRWalkingLocomotion.Name,\r\n (xrSessionManager, options) => {\r\n return () => new WebXRWalkingLocomotion(xrSessionManager, options);\r\n },\r\n WebXRWalkingLocomotion.Version,\r\n false\r\n);\r\n"]}
|
|
1
|
+
{"version":3,"file":"WebXRWalkingLocomotion.js","sourceRoot":"","sources":["../../../../sourceES6/core/XR/features/WebXRWalkingLocomotion.ts"],"names":[],"mappings":"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","sourcesContent":["import { Engine } from \"../../Engines/engine\";\r\nimport { TmpVectors, Vector2, Vector3 } from \"../../Maths/math.vector\";\r\nimport { TransformNode } from \"../../Meshes/transformNode\";\r\nimport { Logger } from \"../../Misc/logger\";\r\nimport { Observable } from \"../../Misc/observable\";\r\nimport { Nullable } from \"../../types\";\r\nimport { WebXRCamera } from \"../webXRCamera\";\r\nimport { WebXRFeatureName, WebXRFeaturesManager } from \"../webXRFeaturesManager\";\r\nimport { WebXRSessionManager } from \"../webXRSessionManager\";\r\nimport { WebXRAbstractFeature } from \"./WebXRAbstractFeature\";\r\n\r\nclass CircleBuffer {\r\n private _samples: Array<Vector2> = [];\r\n private _idx: number = 0;\r\n\r\n constructor (numSamples: number, initializer?: () => Vector2) {\r\n for (let idx = 0; idx < numSamples; ++idx) {\r\n this._samples.push(initializer ? initializer() : Vector2.Zero());\r\n }\r\n }\r\n\r\n public get length() {\r\n return this._samples.length;\r\n }\r\n\r\n public push(x: number, y: number) {\r\n this._idx = (this._idx + this._samples.length - 1) % this._samples.length;\r\n this.at(0).copyFromFloats(x, y);\r\n }\r\n\r\n public at(idx: number) {\r\n if (idx >= this._samples.length) {\r\n throw new Error(\"Index out of bounds\");\r\n }\r\n return this._samples[(this._idx + idx) % this._samples.length];\r\n }\r\n}\r\n\r\ninterface IDetectedStep {\r\n leftApex: Vector2;\r\n rightApex: Vector2;\r\n currentPosition: Vector2;\r\n currentStepDirection: \"left\" | \"right\";\r\n}\r\n\r\nclass FirstStepDetector {\r\n private _samples = new CircleBuffer(20);\r\n private _entropy = 0;\r\n\r\n public onFirstStepDetected: Observable<IDetectedStep> = new Observable<IDetectedStep>();\r\n\r\n public update(posX: number, posY: number, forwardX: number, forwardY: number) {\r\n this._samples.push(posX, posY);\r\n const origin = this._samples.at(0);\r\n\r\n this._entropy *= this._entropyDecayFactor;\r\n this._entropy += Vector2.Distance(origin, this._samples.at(1));\r\n if (this._entropy > this._entropyThreshold) {\r\n return;\r\n }\r\n\r\n let samePointIdx;\r\n for (samePointIdx = this._samePointCheckStartIdx; samePointIdx < this._samples.length; ++samePointIdx) {\r\n if (Vector2.DistanceSquared(origin, this._samples.at(samePointIdx)) < this._samePointSquaredDistanceThreshold) {\r\n break;\r\n }\r\n }\r\n\r\n if (samePointIdx === this._samples.length) {\r\n return;\r\n }\r\n\r\n let apexDistSquared = -1;\r\n let apexIdx = 0;\r\n for (let distSquared, idx = 1; idx < samePointIdx; ++idx) {\r\n distSquared = Vector2.DistanceSquared(origin, this._samples.at(idx));\r\n if (distSquared > apexDistSquared) {\r\n apexIdx = idx;\r\n apexDistSquared = distSquared;\r\n }\r\n }\r\n\r\n if (apexDistSquared < this._apexSquaredDistanceThreshold) {\r\n return;\r\n }\r\n\r\n const apex = this._samples.at(apexIdx);\r\n const axis = apex.subtract(origin);\r\n axis.normalize();\r\n\r\n const vec = TmpVectors.Vector2[0];\r\n let dot;\r\n let sample;\r\n let sumSquaredProjectionDistances = 0;\r\n for (let idx = 1; idx < samePointIdx; ++idx) {\r\n sample = this._samples.at(idx);\r\n sample.subtractToRef(origin, vec);\r\n dot = Vector2.Dot(axis, vec);\r\n sumSquaredProjectionDistances += vec.lengthSquared() - (dot * dot);\r\n }\r\n\r\n if (sumSquaredProjectionDistances > (samePointIdx * this._squaredProjectionDistanceThreshold)) {\r\n return;\r\n }\r\n\r\n const forwardVec = TmpVectors.Vector3[0];\r\n forwardVec.set(forwardX, forwardY, 0);\r\n const axisVec = TmpVectors.Vector3[1];\r\n axisVec.set(axis.x, axis.y, 0);\r\n const isApexLeft = Vector3.Cross(forwardVec, axisVec).z > 0;\r\n const leftApex = origin.clone();\r\n const rightApex = origin.clone();\r\n apex.subtractToRef(origin, axis);\r\n if (isApexLeft) {\r\n axis.scaleAndAddToRef(this._axisToApexShrinkFactor, leftApex);\r\n axis.scaleAndAddToRef(this._axisToApexExtendFactor, rightApex);\r\n } else {\r\n axis.scaleAndAddToRef(this._axisToApexExtendFactor, leftApex);\r\n axis.scaleAndAddToRef(this._axisToApexShrinkFactor, rightApex);\r\n }\r\n this.onFirstStepDetected.notifyObservers({\r\n leftApex: leftApex,\r\n rightApex: rightApex,\r\n currentPosition: origin,\r\n currentStepDirection: isApexLeft ? \"right\" : \"left\"\r\n });\r\n }\r\n\r\n public reset() {\r\n for (let idx = 0; idx < this._samples.length; ++idx) {\r\n this._samples.at(idx).copyFromFloats(0, 0);\r\n }\r\n }\r\n\r\n private get _samePointCheckStartIdx() {\r\n return Math.floor(this._samples.length / 3);\r\n }\r\n\r\n private get _samePointSquaredDistanceThreshold() {\r\n return 0.03 * 0.03;\r\n }\r\n\r\n private get _apexSquaredDistanceThreshold() {\r\n return 0.09 * 0.09;\r\n }\r\n\r\n private get _squaredProjectionDistanceThreshold() {\r\n return 0.03 * 0.03;\r\n }\r\n\r\n private get _axisToApexShrinkFactor() {\r\n return 0.8;\r\n }\r\n\r\n private get _axisToApexExtendFactor() {\r\n return -1.6;\r\n }\r\n\r\n private get _entropyDecayFactor() {\r\n return 0.93;\r\n }\r\n\r\n private get _entropyThreshold() {\r\n return 0.4;\r\n }\r\n}\r\n\r\nclass WalkingTracker {\r\n private _leftApex = new Vector2();\r\n private _rightApex = new Vector2();\r\n private _currentPosition = new Vector2();\r\n private _axis = new Vector2();\r\n private _axisLength = -1;\r\n private _forward = new Vector2();\r\n private _steppingLeft = false;\r\n private _t = -1;\r\n private _maxT = -1;\r\n private _maxTPosition = new Vector2();\r\n private _vitality = 0;\r\n\r\n public onMovement = new Observable<{ deltaT: number }>();\r\n public onFootfall = new Observable<{ foot: \"left\" | \"right\" }>();\r\n\r\n constructor(leftApex: Vector2, rightApex: Vector2, currentPosition: Vector2, currentStepDirection: \"left\" | \"right\") {\r\n this._reset(leftApex, rightApex, currentPosition, currentStepDirection === \"left\");\r\n }\r\n\r\n private _reset(leftApex: Vector2, rightApex: Vector2, currentPosition: Vector2, steppingLeft: boolean) {\r\n this._leftApex.copyFrom(leftApex);\r\n this._rightApex.copyFrom(rightApex);\r\n this._steppingLeft = steppingLeft;\r\n\r\n if (this._steppingLeft) {\r\n this._leftApex.subtractToRef(this._rightApex, this._axis);\r\n this._forward.copyFromFloats(-this._axis.y, this._axis.x);\r\n } else {\r\n this._rightApex.subtractToRef(this._leftApex, this._axis);\r\n this._forward.copyFromFloats(this._axis.y, -this._axis.x);\r\n }\r\n this._axisLength = this._axis.length();\r\n this._forward.scaleInPlace(1 / this._axisLength);\r\n\r\n this._updateTAndVitality(currentPosition.x, currentPosition.y);\r\n this._maxT = this._t;\r\n this._maxTPosition.copyFrom(currentPosition);\r\n\r\n this._vitality = 1;\r\n }\r\n\r\n private _updateTAndVitality(x: number, y: number) {\r\n this._currentPosition.copyFromFloats(x, y);\r\n\r\n if (this._steppingLeft) {\r\n this._currentPosition.subtractInPlace(this._rightApex);\r\n } else {\r\n this._currentPosition.subtractInPlace(this._leftApex);\r\n }\r\n const priorT = this._t;\r\n const dot = Vector2.Dot(this._currentPosition, this._axis);\r\n this._t = dot / (this._axisLength * this._axisLength);\r\n const projDistSquared = this._currentPosition.lengthSquared() - (dot / this._axisLength) * (dot / this._axisLength);\r\n\r\n // TODO: Extricate the magic.\r\n this._vitality *= (0.92 - 100 * Math.max(projDistSquared - 0.0016, 0) + Math.max(this._t - priorT, 0));\r\n }\r\n\r\n public update(x: number, y: number) {\r\n if (this._vitality < this._vitalityThreshold) {\r\n return false;\r\n }\r\n\r\n const priorT = this._t;\r\n this._updateTAndVitality(x, y);\r\n\r\n if (this._t > this._maxT) {\r\n this._maxT = this._t;\r\n this._maxTPosition.copyFromFloats(x, y);\r\n }\r\n\r\n if (this._vitality < this._vitalityThreshold) {\r\n return false;\r\n }\r\n\r\n if (this._t > priorT) {\r\n this.onMovement.notifyObservers({ deltaT: (this._t - priorT) });\r\n\r\n if (priorT < 0.5 && this._t >= 0.5) {\r\n this.onFootfall.notifyObservers({ foot: this._steppingLeft ? \"left\" : \"right\" });\r\n }\r\n }\r\n\r\n if (this._t < 0.95 * this._maxT) {\r\n this._currentPosition.copyFromFloats(x, y);\r\n if (this._steppingLeft) {\r\n this._leftApex.copyFrom(this._maxTPosition);\r\n } else {\r\n this._rightApex.copyFrom(this._maxTPosition);\r\n }\r\n this._reset(this._leftApex, this._rightApex, this._currentPosition, !this._steppingLeft);\r\n }\r\n\r\n if (this._axisLength < 0.03) {\r\n return false;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n private get _vitalityThreshold() {\r\n return 0.1;\r\n }\r\n\r\n get forward() {\r\n return this._forward;\r\n }\r\n}\r\n\r\nclass Walker {\r\n private _engine: Engine;\r\n private _detector = new FirstStepDetector();\r\n private _walker: Nullable<WalkingTracker> = null;\r\n private _movement = new Vector2();\r\n private _millisecondsSinceLastUpdate: number = Walker._MillisecondsPerUpdate;\r\n\r\n private static get _MillisecondsPerUpdate(): number {\r\n // 15 FPS\r\n return 1000 / 15;\r\n }\r\n\r\n public movementThisFrame: Vector3 = Vector3.Zero();\r\n\r\n constructor(engine: Engine) {\r\n this._engine = engine;\r\n this._detector.onFirstStepDetected.add((event) => {\r\n if (!this._walker) {\r\n this._walker = new WalkingTracker(event.leftApex, event.rightApex, event.currentPosition, event.currentStepDirection);\r\n this._walker.onFootfall.add(() => {\r\n console.log(\"Footfall!\");\r\n });\r\n this._walker.onMovement.add((event) => {\r\n this._walker!.forward.scaleAndAddToRef(0.024 * event.deltaT, this._movement);\r\n });\r\n }\r\n });\r\n }\r\n\r\n public update(position: Vector3, forward: Vector3) {\r\n forward.y = 0;\r\n forward.normalize();\r\n\r\n // Enforce reduced framerate\r\n this._millisecondsSinceLastUpdate += this._engine.getDeltaTime();\r\n if (this._millisecondsSinceLastUpdate >= Walker._MillisecondsPerUpdate) {\r\n this._millisecondsSinceLastUpdate -= Walker._MillisecondsPerUpdate;\r\n this._detector.update(position.x, position.z, forward.x, forward.z);\r\n if (this._walker) {\r\n const updated = this._walker.update(position.x, position.z);\r\n if (!updated) {\r\n this._walker = null;\r\n }\r\n }\r\n this._movement.scaleInPlace(0.85);\r\n }\r\n\r\n this.movementThisFrame.set(this._movement.x, 0, this._movement.y);\r\n }\r\n}\r\n\r\n/**\r\n * Options for the walking locomotion feature.\r\n */\r\nexport interface IWebXRWalkingLocomotionOptions {\r\n /**\r\n * The target to be moved by walking locomotion. This should be the transform node\r\n * which is the root of the XR space (i.e., the WebXRCamera's parent node). However,\r\n * for simple cases and legacy purposes, articulating the WebXRCamera itself is also\r\n * supported as a deprecated feature.\r\n */\r\n locomotionTarget: WebXRCamera | TransformNode;\r\n}\r\n\r\n/**\r\n * A module that will enable VR locomotion by detecting when the user walks in place.\r\n */\r\nexport class WebXRWalkingLocomotion extends WebXRAbstractFeature {\r\n /**\r\n * The module's name.\r\n */\r\n public static get Name(): string {\r\n return WebXRFeatureName.WALKING_LOCOMOTION;\r\n }\r\n\r\n /**\r\n * The (Babylon) version of this module.\r\n * This is an integer representing the implementation version.\r\n * This number has no external basis.\r\n */\r\n public static get Version(): number {\r\n return 1;\r\n }\r\n\r\n private _sessionManager: WebXRSessionManager;\r\n private _up: Vector3 = new Vector3();\r\n private _forward: Vector3 = new Vector3();\r\n private _position: Vector3 = new Vector3();\r\n private _movement: Vector3 = new Vector3();\r\n private _walker: Nullable<Walker>;\r\n\r\n private _locomotionTarget: WebXRCamera | TransformNode;\r\n private _isLocomotionTargetWebXRCamera: boolean;\r\n\r\n /**\r\n * The target to be articulated by walking locomotion.\r\n * When the walking locomotion feature detects walking in place, this element's\r\n * X and Z coordinates will be modified to reflect locomotion. This target should\r\n * be either the XR space's origin (i.e., the parent node of the WebXRCamera) or\r\n * the WebXRCamera itself. Note that the WebXRCamera path will modify the position\r\n * of the WebXRCamera directly and is thus discouraged.\r\n */\r\n public get locomotionTarget(): WebXRCamera | TransformNode {\r\n return this._locomotionTarget;\r\n }\r\n\r\n /**\r\n * The target to be articulated by walking locomotion.\r\n * When the walking locomotion feature detects walking in place, this element's\r\n * X and Z coordinates will be modified to reflect locomotion. This target should\r\n * be either the XR space's origin (i.e., the parent node of the WebXRCamera) or\r\n * the WebXRCamera itself. Note that the WebXRCamera path will modify the position\r\n * of the WebXRCamera directly and is thus discouraged.\r\n */\r\n public set locomotionTarget(locomotionTarget: WebXRCamera | TransformNode) {\r\n this._locomotionTarget = locomotionTarget;\r\n this._isLocomotionTargetWebXRCamera = this._locomotionTarget.getClassName() === 'WebXRCamera';\r\n }\r\n\r\n /**\r\n * Construct a new Walking Locomotion feature.\r\n * @param sessionManager manager for the current XR session\r\n * @param options creation options, prominently including the vector target for locomotion\r\n */\r\n public constructor(sessionManager: WebXRSessionManager, options: IWebXRWalkingLocomotionOptions) {\r\n super(sessionManager);\r\n this._sessionManager = sessionManager;\r\n this.locomotionTarget = options.locomotionTarget;\r\n if (this._isLocomotionTargetWebXRCamera) {\r\n Logger.Warn(\"Using walking locomotion directly on a WebXRCamera may have unintended interactions with other XR techniques. Using an XR space parent is highly recommended\");\r\n }\r\n }\r\n\r\n /**\r\n * Checks whether this feature is compatible with the current WebXR session.\r\n * Walking locomotion is only compatible with \"immersive-vr\" sessions.\r\n * @returns true if compatible, false otherwise\r\n */\r\n public isCompatible(): boolean {\r\n return (this._sessionManager.sessionMode === undefined || this._sessionManager.sessionMode === \"immersive-vr\");\r\n }\r\n\r\n /**\r\n * Attaches the feature.\r\n * Typically called automatically by the features manager.\r\n * @returns true if attach succeeded, false otherwise\r\n */\r\n public attach(): boolean {\r\n if (!this.isCompatible || !super.attach()) {\r\n return false;\r\n }\r\n\r\n this._walker = new Walker(this._sessionManager.scene.getEngine());\r\n return true;\r\n }\r\n\r\n /**\r\n * Detaches the feature.\r\n * Typically called automatically by the features manager.\r\n * @returns true if detach succeeded, false otherwise\r\n */\r\n public detach(): boolean {\r\n if (!super.detach()) {\r\n return false;\r\n }\r\n\r\n this._walker = null;\r\n return true;\r\n }\r\n\r\n protected _onXRFrame(frame: XRFrame): void {\r\n const pose = frame.getViewerPose(this._sessionManager.baseReferenceSpace);\r\n if (!pose) {\r\n return;\r\n }\r\n\r\n const handednessScalar = this.locomotionTarget.getScene().useRightHandedSystem ? 1 : -1;\r\n\r\n const m = pose.transform.matrix;\r\n this._up.copyFromFloats(m[4], m[5], handednessScalar * m[6]);\r\n this._forward.copyFromFloats(m[8], m[9], handednessScalar * m[10]);\r\n this._position.copyFromFloats(m[12], m[13], handednessScalar * m[14]);\r\n\r\n // Compute the nape position\r\n this._forward.scaleAndAddToRef(0.05, this._position);\r\n this._up.scaleAndAddToRef(-0.05, this._position);\r\n this._walker!.update(this._position, this._forward);\r\n this._movement.copyFrom(this._walker!.movementThisFrame);\r\n if (!this._isLocomotionTargetWebXRCamera) {\r\n Vector3.TransformNormalToRef(this._movement, this.locomotionTarget.getWorldMatrix(), this._movement);\r\n }\r\n this.locomotionTarget.position.addInPlace(this._movement);\r\n }\r\n}\r\n\r\n//register the plugin\r\nWebXRFeaturesManager.AddWebXRFeature(\r\n WebXRWalkingLocomotion.Name,\r\n (xrSessionManager, options) => {\r\n return () => new WebXRWalkingLocomotion(xrSessionManager, options);\r\n },\r\n WebXRWalkingLocomotion.Version,\r\n false\r\n);\r\n"]}
|
package/package.json
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
],
|
|
8
8
|
"name": "@babylonjs/core",
|
|
9
9
|
"description": "Babylon.js is a JavaScript 3D engine based on webgl.",
|
|
10
|
-
"version": "5.0.0-alpha.
|
|
10
|
+
"version": "5.0.0-alpha.60",
|
|
11
11
|
"repository": {
|
|
12
12
|
"type": "git",
|
|
13
13
|
"url": "https://github.com/BabylonJS/Babylon.js.git"
|
|
@@ -2431,6 +2431,12 @@
|
|
|
2431
2431
|
"Shaders/blur.fragment.d.ts",
|
|
2432
2432
|
"Shaders/blur.fragment.js",
|
|
2433
2433
|
"Shaders/blur.fragment.js.map",
|
|
2434
|
+
"Shaders/boundingBoxRenderer.fragment.d.ts",
|
|
2435
|
+
"Shaders/boundingBoxRenderer.fragment.js",
|
|
2436
|
+
"Shaders/boundingBoxRenderer.fragment.js.map",
|
|
2437
|
+
"Shaders/boundingBoxRenderer.vertex.d.ts",
|
|
2438
|
+
"Shaders/boundingBoxRenderer.vertex.js",
|
|
2439
|
+
"Shaders/boundingBoxRenderer.vertex.js.map",
|
|
2434
2440
|
"Shaders/chromaticAberration.fragment.d.ts",
|
|
2435
2441
|
"Shaders/chromaticAberration.fragment.js",
|
|
2436
2442
|
"Shaders/chromaticAberration.fragment.js.map",
|
|
@@ -2644,6 +2650,15 @@
|
|
|
2644
2650
|
"Shaders/ShadersInclude/bonesVertex.d.ts",
|
|
2645
2651
|
"Shaders/ShadersInclude/bonesVertex.js",
|
|
2646
2652
|
"Shaders/ShadersInclude/bonesVertex.js.map",
|
|
2653
|
+
"Shaders/ShadersInclude/boundingBoxRendererFragmentDeclaration.d.ts",
|
|
2654
|
+
"Shaders/ShadersInclude/boundingBoxRendererFragmentDeclaration.js",
|
|
2655
|
+
"Shaders/ShadersInclude/boundingBoxRendererFragmentDeclaration.js.map",
|
|
2656
|
+
"Shaders/ShadersInclude/boundingBoxRendererUboDeclaration.d.ts",
|
|
2657
|
+
"Shaders/ShadersInclude/boundingBoxRendererUboDeclaration.js",
|
|
2658
|
+
"Shaders/ShadersInclude/boundingBoxRendererUboDeclaration.js.map",
|
|
2659
|
+
"Shaders/ShadersInclude/boundingBoxRendererVertexDeclaration.d.ts",
|
|
2660
|
+
"Shaders/ShadersInclude/boundingBoxRendererVertexDeclaration.js",
|
|
2661
|
+
"Shaders/ShadersInclude/boundingBoxRendererVertexDeclaration.js.map",
|
|
2647
2662
|
"Shaders/ShadersInclude/bumpFragment.d.ts",
|
|
2648
2663
|
"Shaders/ShadersInclude/bumpFragment.js",
|
|
2649
2664
|
"Shaders/ShadersInclude/bumpFragment.js.map",
|
package/scene.d.ts
CHANGED
|
@@ -1164,9 +1164,10 @@ export declare class Scene extends AbstractScene implements IAnimatable, IClipPl
|
|
|
1164
1164
|
/**
|
|
1165
1165
|
* This function will check if the scene can be rendered (textures are loaded, shaders are compiled)
|
|
1166
1166
|
* Delay loaded resources are not taking in account
|
|
1167
|
+
* @param checkRenderTargets true to also check that the meshes rendered as part of a render target are ready (default: true)
|
|
1167
1168
|
* @return true if all required resources are ready
|
|
1168
1169
|
*/
|
|
1169
|
-
isReady(): boolean;
|
|
1170
|
+
isReady(checkRenderTargets?: boolean): boolean;
|
|
1170
1171
|
/** Resets all cached information relative to material (including effect and visibility) */
|
|
1171
1172
|
resetCachedMaterial(): void;
|
|
1172
1173
|
/**
|
|
@@ -1214,15 +1215,17 @@ export declare class Scene extends AbstractScene implements IAnimatable, IClipPl
|
|
|
1214
1215
|
/**
|
|
1215
1216
|
* Registers a function to be executed when the scene is ready
|
|
1216
1217
|
* @param {Function} func - the function to be executed
|
|
1218
|
+
* @param checkRenderTargets true to also check that the meshes rendered as part of a render target are ready (default: false)
|
|
1217
1219
|
*/
|
|
1218
|
-
executeWhenReady(func: () => void): void;
|
|
1220
|
+
executeWhenReady(func: () => void, checkRenderTargets?: boolean): void;
|
|
1219
1221
|
/**
|
|
1220
1222
|
* Returns a promise that resolves when the scene is ready
|
|
1223
|
+
* @param checkRenderTargets true to also check that the meshes rendered as part of a render target are ready (default: false)
|
|
1221
1224
|
* @returns A promise that resolves when the scene is ready
|
|
1222
1225
|
*/
|
|
1223
|
-
whenReadyAsync(): Promise<void>;
|
|
1226
|
+
whenReadyAsync(checkRenderTargets?: boolean): Promise<void>;
|
|
1224
1227
|
/** @hidden */
|
|
1225
|
-
_checkIsReady(): void;
|
|
1228
|
+
_checkIsReady(checkRenderTargets?: boolean): void;
|
|
1226
1229
|
/**
|
|
1227
1230
|
* Gets all animatable attached to the scene
|
|
1228
1231
|
*/
|
|
@@ -1260,6 +1263,17 @@ export declare class Scene extends AbstractScene implements IAnimatable, IClipPl
|
|
|
1260
1263
|
* @returns a UniformBuffer
|
|
1261
1264
|
*/
|
|
1262
1265
|
getSceneUniformBuffer(): UniformBuffer;
|
|
1266
|
+
/**
|
|
1267
|
+
* Creates a scene UBO
|
|
1268
|
+
* @param name name of the uniform buffer (optional, for debugging purpose only)
|
|
1269
|
+
* @returns a new ubo
|
|
1270
|
+
*/
|
|
1271
|
+
createSceneUniformBuffer(name?: string): UniformBuffer;
|
|
1272
|
+
/**
|
|
1273
|
+
* Sets the scene ubo
|
|
1274
|
+
* @param ubo the ubo to set for the scene
|
|
1275
|
+
*/
|
|
1276
|
+
setSceneUniformBuffer(ubo: UniformBuffer): void;
|
|
1263
1277
|
/**
|
|
1264
1278
|
* Gets an unique (relatively to the current scene) Id
|
|
1265
1279
|
* @returns an unique number for the scene
|