@babylonjs/core 6.8.0 → 6.8.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Actions/abstractActionManager.js.map +1 -1
- package/Actions/action.js.map +1 -1
- package/Animations/animation.js.map +1 -1
- package/Animations/animationGroup.d.ts +5 -0
- package/Animations/animationGroup.js +12 -0
- package/Animations/animationGroup.js.map +1 -1
- package/Animations/easing.js.map +1 -1
- package/Audio/audioSceneComponent.js.map +1 -1
- package/Audio/sound.js.map +1 -1
- package/BakedVertexAnimation/bakedVertexAnimationManager.js.map +1 -1
- package/Behaviors/Cameras/bouncingBehavior.js.map +1 -1
- package/Behaviors/Cameras/framingBehavior.js.map +1 -1
- package/Behaviors/Meshes/fadeInOutBehavior.js.map +1 -1
- package/Behaviors/Meshes/pointerDragBehavior.js.map +1 -1
- package/Bones/bone.js.map +1 -1
- package/Bones/boneIKController.js.map +1 -1
- package/Bones/boneLookController.js.map +1 -1
- package/Buffers/dataBuffer.js.map +1 -1
- package/Cameras/Inputs/BaseCameraMouseWheelInput.js.map +1 -1
- package/Cameras/Inputs/BaseCameraPointersInput.js.map +1 -1
- package/Cameras/Inputs/arcRotateCameraGamepadInput.js.map +1 -1
- package/Cameras/Inputs/arcRotateCameraKeyboardMoveInput.js.map +1 -1
- package/Cameras/Inputs/arcRotateCameraMouseWheelInput.js.map +1 -1
- package/Cameras/Inputs/arcRotateCameraPointersInput.js.map +1 -1
- package/Cameras/Inputs/flyCameraKeyboardInput.js.map +1 -1
- package/Cameras/Inputs/flyCameraMouseInput.js.map +1 -1
- package/Cameras/Inputs/followCameraKeyboardMoveInput.js.map +1 -1
- package/Cameras/Inputs/followCameraMouseWheelInput.js.map +1 -1
- package/Cameras/Inputs/followCameraPointersInput.js.map +1 -1
- package/Cameras/Inputs/freeCameraGamepadInput.js.map +1 -1
- package/Cameras/Inputs/freeCameraKeyboardMoveInput.js.map +1 -1
- package/Cameras/Inputs/freeCameraMouseInput.js.map +1 -1
- package/Cameras/Inputs/freeCameraTouchInput.js.map +1 -1
- package/Cameras/VR/vrExperienceHelper.js.map +1 -1
- package/Cameras/arcRotateCamera.js.map +1 -1
- package/Cameras/camera.js.map +1 -1
- package/Cameras/flyCamera.js.map +1 -1
- package/Cameras/followCamera.js.map +1 -1
- package/Cameras/freeCamera.js.map +1 -1
- package/Cameras/targetCamera.js.map +1 -1
- package/Collisions/collider.js.map +1 -1
- package/Compute/computeEffect.js.map +1 -1
- package/Compute/computeShader.js +1 -5
- package/Compute/computeShader.js.map +1 -1
- package/Culling/Octrees/octree.js.map +1 -1
- package/Culling/boundingBox.js.map +1 -1
- package/Culling/boundingInfo.js.map +1 -1
- package/Culling/boundingSphere.js.map +1 -1
- package/Debug/debugLayer.js +1 -9
- package/Debug/debugLayer.js.map +1 -1
- package/Debug/skeletonViewer.js.map +1 -1
- package/Engines/Extensions/engine.cubeTexture.js +1 -6
- package/Engines/Extensions/engine.cubeTexture.js.map +1 -1
- package/Engines/Extensions/engine.multiRender.js.map +1 -1
- package/Engines/Extensions/engine.renderTarget.js +1 -6
- package/Engines/Extensions/engine.renderTarget.js.map +1 -1
- package/Engines/Extensions/engine.renderTargetCube.js +1 -9
- package/Engines/Extensions/engine.renderTargetCube.js.map +1 -1
- package/Engines/Extensions/engine.webVR.js +1 -5
- package/Engines/Extensions/engine.webVR.js.map +1 -1
- package/Engines/Processors/Expressions/Operators/shaderDefineArithmeticOperator.js +3 -0
- package/Engines/Processors/Expressions/Operators/shaderDefineArithmeticOperator.js.map +1 -1
- package/Engines/Processors/shaderCodeInliner.js.map +1 -1
- package/Engines/Processors/shaderProcessor.js +10 -3
- package/Engines/Processors/shaderProcessor.js.map +1 -1
- package/Engines/WebGPU/Extensions/engine.cubeTexture.js +1 -7
- package/Engines/WebGPU/Extensions/engine.cubeTexture.js.map +1 -1
- package/Engines/WebGPU/Extensions/engine.renderTarget.js +1 -8
- package/Engines/WebGPU/Extensions/engine.renderTarget.js.map +1 -1
- package/Engines/WebGPU/Extensions/engine.renderTargetCube.js +1 -10
- package/Engines/WebGPU/Extensions/engine.renderTargetCube.js.map +1 -1
- package/Engines/WebGPU/webgpuCacheBindGroups.js.map +1 -1
- package/Engines/WebGPU/webgpuCacheRenderPipeline.js.map +1 -1
- package/Engines/WebGPU/webgpuCacheSampler.js +1 -6
- package/Engines/WebGPU/webgpuCacheSampler.js.map +1 -1
- package/Engines/WebGPU/webgpuShaderProcessor.js.map +1 -1
- package/Engines/WebGPU/webgpuTintWASM.js +1 -4
- package/Engines/WebGPU/webgpuTintWASM.js.map +1 -1
- package/Engines/engine.js.map +1 -1
- package/Engines/nativeEngine.js.map +1 -1
- package/Engines/nullEngine.js +1 -9
- package/Engines/nullEngine.js.map +1 -1
- package/Engines/thinEngine.js +3 -2
- package/Engines/thinEngine.js.map +1 -1
- package/Engines/webgpuEngine.js +3 -14
- package/Engines/webgpuEngine.js.map +1 -1
- package/Gamepads/Controllers/gearVRController.js.map +1 -1
- package/Gamepads/Controllers/oculusTouchController.js.map +1 -1
- package/Gamepads/Controllers/poseEnabledController.js.map +1 -1
- package/Gamepads/Controllers/windowsMotionController.js.map +1 -1
- package/Gamepads/gamepad.js.map +1 -1
- package/Gizmos/cameraGizmo.js.map +1 -1
- package/Gizmos/gizmo.js.map +1 -1
- package/Gizmos/lightGizmo.js.map +1 -1
- package/Gizmos/planeRotationGizmo.js.map +1 -1
- package/Helpers/environmentHelper.js +2 -8
- package/Helpers/environmentHelper.js.map +1 -1
- package/Helpers/textureDome.js.map +1 -1
- package/Inputs/scene.inputManager.js +4 -1
- package/Inputs/scene.inputManager.js.map +1 -1
- package/Layers/effectLayer.js +1 -8
- package/Layers/effectLayer.js.map +1 -1
- package/Layers/glowLayer.js +1 -12
- package/Layers/glowLayer.js.map +1 -1
- package/Layers/highlightLayer.js +1 -11
- package/Layers/highlightLayer.js.map +1 -1
- package/Legacy/legacy.js +1 -1
- package/Legacy/legacy.js.map +1 -1
- package/LensFlares/lensFlareSystem.js.map +1 -1
- package/Lights/Shadows/shadowGenerator.js +1 -4
- package/Lights/Shadows/shadowGenerator.js.map +1 -1
- package/Lights/directionalLight.js.map +1 -1
- package/Lights/hemisphericLight.js.map +1 -1
- package/Lights/light.js.map +1 -1
- package/Lights/spotLight.js.map +1 -1
- package/Loading/loadingScreen.js.map +1 -1
- package/Materials/Background/backgroundMaterial.js.map +1 -1
- package/Materials/Node/Blocks/Dual/currentScreenBlock.d.ts +1 -1
- package/Materials/Node/Blocks/Dual/lightBlock.js.map +1 -1
- package/Materials/Node/Blocks/Dual/reflectionTextureBaseBlock.js.map +1 -1
- package/Materials/Node/Blocks/Dual/sceneDepthBlock.d.ts +1 -1
- package/Materials/Node/Blocks/Dual/sceneDepthBlock.js.map +1 -1
- package/Materials/Node/Blocks/Fragment/fragmentOutputBlock.js.map +1 -1
- package/Materials/Node/Blocks/Fragment/heightToNormalBlock.js.map +1 -1
- package/Materials/Node/Blocks/Fragment/imageProcessingBlock.js.map +1 -1
- package/Materials/Node/Blocks/Fragment/perturbNormalBlock.js.map +1 -1
- package/Materials/Node/Blocks/PBR/clearCoatBlock.js.map +1 -1
- package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.js.map +1 -1
- package/Materials/Node/Blocks/PBR/reflectionBlock.js.map +1 -1
- package/Materials/Node/Blocks/PBR/refractionBlock.js.map +1 -1
- package/Materials/Node/Blocks/PBR/sheenBlock.js.map +1 -1
- package/Materials/Node/Blocks/addBlock.js +2 -0
- package/Materials/Node/Blocks/addBlock.js.map +1 -1
- package/Materials/Node/Blocks/clampBlock.js.map +1 -1
- package/Materials/Node/Blocks/cloudBlock.js.map +1 -1
- package/Materials/Node/Blocks/customBlock.d.ts +1 -0
- package/Materials/Node/Blocks/customBlock.js +18 -2
- package/Materials/Node/Blocks/customBlock.js.map +1 -1
- package/Materials/Node/Blocks/divideBlock.js +2 -0
- package/Materials/Node/Blocks/divideBlock.js.map +1 -1
- package/Materials/Node/Blocks/meshAttributeExistsBlock.js.map +1 -1
- package/Materials/Node/Blocks/multiplyBlock.js +2 -0
- package/Materials/Node/Blocks/multiplyBlock.js.map +1 -1
- package/Materials/Node/Blocks/remapBlock.js.map +1 -1
- package/Materials/Node/Blocks/subtractBlock.js +2 -0
- package/Materials/Node/Blocks/subtractBlock.js.map +1 -1
- package/Materials/Node/Blocks/triPlanarBlock.js.map +1 -1
- package/Materials/Node/Blocks/worleyNoise3DBlock.js.map +1 -1
- package/Materials/Node/nodeMaterial.js +2 -8
- package/Materials/Node/nodeMaterial.js.map +1 -1
- package/Materials/PBR/pbrAnisotropicConfiguration.js.map +1 -1
- package/Materials/PBR/pbrBRDFConfiguration.js.map +1 -1
- package/Materials/PBR/pbrBaseMaterial.js +1 -5
- package/Materials/PBR/pbrBaseMaterial.js.map +1 -1
- package/Materials/PBR/pbrBaseSimpleMaterial.js.map +1 -1
- package/Materials/PBR/pbrClearCoatConfiguration.js.map +1 -1
- package/Materials/PBR/pbrIridescenceConfiguration.js.map +1 -1
- package/Materials/PBR/pbrMaterial.d.ts +2 -1
- package/Materials/PBR/pbrMaterial.js +6 -13
- package/Materials/PBR/pbrMaterial.js.map +1 -1
- package/Materials/PBR/pbrMetallicRoughnessMaterial.js.map +1 -1
- package/Materials/PBR/pbrSheenConfiguration.js.map +1 -1
- package/Materials/PBR/pbrSpecularGlossinessMaterial.js.map +1 -1
- package/Materials/PBR/pbrSubSurfaceConfiguration.js.map +1 -1
- package/Materials/Textures/Procedurals/proceduralTexture.js.map +1 -1
- package/Materials/Textures/baseTexture.js.map +1 -1
- package/Materials/Textures/cubeTexture.js.map +1 -1
- package/Materials/Textures/equiRectangularCubeTexture.js.map +1 -1
- package/Materials/Textures/hdrCubeTexture.js.map +1 -1
- package/Materials/Textures/htmlElementTexture.js +1 -4
- package/Materials/Textures/htmlElementTexture.js.map +1 -1
- package/Materials/Textures/internalTexture.js.map +1 -1
- package/Materials/Textures/renderTargetTexture.js.map +1 -1
- package/Materials/Textures/texture.js.map +1 -1
- package/Materials/Textures/videoTexture.js +9 -22
- package/Materials/Textures/videoTexture.js.map +1 -1
- package/Materials/colorCurves.js.map +1 -1
- package/Materials/effect.js.map +1 -1
- package/Materials/greasedLinePluginMaterial.d.ts +307 -0
- package/Materials/greasedLinePluginMaterial.js +553 -0
- package/Materials/greasedLinePluginMaterial.js.map +1 -0
- package/Materials/imageProcessingConfiguration.js.map +1 -1
- package/Materials/index.d.ts +1 -0
- package/Materials/index.js +1 -0
- package/Materials/index.js.map +1 -1
- package/Materials/material.d.ts +3 -0
- package/Materials/material.decalMapConfiguration.js.map +1 -1
- package/Materials/material.detailMapConfiguration.js.map +1 -1
- package/Materials/material.js +40 -5
- package/Materials/material.js.map +1 -1
- package/Materials/materialPluginBase.d.ts +2 -2
- package/Materials/materialPluginBase.js +2 -2
- package/Materials/materialPluginBase.js.map +1 -1
- package/Materials/materialPluginManager.d.ts +3 -2
- package/Materials/materialPluginManager.js +3 -1
- package/Materials/materialPluginManager.js.map +1 -1
- package/Materials/shaderMaterial.d.ts +3 -3
- package/Materials/shaderMaterial.js +6 -19
- package/Materials/shaderMaterial.js.map +1 -1
- package/Materials/standardMaterial.d.ts +2 -1
- package/Materials/standardMaterial.js +4 -1
- package/Materials/standardMaterial.js.map +1 -1
- package/Materials/uniformBuffer.js.map +1 -1
- package/Maths/math.vector.d.ts +2 -1
- package/Maths/math.vector.js +3 -2
- package/Maths/math.vector.js.map +1 -1
- package/Meshes/Builders/decalBuilder.js +4 -4
- package/Meshes/Builders/decalBuilder.js.map +1 -1
- package/Meshes/Builders/greasedLineBuilder.d.ts +105 -0
- package/Meshes/Builders/greasedLineBuilder.js +330 -0
- package/Meshes/Builders/greasedLineBuilder.js.map +1 -0
- package/Meshes/Builders/index.d.ts +1 -0
- package/Meshes/Builders/index.js +1 -0
- package/Meshes/Builders/index.js.map +1 -1
- package/Meshes/abstractMesh.d.ts +1 -1
- package/Meshes/abstractMesh.js +3 -2
- package/Meshes/abstractMesh.js.map +1 -1
- package/Meshes/greasedLineMesh.d.ts +189 -0
- package/Meshes/greasedLineMesh.js +437 -0
- package/Meshes/greasedLineMesh.js.map +1 -0
- package/Meshes/index.d.ts +1 -0
- package/Meshes/index.js +1 -0
- package/Meshes/index.js.map +1 -1
- package/Meshes/mesh.d.ts +4 -0
- package/Meshes/mesh.js +20 -10
- package/Meshes/mesh.js.map +1 -1
- package/Meshes/mesh.vertexData.js.map +1 -1
- package/Meshes/meshUVSpaceRenderer.js +1 -8
- package/Meshes/meshUVSpaceRenderer.js.map +1 -1
- package/Meshes/transformNode.js.map +1 -1
- package/Misc/basis.js.map +1 -1
- package/Misc/deepCopier.js +7 -1
- package/Misc/deepCopier.js.map +1 -1
- package/Misc/dumpTools.d.ts +4 -3
- package/Misc/dumpTools.js +5 -4
- package/Misc/dumpTools.js.map +1 -1
- package/Misc/environmentTextureTools.js +1 -1
- package/Misc/environmentTextureTools.js.map +1 -1
- package/Misc/fileTools.js +10 -10
- package/Misc/fileTools.js.map +1 -1
- package/Misc/greasedLineTools.d.ts +141 -0
- package/Misc/greasedLineTools.js +263 -0
- package/Misc/greasedLineTools.js.map +1 -0
- package/Misc/index.d.ts +1 -0
- package/Misc/index.js +1 -0
- package/Misc/index.js.map +1 -1
- package/Misc/khronosTextureContainer.js.map +1 -1
- package/Misc/sceneOptimizer.js.map +1 -1
- package/Misc/screenshotTools.d.ts +15 -5
- package/Misc/screenshotTools.js +23 -13
- package/Misc/screenshotTools.js.map +1 -1
- package/Misc/smartArray.js.map +1 -1
- package/Misc/tools.d.ts +21 -9
- package/Misc/tools.js +21 -9
- package/Misc/tools.js.map +1 -1
- package/Misc/videoRecorder.js +1 -4
- package/Misc/videoRecorder.js.map +1 -1
- package/Misc/virtualJoystick.js +1 -4
- package/Misc/virtualJoystick.js.map +1 -1
- package/Misc/webRequest.js.map +1 -1
- package/Morph/morphTarget.js.map +1 -1
- package/Morph/morphTargetManager.js.map +1 -1
- package/Offline/database.js.map +1 -1
- package/Particles/baseParticleSystem.js.map +1 -1
- package/Particles/gpuParticleSystem.js +2 -6
- package/Particles/gpuParticleSystem.js.map +1 -1
- package/Particles/particle.js.map +1 -1
- package/Particles/particleSystem.js +1 -1
- package/Particles/particleSystem.js.map +1 -1
- package/Particles/particleSystemSet.js.map +1 -1
- package/Physics/physicsHelper.js +4 -4
- package/Physics/physicsHelper.js.map +1 -1
- package/Physics/physicsRaycastResult.d.ts +3 -1
- package/Physics/physicsRaycastResult.js +10 -1
- package/Physics/physicsRaycastResult.js.map +1 -1
- package/Physics/v1/Plugins/ammoJSPlugin.js.map +1 -1
- package/Physics/v1/physicsImpostor.js.map +1 -1
- package/Physics/v2/IPhysicsEnginePlugin.d.ts +10 -0
- package/Physics/v2/IPhysicsEnginePlugin.js.map +1 -1
- package/Physics/v2/Plugins/havokPlugin.d.ts +3 -2
- package/Physics/v2/Plugins/havokPlugin.js +9 -6
- package/Physics/v2/Plugins/havokPlugin.js.map +1 -1
- package/PostProcesses/RenderPipeline/Pipelines/defaultRenderingPipeline.js.map +1 -1
- package/PostProcesses/RenderPipeline/Pipelines/ssao2RenderingPipeline.js.map +1 -1
- package/PostProcesses/RenderPipeline/Pipelines/ssaoRenderingPipeline.js.map +1 -1
- package/PostProcesses/RenderPipeline/Pipelines/ssrRenderingPipeline.js.map +1 -1
- package/PostProcesses/RenderPipeline/Pipelines/standardRenderingPipeline.js.map +1 -1
- package/PostProcesses/RenderPipeline/postProcessRenderPipeline.js.map +1 -1
- package/PostProcesses/blackAndWhitePostProcess.js.map +1 -1
- package/PostProcesses/bloomMergePostProcess.js.map +1 -1
- package/PostProcesses/blurPostProcess.js.map +1 -1
- package/PostProcesses/circleOfConfusionPostProcess.js.map +1 -1
- package/PostProcesses/colorCorrectionPostProcess.js.map +1 -1
- package/PostProcesses/convolutionPostProcess.js.map +1 -1
- package/PostProcesses/depthOfFieldBlurPostProcess.js.map +1 -1
- package/PostProcesses/extractHighlightsPostProcess.js.map +1 -1
- package/PostProcesses/filterPostProcess.js.map +1 -1
- package/PostProcesses/grainPostProcess.js.map +1 -1
- package/PostProcesses/imageProcessingPostProcess.js.map +1 -1
- package/PostProcesses/motionBlurPostProcess.js.map +1 -1
- package/PostProcesses/postProcess.js.map +1 -1
- package/PostProcesses/refractionPostProcess.js.map +1 -1
- package/PostProcesses/screenSpaceCurvaturePostProcess.js.map +1 -1
- package/PostProcesses/screenSpaceReflectionPostProcess.js.map +1 -1
- package/PostProcesses/sharpenPostProcess.js.map +1 -1
- package/PostProcesses/volumetricLightScatteringPostProcess.js.map +1 -1
- package/Probes/reflectionProbe.js.map +1 -1
- package/Rendering/depthPeelingRenderer.js.map +1 -1
- package/Rendering/depthRenderer.js.map +1 -1
- package/Rendering/geometryBufferRenderer.js.map +1 -1
- package/Rendering/outlineRenderer.js.map +1 -1
- package/Rendering/prePassRenderer.js.map +1 -1
- package/Rendering/renderingGroup.js.map +1 -1
- package/Rendering/renderingManager.js.map +1 -1
- package/Rendering/subSurfaceConfiguration.js.map +1 -1
- package/Rendering/utilityLayerRenderer.js.map +1 -1
- package/Shaders/ShadersInclude/pbrBlockAlbedoOpacity.js +4 -2
- package/Shaders/ShadersInclude/pbrBlockAlbedoOpacity.js.map +1 -1
- package/Shaders/ShadersInclude/pbrDebug.js +3 -1
- package/Shaders/ShadersInclude/pbrDebug.js.map +1 -1
- package/Sprites/spriteManager.js.map +1 -1
- package/XR/features/WebXRAnchorSystem.js.map +1 -1
- package/XR/features/WebXRBackgroundRemover.js.map +1 -1
- package/XR/features/WebXRControllerMovement.js.map +1 -1
- package/XR/features/WebXRControllerPhysics.js +4 -13
- package/XR/features/WebXRControllerPhysics.js.map +1 -1
- package/XR/features/WebXRControllerPointerSelection.js.map +1 -1
- package/XR/features/WebXRControllerTeleportation.js.map +1 -1
- package/XR/features/WebXRDOMOverlay.js.map +1 -1
- package/XR/features/WebXRDepthSensing.js.map +1 -1
- package/XR/features/WebXREyeTracking.js.map +1 -1
- package/XR/features/WebXRFeaturePointSystem.js.map +1 -1
- package/XR/features/WebXRHandTracking.js +2 -8
- package/XR/features/WebXRHandTracking.js.map +1 -1
- package/XR/features/WebXRHitTest.js.map +1 -1
- package/XR/features/WebXRHitTestLegacy.js.map +1 -1
- package/XR/features/WebXRImageTracking.js.map +1 -1
- package/XR/features/WebXRLayers.js +2 -2
- package/XR/features/WebXRLayers.js.map +1 -1
- package/XR/features/WebXRLightEstimation.js.map +1 -1
- package/XR/features/WebXRMeshDetector.js.map +1 -1
- package/XR/features/WebXRNearInteraction.js.map +1 -1
- package/XR/features/WebXRPlaneDetector.js.map +1 -1
- package/XR/features/WebXRSpaceWarp.js.map +1 -1
- package/XR/motionController/webXRAbstractMotionController.js +1 -4
- package/XR/motionController/webXRAbstractMotionController.js.map +1 -1
- package/XR/motionController/webXRControllerComponent.js.map +1 -1
- package/XR/motionController/webXRGenericMotionController.js.map +1 -1
- package/XR/motionController/webXRHTCViveMotionController.js.map +1 -1
- package/XR/motionController/webXRMicrosoftMixedRealityController.js.map +1 -1
- package/XR/motionController/webXROculusTouchMotionController.js.map +1 -1
- package/XR/webXRCamera.js.map +1 -1
- package/XR/webXRDefaultExperience.js +6 -28
- package/XR/webXRDefaultExperience.js.map +1 -1
- package/XR/webXRFeaturesManager.js +1 -4
- package/XR/webXRFeaturesManager.js.map +1 -1
- package/XR/webXRInput.js +1 -6
- package/XR/webXRInput.js.map +1 -1
- package/abstractScene.js.map +1 -1
- package/assetContainer.js +1 -4
- package/assetContainer.js.map +1 -1
- package/node.js.map +1 -1
- package/package.json +2 -4
- package/scene.js +4 -10
- package/scene.js.map +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"boundingSphere.js","sourceRoot":"","sources":["../../../../lts/core/generated/Culling/boundingSphere.ts"],"names":[],"mappings":"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","sourcesContent":["import type { DeepImmutable } from \"../types\";\r\nimport { ArrayTools } from \"../Misc/arrayTools\";\r\nimport { Matrix, Vector3 } from \"../Maths/math.vector\";\r\nimport type { Plane } from \"../Maths/math.plane\";\r\n\r\n/**\r\n * Class used to store bounding sphere information\r\n */\r\nexport class BoundingSphere {\r\n /**\r\n * Gets the center of the bounding sphere in local space\r\n */\r\n public readonly center = Vector3.Zero();\r\n /**\r\n * Radius of the bounding sphere in local space\r\n */\r\n public radius: number;\r\n /**\r\n * Gets the center of the bounding sphere in world space\r\n */\r\n public readonly centerWorld = Vector3.Zero();\r\n /**\r\n * Radius of the bounding sphere in world space\r\n */\r\n public radiusWorld: number;\r\n /**\r\n * Gets the minimum vector in local space\r\n */\r\n public readonly minimum = Vector3.Zero();\r\n /**\r\n * Gets the maximum vector in local space\r\n */\r\n public readonly maximum = Vector3.Zero();\r\n\r\n private _worldMatrix: DeepImmutable<Matrix>;\r\n private static readonly _TmpVector3 = ArrayTools.BuildArray(3, Vector3.Zero);\r\n\r\n /**\r\n * Creates a new bounding sphere\r\n * @param min defines the minimum vector (in local space)\r\n * @param max defines the maximum vector (in local space)\r\n * @param worldMatrix defines the new world matrix\r\n */\r\n constructor(min: DeepImmutable<Vector3>, max: DeepImmutable<Vector3>, worldMatrix?: DeepImmutable<Matrix>) {\r\n this.reConstruct(min, max, worldMatrix);\r\n }\r\n\r\n /**\r\n * Recreates the entire bounding sphere from scratch as if we call the constructor in place\r\n * @param min defines the new minimum vector (in local space)\r\n * @param max defines the new maximum vector (in local space)\r\n * @param worldMatrix defines the new world matrix\r\n */\r\n public reConstruct(min: DeepImmutable<Vector3>, max: DeepImmutable<Vector3>, worldMatrix?: DeepImmutable<Matrix>) {\r\n this.minimum.copyFrom(min);\r\n this.maximum.copyFrom(max);\r\n\r\n const distance = Vector3.Distance(min, max);\r\n\r\n max.addToRef(min, this.center).scaleInPlace(0.5);\r\n this.radius = distance * 0.5;\r\n\r\n this._update(worldMatrix || Matrix.IdentityReadOnly);\r\n }\r\n\r\n /**\r\n * Scale the current bounding sphere by applying a scale factor\r\n * @param factor defines the scale factor to apply\r\n * @returns the current bounding box\r\n */\r\n public scale(factor: number): BoundingSphere {\r\n const newRadius = this.radius * factor;\r\n const tmpVectors = BoundingSphere._TmpVector3;\r\n const tempRadiusVector = tmpVectors[0].setAll(newRadius);\r\n const min = this.center.subtractToRef(tempRadiusVector, tmpVectors[1]);\r\n const max = this.center.addToRef(tempRadiusVector, tmpVectors[2]);\r\n\r\n this.reConstruct(min, max, this._worldMatrix);\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Gets the world matrix of the bounding box\r\n * @returns a matrix\r\n */\r\n public getWorldMatrix(): DeepImmutable<Matrix> {\r\n return this._worldMatrix;\r\n }\r\n\r\n // Methods\r\n /**\r\n * @internal\r\n */\r\n public _update(worldMatrix: DeepImmutable<Matrix>): void {\r\n if (!worldMatrix.isIdentity()) {\r\n Vector3.TransformCoordinatesToRef(this.center, worldMatrix, this.centerWorld);\r\n const tempVector = BoundingSphere._TmpVector3[0];\r\n Vector3.TransformNormalFromFloatsToRef(1.0, 1.0, 1.0, worldMatrix, tempVector);\r\n this.radiusWorld = Math.max(Math.abs(tempVector.x), Math.abs(tempVector.y), Math.abs(tempVector.z)) * this.radius;\r\n } else {\r\n this.centerWorld.copyFrom(this.center);\r\n this.radiusWorld = this.radius;\r\n }\r\n }\r\n\r\n /**\r\n * Tests if the bounding sphere is intersecting the frustum planes\r\n * @param frustumPlanes defines the frustum planes to test\r\n * @returns true if there is an intersection\r\n */\r\n public isInFrustum(frustumPlanes: Array<DeepImmutable<Plane>>): boolean {\r\n const center = this.centerWorld;\r\n const radius = this.radiusWorld;\r\n for (let i = 0; i < 6; i++) {\r\n if (frustumPlanes[i].dotCoordinate(center) <= -radius) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n }\r\n\r\n /**\r\n * Tests if the bounding sphere center is in between the frustum planes.\r\n * Used for optimistic fast inclusion.\r\n * @param frustumPlanes defines the frustum planes to test\r\n * @returns true if the sphere center is in between the frustum planes\r\n */\r\n public isCenterInFrustum(frustumPlanes: Array<DeepImmutable<Plane>>): boolean {\r\n const center = this.centerWorld;\r\n for (let i = 0; i < 6; i++) {\r\n if (frustumPlanes[i].dotCoordinate(center) < 0) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n }\r\n\r\n /**\r\n * Tests if a point is inside the bounding sphere\r\n * @param point defines the point to test\r\n * @returns true if the point is inside the bounding sphere\r\n */\r\n public intersectsPoint(point: DeepImmutable<Vector3>): boolean {\r\n const squareDistance = Vector3.DistanceSquared(this.centerWorld, point);\r\n if (this.radiusWorld * this.radiusWorld < squareDistance) {\r\n return false;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n // Statics\r\n /**\r\n * Checks if two sphere intersect\r\n * @param sphere0 sphere 0\r\n * @param sphere1 sphere 1\r\n * @returns true if the spheres intersect\r\n */\r\n public static Intersects(sphere0: DeepImmutable<BoundingSphere>, sphere1: DeepImmutable<BoundingSphere>): boolean {\r\n const squareDistance = Vector3.DistanceSquared(sphere0.centerWorld, sphere1.centerWorld);\r\n const radiusSum = sphere0.radiusWorld + sphere1.radiusWorld;\r\n\r\n if (radiusSum * radiusSum < squareDistance) {\r\n return false;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n /**\r\n * Creates a sphere from a center and a radius\r\n * @param center The center\r\n * @param radius radius\r\n * @param matrix Optional worldMatrix\r\n * @returns The sphere\r\n */\r\n public static CreateFromCenterAndRadius(center: DeepImmutable<Vector3>, radius: number, matrix?: DeepImmutable<Matrix>): BoundingSphere {\r\n this._TmpVector3[0].copyFrom(center);\r\n this._TmpVector3[1].copyFromFloats(0, 0, radius);\r\n this._TmpVector3[2].copyFrom(center);\r\n this._TmpVector3[0].addInPlace(this._TmpVector3[1]);\r\n this._TmpVector3[2].subtractInPlace(this._TmpVector3[1]);\r\n\r\n const sphere = new BoundingSphere(this._TmpVector3[0], this._TmpVector3[2]);\r\n\r\n if (matrix) {\r\n sphere._worldMatrix = matrix;\r\n } else {\r\n sphere._worldMatrix = Matrix.Identity();\r\n }\r\n\r\n return sphere;\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"boundingSphere.js","sourceRoot":"","sources":["../../../../lts/core/generated/Culling/boundingSphere.ts"],"names":[],"mappings":"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","sourcesContent":["import type { DeepImmutable } from \"../types\";\r\nimport { ArrayTools } from \"../Misc/arrayTools\";\r\nimport { Matrix, Vector3 } from \"../Maths/math.vector\";\r\nimport type { Plane } from \"../Maths/math.plane\";\r\n\r\n/**\r\n * Class used to store bounding sphere information\r\n */\r\nexport class BoundingSphere {\r\n /**\r\n * Gets the center of the bounding sphere in local space\r\n */\r\n public readonly center = Vector3.Zero();\r\n /**\r\n * Radius of the bounding sphere in local space\r\n */\r\n public radius: number;\r\n /**\r\n * Gets the center of the bounding sphere in world space\r\n */\r\n public readonly centerWorld = Vector3.Zero();\r\n /**\r\n * Radius of the bounding sphere in world space\r\n */\r\n public radiusWorld: number;\r\n /**\r\n * Gets the minimum vector in local space\r\n */\r\n public readonly minimum = Vector3.Zero();\r\n /**\r\n * Gets the maximum vector in local space\r\n */\r\n public readonly maximum = Vector3.Zero();\r\n\r\n private _worldMatrix: DeepImmutable<Matrix>;\r\n private static readonly _TmpVector3 = ArrayTools.BuildArray(3, Vector3.Zero);\r\n\r\n /**\r\n * Creates a new bounding sphere\r\n * @param min defines the minimum vector (in local space)\r\n * @param max defines the maximum vector (in local space)\r\n * @param worldMatrix defines the new world matrix\r\n */\r\n constructor(min: DeepImmutable<Vector3>, max: DeepImmutable<Vector3>, worldMatrix?: DeepImmutable<Matrix>) {\r\n this.reConstruct(min, max, worldMatrix);\r\n }\r\n\r\n /**\r\n * Recreates the entire bounding sphere from scratch as if we call the constructor in place\r\n * @param min defines the new minimum vector (in local space)\r\n * @param max defines the new maximum vector (in local space)\r\n * @param worldMatrix defines the new world matrix\r\n */\r\n public reConstruct(min: DeepImmutable<Vector3>, max: DeepImmutable<Vector3>, worldMatrix?: DeepImmutable<Matrix>) {\r\n this.minimum.copyFrom(min);\r\n this.maximum.copyFrom(max);\r\n\r\n const distance = Vector3.Distance(min, max);\r\n\r\n max.addToRef(min, this.center).scaleInPlace(0.5);\r\n this.radius = distance * 0.5;\r\n\r\n this._update(worldMatrix || Matrix.IdentityReadOnly);\r\n }\r\n\r\n /**\r\n * Scale the current bounding sphere by applying a scale factor\r\n * @param factor defines the scale factor to apply\r\n * @returns the current bounding box\r\n */\r\n public scale(factor: number): BoundingSphere {\r\n const newRadius = this.radius * factor;\r\n const tmpVectors = BoundingSphere._TmpVector3;\r\n const tempRadiusVector = tmpVectors[0].setAll(newRadius);\r\n const min = this.center.subtractToRef(tempRadiusVector, tmpVectors[1]);\r\n const max = this.center.addToRef(tempRadiusVector, tmpVectors[2]);\r\n\r\n this.reConstruct(min, max, this._worldMatrix);\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Gets the world matrix of the bounding box\r\n * @returns a matrix\r\n */\r\n public getWorldMatrix(): DeepImmutable<Matrix> {\r\n return this._worldMatrix;\r\n }\r\n\r\n // Methods\r\n /**\r\n * @internal\r\n */\r\n public _update(worldMatrix: DeepImmutable<Matrix>): void {\r\n if (!worldMatrix.isIdentity()) {\r\n Vector3.TransformCoordinatesToRef(this.center, worldMatrix, this.centerWorld);\r\n const tempVector = BoundingSphere._TmpVector3[0];\r\n Vector3.TransformNormalFromFloatsToRef(1.0, 1.0, 1.0, worldMatrix, tempVector);\r\n this.radiusWorld = Math.max(Math.abs(tempVector.x), Math.abs(tempVector.y), Math.abs(tempVector.z)) * this.radius;\r\n } else {\r\n this.centerWorld.copyFrom(this.center);\r\n this.radiusWorld = this.radius;\r\n }\r\n }\r\n\r\n /**\r\n * Tests if the bounding sphere is intersecting the frustum planes\r\n * @param frustumPlanes defines the frustum planes to test\r\n * @returns true if there is an intersection\r\n */\r\n public isInFrustum(frustumPlanes: Array<DeepImmutable<Plane>>): boolean {\r\n const center = this.centerWorld;\r\n const radius = this.radiusWorld;\r\n for (let i = 0; i < 6; i++) {\r\n if (frustumPlanes[i].dotCoordinate(center) <= -radius) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n }\r\n\r\n /**\r\n * Tests if the bounding sphere center is in between the frustum planes.\r\n * Used for optimistic fast inclusion.\r\n * @param frustumPlanes defines the frustum planes to test\r\n * @returns true if the sphere center is in between the frustum planes\r\n */\r\n public isCenterInFrustum(frustumPlanes: Array<DeepImmutable<Plane>>): boolean {\r\n const center = this.centerWorld;\r\n for (let i = 0; i < 6; i++) {\r\n if (frustumPlanes[i].dotCoordinate(center) < 0) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n }\r\n\r\n /**\r\n * Tests if a point is inside the bounding sphere\r\n * @param point defines the point to test\r\n * @returns true if the point is inside the bounding sphere\r\n */\r\n public intersectsPoint(point: DeepImmutable<Vector3>): boolean {\r\n const squareDistance = Vector3.DistanceSquared(this.centerWorld, point);\r\n if (this.radiusWorld * this.radiusWorld < squareDistance) {\r\n return false;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n // Statics\r\n /**\r\n * Checks if two sphere intersect\r\n * @param sphere0 sphere 0\r\n * @param sphere1 sphere 1\r\n * @returns true if the spheres intersect\r\n */\r\n public static Intersects(sphere0: DeepImmutable<BoundingSphere>, sphere1: DeepImmutable<BoundingSphere>): boolean {\r\n const squareDistance = Vector3.DistanceSquared(sphere0.centerWorld, sphere1.centerWorld);\r\n const radiusSum = sphere0.radiusWorld + sphere1.radiusWorld;\r\n\r\n if (radiusSum * radiusSum < squareDistance) {\r\n return false;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n /**\r\n * Creates a sphere from a center and a radius\r\n * @param center The center\r\n * @param radius radius\r\n * @param matrix Optional worldMatrix\r\n * @returns The sphere\r\n */\r\n public static CreateFromCenterAndRadius(center: DeepImmutable<Vector3>, radius: number, matrix?: DeepImmutable<Matrix>): BoundingSphere {\r\n this._TmpVector3[0].copyFrom(center);\r\n this._TmpVector3[1].copyFromFloats(0, 0, radius);\r\n this._TmpVector3[2].copyFrom(center);\r\n this._TmpVector3[0].addInPlace(this._TmpVector3[1]);\r\n this._TmpVector3[2].subtractInPlace(this._TmpVector3[1]);\r\n\r\n const sphere = new BoundingSphere(this._TmpVector3[0], this._TmpVector3[2]);\r\n\r\n if (matrix) {\r\n sphere._worldMatrix = matrix;\r\n } else {\r\n sphere._worldMatrix = Matrix.Identity();\r\n }\r\n\r\n return sphere;\r\n }\r\n}\r\n"]}
|
package/Debug/debugLayer.js
CHANGED
|
@@ -112,15 +112,7 @@ export class DebugLayer {
|
|
|
112
112
|
this._onSelectionChangedObservable.clear();
|
|
113
113
|
this._onSelectionChangedObservable = undefined;
|
|
114
114
|
}
|
|
115
|
-
const userOptions = {
|
|
116
|
-
overlay: false,
|
|
117
|
-
showExplorer: true,
|
|
118
|
-
showInspector: true,
|
|
119
|
-
embedMode: false,
|
|
120
|
-
handleResize: true,
|
|
121
|
-
enablePopup: true,
|
|
122
|
-
...config,
|
|
123
|
-
};
|
|
115
|
+
const userOptions = Object.assign({ overlay: false, showExplorer: true, showInspector: true, embedMode: false, handleResize: true, enablePopup: true }, config);
|
|
124
116
|
this.BJSINSPECTOR = this.BJSINSPECTOR || this._getGlobalInspector();
|
|
125
117
|
this.BJSINSPECTOR.Inspector.Show(this._scene, userOptions);
|
|
126
118
|
}
|
package/Debug/debugLayer.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"debugLayer.js","sourceRoot":"","sources":["../../../../lts/core/generated/Debug/debugLayer.ts"],"names":[],"mappings":"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","sourcesContent":["import { Tools } from \"../Misc/tools\";\r\nimport { Observable } from \"../Misc/observable\";\r\nimport { Scene } from \"../scene\";\r\nimport { Engine } from \"../Engines/engine\";\r\nimport { EngineStore } from \"../Engines/engineStore\";\r\nimport type { IInspectable } from \"../Misc/iInspectable\";\r\nimport type { Camera } from \"../Cameras/camera\";\r\n\r\n// declare INSPECTOR namespace for compilation issue\r\ndeclare let INSPECTOR: any;\r\ndeclare let BABYLON: any;\r\n// load the inspector using require, if not present in the global namespace.\r\n\r\n/**\r\n * Interface used to define scene explorer extensibility option\r\n */\r\nexport interface IExplorerExtensibilityOption {\r\n /**\r\n * Define the option label\r\n */\r\n label: string;\r\n /**\r\n * Defines the action to execute on click\r\n */\r\n action: (entity: any) => void;\r\n /**\r\n * Keep popup open after click\r\n */\r\n keepOpenAfterClick?: boolean;\r\n}\r\n\r\n/**\r\n * Defines a group of actions associated with a predicate to use when extending the Inspector scene explorer\r\n */\r\nexport interface IExplorerExtensibilityGroup {\r\n /**\r\n * Defines a predicate to test if a given type mut be extended\r\n */\r\n predicate: (entity: any) => boolean;\r\n /**\r\n * Gets the list of options added to a type\r\n */\r\n entries: IExplorerExtensibilityOption[];\r\n}\r\n\r\n/**\r\n * Defines a new node that will be displayed as top level node in the explorer\r\n */\r\nexport interface IExplorerAdditionalChild {\r\n /**\r\n * Gets the name of the additional node\r\n */\r\n name: string;\r\n /**\r\n * Function used to return the class name of the child node\r\n */\r\n getClassName(): string;\r\n /**\r\n * List of inspectable custom properties (used by the Inspector)\r\n * @see https://doc.babylonjs.com/toolsAndResources/inspector#extensibility\r\n */\r\n inspectableCustomProperties: IInspectable[];\r\n}\r\n\r\n/**\r\n * Defines a new node that will be displayed as top level node in the explorer\r\n */\r\nexport interface IExplorerAdditionalNode {\r\n /**\r\n * Gets the name of the additional node\r\n */\r\n name: string;\r\n /**\r\n * Function used to return the list of child entries\r\n */\r\n getContent(): IExplorerAdditionalChild[];\r\n}\r\n\r\nexport type IInspectorContextMenuType = \"pipeline\" | \"node\" | \"materials\" | \"spriteManagers\" | \"particleSystems\";\r\n\r\n/**\r\n * Context menu item\r\n */\r\nexport interface IInspectorContextMenuItem {\r\n /**\r\n * Display label - menu item\r\n */\r\n label: string;\r\n /**\r\n * Callback function that will be called when the menu item is selected\r\n * @param entity the entity that is currently selected in the scene explorer\r\n */\r\n action: (entity?: unknown) => void;\r\n}\r\n\r\n/**\r\n * Interface used to define the options to use to create the Inspector\r\n */\r\nexport interface IInspectorOptions {\r\n /**\r\n * Display in overlay mode (default: false)\r\n */\r\n overlay?: boolean;\r\n /**\r\n * HTML element to use as root (the parent of the rendering canvas will be used as default value)\r\n */\r\n globalRoot?: HTMLElement;\r\n /**\r\n * Display the Scene explorer\r\n */\r\n showExplorer?: boolean;\r\n /**\r\n * Display the property inspector\r\n */\r\n showInspector?: boolean;\r\n /**\r\n * Display in embed mode (both panes on the right)\r\n */\r\n embedMode?: boolean;\r\n /**\r\n * let the Inspector handles resize of the canvas when panes are resized (default to true)\r\n */\r\n handleResize?: boolean;\r\n /**\r\n * Allow the panes to popup (default: true)\r\n */\r\n enablePopup?: boolean;\r\n /**\r\n * Allow the panes to be closed by users (default: true)\r\n */\r\n enableClose?: boolean;\r\n /**\r\n * Optional list of extensibility entries\r\n */\r\n explorerExtensibility?: IExplorerExtensibilityGroup[];\r\n /**\r\n * Optional list of additional top level nodes\r\n */\r\n additionalNodes?: IExplorerAdditionalNode[];\r\n /**\r\n * Optional URL to get the inspector script from (by default it uses the babylonjs CDN).\r\n */\r\n inspectorURL?: string;\r\n /**\r\n * Optional initial tab (default to DebugLayerTab.Properties)\r\n */\r\n initialTab?: DebugLayerTab;\r\n /**\r\n * Optional camera to use to render the gizmos from the inspector (default to the scene.activeCamera or the latest from scene.activeCameras)\r\n */\r\n gizmoCamera?: Camera;\r\n /**\r\n * Context menu for inspector tools such as \"Post Process\", \"Nodes\", \"Materials\", etc.\r\n */\r\n contextMenu?: Partial<Record<IInspectorContextMenuType, IInspectorContextMenuItem[]>>;\r\n /**\r\n * List of context menu items that should be completely overridden by custom items from the contextMenu property.\r\n */\r\n contextMenuOverride?: IInspectorContextMenuType[];\r\n}\r\n\r\ndeclare module \"../scene\" {\r\n export interface Scene {\r\n /**\r\n * @internal\r\n * Backing field\r\n */\r\n _debugLayer: DebugLayer;\r\n\r\n /**\r\n * Gets the debug layer (aka Inspector) associated with the scene\r\n * @see https://doc.babylonjs.com/toolsAndResources/inspector\r\n */\r\n debugLayer: DebugLayer;\r\n }\r\n}\r\nObject.defineProperty(Scene.prototype, \"debugLayer\", {\r\n get: function (this: Scene) {\r\n if (!this._debugLayer) {\r\n this._debugLayer = new DebugLayer(this);\r\n }\r\n return this._debugLayer;\r\n },\r\n enumerable: true,\r\n configurable: true,\r\n});\r\n\r\n/**\r\n * Enum of inspector action tab\r\n */\r\nexport enum DebugLayerTab {\r\n /**\r\n * Properties tag (default)\r\n */\r\n Properties = 0,\r\n /**\r\n * Debug tab\r\n */\r\n Debug = 1,\r\n /**\r\n * Statistics tab\r\n */\r\n Statistics = 2,\r\n /**\r\n * Tools tab\r\n */\r\n Tools = 3,\r\n /**\r\n * Settings tab\r\n */\r\n Settings = 4,\r\n}\r\n\r\n/**\r\n * The debug layer (aka Inspector) is the go to tool in order to better understand\r\n * what is happening in your scene\r\n * @see https://doc.babylonjs.com/toolsAndResources/inspector\r\n */\r\nexport class DebugLayer {\r\n /**\r\n * Define the url to get the inspector script from.\r\n * By default it uses the babylonjs CDN.\r\n * @ignoreNaming\r\n */\r\n public static InspectorURL = `https://unpkg.com/babylonjs-inspector@${Engine.Version}/babylon.inspector.bundle.js`;\r\n\r\n private _scene: Scene;\r\n\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n private BJSINSPECTOR = this._getGlobalInspector();\r\n\r\n private _onPropertyChangedObservable?: Observable<{ object: any; property: string; value: any; initialValue: any }>;\r\n /**\r\n * Observable triggered when a property is changed through the inspector.\r\n */\r\n public get onPropertyChangedObservable() {\r\n if (this.BJSINSPECTOR && this.BJSINSPECTOR.Inspector) {\r\n return this.BJSINSPECTOR.Inspector.OnPropertyChangedObservable;\r\n }\r\n\r\n if (!this._onPropertyChangedObservable) {\r\n this._onPropertyChangedObservable = new Observable<{ object: any; property: string; value: any; initialValue: any }>();\r\n }\r\n\r\n return this._onPropertyChangedObservable;\r\n }\r\n\r\n private _onSelectionChangedObservable?: Observable<any>;\r\n /**\r\n * Observable triggered when the selection is changed through the inspector.\r\n */\r\n public get onSelectionChangedObservable() {\r\n if (this.BJSINSPECTOR && this.BJSINSPECTOR.Inspector) {\r\n return this.BJSINSPECTOR.Inspector.OnSelectionChangeObservable;\r\n }\r\n\r\n if (!this._onSelectionChangedObservable) {\r\n this._onSelectionChangedObservable = new Observable<any>();\r\n }\r\n\r\n return this._onSelectionChangedObservable;\r\n }\r\n\r\n /**\r\n * Instantiates a new debug layer.\r\n * The debug layer (aka Inspector) is the go to tool in order to better understand\r\n * what is happening in your scene\r\n * @see https://doc.babylonjs.com/toolsAndResources/inspector\r\n * @param scene Defines the scene to inspect\r\n */\r\n constructor(scene?: Scene) {\r\n this._scene = scene || <Scene>EngineStore.LastCreatedScene;\r\n if (!this._scene) {\r\n return;\r\n }\r\n this._scene.onDisposeObservable.add(() => {\r\n // Debug layer\r\n if (this._scene._debugLayer) {\r\n this._scene._debugLayer.hide();\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Creates the inspector window.\r\n * @param config\r\n */\r\n private _createInspector(config?: Partial<IInspectorOptions>) {\r\n if (this.isVisible()) {\r\n return;\r\n }\r\n\r\n if (this._onPropertyChangedObservable) {\r\n for (const observer of this._onPropertyChangedObservable!.observers) {\r\n this.BJSINSPECTOR.Inspector.OnPropertyChangedObservable.add(observer);\r\n }\r\n this._onPropertyChangedObservable.clear();\r\n this._onPropertyChangedObservable = undefined;\r\n }\r\n\r\n if (this._onSelectionChangedObservable) {\r\n for (const observer of this._onSelectionChangedObservable!.observers) {\r\n this.BJSINSPECTOR.Inspector.OnSelectionChangedObservable.add(observer);\r\n }\r\n this._onSelectionChangedObservable.clear();\r\n this._onSelectionChangedObservable = undefined;\r\n }\r\n\r\n const userOptions: IInspectorOptions = {\r\n overlay: false,\r\n showExplorer: true,\r\n showInspector: true,\r\n embedMode: false,\r\n handleResize: true,\r\n enablePopup: true,\r\n ...config,\r\n };\r\n\r\n this.BJSINSPECTOR = this.BJSINSPECTOR || this._getGlobalInspector();\r\n\r\n this.BJSINSPECTOR.Inspector.Show(this._scene, userOptions);\r\n }\r\n\r\n /**\r\n * Select a specific entity in the scene explorer and highlight a specific block in that entity property grid\r\n * @param entity defines the entity to select\r\n * @param lineContainerTitles defines the specific blocks to highlight (could be a string or an array of strings)\r\n */\r\n public select(entity: any, lineContainerTitles?: string | string[]) {\r\n if (this.BJSINSPECTOR) {\r\n if (lineContainerTitles) {\r\n if (Object.prototype.toString.call(lineContainerTitles) == \"[object String]\") {\r\n this.BJSINSPECTOR.Inspector.MarkLineContainerTitleForHighlighting(lineContainerTitles);\r\n } else {\r\n this.BJSINSPECTOR.Inspector.MarkMultipleLineContainerTitlesForHighlighting(lineContainerTitles);\r\n }\r\n }\r\n this.BJSINSPECTOR.Inspector.OnSelectionChangeObservable.notifyObservers(entity);\r\n }\r\n }\r\n\r\n /** Get the inspector from bundle or global */\r\n private _getGlobalInspector(): any {\r\n // UMD Global name detection from Webpack Bundle UMD Name.\r\n if (typeof INSPECTOR !== \"undefined\") {\r\n return INSPECTOR;\r\n }\r\n\r\n // In case of module let s check the global emitted from the Inspector entry point.\r\n if (typeof BABYLON !== \"undefined\" && typeof BABYLON.Inspector !== \"undefined\") {\r\n return BABYLON;\r\n }\r\n\r\n return undefined;\r\n }\r\n\r\n /**\r\n * Get if the inspector is visible or not.\r\n * @returns true if visible otherwise, false\r\n */\r\n public isVisible(): boolean {\r\n return this.BJSINSPECTOR && this.BJSINSPECTOR.Inspector.IsVisible;\r\n }\r\n\r\n /**\r\n * Hide the inspector and close its window.\r\n */\r\n public hide() {\r\n if (this.BJSINSPECTOR) {\r\n this.BJSINSPECTOR.Inspector.Hide();\r\n }\r\n }\r\n\r\n /**\r\n * Update the scene in the inspector\r\n */\r\n public setAsActiveScene() {\r\n if (this.BJSINSPECTOR) {\r\n this.BJSINSPECTOR.Inspector._SetNewScene(this._scene);\r\n }\r\n }\r\n\r\n /**\r\n * Launch the debugLayer.\r\n * @param config Define the configuration of the inspector\r\n * @returns a promise fulfilled when the debug layer is visible\r\n */\r\n public show(config?: IInspectorOptions): Promise<DebugLayer> {\r\n return new Promise((resolve) => {\r\n if (typeof this.BJSINSPECTOR == \"undefined\") {\r\n const inspectorUrl = config && config.inspectorURL ? config.inspectorURL : DebugLayer.InspectorURL;\r\n\r\n // Load inspector and add it to the DOM\r\n Tools.LoadScript(inspectorUrl, () => {\r\n this._createInspector(config);\r\n resolve(this);\r\n });\r\n } else {\r\n // Otherwise creates the inspector\r\n this._createInspector(config);\r\n resolve(this);\r\n }\r\n });\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"debugLayer.js","sourceRoot":"","sources":["../../../../lts/core/generated/Debug/debugLayer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACtC,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AACjC,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AA4KrD,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,SAAS,EAAE,YAAY,EAAE;IACjD,GAAG,EAAE;QACD,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;YACnB,IAAI,CAAC,WAAW,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC;SAC3C;QACD,OAAO,IAAI,CAAC,WAAW,CAAC;IAC5B,CAAC;IACD,UAAU,EAAE,IAAI;IAChB,YAAY,EAAE,IAAI;CACrB,CAAC,CAAC;AAEH;;GAEG;AACH,MAAM,CAAN,IAAY,aAqBX;AArBD,WAAY,aAAa;IACrB;;OAEG;IACH,6DAAc,CAAA;IACd;;OAEG;IACH,mDAAS,CAAA;IACT;;OAEG;IACH,6DAAc,CAAA;IACd;;OAEG;IACH,mDAAS,CAAA;IACT;;OAEG;IACH,yDAAY,CAAA;AAChB,CAAC,EArBW,aAAa,KAAb,aAAa,QAqBxB;AAED;;;;GAIG;AACH,MAAM,OAAO,UAAU;IAcnB;;OAEG;IACH,IAAW,2BAA2B;QAClC,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE;YAClD,OAAO,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,2BAA2B,CAAC;SAClE;QAED,IAAI,CAAC,IAAI,CAAC,4BAA4B,EAAE;YACpC,IAAI,CAAC,4BAA4B,GAAG,IAAI,UAAU,EAAoE,CAAC;SAC1H;QAED,OAAO,IAAI,CAAC,4BAA4B,CAAC;IAC7C,CAAC;IAGD;;OAEG;IACH,IAAW,4BAA4B;QACnC,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE;YAClD,OAAO,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,2BAA2B,CAAC;SAClE;QAED,IAAI,CAAC,IAAI,CAAC,6BAA6B,EAAE;YACrC,IAAI,CAAC,6BAA6B,GAAG,IAAI,UAAU,EAAO,CAAC;SAC9D;QAED,OAAO,IAAI,CAAC,6BAA6B,CAAC;IAC9C,CAAC;IAED;;;;;;OAMG;IACH,YAAY,KAAa;QA1CzB,gEAAgE;QACxD,iBAAY,GAAG,IAAI,CAAC,mBAAmB,EAAE,CAAC;QA0C9C,IAAI,CAAC,MAAM,GAAG,KAAK,IAAW,WAAW,CAAC,gBAAgB,CAAC;QAC3D,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;YACd,OAAO;SACV;QACD,IAAI,CAAC,MAAM,CAAC,mBAAmB,CAAC,GAAG,CAAC,GAAG,EAAE;YACrC,cAAc;YACd,IAAI,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE;gBACzB,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;aAClC;QACL,CAAC,CAAC,CAAC;IACP,CAAC;IAED;;;OAGG;IACK,gBAAgB,CAAC,MAAmC;QACxD,IAAI,IAAI,CAAC,SAAS,EAAE,EAAE;YAClB,OAAO;SACV;QAED,IAAI,IAAI,CAAC,4BAA4B,EAAE;YACnC,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,4BAA6B,CAAC,SAAS,EAAE;gBACjE,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,2BAA2B,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;aACzE;YACD,IAAI,CAAC,4BAA4B,CAAC,KAAK,EAAE,CAAC;YAC1C,IAAI,CAAC,4BAA4B,GAAG,SAAS,CAAC;SACjD;QAED,IAAI,IAAI,CAAC,6BAA6B,EAAE;YACpC,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,6BAA8B,CAAC,SAAS,EAAE;gBAClE,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,4BAA4B,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;aAC1E;YACD,IAAI,CAAC,6BAA6B,CAAC,KAAK,EAAE,CAAC;YAC3C,IAAI,CAAC,6BAA6B,GAAG,SAAS,CAAC;SAClD;QAED,MAAM,WAAW,mBACb,OAAO,EAAE,KAAK,EACd,YAAY,EAAE,IAAI,EAClB,aAAa,EAAE,IAAI,EACnB,SAAS,EAAE,KAAK,EAChB,YAAY,EAAE,IAAI,EAClB,WAAW,EAAE,IAAI,IACd,MAAM,CACZ,CAAC;QAEF,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAEpE,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IAC/D,CAAC;IAED;;;;OAIG;IACI,MAAM,CAAC,MAAW,EAAE,mBAAuC;QAC9D,IAAI,IAAI,CAAC,YAAY,EAAE;YACnB,IAAI,mBAAmB,EAAE;gBACrB,IAAI,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,mBAAmB,CAAC,IAAI,iBAAiB,EAAE;oBAC1E,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,qCAAqC,CAAC,mBAAmB,CAAC,CAAC;iBAC1F;qBAAM;oBACH,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,8CAA8C,CAAC,mBAAmB,CAAC,CAAC;iBACnG;aACJ;YACD,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,2BAA2B,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;SACnF;IACL,CAAC;IAED,8CAA8C;IACtC,mBAAmB;QACvB,0DAA0D;QAC1D,IAAI,OAAO,SAAS,KAAK,WAAW,EAAE;YAClC,OAAO,SAAS,CAAC;SACpB;QAED,mFAAmF;QACnF,IAAI,OAAO,OAAO,KAAK,WAAW,IAAI,OAAO,OAAO,CAAC,SAAS,KAAK,WAAW,EAAE;YAC5E,OAAO,OAAO,CAAC;SAClB;QAED,OAAO,SAAS,CAAC;IACrB,CAAC;IAED;;;OAGG;IACI,SAAS;QACZ,OAAO,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,SAAS,CAAC;IACtE,CAAC;IAED;;OAEG;IACI,IAAI;QACP,IAAI,IAAI,CAAC,YAAY,EAAE;YACnB,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;SACtC;IACL,CAAC;IAED;;OAEG;IACI,gBAAgB;QACnB,IAAI,IAAI,CAAC,YAAY,EAAE;YACnB,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;SACzD;IACL,CAAC;IAED;;;;OAIG;IACI,IAAI,CAAC,MAA0B;QAClC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YAC3B,IAAI,OAAO,IAAI,CAAC,YAAY,IAAI,WAAW,EAAE;gBACzC,MAAM,YAAY,GAAG,MAAM,IAAI,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,UAAU,CAAC,YAAY,CAAC;gBAEnG,uCAAuC;gBACvC,KAAK,CAAC,UAAU,CAAC,YAAY,EAAE,GAAG,EAAE;oBAChC,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;oBAC9B,OAAO,CAAC,IAAI,CAAC,CAAC;gBAClB,CAAC,CAAC,CAAC;aACN;iBAAM;gBACH,kCAAkC;gBAClC,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;gBAC9B,OAAO,CAAC,IAAI,CAAC,CAAC;aACjB;QACL,CAAC,CAAC,CAAC;IACP,CAAC;;AAxLD;;;;GAIG;AACW,uBAAY,GAAG,yCAAyC,MAAM,CAAC,OAAO,8BAA8B,AAAxF,CAAyF","sourcesContent":["import { Tools } from \"../Misc/tools\";\r\nimport { Observable } from \"../Misc/observable\";\r\nimport { Scene } from \"../scene\";\r\nimport { Engine } from \"../Engines/engine\";\r\nimport { EngineStore } from \"../Engines/engineStore\";\r\nimport type { IInspectable } from \"../Misc/iInspectable\";\r\nimport type { Camera } from \"../Cameras/camera\";\r\n\r\n// declare INSPECTOR namespace for compilation issue\r\ndeclare let INSPECTOR: any;\r\ndeclare let BABYLON: any;\r\n// load the inspector using require, if not present in the global namespace.\r\n\r\n/**\r\n * Interface used to define scene explorer extensibility option\r\n */\r\nexport interface IExplorerExtensibilityOption {\r\n /**\r\n * Define the option label\r\n */\r\n label: string;\r\n /**\r\n * Defines the action to execute on click\r\n */\r\n action: (entity: any) => void;\r\n /**\r\n * Keep popup open after click\r\n */\r\n keepOpenAfterClick?: boolean;\r\n}\r\n\r\n/**\r\n * Defines a group of actions associated with a predicate to use when extending the Inspector scene explorer\r\n */\r\nexport interface IExplorerExtensibilityGroup {\r\n /**\r\n * Defines a predicate to test if a given type mut be extended\r\n */\r\n predicate: (entity: any) => boolean;\r\n /**\r\n * Gets the list of options added to a type\r\n */\r\n entries: IExplorerExtensibilityOption[];\r\n}\r\n\r\n/**\r\n * Defines a new node that will be displayed as top level node in the explorer\r\n */\r\nexport interface IExplorerAdditionalChild {\r\n /**\r\n * Gets the name of the additional node\r\n */\r\n name: string;\r\n /**\r\n * Function used to return the class name of the child node\r\n */\r\n getClassName(): string;\r\n /**\r\n * List of inspectable custom properties (used by the Inspector)\r\n * @see https://doc.babylonjs.com/toolsAndResources/inspector#extensibility\r\n */\r\n inspectableCustomProperties: IInspectable[];\r\n}\r\n\r\n/**\r\n * Defines a new node that will be displayed as top level node in the explorer\r\n */\r\nexport interface IExplorerAdditionalNode {\r\n /**\r\n * Gets the name of the additional node\r\n */\r\n name: string;\r\n /**\r\n * Function used to return the list of child entries\r\n */\r\n getContent(): IExplorerAdditionalChild[];\r\n}\r\n\r\nexport type IInspectorContextMenuType = \"pipeline\" | \"node\" | \"materials\" | \"spriteManagers\" | \"particleSystems\";\r\n\r\n/**\r\n * Context menu item\r\n */\r\nexport interface IInspectorContextMenuItem {\r\n /**\r\n * Display label - menu item\r\n */\r\n label: string;\r\n /**\r\n * Callback function that will be called when the menu item is selected\r\n * @param entity the entity that is currently selected in the scene explorer\r\n */\r\n action: (entity?: unknown) => void;\r\n}\r\n\r\n/**\r\n * Interface used to define the options to use to create the Inspector\r\n */\r\nexport interface IInspectorOptions {\r\n /**\r\n * Display in overlay mode (default: false)\r\n */\r\n overlay?: boolean;\r\n /**\r\n * HTML element to use as root (the parent of the rendering canvas will be used as default value)\r\n */\r\n globalRoot?: HTMLElement;\r\n /**\r\n * Display the Scene explorer\r\n */\r\n showExplorer?: boolean;\r\n /**\r\n * Display the property inspector\r\n */\r\n showInspector?: boolean;\r\n /**\r\n * Display in embed mode (both panes on the right)\r\n */\r\n embedMode?: boolean;\r\n /**\r\n * let the Inspector handles resize of the canvas when panes are resized (default to true)\r\n */\r\n handleResize?: boolean;\r\n /**\r\n * Allow the panes to popup (default: true)\r\n */\r\n enablePopup?: boolean;\r\n /**\r\n * Allow the panes to be closed by users (default: true)\r\n */\r\n enableClose?: boolean;\r\n /**\r\n * Optional list of extensibility entries\r\n */\r\n explorerExtensibility?: IExplorerExtensibilityGroup[];\r\n /**\r\n * Optional list of additional top level nodes\r\n */\r\n additionalNodes?: IExplorerAdditionalNode[];\r\n /**\r\n * Optional URL to get the inspector script from (by default it uses the babylonjs CDN).\r\n */\r\n inspectorURL?: string;\r\n /**\r\n * Optional initial tab (default to DebugLayerTab.Properties)\r\n */\r\n initialTab?: DebugLayerTab;\r\n /**\r\n * Optional camera to use to render the gizmos from the inspector (default to the scene.activeCamera or the latest from scene.activeCameras)\r\n */\r\n gizmoCamera?: Camera;\r\n /**\r\n * Context menu for inspector tools such as \"Post Process\", \"Nodes\", \"Materials\", etc.\r\n */\r\n contextMenu?: Partial<Record<IInspectorContextMenuType, IInspectorContextMenuItem[]>>;\r\n /**\r\n * List of context menu items that should be completely overridden by custom items from the contextMenu property.\r\n */\r\n contextMenuOverride?: IInspectorContextMenuType[];\r\n}\r\n\r\ndeclare module \"../scene\" {\r\n export interface Scene {\r\n /**\r\n * @internal\r\n * Backing field\r\n */\r\n _debugLayer: DebugLayer;\r\n\r\n /**\r\n * Gets the debug layer (aka Inspector) associated with the scene\r\n * @see https://doc.babylonjs.com/toolsAndResources/inspector\r\n */\r\n debugLayer: DebugLayer;\r\n }\r\n}\r\nObject.defineProperty(Scene.prototype, \"debugLayer\", {\r\n get: function (this: Scene) {\r\n if (!this._debugLayer) {\r\n this._debugLayer = new DebugLayer(this);\r\n }\r\n return this._debugLayer;\r\n },\r\n enumerable: true,\r\n configurable: true,\r\n});\r\n\r\n/**\r\n * Enum of inspector action tab\r\n */\r\nexport enum DebugLayerTab {\r\n /**\r\n * Properties tag (default)\r\n */\r\n Properties = 0,\r\n /**\r\n * Debug tab\r\n */\r\n Debug = 1,\r\n /**\r\n * Statistics tab\r\n */\r\n Statistics = 2,\r\n /**\r\n * Tools tab\r\n */\r\n Tools = 3,\r\n /**\r\n * Settings tab\r\n */\r\n Settings = 4,\r\n}\r\n\r\n/**\r\n * The debug layer (aka Inspector) is the go to tool in order to better understand\r\n * what is happening in your scene\r\n * @see https://doc.babylonjs.com/toolsAndResources/inspector\r\n */\r\nexport class DebugLayer {\r\n /**\r\n * Define the url to get the inspector script from.\r\n * By default it uses the babylonjs CDN.\r\n * @ignoreNaming\r\n */\r\n public static InspectorURL = `https://unpkg.com/babylonjs-inspector@${Engine.Version}/babylon.inspector.bundle.js`;\r\n\r\n private _scene: Scene;\r\n\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n private BJSINSPECTOR = this._getGlobalInspector();\r\n\r\n private _onPropertyChangedObservable?: Observable<{ object: any; property: string; value: any; initialValue: any }>;\r\n /**\r\n * Observable triggered when a property is changed through the inspector.\r\n */\r\n public get onPropertyChangedObservable() {\r\n if (this.BJSINSPECTOR && this.BJSINSPECTOR.Inspector) {\r\n return this.BJSINSPECTOR.Inspector.OnPropertyChangedObservable;\r\n }\r\n\r\n if (!this._onPropertyChangedObservable) {\r\n this._onPropertyChangedObservable = new Observable<{ object: any; property: string; value: any; initialValue: any }>();\r\n }\r\n\r\n return this._onPropertyChangedObservable;\r\n }\r\n\r\n private _onSelectionChangedObservable?: Observable<any>;\r\n /**\r\n * Observable triggered when the selection is changed through the inspector.\r\n */\r\n public get onSelectionChangedObservable() {\r\n if (this.BJSINSPECTOR && this.BJSINSPECTOR.Inspector) {\r\n return this.BJSINSPECTOR.Inspector.OnSelectionChangeObservable;\r\n }\r\n\r\n if (!this._onSelectionChangedObservable) {\r\n this._onSelectionChangedObservable = new Observable<any>();\r\n }\r\n\r\n return this._onSelectionChangedObservable;\r\n }\r\n\r\n /**\r\n * Instantiates a new debug layer.\r\n * The debug layer (aka Inspector) is the go to tool in order to better understand\r\n * what is happening in your scene\r\n * @see https://doc.babylonjs.com/toolsAndResources/inspector\r\n * @param scene Defines the scene to inspect\r\n */\r\n constructor(scene?: Scene) {\r\n this._scene = scene || <Scene>EngineStore.LastCreatedScene;\r\n if (!this._scene) {\r\n return;\r\n }\r\n this._scene.onDisposeObservable.add(() => {\r\n // Debug layer\r\n if (this._scene._debugLayer) {\r\n this._scene._debugLayer.hide();\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Creates the inspector window.\r\n * @param config\r\n */\r\n private _createInspector(config?: Partial<IInspectorOptions>) {\r\n if (this.isVisible()) {\r\n return;\r\n }\r\n\r\n if (this._onPropertyChangedObservable) {\r\n for (const observer of this._onPropertyChangedObservable!.observers) {\r\n this.BJSINSPECTOR.Inspector.OnPropertyChangedObservable.add(observer);\r\n }\r\n this._onPropertyChangedObservable.clear();\r\n this._onPropertyChangedObservable = undefined;\r\n }\r\n\r\n if (this._onSelectionChangedObservable) {\r\n for (const observer of this._onSelectionChangedObservable!.observers) {\r\n this.BJSINSPECTOR.Inspector.OnSelectionChangedObservable.add(observer);\r\n }\r\n this._onSelectionChangedObservable.clear();\r\n this._onSelectionChangedObservable = undefined;\r\n }\r\n\r\n const userOptions: IInspectorOptions = {\r\n overlay: false,\r\n showExplorer: true,\r\n showInspector: true,\r\n embedMode: false,\r\n handleResize: true,\r\n enablePopup: true,\r\n ...config,\r\n };\r\n\r\n this.BJSINSPECTOR = this.BJSINSPECTOR || this._getGlobalInspector();\r\n\r\n this.BJSINSPECTOR.Inspector.Show(this._scene, userOptions);\r\n }\r\n\r\n /**\r\n * Select a specific entity in the scene explorer and highlight a specific block in that entity property grid\r\n * @param entity defines the entity to select\r\n * @param lineContainerTitles defines the specific blocks to highlight (could be a string or an array of strings)\r\n */\r\n public select(entity: any, lineContainerTitles?: string | string[]) {\r\n if (this.BJSINSPECTOR) {\r\n if (lineContainerTitles) {\r\n if (Object.prototype.toString.call(lineContainerTitles) == \"[object String]\") {\r\n this.BJSINSPECTOR.Inspector.MarkLineContainerTitleForHighlighting(lineContainerTitles);\r\n } else {\r\n this.BJSINSPECTOR.Inspector.MarkMultipleLineContainerTitlesForHighlighting(lineContainerTitles);\r\n }\r\n }\r\n this.BJSINSPECTOR.Inspector.OnSelectionChangeObservable.notifyObservers(entity);\r\n }\r\n }\r\n\r\n /** Get the inspector from bundle or global */\r\n private _getGlobalInspector(): any {\r\n // UMD Global name detection from Webpack Bundle UMD Name.\r\n if (typeof INSPECTOR !== \"undefined\") {\r\n return INSPECTOR;\r\n }\r\n\r\n // In case of module let s check the global emitted from the Inspector entry point.\r\n if (typeof BABYLON !== \"undefined\" && typeof BABYLON.Inspector !== \"undefined\") {\r\n return BABYLON;\r\n }\r\n\r\n return undefined;\r\n }\r\n\r\n /**\r\n * Get if the inspector is visible or not.\r\n * @returns true if visible otherwise, false\r\n */\r\n public isVisible(): boolean {\r\n return this.BJSINSPECTOR && this.BJSINSPECTOR.Inspector.IsVisible;\r\n }\r\n\r\n /**\r\n * Hide the inspector and close its window.\r\n */\r\n public hide() {\r\n if (this.BJSINSPECTOR) {\r\n this.BJSINSPECTOR.Inspector.Hide();\r\n }\r\n }\r\n\r\n /**\r\n * Update the scene in the inspector\r\n */\r\n public setAsActiveScene() {\r\n if (this.BJSINSPECTOR) {\r\n this.BJSINSPECTOR.Inspector._SetNewScene(this._scene);\r\n }\r\n }\r\n\r\n /**\r\n * Launch the debugLayer.\r\n * @param config Define the configuration of the inspector\r\n * @returns a promise fulfilled when the debug layer is visible\r\n */\r\n public show(config?: IInspectorOptions): Promise<DebugLayer> {\r\n return new Promise((resolve) => {\r\n if (typeof this.BJSINSPECTOR == \"undefined\") {\r\n const inspectorUrl = config && config.inspectorURL ? config.inspectorURL : DebugLayer.InspectorURL;\r\n\r\n // Load inspector and add it to the DOM\r\n Tools.LoadScript(inspectorUrl, () => {\r\n this._createInspector(config);\r\n resolve(this);\r\n });\r\n } else {\r\n // Otherwise creates the inspector\r\n this._createInspector(config);\r\n resolve(this);\r\n }\r\n });\r\n }\r\n}\r\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skeletonViewer.js","sourceRoot":"","sources":["../../../../lts/core/generated/Debug/skeletonViewer.ts"],"names":[],"mappings":"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","sourcesContent":["import { Vector3, Matrix, TmpVectors } from \"../Maths/math.vector\";\r\nimport { Color3, Color4 } from \"../Maths/math.color\";\r\nimport type { Scene } from \"../scene\";\r\nimport type { Nullable } from \"../types\";\r\nimport type { Bone } from \"../Bones/bone\";\r\nimport type { Skeleton } from \"../Bones/skeleton\";\r\nimport type { AbstractMesh } from \"../Meshes/abstractMesh\";\r\nimport { Mesh } from \"../Meshes/mesh\";\r\nimport type { LinesMesh } from \"../Meshes/linesMesh\";\r\nimport { CreateLineSystem } from \"../Meshes/Builders/linesBuilder\";\r\nimport { UtilityLayerRenderer } from \"../Rendering/utilityLayerRenderer\";\r\nimport { Material } from \"../Materials/material\";\r\nimport { ShaderMaterial } from \"../Materials/shaderMaterial\";\r\nimport { DynamicTexture } from \"../Materials/Textures/dynamicTexture\";\r\nimport { VertexBuffer } from \"../Buffers/buffer\";\r\nimport { Effect } from \"../Materials/effect\";\r\n\r\nimport type { ISkeletonViewerOptions, IBoneWeightShaderOptions, ISkeletonMapShaderOptions, ISkeletonMapShaderColorMapKnot } from \"./ISkeletonViewer\";\r\nimport type { Observer } from \"../Misc/observable\";\r\n\r\nimport { CreateSphere } from \"../Meshes/Builders/sphereBuilder\";\r\nimport { ExtrudeShapeCustom } from \"../Meshes/Builders/shapeBuilder\";\r\n\r\n/**\r\n * Class used to render a debug view of a given skeleton\r\n * @see http://www.babylonjs-playground.com/#1BZJVJ#8\r\n */\r\nexport class SkeletonViewer {\r\n /** public Display constants BABYLON.SkeletonViewer.DISPLAY_LINES */\r\n public static readonly DISPLAY_LINES = 0;\r\n /** public Display constants BABYLON.SkeletonViewer.DISPLAY_SPHERES */\r\n public static readonly DISPLAY_SPHERES = 1;\r\n /** public Display constants BABYLON.SkeletonViewer.DISPLAY_SPHERE_AND_SPURS */\r\n public static readonly DISPLAY_SPHERE_AND_SPURS = 2;\r\n\r\n /** public static method to create a BoneWeight Shader\r\n * @param options The constructor options\r\n * @param scene The scene that the shader is scoped to\r\n * @returns The created ShaderMaterial\r\n * @see http://www.babylonjs-playground.com/#1BZJVJ#395\r\n */\r\n static CreateBoneWeightShader(options: IBoneWeightShaderOptions, scene: Scene): ShaderMaterial {\r\n const skeleton: Skeleton = options.skeleton;\r\n const colorBase: Color3 = options.colorBase ?? Color3.Black();\r\n const colorZero: Color3 = options.colorZero ?? Color3.Blue();\r\n const colorQuarter: Color3 = options.colorQuarter ?? Color3.Green();\r\n const colorHalf: Color3 = options.colorHalf ?? Color3.Yellow();\r\n const colorFull: Color3 = options.colorFull ?? Color3.Red();\r\n const targetBoneIndex: number = options.targetBoneIndex ?? 0;\r\n\r\n Effect.ShadersStore[\"boneWeights:\" + skeleton.name + \"VertexShader\"] = `precision highp float;\r\n\r\n attribute vec3 position;\r\n attribute vec2 uv;\r\n\r\n uniform mat4 view;\r\n uniform mat4 projection;\r\n uniform mat4 worldViewProjection;\r\n\r\n #include<bonesDeclaration>\r\n #if NUM_BONE_INFLUENCERS == 0\r\n attribute vec4 matricesIndices;\r\n attribute vec4 matricesWeights;\r\n #endif\r\n #include<bakedVertexAnimationDeclaration>\r\n\r\n #include<instancesDeclaration>\r\n\r\n varying vec3 vColor;\r\n\r\n uniform vec3 colorBase;\r\n uniform vec3 colorZero;\r\n uniform vec3 colorQuarter;\r\n uniform vec3 colorHalf;\r\n uniform vec3 colorFull;\r\n\r\n uniform float targetBoneIndex;\r\n\r\n void main() {\r\n vec3 positionUpdated = position;\r\n\r\n #include<instancesVertex>\r\n #include<bonesVertex>\r\n #include<bakedVertexAnimation>\r\n\r\n vec4 worldPos = finalWorld * vec4(positionUpdated, 1.0);\r\n\r\n vec3 color = colorBase;\r\n float totalWeight = 0.;\r\n if(matricesIndices[0] == targetBoneIndex && matricesWeights[0] > 0.){\r\n totalWeight += matricesWeights[0];\r\n }\r\n if(matricesIndices[1] == targetBoneIndex && matricesWeights[1] > 0.){\r\n totalWeight += matricesWeights[1];\r\n }\r\n if(matricesIndices[2] == targetBoneIndex && matricesWeights[2] > 0.){\r\n totalWeight += matricesWeights[2];\r\n }\r\n if(matricesIndices[3] == targetBoneIndex && matricesWeights[3] > 0.){\r\n totalWeight += matricesWeights[3];\r\n }\r\n\r\n color = mix(color, colorZero, smoothstep(0., 0.25, totalWeight));\r\n color = mix(color, colorQuarter, smoothstep(0.25, 0.5, totalWeight));\r\n color = mix(color, colorHalf, smoothstep(0.5, 0.75, totalWeight));\r\n color = mix(color, colorFull, smoothstep(0.75, 1.0, totalWeight));\r\n vColor = color;\r\n\r\n gl_Position = projection * view * worldPos;\r\n }`;\r\n Effect.ShadersStore[\"boneWeights:\" + skeleton.name + \"FragmentShader\"] = `\r\n precision highp float;\r\n varying vec3 vPosition;\r\n\r\n varying vec3 vColor;\r\n\r\n void main() {\r\n vec4 color = vec4(vColor, 1.0);\r\n gl_FragColor = color;\r\n }\r\n `;\r\n const shader: ShaderMaterial = new ShaderMaterial(\r\n \"boneWeight:\" + skeleton.name,\r\n scene,\r\n {\r\n vertex: \"boneWeights:\" + skeleton.name,\r\n fragment: \"boneWeights:\" + skeleton.name,\r\n },\r\n {\r\n attributes: [\"position\", \"normal\", \"matricesIndices\", \"matricesWeights\"],\r\n uniforms: [\r\n \"world\",\r\n \"worldView\",\r\n \"worldViewProjection\",\r\n \"view\",\r\n \"projection\",\r\n \"viewProjection\",\r\n \"colorBase\",\r\n \"colorZero\",\r\n \"colorQuarter\",\r\n \"colorHalf\",\r\n \"colorFull\",\r\n \"targetBoneIndex\",\r\n ],\r\n }\r\n );\r\n\r\n shader.setColor3(\"colorBase\", colorBase);\r\n shader.setColor3(\"colorZero\", colorZero);\r\n shader.setColor3(\"colorQuarter\", colorQuarter);\r\n shader.setColor3(\"colorHalf\", colorHalf);\r\n shader.setColor3(\"colorFull\", colorFull);\r\n shader.setFloat(\"targetBoneIndex\", targetBoneIndex);\r\n\r\n shader.getClassName = (): string => {\r\n return \"BoneWeightShader\";\r\n };\r\n\r\n shader.transparencyMode = Material.MATERIAL_OPAQUE;\r\n\r\n return shader;\r\n }\r\n\r\n /** public static method to create a BoneWeight Shader\r\n * @param options The constructor options\r\n * @param scene The scene that the shader is scoped to\r\n * @returns The created ShaderMaterial\r\n */\r\n static CreateSkeletonMapShader(options: ISkeletonMapShaderOptions, scene: Scene) {\r\n const skeleton: Skeleton = options.skeleton;\r\n const colorMap: ISkeletonMapShaderColorMapKnot[] = options.colorMap ?? [\r\n {\r\n color: new Color3(1, 0.38, 0.18),\r\n location: 0,\r\n },\r\n {\r\n color: new Color3(0.59, 0.18, 1.0),\r\n location: 0.2,\r\n },\r\n {\r\n color: new Color3(0.59, 1, 0.18),\r\n location: 0.4,\r\n },\r\n {\r\n color: new Color3(1, 0.87, 0.17),\r\n location: 0.6,\r\n },\r\n {\r\n color: new Color3(1, 0.17, 0.42),\r\n location: 0.8,\r\n },\r\n {\r\n color: new Color3(0.17, 0.68, 1.0),\r\n location: 1.0,\r\n },\r\n ];\r\n\r\n const bufferWidth: number = skeleton.bones.length + 1;\r\n const colorMapBuffer: number[] = SkeletonViewer._CreateBoneMapColorBuffer(bufferWidth, colorMap, scene);\r\n const shader = new ShaderMaterial(\r\n \"boneWeights:\" + skeleton.name,\r\n scene,\r\n {\r\n vertexSource:\r\n `precision highp float;\r\n\r\n attribute vec3 position;\r\n attribute vec2 uv;\r\n\r\n uniform mat4 view;\r\n uniform mat4 projection;\r\n uniform mat4 worldViewProjection;\r\n uniform float colorMap[` +\r\n skeleton.bones.length * 4 +\r\n `];\r\n\r\n #include<bonesDeclaration>\r\n #if NUM_BONE_INFLUENCERS == 0\r\n attribute vec4 matricesIndices;\r\n attribute vec4 matricesWeights;\r\n #endif\r\n #include<bakedVertexAnimationDeclaration>\r\n #include<instancesDeclaration>\r\n\r\n varying vec3 vColor;\r\n\r\n void main() {\r\n vec3 positionUpdated = position;\r\n\r\n #include<instancesVertex>\r\n #include<bonesVertex>\r\n #include<bakedVertexAnimation>\r\n\r\n vec3 color = vec3(0.);\r\n bool first = true;\r\n\r\n for (int i = 0; i < 4; i++) {\r\n int boneIdx = int(matricesIndices[i]);\r\n float boneWgt = matricesWeights[i];\r\n\r\n vec3 c = vec3(colorMap[boneIdx * 4 + 0], colorMap[boneIdx * 4 + 1], colorMap[boneIdx * 4 + 2]);\r\n\r\n if (boneWgt > 0.) {\r\n if (first) {\r\n first = false;\r\n color = c;\r\n } else {\r\n color = mix(color, c, boneWgt);\r\n }\r\n }\r\n }\r\n\r\n vColor = color;\r\n\r\n vec4 worldPos = finalWorld * vec4(positionUpdated, 1.0);\r\n\r\n gl_Position = projection * view * worldPos;\r\n }`,\r\n fragmentSource: `\r\n precision highp float;\r\n varying vec3 vColor;\r\n\r\n void main() {\r\n vec4 color = vec4( vColor, 1.0 );\r\n gl_FragColor = color;\r\n }\r\n `,\r\n },\r\n {\r\n attributes: [\"position\", \"normal\", \"matricesIndices\", \"matricesWeights\"],\r\n uniforms: [\"world\", \"worldView\", \"worldViewProjection\", \"view\", \"projection\", \"viewProjection\", \"colorMap\"],\r\n }\r\n );\r\n\r\n shader.setFloats(\"colorMap\", colorMapBuffer);\r\n\r\n shader.getClassName = (): string => {\r\n return \"SkeletonMapShader\";\r\n };\r\n\r\n shader.transparencyMode = Material.MATERIAL_OPAQUE;\r\n\r\n return shader;\r\n }\r\n\r\n /** private static method to create a BoneWeight Shader\r\n * @param size The size of the buffer to create (usually the bone count)\r\n * @param colorMap The gradient data to generate\r\n * @param scene The scene that the shader is scoped to\r\n * @returns an Array of floats from the color gradient values\r\n */\r\n private static _CreateBoneMapColorBuffer(size: number, colorMap: ISkeletonMapShaderColorMapKnot[], scene: Scene) {\r\n const tempGrad = new DynamicTexture(\"temp\", { width: size, height: 1 }, scene, false);\r\n const ctx = tempGrad.getContext();\r\n const grad = ctx.createLinearGradient(0, 0, size, 0);\r\n\r\n colorMap.forEach((stop) => {\r\n grad.addColorStop(stop.location, stop.color.toHexString());\r\n });\r\n\r\n ctx.fillStyle = grad;\r\n ctx.fillRect(0, 0, size, 1);\r\n tempGrad.update();\r\n const buffer: number[] = [];\r\n const data: Uint8ClampedArray = ctx.getImageData(0, 0, size, 1).data;\r\n const rUnit = 1 / 255;\r\n for (let i = 0; i < data.length; i++) {\r\n buffer.push(data[i] * rUnit);\r\n }\r\n tempGrad.dispose();\r\n return buffer;\r\n }\r\n\r\n /** If SkeletonViewer scene scope. */\r\n private _scene: Scene;\r\n\r\n /** Gets or sets the color used to render the skeleton */\r\n public color: Color3 = Color3.White();\r\n\r\n /** Array of the points of the skeleton fo the line view. */\r\n private _debugLines = new Array<Array<Vector3>>();\r\n\r\n /** The SkeletonViewers Mesh. */\r\n private _debugMesh: Nullable<LinesMesh>;\r\n\r\n /** The local axes Meshes. */\r\n private _localAxes: Nullable<LinesMesh> = null;\r\n\r\n /** If SkeletonViewer is enabled. */\r\n private _isEnabled = true;\r\n\r\n /** If SkeletonViewer is ready. */\r\n private _ready: boolean;\r\n\r\n /** SkeletonViewer render observable. */\r\n private _obs: Nullable<Observer<Scene>> = null;\r\n\r\n /** The Utility Layer to render the gizmos in. */\r\n private _utilityLayer: Nullable<UtilityLayerRenderer>;\r\n\r\n private _boneIndices: Set<number>;\r\n\r\n /** Gets the Scene. */\r\n get scene(): Scene {\r\n return this._scene;\r\n }\r\n /** Gets the utilityLayer. */\r\n get utilityLayer(): Nullable<UtilityLayerRenderer> {\r\n return this._utilityLayer;\r\n }\r\n /** Checks Ready Status. */\r\n get isReady(): Boolean {\r\n return this._ready;\r\n }\r\n /** Sets Ready Status. */\r\n set ready(value: boolean) {\r\n this._ready = value;\r\n }\r\n /** Gets the debugMesh */\r\n get debugMesh(): Nullable<AbstractMesh> | Nullable<LinesMesh> {\r\n return this._debugMesh;\r\n }\r\n /** Sets the debugMesh */\r\n set debugMesh(value: Nullable<AbstractMesh> | Nullable<LinesMesh>) {\r\n this._debugMesh = value as any;\r\n }\r\n /** Gets the displayMode */\r\n get displayMode(): number {\r\n return this.options.displayMode || SkeletonViewer.DISPLAY_LINES;\r\n }\r\n /** Sets the displayMode */\r\n set displayMode(value: number) {\r\n if (value > SkeletonViewer.DISPLAY_SPHERE_AND_SPURS) {\r\n value = SkeletonViewer.DISPLAY_LINES;\r\n }\r\n this.options.displayMode = value;\r\n }\r\n /**\r\n * Creates a new SkeletonViewer\r\n * @param skeleton defines the skeleton to render\r\n * @param mesh defines the mesh attached to the skeleton\r\n * @param scene defines the hosting scene\r\n * @param autoUpdateBonesMatrices defines a boolean indicating if bones matrices must be forced to update before rendering (true by default)\r\n * @param renderingGroupId defines the rendering group id to use with the viewer\r\n * @param options All of the extra constructor options for the SkeletonViewer\r\n */\r\n constructor(\r\n /** defines the skeleton to render */\r\n public skeleton: Skeleton,\r\n /** defines the mesh attached to the skeleton */\r\n public mesh: AbstractMesh,\r\n /** The Scene scope*/\r\n scene: Scene,\r\n /** defines a boolean indicating if bones matrices must be forced to update before rendering (true by default) */\r\n public autoUpdateBonesMatrices: boolean = true,\r\n /** defines the rendering group id to use with the viewer */\r\n public renderingGroupId: number = 3,\r\n /** is the options for the viewer */\r\n public options: Partial<ISkeletonViewerOptions> = {}\r\n ) {\r\n this._scene = scene;\r\n this._ready = false;\r\n\r\n //Defaults\r\n options.pauseAnimations = options.pauseAnimations ?? true;\r\n options.returnToRest = options.returnToRest ?? false;\r\n options.displayMode = options.displayMode ?? SkeletonViewer.DISPLAY_LINES;\r\n options.displayOptions = options.displayOptions ?? {};\r\n options.displayOptions.midStep = options.displayOptions.midStep ?? 0.235;\r\n options.displayOptions.midStepFactor = options.displayOptions.midStepFactor ?? 0.155;\r\n options.displayOptions.sphereBaseSize = options.displayOptions.sphereBaseSize ?? 0.15;\r\n options.displayOptions.sphereScaleUnit = options.displayOptions.sphereScaleUnit ?? 2;\r\n options.displayOptions.sphereFactor = options.displayOptions.sphereFactor ?? 0.865;\r\n options.displayOptions.spurFollowsChild = options.displayOptions.spurFollowsChild ?? false;\r\n options.displayOptions.showLocalAxes = options.displayOptions.showLocalAxes ?? false;\r\n options.displayOptions.localAxesSize = options.displayOptions.localAxesSize ?? 0.075;\r\n options.computeBonesUsingShaders = options.computeBonesUsingShaders ?? true;\r\n options.useAllBones = options.useAllBones ?? true;\r\n\r\n const initialMeshBoneIndices = mesh.getVerticesData(VertexBuffer.MatricesIndicesKind);\r\n const initialMeshBoneWeights = mesh.getVerticesData(VertexBuffer.MatricesWeightsKind);\r\n this._boneIndices = new Set();\r\n\r\n if (!options.useAllBones) {\r\n if (initialMeshBoneIndices && initialMeshBoneWeights) {\r\n for (let i = 0; i < initialMeshBoneIndices.length; ++i) {\r\n const index = initialMeshBoneIndices[i],\r\n weight = initialMeshBoneWeights[i];\r\n if (weight !== 0) {\r\n this._boneIndices.add(index);\r\n }\r\n }\r\n }\r\n }\r\n\r\n /* Create Utility Layer */\r\n this._utilityLayer = new UtilityLayerRenderer(this._scene, false);\r\n this._utilityLayer.pickUtilitySceneFirst = false;\r\n this._utilityLayer.utilityLayerScene.autoClearDepthAndStencil = true;\r\n\r\n let displayMode = this.options.displayMode || 0;\r\n if (displayMode > SkeletonViewer.DISPLAY_SPHERE_AND_SPURS) {\r\n displayMode = SkeletonViewer.DISPLAY_LINES;\r\n }\r\n this.displayMode = displayMode;\r\n //Prep the Systems\r\n this.update();\r\n this._bindObs();\r\n }\r\n\r\n /** The Dynamic bindings for the update functions */\r\n private _bindObs(): void {\r\n switch (this.displayMode) {\r\n case SkeletonViewer.DISPLAY_LINES: {\r\n this._obs = this.scene.onBeforeRenderObservable.add(() => {\r\n this._displayLinesUpdate();\r\n });\r\n break;\r\n }\r\n }\r\n }\r\n\r\n /** Update the viewer to sync with current skeleton state, only used to manually update. */\r\n public update(): void {\r\n switch (this.displayMode) {\r\n case SkeletonViewer.DISPLAY_LINES: {\r\n this._displayLinesUpdate();\r\n break;\r\n }\r\n case SkeletonViewer.DISPLAY_SPHERES: {\r\n this._buildSpheresAndSpurs(true);\r\n break;\r\n }\r\n case SkeletonViewer.DISPLAY_SPHERE_AND_SPURS: {\r\n this._buildSpheresAndSpurs(false);\r\n break;\r\n }\r\n }\r\n\r\n this._buildLocalAxes();\r\n }\r\n\r\n /** Gets or sets a boolean indicating if the viewer is enabled */\r\n public set isEnabled(value: boolean) {\r\n if (this.isEnabled === value) {\r\n return;\r\n }\r\n\r\n this._isEnabled = value;\r\n\r\n if (this.debugMesh) {\r\n this.debugMesh.setEnabled(value);\r\n }\r\n\r\n if (value && !this._obs) {\r\n this._bindObs();\r\n } else if (!value && this._obs) {\r\n this.scene.onBeforeRenderObservable.remove(this._obs);\r\n this._obs = null;\r\n }\r\n }\r\n\r\n public get isEnabled(): boolean {\r\n return this._isEnabled;\r\n }\r\n\r\n private _getBonePosition(position: Vector3, bone: Bone, meshMat: Matrix, x = 0, y = 0, z = 0): void {\r\n const tmat = TmpVectors.Matrix[0];\r\n const parentBone = bone.getParent();\r\n tmat.copyFrom(bone.getLocalMatrix());\r\n\r\n if (x !== 0 || y !== 0 || z !== 0) {\r\n const tmat2 = TmpVectors.Matrix[1];\r\n Matrix.IdentityToRef(tmat2);\r\n tmat2.setTranslationFromFloats(x, y, z);\r\n tmat2.multiplyToRef(tmat, tmat);\r\n }\r\n\r\n if (parentBone) {\r\n tmat.multiplyToRef(parentBone.getAbsoluteTransform(), tmat);\r\n }\r\n\r\n tmat.multiplyToRef(meshMat, tmat);\r\n\r\n position.x = tmat.m[12];\r\n position.y = tmat.m[13];\r\n position.z = tmat.m[14];\r\n }\r\n\r\n private _getLinesForBonesWithLength(bones: Bone[], meshMat: Matrix): void {\r\n const len = bones.length;\r\n\r\n const mesh = this.mesh;\r\n const meshPos = mesh.position;\r\n let idx = 0;\r\n for (let i = 0; i < len; i++) {\r\n const bone = bones[i];\r\n let points = this._debugLines[idx];\r\n\r\n if (bone._index === -1 || (!this._boneIndices.has(bone.getIndex()) && !this.options.useAllBones)) {\r\n continue;\r\n }\r\n if (!points) {\r\n points = [Vector3.Zero(), Vector3.Zero()];\r\n this._debugLines[idx] = points;\r\n }\r\n this._getBonePosition(points[0], bone, meshMat);\r\n this._getBonePosition(points[1], bone, meshMat, 0, bone.length, 0);\r\n points[0].subtractInPlace(meshPos);\r\n points[1].subtractInPlace(meshPos);\r\n idx++;\r\n }\r\n }\r\n\r\n private _getLinesForBonesNoLength(bones: Bone[]): void {\r\n const len = bones.length;\r\n let boneNum = 0;\r\n\r\n const mesh = this.mesh;\r\n const meshPos = mesh.position;\r\n for (let i = len - 1; i >= 0; i--) {\r\n const childBone = bones[i];\r\n const parentBone = childBone.getParent();\r\n if (!parentBone || (!this._boneIndices.has(childBone.getIndex()) && !this.options.useAllBones)) {\r\n continue;\r\n }\r\n let points = this._debugLines[boneNum];\r\n if (!points) {\r\n points = [Vector3.Zero(), Vector3.Zero()];\r\n this._debugLines[boneNum] = points;\r\n }\r\n childBone.getAbsolutePositionToRef(mesh, points[0]);\r\n parentBone.getAbsolutePositionToRef(mesh, points[1]);\r\n points[0].subtractInPlace(meshPos);\r\n points[1].subtractInPlace(meshPos);\r\n boneNum++;\r\n }\r\n }\r\n\r\n /**\r\n * function to revert the mesh and scene back to the initial state.\r\n * @param animationState\r\n */\r\n private _revert(animationState: boolean): void {\r\n if (this.options.pauseAnimations) {\r\n this.scene.animationsEnabled = animationState;\r\n this.utilityLayer!.utilityLayerScene!.animationsEnabled = animationState;\r\n }\r\n }\r\n\r\n /**\r\n * function to get the absolute bind pose of a bone by accumulating transformations up the bone hierarchy.\r\n * @param bone\r\n * @param matrix\r\n */\r\n private _getAbsoluteBindPoseToRef(bone: Nullable<Bone>, matrix: Matrix) {\r\n if (bone === null || bone._index === -1) {\r\n matrix.copyFrom(Matrix.Identity());\r\n return;\r\n }\r\n\r\n this._getAbsoluteBindPoseToRef(bone.getParent(), matrix);\r\n bone.getBaseMatrix().multiplyToRef(matrix, matrix);\r\n return;\r\n }\r\n\r\n /**\r\n * function to build and bind sphere joint points and spur bone representations.\r\n * @param spheresOnly\r\n */\r\n private _buildSpheresAndSpurs(spheresOnly = true): void {\r\n if (this._debugMesh) {\r\n this._debugMesh.dispose();\r\n this._debugMesh = null;\r\n this.ready = false;\r\n }\r\n\r\n this._ready = false;\r\n const utilityLayerScene = this.utilityLayer?.utilityLayerScene!;\r\n const bones: Bone[] = this.skeleton.bones;\r\n const spheres: Array<[Mesh, Bone]> = [];\r\n const spurs: Mesh[] = [];\r\n\r\n const animationState = this.scene.animationsEnabled;\r\n\r\n try {\r\n if (this.options.pauseAnimations) {\r\n this.scene.animationsEnabled = false;\r\n utilityLayerScene.animationsEnabled = false;\r\n }\r\n\r\n if (this.options.returnToRest) {\r\n this.skeleton.returnToRest();\r\n }\r\n\r\n if (this.autoUpdateBonesMatrices) {\r\n this.skeleton.computeAbsoluteTransforms();\r\n }\r\n\r\n let longestBoneLength = Number.NEGATIVE_INFINITY;\r\n const displayOptions = this.options.displayOptions || {};\r\n\r\n for (let i = 0; i < bones.length; i++) {\r\n const bone = bones[i];\r\n\r\n if (bone._index === -1 || (!this._boneIndices.has(bone.getIndex()) && !this.options.useAllBones)) {\r\n continue;\r\n }\r\n\r\n const boneAbsoluteBindPoseTransform = new Matrix();\r\n this._getAbsoluteBindPoseToRef(bone, boneAbsoluteBindPoseTransform);\r\n\r\n const anchorPoint = new Vector3();\r\n\r\n boneAbsoluteBindPoseTransform.decompose(undefined, undefined, anchorPoint);\r\n\r\n bone.children.forEach((bc) => {\r\n const childAbsoluteBindPoseTransform: Matrix = new Matrix();\r\n bc.getBaseMatrix().multiplyToRef(boneAbsoluteBindPoseTransform, childAbsoluteBindPoseTransform);\r\n const childPoint = new Vector3();\r\n childAbsoluteBindPoseTransform.decompose(undefined, undefined, childPoint);\r\n const distanceFromParent = Vector3.Distance(anchorPoint, childPoint);\r\n if (distanceFromParent > longestBoneLength) {\r\n longestBoneLength = distanceFromParent;\r\n }\r\n if (spheresOnly) {\r\n return;\r\n }\r\n\r\n const dir = childPoint.clone().subtract(anchorPoint.clone());\r\n const h = dir.length();\r\n const up = dir.normalize().scale(h);\r\n\r\n const midStep = displayOptions.midStep || 0.165;\r\n const midStepFactor = displayOptions.midStepFactor || 0.215;\r\n\r\n const up0 = up.scale(midStep);\r\n\r\n const spur = ExtrudeShapeCustom(\r\n \"skeletonViewer\",\r\n {\r\n shape: [new Vector3(1, -1, 0), new Vector3(1, 1, 0), new Vector3(-1, 1, 0), new Vector3(-1, -1, 0), new Vector3(1, -1, 0)],\r\n path: [Vector3.Zero(), up0, up],\r\n scaleFunction: (i: number) => {\r\n switch (i) {\r\n case 0:\r\n case 2:\r\n return 0;\r\n case 1:\r\n return h * midStepFactor;\r\n }\r\n return 0;\r\n },\r\n sideOrientation: Mesh.DEFAULTSIDE,\r\n updatable: false,\r\n },\r\n utilityLayerScene\r\n );\r\n\r\n const numVertices = spur.getTotalVertices();\r\n const mwk: number[] = [],\r\n mik: number[] = [];\r\n\r\n for (let i = 0; i < numVertices; i++) {\r\n mwk.push(1, 0, 0, 0);\r\n\r\n // Select verts at end of spur (ie vert 10 to 14) and bind to child\r\n // bone if spurFollowsChild is enabled.\r\n if (displayOptions.spurFollowsChild && i > 9) {\r\n mik.push(bc.getIndex(), 0, 0, 0);\r\n } else {\r\n mik.push(bone.getIndex(), 0, 0, 0);\r\n }\r\n }\r\n\r\n spur.position = anchorPoint.clone();\r\n\r\n spur.setVerticesData(VertexBuffer.MatricesWeightsKind, mwk, false);\r\n spur.setVerticesData(VertexBuffer.MatricesIndicesKind, mik, false);\r\n spur.convertToFlatShadedMesh();\r\n\r\n spurs.push(spur);\r\n });\r\n\r\n const sphereBaseSize = displayOptions.sphereBaseSize || 0.2;\r\n\r\n const sphere = CreateSphere(\r\n \"skeletonViewer\",\r\n {\r\n segments: 6,\r\n diameter: sphereBaseSize,\r\n updatable: true,\r\n },\r\n utilityLayerScene\r\n );\r\n\r\n const numVertices = sphere.getTotalVertices();\r\n\r\n const mwk: number[] = [],\r\n mik: number[] = [];\r\n\r\n for (let i = 0; i < numVertices; i++) {\r\n mwk.push(1, 0, 0, 0);\r\n mik.push(bone.getIndex(), 0, 0, 0);\r\n }\r\n\r\n sphere.setVerticesData(VertexBuffer.MatricesWeightsKind, mwk, false);\r\n sphere.setVerticesData(VertexBuffer.MatricesIndicesKind, mik, false);\r\n\r\n sphere.position = anchorPoint.clone();\r\n spheres.push([sphere, bone]);\r\n }\r\n\r\n const sphereScaleUnit = displayOptions.sphereScaleUnit || 2;\r\n const sphereFactor = displayOptions.sphereFactor || 0.85;\r\n\r\n const meshes = [];\r\n for (let i = 0; i < spheres.length; i++) {\r\n const [sphere, bone] = spheres[i];\r\n const scale = 1 / (sphereScaleUnit / longestBoneLength);\r\n\r\n let _stepsOut = 0;\r\n let _b = bone;\r\n\r\n while (_b.getParent() && (_b.getParent() as Bone).getIndex() !== -1) {\r\n _stepsOut++;\r\n _b = _b.getParent() as Bone;\r\n }\r\n sphere.scaling.scaleInPlace(scale * Math.pow(sphereFactor, _stepsOut));\r\n meshes.push(sphere);\r\n }\r\n\r\n this.debugMesh = Mesh.MergeMeshes(meshes.concat(spurs), true, true);\r\n if (this.debugMesh) {\r\n this.debugMesh.renderingGroupId = this.renderingGroupId;\r\n this.debugMesh.skeleton = this.skeleton;\r\n this.debugMesh.parent = this.mesh;\r\n this.debugMesh.computeBonesUsingShaders = this.options.computeBonesUsingShaders ?? true;\r\n this.debugMesh.alwaysSelectAsActiveMesh = true;\r\n }\r\n\r\n const light = this.utilityLayer!._getSharedGizmoLight();\r\n light.intensity = 0.7;\r\n\r\n this._revert(animationState);\r\n this.ready = true;\r\n } catch (err) {\r\n console.error(err);\r\n this._revert(animationState);\r\n this.dispose();\r\n }\r\n }\r\n\r\n private _buildLocalAxes(): void {\r\n if (this._localAxes) {\r\n this._localAxes.dispose();\r\n }\r\n\r\n this._localAxes = null;\r\n\r\n const displayOptions = this.options.displayOptions || {};\r\n\r\n if (!displayOptions.showLocalAxes) {\r\n return;\r\n }\r\n\r\n const targetScene = this._utilityLayer!.utilityLayerScene;\r\n const size = displayOptions.localAxesSize || 0.075;\r\n const lines = [];\r\n const colors = [];\r\n const red = new Color4(1, 0, 0, 1);\r\n const green = new Color4(0, 1, 0, 1);\r\n const blue = new Color4(0, 0, 1, 1);\r\n\r\n const mwk: number[] = [];\r\n const mik: number[] = [];\r\n const vertsPerBone = 6;\r\n\r\n for (const i in this.skeleton.bones) {\r\n const bone = this.skeleton.bones[i];\r\n\r\n if (bone._index === -1 || (!this._boneIndices.has(bone.getIndex()) && !this.options.useAllBones)) {\r\n continue;\r\n }\r\n\r\n const boneAbsoluteBindPoseTransform = new Matrix();\r\n const boneOrigin = new Vector3();\r\n\r\n this._getAbsoluteBindPoseToRef(bone, boneAbsoluteBindPoseTransform);\r\n boneAbsoluteBindPoseTransform.decompose(undefined, TmpVectors.Quaternion[0], boneOrigin);\r\n\r\n const m = new Matrix();\r\n TmpVectors.Quaternion[0].toRotationMatrix(m);\r\n\r\n const boneAxisX = Vector3.TransformCoordinates(new Vector3(0 + size, 0, 0), m);\r\n const boneAxisY = Vector3.TransformCoordinates(new Vector3(0, 0 + size, 0), m);\r\n const boneAxisZ = Vector3.TransformCoordinates(new Vector3(0, 0, 0 + size), m);\r\n\r\n const axisX = [boneOrigin, boneOrigin.add(boneAxisX)];\r\n const axisY = [boneOrigin, boneOrigin.add(boneAxisY)];\r\n const axisZ = [boneOrigin, boneOrigin.add(boneAxisZ)];\r\n\r\n const linePoints = [axisX, axisY, axisZ];\r\n const lineColors = [\r\n [red, red],\r\n [green, green],\r\n [blue, blue],\r\n ];\r\n\r\n lines.push(...linePoints);\r\n colors.push(...lineColors);\r\n\r\n for (let j = 0; j < vertsPerBone; j++) {\r\n mwk.push(1, 0, 0, 0);\r\n mik.push(bone.getIndex(), 0, 0, 0);\r\n }\r\n }\r\n\r\n this._localAxes = CreateLineSystem(\"localAxes\", { lines: lines, colors: colors, updatable: true }, targetScene);\r\n this._localAxes.setVerticesData(VertexBuffer.MatricesWeightsKind, mwk, false);\r\n this._localAxes.setVerticesData(VertexBuffer.MatricesIndicesKind, mik, false);\r\n this._localAxes.skeleton = this.skeleton;\r\n this._localAxes.renderingGroupId = this.renderingGroupId + 1;\r\n this._localAxes.parent = this.mesh;\r\n this._localAxes.computeBonesUsingShaders = this.options.computeBonesUsingShaders ?? true;\r\n }\r\n\r\n /** Update the viewer to sync with current skeleton state, only used for the line display. */\r\n private _displayLinesUpdate(): void {\r\n if (!this._utilityLayer) {\r\n return;\r\n }\r\n\r\n if (this.autoUpdateBonesMatrices) {\r\n this.skeleton.computeAbsoluteTransforms();\r\n }\r\n\r\n if (this.skeleton.bones[0].length === undefined) {\r\n this._getLinesForBonesNoLength(this.skeleton.bones);\r\n } else {\r\n this._getLinesForBonesWithLength(this.skeleton.bones, this.mesh.getWorldMatrix());\r\n }\r\n\r\n const targetScene = this._utilityLayer.utilityLayerScene;\r\n\r\n if (targetScene) {\r\n if (!this._debugMesh) {\r\n this._debugMesh = CreateLineSystem(\"\", { lines: this._debugLines, updatable: true, instance: null }, targetScene);\r\n this._debugMesh.renderingGroupId = this.renderingGroupId;\r\n } else {\r\n CreateLineSystem(\"\", { lines: this._debugLines, updatable: true, instance: this._debugMesh }, targetScene);\r\n }\r\n this._debugMesh.position.copyFrom(this.mesh.position);\r\n this._debugMesh.color = this.color;\r\n }\r\n }\r\n /** Changes the displayMode of the skeleton viewer\r\n * @param mode The displayMode numerical value\r\n */\r\n public changeDisplayMode(mode: number): void {\r\n const wasEnabled = this.isEnabled ? true : false;\r\n if (this.displayMode !== mode) {\r\n this.isEnabled = false;\r\n if (this._debugMesh) {\r\n this._debugMesh.dispose();\r\n this._debugMesh = null;\r\n this.ready = false;\r\n }\r\n this.displayMode = mode;\r\n\r\n this.update();\r\n this._bindObs();\r\n this.isEnabled = wasEnabled;\r\n }\r\n }\r\n\r\n /** Sets a display option of the skeleton viewer\r\n *\r\n * | Option | Type | Default | Description |\r\n * | ---------------- | ------- | ------- | ----------- |\r\n * | midStep | float | 0.235 | A percentage between a bone and its child that determines the widest part of a spur. Only used when `displayMode` is set to `DISPLAY_SPHERE_AND_SPURS`. |\r\n * | midStepFactor | float | 0.15 | Mid step width expressed as a factor of the length. A value of 0.5 makes the spur width half of the spur length. Only used when `displayMode` is set to `DISPLAY_SPHERE_AND_SPURS`. |\r\n * | sphereBaseSize | float | 2 | Sphere base size. Only used when `displayMode` is set to `DISPLAY_SPHERE_AND_SPURS`. |\r\n * | sphereScaleUnit | float | 0.865 | Sphere scale factor used to scale spheres in relation to the longest bone. Only used when `displayMode` is set to `DISPLAY_SPHERE_AND_SPURS`. |\r\n * | spurFollowsChild | boolean | false | Whether a spur should attach its far end to the child bone. |\r\n * | showLocalAxes | boolean | false | Displays local axes on all bones. |\r\n * | localAxesSize | float | 0.075 | Determines the length of each local axis. |\r\n *\r\n * @param option String of the option name\r\n * @param value The numerical option value\r\n */\r\n public changeDisplayOptions(option: string, value: number): void {\r\n const wasEnabled = this.isEnabled ? true : false;\r\n (this.options.displayOptions as any)[option] = value;\r\n this.isEnabled = false;\r\n if (this._debugMesh) {\r\n this._debugMesh.dispose();\r\n this._debugMesh = null;\r\n this.ready = false;\r\n }\r\n this.update();\r\n this._bindObs();\r\n this.isEnabled = wasEnabled;\r\n }\r\n\r\n /** Release associated resources */\r\n public dispose(): void {\r\n this.isEnabled = false;\r\n if (this._debugMesh) {\r\n this._debugMesh.dispose();\r\n this._debugMesh = null;\r\n }\r\n\r\n if (this._utilityLayer) {\r\n this._utilityLayer.dispose();\r\n this._utilityLayer = null;\r\n }\r\n\r\n this.ready = false;\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"skeletonViewer.js","sourceRoot":"","sources":["../../../../lts/core/generated/Debug/skeletonViewer.ts"],"names":[],"mappings":"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","sourcesContent":["import { Vector3, Matrix, TmpVectors } from \"../Maths/math.vector\";\r\nimport { Color3, Color4 } from \"../Maths/math.color\";\r\nimport type { Scene } from \"../scene\";\r\nimport type { Nullable } from \"../types\";\r\nimport type { Bone } from \"../Bones/bone\";\r\nimport type { Skeleton } from \"../Bones/skeleton\";\r\nimport type { AbstractMesh } from \"../Meshes/abstractMesh\";\r\nimport { Mesh } from \"../Meshes/mesh\";\r\nimport type { LinesMesh } from \"../Meshes/linesMesh\";\r\nimport { CreateLineSystem } from \"../Meshes/Builders/linesBuilder\";\r\nimport { UtilityLayerRenderer } from \"../Rendering/utilityLayerRenderer\";\r\nimport { Material } from \"../Materials/material\";\r\nimport { ShaderMaterial } from \"../Materials/shaderMaterial\";\r\nimport { DynamicTexture } from \"../Materials/Textures/dynamicTexture\";\r\nimport { VertexBuffer } from \"../Buffers/buffer\";\r\nimport { Effect } from \"../Materials/effect\";\r\n\r\nimport type { ISkeletonViewerOptions, IBoneWeightShaderOptions, ISkeletonMapShaderOptions, ISkeletonMapShaderColorMapKnot } from \"./ISkeletonViewer\";\r\nimport type { Observer } from \"../Misc/observable\";\r\n\r\nimport { CreateSphere } from \"../Meshes/Builders/sphereBuilder\";\r\nimport { ExtrudeShapeCustom } from \"../Meshes/Builders/shapeBuilder\";\r\n\r\n/**\r\n * Class used to render a debug view of a given skeleton\r\n * @see http://www.babylonjs-playground.com/#1BZJVJ#8\r\n */\r\nexport class SkeletonViewer {\r\n /** public Display constants BABYLON.SkeletonViewer.DISPLAY_LINES */\r\n public static readonly DISPLAY_LINES = 0;\r\n /** public Display constants BABYLON.SkeletonViewer.DISPLAY_SPHERES */\r\n public static readonly DISPLAY_SPHERES = 1;\r\n /** public Display constants BABYLON.SkeletonViewer.DISPLAY_SPHERE_AND_SPURS */\r\n public static readonly DISPLAY_SPHERE_AND_SPURS = 2;\r\n\r\n /** public static method to create a BoneWeight Shader\r\n * @param options The constructor options\r\n * @param scene The scene that the shader is scoped to\r\n * @returns The created ShaderMaterial\r\n * @see http://www.babylonjs-playground.com/#1BZJVJ#395\r\n */\r\n static CreateBoneWeightShader(options: IBoneWeightShaderOptions, scene: Scene): ShaderMaterial {\r\n const skeleton: Skeleton = options.skeleton;\r\n const colorBase: Color3 = options.colorBase ?? Color3.Black();\r\n const colorZero: Color3 = options.colorZero ?? Color3.Blue();\r\n const colorQuarter: Color3 = options.colorQuarter ?? Color3.Green();\r\n const colorHalf: Color3 = options.colorHalf ?? Color3.Yellow();\r\n const colorFull: Color3 = options.colorFull ?? Color3.Red();\r\n const targetBoneIndex: number = options.targetBoneIndex ?? 0;\r\n\r\n Effect.ShadersStore[\"boneWeights:\" + skeleton.name + \"VertexShader\"] = `precision highp float;\r\n\r\n attribute vec3 position;\r\n attribute vec2 uv;\r\n\r\n uniform mat4 view;\r\n uniform mat4 projection;\r\n uniform mat4 worldViewProjection;\r\n\r\n #include<bonesDeclaration>\r\n #if NUM_BONE_INFLUENCERS == 0\r\n attribute vec4 matricesIndices;\r\n attribute vec4 matricesWeights;\r\n #endif\r\n #include<bakedVertexAnimationDeclaration>\r\n\r\n #include<instancesDeclaration>\r\n\r\n varying vec3 vColor;\r\n\r\n uniform vec3 colorBase;\r\n uniform vec3 colorZero;\r\n uniform vec3 colorQuarter;\r\n uniform vec3 colorHalf;\r\n uniform vec3 colorFull;\r\n\r\n uniform float targetBoneIndex;\r\n\r\n void main() {\r\n vec3 positionUpdated = position;\r\n\r\n #include<instancesVertex>\r\n #include<bonesVertex>\r\n #include<bakedVertexAnimation>\r\n\r\n vec4 worldPos = finalWorld * vec4(positionUpdated, 1.0);\r\n\r\n vec3 color = colorBase;\r\n float totalWeight = 0.;\r\n if(matricesIndices[0] == targetBoneIndex && matricesWeights[0] > 0.){\r\n totalWeight += matricesWeights[0];\r\n }\r\n if(matricesIndices[1] == targetBoneIndex && matricesWeights[1] > 0.){\r\n totalWeight += matricesWeights[1];\r\n }\r\n if(matricesIndices[2] == targetBoneIndex && matricesWeights[2] > 0.){\r\n totalWeight += matricesWeights[2];\r\n }\r\n if(matricesIndices[3] == targetBoneIndex && matricesWeights[3] > 0.){\r\n totalWeight += matricesWeights[3];\r\n }\r\n\r\n color = mix(color, colorZero, smoothstep(0., 0.25, totalWeight));\r\n color = mix(color, colorQuarter, smoothstep(0.25, 0.5, totalWeight));\r\n color = mix(color, colorHalf, smoothstep(0.5, 0.75, totalWeight));\r\n color = mix(color, colorFull, smoothstep(0.75, 1.0, totalWeight));\r\n vColor = color;\r\n\r\n gl_Position = projection * view * worldPos;\r\n }`;\r\n Effect.ShadersStore[\"boneWeights:\" + skeleton.name + \"FragmentShader\"] = `\r\n precision highp float;\r\n varying vec3 vPosition;\r\n\r\n varying vec3 vColor;\r\n\r\n void main() {\r\n vec4 color = vec4(vColor, 1.0);\r\n gl_FragColor = color;\r\n }\r\n `;\r\n const shader: ShaderMaterial = new ShaderMaterial(\r\n \"boneWeight:\" + skeleton.name,\r\n scene,\r\n {\r\n vertex: \"boneWeights:\" + skeleton.name,\r\n fragment: \"boneWeights:\" + skeleton.name,\r\n },\r\n {\r\n attributes: [\"position\", \"normal\", \"matricesIndices\", \"matricesWeights\"],\r\n uniforms: [\r\n \"world\",\r\n \"worldView\",\r\n \"worldViewProjection\",\r\n \"view\",\r\n \"projection\",\r\n \"viewProjection\",\r\n \"colorBase\",\r\n \"colorZero\",\r\n \"colorQuarter\",\r\n \"colorHalf\",\r\n \"colorFull\",\r\n \"targetBoneIndex\",\r\n ],\r\n }\r\n );\r\n\r\n shader.setColor3(\"colorBase\", colorBase);\r\n shader.setColor3(\"colorZero\", colorZero);\r\n shader.setColor3(\"colorQuarter\", colorQuarter);\r\n shader.setColor3(\"colorHalf\", colorHalf);\r\n shader.setColor3(\"colorFull\", colorFull);\r\n shader.setFloat(\"targetBoneIndex\", targetBoneIndex);\r\n\r\n shader.getClassName = (): string => {\r\n return \"BoneWeightShader\";\r\n };\r\n\r\n shader.transparencyMode = Material.MATERIAL_OPAQUE;\r\n\r\n return shader;\r\n }\r\n\r\n /** public static method to create a BoneWeight Shader\r\n * @param options The constructor options\r\n * @param scene The scene that the shader is scoped to\r\n * @returns The created ShaderMaterial\r\n */\r\n static CreateSkeletonMapShader(options: ISkeletonMapShaderOptions, scene: Scene) {\r\n const skeleton: Skeleton = options.skeleton;\r\n const colorMap: ISkeletonMapShaderColorMapKnot[] = options.colorMap ?? [\r\n {\r\n color: new Color3(1, 0.38, 0.18),\r\n location: 0,\r\n },\r\n {\r\n color: new Color3(0.59, 0.18, 1.0),\r\n location: 0.2,\r\n },\r\n {\r\n color: new Color3(0.59, 1, 0.18),\r\n location: 0.4,\r\n },\r\n {\r\n color: new Color3(1, 0.87, 0.17),\r\n location: 0.6,\r\n },\r\n {\r\n color: new Color3(1, 0.17, 0.42),\r\n location: 0.8,\r\n },\r\n {\r\n color: new Color3(0.17, 0.68, 1.0),\r\n location: 1.0,\r\n },\r\n ];\r\n\r\n const bufferWidth: number = skeleton.bones.length + 1;\r\n const colorMapBuffer: number[] = SkeletonViewer._CreateBoneMapColorBuffer(bufferWidth, colorMap, scene);\r\n const shader = new ShaderMaterial(\r\n \"boneWeights:\" + skeleton.name,\r\n scene,\r\n {\r\n vertexSource:\r\n `precision highp float;\r\n\r\n attribute vec3 position;\r\n attribute vec2 uv;\r\n\r\n uniform mat4 view;\r\n uniform mat4 projection;\r\n uniform mat4 worldViewProjection;\r\n uniform float colorMap[` +\r\n skeleton.bones.length * 4 +\r\n `];\r\n\r\n #include<bonesDeclaration>\r\n #if NUM_BONE_INFLUENCERS == 0\r\n attribute vec4 matricesIndices;\r\n attribute vec4 matricesWeights;\r\n #endif\r\n #include<bakedVertexAnimationDeclaration>\r\n #include<instancesDeclaration>\r\n\r\n varying vec3 vColor;\r\n\r\n void main() {\r\n vec3 positionUpdated = position;\r\n\r\n #include<instancesVertex>\r\n #include<bonesVertex>\r\n #include<bakedVertexAnimation>\r\n\r\n vec3 color = vec3(0.);\r\n bool first = true;\r\n\r\n for (int i = 0; i < 4; i++) {\r\n int boneIdx = int(matricesIndices[i]);\r\n float boneWgt = matricesWeights[i];\r\n\r\n vec3 c = vec3(colorMap[boneIdx * 4 + 0], colorMap[boneIdx * 4 + 1], colorMap[boneIdx * 4 + 2]);\r\n\r\n if (boneWgt > 0.) {\r\n if (first) {\r\n first = false;\r\n color = c;\r\n } else {\r\n color = mix(color, c, boneWgt);\r\n }\r\n }\r\n }\r\n\r\n vColor = color;\r\n\r\n vec4 worldPos = finalWorld * vec4(positionUpdated, 1.0);\r\n\r\n gl_Position = projection * view * worldPos;\r\n }`,\r\n fragmentSource: `\r\n precision highp float;\r\n varying vec3 vColor;\r\n\r\n void main() {\r\n vec4 color = vec4( vColor, 1.0 );\r\n gl_FragColor = color;\r\n }\r\n `,\r\n },\r\n {\r\n attributes: [\"position\", \"normal\", \"matricesIndices\", \"matricesWeights\"],\r\n uniforms: [\"world\", \"worldView\", \"worldViewProjection\", \"view\", \"projection\", \"viewProjection\", \"colorMap\"],\r\n }\r\n );\r\n\r\n shader.setFloats(\"colorMap\", colorMapBuffer);\r\n\r\n shader.getClassName = (): string => {\r\n return \"SkeletonMapShader\";\r\n };\r\n\r\n shader.transparencyMode = Material.MATERIAL_OPAQUE;\r\n\r\n return shader;\r\n }\r\n\r\n /** private static method to create a BoneWeight Shader\r\n * @param size The size of the buffer to create (usually the bone count)\r\n * @param colorMap The gradient data to generate\r\n * @param scene The scene that the shader is scoped to\r\n * @returns an Array of floats from the color gradient values\r\n */\r\n private static _CreateBoneMapColorBuffer(size: number, colorMap: ISkeletonMapShaderColorMapKnot[], scene: Scene) {\r\n const tempGrad = new DynamicTexture(\"temp\", { width: size, height: 1 }, scene, false);\r\n const ctx = tempGrad.getContext();\r\n const grad = ctx.createLinearGradient(0, 0, size, 0);\r\n\r\n colorMap.forEach((stop) => {\r\n grad.addColorStop(stop.location, stop.color.toHexString());\r\n });\r\n\r\n ctx.fillStyle = grad;\r\n ctx.fillRect(0, 0, size, 1);\r\n tempGrad.update();\r\n const buffer: number[] = [];\r\n const data: Uint8ClampedArray = ctx.getImageData(0, 0, size, 1).data;\r\n const rUnit = 1 / 255;\r\n for (let i = 0; i < data.length; i++) {\r\n buffer.push(data[i] * rUnit);\r\n }\r\n tempGrad.dispose();\r\n return buffer;\r\n }\r\n\r\n /** If SkeletonViewer scene scope. */\r\n private _scene: Scene;\r\n\r\n /** Gets or sets the color used to render the skeleton */\r\n public color: Color3 = Color3.White();\r\n\r\n /** Array of the points of the skeleton fo the line view. */\r\n private _debugLines = new Array<Array<Vector3>>();\r\n\r\n /** The SkeletonViewers Mesh. */\r\n private _debugMesh: Nullable<LinesMesh>;\r\n\r\n /** The local axes Meshes. */\r\n private _localAxes: Nullable<LinesMesh> = null;\r\n\r\n /** If SkeletonViewer is enabled. */\r\n private _isEnabled = true;\r\n\r\n /** If SkeletonViewer is ready. */\r\n private _ready: boolean;\r\n\r\n /** SkeletonViewer render observable. */\r\n private _obs: Nullable<Observer<Scene>> = null;\r\n\r\n /** The Utility Layer to render the gizmos in. */\r\n private _utilityLayer: Nullable<UtilityLayerRenderer>;\r\n\r\n private _boneIndices: Set<number>;\r\n\r\n /** Gets the Scene. */\r\n get scene(): Scene {\r\n return this._scene;\r\n }\r\n /** Gets the utilityLayer. */\r\n get utilityLayer(): Nullable<UtilityLayerRenderer> {\r\n return this._utilityLayer;\r\n }\r\n /** Checks Ready Status. */\r\n get isReady(): Boolean {\r\n return this._ready;\r\n }\r\n /** Sets Ready Status. */\r\n set ready(value: boolean) {\r\n this._ready = value;\r\n }\r\n /** Gets the debugMesh */\r\n get debugMesh(): Nullable<AbstractMesh> | Nullable<LinesMesh> {\r\n return this._debugMesh;\r\n }\r\n /** Sets the debugMesh */\r\n set debugMesh(value: Nullable<AbstractMesh> | Nullable<LinesMesh>) {\r\n this._debugMesh = value as any;\r\n }\r\n /** Gets the displayMode */\r\n get displayMode(): number {\r\n return this.options.displayMode || SkeletonViewer.DISPLAY_LINES;\r\n }\r\n /** Sets the displayMode */\r\n set displayMode(value: number) {\r\n if (value > SkeletonViewer.DISPLAY_SPHERE_AND_SPURS) {\r\n value = SkeletonViewer.DISPLAY_LINES;\r\n }\r\n this.options.displayMode = value;\r\n }\r\n /**\r\n * Creates a new SkeletonViewer\r\n * @param skeleton defines the skeleton to render\r\n * @param mesh defines the mesh attached to the skeleton\r\n * @param scene defines the hosting scene\r\n * @param autoUpdateBonesMatrices defines a boolean indicating if bones matrices must be forced to update before rendering (true by default)\r\n * @param renderingGroupId defines the rendering group id to use with the viewer\r\n * @param options All of the extra constructor options for the SkeletonViewer\r\n */\r\n constructor(\r\n /** defines the skeleton to render */\r\n public skeleton: Skeleton,\r\n /** defines the mesh attached to the skeleton */\r\n public mesh: AbstractMesh,\r\n /** The Scene scope*/\r\n scene: Scene,\r\n /** defines a boolean indicating if bones matrices must be forced to update before rendering (true by default) */\r\n public autoUpdateBonesMatrices: boolean = true,\r\n /** defines the rendering group id to use with the viewer */\r\n public renderingGroupId: number = 3,\r\n /** is the options for the viewer */\r\n public options: Partial<ISkeletonViewerOptions> = {}\r\n ) {\r\n this._scene = scene;\r\n this._ready = false;\r\n\r\n //Defaults\r\n options.pauseAnimations = options.pauseAnimations ?? true;\r\n options.returnToRest = options.returnToRest ?? false;\r\n options.displayMode = options.displayMode ?? SkeletonViewer.DISPLAY_LINES;\r\n options.displayOptions = options.displayOptions ?? {};\r\n options.displayOptions.midStep = options.displayOptions.midStep ?? 0.235;\r\n options.displayOptions.midStepFactor = options.displayOptions.midStepFactor ?? 0.155;\r\n options.displayOptions.sphereBaseSize = options.displayOptions.sphereBaseSize ?? 0.15;\r\n options.displayOptions.sphereScaleUnit = options.displayOptions.sphereScaleUnit ?? 2;\r\n options.displayOptions.sphereFactor = options.displayOptions.sphereFactor ?? 0.865;\r\n options.displayOptions.spurFollowsChild = options.displayOptions.spurFollowsChild ?? false;\r\n options.displayOptions.showLocalAxes = options.displayOptions.showLocalAxes ?? false;\r\n options.displayOptions.localAxesSize = options.displayOptions.localAxesSize ?? 0.075;\r\n options.computeBonesUsingShaders = options.computeBonesUsingShaders ?? true;\r\n options.useAllBones = options.useAllBones ?? true;\r\n\r\n const initialMeshBoneIndices = mesh.getVerticesData(VertexBuffer.MatricesIndicesKind);\r\n const initialMeshBoneWeights = mesh.getVerticesData(VertexBuffer.MatricesWeightsKind);\r\n this._boneIndices = new Set();\r\n\r\n if (!options.useAllBones) {\r\n if (initialMeshBoneIndices && initialMeshBoneWeights) {\r\n for (let i = 0; i < initialMeshBoneIndices.length; ++i) {\r\n const index = initialMeshBoneIndices[i],\r\n weight = initialMeshBoneWeights[i];\r\n if (weight !== 0) {\r\n this._boneIndices.add(index);\r\n }\r\n }\r\n }\r\n }\r\n\r\n /* Create Utility Layer */\r\n this._utilityLayer = new UtilityLayerRenderer(this._scene, false);\r\n this._utilityLayer.pickUtilitySceneFirst = false;\r\n this._utilityLayer.utilityLayerScene.autoClearDepthAndStencil = true;\r\n\r\n let displayMode = this.options.displayMode || 0;\r\n if (displayMode > SkeletonViewer.DISPLAY_SPHERE_AND_SPURS) {\r\n displayMode = SkeletonViewer.DISPLAY_LINES;\r\n }\r\n this.displayMode = displayMode;\r\n //Prep the Systems\r\n this.update();\r\n this._bindObs();\r\n }\r\n\r\n /** The Dynamic bindings for the update functions */\r\n private _bindObs(): void {\r\n switch (this.displayMode) {\r\n case SkeletonViewer.DISPLAY_LINES: {\r\n this._obs = this.scene.onBeforeRenderObservable.add(() => {\r\n this._displayLinesUpdate();\r\n });\r\n break;\r\n }\r\n }\r\n }\r\n\r\n /** Update the viewer to sync with current skeleton state, only used to manually update. */\r\n public update(): void {\r\n switch (this.displayMode) {\r\n case SkeletonViewer.DISPLAY_LINES: {\r\n this._displayLinesUpdate();\r\n break;\r\n }\r\n case SkeletonViewer.DISPLAY_SPHERES: {\r\n this._buildSpheresAndSpurs(true);\r\n break;\r\n }\r\n case SkeletonViewer.DISPLAY_SPHERE_AND_SPURS: {\r\n this._buildSpheresAndSpurs(false);\r\n break;\r\n }\r\n }\r\n\r\n this._buildLocalAxes();\r\n }\r\n\r\n /** Gets or sets a boolean indicating if the viewer is enabled */\r\n public set isEnabled(value: boolean) {\r\n if (this.isEnabled === value) {\r\n return;\r\n }\r\n\r\n this._isEnabled = value;\r\n\r\n if (this.debugMesh) {\r\n this.debugMesh.setEnabled(value);\r\n }\r\n\r\n if (value && !this._obs) {\r\n this._bindObs();\r\n } else if (!value && this._obs) {\r\n this.scene.onBeforeRenderObservable.remove(this._obs);\r\n this._obs = null;\r\n }\r\n }\r\n\r\n public get isEnabled(): boolean {\r\n return this._isEnabled;\r\n }\r\n\r\n private _getBonePosition(position: Vector3, bone: Bone, meshMat: Matrix, x = 0, y = 0, z = 0): void {\r\n const tmat = TmpVectors.Matrix[0];\r\n const parentBone = bone.getParent();\r\n tmat.copyFrom(bone.getLocalMatrix());\r\n\r\n if (x !== 0 || y !== 0 || z !== 0) {\r\n const tmat2 = TmpVectors.Matrix[1];\r\n Matrix.IdentityToRef(tmat2);\r\n tmat2.setTranslationFromFloats(x, y, z);\r\n tmat2.multiplyToRef(tmat, tmat);\r\n }\r\n\r\n if (parentBone) {\r\n tmat.multiplyToRef(parentBone.getAbsoluteTransform(), tmat);\r\n }\r\n\r\n tmat.multiplyToRef(meshMat, tmat);\r\n\r\n position.x = tmat.m[12];\r\n position.y = tmat.m[13];\r\n position.z = tmat.m[14];\r\n }\r\n\r\n private _getLinesForBonesWithLength(bones: Bone[], meshMat: Matrix): void {\r\n const len = bones.length;\r\n\r\n const mesh = this.mesh;\r\n const meshPos = mesh.position;\r\n let idx = 0;\r\n for (let i = 0; i < len; i++) {\r\n const bone = bones[i];\r\n let points = this._debugLines[idx];\r\n\r\n if (bone._index === -1 || (!this._boneIndices.has(bone.getIndex()) && !this.options.useAllBones)) {\r\n continue;\r\n }\r\n if (!points) {\r\n points = [Vector3.Zero(), Vector3.Zero()];\r\n this._debugLines[idx] = points;\r\n }\r\n this._getBonePosition(points[0], bone, meshMat);\r\n this._getBonePosition(points[1], bone, meshMat, 0, bone.length, 0);\r\n points[0].subtractInPlace(meshPos);\r\n points[1].subtractInPlace(meshPos);\r\n idx++;\r\n }\r\n }\r\n\r\n private _getLinesForBonesNoLength(bones: Bone[]): void {\r\n const len = bones.length;\r\n let boneNum = 0;\r\n\r\n const mesh = this.mesh;\r\n const meshPos = mesh.position;\r\n for (let i = len - 1; i >= 0; i--) {\r\n const childBone = bones[i];\r\n const parentBone = childBone.getParent();\r\n if (!parentBone || (!this._boneIndices.has(childBone.getIndex()) && !this.options.useAllBones)) {\r\n continue;\r\n }\r\n let points = this._debugLines[boneNum];\r\n if (!points) {\r\n points = [Vector3.Zero(), Vector3.Zero()];\r\n this._debugLines[boneNum] = points;\r\n }\r\n childBone.getAbsolutePositionToRef(mesh, points[0]);\r\n parentBone.getAbsolutePositionToRef(mesh, points[1]);\r\n points[0].subtractInPlace(meshPos);\r\n points[1].subtractInPlace(meshPos);\r\n boneNum++;\r\n }\r\n }\r\n\r\n /**\r\n * function to revert the mesh and scene back to the initial state.\r\n * @param animationState\r\n */\r\n private _revert(animationState: boolean): void {\r\n if (this.options.pauseAnimations) {\r\n this.scene.animationsEnabled = animationState;\r\n this.utilityLayer!.utilityLayerScene!.animationsEnabled = animationState;\r\n }\r\n }\r\n\r\n /**\r\n * function to get the absolute bind pose of a bone by accumulating transformations up the bone hierarchy.\r\n * @param bone\r\n * @param matrix\r\n */\r\n private _getAbsoluteBindPoseToRef(bone: Nullable<Bone>, matrix: Matrix) {\r\n if (bone === null || bone._index === -1) {\r\n matrix.copyFrom(Matrix.Identity());\r\n return;\r\n }\r\n\r\n this._getAbsoluteBindPoseToRef(bone.getParent(), matrix);\r\n bone.getBaseMatrix().multiplyToRef(matrix, matrix);\r\n return;\r\n }\r\n\r\n /**\r\n * function to build and bind sphere joint points and spur bone representations.\r\n * @param spheresOnly\r\n */\r\n private _buildSpheresAndSpurs(spheresOnly = true): void {\r\n if (this._debugMesh) {\r\n this._debugMesh.dispose();\r\n this._debugMesh = null;\r\n this.ready = false;\r\n }\r\n\r\n this._ready = false;\r\n const utilityLayerScene = this.utilityLayer?.utilityLayerScene!;\r\n const bones: Bone[] = this.skeleton.bones;\r\n const spheres: Array<[Mesh, Bone]> = [];\r\n const spurs: Mesh[] = [];\r\n\r\n const animationState = this.scene.animationsEnabled;\r\n\r\n try {\r\n if (this.options.pauseAnimations) {\r\n this.scene.animationsEnabled = false;\r\n utilityLayerScene.animationsEnabled = false;\r\n }\r\n\r\n if (this.options.returnToRest) {\r\n this.skeleton.returnToRest();\r\n }\r\n\r\n if (this.autoUpdateBonesMatrices) {\r\n this.skeleton.computeAbsoluteTransforms();\r\n }\r\n\r\n let longestBoneLength = Number.NEGATIVE_INFINITY;\r\n const displayOptions = this.options.displayOptions || {};\r\n\r\n for (let i = 0; i < bones.length; i++) {\r\n const bone = bones[i];\r\n\r\n if (bone._index === -1 || (!this._boneIndices.has(bone.getIndex()) && !this.options.useAllBones)) {\r\n continue;\r\n }\r\n\r\n const boneAbsoluteBindPoseTransform = new Matrix();\r\n this._getAbsoluteBindPoseToRef(bone, boneAbsoluteBindPoseTransform);\r\n\r\n const anchorPoint = new Vector3();\r\n\r\n boneAbsoluteBindPoseTransform.decompose(undefined, undefined, anchorPoint);\r\n\r\n bone.children.forEach((bc) => {\r\n const childAbsoluteBindPoseTransform: Matrix = new Matrix();\r\n bc.getBaseMatrix().multiplyToRef(boneAbsoluteBindPoseTransform, childAbsoluteBindPoseTransform);\r\n const childPoint = new Vector3();\r\n childAbsoluteBindPoseTransform.decompose(undefined, undefined, childPoint);\r\n const distanceFromParent = Vector3.Distance(anchorPoint, childPoint);\r\n if (distanceFromParent > longestBoneLength) {\r\n longestBoneLength = distanceFromParent;\r\n }\r\n if (spheresOnly) {\r\n return;\r\n }\r\n\r\n const dir = childPoint.clone().subtract(anchorPoint.clone());\r\n const h = dir.length();\r\n const up = dir.normalize().scale(h);\r\n\r\n const midStep = displayOptions.midStep || 0.165;\r\n const midStepFactor = displayOptions.midStepFactor || 0.215;\r\n\r\n const up0 = up.scale(midStep);\r\n\r\n const spur = ExtrudeShapeCustom(\r\n \"skeletonViewer\",\r\n {\r\n shape: [new Vector3(1, -1, 0), new Vector3(1, 1, 0), new Vector3(-1, 1, 0), new Vector3(-1, -1, 0), new Vector3(1, -1, 0)],\r\n path: [Vector3.Zero(), up0, up],\r\n scaleFunction: (i: number) => {\r\n switch (i) {\r\n case 0:\r\n case 2:\r\n return 0;\r\n case 1:\r\n return h * midStepFactor;\r\n }\r\n return 0;\r\n },\r\n sideOrientation: Mesh.DEFAULTSIDE,\r\n updatable: false,\r\n },\r\n utilityLayerScene\r\n );\r\n\r\n const numVertices = spur.getTotalVertices();\r\n const mwk: number[] = [],\r\n mik: number[] = [];\r\n\r\n for (let i = 0; i < numVertices; i++) {\r\n mwk.push(1, 0, 0, 0);\r\n\r\n // Select verts at end of spur (ie vert 10 to 14) and bind to child\r\n // bone if spurFollowsChild is enabled.\r\n if (displayOptions.spurFollowsChild && i > 9) {\r\n mik.push(bc.getIndex(), 0, 0, 0);\r\n } else {\r\n mik.push(bone.getIndex(), 0, 0, 0);\r\n }\r\n }\r\n\r\n spur.position = anchorPoint.clone();\r\n\r\n spur.setVerticesData(VertexBuffer.MatricesWeightsKind, mwk, false);\r\n spur.setVerticesData(VertexBuffer.MatricesIndicesKind, mik, false);\r\n spur.convertToFlatShadedMesh();\r\n\r\n spurs.push(spur);\r\n });\r\n\r\n const sphereBaseSize = displayOptions.sphereBaseSize || 0.2;\r\n\r\n const sphere = CreateSphere(\r\n \"skeletonViewer\",\r\n {\r\n segments: 6,\r\n diameter: sphereBaseSize,\r\n updatable: true,\r\n },\r\n utilityLayerScene\r\n );\r\n\r\n const numVertices = sphere.getTotalVertices();\r\n\r\n const mwk: number[] = [],\r\n mik: number[] = [];\r\n\r\n for (let i = 0; i < numVertices; i++) {\r\n mwk.push(1, 0, 0, 0);\r\n mik.push(bone.getIndex(), 0, 0, 0);\r\n }\r\n\r\n sphere.setVerticesData(VertexBuffer.MatricesWeightsKind, mwk, false);\r\n sphere.setVerticesData(VertexBuffer.MatricesIndicesKind, mik, false);\r\n\r\n sphere.position = anchorPoint.clone();\r\n spheres.push([sphere, bone]);\r\n }\r\n\r\n const sphereScaleUnit = displayOptions.sphereScaleUnit || 2;\r\n const sphereFactor = displayOptions.sphereFactor || 0.85;\r\n\r\n const meshes = [];\r\n for (let i = 0; i < spheres.length; i++) {\r\n const [sphere, bone] = spheres[i];\r\n const scale = 1 / (sphereScaleUnit / longestBoneLength);\r\n\r\n let _stepsOut = 0;\r\n let _b = bone;\r\n\r\n while (_b.getParent() && (_b.getParent() as Bone).getIndex() !== -1) {\r\n _stepsOut++;\r\n _b = _b.getParent() as Bone;\r\n }\r\n sphere.scaling.scaleInPlace(scale * Math.pow(sphereFactor, _stepsOut));\r\n meshes.push(sphere);\r\n }\r\n\r\n this.debugMesh = Mesh.MergeMeshes(meshes.concat(spurs), true, true);\r\n if (this.debugMesh) {\r\n this.debugMesh.renderingGroupId = this.renderingGroupId;\r\n this.debugMesh.skeleton = this.skeleton;\r\n this.debugMesh.parent = this.mesh;\r\n this.debugMesh.computeBonesUsingShaders = this.options.computeBonesUsingShaders ?? true;\r\n this.debugMesh.alwaysSelectAsActiveMesh = true;\r\n }\r\n\r\n const light = this.utilityLayer!._getSharedGizmoLight();\r\n light.intensity = 0.7;\r\n\r\n this._revert(animationState);\r\n this.ready = true;\r\n } catch (err) {\r\n console.error(err);\r\n this._revert(animationState);\r\n this.dispose();\r\n }\r\n }\r\n\r\n private _buildLocalAxes(): void {\r\n if (this._localAxes) {\r\n this._localAxes.dispose();\r\n }\r\n\r\n this._localAxes = null;\r\n\r\n const displayOptions = this.options.displayOptions || {};\r\n\r\n if (!displayOptions.showLocalAxes) {\r\n return;\r\n }\r\n\r\n const targetScene = this._utilityLayer!.utilityLayerScene;\r\n const size = displayOptions.localAxesSize || 0.075;\r\n const lines = [];\r\n const colors = [];\r\n const red = new Color4(1, 0, 0, 1);\r\n const green = new Color4(0, 1, 0, 1);\r\n const blue = new Color4(0, 0, 1, 1);\r\n\r\n const mwk: number[] = [];\r\n const mik: number[] = [];\r\n const vertsPerBone = 6;\r\n\r\n for (const i in this.skeleton.bones) {\r\n const bone = this.skeleton.bones[i];\r\n\r\n if (bone._index === -1 || (!this._boneIndices.has(bone.getIndex()) && !this.options.useAllBones)) {\r\n continue;\r\n }\r\n\r\n const boneAbsoluteBindPoseTransform = new Matrix();\r\n const boneOrigin = new Vector3();\r\n\r\n this._getAbsoluteBindPoseToRef(bone, boneAbsoluteBindPoseTransform);\r\n boneAbsoluteBindPoseTransform.decompose(undefined, TmpVectors.Quaternion[0], boneOrigin);\r\n\r\n const m = new Matrix();\r\n TmpVectors.Quaternion[0].toRotationMatrix(m);\r\n\r\n const boneAxisX = Vector3.TransformCoordinates(new Vector3(0 + size, 0, 0), m);\r\n const boneAxisY = Vector3.TransformCoordinates(new Vector3(0, 0 + size, 0), m);\r\n const boneAxisZ = Vector3.TransformCoordinates(new Vector3(0, 0, 0 + size), m);\r\n\r\n const axisX = [boneOrigin, boneOrigin.add(boneAxisX)];\r\n const axisY = [boneOrigin, boneOrigin.add(boneAxisY)];\r\n const axisZ = [boneOrigin, boneOrigin.add(boneAxisZ)];\r\n\r\n const linePoints = [axisX, axisY, axisZ];\r\n const lineColors = [\r\n [red, red],\r\n [green, green],\r\n [blue, blue],\r\n ];\r\n\r\n lines.push(...linePoints);\r\n colors.push(...lineColors);\r\n\r\n for (let j = 0; j < vertsPerBone; j++) {\r\n mwk.push(1, 0, 0, 0);\r\n mik.push(bone.getIndex(), 0, 0, 0);\r\n }\r\n }\r\n\r\n this._localAxes = CreateLineSystem(\"localAxes\", { lines: lines, colors: colors, updatable: true }, targetScene);\r\n this._localAxes.setVerticesData(VertexBuffer.MatricesWeightsKind, mwk, false);\r\n this._localAxes.setVerticesData(VertexBuffer.MatricesIndicesKind, mik, false);\r\n this._localAxes.skeleton = this.skeleton;\r\n this._localAxes.renderingGroupId = this.renderingGroupId + 1;\r\n this._localAxes.parent = this.mesh;\r\n this._localAxes.computeBonesUsingShaders = this.options.computeBonesUsingShaders ?? true;\r\n }\r\n\r\n /** Update the viewer to sync with current skeleton state, only used for the line display. */\r\n private _displayLinesUpdate(): void {\r\n if (!this._utilityLayer) {\r\n return;\r\n }\r\n\r\n if (this.autoUpdateBonesMatrices) {\r\n this.skeleton.computeAbsoluteTransforms();\r\n }\r\n\r\n if (this.skeleton.bones[0].length === undefined) {\r\n this._getLinesForBonesNoLength(this.skeleton.bones);\r\n } else {\r\n this._getLinesForBonesWithLength(this.skeleton.bones, this.mesh.getWorldMatrix());\r\n }\r\n\r\n const targetScene = this._utilityLayer.utilityLayerScene;\r\n\r\n if (targetScene) {\r\n if (!this._debugMesh) {\r\n this._debugMesh = CreateLineSystem(\"\", { lines: this._debugLines, updatable: true, instance: null }, targetScene);\r\n this._debugMesh.renderingGroupId = this.renderingGroupId;\r\n } else {\r\n CreateLineSystem(\"\", { lines: this._debugLines, updatable: true, instance: this._debugMesh }, targetScene);\r\n }\r\n this._debugMesh.position.copyFrom(this.mesh.position);\r\n this._debugMesh.color = this.color;\r\n }\r\n }\r\n /** Changes the displayMode of the skeleton viewer\r\n * @param mode The displayMode numerical value\r\n */\r\n public changeDisplayMode(mode: number): void {\r\n const wasEnabled = this.isEnabled ? true : false;\r\n if (this.displayMode !== mode) {\r\n this.isEnabled = false;\r\n if (this._debugMesh) {\r\n this._debugMesh.dispose();\r\n this._debugMesh = null;\r\n this.ready = false;\r\n }\r\n this.displayMode = mode;\r\n\r\n this.update();\r\n this._bindObs();\r\n this.isEnabled = wasEnabled;\r\n }\r\n }\r\n\r\n /** Sets a display option of the skeleton viewer\r\n *\r\n * | Option | Type | Default | Description |\r\n * | ---------------- | ------- | ------- | ----------- |\r\n * | midStep | float | 0.235 | A percentage between a bone and its child that determines the widest part of a spur. Only used when `displayMode` is set to `DISPLAY_SPHERE_AND_SPURS`. |\r\n * | midStepFactor | float | 0.15 | Mid step width expressed as a factor of the length. A value of 0.5 makes the spur width half of the spur length. Only used when `displayMode` is set to `DISPLAY_SPHERE_AND_SPURS`. |\r\n * | sphereBaseSize | float | 2 | Sphere base size. Only used when `displayMode` is set to `DISPLAY_SPHERE_AND_SPURS`. |\r\n * | sphereScaleUnit | float | 0.865 | Sphere scale factor used to scale spheres in relation to the longest bone. Only used when `displayMode` is set to `DISPLAY_SPHERE_AND_SPURS`. |\r\n * | spurFollowsChild | boolean | false | Whether a spur should attach its far end to the child bone. |\r\n * | showLocalAxes | boolean | false | Displays local axes on all bones. |\r\n * | localAxesSize | float | 0.075 | Determines the length of each local axis. |\r\n *\r\n * @param option String of the option name\r\n * @param value The numerical option value\r\n */\r\n public changeDisplayOptions(option: string, value: number): void {\r\n const wasEnabled = this.isEnabled ? true : false;\r\n (this.options.displayOptions as any)[option] = value;\r\n this.isEnabled = false;\r\n if (this._debugMesh) {\r\n this._debugMesh.dispose();\r\n this._debugMesh = null;\r\n this.ready = false;\r\n }\r\n this.update();\r\n this._bindObs();\r\n this.isEnabled = wasEnabled;\r\n }\r\n\r\n /** Release associated resources */\r\n public dispose(): void {\r\n this.isEnabled = false;\r\n if (this._debugMesh) {\r\n this._debugMesh.dispose();\r\n this._debugMesh = null;\r\n }\r\n\r\n if (this._utilityLayer) {\r\n this._utilityLayer.dispose();\r\n this._utilityLayer = null;\r\n }\r\n\r\n this.ready = false;\r\n }\r\n}\r\n"]}
|
|
@@ -11,12 +11,7 @@ ThinEngine.prototype._createDepthStencilCubeTexture = function (size, options, r
|
|
|
11
11
|
Logger.Error("Depth cube texture is not supported by WebGL 1.");
|
|
12
12
|
return internalTexture;
|
|
13
13
|
}
|
|
14
|
-
const internalOptions = {
|
|
15
|
-
bilinearFiltering: false,
|
|
16
|
-
comparisonFunction: 0,
|
|
17
|
-
generateStencil: false,
|
|
18
|
-
...options,
|
|
19
|
-
};
|
|
14
|
+
const internalOptions = Object.assign({ bilinearFiltering: false, comparisonFunction: 0, generateStencil: false }, options);
|
|
20
15
|
const gl = this._gl;
|
|
21
16
|
this._bindTextureDirectly(gl.TEXTURE_CUBE_MAP, internalTexture, true);
|
|
22
17
|
this._setupDepthStencilTexture(internalTexture, size, internalOptions.generateStencil, internalOptions.bilinearFiltering, internalOptions.comparisonFunction);
|