@babylonjs/core 6.41.0 → 6.41.2
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/Animations/animatable.js +1 -2
- package/Animations/animatable.js.map +1 -1
- package/Animations/animation.js +4 -6
- package/Animations/animation.js.map +1 -1
- package/Animations/animationGroup.js +3 -3
- package/Animations/animationGroup.js.map +1 -1
- package/Animations/runtimeAnimation.js +1 -1
- package/Animations/runtimeAnimation.js.map +1 -1
- package/Audio/audioEngine.js +3 -5
- package/Audio/audioEngine.js.map +1 -1
- package/Audio/audioSceneComponent.js +1 -2
- package/Audio/audioSceneComponent.js.map +1 -1
- package/Audio/sound.js +48 -74
- package/Audio/sound.js.map +1 -1
- package/Audio/soundTrack.js +6 -12
- package/Audio/soundTrack.js.map +1 -1
- package/BakedVertexAnimation/bakedVertexAnimationManager.js +1 -2
- package/BakedVertexAnimation/bakedVertexAnimationManager.js.map +1 -1
- package/Behaviors/Cameras/autoRotationBehavior.js +1 -1
- package/Behaviors/Cameras/autoRotationBehavior.js.map +1 -1
- package/Behaviors/Meshes/fadeInOutBehavior.js +2 -4
- package/Behaviors/Meshes/fadeInOutBehavior.js.map +1 -1
- package/Behaviors/Meshes/followBehavior.js +1 -2
- package/Behaviors/Meshes/followBehavior.js.map +1 -1
- package/Behaviors/Meshes/handConstraintBehavior.js +2 -2
- package/Behaviors/Meshes/handConstraintBehavior.js.map +1 -1
- package/Bones/bone.js +4 -6
- package/Bones/bone.js.map +1 -1
- package/Bones/skeleton.js +2 -3
- package/Bones/skeleton.js.map +1 -1
- package/Buffers/buffer.align.js +5 -8
- package/Buffers/buffer.align.js.map +1 -1
- package/Buffers/buffer.js +6 -8
- package/Buffers/buffer.js.map +1 -1
- package/Cameras/Inputs/BaseCameraPointersInput.js +3 -4
- package/Cameras/Inputs/BaseCameraPointersInput.js.map +1 -1
- package/Cameras/Inputs/arcRotateCameraMouseWheelInput.js +3 -5
- package/Cameras/Inputs/arcRotateCameraMouseWheelInput.js.map +1 -1
- package/Cameras/Inputs/flyCameraMouseInput.js +2 -2
- package/Cameras/Inputs/flyCameraMouseInput.js.map +1 -1
- package/Cameras/Inputs/freeCameraMouseInput.js +2 -2
- package/Cameras/Inputs/freeCameraMouseInput.js.map +1 -1
- package/Cameras/arcRotateCamera.js +1 -2
- package/Cameras/arcRotateCamera.js.map +1 -1
- package/Cameras/camera.d.ts +5 -0
- package/Cameras/camera.js +18 -11
- package/Cameras/camera.js.map +1 -1
- package/Collisions/pickingInfo.js +1 -1
- package/Collisions/pickingInfo.js.map +1 -1
- package/Compute/computeEffect.js +5 -8
- package/Compute/computeEffect.js.map +1 -1
- package/Compute/computeShader.js +12 -9
- package/Compute/computeShader.js.map +1 -1
- package/Culling/Octrees/octreeSceneComponent.js +1 -2
- package/Culling/Octrees/octreeSceneComponent.js.map +1 -1
- package/Culling/boundingBox.js +2 -3
- package/Culling/boundingBox.js.map +1 -1
- package/Culling/ray.d.ts +6 -1
- package/Culling/ray.js +9 -4
- package/Culling/ray.js.map +1 -1
- package/Debug/debugLayer.js +4 -1
- package/Debug/debugLayer.js.map +1 -1
- package/Debug/directionalLightFrustumViewer.js +7 -9
- package/Debug/directionalLightFrustumViewer.js.map +1 -1
- package/Debug/physicsViewer.js +5 -7
- package/Debug/physicsViewer.js.map +1 -1
- package/Debug/rayHelper.js +1 -2
- package/Debug/rayHelper.js.map +1 -1
- package/Debug/skeletonViewer.js +26 -31
- package/Debug/skeletonViewer.js.map +1 -1
- package/Decorators/nodeDecorator.js +1 -1
- package/Decorators/nodeDecorator.js.map +1 -1
- package/DeviceInput/InputDevices/deviceSourceManager.js +3 -5
- package/DeviceInput/InputDevices/deviceSourceManager.js.map +1 -1
- package/DeviceInput/eventFactory.js +1 -1
- package/DeviceInput/eventFactory.js.map +1 -1
- package/DeviceInput/internalDeviceSourceManager.js +1 -2
- package/DeviceInput/internalDeviceSourceManager.js.map +1 -1
- package/DeviceInput/webDeviceInputSystem.js +9 -12
- package/DeviceInput/webDeviceInputSystem.js.map +1 -1
- package/Engines/Extensions/engine.cubeTexture.js +6 -1
- package/Engines/Extensions/engine.cubeTexture.js.map +1 -1
- package/Engines/Extensions/engine.multiRender.js +3 -4
- package/Engines/Extensions/engine.multiRender.js.map +1 -1
- package/Engines/Extensions/engine.rawTexture.js +4 -4
- package/Engines/Extensions/engine.rawTexture.js.map +1 -1
- package/Engines/Extensions/engine.readTexture.js +2 -3
- package/Engines/Extensions/engine.readTexture.js.map +1 -1
- package/Engines/Extensions/engine.renderTarget.js +9 -5
- package/Engines/Extensions/engine.renderTarget.js.map +1 -1
- package/Engines/Extensions/engine.renderTargetCube.js +9 -1
- package/Engines/Extensions/engine.renderTargetCube.js.map +1 -1
- package/Engines/Extensions/engine.views.js +1 -2
- package/Engines/Extensions/engine.views.js.map +1 -1
- package/Engines/Processors/shaderCodeNode.js +6 -7
- package/Engines/Processors/shaderCodeNode.js.map +1 -1
- package/Engines/Processors/shaderProcessor.js +6 -11
- package/Engines/Processors/shaderProcessor.js.map +1 -1
- package/Engines/WebGL/webGLHardwareTexture.js +1 -2
- package/Engines/WebGL/webGLHardwareTexture.js.map +1 -1
- package/Engines/WebGL/webGLRenderTargetWrapper.js +3 -5
- package/Engines/WebGL/webGLRenderTargetWrapper.js.map +1 -1
- package/Engines/WebGPU/Extensions/engine.cubeTexture.js +9 -2
- package/Engines/WebGPU/Extensions/engine.cubeTexture.js.map +1 -1
- package/Engines/WebGPU/Extensions/engine.dynamicTexture.js +1 -2
- package/Engines/WebGPU/Extensions/engine.dynamicTexture.js.map +1 -1
- package/Engines/WebGPU/Extensions/engine.multiRender.js +5 -6
- package/Engines/WebGPU/Extensions/engine.multiRender.js.map +1 -1
- package/Engines/WebGPU/Extensions/engine.query.js +2 -4
- package/Engines/WebGPU/Extensions/engine.query.js.map +1 -1
- package/Engines/WebGPU/Extensions/engine.rawTexture.js +4 -4
- package/Engines/WebGPU/Extensions/engine.rawTexture.js.map +1 -1
- package/Engines/WebGPU/Extensions/engine.renderTarget.js +11 -5
- package/Engines/WebGPU/Extensions/engine.renderTarget.js.map +1 -1
- package/Engines/WebGPU/Extensions/engine.renderTargetCube.js +11 -3
- package/Engines/WebGPU/Extensions/engine.renderTargetCube.js.map +1 -1
- package/Engines/WebGPU/Extensions/engine.storageBuffer.js +2 -3
- package/Engines/WebGPU/Extensions/engine.storageBuffer.js.map +1 -1
- package/Engines/WebGPU/Extensions/engine.textureSampler.js +1 -2
- package/Engines/WebGPU/Extensions/engine.textureSampler.js.map +1 -1
- package/Engines/WebGPU/Extensions/engine.videoTexture.js +1 -2
- package/Engines/WebGPU/Extensions/engine.videoTexture.js.map +1 -1
- package/Engines/WebGPU/webgpuBufferManager.js +1 -1
- package/Engines/WebGPU/webgpuBufferManager.js.map +1 -1
- package/Engines/WebGPU/webgpuCacheBindGroups.js +6 -7
- package/Engines/WebGPU/webgpuCacheBindGroups.js.map +1 -1
- package/Engines/WebGPU/webgpuCacheRenderPipeline.js +15 -20
- package/Engines/WebGPU/webgpuCacheRenderPipeline.js.map +1 -1
- package/Engines/WebGPU/webgpuCacheSampler.js +10 -5
- package/Engines/WebGPU/webgpuCacheSampler.js.map +1 -1
- package/Engines/WebGPU/webgpuClearQuad.js +2 -3
- package/Engines/WebGPU/webgpuClearQuad.js.map +1 -1
- package/Engines/WebGPU/webgpuComputePipelineContext.js +1 -2
- package/Engines/WebGPU/webgpuComputePipelineContext.js.map +1 -1
- package/Engines/WebGPU/webgpuDepthCullingState.js +2 -2
- package/Engines/WebGPU/webgpuDepthCullingState.js.map +1 -1
- package/Engines/WebGPU/webgpuDrawContext.js +1 -2
- package/Engines/WebGPU/webgpuDrawContext.js.map +1 -1
- package/Engines/WebGPU/webgpuHardwareTexture.js +4 -6
- package/Engines/WebGPU/webgpuHardwareTexture.js.map +1 -1
- package/Engines/WebGPU/webgpuMaterialContext.js +2 -3
- package/Engines/WebGPU/webgpuMaterialContext.js.map +1 -1
- package/Engines/WebGPU/webgpuOcclusionQuery.js +3 -5
- package/Engines/WebGPU/webgpuOcclusionQuery.js.map +1 -1
- package/Engines/WebGPU/webgpuPipelineContext.js +2 -4
- package/Engines/WebGPU/webgpuPipelineContext.js.map +1 -1
- package/Engines/WebGPU/webgpuQuerySet.js +1 -1
- package/Engines/WebGPU/webgpuQuerySet.js.map +1 -1
- package/Engines/WebGPU/webgpuShaderProcessingContext.js +2 -4
- package/Engines/WebGPU/webgpuShaderProcessingContext.js.map +1 -1
- package/Engines/WebGPU/webgpuShaderProcessorsGLSL.js +2 -4
- package/Engines/WebGPU/webgpuShaderProcessorsGLSL.js.map +1 -1
- package/Engines/WebGPU/webgpuShaderProcessorsWGSL.js +5 -4
- package/Engines/WebGPU/webgpuShaderProcessorsWGSL.js.map +1 -1
- package/Engines/WebGPU/webgpuStencilStateComposer.js +1 -2
- package/Engines/WebGPU/webgpuStencilStateComposer.js.map +1 -1
- package/Engines/WebGPU/webgpuTextureManager.js +40 -43
- package/Engines/WebGPU/webgpuTextureManager.js.map +1 -1
- package/Engines/WebGPU/webgpuTimestampQuery.js +12 -7
- package/Engines/WebGPU/webgpuTimestampQuery.js.map +1 -1
- package/Engines/WebGPU/webgpuTintWASM.js +4 -1
- package/Engines/WebGPU/webgpuTintWASM.js.map +1 -1
- package/Engines/engine.js +4 -7
- package/Engines/engine.js.map +1 -1
- package/Engines/nativeEngine.js +16 -22
- package/Engines/nativeEngine.js.map +1 -1
- package/Engines/nullEngine.js +9 -1
- package/Engines/nullEngine.js.map +1 -1
- package/Engines/renderTargetWrapper.js +11 -16
- package/Engines/renderTargetWrapper.js.map +1 -1
- package/Engines/thinEngine.js +32 -44
- package/Engines/thinEngine.js.map +1 -1
- package/Engines/webgpuEngine.js +77 -95
- package/Engines/webgpuEngine.js.map +1 -1
- package/FlowGraph/Blocks/Event/flowGraphMeshPickEventBlock.js +2 -3
- package/FlowGraph/Blocks/Event/flowGraphMeshPickEventBlock.js.map +1 -1
- package/FlowGraph/Blocks/Execution/Animation/flowGraphPlayAnimationBlock.js +3 -6
- package/FlowGraph/Blocks/Execution/Animation/flowGraphPlayAnimationBlock.js.map +1 -1
- package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphCounterBlock.js +1 -2
- package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphCounterBlock.js.map +1 -1
- package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphMultiGateBlock.js +1 -2
- package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphMultiGateBlock.js.map +1 -1
- package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphWhileLoopBlock.js +2 -4
- package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphWhileLoopBlock.js.map +1 -1
- package/FlowGraph/flowGraph.js +1 -2
- package/FlowGraph/flowGraph.js.map +1 -1
- package/FlowGraph/flowGraphBlock.js +2 -4
- package/FlowGraph/flowGraphBlock.js.map +1 -1
- package/FlowGraph/flowGraphContext.js +1 -2
- package/FlowGraph/flowGraphContext.js.map +1 -1
- package/FlowGraph/flowGraphCoordinator.js +4 -7
- package/FlowGraph/flowGraphCoordinator.js.map +1 -1
- package/FlowGraph/flowGraphSignalConnection.js +1 -2
- package/FlowGraph/flowGraphSignalConnection.js.map +1 -1
- package/FlowGraph/serialization.js +2 -3
- package/FlowGraph/serialization.js.map +1 -1
- package/Gamepads/gamepadManager.js +1 -1
- package/Gamepads/gamepadManager.js.map +1 -1
- package/Gizmos/axisDragGizmo.js +2 -4
- package/Gizmos/axisDragGizmo.js.map +1 -1
- package/Gizmos/axisScaleGizmo.js +5 -8
- package/Gizmos/axisScaleGizmo.js.map +1 -1
- package/Gizmos/boundingBoxGizmo.js +1 -1
- package/Gizmos/boundingBoxGizmo.js.map +1 -1
- package/Gizmos/cameraGizmo.js +2 -3
- package/Gizmos/cameraGizmo.js.map +1 -1
- package/Gizmos/gizmo.js +4 -7
- package/Gizmos/gizmo.js.map +1 -1
- package/Gizmos/gizmoManager.js +3 -4
- package/Gizmos/gizmoManager.js.map +1 -1
- package/Gizmos/planeDragGizmo.js +2 -4
- package/Gizmos/planeDragGizmo.js.map +1 -1
- package/Gizmos/planeRotationGizmo.js +2 -4
- package/Gizmos/planeRotationGizmo.js.map +1 -1
- package/Helpers/environmentHelper.js +8 -2
- package/Helpers/environmentHelper.js.map +1 -1
- package/Helpers/videoDome.js +1 -2
- package/Helpers/videoDome.js.map +1 -1
- package/Inputs/scene.inputManager.js +8 -10
- package/Inputs/scene.inputManager.js.map +1 -1
- package/Layers/effectLayer.js +16 -10
- package/Layers/effectLayer.js.map +1 -1
- package/Layers/glowLayer.js +16 -6
- package/Layers/glowLayer.js.map +1 -1
- package/Layers/highlightLayer.js +12 -3
- package/Layers/highlightLayer.js.map +1 -1
- package/Layers/layer.js +1 -2
- package/Layers/layer.js.map +1 -1
- package/LensFlares/lensFlareSystem.js +1 -2
- package/LensFlares/lensFlareSystem.js.map +1 -1
- package/Lights/Shadows/cascadedShadowGenerator.js +21 -25
- package/Lights/Shadows/cascadedShadowGenerator.js.map +1 -1
- package/Lights/Shadows/shadowGenerator.js +18 -21
- package/Lights/Shadows/shadowGenerator.js.map +1 -1
- package/Lights/light.js +2 -4
- package/Lights/light.js.map +1 -1
- package/Lights/shadowLight.js +1 -1
- package/Lights/shadowLight.js.map +1 -1
- package/Loading/Plugins/babylonFileLoader.js +1 -2
- package/Loading/Plugins/babylonFileLoader.js.map +1 -1
- package/Loading/sceneLoader.js +1 -1
- package/Loading/sceneLoader.js.map +1 -1
- package/Materials/GreasedLine/greasedLinePluginMaterial.js +26 -32
- package/Materials/GreasedLine/greasedLinePluginMaterial.js.map +1 -1
- package/Materials/GreasedLine/greasedLineSimpleMaterial.js +22 -27
- package/Materials/GreasedLine/greasedLineSimpleMaterial.js.map +1 -1
- package/Materials/Node/Blocks/Dual/clipPlanesBlock.js +6 -7
- package/Materials/Node/Blocks/Dual/clipPlanesBlock.js.map +1 -1
- package/Materials/Node/Blocks/Dual/imageSourceBlock.js +1 -2
- package/Materials/Node/Blocks/Dual/imageSourceBlock.js.map +1 -1
- package/Materials/Node/Blocks/Dual/reflectionTextureBaseBlock.js +1 -2
- package/Materials/Node/Blocks/Dual/reflectionTextureBaseBlock.js.map +1 -1
- package/Materials/Node/Blocks/Dual/sceneDepthBlock.js +1 -1
- package/Materials/Node/Blocks/Dual/sceneDepthBlock.js.map +1 -1
- package/Materials/Node/Blocks/Dual/textureBlock.js +10 -16
- package/Materials/Node/Blocks/Dual/textureBlock.js.map +1 -1
- package/Materials/Node/Blocks/Fragment/TBNBlock.js +2 -3
- package/Materials/Node/Blocks/Fragment/TBNBlock.js.map +1 -1
- package/Materials/Node/Blocks/Fragment/fragmentOutputBlock.js +1 -2
- package/Materials/Node/Blocks/Fragment/fragmentOutputBlock.js.map +1 -1
- package/Materials/Node/Blocks/Fragment/imageProcessingBlock.js +2 -4
- package/Materials/Node/Blocks/Fragment/imageProcessingBlock.js.map +1 -1
- package/Materials/Node/Blocks/Input/inputBlock.js +1 -2
- package/Materials/Node/Blocks/Input/inputBlock.js.map +1 -1
- package/Materials/Node/Blocks/PBR/clearCoatBlock.js +24 -26
- package/Materials/Node/Blocks/PBR/clearCoatBlock.js.map +1 -1
- package/Materials/Node/Blocks/PBR/iridescenceBlock.js +3 -3
- package/Materials/Node/Blocks/PBR/iridescenceBlock.js.map +1 -1
- package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.js +45 -49
- package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.js.map +1 -1
- package/Materials/Node/Blocks/PBR/reflectionBlock.js +1 -2
- package/Materials/Node/Blocks/PBR/reflectionBlock.js.map +1 -1
- package/Materials/Node/Blocks/PBR/refractionBlock.js +1 -2
- package/Materials/Node/Blocks/PBR/refractionBlock.js.map +1 -1
- package/Materials/Node/Blocks/PBR/sheenBlock.js +13 -13
- package/Materials/Node/Blocks/PBR/sheenBlock.js.map +1 -1
- package/Materials/Node/Blocks/PBR/subSurfaceBlock.js +27 -28
- package/Materials/Node/Blocks/PBR/subSurfaceBlock.js.map +1 -1
- package/Materials/Node/Blocks/Teleport/teleportOutBlock.js +1 -2
- package/Materials/Node/Blocks/Teleport/teleportOutBlock.js.map +1 -1
- package/Materials/Node/Blocks/Vertex/instancesBlock.js +2 -2
- package/Materials/Node/Blocks/Vertex/instancesBlock.js.map +1 -1
- package/Materials/Node/Blocks/Vertex/morphTargetsBlock.js +43 -33
- package/Materials/Node/Blocks/Vertex/morphTargetsBlock.js.map +1 -1
- package/Materials/Node/Blocks/biPlanarBlock.js +1 -2
- package/Materials/Node/Blocks/biPlanarBlock.js.map +1 -1
- package/Materials/Node/Blocks/cloudBlock.js +2 -3
- package/Materials/Node/Blocks/cloudBlock.js.map +1 -1
- package/Materials/Node/Blocks/colorMergerBlock.js +4 -5
- package/Materials/Node/Blocks/colorMergerBlock.js.map +1 -1
- package/Materials/Node/Blocks/customBlock.js +4 -6
- package/Materials/Node/Blocks/customBlock.js.map +1 -1
- package/Materials/Node/Blocks/meshAttributeExistsBlock.js +2 -4
- package/Materials/Node/Blocks/meshAttributeExistsBlock.js.map +1 -1
- package/Materials/Node/Blocks/triPlanarBlock.js +14 -23
- package/Materials/Node/Blocks/triPlanarBlock.js.map +1 -1
- package/Materials/Node/Blocks/vectorMergerBlock.js +4 -5
- package/Materials/Node/Blocks/vectorMergerBlock.js.map +1 -1
- package/Materials/Node/nodeMaterial.js +16 -11
- package/Materials/Node/nodeMaterial.js.map +1 -1
- package/Materials/Node/nodeMaterialBlock.js +3 -4
- package/Materials/Node/nodeMaterialBlock.js.map +1 -1
- package/Materials/Node/nodeMaterialBuildState.js +1 -1
- package/Materials/Node/nodeMaterialBuildState.js.map +1 -1
- package/Materials/PBR/pbrBaseMaterial.js +25 -28
- package/Materials/PBR/pbrBaseMaterial.js.map +1 -1
- package/Materials/PBR/pbrClearCoatConfiguration.js +6 -9
- package/Materials/PBR/pbrClearCoatConfiguration.js.map +1 -1
- package/Materials/PBR/pbrIridescenceConfiguration.js +4 -7
- package/Materials/PBR/pbrIridescenceConfiguration.js.map +1 -1
- package/Materials/PBR/pbrSheenConfiguration.js +4 -7
- package/Materials/PBR/pbrSheenConfiguration.js.map +1 -1
- package/Materials/Textures/Loaders/envTextureLoader.js +2 -2
- package/Materials/Textures/Loaders/envTextureLoader.js.map +1 -1
- package/Materials/Textures/Packer/packer.js +13 -14
- package/Materials/Textures/Packer/packer.js.map +1 -1
- package/Materials/Textures/Procedurals/noiseProceduralTexture.js +1 -2
- package/Materials/Textures/Procedurals/noiseProceduralTexture.js.map +1 -1
- package/Materials/Textures/Procedurals/proceduralTexture.js +19 -11
- package/Materials/Textures/Procedurals/proceduralTexture.js.map +1 -1
- package/Materials/Textures/baseTexture.js +2 -4
- package/Materials/Textures/baseTexture.js.map +1 -1
- package/Materials/Textures/cubeTexture.js +7 -13
- package/Materials/Textures/cubeTexture.js.map +1 -1
- package/Materials/Textures/dynamicTexture.js +1 -2
- package/Materials/Textures/dynamicTexture.js.map +1 -1
- package/Materials/Textures/hdrCubeTexture.js +2 -4
- package/Materials/Textures/hdrCubeTexture.js.map +1 -1
- package/Materials/Textures/htmlElementTexture.js +5 -3
- package/Materials/Textures/htmlElementTexture.js.map +1 -1
- package/Materials/Textures/internalTexture.js +3 -5
- package/Materials/Textures/internalTexture.js.map +1 -1
- package/Materials/Textures/mirrorTexture.js +3 -6
- package/Materials/Textures/mirrorTexture.js.map +1 -1
- package/Materials/Textures/multiRenderTarget.js +5 -8
- package/Materials/Textures/multiRenderTarget.js.map +1 -1
- package/Materials/Textures/rawTexture.js +1 -1
- package/Materials/Textures/rawTexture.js.map +1 -1
- package/Materials/Textures/renderTargetTexture.js +22 -34
- package/Materials/Textures/renderTargetTexture.js.map +1 -1
- package/Materials/Textures/texture.js +16 -21
- package/Materials/Textures/texture.js.map +1 -1
- package/Materials/Textures/thinRenderTargetTexture.js +2 -4
- package/Materials/Textures/thinRenderTargetTexture.js.map +1 -1
- package/Materials/Textures/thinTexture.js +1 -1
- package/Materials/Textures/thinTexture.js.map +1 -1
- package/Materials/Textures/videoTexture.js +12 -10
- package/Materials/Textures/videoTexture.js.map +1 -1
- package/Materials/clipPlaneMaterialHelper.js +18 -21
- package/Materials/clipPlaneMaterialHelper.js.map +1 -1
- package/Materials/drawWrapper.js +2 -4
- package/Materials/drawWrapper.js.map +1 -1
- package/Materials/effect.d.ts +4 -0
- package/Materials/effect.js +18 -18
- package/Materials/effect.js.map +1 -1
- package/Materials/effectRenderer.js +2 -3
- package/Materials/effectRenderer.js.map +1 -1
- package/Materials/material.decalMapConfiguration.js +3 -3
- package/Materials/material.decalMapConfiguration.js.map +1 -1
- package/Materials/material.detailMapConfiguration.js +1 -2
- package/Materials/material.detailMapConfiguration.js.map +1 -1
- package/Materials/material.js +7 -4
- package/Materials/material.js.map +1 -1
- package/Materials/materialDefines.js +5 -6
- package/Materials/materialDefines.js.map +1 -1
- package/Materials/materialHelper.d.ts +1 -1
- package/Materials/materialHelper.js +3 -4
- package/Materials/materialHelper.js.map +1 -1
- package/Materials/materialPluginManager.js +3 -5
- package/Materials/materialPluginManager.js.map +1 -1
- package/Materials/meshDebugPluginMaterial.js +13 -14
- package/Materials/meshDebugPluginMaterial.js.map +1 -1
- package/Materials/multiMaterial.js +1 -2
- package/Materials/multiMaterial.js.map +1 -1
- package/Materials/shaderMaterial.d.ts +1 -1
- package/Materials/shaderMaterial.js +64 -32
- package/Materials/shaderMaterial.js.map +1 -1
- package/Materials/shadowDepthWrapper.js +24 -23
- package/Materials/shadowDepthWrapper.js.map +1 -1
- package/Materials/standardMaterial.js +10 -12
- package/Materials/standardMaterial.js.map +1 -1
- package/Materials/uniformBuffer.js +1 -1
- package/Materials/uniformBuffer.js.map +1 -1
- package/Maths/math.vector.js +1 -2
- package/Maths/math.vector.js.map +1 -1
- package/Meshes/Builders/decalBuilder.js +26 -29
- package/Meshes/Builders/decalBuilder.js.map +1 -1
- package/Meshes/Builders/greasedLineBuilder.js +16 -16
- package/Meshes/Builders/greasedLineBuilder.js.map +1 -1
- package/Meshes/Builders/groundBuilder.d.ts +5 -1
- package/Meshes/Builders/groundBuilder.js +13 -2
- package/Meshes/Builders/groundBuilder.js.map +1 -1
- package/Meshes/Builders/textBuilder.js +2 -3
- package/Meshes/Builders/textBuilder.js.map +1 -1
- package/Meshes/GaussianSplatting/gaussianSplattingMesh.d.ts +9 -1
- package/Meshes/GaussianSplatting/gaussianSplattingMesh.js +141 -12
- package/Meshes/GaussianSplatting/gaussianSplattingMesh.js.map +1 -1
- package/Meshes/GreasedLine/greasedLineBaseMesh.js +8 -11
- package/Meshes/GreasedLine/greasedLineBaseMesh.js.map +1 -1
- package/Meshes/GreasedLine/greasedLineMesh.js +3 -5
- package/Meshes/GreasedLine/greasedLineMesh.js.map +1 -1
- package/Meshes/GreasedLine/greasedLineRibbonMesh.js +13 -18
- package/Meshes/GreasedLine/greasedLineRibbonMesh.js.map +1 -1
- package/Meshes/Node/Blocks/Teleport/teleportOutBlock.js +1 -2
- package/Meshes/Node/Blocks/Teleport/teleportOutBlock.js.map +1 -1
- package/Meshes/Node/Blocks/geometryTrigonometryBlock.d.ts +18 -18
- package/Meshes/Node/Blocks/geometryTrigonometryBlock.js +18 -18
- package/Meshes/Node/Blocks/geometryTrigonometryBlock.js.map +1 -1
- package/Meshes/Node/nodeGeometry.js +6 -3
- package/Meshes/Node/nodeGeometry.js.map +1 -1
- package/Meshes/Node/nodeGeometryBlock.js +1 -1
- package/Meshes/Node/nodeGeometryBlock.js.map +1 -1
- package/Meshes/Node/nodeGeometryBlockConnectionPoint.js +1 -2
- package/Meshes/Node/nodeGeometryBlockConnectionPoint.js.map +1 -1
- package/Meshes/Node/nodeGeometryBuildState.js +1 -2
- package/Meshes/Node/nodeGeometryBuildState.js.map +1 -1
- package/Meshes/abstractMesh.js +6 -10
- package/Meshes/abstractMesh.js.map +1 -1
- package/Meshes/csg.js +1 -2
- package/Meshes/csg.js.map +1 -1
- package/Meshes/geometry.js +1 -1
- package/Meshes/geometry.js.map +1 -1
- package/Meshes/instancedMesh.js +5 -10
- package/Meshes/instancedMesh.js.map +1 -1
- package/Meshes/mesh.js +13 -22
- package/Meshes/mesh.js.map +1 -1
- package/Meshes/mesh.vertexData.js +3 -4
- package/Meshes/mesh.vertexData.js.map +1 -1
- package/Meshes/meshUVSpaceRenderer.js +18 -15
- package/Meshes/meshUVSpaceRenderer.js.map +1 -1
- package/Meshes/subMesh.js +8 -14
- package/Meshes/subMesh.js.map +1 -1
- package/Meshes/thinInstanceMesh.js +12 -18
- package/Meshes/thinInstanceMesh.js.map +1 -1
- package/Meshes/trailMesh.js +2 -3
- package/Meshes/trailMesh.js.map +1 -1
- package/Misc/HighDynamicRange/cubemapToSphericalPolynomial.js +1 -2
- package/Misc/HighDynamicRange/cubemapToSphericalPolynomial.js.map +1 -1
- package/Misc/PerformanceViewer/performanceViewerCollectionStrategies.js +9 -14
- package/Misc/PerformanceViewer/performanceViewerCollectionStrategies.js.map +1 -1
- package/Misc/PerformanceViewer/performanceViewerCollector.js +2 -3
- package/Misc/PerformanceViewer/performanceViewerCollector.js.map +1 -1
- package/Misc/arrayTools.js +1 -1
- package/Misc/arrayTools.js.map +1 -1
- package/Misc/basis.js +2 -3
- package/Misc/basis.js.map +1 -1
- package/Misc/dataStorage.js +1 -1
- package/Misc/dataStorage.js.map +1 -1
- package/Misc/deepCopier.js +1 -1
- package/Misc/deepCopier.js.map +1 -1
- package/Misc/environmentTextureTools.js +3 -4
- package/Misc/environmentTextureTools.js.map +1 -1
- package/Misc/equirectangularCapture.js +2 -3
- package/Misc/equirectangularCapture.js.map +1 -1
- package/Misc/fileTools.js +4 -4
- package/Misc/fileTools.js.map +1 -1
- package/Misc/greasedLineTools.js +3 -5
- package/Misc/greasedLineTools.js.map +1 -1
- package/Misc/logger.js +1 -2
- package/Misc/logger.js.map +1 -1
- package/Misc/minMaxReducer.js +2 -3
- package/Misc/minMaxReducer.js.map +1 -1
- package/Misc/pressureObserverWrapper.js +5 -8
- package/Misc/pressureObserverWrapper.js.map +1 -1
- package/Misc/sceneRecorder.js +1 -1
- package/Misc/sceneRecorder.js.map +1 -1
- package/Misc/screenshotTools.js +1 -1
- package/Misc/screenshotTools.js.map +1 -1
- package/Misc/textureTools.js +5 -5
- package/Misc/textureTools.js.map +1 -1
- package/Misc/timer.js +3 -5
- package/Misc/timer.js.map +1 -1
- package/Misc/tools.d.ts +3 -2
- package/Misc/tools.js +6 -5
- package/Misc/tools.js.map +1 -1
- package/Misc/trajectoryClassifier.js +3 -3
- package/Misc/trajectoryClassifier.js.map +1 -1
- package/Misc/videoRecorder.js +6 -4
- package/Misc/videoRecorder.js.map +1 -1
- package/Misc/virtualJoystick.js +4 -1
- package/Misc/virtualJoystick.js.map +1 -1
- package/Morph/morphTargetManager.js +1 -2
- package/Morph/morphTargetManager.js.map +1 -1
- package/Particles/EmitterTypes/meshParticleEmitter.js +1 -2
- package/Particles/EmitterTypes/meshParticleEmitter.js.map +1 -1
- package/Particles/baseParticleSystem.d.ts +4 -0
- package/Particles/baseParticleSystem.js +4 -0
- package/Particles/baseParticleSystem.js.map +1 -1
- package/Particles/computeShaderParticleSystem.js +3 -6
- package/Particles/computeShaderParticleSystem.js.map +1 -1
- package/Particles/gpuParticleSystem.d.ts +2 -2
- package/Particles/gpuParticleSystem.js +30 -20
- package/Particles/gpuParticleSystem.js.map +1 -1
- package/Particles/particleSystem.d.ts +3 -2
- package/Particles/particleSystem.js +33 -30
- package/Particles/particleSystem.js.map +1 -1
- package/Particles/particleSystemComponent.js +2 -3
- package/Particles/particleSystemComponent.js.map +1 -1
- package/Particles/pointsCloudSystem.js +5 -8
- package/Particles/pointsCloudSystem.js.map +1 -1
- package/Particles/solidParticleSystem.js +5 -7
- package/Particles/solidParticleSystem.js.map +1 -1
- package/Particles/webgl2ParticleSystem.js +1 -2
- package/Particles/webgl2ParticleSystem.js.map +1 -1
- package/Physics/castingResult.js +1 -1
- package/Physics/castingResult.js.map +1 -1
- package/Physics/joinedPhysicsEngineComponent.js +2 -2
- package/Physics/joinedPhysicsEngineComponent.js.map +1 -1
- package/Physics/physicsHelper.js +19 -21
- package/Physics/physicsHelper.js.map +1 -1
- package/Physics/v2/IPhysicsEnginePlugin.d.ts +20 -0
- package/Physics/v2/IPhysicsEnginePlugin.js.map +1 -1
- package/Physics/v2/Plugins/havokPlugin.js +48 -35
- package/Physics/v2/Plugins/havokPlugin.js.map +1 -1
- package/Physics/v2/physicsAggregate.js +10 -12
- package/Physics/v2/physicsAggregate.js.map +1 -1
- package/Physics/v2/physicsBody.js +2 -4
- package/Physics/v2/physicsBody.js.map +1 -1
- package/Physics/v2/physicsShape.js +1 -2
- package/Physics/v2/physicsShape.js.map +1 -1
- package/Physics/v2/ragdoll.js +6 -8
- package/Physics/v2/ragdoll.js.map +1 -1
- package/PostProcesses/RenderPipeline/Pipelines/ssao2RenderingPipeline.js +6 -8
- package/PostProcesses/RenderPipeline/Pipelines/ssao2RenderingPipeline.js.map +1 -1
- package/PostProcesses/RenderPipeline/Pipelines/ssrRenderingPipeline.js +14 -22
- package/PostProcesses/RenderPipeline/Pipelines/ssrRenderingPipeline.js.map +1 -1
- package/PostProcesses/colorCorrectionPostProcess.js +1 -1
- package/PostProcesses/colorCorrectionPostProcess.js.map +1 -1
- package/PostProcesses/postProcess.js +28 -34
- package/PostProcesses/postProcess.js.map +1 -1
- package/PostProcesses/postProcessManager.js +4 -6
- package/PostProcesses/postProcessManager.js.map +1 -1
- package/PostProcesses/screenSpaceReflectionPostProcess.js +2 -2
- package/PostProcesses/screenSpaceReflectionPostProcess.js.map +1 -1
- package/PostProcesses/volumetricLightScatteringPostProcess.js +4 -7
- package/PostProcesses/volumetricLightScatteringPostProcess.js.map +1 -1
- package/PostProcesses/vrMultiviewToSingleviewPostProcess.js +1 -1
- package/PostProcesses/vrMultiviewToSingleviewPostProcess.js.map +1 -1
- package/Probes/reflectionProbe.js +2 -4
- package/Probes/reflectionProbe.js.map +1 -1
- package/Rendering/GlobalIllumination/giRSMManager.js +22 -19
- package/Rendering/GlobalIllumination/giRSMManager.js.map +1 -1
- package/Rendering/boundingBoxRenderer.js +2 -3
- package/Rendering/boundingBoxRenderer.js.map +1 -1
- package/Rendering/depthPeelingRenderer.js +2 -4
- package/Rendering/depthPeelingRenderer.js.map +1 -1
- package/Rendering/depthPeelingSceneComponent.js +2 -4
- package/Rendering/depthPeelingSceneComponent.js.map +1 -1
- package/Rendering/depthRenderer.js +10 -13
- package/Rendering/depthRenderer.js.map +1 -1
- package/Rendering/edgesRenderer.js +8 -11
- package/Rendering/edgesRenderer.js.map +1 -1
- package/Rendering/fluidRenderer/fluidRenderer.js +6 -11
- package/Rendering/fluidRenderer/fluidRenderer.js.map +1 -1
- package/Rendering/fluidRenderer/fluidRenderingObject.js +3 -5
- package/Rendering/fluidRenderer/fluidRenderingObject.js.map +1 -1
- package/Rendering/fluidRenderer/fluidRenderingObjectCustomParticles.js +2 -4
- package/Rendering/fluidRenderer/fluidRenderingObjectCustomParticles.js.map +1 -1
- package/Rendering/fluidRenderer/fluidRenderingTargetRenderer.js +30 -36
- package/Rendering/fluidRenderer/fluidRenderingTargetRenderer.js.map +1 -1
- package/Rendering/fluidRenderer/fluidRenderingTextures.js +5 -7
- package/Rendering/fluidRenderer/fluidRenderingTextures.js.map +1 -1
- package/Rendering/geometryBufferRenderer.js +3 -2
- package/Rendering/geometryBufferRenderer.js.map +1 -1
- package/Rendering/outlineRenderer.js +5 -4
- package/Rendering/outlineRenderer.js.map +1 -1
- package/Rendering/prePassRenderer.js +3 -6
- package/Rendering/prePassRenderer.js.map +1 -1
- package/Rendering/reflectiveShadowMap.d.ts +1 -0
- package/Rendering/reflectiveShadowMap.js +5 -5
- package/Rendering/reflectiveShadowMap.js.map +1 -1
- package/Shaders/color.fragment.d.ts +2 -0
- package/Shaders/color.fragment.js +4 -0
- package/Shaders/color.fragment.js.map +1 -1
- package/Shaders/color.vertex.d.ts +2 -0
- package/Shaders/color.vertex.js +7 -0
- package/Shaders/color.vertex.js.map +1 -1
- package/Shaders/gpuRenderParticles.fragment.d.ts +2 -0
- package/Shaders/gpuRenderParticles.fragment.js +4 -0
- package/Shaders/gpuRenderParticles.fragment.js.map +1 -1
- package/Shaders/gpuRenderParticles.vertex.d.ts +2 -0
- package/Shaders/gpuRenderParticles.vertex.js +5 -1
- package/Shaders/gpuRenderParticles.vertex.js.map +1 -1
- package/Shaders/particles.fragment.d.ts +2 -0
- package/Shaders/particles.fragment.js +4 -0
- package/Shaders/particles.fragment.js.map +1 -1
- package/Shaders/particles.vertex.d.ts +2 -0
- package/Shaders/particles.vertex.js +5 -1
- package/Shaders/particles.vertex.js.map +1 -1
- package/Sprites/spriteManager.js +1 -2
- package/Sprites/spriteManager.js.map +1 -1
- package/Sprites/spriteRenderer.js +5 -7
- package/Sprites/spriteRenderer.js.map +1 -1
- package/States/stencilStateComposer.js +2 -4
- package/States/stencilStateComposer.js.map +1 -1
- package/XR/features/WebXRAbstractFeature.js +6 -2
- package/XR/features/WebXRAbstractFeature.js.map +1 -1
- package/XR/features/WebXRAnchorSystem.js +1 -2
- package/XR/features/WebXRAnchorSystem.js.map +1 -1
- package/XR/features/WebXRControllerMovement.js +6 -7
- package/XR/features/WebXRControllerMovement.js.map +1 -1
- package/XR/features/WebXRControllerPhysics.js +17 -10
- package/XR/features/WebXRControllerPhysics.js.map +1 -1
- package/XR/features/WebXRControllerPointerSelection.js +1 -2
- package/XR/features/WebXRControllerPointerSelection.js.map +1 -1
- package/XR/features/WebXRControllerTeleportation.d.ts +1 -0
- package/XR/features/WebXRControllerTeleportation.js +6 -3
- package/XR/features/WebXRControllerTeleportation.js.map +1 -1
- package/XR/features/WebXRDepthSensing.js +3 -5
- package/XR/features/WebXRDepthSensing.js.map +1 -1
- package/XR/features/WebXRHandTracking.d.ts +1 -0
- package/XR/features/WebXRHandTracking.js +31 -28
- package/XR/features/WebXRHandTracking.js.map +1 -1
- package/XR/features/WebXRLayers.js +9 -11
- package/XR/features/WebXRLayers.js.map +1 -1
- package/XR/features/WebXRLightEstimation.js +3 -6
- package/XR/features/WebXRLightEstimation.js.map +1 -1
- package/XR/features/WebXRMeshDetector.js +2 -4
- package/XR/features/WebXRMeshDetector.js.map +1 -1
- package/XR/features/WebXRNearInteraction.js +21 -18
- package/XR/features/WebXRNearInteraction.js.map +1 -1
- package/XR/features/WebXRPlaneDetector.js +1 -2
- package/XR/features/WebXRPlaneDetector.js.map +1 -1
- package/XR/features/WebXRRawCameraAccess.js +2 -3
- package/XR/features/WebXRRawCameraAccess.js.map +1 -1
- package/XR/features/WebXRSpaceWarp.js +1 -1
- package/XR/features/WebXRSpaceWarp.js.map +1 -1
- package/XR/motionController/webXRAbstractMotionController.js +4 -1
- package/XR/motionController/webXRAbstractMotionController.js.map +1 -1
- package/XR/native/nativeXRFrame.js +1 -2
- package/XR/native/nativeXRFrame.js.map +1 -1
- package/XR/webXRCamera.js +1 -2
- package/XR/webXRCamera.js.map +1 -1
- package/XR/webXRDefaultExperience.js +28 -6
- package/XR/webXRDefaultExperience.js.map +1 -1
- package/XR/webXRExperienceHelper.js +5 -7
- package/XR/webXRExperienceHelper.js.map +1 -1
- package/XR/webXRFeaturesManager.js +4 -1
- package/XR/webXRFeaturesManager.js.map +1 -1
- package/XR/webXRInput.js +6 -1
- package/XR/webXRInput.js.map +1 -1
- package/XR/webXRInputSource.js +1 -2
- package/XR/webXRInputSource.js.map +1 -1
- package/XR/webXRSessionManager.js +16 -29
- package/XR/webXRSessionManager.js.map +1 -1
- package/assetContainer.js +4 -1
- package/assetContainer.js.map +1 -1
- package/package.json +1 -1
- package/scene.js +18 -17
- package/scene.js.map +1 -1
|
@@ -24,8 +24,7 @@ class DecalVertex {
|
|
|
24
24
|
this.matrixWeightsOverride = matrixWeightsOverride;
|
|
25
25
|
}
|
|
26
26
|
clone() {
|
|
27
|
-
|
|
28
|
-
return new DecalVertex(this.position.clone(), this.normal.clone(), this.uv.clone(), this.vertexIdx, this.vertexIdxForBones, (_a = this.localPositionOverride) === null || _a === void 0 ? void 0 : _a.slice(), (_b = this.localNormalOverride) === null || _b === void 0 ? void 0 : _b.slice(), (_c = this.matrixIndicesOverride) === null || _c === void 0 ? void 0 : _c.slice(), (_d = this.matrixWeightsOverride) === null || _d === void 0 ? void 0 : _d.slice());
|
|
27
|
+
return new DecalVertex(this.position.clone(), this.normal.clone(), this.uv.clone(), this.vertexIdx, this.vertexIdxForBones, this.localPositionOverride?.slice(), this.localNormalOverride?.slice(), this.matrixIndicesOverride?.slice(), this.matrixWeightsOverride?.slice());
|
|
29
28
|
}
|
|
30
29
|
}
|
|
31
30
|
/**
|
|
@@ -47,7 +46,6 @@ class DecalVertex {
|
|
|
47
46
|
* @see https://doc.babylonjs.com/features/featuresDeepDive/mesh/decals
|
|
48
47
|
*/
|
|
49
48
|
export function CreateDecal(name, sourceMesh, options) {
|
|
50
|
-
var _a, _b, _c, _d;
|
|
51
49
|
const hasSkeleton = !!sourceMesh.skeleton;
|
|
52
50
|
const useLocalComputation = options.localMode || hasSkeleton;
|
|
53
51
|
const meshHasOverridenMaterial = sourceMesh.overrideMaterialSideOrientation !== null && sourceMesh.overrideMaterialSideOrientation !== undefined;
|
|
@@ -121,17 +119,16 @@ export function CreateDecal(name, sourceMesh, options) {
|
|
|
121
119
|
return -1;
|
|
122
120
|
};
|
|
123
121
|
const clipVertices = (v0, v1) => {
|
|
124
|
-
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r;
|
|
125
122
|
const clipFactor = Vector3.GetClipFactor(v0.position, v1.position, axis, clipSize);
|
|
126
123
|
let indices = emptyArray;
|
|
127
124
|
let weights = emptyArray;
|
|
128
125
|
if (matIndices && matWeights) {
|
|
129
126
|
const mat0Index = v0.matrixIndicesOverride ? 0 : v0.vertexIdxForBones;
|
|
130
|
-
const v0Indices =
|
|
131
|
-
const v0Weights =
|
|
127
|
+
const v0Indices = v0.matrixIndicesOverride ?? matIndices;
|
|
128
|
+
const v0Weights = v0.matrixWeightsOverride ?? matWeights;
|
|
132
129
|
const mat1Index = v1.matrixIndicesOverride ? 0 : v1.vertexIdxForBones;
|
|
133
|
-
const v1Indices =
|
|
134
|
-
const v1Weights =
|
|
130
|
+
const v1Indices = v1.matrixIndicesOverride ?? matIndices;
|
|
131
|
+
const v1Weights = v1.matrixWeightsOverride ?? matWeights;
|
|
135
132
|
indices = [0, 0, 0, 0];
|
|
136
133
|
weights = [0, 0, 0, 0];
|
|
137
134
|
let index = 0;
|
|
@@ -157,18 +154,18 @@ export function CreateDecal(name, sourceMesh, options) {
|
|
|
157
154
|
weights[2] /= sumw;
|
|
158
155
|
weights[3] /= sumw;
|
|
159
156
|
}
|
|
160
|
-
const v0LocalPositionX = v0.localPositionOverride ? v0.localPositionOverride[0] :
|
|
161
|
-
const v0LocalPositionY = v0.localPositionOverride ? v0.localPositionOverride[1] :
|
|
162
|
-
const v0LocalPositionZ = v0.localPositionOverride ? v0.localPositionOverride[2] :
|
|
163
|
-
const v1LocalPositionX = v1.localPositionOverride ? v1.localPositionOverride[0] :
|
|
164
|
-
const v1LocalPositionY = v1.localPositionOverride ? v1.localPositionOverride[1] :
|
|
165
|
-
const v1LocalPositionZ = v1.localPositionOverride ? v1.localPositionOverride[2] :
|
|
166
|
-
const v0LocalNormalX = v0.localNormalOverride ? v0.localNormalOverride[0] :
|
|
167
|
-
const v0LocalNormalY = v0.localNormalOverride ? v0.localNormalOverride[1] :
|
|
168
|
-
const v0LocalNormalZ = v0.localNormalOverride ? v0.localNormalOverride[2] :
|
|
169
|
-
const v1LocalNormalX = v1.localNormalOverride ? v1.localNormalOverride[0] :
|
|
170
|
-
const v1LocalNormalY = v1.localNormalOverride ? v1.localNormalOverride[1] :
|
|
171
|
-
const v1LocalNormalZ = v1.localNormalOverride ? v1.localNormalOverride[2] :
|
|
157
|
+
const v0LocalPositionX = v0.localPositionOverride ? v0.localPositionOverride[0] : localPositions?.[v0.vertexIdx] ?? 0;
|
|
158
|
+
const v0LocalPositionY = v0.localPositionOverride ? v0.localPositionOverride[1] : localPositions?.[v0.vertexIdx + 1] ?? 0;
|
|
159
|
+
const v0LocalPositionZ = v0.localPositionOverride ? v0.localPositionOverride[2] : localPositions?.[v0.vertexIdx + 2] ?? 0;
|
|
160
|
+
const v1LocalPositionX = v1.localPositionOverride ? v1.localPositionOverride[0] : localPositions?.[v1.vertexIdx] ?? 0;
|
|
161
|
+
const v1LocalPositionY = v1.localPositionOverride ? v1.localPositionOverride[1] : localPositions?.[v1.vertexIdx + 1] ?? 0;
|
|
162
|
+
const v1LocalPositionZ = v1.localPositionOverride ? v1.localPositionOverride[2] : localPositions?.[v1.vertexIdx + 2] ?? 0;
|
|
163
|
+
const v0LocalNormalX = v0.localNormalOverride ? v0.localNormalOverride[0] : localNormals?.[v0.vertexIdx] ?? 0;
|
|
164
|
+
const v0LocalNormalY = v0.localNormalOverride ? v0.localNormalOverride[1] : localNormals?.[v0.vertexIdx + 1] ?? 0;
|
|
165
|
+
const v0LocalNormalZ = v0.localNormalOverride ? v0.localNormalOverride[2] : localNormals?.[v0.vertexIdx + 2] ?? 0;
|
|
166
|
+
const v1LocalNormalX = v1.localNormalOverride ? v1.localNormalOverride[0] : localNormals?.[v1.vertexIdx] ?? 0;
|
|
167
|
+
const v1LocalNormalY = v1.localNormalOverride ? v1.localNormalOverride[1] : localNormals?.[v1.vertexIdx + 1] ?? 0;
|
|
168
|
+
const v1LocalNormalZ = v1.localNormalOverride ? v1.localNormalOverride[2] : localNormals?.[v1.vertexIdx + 2] ?? 0;
|
|
172
169
|
const interpNormalX = v0LocalNormalX + (v1LocalNormalX - v0LocalNormalX) * clipFactor;
|
|
173
170
|
const interpNormalY = v0LocalNormalY + (v1LocalNormalY - v0LocalNormalY) * clipFactor;
|
|
174
171
|
const interpNormalZ = v0LocalNormalZ + (v1LocalNormalZ - v0LocalNormalZ) * clipFactor;
|
|
@@ -210,7 +207,7 @@ export function CreateDecal(name, sourceMesh, options) {
|
|
|
210
207
|
}
|
|
211
208
|
break;
|
|
212
209
|
case 1:
|
|
213
|
-
clipResult = clipResult
|
|
210
|
+
clipResult = clipResult ?? new Array();
|
|
214
211
|
if (v1Out) {
|
|
215
212
|
nV1 = vertices[index + 1];
|
|
216
213
|
nV2 = vertices[index + 2];
|
|
@@ -246,7 +243,7 @@ export function CreateDecal(name, sourceMesh, options) {
|
|
|
246
243
|
}
|
|
247
244
|
break;
|
|
248
245
|
case 2:
|
|
249
|
-
clipResult = clipResult
|
|
246
|
+
clipResult = clipResult ?? new Array();
|
|
250
247
|
if (!v1Out) {
|
|
251
248
|
nV1 = vertices[index].clone();
|
|
252
249
|
nV2 = clipVertices(nV1, vertices[index + 1]);
|
|
@@ -279,12 +276,12 @@ export function CreateDecal(name, sourceMesh, options) {
|
|
|
279
276
|
return clipResult;
|
|
280
277
|
};
|
|
281
278
|
const sourceMeshAsMesh = sourceMesh instanceof Mesh ? sourceMesh : null;
|
|
282
|
-
const matrixData = sourceMeshAsMesh
|
|
283
|
-
const numMatrices =
|
|
279
|
+
const matrixData = sourceMeshAsMesh?._thinInstanceDataStorage.matrixData;
|
|
280
|
+
const numMatrices = sourceMeshAsMesh?.thinInstanceCount || 1;
|
|
284
281
|
const thinInstanceMatrix = TmpVectors.Matrix[0];
|
|
285
282
|
thinInstanceMatrix.copyFrom(Matrix.IdentityReadOnly);
|
|
286
283
|
for (let m = 0; m < numMatrices; ++m) {
|
|
287
|
-
if (
|
|
284
|
+
if (sourceMeshAsMesh?.hasThinInstances && matrixData) {
|
|
288
285
|
const ofst = m * 16;
|
|
289
286
|
thinInstanceMatrix.setRowFromFloats(0, matrixData[ofst + 0], matrixData[ofst + 1], matrixData[ofst + 2], matrixData[ofst + 3]);
|
|
290
287
|
thinInstanceMatrix.setRowFromFloats(1, matrixData[ofst + 4], matrixData[ofst + 5], matrixData[ofst + 6], matrixData[ofst + 7]);
|
|
@@ -428,13 +425,13 @@ export function CreateDecal(name, sourceMesh, options) {
|
|
|
428
425
|
vertexData.normals = null;
|
|
429
426
|
if (vertexData.uvs.length === 0)
|
|
430
427
|
vertexData.uvs = null;
|
|
431
|
-
if (
|
|
428
|
+
if (vertexData.matricesIndices?.length === 0)
|
|
432
429
|
vertexData.matricesIndices = null;
|
|
433
|
-
if (
|
|
430
|
+
if (vertexData.matricesWeights?.length === 0)
|
|
434
431
|
vertexData.matricesWeights = null;
|
|
435
|
-
if (
|
|
432
|
+
if (vertexData.matricesIndicesExtra?.length === 0)
|
|
436
433
|
vertexData.matricesIndicesExtra = null;
|
|
437
|
-
if (
|
|
434
|
+
if (vertexData.matricesWeightsExtra?.length === 0)
|
|
438
435
|
vertexData.matricesWeightsExtra = null;
|
|
439
436
|
// Return mesh
|
|
440
437
|
const decal = new Mesh(name, sourceMesh.getScene());
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"decalBuilder.js","sourceRoot":"","sources":["../../../../../dev/core/src/Meshes/Builders/decalBuilder.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Nullable, IndicesArray, FloatArray } from \"../../types\";\r\nimport { Vector3, Matrix, Vector2, TmpVectors } from \"../../Maths/math.vector\";\r\nimport { Scalar } from \"../../Maths/math.scalar\";\r\nimport { Mesh } from \"../mesh\";\r\nimport { VertexBuffer } from \"../../Buffers/buffer\";\r\nimport { VertexData } from \"../mesh.vertexData\";\r\nimport type { AbstractMesh } from \"../abstractMesh\";\r\nimport type { Camera } from \"../../Cameras/camera\";\r\nimport { CompatibilityOptions } from \"../../Compat/compatibilityOptions\";\r\n\r\nconst xpAxis = new Vector3(1, 0, 0);\r\nconst xnAxis = new Vector3(-1, 0, 0);\r\nconst ypAxis = new Vector3(0, 1, 0);\r\nconst ynAxis = new Vector3(0, -1, 0);\r\nconst zpAxis = new Vector3(0, 0, 1);\r\nconst znAxis = new Vector3(0, 0, -1);\r\n\r\n/** @internal */\r\nclass DecalVertex {\r\n constructor(\r\n public position: Vector3 = Vector3.Zero(),\r\n public normal: Vector3 = Vector3.Up(),\r\n public uv: Vector2 = Vector2.Zero(),\r\n public vertexIdx: number = 0,\r\n public vertexIdxForBones: number = 0,\r\n public localPositionOverride: Nullable<number[]> = null,\r\n public localNormalOverride: Nullable<number[]> = null,\r\n public matrixIndicesOverride: Nullable<number[]> = null,\r\n public matrixWeightsOverride: Nullable<number[]> = null\r\n ) {}\r\n public clone(): DecalVertex {\r\n return new DecalVertex(\r\n this.position.clone(),\r\n this.normal.clone(),\r\n this.uv.clone(),\r\n this.vertexIdx,\r\n this.vertexIdxForBones,\r\n this.localPositionOverride?.slice(),\r\n this.localNormalOverride?.slice(),\r\n this.matrixIndicesOverride?.slice(),\r\n this.matrixWeightsOverride?.slice()\r\n );\r\n }\r\n}\r\n\r\n/**\r\n * Creates a decal mesh.\r\n * A decal is a mesh usually applied as a model onto the surface of another mesh. So don't forget the parameter `sourceMesh` depicting the decal\r\n * * The parameter `position` (Vector3, default `(0, 0, 0)`) sets the position of the decal in World coordinates\r\n * * The parameter `normal` (Vector3, default `Vector3.Up`) sets the normal of the mesh where the decal is applied onto in World coordinates\r\n * * The parameter `size` (Vector3, default `(1, 1, 1)`) sets the decal scaling\r\n * * The parameter `angle` (float in radian, default 0) sets the angle to rotate the decal\r\n * * The parameter `captureUVS` defines if we need to capture the uvs or compute them\r\n * * The parameter `cullBackFaces` defines if the back faces should be removed from the decal mesh\r\n * * The parameter `localMode` defines that the computations should be done with the local mesh coordinates instead of the world space coordinates.\r\n * * Use this mode if you want the decal to be parented to the sourceMesh and move/rotate with it.\r\n * Note: Meshes with morph targets are not supported!\r\n * @param name defines the name of the mesh\r\n * @param sourceMesh defines the mesh where the decal must be applied\r\n * @param options defines the options used to create the mesh\r\n * @returns the decal mesh\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/mesh/decals\r\n */\r\nexport function CreateDecal(\r\n name: string,\r\n sourceMesh: AbstractMesh,\r\n options: { position?: Vector3; normal?: Vector3; size?: Vector3; angle?: number; captureUVS?: boolean; cullBackFaces?: boolean; localMode?: boolean }\r\n): Mesh {\r\n const hasSkeleton = !!sourceMesh.skeleton;\r\n const useLocalComputation = options.localMode || hasSkeleton;\r\n const meshHasOverridenMaterial = (sourceMesh as Mesh).overrideMaterialSideOrientation !== null && (sourceMesh as Mesh).overrideMaterialSideOrientation !== undefined;\r\n\r\n const indices = <IndicesArray>sourceMesh.getIndices();\r\n const positions = hasSkeleton ? sourceMesh.getPositionData(true, true) : sourceMesh.getVerticesData(VertexBuffer.PositionKind);\r\n const normals = hasSkeleton ? sourceMesh.getNormalsData(true, true) : sourceMesh.getVerticesData(VertexBuffer.NormalKind);\r\n const localPositions = useLocalComputation ? (hasSkeleton ? sourceMesh.getVerticesData(VertexBuffer.PositionKind) : positions) : null;\r\n const localNormals = useLocalComputation ? (hasSkeleton ? sourceMesh.getVerticesData(VertexBuffer.NormalKind) : normals) : null;\r\n const uvs = sourceMesh.getVerticesData(VertexBuffer.UVKind);\r\n const matIndices = hasSkeleton ? sourceMesh.getVerticesData(VertexBuffer.MatricesIndicesKind) : null;\r\n const matWeights = hasSkeleton ? sourceMesh.getVerticesData(VertexBuffer.MatricesWeightsKind) : null;\r\n const matIndicesExtra = hasSkeleton ? sourceMesh.getVerticesData(VertexBuffer.MatricesIndicesExtraKind) : null;\r\n const matWeightsExtra = hasSkeleton ? sourceMesh.getVerticesData(VertexBuffer.MatricesWeightsExtraKind) : null;\r\n\r\n const position = options.position || Vector3.Zero();\r\n let normal = options.normal || Vector3.Up();\r\n const size = options.size || Vector3.One();\r\n const angle = options.angle || 0;\r\n\r\n // Getting correct rotation\r\n if (!normal) {\r\n const target = new Vector3(0, 0, 1);\r\n const camera = <Camera>sourceMesh.getScene().activeCamera;\r\n const cameraWorldTarget = Vector3.TransformCoordinates(target, camera.getWorldMatrix());\r\n\r\n normal = camera.globalPosition.subtract(cameraWorldTarget);\r\n }\r\n\r\n const yaw = -Math.atan2(normal.z, normal.x) - Math.PI / 2;\r\n const len = Math.sqrt(normal.x * normal.x + normal.z * normal.z);\r\n const pitch = Math.atan2(normal.y, len);\r\n\r\n const vertexData = new VertexData();\r\n vertexData.indices = [];\r\n vertexData.positions = [];\r\n vertexData.normals = [];\r\n vertexData.uvs = [];\r\n vertexData.matricesIndices = hasSkeleton ? [] : null;\r\n vertexData.matricesWeights = hasSkeleton ? [] : null;\r\n vertexData.matricesIndicesExtra = matIndicesExtra ? [] : null;\r\n vertexData.matricesWeightsExtra = matWeightsExtra ? [] : null;\r\n\r\n let currentVertexDataIndex = 0;\r\n\r\n const extractDecalVector3 = (indexId: number, transformMatrix: Matrix): DecalVertex => {\r\n const result = new DecalVertex();\r\n if (!indices || !positions || !normals) {\r\n return result;\r\n }\r\n\r\n const vertexId = indices[indexId];\r\n\r\n result.vertexIdx = vertexId * 3;\r\n result.vertexIdxForBones = vertexId * 4;\r\n\r\n // Send vector to decal local world\r\n result.position = new Vector3(positions[vertexId * 3], positions[vertexId * 3 + 1], positions[vertexId * 3 + 2]);\r\n Vector3.TransformCoordinatesToRef(result.position, transformMatrix, result.position);\r\n\r\n // Get normal\r\n result.normal = new Vector3(normals[vertexId * 3], normals[vertexId * 3 + 1], normals[vertexId * 3 + 2]);\r\n Vector3.TransformNormalToRef(result.normal, transformMatrix, result.normal);\r\n\r\n if (options.captureUVS && uvs) {\r\n const v = uvs[vertexId * 2 + 1];\r\n result.uv = new Vector2(uvs[vertexId * 2], CompatibilityOptions.UseOpenGLOrientationForUV ? 1 - v : v);\r\n }\r\n\r\n return result;\r\n };\r\n\r\n const emptyArray = [0, 0, 0, 0];\r\n\r\n // Inspired by https://github.com/mrdoob/three.js/blob/eee231960882f6f3b6113405f524956145148146/examples/js/geometries/DecalGeometry.js\r\n const clip = (vertices: DecalVertex[], axis: Vector3): Nullable<DecalVertex[]> => {\r\n if (vertices.length === 0) {\r\n return vertices;\r\n }\r\n\r\n const clipSize = 0.5 * Math.abs(Vector3.Dot(size, axis));\r\n\r\n const indexOf = (arr: FloatArray | number[], val: number, start: number, num: number) => {\r\n for (let i = 0; i < num; ++i) {\r\n if (arr[start + i] === val) {\r\n return start + i;\r\n }\r\n }\r\n return -1;\r\n };\r\n\r\n const clipVertices = (v0: DecalVertex, v1: DecalVertex): DecalVertex => {\r\n const clipFactor = Vector3.GetClipFactor(v0.position, v1.position, axis, clipSize);\r\n\r\n let indices = emptyArray;\r\n let weights = emptyArray;\r\n\r\n if (matIndices && matWeights) {\r\n const mat0Index = v0.matrixIndicesOverride ? 0 : v0.vertexIdxForBones;\r\n const v0Indices = v0.matrixIndicesOverride ?? matIndices;\r\n const v0Weights = v0.matrixWeightsOverride ?? matWeights;\r\n\r\n const mat1Index = v1.matrixIndicesOverride ? 0 : v1.vertexIdxForBones;\r\n const v1Indices = v1.matrixIndicesOverride ?? matIndices;\r\n const v1Weights = v1.matrixWeightsOverride ?? matWeights;\r\n\r\n indices = [0, 0, 0, 0];\r\n weights = [0, 0, 0, 0];\r\n\r\n let index = 0;\r\n for (let i = 0; i < 4; ++i) {\r\n if (v0Weights[mat0Index + i] > 0) {\r\n const idx = indexOf(v1Indices, v0Indices[mat0Index + i], mat1Index, 4);\r\n indices[index] = v0Indices[mat0Index + i];\r\n weights[index] = Scalar.Lerp(v0Weights[mat0Index + i], idx >= 0 ? v1Weights[idx] : 0, clipFactor);\r\n index++;\r\n }\r\n }\r\n\r\n for (let i = 0; i < 4 && index < 4; ++i) {\r\n const ind = v1Indices[mat1Index + i];\r\n if (indexOf(v0Indices, ind, mat0Index, 4) !== -1) continue;\r\n\r\n indices[index] = ind;\r\n weights[index] = Scalar.Lerp(0, v1Weights[mat1Index + i], clipFactor);\r\n index++;\r\n }\r\n\r\n const sumw = weights[0] + weights[1] + weights[2] + weights[3];\r\n\r\n weights[0] /= sumw;\r\n weights[1] /= sumw;\r\n weights[2] /= sumw;\r\n weights[3] /= sumw;\r\n }\r\n\r\n const v0LocalPositionX = v0.localPositionOverride ? v0.localPositionOverride[0] : localPositions?.[v0.vertexIdx] ?? 0;\r\n const v0LocalPositionY = v0.localPositionOverride ? v0.localPositionOverride[1] : localPositions?.[v0.vertexIdx + 1] ?? 0;\r\n const v0LocalPositionZ = v0.localPositionOverride ? v0.localPositionOverride[2] : localPositions?.[v0.vertexIdx + 2] ?? 0;\r\n\r\n const v1LocalPositionX = v1.localPositionOverride ? v1.localPositionOverride[0] : localPositions?.[v1.vertexIdx] ?? 0;\r\n const v1LocalPositionY = v1.localPositionOverride ? v1.localPositionOverride[1] : localPositions?.[v1.vertexIdx + 1] ?? 0;\r\n const v1LocalPositionZ = v1.localPositionOverride ? v1.localPositionOverride[2] : localPositions?.[v1.vertexIdx + 2] ?? 0;\r\n\r\n const v0LocalNormalX = v0.localNormalOverride ? v0.localNormalOverride[0] : localNormals?.[v0.vertexIdx] ?? 0;\r\n const v0LocalNormalY = v0.localNormalOverride ? v0.localNormalOverride[1] : localNormals?.[v0.vertexIdx + 1] ?? 0;\r\n const v0LocalNormalZ = v0.localNormalOverride ? v0.localNormalOverride[2] : localNormals?.[v0.vertexIdx + 2] ?? 0;\r\n\r\n const v1LocalNormalX = v1.localNormalOverride ? v1.localNormalOverride[0] : localNormals?.[v1.vertexIdx] ?? 0;\r\n const v1LocalNormalY = v1.localNormalOverride ? v1.localNormalOverride[1] : localNormals?.[v1.vertexIdx + 1] ?? 0;\r\n const v1LocalNormalZ = v1.localNormalOverride ? v1.localNormalOverride[2] : localNormals?.[v1.vertexIdx + 2] ?? 0;\r\n\r\n const interpNormalX = v0LocalNormalX + (v1LocalNormalX - v0LocalNormalX) * clipFactor;\r\n const interpNormalY = v0LocalNormalY + (v1LocalNormalY - v0LocalNormalY) * clipFactor;\r\n const interpNormalZ = v0LocalNormalZ + (v1LocalNormalZ - v0LocalNormalZ) * clipFactor;\r\n\r\n const norm = Math.sqrt(interpNormalX * interpNormalX + interpNormalY * interpNormalY + interpNormalZ * interpNormalZ);\r\n\r\n return new DecalVertex(\r\n Vector3.Lerp(v0.position, v1.position, clipFactor),\r\n Vector3.Lerp(v0.normal, v1.normal, clipFactor).normalize(),\r\n Vector2.Lerp(v0.uv, v1.uv, clipFactor),\r\n -1,\r\n -1,\r\n localPositions\r\n ? [\r\n v0LocalPositionX + (v1LocalPositionX - v0LocalPositionX) * clipFactor,\r\n v0LocalPositionY + (v1LocalPositionY - v0LocalPositionY) * clipFactor,\r\n v0LocalPositionZ + (v1LocalPositionZ - v0LocalPositionZ) * clipFactor,\r\n ]\r\n : null,\r\n localNormals ? [interpNormalX / norm, interpNormalY / norm, interpNormalZ / norm] : null,\r\n indices,\r\n weights\r\n );\r\n };\r\n\r\n let clipResult: Nullable<DecalVertex[]> = null;\r\n\r\n if (vertices.length > 3) {\r\n clipResult = [] as DecalVertex[];\r\n }\r\n\r\n for (let index = 0; index < vertices.length; index += 3) {\r\n let total = 0;\r\n let nV1: Nullable<DecalVertex> = null;\r\n let nV2: Nullable<DecalVertex> = null;\r\n let nV3: Nullable<DecalVertex> = null;\r\n let nV4: Nullable<DecalVertex> = null;\r\n\r\n const d1 = Vector3.Dot(vertices[index].position, axis) - clipSize;\r\n const d2 = Vector3.Dot(vertices[index + 1].position, axis) - clipSize;\r\n const d3 = Vector3.Dot(vertices[index + 2].position, axis) - clipSize;\r\n\r\n const v1Out = d1 > 0;\r\n const v2Out = d2 > 0;\r\n const v3Out = d3 > 0;\r\n\r\n total = (v1Out ? 1 : 0) + (v2Out ? 1 : 0) + (v3Out ? 1 : 0);\r\n\r\n switch (total) {\r\n case 0:\r\n if (vertices.length > 3) {\r\n clipResult!.push(vertices[index]);\r\n clipResult!.push(vertices[index + 1]);\r\n clipResult!.push(vertices[index + 2]);\r\n } else {\r\n clipResult = vertices;\r\n }\r\n break;\r\n case 1:\r\n clipResult = clipResult ?? new Array<DecalVertex>();\r\n if (v1Out) {\r\n nV1 = vertices[index + 1];\r\n nV2 = vertices[index + 2];\r\n nV3 = clipVertices(vertices[index], nV1);\r\n nV4 = clipVertices(vertices[index], nV2);\r\n }\r\n\r\n if (v2Out) {\r\n nV1 = vertices[index];\r\n nV2 = vertices[index + 2];\r\n nV3 = clipVertices(vertices[index + 1], nV1);\r\n nV4 = clipVertices(vertices[index + 1], nV2);\r\n\r\n clipResult.push(nV3);\r\n clipResult.push(nV2.clone());\r\n clipResult.push(nV1.clone());\r\n\r\n clipResult.push(nV2.clone());\r\n clipResult.push(nV3.clone());\r\n clipResult.push(nV4);\r\n break;\r\n }\r\n if (v3Out) {\r\n nV1 = vertices[index];\r\n nV2 = vertices[index + 1];\r\n nV3 = clipVertices(vertices[index + 2], nV1);\r\n nV4 = clipVertices(vertices[index + 2], nV2);\r\n }\r\n\r\n if (nV1 && nV2 && nV3 && nV4) {\r\n clipResult.push(nV1.clone());\r\n clipResult.push(nV2.clone());\r\n clipResult.push(nV3);\r\n\r\n clipResult.push(nV4);\r\n clipResult.push(nV3.clone());\r\n clipResult.push(nV2.clone());\r\n }\r\n break;\r\n case 2:\r\n clipResult = clipResult ?? new Array<DecalVertex>();\r\n if (!v1Out) {\r\n nV1 = vertices[index].clone();\r\n nV2 = clipVertices(nV1, vertices[index + 1]);\r\n nV3 = clipVertices(nV1, vertices[index + 2]);\r\n clipResult.push(nV1);\r\n clipResult.push(nV2);\r\n clipResult.push(nV3);\r\n }\r\n if (!v2Out) {\r\n nV1 = vertices[index + 1].clone();\r\n nV2 = clipVertices(nV1, vertices[index + 2]);\r\n nV3 = clipVertices(nV1, vertices[index]);\r\n clipResult.push(nV1);\r\n clipResult.push(nV2);\r\n clipResult.push(nV3);\r\n }\r\n if (!v3Out) {\r\n nV1 = vertices[index + 2].clone();\r\n nV2 = clipVertices(nV1, vertices[index]);\r\n nV3 = clipVertices(nV1, vertices[index + 1]);\r\n clipResult.push(nV1);\r\n clipResult.push(nV2);\r\n clipResult.push(nV3);\r\n }\r\n break;\r\n case 3:\r\n break;\r\n }\r\n }\r\n\r\n return clipResult;\r\n };\r\n\r\n const sourceMeshAsMesh = sourceMesh instanceof Mesh ? sourceMesh : null;\r\n const matrixData = sourceMeshAsMesh?._thinInstanceDataStorage.matrixData;\r\n\r\n const numMatrices = sourceMeshAsMesh?.thinInstanceCount || 1;\r\n const thinInstanceMatrix = TmpVectors.Matrix[0];\r\n\r\n thinInstanceMatrix.copyFrom(Matrix.IdentityReadOnly);\r\n\r\n for (let m = 0; m < numMatrices; ++m) {\r\n if (sourceMeshAsMesh?.hasThinInstances && matrixData) {\r\n const ofst = m * 16;\r\n\r\n thinInstanceMatrix.setRowFromFloats(0, matrixData[ofst + 0], matrixData[ofst + 1], matrixData[ofst + 2], matrixData[ofst + 3]);\r\n thinInstanceMatrix.setRowFromFloats(1, matrixData[ofst + 4], matrixData[ofst + 5], matrixData[ofst + 6], matrixData[ofst + 7]);\r\n thinInstanceMatrix.setRowFromFloats(2, matrixData[ofst + 8], matrixData[ofst + 9], matrixData[ofst + 10], matrixData[ofst + 11]);\r\n thinInstanceMatrix.setRowFromFloats(3, matrixData[ofst + 12], matrixData[ofst + 13], matrixData[ofst + 14], matrixData[ofst + 15]);\r\n }\r\n\r\n // Matrix\r\n const decalWorldMatrix = Matrix.RotationYawPitchRoll(yaw, pitch, angle).multiply(Matrix.Translation(position.x, position.y, position.z));\r\n const inverseDecalWorldMatrix = Matrix.Invert(decalWorldMatrix);\r\n const meshWorldMatrix = sourceMesh.getWorldMatrix();\r\n const transformMatrix = thinInstanceMatrix.multiply(meshWorldMatrix).multiply(inverseDecalWorldMatrix);\r\n\r\n const oneFaceVertices = new Array<DecalVertex>(3);\r\n\r\n for (let index = 0; index < indices.length; index += 3) {\r\n let faceVertices: Nullable<DecalVertex[]> = oneFaceVertices;\r\n\r\n faceVertices[0] = extractDecalVector3(index, transformMatrix);\r\n if (meshHasOverridenMaterial && useLocalComputation) {\r\n faceVertices[1] = extractDecalVector3(index + 2, transformMatrix);\r\n faceVertices[2] = extractDecalVector3(index + 1, transformMatrix);\r\n } else {\r\n faceVertices[1] = extractDecalVector3(index + 1, transformMatrix);\r\n faceVertices[2] = extractDecalVector3(index + 2, transformMatrix);\r\n }\r\n\r\n if (options.cullBackFaces) {\r\n // If all the normals of the vertices of the face are pointing away from the view direction we discard the face.\r\n // As computations are done in the decal coordinate space, the viewDirection is (0,0,1), so when dot(vertexNormal, -viewDirection) <= 0 the vertex is culled\r\n if (-faceVertices[0].normal.z <= 0 && -faceVertices[1].normal.z <= 0 && -faceVertices[2].normal.z <= 0) {\r\n continue;\r\n }\r\n }\r\n\r\n // Clip\r\n faceVertices = clip(faceVertices, xpAxis);\r\n if (!faceVertices) continue;\r\n faceVertices = clip(faceVertices, xnAxis);\r\n if (!faceVertices) continue;\r\n faceVertices = clip(faceVertices, ypAxis);\r\n if (!faceVertices) continue;\r\n faceVertices = clip(faceVertices, ynAxis);\r\n if (!faceVertices) continue;\r\n faceVertices = clip(faceVertices, zpAxis);\r\n if (!faceVertices) continue;\r\n faceVertices = clip(faceVertices, znAxis);\r\n if (!faceVertices) continue;\r\n\r\n // Add UVs and get back to world\r\n for (let vIndex = 0; vIndex < faceVertices.length; vIndex++) {\r\n const vertex = faceVertices[vIndex];\r\n\r\n //TODO check for Int32Array | Uint32Array | Uint16Array\r\n (<number[]>vertexData.indices).push(currentVertexDataIndex);\r\n if (useLocalComputation) {\r\n if (vertex.localPositionOverride) {\r\n vertexData.positions[currentVertexDataIndex * 3] = vertex.localPositionOverride[0];\r\n vertexData.positions[currentVertexDataIndex * 3 + 1] = vertex.localPositionOverride[1];\r\n vertexData.positions[currentVertexDataIndex * 3 + 2] = vertex.localPositionOverride[2];\r\n } else if (localPositions) {\r\n vertexData.positions[currentVertexDataIndex * 3] = localPositions[vertex.vertexIdx];\r\n vertexData.positions[currentVertexDataIndex * 3 + 1] = localPositions[vertex.vertexIdx + 1];\r\n vertexData.positions[currentVertexDataIndex * 3 + 2] = localPositions[vertex.vertexIdx + 2];\r\n }\r\n if (vertex.localNormalOverride) {\r\n vertexData.normals[currentVertexDataIndex * 3] = vertex.localNormalOverride[0];\r\n vertexData.normals[currentVertexDataIndex * 3 + 1] = vertex.localNormalOverride[1];\r\n vertexData.normals[currentVertexDataIndex * 3 + 2] = vertex.localNormalOverride[2];\r\n } else if (localNormals) {\r\n vertexData.normals[currentVertexDataIndex * 3] = localNormals[vertex.vertexIdx];\r\n vertexData.normals[currentVertexDataIndex * 3 + 1] = localNormals[vertex.vertexIdx + 1];\r\n vertexData.normals[currentVertexDataIndex * 3 + 2] = localNormals[vertex.vertexIdx + 2];\r\n }\r\n } else {\r\n vertex.position.toArray(vertexData.positions, currentVertexDataIndex * 3);\r\n vertex.normal.toArray(vertexData.normals, currentVertexDataIndex * 3);\r\n }\r\n if (vertexData.matricesIndices && vertexData.matricesWeights) {\r\n if (vertex.matrixIndicesOverride) {\r\n vertexData.matricesIndices[currentVertexDataIndex * 4] = vertex.matrixIndicesOverride[0];\r\n vertexData.matricesIndices[currentVertexDataIndex * 4 + 1] = vertex.matrixIndicesOverride[1];\r\n vertexData.matricesIndices[currentVertexDataIndex * 4 + 2] = vertex.matrixIndicesOverride[2];\r\n vertexData.matricesIndices[currentVertexDataIndex * 4 + 3] = vertex.matrixIndicesOverride[3];\r\n } else {\r\n if (matIndices) {\r\n vertexData.matricesIndices[currentVertexDataIndex * 4] = matIndices[vertex.vertexIdxForBones];\r\n vertexData.matricesIndices[currentVertexDataIndex * 4 + 1] = matIndices[vertex.vertexIdxForBones + 1];\r\n vertexData.matricesIndices[currentVertexDataIndex * 4 + 2] = matIndices[vertex.vertexIdxForBones + 2];\r\n vertexData.matricesIndices[currentVertexDataIndex * 4 + 3] = matIndices[vertex.vertexIdxForBones + 3];\r\n }\r\n if (matIndicesExtra && vertexData.matricesIndicesExtra) {\r\n vertexData.matricesIndicesExtra[currentVertexDataIndex * 4] = matIndicesExtra[vertex.vertexIdxForBones];\r\n vertexData.matricesIndicesExtra[currentVertexDataIndex * 4 + 1] = matIndicesExtra[vertex.vertexIdxForBones + 1];\r\n vertexData.matricesIndicesExtra[currentVertexDataIndex * 4 + 2] = matIndicesExtra[vertex.vertexIdxForBones + 2];\r\n vertexData.matricesIndicesExtra[currentVertexDataIndex * 4 + 3] = matIndicesExtra[vertex.vertexIdxForBones + 3];\r\n }\r\n }\r\n if (vertex.matrixWeightsOverride) {\r\n vertexData.matricesWeights[currentVertexDataIndex * 4] = vertex.matrixWeightsOverride[0];\r\n vertexData.matricesWeights[currentVertexDataIndex * 4 + 1] = vertex.matrixWeightsOverride[1];\r\n vertexData.matricesWeights[currentVertexDataIndex * 4 + 2] = vertex.matrixWeightsOverride[2];\r\n vertexData.matricesWeights[currentVertexDataIndex * 4 + 3] = vertex.matrixWeightsOverride[3];\r\n } else {\r\n if (matWeights) {\r\n vertexData.matricesWeights[currentVertexDataIndex * 4] = matWeights[vertex.vertexIdxForBones];\r\n vertexData.matricesWeights[currentVertexDataIndex * 4 + 1] = matWeights[vertex.vertexIdxForBones + 1];\r\n vertexData.matricesWeights[currentVertexDataIndex * 4 + 2] = matWeights[vertex.vertexIdxForBones + 2];\r\n vertexData.matricesWeights[currentVertexDataIndex * 4 + 3] = matWeights[vertex.vertexIdxForBones + 3];\r\n }\r\n if (matWeightsExtra && vertexData.matricesWeightsExtra) {\r\n vertexData.matricesWeightsExtra[currentVertexDataIndex * 4] = matWeightsExtra[vertex.vertexIdxForBones];\r\n vertexData.matricesWeightsExtra[currentVertexDataIndex * 4 + 1] = matWeightsExtra[vertex.vertexIdxForBones + 1];\r\n vertexData.matricesWeightsExtra[currentVertexDataIndex * 4 + 2] = matWeightsExtra[vertex.vertexIdxForBones + 2];\r\n vertexData.matricesWeightsExtra[currentVertexDataIndex * 4 + 3] = matWeightsExtra[vertex.vertexIdxForBones + 3];\r\n }\r\n }\r\n }\r\n\r\n if (!options.captureUVS) {\r\n (<number[]>vertexData.uvs).push(0.5 + vertex.position.x / size.x);\r\n const v = 0.5 + vertex.position.y / size.y;\r\n (<number[]>vertexData.uvs).push(CompatibilityOptions.UseOpenGLOrientationForUV ? 1 - v : v);\r\n } else {\r\n vertex.uv.toArray(vertexData.uvs, currentVertexDataIndex * 2);\r\n }\r\n currentVertexDataIndex++;\r\n }\r\n }\r\n }\r\n\r\n // Avoid the \"Setting vertex data kind 'XXX' with an empty array\" warning when calling vertexData.applyToMesh\r\n if (vertexData.indices.length === 0) vertexData.indices = null;\r\n if (vertexData.positions.length === 0) vertexData.positions = null;\r\n if (vertexData.normals.length === 0) vertexData.normals = null;\r\n if (vertexData.uvs.length === 0) vertexData.uvs = null;\r\n if (vertexData.matricesIndices?.length === 0) vertexData.matricesIndices = null;\r\n if (vertexData.matricesWeights?.length === 0) vertexData.matricesWeights = null;\r\n if (vertexData.matricesIndicesExtra?.length === 0) vertexData.matricesIndicesExtra = null;\r\n if (vertexData.matricesWeightsExtra?.length === 0) vertexData.matricesWeightsExtra = null;\r\n\r\n // Return mesh\r\n const decal = new Mesh(name, sourceMesh.getScene());\r\n vertexData.applyToMesh(decal);\r\n\r\n if (useLocalComputation) {\r\n decal.skeleton = sourceMesh.skeleton;\r\n decal.parent = sourceMesh;\r\n } else {\r\n decal.position = position.clone();\r\n decal.rotation = new Vector3(pitch, yaw, angle);\r\n }\r\n\r\n decal.computeWorldMatrix(true);\r\n decal.refreshBoundingInfo(true, true);\r\n\r\n return decal;\r\n}\r\n\r\n/**\r\n * Class containing static functions to help procedurally build meshes\r\n * @deprecated use the function directly from the module\r\n */\r\nexport const DecalBuilder = {\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n CreateDecal,\r\n};\r\n\r\nMesh.CreateDecal = (name: string, sourceMesh: AbstractMesh, position: Vector3, normal: Vector3, size: Vector3, angle: number): Mesh => {\r\n const options = {\r\n position,\r\n normal,\r\n size,\r\n angle,\r\n };\r\n\r\n return CreateDecal(name, sourceMesh, options);\r\n};\r\n"]}
|
|
1
|
+
{"version":3,"file":"decalBuilder.js","sourceRoot":"","sources":["../../../../../dev/core/src/Meshes/Builders/decalBuilder.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Nullable, IndicesArray, FloatArray } from \"../../types\";\r\nimport { Vector3, Matrix, Vector2, TmpVectors } from \"../../Maths/math.vector\";\r\nimport { Scalar } from \"../../Maths/math.scalar\";\r\nimport { Mesh } from \"../mesh\";\r\nimport { VertexBuffer } from \"../../Buffers/buffer\";\r\nimport { VertexData } from \"../mesh.vertexData\";\r\nimport type { AbstractMesh } from \"../abstractMesh\";\r\nimport type { Camera } from \"../../Cameras/camera\";\r\nimport { CompatibilityOptions } from \"../../Compat/compatibilityOptions\";\r\n\r\nconst xpAxis = new Vector3(1, 0, 0);\r\nconst xnAxis = new Vector3(-1, 0, 0);\r\nconst ypAxis = new Vector3(0, 1, 0);\r\nconst ynAxis = new Vector3(0, -1, 0);\r\nconst zpAxis = new Vector3(0, 0, 1);\r\nconst znAxis = new Vector3(0, 0, -1);\r\n\r\n/** @internal */\r\nclass DecalVertex {\r\n constructor(\r\n public position: Vector3 = Vector3.Zero(),\r\n public normal: Vector3 = Vector3.Up(),\r\n public uv: Vector2 = Vector2.Zero(),\r\n public vertexIdx: number = 0,\r\n public vertexIdxForBones: number = 0,\r\n public localPositionOverride: Nullable<number[]> = null,\r\n public localNormalOverride: Nullable<number[]> = null,\r\n public matrixIndicesOverride: Nullable<number[]> = null,\r\n public matrixWeightsOverride: Nullable<number[]> = null\r\n ) {}\r\n public clone(): DecalVertex {\r\n return new DecalVertex(\r\n this.position.clone(),\r\n this.normal.clone(),\r\n this.uv.clone(),\r\n this.vertexIdx,\r\n this.vertexIdxForBones,\r\n this.localPositionOverride?.slice(),\r\n this.localNormalOverride?.slice(),\r\n this.matrixIndicesOverride?.slice(),\r\n this.matrixWeightsOverride?.slice()\r\n );\r\n }\r\n}\r\n\r\n/**\r\n * Creates a decal mesh.\r\n * A decal is a mesh usually applied as a model onto the surface of another mesh. So don't forget the parameter `sourceMesh` depicting the decal\r\n * * The parameter `position` (Vector3, default `(0, 0, 0)`) sets the position of the decal in World coordinates\r\n * * The parameter `normal` (Vector3, default `Vector3.Up`) sets the normal of the mesh where the decal is applied onto in World coordinates\r\n * * The parameter `size` (Vector3, default `(1, 1, 1)`) sets the decal scaling\r\n * * The parameter `angle` (float in radian, default 0) sets the angle to rotate the decal\r\n * * The parameter `captureUVS` defines if we need to capture the uvs or compute them\r\n * * The parameter `cullBackFaces` defines if the back faces should be removed from the decal mesh\r\n * * The parameter `localMode` defines that the computations should be done with the local mesh coordinates instead of the world space coordinates.\r\n * * Use this mode if you want the decal to be parented to the sourceMesh and move/rotate with it.\r\n * Note: Meshes with morph targets are not supported!\r\n * @param name defines the name of the mesh\r\n * @param sourceMesh defines the mesh where the decal must be applied\r\n * @param options defines the options used to create the mesh\r\n * @returns the decal mesh\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/mesh/decals\r\n */\r\nexport function CreateDecal(\r\n name: string,\r\n sourceMesh: AbstractMesh,\r\n options: { position?: Vector3; normal?: Vector3; size?: Vector3; angle?: number; captureUVS?: boolean; cullBackFaces?: boolean; localMode?: boolean }\r\n): Mesh {\r\n const hasSkeleton = !!sourceMesh.skeleton;\r\n const useLocalComputation = options.localMode || hasSkeleton;\r\n const meshHasOverridenMaterial = (sourceMesh as Mesh).overrideMaterialSideOrientation !== null && (sourceMesh as Mesh).overrideMaterialSideOrientation !== undefined;\r\n\r\n const indices = <IndicesArray>sourceMesh.getIndices();\r\n const positions = hasSkeleton ? sourceMesh.getPositionData(true, true) : sourceMesh.getVerticesData(VertexBuffer.PositionKind);\r\n const normals = hasSkeleton ? sourceMesh.getNormalsData(true, true) : sourceMesh.getVerticesData(VertexBuffer.NormalKind);\r\n const localPositions = useLocalComputation ? (hasSkeleton ? sourceMesh.getVerticesData(VertexBuffer.PositionKind) : positions) : null;\r\n const localNormals = useLocalComputation ? (hasSkeleton ? sourceMesh.getVerticesData(VertexBuffer.NormalKind) : normals) : null;\r\n const uvs = sourceMesh.getVerticesData(VertexBuffer.UVKind);\r\n const matIndices = hasSkeleton ? sourceMesh.getVerticesData(VertexBuffer.MatricesIndicesKind) : null;\r\n const matWeights = hasSkeleton ? sourceMesh.getVerticesData(VertexBuffer.MatricesWeightsKind) : null;\r\n const matIndicesExtra = hasSkeleton ? sourceMesh.getVerticesData(VertexBuffer.MatricesIndicesExtraKind) : null;\r\n const matWeightsExtra = hasSkeleton ? sourceMesh.getVerticesData(VertexBuffer.MatricesWeightsExtraKind) : null;\r\n\r\n const position = options.position || Vector3.Zero();\r\n let normal = options.normal || Vector3.Up();\r\n const size = options.size || Vector3.One();\r\n const angle = options.angle || 0;\r\n\r\n // Getting correct rotation\r\n if (!normal) {\r\n const target = new Vector3(0, 0, 1);\r\n const camera = <Camera>sourceMesh.getScene().activeCamera;\r\n const cameraWorldTarget = Vector3.TransformCoordinates(target, camera.getWorldMatrix());\r\n\r\n normal = camera.globalPosition.subtract(cameraWorldTarget);\r\n }\r\n\r\n const yaw = -Math.atan2(normal.z, normal.x) - Math.PI / 2;\r\n const len = Math.sqrt(normal.x * normal.x + normal.z * normal.z);\r\n const pitch = Math.atan2(normal.y, len);\r\n\r\n const vertexData = new VertexData();\r\n vertexData.indices = [];\r\n vertexData.positions = [];\r\n vertexData.normals = [];\r\n vertexData.uvs = [];\r\n vertexData.matricesIndices = hasSkeleton ? [] : null;\r\n vertexData.matricesWeights = hasSkeleton ? [] : null;\r\n vertexData.matricesIndicesExtra = matIndicesExtra ? [] : null;\r\n vertexData.matricesWeightsExtra = matWeightsExtra ? [] : null;\r\n\r\n let currentVertexDataIndex = 0;\r\n\r\n const extractDecalVector3 = (indexId: number, transformMatrix: Matrix): DecalVertex => {\r\n const result = new DecalVertex();\r\n if (!indices || !positions || !normals) {\r\n return result;\r\n }\r\n\r\n const vertexId = indices[indexId];\r\n\r\n result.vertexIdx = vertexId * 3;\r\n result.vertexIdxForBones = vertexId * 4;\r\n\r\n // Send vector to decal local world\r\n result.position = new Vector3(positions[vertexId * 3], positions[vertexId * 3 + 1], positions[vertexId * 3 + 2]);\r\n Vector3.TransformCoordinatesToRef(result.position, transformMatrix, result.position);\r\n\r\n // Get normal\r\n result.normal = new Vector3(normals[vertexId * 3], normals[vertexId * 3 + 1], normals[vertexId * 3 + 2]);\r\n Vector3.TransformNormalToRef(result.normal, transformMatrix, result.normal);\r\n\r\n if (options.captureUVS && uvs) {\r\n const v = uvs[vertexId * 2 + 1];\r\n result.uv = new Vector2(uvs[vertexId * 2], CompatibilityOptions.UseOpenGLOrientationForUV ? 1 - v : v);\r\n }\r\n\r\n return result;\r\n };\r\n\r\n const emptyArray = [0, 0, 0, 0];\r\n\r\n // Inspired by https://github.com/mrdoob/three.js/blob/eee231960882f6f3b6113405f524956145148146/examples/js/geometries/DecalGeometry.js\r\n const clip = (vertices: DecalVertex[], axis: Vector3): Nullable<DecalVertex[]> => {\r\n if (vertices.length === 0) {\r\n return vertices;\r\n }\r\n\r\n const clipSize = 0.5 * Math.abs(Vector3.Dot(size, axis));\r\n\r\n const indexOf = (arr: FloatArray | number[], val: number, start: number, num: number) => {\r\n for (let i = 0; i < num; ++i) {\r\n if (arr[start + i] === val) {\r\n return start + i;\r\n }\r\n }\r\n return -1;\r\n };\r\n\r\n const clipVertices = (v0: DecalVertex, v1: DecalVertex): DecalVertex => {\r\n const clipFactor = Vector3.GetClipFactor(v0.position, v1.position, axis, clipSize);\r\n\r\n let indices = emptyArray;\r\n let weights = emptyArray;\r\n\r\n if (matIndices && matWeights) {\r\n const mat0Index = v0.matrixIndicesOverride ? 0 : v0.vertexIdxForBones;\r\n const v0Indices = v0.matrixIndicesOverride ?? matIndices;\r\n const v0Weights = v0.matrixWeightsOverride ?? matWeights;\r\n\r\n const mat1Index = v1.matrixIndicesOverride ? 0 : v1.vertexIdxForBones;\r\n const v1Indices = v1.matrixIndicesOverride ?? matIndices;\r\n const v1Weights = v1.matrixWeightsOverride ?? matWeights;\r\n\r\n indices = [0, 0, 0, 0];\r\n weights = [0, 0, 0, 0];\r\n\r\n let index = 0;\r\n for (let i = 0; i < 4; ++i) {\r\n if (v0Weights[mat0Index + i] > 0) {\r\n const idx = indexOf(v1Indices, v0Indices[mat0Index + i], mat1Index, 4);\r\n indices[index] = v0Indices[mat0Index + i];\r\n weights[index] = Scalar.Lerp(v0Weights[mat0Index + i], idx >= 0 ? v1Weights[idx] : 0, clipFactor);\r\n index++;\r\n }\r\n }\r\n\r\n for (let i = 0; i < 4 && index < 4; ++i) {\r\n const ind = v1Indices[mat1Index + i];\r\n if (indexOf(v0Indices, ind, mat0Index, 4) !== -1) continue;\r\n\r\n indices[index] = ind;\r\n weights[index] = Scalar.Lerp(0, v1Weights[mat1Index + i], clipFactor);\r\n index++;\r\n }\r\n\r\n const sumw = weights[0] + weights[1] + weights[2] + weights[3];\r\n\r\n weights[0] /= sumw;\r\n weights[1] /= sumw;\r\n weights[2] /= sumw;\r\n weights[3] /= sumw;\r\n }\r\n\r\n const v0LocalPositionX = v0.localPositionOverride ? v0.localPositionOverride[0] : localPositions?.[v0.vertexIdx] ?? 0;\r\n const v0LocalPositionY = v0.localPositionOverride ? v0.localPositionOverride[1] : localPositions?.[v0.vertexIdx + 1] ?? 0;\r\n const v0LocalPositionZ = v0.localPositionOverride ? v0.localPositionOverride[2] : localPositions?.[v0.vertexIdx + 2] ?? 0;\r\n\r\n const v1LocalPositionX = v1.localPositionOverride ? v1.localPositionOverride[0] : localPositions?.[v1.vertexIdx] ?? 0;\r\n const v1LocalPositionY = v1.localPositionOverride ? v1.localPositionOverride[1] : localPositions?.[v1.vertexIdx + 1] ?? 0;\r\n const v1LocalPositionZ = v1.localPositionOverride ? v1.localPositionOverride[2] : localPositions?.[v1.vertexIdx + 2] ?? 0;\r\n\r\n const v0LocalNormalX = v0.localNormalOverride ? v0.localNormalOverride[0] : localNormals?.[v0.vertexIdx] ?? 0;\r\n const v0LocalNormalY = v0.localNormalOverride ? v0.localNormalOverride[1] : localNormals?.[v0.vertexIdx + 1] ?? 0;\r\n const v0LocalNormalZ = v0.localNormalOverride ? v0.localNormalOverride[2] : localNormals?.[v0.vertexIdx + 2] ?? 0;\r\n\r\n const v1LocalNormalX = v1.localNormalOverride ? v1.localNormalOverride[0] : localNormals?.[v1.vertexIdx] ?? 0;\r\n const v1LocalNormalY = v1.localNormalOverride ? v1.localNormalOverride[1] : localNormals?.[v1.vertexIdx + 1] ?? 0;\r\n const v1LocalNormalZ = v1.localNormalOverride ? v1.localNormalOverride[2] : localNormals?.[v1.vertexIdx + 2] ?? 0;\r\n\r\n const interpNormalX = v0LocalNormalX + (v1LocalNormalX - v0LocalNormalX) * clipFactor;\r\n const interpNormalY = v0LocalNormalY + (v1LocalNormalY - v0LocalNormalY) * clipFactor;\r\n const interpNormalZ = v0LocalNormalZ + (v1LocalNormalZ - v0LocalNormalZ) * clipFactor;\r\n\r\n const norm = Math.sqrt(interpNormalX * interpNormalX + interpNormalY * interpNormalY + interpNormalZ * interpNormalZ);\r\n\r\n return new DecalVertex(\r\n Vector3.Lerp(v0.position, v1.position, clipFactor),\r\n Vector3.Lerp(v0.normal, v1.normal, clipFactor).normalize(),\r\n Vector2.Lerp(v0.uv, v1.uv, clipFactor),\r\n -1,\r\n -1,\r\n localPositions\r\n ? [\r\n v0LocalPositionX + (v1LocalPositionX - v0LocalPositionX) * clipFactor,\r\n v0LocalPositionY + (v1LocalPositionY - v0LocalPositionY) * clipFactor,\r\n v0LocalPositionZ + (v1LocalPositionZ - v0LocalPositionZ) * clipFactor,\r\n ]\r\n : null,\r\n localNormals ? [interpNormalX / norm, interpNormalY / norm, interpNormalZ / norm] : null,\r\n indices,\r\n weights\r\n );\r\n };\r\n\r\n let clipResult: Nullable<DecalVertex[]> = null;\r\n\r\n if (vertices.length > 3) {\r\n clipResult = [] as DecalVertex[];\r\n }\r\n\r\n for (let index = 0; index < vertices.length; index += 3) {\r\n let total = 0;\r\n let nV1: Nullable<DecalVertex> = null;\r\n let nV2: Nullable<DecalVertex> = null;\r\n let nV3: Nullable<DecalVertex> = null;\r\n let nV4: Nullable<DecalVertex> = null;\r\n\r\n const d1 = Vector3.Dot(vertices[index].position, axis) - clipSize;\r\n const d2 = Vector3.Dot(vertices[index + 1].position, axis) - clipSize;\r\n const d3 = Vector3.Dot(vertices[index + 2].position, axis) - clipSize;\r\n\r\n const v1Out = d1 > 0;\r\n const v2Out = d2 > 0;\r\n const v3Out = d3 > 0;\r\n\r\n total = (v1Out ? 1 : 0) + (v2Out ? 1 : 0) + (v3Out ? 1 : 0);\r\n\r\n switch (total) {\r\n case 0:\r\n if (vertices.length > 3) {\r\n clipResult!.push(vertices[index]);\r\n clipResult!.push(vertices[index + 1]);\r\n clipResult!.push(vertices[index + 2]);\r\n } else {\r\n clipResult = vertices;\r\n }\r\n break;\r\n case 1:\r\n clipResult = clipResult ?? new Array<DecalVertex>();\r\n if (v1Out) {\r\n nV1 = vertices[index + 1];\r\n nV2 = vertices[index + 2];\r\n nV3 = clipVertices(vertices[index], nV1);\r\n nV4 = clipVertices(vertices[index], nV2);\r\n }\r\n\r\n if (v2Out) {\r\n nV1 = vertices[index];\r\n nV2 = vertices[index + 2];\r\n nV3 = clipVertices(vertices[index + 1], nV1);\r\n nV4 = clipVertices(vertices[index + 1], nV2);\r\n\r\n clipResult.push(nV3);\r\n clipResult.push(nV2.clone());\r\n clipResult.push(nV1.clone());\r\n\r\n clipResult.push(nV2.clone());\r\n clipResult.push(nV3.clone());\r\n clipResult.push(nV4);\r\n break;\r\n }\r\n if (v3Out) {\r\n nV1 = vertices[index];\r\n nV2 = vertices[index + 1];\r\n nV3 = clipVertices(vertices[index + 2], nV1);\r\n nV4 = clipVertices(vertices[index + 2], nV2);\r\n }\r\n\r\n if (nV1 && nV2 && nV3 && nV4) {\r\n clipResult.push(nV1.clone());\r\n clipResult.push(nV2.clone());\r\n clipResult.push(nV3);\r\n\r\n clipResult.push(nV4);\r\n clipResult.push(nV3.clone());\r\n clipResult.push(nV2.clone());\r\n }\r\n break;\r\n case 2:\r\n clipResult = clipResult ?? new Array<DecalVertex>();\r\n if (!v1Out) {\r\n nV1 = vertices[index].clone();\r\n nV2 = clipVertices(nV1, vertices[index + 1]);\r\n nV3 = clipVertices(nV1, vertices[index + 2]);\r\n clipResult.push(nV1);\r\n clipResult.push(nV2);\r\n clipResult.push(nV3);\r\n }\r\n if (!v2Out) {\r\n nV1 = vertices[index + 1].clone();\r\n nV2 = clipVertices(nV1, vertices[index + 2]);\r\n nV3 = clipVertices(nV1, vertices[index]);\r\n clipResult.push(nV1);\r\n clipResult.push(nV2);\r\n clipResult.push(nV3);\r\n }\r\n if (!v3Out) {\r\n nV1 = vertices[index + 2].clone();\r\n nV2 = clipVertices(nV1, vertices[index]);\r\n nV3 = clipVertices(nV1, vertices[index + 1]);\r\n clipResult.push(nV1);\r\n clipResult.push(nV2);\r\n clipResult.push(nV3);\r\n }\r\n break;\r\n case 3:\r\n break;\r\n }\r\n }\r\n\r\n return clipResult;\r\n };\r\n\r\n const sourceMeshAsMesh = sourceMesh instanceof Mesh ? sourceMesh : null;\r\n const matrixData = sourceMeshAsMesh?._thinInstanceDataStorage.matrixData;\r\n\r\n const numMatrices = sourceMeshAsMesh?.thinInstanceCount || 1;\r\n const thinInstanceMatrix = TmpVectors.Matrix[0];\r\n\r\n thinInstanceMatrix.copyFrom(Matrix.IdentityReadOnly);\r\n\r\n for (let m = 0; m < numMatrices; ++m) {\r\n if (sourceMeshAsMesh?.hasThinInstances && matrixData) {\r\n const ofst = m * 16;\r\n\r\n thinInstanceMatrix.setRowFromFloats(0, matrixData[ofst + 0], matrixData[ofst + 1], matrixData[ofst + 2], matrixData[ofst + 3]);\r\n thinInstanceMatrix.setRowFromFloats(1, matrixData[ofst + 4], matrixData[ofst + 5], matrixData[ofst + 6], matrixData[ofst + 7]);\r\n thinInstanceMatrix.setRowFromFloats(2, matrixData[ofst + 8], matrixData[ofst + 9], matrixData[ofst + 10], matrixData[ofst + 11]);\r\n thinInstanceMatrix.setRowFromFloats(3, matrixData[ofst + 12], matrixData[ofst + 13], matrixData[ofst + 14], matrixData[ofst + 15]);\r\n }\r\n\r\n // Matrix\r\n const decalWorldMatrix = Matrix.RotationYawPitchRoll(yaw, pitch, angle).multiply(Matrix.Translation(position.x, position.y, position.z));\r\n const inverseDecalWorldMatrix = Matrix.Invert(decalWorldMatrix);\r\n const meshWorldMatrix = sourceMesh.getWorldMatrix();\r\n const transformMatrix = thinInstanceMatrix.multiply(meshWorldMatrix).multiply(inverseDecalWorldMatrix);\r\n\r\n const oneFaceVertices = new Array<DecalVertex>(3);\r\n\r\n for (let index = 0; index < indices.length; index += 3) {\r\n let faceVertices: Nullable<DecalVertex[]> = oneFaceVertices;\r\n\r\n faceVertices[0] = extractDecalVector3(index, transformMatrix);\r\n if (meshHasOverridenMaterial && useLocalComputation) {\r\n faceVertices[1] = extractDecalVector3(index + 2, transformMatrix);\r\n faceVertices[2] = extractDecalVector3(index + 1, transformMatrix);\r\n } else {\r\n faceVertices[1] = extractDecalVector3(index + 1, transformMatrix);\r\n faceVertices[2] = extractDecalVector3(index + 2, transformMatrix);\r\n }\r\n\r\n if (options.cullBackFaces) {\r\n // If all the normals of the vertices of the face are pointing away from the view direction we discard the face.\r\n // As computations are done in the decal coordinate space, the viewDirection is (0,0,1), so when dot(vertexNormal, -viewDirection) <= 0 the vertex is culled\r\n if (-faceVertices[0].normal.z <= 0 && -faceVertices[1].normal.z <= 0 && -faceVertices[2].normal.z <= 0) {\r\n continue;\r\n }\r\n }\r\n\r\n // Clip\r\n faceVertices = clip(faceVertices, xpAxis);\r\n if (!faceVertices) continue;\r\n faceVertices = clip(faceVertices, xnAxis);\r\n if (!faceVertices) continue;\r\n faceVertices = clip(faceVertices, ypAxis);\r\n if (!faceVertices) continue;\r\n faceVertices = clip(faceVertices, ynAxis);\r\n if (!faceVertices) continue;\r\n faceVertices = clip(faceVertices, zpAxis);\r\n if (!faceVertices) continue;\r\n faceVertices = clip(faceVertices, znAxis);\r\n if (!faceVertices) continue;\r\n\r\n // Add UVs and get back to world\r\n for (let vIndex = 0; vIndex < faceVertices.length; vIndex++) {\r\n const vertex = faceVertices[vIndex];\r\n\r\n //TODO check for Int32Array | Uint32Array | Uint16Array\r\n (<number[]>vertexData.indices).push(currentVertexDataIndex);\r\n if (useLocalComputation) {\r\n if (vertex.localPositionOverride) {\r\n vertexData.positions[currentVertexDataIndex * 3] = vertex.localPositionOverride[0];\r\n vertexData.positions[currentVertexDataIndex * 3 + 1] = vertex.localPositionOverride[1];\r\n vertexData.positions[currentVertexDataIndex * 3 + 2] = vertex.localPositionOverride[2];\r\n } else if (localPositions) {\r\n vertexData.positions[currentVertexDataIndex * 3] = localPositions[vertex.vertexIdx];\r\n vertexData.positions[currentVertexDataIndex * 3 + 1] = localPositions[vertex.vertexIdx + 1];\r\n vertexData.positions[currentVertexDataIndex * 3 + 2] = localPositions[vertex.vertexIdx + 2];\r\n }\r\n if (vertex.localNormalOverride) {\r\n vertexData.normals[currentVertexDataIndex * 3] = vertex.localNormalOverride[0];\r\n vertexData.normals[currentVertexDataIndex * 3 + 1] = vertex.localNormalOverride[1];\r\n vertexData.normals[currentVertexDataIndex * 3 + 2] = vertex.localNormalOverride[2];\r\n } else if (localNormals) {\r\n vertexData.normals[currentVertexDataIndex * 3] = localNormals[vertex.vertexIdx];\r\n vertexData.normals[currentVertexDataIndex * 3 + 1] = localNormals[vertex.vertexIdx + 1];\r\n vertexData.normals[currentVertexDataIndex * 3 + 2] = localNormals[vertex.vertexIdx + 2];\r\n }\r\n } else {\r\n vertex.position.toArray(vertexData.positions, currentVertexDataIndex * 3);\r\n vertex.normal.toArray(vertexData.normals, currentVertexDataIndex * 3);\r\n }\r\n if (vertexData.matricesIndices && vertexData.matricesWeights) {\r\n if (vertex.matrixIndicesOverride) {\r\n vertexData.matricesIndices[currentVertexDataIndex * 4] = vertex.matrixIndicesOverride[0];\r\n vertexData.matricesIndices[currentVertexDataIndex * 4 + 1] = vertex.matrixIndicesOverride[1];\r\n vertexData.matricesIndices[currentVertexDataIndex * 4 + 2] = vertex.matrixIndicesOverride[2];\r\n vertexData.matricesIndices[currentVertexDataIndex * 4 + 3] = vertex.matrixIndicesOverride[3];\r\n } else {\r\n if (matIndices) {\r\n vertexData.matricesIndices[currentVertexDataIndex * 4] = matIndices[vertex.vertexIdxForBones];\r\n vertexData.matricesIndices[currentVertexDataIndex * 4 + 1] = matIndices[vertex.vertexIdxForBones + 1];\r\n vertexData.matricesIndices[currentVertexDataIndex * 4 + 2] = matIndices[vertex.vertexIdxForBones + 2];\r\n vertexData.matricesIndices[currentVertexDataIndex * 4 + 3] = matIndices[vertex.vertexIdxForBones + 3];\r\n }\r\n if (matIndicesExtra && vertexData.matricesIndicesExtra) {\r\n vertexData.matricesIndicesExtra[currentVertexDataIndex * 4] = matIndicesExtra[vertex.vertexIdxForBones];\r\n vertexData.matricesIndicesExtra[currentVertexDataIndex * 4 + 1] = matIndicesExtra[vertex.vertexIdxForBones + 1];\r\n vertexData.matricesIndicesExtra[currentVertexDataIndex * 4 + 2] = matIndicesExtra[vertex.vertexIdxForBones + 2];\r\n vertexData.matricesIndicesExtra[currentVertexDataIndex * 4 + 3] = matIndicesExtra[vertex.vertexIdxForBones + 3];\r\n }\r\n }\r\n if (vertex.matrixWeightsOverride) {\r\n vertexData.matricesWeights[currentVertexDataIndex * 4] = vertex.matrixWeightsOverride[0];\r\n vertexData.matricesWeights[currentVertexDataIndex * 4 + 1] = vertex.matrixWeightsOverride[1];\r\n vertexData.matricesWeights[currentVertexDataIndex * 4 + 2] = vertex.matrixWeightsOverride[2];\r\n vertexData.matricesWeights[currentVertexDataIndex * 4 + 3] = vertex.matrixWeightsOverride[3];\r\n } else {\r\n if (matWeights) {\r\n vertexData.matricesWeights[currentVertexDataIndex * 4] = matWeights[vertex.vertexIdxForBones];\r\n vertexData.matricesWeights[currentVertexDataIndex * 4 + 1] = matWeights[vertex.vertexIdxForBones + 1];\r\n vertexData.matricesWeights[currentVertexDataIndex * 4 + 2] = matWeights[vertex.vertexIdxForBones + 2];\r\n vertexData.matricesWeights[currentVertexDataIndex * 4 + 3] = matWeights[vertex.vertexIdxForBones + 3];\r\n }\r\n if (matWeightsExtra && vertexData.matricesWeightsExtra) {\r\n vertexData.matricesWeightsExtra[currentVertexDataIndex * 4] = matWeightsExtra[vertex.vertexIdxForBones];\r\n vertexData.matricesWeightsExtra[currentVertexDataIndex * 4 + 1] = matWeightsExtra[vertex.vertexIdxForBones + 1];\r\n vertexData.matricesWeightsExtra[currentVertexDataIndex * 4 + 2] = matWeightsExtra[vertex.vertexIdxForBones + 2];\r\n vertexData.matricesWeightsExtra[currentVertexDataIndex * 4 + 3] = matWeightsExtra[vertex.vertexIdxForBones + 3];\r\n }\r\n }\r\n }\r\n\r\n if (!options.captureUVS) {\r\n (<number[]>vertexData.uvs).push(0.5 + vertex.position.x / size.x);\r\n const v = 0.5 + vertex.position.y / size.y;\r\n (<number[]>vertexData.uvs).push(CompatibilityOptions.UseOpenGLOrientationForUV ? 1 - v : v);\r\n } else {\r\n vertex.uv.toArray(vertexData.uvs, currentVertexDataIndex * 2);\r\n }\r\n currentVertexDataIndex++;\r\n }\r\n }\r\n }\r\n\r\n // Avoid the \"Setting vertex data kind 'XXX' with an empty array\" warning when calling vertexData.applyToMesh\r\n if (vertexData.indices.length === 0) vertexData.indices = null;\r\n if (vertexData.positions.length === 0) vertexData.positions = null;\r\n if (vertexData.normals.length === 0) vertexData.normals = null;\r\n if (vertexData.uvs.length === 0) vertexData.uvs = null;\r\n if (vertexData.matricesIndices?.length === 0) vertexData.matricesIndices = null;\r\n if (vertexData.matricesWeights?.length === 0) vertexData.matricesWeights = null;\r\n if (vertexData.matricesIndicesExtra?.length === 0) vertexData.matricesIndicesExtra = null;\r\n if (vertexData.matricesWeightsExtra?.length === 0) vertexData.matricesWeightsExtra = null;\r\n\r\n // Return mesh\r\n const decal = new Mesh(name, sourceMesh.getScene());\r\n vertexData.applyToMesh(decal);\r\n\r\n if (useLocalComputation) {\r\n decal.skeleton = sourceMesh.skeleton;\r\n decal.parent = sourceMesh;\r\n } else {\r\n decal.position = position.clone();\r\n decal.rotation = new Vector3(pitch, yaw, angle);\r\n }\r\n\r\n decal.computeWorldMatrix(true);\r\n decal.refreshBoundingInfo(true, true);\r\n\r\n return decal;\r\n}\r\n\r\n/**\r\n * Class containing static functions to help procedurally build meshes\r\n * @deprecated use the function directly from the module\r\n */\r\nexport const DecalBuilder = {\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n CreateDecal,\r\n};\r\n\r\nMesh.CreateDecal = (name: string, sourceMesh: AbstractMesh, position: Vector3, normal: Vector3, size: Vector3, angle: number): Mesh => {\r\n const options = {\r\n position,\r\n normal,\r\n size,\r\n angle,\r\n };\r\n\r\n return CreateDecal(name, sourceMesh, options);\r\n};\r\n"]}
|
|
@@ -82,7 +82,7 @@ export var GreasedLineMeshWidthDistribution;
|
|
|
82
82
|
* @returns StandardMaterial or PBRMaterial with the @see GreasedLinePluginMaterial attached to it
|
|
83
83
|
*/
|
|
84
84
|
export function CreateGreasedLineMaterial(name, options, scene) {
|
|
85
|
-
scene = (scene
|
|
85
|
+
scene = (scene ?? EngineStore.LastCreatedScene);
|
|
86
86
|
let material;
|
|
87
87
|
switch (options.materialType) {
|
|
88
88
|
case GreasedLineMeshMaterialType.MATERIAL_TYPE_PBR:
|
|
@@ -108,32 +108,32 @@ export function CreateGreasedLineMaterial(name, options, scene) {
|
|
|
108
108
|
* @returns instance of GreasedLineMesh
|
|
109
109
|
*/
|
|
110
110
|
export function CreateGreasedLine(name, options, materialOptions, scene) {
|
|
111
|
-
|
|
112
|
-
scene = (scene !== null && scene !== void 0 ? scene : EngineStore.LastCreatedScene);
|
|
111
|
+
scene = (scene ?? EngineStore.LastCreatedScene);
|
|
113
112
|
let instance;
|
|
114
113
|
const allPoints = GreasedLineTools.ConvertPoints(options.points);
|
|
115
|
-
options.widthDistribution =
|
|
114
|
+
options.widthDistribution = options.widthDistribution ?? GreasedLineMeshWidthDistribution.WIDTH_DISTRIBUTION_START;
|
|
116
115
|
if (options.ribbonOptions) {
|
|
117
|
-
options.ribbonOptions.facesMode =
|
|
118
|
-
options.ribbonOptions.pointsMode =
|
|
116
|
+
options.ribbonOptions.facesMode = options.ribbonOptions.facesMode ?? GreasedLineRibbonFacesMode.FACES_MODE_SINGLE_SIDED_NO_BACKFACE_CULLING;
|
|
117
|
+
options.ribbonOptions.pointsMode = options.ribbonOptions.pointsMode ?? GreasedLineRibbonPointsMode.POINTS_MODE_POINTS;
|
|
119
118
|
options.ribbonOptions.directionsAutoMode =
|
|
120
|
-
|
|
119
|
+
options.ribbonOptions.directionsAutoMode ??
|
|
120
|
+
(options.ribbonOptions.directions ? GreasedLineRibbonAutoDirectionMode.AUTO_DIRECTIONS_NONE : GreasedLineRibbonAutoDirectionMode.AUTO_DIRECTIONS_FROM_FIRST_SEGMENT);
|
|
121
121
|
}
|
|
122
|
-
materialOptions = materialOptions
|
|
122
|
+
materialOptions = materialOptions ?? {
|
|
123
123
|
color: GreasedLineMaterialDefaults.DEFAULT_COLOR,
|
|
124
124
|
};
|
|
125
|
-
materialOptions.createAndAssignMaterial =
|
|
126
|
-
materialOptions.colorDistribution =
|
|
127
|
-
materialOptions.materialType =
|
|
125
|
+
materialOptions.createAndAssignMaterial = materialOptions.createAndAssignMaterial ?? true;
|
|
126
|
+
materialOptions.colorDistribution = materialOptions?.colorDistribution ?? GreasedLineMeshColorDistribution.COLOR_DISTRIBUTION_START;
|
|
127
|
+
materialOptions.materialType = materialOptions.materialType ?? GreasedLineMeshMaterialType.MATERIAL_TYPE_STANDARD;
|
|
128
128
|
let length = 0;
|
|
129
129
|
if (Array.isArray(allPoints[0])) {
|
|
130
130
|
allPoints.forEach((points) => {
|
|
131
131
|
length += points.length / 3;
|
|
132
132
|
});
|
|
133
133
|
}
|
|
134
|
-
const widths = CompleteGreasedLineWidthTable(length,
|
|
135
|
-
const colors =
|
|
136
|
-
? CompleteGreasedLineColorTable(length, materialOptions.colors, materialOptions.colorDistribution,
|
|
134
|
+
const widths = CompleteGreasedLineWidthTable(length, options.widths ?? [], options.widthDistribution);
|
|
135
|
+
const colors = materialOptions?.colors
|
|
136
|
+
? CompleteGreasedLineColorTable(length, materialOptions.colors, materialOptions.colorDistribution, materialOptions.color ?? GreasedLineMaterialDefaults.DEFAULT_COLOR)
|
|
137
137
|
: undefined;
|
|
138
138
|
// create new mesh if instance is not defined
|
|
139
139
|
const initialGreasedLineOptions = {
|
|
@@ -147,7 +147,7 @@ export function CreateGreasedLine(name, options, materialOptions, scene) {
|
|
|
147
147
|
};
|
|
148
148
|
if (initialGreasedLineOptions.ribbonOptions) {
|
|
149
149
|
if (initialGreasedLineOptions.ribbonOptions.pointsMode === GreasedLineRibbonPointsMode.POINTS_MODE_POINTS) {
|
|
150
|
-
initialGreasedLineOptions.ribbonOptions.width =
|
|
150
|
+
initialGreasedLineOptions.ribbonOptions.width = materialOptions.width ?? initialGreasedLineOptions.ribbonOptions.width ?? GreasedLineMaterialDefaults.DEFAULT_WIDTH;
|
|
151
151
|
}
|
|
152
152
|
}
|
|
153
153
|
if (!options.instance) {
|
|
@@ -177,7 +177,7 @@ export function CreateGreasedLine(name, options, materialOptions, scene) {
|
|
|
177
177
|
if (materialOptions.createAndAssignMaterial) {
|
|
178
178
|
const material = CreateGreasedLineMaterial(name, initialMaterialOptions, scene);
|
|
179
179
|
instance.material = material;
|
|
180
|
-
if (
|
|
180
|
+
if (options.ribbonOptions?.facesMode === GreasedLineRibbonFacesMode.FACES_MODE_SINGLE_SIDED_NO_BACKFACE_CULLING) {
|
|
181
181
|
material.backFaceCulling = false;
|
|
182
182
|
}
|
|
183
183
|
}
|