@babylonjs/core 8.53.0 → 8.53.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Animations/animatorAvatar.d.ts +5 -2
- package/Animations/animatorAvatar.js +40 -27
- package/Animations/animatorAvatar.js.map +1 -1
- package/Cameras/Inputs/geospatialCameraMouseWheelInput.d.ts +1 -2
- package/Cameras/Inputs/geospatialCameraMouseWheelInput.js +1 -2
- package/Cameras/Inputs/geospatialCameraMouseWheelInput.js.map +1 -1
- package/Cameras/Inputs/geospatialCameraPointersInput.d.ts +0 -4
- package/Cameras/Inputs/geospatialCameraPointersInput.js +1 -5
- package/Cameras/Inputs/geospatialCameraPointersInput.js.map +1 -1
- package/Cameras/cameraMovement.d.ts +1 -4
- package/Cameras/cameraMovement.js +1 -4
- package/Cameras/cameraMovement.js.map +1 -1
- package/Cameras/geospatialCamera.d.ts +22 -4
- package/Cameras/geospatialCamera.js +27 -9
- package/Cameras/geospatialCamera.js.map +1 -1
- package/Cameras/geospatialCameraMovement.d.ts +3 -3
- package/Cameras/geospatialCameraMovement.js +18 -18
- package/Cameras/geospatialCameraMovement.js.map +1 -1
- package/Engines/WebGPU/Extensions/engine.debugging.js +35 -13
- package/Engines/WebGPU/Extensions/engine.debugging.js.map +1 -1
- package/Engines/abstractEngine.js +2 -2
- package/Engines/abstractEngine.js.map +1 -1
- package/Engines/engineFeatures.d.ts +0 -2
- package/Engines/engineFeatures.js.map +1 -1
- package/Engines/nullEngine.js +0 -1
- package/Engines/nullEngine.js.map +1 -1
- package/Engines/thinEngine.js +0 -1
- package/Engines/thinEngine.js.map +1 -1
- package/Engines/thinNativeEngine.js +0 -1
- package/Engines/thinNativeEngine.js.map +1 -1
- package/Engines/thinWebGPUEngine.d.ts +9 -4
- package/Engines/thinWebGPUEngine.js +32 -32
- package/Engines/thinWebGPUEngine.js.map +1 -1
- package/Engines/webgpuEngine.d.ts +1 -0
- package/Engines/webgpuEngine.js +24 -165
- package/Engines/webgpuEngine.js.map +1 -1
- package/FrameGraph/Passes/renderPass.js +0 -3
- package/FrameGraph/Passes/renderPass.js.map +1 -1
- package/FrameGraph/Tasks/Rendering/objectRendererTask.d.ts +2 -3
- package/FrameGraph/Tasks/Rendering/objectRendererTask.js +5 -29
- package/FrameGraph/Tasks/Rendering/objectRendererTask.js.map +1 -1
- package/FrameGraph/frameGraph.js +3 -0
- package/FrameGraph/frameGraph.js.map +1 -1
- package/FrameGraph/frameGraphContext.js +1 -1
- package/FrameGraph/frameGraphContext.js.map +1 -1
- package/FrameGraph/frameGraphTask.d.ts +0 -2
- package/FrameGraph/frameGraphTask.js +15 -17
- package/FrameGraph/frameGraphTask.js.map +1 -1
- package/FrameGraph/frameGraphTextureManager.js +1 -1
- package/FrameGraph/frameGraphTextureManager.js.map +1 -1
- package/Gizmos/axisScaleGizmo.js +2 -2
- package/Gizmos/axisScaleGizmo.js.map +1 -1
- package/Gizmos/cameraGizmo.d.ts +1 -1
- package/Gizmos/cameraGizmo.js +1 -1
- package/Gizmos/cameraGizmo.js.map +1 -1
- package/Gizmos/gizmo.d.ts +4 -4
- package/Gizmos/gizmo.js +5 -5
- package/Gizmos/gizmo.js.map +1 -1
- package/Gizmos/gizmoManager.d.ts +2 -2
- package/Gizmos/gizmoManager.js +1 -1
- package/Gizmos/gizmoManager.js.map +1 -1
- package/Gizmos/planeRotationGizmo.d.ts +2 -2
- package/Gizmos/planeRotationGizmo.js +2 -3
- package/Gizmos/planeRotationGizmo.js.map +1 -1
- package/Gizmos/positionGizmo.d.ts +1 -1
- package/Gizmos/positionGizmo.js +2 -2
- package/Gizmos/positionGizmo.js.map +1 -1
- package/Gizmos/rotationGizmo.d.ts +1 -1
- package/Gizmos/rotationGizmo.js +3 -3
- package/Gizmos/rotationGizmo.js.map +1 -1
- package/Gizmos/scaleGizmo.d.ts +1 -1
- package/Gizmos/scaleGizmo.js +1 -1
- package/Gizmos/scaleGizmo.js.map +1 -1
- package/Materials/GaussianSplatting/gaussianSplattingSolidColorMaterialPlugin.d.ts +12 -3
- package/Materials/GaussianSplatting/gaussianSplattingSolidColorMaterialPlugin.js +33 -8
- package/Materials/GaussianSplatting/gaussianSplattingSolidColorMaterialPlugin.js.map +1 -1
- package/Materials/uniformBuffer.d.ts +0 -4
- package/Materials/uniformBuffer.js +0 -8
- package/Materials/uniformBuffer.js.map +1 -1
- package/Materials/vertexPullingHelper.functions.d.ts +4 -0
- package/Materials/vertexPullingHelper.functions.js +4 -2
- package/Materials/vertexPullingHelper.functions.js.map +1 -1
- package/Meshes/mesh.js +1 -1
- package/Meshes/mesh.js.map +1 -1
- package/Navigation/INavigationEngine.d.ts +2 -2
- package/Navigation/INavigationEngine.js.map +1 -1
- package/Navigation/Plugins/recastJSPlugin.d.ts +2 -2
- package/Navigation/Plugins/recastJSPlugin.js +14 -5
- package/Navigation/Plugins/recastJSPlugin.js.map +1 -1
- package/Physics/castingResult.d.ts +4 -1
- package/Physics/castingResult.js +1 -1
- package/Physics/castingResult.js.map +1 -1
- package/Physics/joinedPhysicsEngineComponent.js +1 -1
- package/Physics/joinedPhysicsEngineComponent.js.map +1 -1
- package/Physics/physicsHelper.d.ts +8 -8
- package/Physics/physicsHelper.js +7 -7
- package/Physics/physicsHelper.js.map +1 -1
- package/Physics/shapeCastResult.d.ts +4 -0
- package/Physics/shapeCastResult.js +7 -0
- package/Physics/shapeCastResult.js.map +1 -1
- package/Physics/v2/IPhysicsEnginePlugin.d.ts +51 -4
- package/Physics/v2/IPhysicsEnginePlugin.js +12 -12
- package/Physics/v2/IPhysicsEnginePlugin.js.map +1 -1
- package/Physics/v2/characterController.js.map +1 -1
- package/Physics/v2/physicsBody.js.map +1 -1
- package/Physics/v2/physicsConstraint.d.ts +1 -1
- package/Physics/v2/physicsConstraint.js +1 -1
- package/Physics/v2/physicsConstraint.js.map +1 -1
- package/Physics/v2/physicsEngine.d.ts +0 -5
- package/Physics/v2/physicsEngine.js +0 -5
- package/Physics/v2/physicsEngine.js.map +1 -1
- package/Physics/v2/physicsEngineComponent.d.ts +1 -1
- package/Physics/v2/physicsEngineComponent.js.map +1 -1
- package/Physics/v2/physicsMaterial.d.ts +6 -0
- package/Physics/v2/physicsMaterial.js +2 -2
- package/Physics/v2/physicsMaterial.js.map +1 -1
- package/Physics/v2/ragdoll.js.map +1 -1
- package/Rendering/IBLShadows/iblShadowsVoxelRenderer.js +4 -1
- package/Rendering/IBLShadows/iblShadowsVoxelRenderer.js.map +1 -1
- package/Rendering/edgesRenderer.js +1 -0
- package/Rendering/edgesRenderer.js.map +1 -1
- package/Rendering/objectRenderer.js +8 -4
- package/Rendering/objectRenderer.js.map +1 -1
- package/Rendering/renderingGroup.d.ts +1 -1
- package/Rendering/renderingGroup.js +1 -1
- package/Rendering/renderingGroup.js.map +1 -1
- package/Rendering/renderingManager.d.ts +1 -1
- package/Rendering/renderingManager.js.map +1 -1
- package/Shaders/iblVoxelGrid.fragment.js +4 -1
- package/Shaders/iblVoxelGrid.fragment.js.map +1 -1
- package/ShadersWGSL/background.vertex.js +8 -8
- package/ShadersWGSL/background.vertex.js.map +1 -1
- package/ShadersWGSL/boundingBoxRenderer.vertex.js +2 -2
- package/ShadersWGSL/boundingBoxRenderer.vertex.js.map +1 -1
- package/ShadersWGSL/clearQuad.vertex.js +1 -1
- package/ShadersWGSL/clearQuad.vertex.js.map +1 -1
- package/ShadersWGSL/color.vertex.js +1 -1
- package/ShadersWGSL/color.vertex.js.map +1 -1
- package/ShadersWGSL/depth.vertex.js +3 -3
- package/ShadersWGSL/depth.vertex.js.map +1 -1
- package/ShadersWGSL/fluidRenderingParticleDepth.vertex.js +2 -2
- package/ShadersWGSL/fluidRenderingParticleDepth.vertex.js.map +1 -1
- package/ShadersWGSL/fluidRenderingParticleDiffuse.vertex.js +2 -2
- package/ShadersWGSL/fluidRenderingParticleDiffuse.vertex.js.map +1 -1
- package/ShadersWGSL/fluidRenderingParticleThickness.vertex.js +2 -2
- package/ShadersWGSL/fluidRenderingParticleThickness.vertex.js.map +1 -1
- package/ShadersWGSL/fxaa.vertex.js +1 -1
- package/ShadersWGSL/fxaa.vertex.js.map +1 -1
- package/ShadersWGSL/gaussianSplatting.vertex.js +3 -3
- package/ShadersWGSL/gaussianSplatting.vertex.js.map +1 -1
- package/ShadersWGSL/gaussianSplattingDepth.vertex.js +3 -3
- package/ShadersWGSL/gaussianSplattingDepth.vertex.js.map +1 -1
- package/ShadersWGSL/geometry.vertex.js +4 -4
- package/ShadersWGSL/geometry.vertex.js.map +1 -1
- package/ShadersWGSL/glowMapGeneration.vertex.js +4 -4
- package/ShadersWGSL/glowMapGeneration.vertex.js.map +1 -1
- package/ShadersWGSL/glowMapMerge.vertex.js +1 -1
- package/ShadersWGSL/glowMapMerge.vertex.js.map +1 -1
- package/ShadersWGSL/greasedLine.vertex.js +10 -4
- package/ShadersWGSL/greasedLine.vertex.js.map +1 -1
- package/ShadersWGSL/hdrFiltering.vertex.js +1 -1
- package/ShadersWGSL/hdrFiltering.vertex.js.map +1 -1
- package/ShadersWGSL/hdrIrradianceFiltering.vertex.js +1 -1
- package/ShadersWGSL/hdrIrradianceFiltering.vertex.js.map +1 -1
- package/ShadersWGSL/iblVoxelGrid.vertex.js +53 -44
- package/ShadersWGSL/iblVoxelGrid.vertex.js.map +1 -1
- package/ShadersWGSL/iblVoxelSlabDebug.vertex.js +1 -1
- package/ShadersWGSL/iblVoxelSlabDebug.vertex.js.map +1 -1
- package/ShadersWGSL/kernelBlur.vertex.js +2 -2
- package/ShadersWGSL/kernelBlur.vertex.js.map +1 -1
- package/ShadersWGSL/layer.vertex.js +1 -1
- package/ShadersWGSL/layer.vertex.js.map +1 -1
- package/ShadersWGSL/lensFlare.vertex.js +1 -1
- package/ShadersWGSL/lensFlare.vertex.js.map +1 -1
- package/ShadersWGSL/line.vertex.js +2 -2
- package/ShadersWGSL/line.vertex.js.map +1 -1
- package/ShadersWGSL/meshUVSpaceRenderer.vertex.js +2 -2
- package/ShadersWGSL/meshUVSpaceRenderer.vertex.js.map +1 -1
- package/ShadersWGSL/meshUVSpaceRendererFinaliser.vertex.js +1 -1
- package/ShadersWGSL/meshUVSpaceRendererFinaliser.vertex.js.map +1 -1
- package/ShadersWGSL/meshUVSpaceRendererMasker.vertex.js +1 -1
- package/ShadersWGSL/meshUVSpaceRendererMasker.vertex.js.map +1 -1
- package/ShadersWGSL/particles.vertex.js +9 -9
- package/ShadersWGSL/particles.vertex.js.map +1 -1
- package/ShadersWGSL/picking.vertex.js +2 -2
- package/ShadersWGSL/picking.vertex.js.map +1 -1
- package/ShadersWGSL/procedural.vertex.js +1 -1
- package/ShadersWGSL/procedural.vertex.js.map +1 -1
- package/ShadersWGSL/shadowMap.vertex.js +4 -4
- package/ShadersWGSL/shadowMap.vertex.js.map +1 -1
- package/ShadersWGSL/sprites.vertex.js +3 -3
- package/ShadersWGSL/sprites.vertex.js.map +1 -1
- package/XR/features/WebXRControllerPhysics.js +0 -2
- package/XR/features/WebXRControllerPhysics.js.map +1 -1
- package/XR/features/WebXRControllerTeleportation.js +1 -2
- package/XR/features/WebXRControllerTeleportation.js.map +1 -1
- package/XR/features/WebXRDepthSensing.js +1 -0
- package/XR/features/WebXRDepthSensing.js.map +1 -1
- package/XR/features/WebXRHandTracking.js +4 -7
- package/XR/features/WebXRHandTracking.js.map +1 -1
- package/XR/features/WebXRWalkingLocomotion.js +1 -1
- package/XR/features/WebXRWalkingLocomotion.js.map +1 -1
- package/XR/motionController/webXRMicrosoftMixedRealityController.js +1 -1
- package/XR/motionController/webXRMicrosoftMixedRealityController.js.map +1 -1
- package/XR/motionController/webXRMotionControllerManager.js +2 -2
- package/XR/motionController/webXRMotionControllerManager.js.map +1 -1
- package/XR/webXRCamera.d.ts +1 -0
- package/XR/webXRCamera.js +9 -7
- package/XR/webXRCamera.js.map +1 -1
- package/XR/webXRExperienceHelper.d.ts +4 -0
- package/XR/webXRExperienceHelper.js +25 -5
- package/XR/webXRExperienceHelper.js.map +1 -1
- package/XR/webXRInput.d.ts +1 -0
- package/XR/webXRInput.js +6 -0
- package/XR/webXRInput.js.map +1 -1
- package/XR/webXRSessionManager.js +5 -4
- package/XR/webXRSessionManager.js.map +1 -1
- package/package.json +1 -1
- package/scene.js +2 -1
- package/scene.js.map +1 -1
package/Gizmos/scaleGizmo.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scaleGizmo.js","sourceRoot":"","sources":["../../../../dev/core/src/Gizmos/scaleGizmo.ts"],"names":[],"mappings":"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","sourcesContent":["import { Logger } from \"../Misc/logger\";\r\nimport type { EventState, Observer } from \"../Misc/observable\";\r\nimport { Observable } from \"../Misc/observable\";\r\nimport type { Nullable } from \"../types\";\r\nimport { Vector3 } from \"../Maths/math.vector\";\r\nimport type { Quaternion } from \"../Maths/math.vector\";\r\nimport { Color3 } from \"../Maths/math.color\";\r\nimport type { AbstractMesh } from \"../Meshes/abstractMesh\";\r\nimport { CreatePolyhedron } from \"../Meshes/Builders/polyhedronBuilder\";\r\nimport type { GizmoAnchorPoint, GizmoAxisCache, IGizmo } from \"./gizmo\";\r\nimport { GizmoCoordinatesMode, Gizmo } from \"./gizmo\";\r\nimport type { IAxisScaleGizmo } from \"./axisScaleGizmo\";\r\nimport { AxisScaleGizmo } from \"./axisScaleGizmo\";\r\nimport { UtilityLayerRenderer } from \"../Rendering/utilityLayerRenderer\";\r\nimport type { Mesh } from \"../Meshes/mesh\";\r\nimport type { Node } from \"../node\";\r\nimport type { PointerInfo } from \"../Events/pointerEvents\";\r\nimport { StandardMaterial } from \"../Materials/standardMaterial\";\r\nimport type { GizmoManager } from \"./gizmoManager\";\r\nimport type { TransformNode } from \"../Meshes/transformNode\";\r\nimport type { DragEvent, DragStartEndEvent } from \"core/Behaviors/Meshes/pointerDragEvents\";\r\n\r\n/**\r\n * Interface for scale gizmo\r\n */\r\nexport interface IScaleGizmo extends IGizmo {\r\n /** True when the mouse pointer is dragging a gizmo mesh */\r\n readonly isDragging: boolean;\r\n /** Internal gizmo used for interactions on the x axis */\r\n xGizmo: IAxisScaleGizmo;\r\n /** Internal gizmo used for interactions on the y axis */\r\n yGizmo: IAxisScaleGizmo;\r\n /** Internal gizmo used for interactions on the z axis */\r\n zGizmo: IAxisScaleGizmo;\r\n /** Internal gizmo used to scale all axis equally*/\r\n uniformScaleGizmo: IAxisScaleGizmo;\r\n /** Fires an event when any of it's sub gizmos are dragged */\r\n onDragStartObservable: Observable<DragStartEndEvent>;\r\n /** Fires an event when any of it's sub gizmos are being dragged */\r\n onDragObservable: Observable<DragEvent>;\r\n /** Fires an event when any of it's sub gizmos are released from dragging */\r\n onDragEndObservable: Observable<DragStartEndEvent>;\r\n /** Drag distance in babylon units that the gizmo will snap to when dragged */\r\n snapDistance: number;\r\n /** Incremental snap scaling. When true, with a snapDistance of 0.1, scaling will be 1.1,1.2,1.3 instead of, when false: 1.1,1.21,1.33,... */\r\n incrementalSnap: boolean;\r\n /** Sensitivity factor for dragging */\r\n sensitivity: number;\r\n /**\r\n * Builds Gizmo Axis Cache to enable features such as hover state preservation and graying out other axis during manipulation\r\n * @param mesh Axis gizmo mesh\r\n * @param cache Gizmo axis definition used for reactive gizmo UI\r\n */\r\n addToAxisCache(mesh: Mesh, cache: GizmoAxisCache): void;\r\n /**\r\n * Force release the drag action by code\r\n */\r\n releaseDrag(): void;\r\n\r\n /** Default material used to render when gizmo is not disabled or hovered */\r\n coloredMaterial: StandardMaterial;\r\n /** Material used to render when gizmo is hovered with mouse*/\r\n hoverMaterial: StandardMaterial;\r\n /** Material used to render when gizmo is disabled. typically grey.*/\r\n disableMaterial: StandardMaterial;\r\n}\r\n\r\n/**\r\n * Additional options for the scale gizmo\r\n */\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nexport interface ScaleGizmoOptions {\r\n /**\r\n * Additional transform applied to the gizmo.\r\n * @See Gizmo.additionalTransformNode for more detail\r\n */\r\n additionalTransformNode?: TransformNode;\r\n}\r\n\r\n/**\r\n * Gizmo that enables scaling a mesh along 3 axis\r\n */\r\nexport class ScaleGizmo extends Gizmo implements IScaleGizmo {\r\n /**\r\n * Internal gizmo used for interactions on the x axis\r\n */\r\n public xGizmo: IAxisScaleGizmo;\r\n /**\r\n * Internal gizmo used for interactions on the y axis\r\n */\r\n public yGizmo: IAxisScaleGizmo;\r\n /**\r\n * Internal gizmo used for interactions on the z axis\r\n */\r\n public zGizmo: IAxisScaleGizmo;\r\n\r\n /**\r\n * Internal gizmo used to scale all axis equally\r\n */\r\n public uniformScaleGizmo: IAxisScaleGizmo;\r\n\r\n protected _meshAttached: Nullable<AbstractMesh> = null;\r\n protected _nodeAttached: Nullable<Node> = null;\r\n protected _snapDistance: number;\r\n protected _incrementalSnap: boolean = false;\r\n protected _uniformScalingMesh: Mesh;\r\n protected _octahedron: Mesh;\r\n protected _sensitivity: number = 1;\r\n protected _coloredMaterial: StandardMaterial;\r\n protected _hoverMaterial: StandardMaterial;\r\n protected _disableMaterial: StandardMaterial;\r\n protected _observables: Observer<PointerInfo>[] = [];\r\n\r\n /** Node Caching for quick lookup */\r\n protected _gizmoAxisCache: Map<Mesh, GizmoAxisCache> = new Map();\r\n\r\n /** Default material used to render when gizmo is not disabled or hovered */\r\n public get coloredMaterial() {\r\n return this._coloredMaterial;\r\n }\r\n\r\n /** Material used to render when gizmo is hovered with mouse*/\r\n public get hoverMaterial() {\r\n return this._hoverMaterial;\r\n }\r\n\r\n /** Material used to render when gizmo is disabled. typically grey.*/\r\n public get disableMaterial() {\r\n return this._disableMaterial;\r\n }\r\n /** Fires an event when any of it's sub gizmos are dragged */\r\n public onDragStartObservable = new Observable<DragStartEndEvent>();\r\n /** Fires an event when any of it's sub gizmos are being dragged */\r\n public onDragObservable = new Observable<DragEvent>();\r\n /** Fires an event when any of it's sub gizmos are released from dragging */\r\n public onDragEndObservable = new Observable<DragStartEndEvent>();\r\n\r\n public override get attachedMesh() {\r\n return this._meshAttached;\r\n }\r\n public override set attachedMesh(mesh: Nullable<AbstractMesh>) {\r\n this._meshAttached = mesh;\r\n this._nodeAttached = mesh;\r\n const gizmos = [this.xGizmo, this.yGizmo, this.zGizmo, this.uniformScaleGizmo];\r\n for (const gizmo of gizmos) {\r\n if (gizmo.isEnabled) {\r\n gizmo.attachedMesh = mesh;\r\n } else {\r\n gizmo.attachedMesh = null;\r\n }\r\n }\r\n }\r\n\r\n public override get attachedNode() {\r\n return this._nodeAttached;\r\n }\r\n public override set attachedNode(node: Nullable<Node>) {\r\n this._meshAttached = null;\r\n this._nodeAttached = node;\r\n const gizmos = [this.xGizmo, this.yGizmo, this.zGizmo, this.uniformScaleGizmo];\r\n for (const gizmo of gizmos) {\r\n if (gizmo.isEnabled) {\r\n gizmo.attachedNode = node;\r\n } else {\r\n gizmo.attachedNode = null;\r\n }\r\n }\r\n }\r\n\r\n public override set updateScale(value: boolean) {\r\n if (this.xGizmo) {\r\n this.xGizmo.updateScale = value;\r\n this.yGizmo.updateScale = value;\r\n this.zGizmo.updateScale = value;\r\n }\r\n }\r\n public override get updateScale() {\r\n return this.xGizmo.updateScale;\r\n }\r\n /**\r\n * True when the mouse pointer is hovering a gizmo mesh\r\n */\r\n public override get isHovered() {\r\n return this.xGizmo.isHovered || this.yGizmo.isHovered || this.zGizmo.isHovered || this.uniformScaleGizmo.isHovered;\r\n }\r\n\r\n /**\r\n * True when the mouse pointer is dragging a gizmo mesh\r\n */\r\n public get isDragging() {\r\n return this.xGizmo.dragBehavior.dragging || this.yGizmo.dragBehavior.dragging || this.zGizmo.dragBehavior.dragging || this.uniformScaleGizmo.dragBehavior.dragging;\r\n }\r\n\r\n public override get additionalTransformNode() {\r\n return this._additionalTransformNode;\r\n }\r\n\r\n public override set additionalTransformNode(transformNode: TransformNode | undefined) {\r\n const gizmos = [this.xGizmo, this.yGizmo, this.zGizmo, this.uniformScaleGizmo];\r\n for (const gizmo of gizmos) {\r\n gizmo.additionalTransformNode = transformNode;\r\n }\r\n }\r\n\r\n /**\r\n * Creates a ScaleGizmo\r\n * @param gizmoLayer The utility layer the gizmo will be added to\r\n * @param thickness display gizmo axis thickness\r\n * @param gizmoManager\r\n * @param options More options\r\n */\r\n constructor(gizmoLayer: UtilityLayerRenderer = UtilityLayerRenderer.DefaultUtilityLayer, thickness: number = 1, gizmoManager?: GizmoManager, options?: ScaleGizmoOptions) {\r\n super(gizmoLayer);\r\n this.uniformScaleGizmo = this._createUniformScaleMesh();\r\n this.xGizmo = new AxisScaleGizmo(new Vector3(1, 0, 0), Color3.Red().scale(0.5), gizmoLayer, this, thickness);\r\n this.yGizmo = new AxisScaleGizmo(new Vector3(0, 1, 0), Color3.Green().scale(0.5), gizmoLayer, this, thickness);\r\n this.zGizmo = new AxisScaleGizmo(new Vector3(0, 0, 1), Color3.Blue().scale(0.5), gizmoLayer, this, thickness);\r\n\r\n this.additionalTransformNode = options?.additionalTransformNode;\r\n\r\n // Relay drag events\r\n const gizmos = [this.xGizmo, this.yGizmo, this.zGizmo, this.uniformScaleGizmo];\r\n for (const gizmo of gizmos) {\r\n gizmo.dragBehavior.onDragStartObservable.add((eventData: DragStartEndEvent, eventState: EventState) =>\r\n this.onDragStartObservable.notifyObservers(eventData, eventState.mask, eventState.target, eventState.currentTarget, eventState.userInfo)\r\n );\r\n gizmo.dragBehavior.onDragObservable.add((eventData: DragEvent, eventState: EventState) =>\r\n this.onDragObservable.notifyObservers(eventData, eventState.mask, eventState.target, eventState.currentTarget, eventState.userInfo)\r\n );\r\n gizmo.dragBehavior.onDragEndObservable.add((eventData: DragStartEndEvent, eventState: EventState) =>\r\n this.onDragEndObservable.notifyObservers(eventData, eventState.mask, eventState.target, eventState.currentTarget, eventState.userInfo)\r\n );\r\n }\r\n\r\n this.attachedMesh = null;\r\n this.attachedNode = null;\r\n\r\n if (gizmoManager) {\r\n gizmoManager.addToAxisCache(this._gizmoAxisCache);\r\n } else {\r\n // Only subscribe to pointer event if gizmoManager isnt\r\n Gizmo.GizmoAxisPointerObserver(gizmoLayer, this._gizmoAxisCache);\r\n }\r\n }\r\n\r\n /**\r\n * @internal\r\n * Create Geometry for Gizmo\r\n */\r\n protected _createUniformScaleMesh(): AxisScaleGizmo {\r\n this._coloredMaterial = new StandardMaterial(\"\", this.gizmoLayer.utilityLayerScene);\r\n this._coloredMaterial.diffuseColor = Color3.Gray();\r\n\r\n this._hoverMaterial = new StandardMaterial(\"\", this.gizmoLayer.utilityLayerScene);\r\n this._hoverMaterial.diffuseColor = Color3.Yellow();\r\n\r\n this._disableMaterial = new StandardMaterial(\"\", this.gizmoLayer.utilityLayerScene);\r\n this._disableMaterial.diffuseColor = Color3.Gray();\r\n this._disableMaterial.alpha = 0.4;\r\n\r\n const uniformScaleGizmo = new AxisScaleGizmo(new Vector3(0, 1, 0), Color3.Gray().scale(0.5), this.gizmoLayer, this);\r\n uniformScaleGizmo.updateGizmoRotationToMatchAttachedMesh = false;\r\n uniformScaleGizmo.uniformScaling = true;\r\n this._uniformScalingMesh = CreatePolyhedron(\"uniform\", { type: 1 }, uniformScaleGizmo.gizmoLayer.utilityLayerScene);\r\n this._uniformScalingMesh.scaling.scaleInPlace(0.01);\r\n this._uniformScalingMesh.visibility = 0;\r\n this._octahedron = CreatePolyhedron(\"\", { type: 1 }, uniformScaleGizmo.gizmoLayer.utilityLayerScene);\r\n this._octahedron.scaling.scaleInPlace(0.007);\r\n this._uniformScalingMesh.addChild(this._octahedron);\r\n uniformScaleGizmo.setCustomMesh(this._uniformScalingMesh, true);\r\n const light = this.gizmoLayer._getSharedGizmoLight();\r\n light.includedOnlyMeshes = light.includedOnlyMeshes.concat(this._octahedron);\r\n\r\n const cache: GizmoAxisCache = {\r\n gizmoMeshes: [this._octahedron, this._uniformScalingMesh],\r\n colliderMeshes: [this._octahedron, this._uniformScalingMesh],\r\n material: this._coloredMaterial,\r\n hoverMaterial: this._hoverMaterial,\r\n disableMaterial: this._disableMaterial,\r\n active: false,\r\n dragBehavior: uniformScaleGizmo.dragBehavior,\r\n };\r\n\r\n this.addToAxisCache(uniformScaleGizmo._rootMesh, cache);\r\n\r\n return uniformScaleGizmo;\r\n }\r\n\r\n public override set updateGizmoRotationToMatchAttachedMesh(value: boolean) {\r\n if (!value) {\r\n Logger.Warn(\"Setting updateGizmoRotationToMatchAttachedMesh = false on scaling gizmo is not supported.\");\r\n } else {\r\n this._updateGizmoRotationToMatchAttachedMesh = value;\r\n const gizmos = [this.xGizmo, this.yGizmo, this.zGizmo, this.uniformScaleGizmo];\r\n for (const gizmo of gizmos) {\r\n if (gizmo) {\r\n gizmo.updateGizmoRotationToMatchAttachedMesh = value;\r\n }\r\n }\r\n }\r\n }\r\n public override get updateGizmoRotationToMatchAttachedMesh() {\r\n return this._updateGizmoRotationToMatchAttachedMesh;\r\n }\r\n\r\n public override set anchorPoint(value: GizmoAnchorPoint) {\r\n this._anchorPoint = value;\r\n const gizmos = [this.xGizmo, this.yGizmo, this.zGizmo, this.uniformScaleGizmo];\r\n for (const gizmo of gizmos) {\r\n if (gizmo) {\r\n gizmo.anchorPoint = value;\r\n }\r\n }\r\n }\r\n public override get anchorPoint() {\r\n return this._anchorPoint;\r\n }\r\n\r\n /**\r\n * posture that the gizmo will be display\r\n * When set null, default value will be used (Quaternion(0, 0, 0, 1))\r\n */\r\n public override get customRotationQuaternion(): Nullable<Quaternion> {\r\n return this._customRotationQuaternion;\r\n }\r\n\r\n public override set customRotationQuaternion(customRotationQuaternion: Nullable<Quaternion>) {\r\n this._customRotationQuaternion = customRotationQuaternion;\r\n const gizmos = [this.xGizmo, this.yGizmo, this.zGizmo, this.uniformScaleGizmo];\r\n for (const gizmo of gizmos) {\r\n if (gizmo) {\r\n gizmo.customRotationQuaternion = customRotationQuaternion;\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Set the coordinate system to use. By default it's local.\r\n * But it's possible for a user to tweak so its local for translation and world for rotation.\r\n * In that case, setting the coordinate system will change `updateGizmoRotationToMatchAttachedMesh` and `updateGizmoPositionToMatchAttachedMesh`\r\n */\r\n public override set coordinatesMode(coordinatesMode: GizmoCoordinatesMode) {\r\n if (coordinatesMode == GizmoCoordinatesMode.World) {\r\n Logger.Warn(\"Setting coordinates Mode to world on scaling gizmo is not supported.\");\r\n }\r\n const gizmos = [this.xGizmo, this.yGizmo, this.zGizmo, this.uniformScaleGizmo];\r\n for (const gizmo of gizmos) {\r\n gizmo.coordinatesMode = GizmoCoordinatesMode.Local;\r\n }\r\n }\r\n\r\n /**\r\n * Drag distance in babylon units that the gizmo will snap to when dragged (Default: 0)\r\n */\r\n public set snapDistance(value: number) {\r\n this._snapDistance = value;\r\n const gizmos = [this.xGizmo, this.yGizmo, this.zGizmo, this.uniformScaleGizmo];\r\n for (const gizmo of gizmos) {\r\n if (gizmo) {\r\n gizmo.snapDistance = value;\r\n }\r\n }\r\n }\r\n public get snapDistance() {\r\n return this._snapDistance;\r\n }\r\n\r\n /**\r\n * Incremental snap scaling (default is false). When true, with a snapDistance of 0.1, scaling will be 1.1,1.2,1.3 instead of, when false: 1.1,1.21,1.33,...\r\n */\r\n public set incrementalSnap(value: boolean) {\r\n this._incrementalSnap = value;\r\n const gizmos = [this.xGizmo, this.yGizmo, this.zGizmo, this.uniformScaleGizmo];\r\n for (const gizmo of gizmos) {\r\n if (gizmo) {\r\n gizmo.incrementalSnap = value;\r\n }\r\n }\r\n }\r\n public get incrementalSnap() {\r\n return this._incrementalSnap;\r\n }\r\n /**\r\n * Ratio for the scale of the gizmo (Default: 1)\r\n */\r\n public override set scaleRatio(value: number) {\r\n this._scaleRatio = value;\r\n const gizmos = [this.xGizmo, this.yGizmo, this.zGizmo, this.uniformScaleGizmo];\r\n for (const gizmo of gizmos) {\r\n if (gizmo) {\r\n gizmo.scaleRatio = value;\r\n }\r\n }\r\n }\r\n public override get scaleRatio() {\r\n return this._scaleRatio;\r\n }\r\n\r\n /**\r\n * Sensitivity factor for dragging (Default: 1)\r\n */\r\n public set sensitivity(value: number) {\r\n this._sensitivity = value;\r\n const gizmos = [this.xGizmo, this.yGizmo, this.zGizmo, this.uniformScaleGizmo];\r\n for (const gizmo of gizmos) {\r\n if (gizmo) {\r\n gizmo.sensitivity = value;\r\n }\r\n }\r\n }\r\n public get sensitivity() {\r\n return this._sensitivity;\r\n }\r\n\r\n /**\r\n * Builds Gizmo Axis Cache to enable features such as hover state preservation and graying out other axis during manipulation\r\n * @param mesh Axis gizmo mesh\r\n * @param cache Gizmo axis definition used for reactive gizmo UI\r\n */\r\n public addToAxisCache(mesh: Mesh, cache: GizmoAxisCache) {\r\n this._gizmoAxisCache.set(mesh, cache);\r\n }\r\n\r\n /**\r\n * Get the cache set with addToAxisCache for a specific mesh\r\n * @param mesh Axis gizmo mesh\r\n * @returns Gizmo axis definition used for reactive gizmo UI\r\n */\r\n public getAxisCache(mesh: Mesh): GizmoAxisCache | undefined {\r\n return this._gizmoAxisCache.get(mesh);\r\n }\r\n\r\n /**\r\n * Force release the drag action by code\r\n */\r\n public releaseDrag() {\r\n this.xGizmo.dragBehavior.releaseDrag();\r\n this.yGizmo.dragBehavior.releaseDrag();\r\n this.zGizmo.dragBehavior.releaseDrag();\r\n this.uniformScaleGizmo.dragBehavior.releaseDrag();\r\n }\r\n\r\n /**\r\n * Disposes of the gizmo\r\n */\r\n public override dispose() {\r\n const gizmos = [this.xGizmo, this.yGizmo, this.zGizmo, this.uniformScaleGizmo];\r\n for (const gizmo of gizmos) {\r\n if (gizmo) {\r\n gizmo.dispose();\r\n }\r\n }\r\n for (const obs of this._observables) {\r\n this.gizmoLayer.utilityLayerScene.onPointerObservable.remove(obs);\r\n }\r\n this.onDragStartObservable.clear();\r\n this.onDragObservable.clear();\r\n this.onDragEndObservable.clear();\r\n const meshes = [this._uniformScalingMesh, this._octahedron];\r\n for (const msh of meshes) {\r\n if (msh) {\r\n msh.dispose();\r\n }\r\n }\r\n const materials = [this._coloredMaterial, this._hoverMaterial, this._disableMaterial];\r\n for (const matl of materials) {\r\n if (matl) {\r\n matl.dispose();\r\n }\r\n }\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"scaleGizmo.js","sourceRoot":"","sources":["../../../../dev/core/src/Gizmos/scaleGizmo.ts"],"names":[],"mappings":"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","sourcesContent":["import { Logger } from \"../Misc/logger\";\r\nimport type { EventState, Observer } from \"../Misc/observable\";\r\nimport { Observable } from \"../Misc/observable\";\r\nimport type { Nullable } from \"../types\";\r\nimport { Vector3 } from \"../Maths/math.vector\";\r\nimport type { Quaternion } from \"../Maths/math.vector\";\r\nimport { Color3 } from \"../Maths/math.color\";\r\nimport type { AbstractMesh } from \"../Meshes/abstractMesh\";\r\nimport { CreatePolyhedron } from \"../Meshes/Builders/polyhedronBuilder\";\r\nimport type { GizmoAnchorPoint, GizmoAxisCache, IGizmo } from \"./gizmo\";\r\nimport { GizmoCoordinatesMode, Gizmo } from \"./gizmo\";\r\nimport type { IAxisScaleGizmo } from \"./axisScaleGizmo\";\r\nimport { AxisScaleGizmo } from \"./axisScaleGizmo\";\r\nimport { UtilityLayerRenderer } from \"../Rendering/utilityLayerRenderer\";\r\nimport type { Mesh } from \"../Meshes/mesh\";\r\nimport type { Node } from \"../node\";\r\nimport type { PointerInfo } from \"../Events/pointerEvents\";\r\nimport { StandardMaterial } from \"../Materials/standardMaterial\";\r\nimport type { GizmoManager } from \"./gizmoManager\";\r\nimport type { TransformNode } from \"../Meshes/transformNode\";\r\nimport type { DragEvent, DragStartEndEvent } from \"core/Behaviors/Meshes/pointerDragEvents\";\r\n\r\n/**\r\n * Interface for scale gizmo\r\n */\r\nexport interface IScaleGizmo extends IGizmo {\r\n /** True when the mouse pointer is dragging a gizmo mesh */\r\n readonly isDragging: boolean;\r\n /** Internal gizmo used for interactions on the x axis */\r\n xGizmo: IAxisScaleGizmo;\r\n /** Internal gizmo used for interactions on the y axis */\r\n yGizmo: IAxisScaleGizmo;\r\n /** Internal gizmo used for interactions on the z axis */\r\n zGizmo: IAxisScaleGizmo;\r\n /** Internal gizmo used to scale all axis equally*/\r\n uniformScaleGizmo: IAxisScaleGizmo;\r\n /** Fires an event when any of it's sub gizmos are dragged */\r\n onDragStartObservable: Observable<DragStartEndEvent>;\r\n /** Fires an event when any of it's sub gizmos are being dragged */\r\n onDragObservable: Observable<DragEvent>;\r\n /** Fires an event when any of it's sub gizmos are released from dragging */\r\n onDragEndObservable: Observable<DragStartEndEvent>;\r\n /** Drag distance in babylon units that the gizmo will snap to when dragged */\r\n snapDistance: number;\r\n /** Incremental snap scaling. When true, with a snapDistance of 0.1, scaling will be 1.1,1.2,1.3 instead of, when false: 1.1,1.21,1.33,... */\r\n incrementalSnap: boolean;\r\n /** Sensitivity factor for dragging */\r\n sensitivity: number;\r\n /**\r\n * Builds Gizmo Axis Cache to enable features such as hover state preservation and graying out other axis during manipulation\r\n * @param mesh Axis gizmo mesh\r\n * @param cache Gizmo axis definition used for reactive gizmo UI\r\n */\r\n addToAxisCache(mesh: Mesh, cache: GizmoAxisCache): void;\r\n /**\r\n * Force release the drag action by code\r\n */\r\n releaseDrag(): void;\r\n\r\n /** Default material used to render when gizmo is not disabled or hovered */\r\n coloredMaterial: StandardMaterial;\r\n /** Material used to render when gizmo is hovered with mouse*/\r\n hoverMaterial: StandardMaterial;\r\n /** Material used to render when gizmo is disabled. typically grey.*/\r\n disableMaterial: StandardMaterial;\r\n}\r\n\r\n/**\r\n * Additional options for the scale gizmo\r\n */\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nexport interface ScaleGizmoOptions {\r\n /**\r\n * Additional transform applied to the gizmo.\r\n * @See Gizmo.additionalTransformNode for more detail\r\n */\r\n additionalTransformNode?: TransformNode;\r\n}\r\n\r\n/**\r\n * Gizmo that enables scaling a mesh along 3 axis\r\n */\r\nexport class ScaleGizmo extends Gizmo implements IScaleGizmo {\r\n /**\r\n * Internal gizmo used for interactions on the x axis\r\n */\r\n public xGizmo: IAxisScaleGizmo;\r\n /**\r\n * Internal gizmo used for interactions on the y axis\r\n */\r\n public yGizmo: IAxisScaleGizmo;\r\n /**\r\n * Internal gizmo used for interactions on the z axis\r\n */\r\n public zGizmo: IAxisScaleGizmo;\r\n\r\n /**\r\n * Internal gizmo used to scale all axis equally\r\n */\r\n public uniformScaleGizmo: IAxisScaleGizmo;\r\n\r\n protected _meshAttached: Nullable<AbstractMesh> = null;\r\n protected _nodeAttached: Nullable<Node> = null;\r\n protected _snapDistance: number;\r\n protected _incrementalSnap: boolean = false;\r\n protected _uniformScalingMesh: Mesh;\r\n protected _octahedron: Mesh;\r\n protected _sensitivity: number = 1;\r\n protected _coloredMaterial: StandardMaterial;\r\n protected _hoverMaterial: StandardMaterial;\r\n protected _disableMaterial: StandardMaterial;\r\n protected _observables: Observer<PointerInfo>[] = [];\r\n\r\n /** Node Caching for quick lookup */\r\n protected _gizmoAxisCache: Map<Mesh, GizmoAxisCache> = new Map();\r\n\r\n /** Default material used to render when gizmo is not disabled or hovered */\r\n public get coloredMaterial() {\r\n return this._coloredMaterial;\r\n }\r\n\r\n /** Material used to render when gizmo is hovered with mouse*/\r\n public get hoverMaterial() {\r\n return this._hoverMaterial;\r\n }\r\n\r\n /** Material used to render when gizmo is disabled. typically grey.*/\r\n public get disableMaterial() {\r\n return this._disableMaterial;\r\n }\r\n /** Fires an event when any of it's sub gizmos are dragged */\r\n public onDragStartObservable = new Observable<DragStartEndEvent>();\r\n /** Fires an event when any of it's sub gizmos are being dragged */\r\n public onDragObservable = new Observable<DragEvent>();\r\n /** Fires an event when any of it's sub gizmos are released from dragging */\r\n public onDragEndObservable = new Observable<DragStartEndEvent>();\r\n\r\n public override get attachedMesh() {\r\n return this._meshAttached;\r\n }\r\n public override set attachedMesh(mesh: Nullable<AbstractMesh>) {\r\n this._meshAttached = mesh;\r\n this._nodeAttached = mesh;\r\n const gizmos = [this.xGizmo, this.yGizmo, this.zGizmo, this.uniformScaleGizmo];\r\n for (const gizmo of gizmos) {\r\n if (gizmo.isEnabled) {\r\n gizmo.attachedMesh = mesh;\r\n } else {\r\n gizmo.attachedMesh = null;\r\n }\r\n }\r\n }\r\n\r\n public override get attachedNode() {\r\n return this._nodeAttached;\r\n }\r\n public override set attachedNode(node: Nullable<Node>) {\r\n this._meshAttached = null;\r\n this._nodeAttached = node;\r\n const gizmos = [this.xGizmo, this.yGizmo, this.zGizmo, this.uniformScaleGizmo];\r\n for (const gizmo of gizmos) {\r\n if (gizmo.isEnabled) {\r\n gizmo.attachedNode = node;\r\n } else {\r\n gizmo.attachedNode = null;\r\n }\r\n }\r\n }\r\n\r\n public override set updateScale(value: boolean) {\r\n if (this.xGizmo) {\r\n this.xGizmo.updateScale = value;\r\n this.yGizmo.updateScale = value;\r\n this.zGizmo.updateScale = value;\r\n }\r\n }\r\n public override get updateScale() {\r\n return this.xGizmo.updateScale;\r\n }\r\n /**\r\n * True when the mouse pointer is hovering a gizmo mesh\r\n */\r\n public override get isHovered() {\r\n return this.xGizmo.isHovered || this.yGizmo.isHovered || this.zGizmo.isHovered || this.uniformScaleGizmo.isHovered;\r\n }\r\n\r\n /**\r\n * True when the mouse pointer is dragging a gizmo mesh\r\n */\r\n public get isDragging() {\r\n return this.xGizmo.dragBehavior.dragging || this.yGizmo.dragBehavior.dragging || this.zGizmo.dragBehavior.dragging || this.uniformScaleGizmo.dragBehavior.dragging;\r\n }\r\n\r\n public override get additionalTransformNode() {\r\n return this._additionalTransformNode;\r\n }\r\n\r\n public override set additionalTransformNode(transformNode: TransformNode | undefined) {\r\n const gizmos = [this.xGizmo, this.yGizmo, this.zGizmo, this.uniformScaleGizmo];\r\n for (const gizmo of gizmos) {\r\n gizmo.additionalTransformNode = transformNode;\r\n }\r\n }\r\n\r\n /**\r\n * Creates a ScaleGizmo\r\n * @param gizmoLayer The utility layer the gizmo will be added to\r\n * @param thickness display gizmo axis thickness\r\n * @param gizmoManager\r\n * @param options More options\r\n */\r\n constructor(gizmoLayer: UtilityLayerRenderer = UtilityLayerRenderer.DefaultUtilityLayer, thickness: number = 1, gizmoManager?: GizmoManager, options?: ScaleGizmoOptions) {\r\n super(gizmoLayer);\r\n this.uniformScaleGizmo = this._createUniformScaleMesh();\r\n this.xGizmo = new AxisScaleGizmo(new Vector3(1, 0, 0), Color3.Red().scale(0.5), gizmoLayer, this, thickness);\r\n this.yGizmo = new AxisScaleGizmo(new Vector3(0, 1, 0), Color3.Green().scale(0.5), gizmoLayer, this, thickness);\r\n this.zGizmo = new AxisScaleGizmo(new Vector3(0, 0, 1), Color3.Blue().scale(0.5), gizmoLayer, this, thickness);\r\n\r\n this.additionalTransformNode = options?.additionalTransformNode;\r\n\r\n // Relay drag events\r\n const gizmos = [this.xGizmo, this.yGizmo, this.zGizmo, this.uniformScaleGizmo];\r\n for (const gizmo of gizmos) {\r\n gizmo.dragBehavior.onDragStartObservable.add((eventData: DragStartEndEvent, eventState: EventState) =>\r\n this.onDragStartObservable.notifyObservers(eventData, eventState.mask, eventState.target, eventState.currentTarget, eventState.userInfo)\r\n );\r\n gizmo.dragBehavior.onDragObservable.add((eventData: DragEvent, eventState: EventState) =>\r\n this.onDragObservable.notifyObservers(eventData, eventState.mask, eventState.target, eventState.currentTarget, eventState.userInfo)\r\n );\r\n gizmo.dragBehavior.onDragEndObservable.add((eventData: DragStartEndEvent, eventState: EventState) =>\r\n this.onDragEndObservable.notifyObservers(eventData, eventState.mask, eventState.target, eventState.currentTarget, eventState.userInfo)\r\n );\r\n }\r\n\r\n this.attachedMesh = null;\r\n this.attachedNode = null;\r\n\r\n if (gizmoManager) {\r\n gizmoManager.addToAxisCache(this._gizmoAxisCache);\r\n } else {\r\n // Only subscribe to pointer event if gizmoManager isnt\r\n Gizmo.GizmoAxisPointerObserver(gizmoLayer, this._gizmoAxisCache);\r\n }\r\n }\r\n\r\n /**\r\n * @internal\r\n * Create Geometry for Gizmo\r\n */\r\n protected _createUniformScaleMesh(): AxisScaleGizmo {\r\n this._coloredMaterial = new StandardMaterial(\"\", this.gizmoLayer.utilityLayerScene);\r\n this._coloredMaterial.diffuseColor = Color3.Gray();\r\n\r\n this._hoverMaterial = new StandardMaterial(\"\", this.gizmoLayer.utilityLayerScene);\r\n this._hoverMaterial.diffuseColor = Color3.Yellow();\r\n\r\n this._disableMaterial = new StandardMaterial(\"\", this.gizmoLayer.utilityLayerScene);\r\n this._disableMaterial.diffuseColor = Color3.Gray();\r\n this._disableMaterial.alpha = 0.4;\r\n\r\n const uniformScaleGizmo = new AxisScaleGizmo(new Vector3(0, 1, 0), Color3.Gray().scale(0.5), this.gizmoLayer, this);\r\n uniformScaleGizmo.updateGizmoRotationToMatchAttachedMesh = false;\r\n uniformScaleGizmo.uniformScaling = true;\r\n this._uniformScalingMesh = CreatePolyhedron(\"uniform\", { type: 1 }, uniformScaleGizmo.gizmoLayer.utilityLayerScene);\r\n this._uniformScalingMesh.scaling.scaleInPlace(0.01);\r\n this._uniformScalingMesh.visibility = 0;\r\n this._octahedron = CreatePolyhedron(\"\", { type: 1 }, uniformScaleGizmo.gizmoLayer.utilityLayerScene);\r\n this._octahedron.scaling.scaleInPlace(0.007);\r\n this._uniformScalingMesh.addChild(this._octahedron);\r\n uniformScaleGizmo.setCustomMesh(this._uniformScalingMesh, true);\r\n const light = this.gizmoLayer._getSharedGizmoLight();\r\n light.includedOnlyMeshes = light.includedOnlyMeshes.concat(this._octahedron);\r\n\r\n const cache: GizmoAxisCache = {\r\n gizmoMeshes: [this._octahedron, this._uniformScalingMesh],\r\n colliderMeshes: [this._octahedron, this._uniformScalingMesh],\r\n material: this._coloredMaterial,\r\n hoverMaterial: this._hoverMaterial,\r\n disableMaterial: this._disableMaterial,\r\n active: false,\r\n dragBehavior: uniformScaleGizmo.dragBehavior,\r\n };\r\n\r\n this.addToAxisCache(uniformScaleGizmo._rootMesh, cache);\r\n\r\n return uniformScaleGizmo;\r\n }\r\n\r\n public override set updateGizmoRotationToMatchAttachedMesh(value: boolean) {\r\n if (!value) {\r\n Logger.Warn(\"Setting updateGizmoRotationToMatchAttachedMesh = false on scaling gizmo is not supported.\");\r\n } else {\r\n this._updateGizmoRotationToMatchAttachedMesh = value;\r\n const gizmos = [this.xGizmo, this.yGizmo, this.zGizmo, this.uniformScaleGizmo];\r\n for (const gizmo of gizmos) {\r\n if (gizmo) {\r\n gizmo.updateGizmoRotationToMatchAttachedMesh = value;\r\n }\r\n }\r\n }\r\n }\r\n public override get updateGizmoRotationToMatchAttachedMesh() {\r\n return this._updateGizmoRotationToMatchAttachedMesh;\r\n }\r\n\r\n public override set anchorPoint(value: GizmoAnchorPoint) {\r\n this._anchorPoint = value;\r\n const gizmos = [this.xGizmo, this.yGizmo, this.zGizmo, this.uniformScaleGizmo];\r\n for (const gizmo of gizmos) {\r\n if (gizmo) {\r\n gizmo.anchorPoint = value;\r\n }\r\n }\r\n }\r\n public override get anchorPoint() {\r\n return this._anchorPoint;\r\n }\r\n\r\n /**\r\n * Orientation that the gizmo will be displayed with.\r\n * When set null, default value will be used (Quaternion(0, 0, 0, 1))\r\n */\r\n public override get customRotationQuaternion(): Nullable<Quaternion> {\r\n return this._customRotationQuaternion;\r\n }\r\n\r\n public override set customRotationQuaternion(customRotationQuaternion: Nullable<Quaternion>) {\r\n this._customRotationQuaternion = customRotationQuaternion;\r\n const gizmos = [this.xGizmo, this.yGizmo, this.zGizmo, this.uniformScaleGizmo];\r\n for (const gizmo of gizmos) {\r\n if (gizmo) {\r\n gizmo.customRotationQuaternion = customRotationQuaternion;\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Set the coordinate system to use. By default it's local.\r\n * But it's possible for a user to tweak so its local for translation and world for rotation.\r\n * In that case, setting the coordinate system will change `updateGizmoRotationToMatchAttachedMesh` and `updateGizmoPositionToMatchAttachedMesh`\r\n */\r\n public override set coordinatesMode(coordinatesMode: GizmoCoordinatesMode) {\r\n if (coordinatesMode == GizmoCoordinatesMode.World) {\r\n Logger.Warn(\"Setting coordinates Mode to world on scaling gizmo is not supported.\");\r\n }\r\n const gizmos = [this.xGizmo, this.yGizmo, this.zGizmo, this.uniformScaleGizmo];\r\n for (const gizmo of gizmos) {\r\n gizmo.coordinatesMode = GizmoCoordinatesMode.Local;\r\n }\r\n }\r\n\r\n /**\r\n * Drag distance in babylon units that the gizmo will snap to when dragged (Default: 0)\r\n */\r\n public set snapDistance(value: number) {\r\n this._snapDistance = value;\r\n const gizmos = [this.xGizmo, this.yGizmo, this.zGizmo, this.uniformScaleGizmo];\r\n for (const gizmo of gizmos) {\r\n if (gizmo) {\r\n gizmo.snapDistance = value;\r\n }\r\n }\r\n }\r\n public get snapDistance() {\r\n return this._snapDistance;\r\n }\r\n\r\n /**\r\n * Incremental snap scaling (default is false). When true, with a snapDistance of 0.1, scaling will be 1.1,1.2,1.3 instead of, when false: 1.1,1.21,1.33,...\r\n */\r\n public set incrementalSnap(value: boolean) {\r\n this._incrementalSnap = value;\r\n const gizmos = [this.xGizmo, this.yGizmo, this.zGizmo, this.uniformScaleGizmo];\r\n for (const gizmo of gizmos) {\r\n if (gizmo) {\r\n gizmo.incrementalSnap = value;\r\n }\r\n }\r\n }\r\n public get incrementalSnap() {\r\n return this._incrementalSnap;\r\n }\r\n /**\r\n * Ratio for the scale of the gizmo (Default: 1)\r\n */\r\n public override set scaleRatio(value: number) {\r\n this._scaleRatio = value;\r\n const gizmos = [this.xGizmo, this.yGizmo, this.zGizmo, this.uniformScaleGizmo];\r\n for (const gizmo of gizmos) {\r\n if (gizmo) {\r\n gizmo.scaleRatio = value;\r\n }\r\n }\r\n }\r\n public override get scaleRatio() {\r\n return this._scaleRatio;\r\n }\r\n\r\n /**\r\n * Sensitivity factor for dragging (Default: 1)\r\n */\r\n public set sensitivity(value: number) {\r\n this._sensitivity = value;\r\n const gizmos = [this.xGizmo, this.yGizmo, this.zGizmo, this.uniformScaleGizmo];\r\n for (const gizmo of gizmos) {\r\n if (gizmo) {\r\n gizmo.sensitivity = value;\r\n }\r\n }\r\n }\r\n public get sensitivity() {\r\n return this._sensitivity;\r\n }\r\n\r\n /**\r\n * Builds Gizmo Axis Cache to enable features such as hover state preservation and graying out other axis during manipulation\r\n * @param mesh Axis gizmo mesh\r\n * @param cache Gizmo axis definition used for reactive gizmo UI\r\n */\r\n public addToAxisCache(mesh: Mesh, cache: GizmoAxisCache) {\r\n this._gizmoAxisCache.set(mesh, cache);\r\n }\r\n\r\n /**\r\n * Get the cache set with addToAxisCache for a specific mesh\r\n * @param mesh Axis gizmo mesh\r\n * @returns Gizmo axis definition used for reactive gizmo UI\r\n */\r\n public getAxisCache(mesh: Mesh): GizmoAxisCache | undefined {\r\n return this._gizmoAxisCache.get(mesh);\r\n }\r\n\r\n /**\r\n * Force release the drag action by code\r\n */\r\n public releaseDrag() {\r\n this.xGizmo.dragBehavior.releaseDrag();\r\n this.yGizmo.dragBehavior.releaseDrag();\r\n this.zGizmo.dragBehavior.releaseDrag();\r\n this.uniformScaleGizmo.dragBehavior.releaseDrag();\r\n }\r\n\r\n /**\r\n * Disposes of the gizmo\r\n */\r\n public override dispose() {\r\n const gizmos = [this.xGizmo, this.yGizmo, this.zGizmo, this.uniformScaleGizmo];\r\n for (const gizmo of gizmos) {\r\n if (gizmo) {\r\n gizmo.dispose();\r\n }\r\n }\r\n for (const obs of this._observables) {\r\n this.gizmoLayer.utilityLayerScene.onPointerObservable.remove(obs);\r\n }\r\n this.onDragStartObservable.clear();\r\n this.onDragObservable.clear();\r\n this.onDragEndObservable.clear();\r\n const meshes = [this._uniformScalingMesh, this._octahedron];\r\n for (const msh of meshes) {\r\n if (msh) {\r\n msh.dispose();\r\n }\r\n }\r\n const materials = [this._coloredMaterial, this._hoverMaterial, this._disableMaterial];\r\n for (const matl of materials) {\r\n if (matl) {\r\n matl.dispose();\r\n }\r\n }\r\n }\r\n}\r\n"]}
|
|
@@ -16,6 +16,15 @@ import type { GaussianSplattingMaterial } from "./gaussianSplattingMaterial.js";
|
|
|
16
16
|
export declare class GaussianSplattingSolidColorMaterialPlugin extends MaterialPluginBase {
|
|
17
17
|
private _partColors;
|
|
18
18
|
private _maxPartCount;
|
|
19
|
+
private _isEnabled;
|
|
20
|
+
/**
|
|
21
|
+
* Whether the solid-color override is active. When false, splats
|
|
22
|
+
* render with their original per-splat colors.
|
|
23
|
+
* Toggled via a shader uniform so no recompilation is required.
|
|
24
|
+
*/
|
|
25
|
+
isEnabled: boolean;
|
|
26
|
+
/** @internal */
|
|
27
|
+
_onIsEnabledChanged(): void;
|
|
19
28
|
/**
|
|
20
29
|
* Creates a new GaussianSplatSolidColorPlugin.
|
|
21
30
|
* @param material The GaussianSplattingMaterial to attach the plugin to.
|
|
@@ -60,8 +69,8 @@ export declare class GaussianSplattingSolidColorMaterialPlugin extends MaterialP
|
|
|
60
69
|
private _getCustomCodeGLSL;
|
|
61
70
|
private _getCustomCodeWGSL;
|
|
62
71
|
/**
|
|
63
|
-
* Registers the
|
|
64
|
-
* the Effect can resolve
|
|
72
|
+
* Registers the plugin uniforms with the engine so that
|
|
73
|
+
* the Effect can resolve their locations.
|
|
65
74
|
* @returns uniform descriptions
|
|
66
75
|
*/
|
|
67
76
|
getUniforms(): {
|
|
@@ -76,7 +85,7 @@ export declare class GaussianSplattingSolidColorMaterialPlugin extends MaterialP
|
|
|
76
85
|
externalUniforms?: string[];
|
|
77
86
|
};
|
|
78
87
|
/**
|
|
79
|
-
* Binds the
|
|
88
|
+
* Binds the plugin uniforms each frame.
|
|
80
89
|
* @param _uniformBuffer the uniform buffer (unused — we bind directly on the effect)
|
|
81
90
|
* @param _scene the current scene
|
|
82
91
|
* @param _engine the current engine
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { __decorate } from "../../tslib.es6.js";
|
|
2
|
+
import { serialize, expandToProperty } from "../../Misc/decorators.js";
|
|
1
3
|
import { Color3 } from "../../Maths/math.color.js";
|
|
2
4
|
import { MaterialPluginBase } from "../materialPluginBase.js";
|
|
3
5
|
import { RegisterClass } from "../../Misc/typeStore.js";
|
|
@@ -8,6 +10,11 @@ import { GaussianSplattingMaxPartCount } from "./gaussianSplattingMaterial.js";
|
|
|
8
10
|
* value, which is looked up in a uniform array in the fragment shader.
|
|
9
11
|
*/
|
|
10
12
|
export class GaussianSplattingSolidColorMaterialPlugin extends MaterialPluginBase {
|
|
13
|
+
/** @internal */
|
|
14
|
+
_onIsEnabledChanged() {
|
|
15
|
+
// Intentional no-op: isEnabled is applied via a uniform in
|
|
16
|
+
// bindForSubMesh, so no dirty-marking or recompilation is needed.
|
|
17
|
+
}
|
|
11
18
|
/**
|
|
12
19
|
* Creates a new GaussianSplatSolidColorPlugin.
|
|
13
20
|
* @param material The GaussianSplattingMaterial to attach the plugin to.
|
|
@@ -16,6 +23,13 @@ export class GaussianSplattingSolidColorMaterialPlugin extends MaterialPluginBas
|
|
|
16
23
|
*/
|
|
17
24
|
constructor(material, partColors, maxPartCount = GaussianSplattingMaxPartCount) {
|
|
18
25
|
super(material, "GaussianSplatSolidColor", 200);
|
|
26
|
+
this._isEnabled = true;
|
|
27
|
+
/**
|
|
28
|
+
* Whether the solid-color override is active. When false, splats
|
|
29
|
+
* render with their original per-splat colors.
|
|
30
|
+
* Toggled via a shader uniform so no recompilation is required.
|
|
31
|
+
*/
|
|
32
|
+
this.isEnabled = true;
|
|
19
33
|
this._partColors = partColors;
|
|
20
34
|
this._maxPartCount = maxPartCount;
|
|
21
35
|
this._enable(true);
|
|
@@ -90,11 +104,14 @@ export class GaussianSplattingSolidColorMaterialPlugin extends MaterialPluginBas
|
|
|
90
104
|
return {
|
|
91
105
|
CUSTOM_FRAGMENT_DEFINITIONS: `
|
|
92
106
|
varying float vPartIndex;
|
|
107
|
+
uniform float solidColorEnabled;
|
|
93
108
|
uniform vec3 partColors[${maxPartCount}];
|
|
94
109
|
`,
|
|
95
110
|
CUSTOM_FRAGMENT_BEFORE_FRAGCOLOR: `
|
|
96
|
-
|
|
97
|
-
|
|
111
|
+
if (solidColorEnabled > 0.5) {
|
|
112
|
+
int partIdx = int(vPartIndex + 0.5);
|
|
113
|
+
finalColor = vec4(partColors[partIdx], finalColor.w);
|
|
114
|
+
}
|
|
98
115
|
`,
|
|
99
116
|
};
|
|
100
117
|
}
|
|
@@ -117,28 +134,31 @@ finalColor = vec4(partColors[partIdx], finalColor.w);
|
|
|
117
134
|
return {
|
|
118
135
|
CUSTOM_FRAGMENT_DEFINITIONS: `
|
|
119
136
|
varying vPartIndex: f32;
|
|
137
|
+
uniform solidColorEnabled: f32;
|
|
120
138
|
uniform partColors: array<vec3f, ${maxPartCount}>;
|
|
121
139
|
`,
|
|
122
140
|
CUSTOM_FRAGMENT_BEFORE_FRAGCOLOR: `
|
|
123
|
-
|
|
124
|
-
|
|
141
|
+
if (uniforms.solidColorEnabled > 0.5) {
|
|
142
|
+
var partIdx: i32 = i32(fragmentInputs.vPartIndex + 0.5);
|
|
143
|
+
finalColor = vec4f(uniforms.partColors[partIdx], finalColor.w);
|
|
144
|
+
}
|
|
125
145
|
`,
|
|
126
146
|
};
|
|
127
147
|
}
|
|
128
148
|
return null;
|
|
129
149
|
}
|
|
130
150
|
/**
|
|
131
|
-
* Registers the
|
|
132
|
-
* the Effect can resolve
|
|
151
|
+
* Registers the plugin uniforms with the engine so that
|
|
152
|
+
* the Effect can resolve their locations.
|
|
133
153
|
* @returns uniform descriptions
|
|
134
154
|
*/
|
|
135
155
|
getUniforms() {
|
|
136
156
|
return {
|
|
137
|
-
externalUniforms: ["partColors"],
|
|
157
|
+
externalUniforms: ["partColors", "solidColorEnabled"],
|
|
138
158
|
};
|
|
139
159
|
}
|
|
140
160
|
/**
|
|
141
|
-
* Binds the
|
|
161
|
+
* Binds the plugin uniforms each frame.
|
|
142
162
|
* @param _uniformBuffer the uniform buffer (unused — we bind directly on the effect)
|
|
143
163
|
* @param _scene the current scene
|
|
144
164
|
* @param _engine the current engine
|
|
@@ -149,6 +169,7 @@ finalColor = vec4f(uniforms.partColors[partIdx], finalColor.w);
|
|
|
149
169
|
if (!effect) {
|
|
150
170
|
return;
|
|
151
171
|
}
|
|
172
|
+
effect.setFloat("solidColorEnabled", this._isEnabled ? 1.0 : 0.0);
|
|
152
173
|
const colorArray = [];
|
|
153
174
|
for (let i = 0; i < this._maxPartCount; i++) {
|
|
154
175
|
const color = this._partColors[i] ?? new Color3(0, 0, 0);
|
|
@@ -157,5 +178,9 @@ finalColor = vec4f(uniforms.partColors[partIdx], finalColor.w);
|
|
|
157
178
|
effect.setArray3("partColors", colorArray);
|
|
158
179
|
}
|
|
159
180
|
}
|
|
181
|
+
__decorate([
|
|
182
|
+
serialize(),
|
|
183
|
+
expandToProperty("_onIsEnabledChanged")
|
|
184
|
+
], GaussianSplattingSolidColorMaterialPlugin.prototype, "isEnabled", void 0);
|
|
160
185
|
RegisterClass("BABYLON.GaussianSplattingSolidColorMaterialPlugin", GaussianSplattingSolidColorMaterialPlugin);
|
|
161
186
|
//# sourceMappingURL=gaussianSplattingSolidColorMaterialPlugin.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gaussianSplattingSolidColorMaterialPlugin.js","sourceRoot":"","sources":["../../../../../dev/core/src/Materials/GaussianSplatting/gaussianSplattingSolidColorMaterialPlugin.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Nullable } from \"../../types\";\r\nimport type { Scene } from \"../../scene\";\r\nimport type { AbstractEngine } from \"../../Engines/abstractEngine\";\r\nimport type { SubMesh } from \"../../Meshes/subMesh\";\r\nimport type { UniformBuffer } from \"../uniformBuffer\";\r\nimport type { MaterialDefines } from \"../materialDefines\";\r\nimport { Color3 } from \"../../Maths/math.color\";\r\nimport { MaterialPluginBase } from \"../materialPluginBase\";\r\nimport { ShaderLanguage } from \"../shaderLanguage\";\r\nimport { RegisterClass } from \"../../Misc/typeStore\";\r\nimport { GaussianSplattingMaxPartCount } from \"./gaussianSplattingMaterial\";\r\nimport type { GaussianSplattingMaterial } from \"./gaussianSplattingMaterial\";\r\n\r\n/**\r\n * Plugin for GaussianSplattingMaterial that replaces per-splat colors with a\r\n * solid color per compound-mesh part. Each part index maps to a single Color3\r\n * value, which is looked up in a uniform array in the fragment shader.\r\n */\r\nexport class GaussianSplattingSolidColorMaterialPlugin extends MaterialPluginBase {\r\n private _partColors: Color3[];\r\n private _maxPartCount: number;\r\n\r\n /**\r\n * Creates a new GaussianSplatSolidColorPlugin.\r\n * @param material The GaussianSplattingMaterial to attach the plugin to.\r\n * @param partColors A map from part index to the solid Color3 for that part.\r\n * @param maxPartCount The maximum number of parts supported. This determines the size of the uniform array.\r\n */\r\n constructor(material: GaussianSplattingMaterial, partColors: Color3[], maxPartCount = GaussianSplattingMaxPartCount) {\r\n super(material, \"GaussianSplatSolidColor\", 200);\r\n\r\n this._partColors = partColors;\r\n this._maxPartCount = maxPartCount;\r\n this._enable(true);\r\n }\r\n\r\n /**\r\n * Updates the part colors dynamically.\r\n * @param partColors A map from part index to the solid Color3 for that part.\r\n */\r\n public updatePartColors(partColors: Color3[]): void {\r\n this._partColors = partColors;\r\n }\r\n\r\n // --- Plugin overrides ---\r\n\r\n /**\r\n * @returns the class name\r\n */\r\n public override getClassName(): string {\r\n return \"GaussianSplattingSolidColorMaterialPlugin\";\r\n }\r\n\r\n /**\r\n * Indicates this plugin supports both GLSL and WGSL.\r\n * @param shaderLanguage the shader language to check\r\n * @returns true for GLSL and WGSL\r\n */\r\n public override isCompatible(shaderLanguage: ShaderLanguage): boolean {\r\n switch (shaderLanguage) {\r\n case ShaderLanguage.GLSL:\r\n case ShaderLanguage.WGSL:\r\n return true;\r\n default:\r\n return false;\r\n }\r\n }\r\n\r\n /**\r\n * Always ready — no textures or async resources to wait on.\r\n * @param _defines the defines\r\n * @param _scene the scene\r\n * @param _engine the engine\r\n * @param _subMesh the submesh\r\n * @returns true\r\n */\r\n public override isReadyForSubMesh(_defines: MaterialDefines, _scene: Scene, _engine: AbstractEngine, _subMesh: SubMesh): boolean {\r\n return true;\r\n }\r\n\r\n /**\r\n * Returns custom shader code fragments to inject solid-color rendering.\r\n *\r\n * @param shaderType \"vertex\" or \"fragment\"\r\n * @param shaderLanguage the shader language to use (default: GLSL)\r\n * @returns null or a map of injection point names to code strings\r\n */\r\n public override getCustomCode(shaderType: string, shaderLanguage = ShaderLanguage.GLSL): Nullable<{ [pointName: string]: string }> {\r\n const maxPartCount = this._maxPartCount ?? GaussianSplattingMaxPartCount;\r\n\r\n if (shaderLanguage === ShaderLanguage.WGSL) {\r\n return this._getCustomCodeWGSL(shaderType, maxPartCount);\r\n }\r\n return this._getCustomCodeGLSL(shaderType, maxPartCount);\r\n }\r\n\r\n private _getCustomCodeGLSL(shaderType: string, maxPartCount: number): Nullable<{ [pointName: string]: string }> {\r\n if (shaderType === \"vertex\") {\r\n return {\r\n CUSTOM_VERTEX_DEFINITIONS: `varying float vPartIndex;`,\r\n CUSTOM_VERTEX_UPDATE: `\r\n#if IS_COMPOUND\r\n vPartIndex = float(splat.partIndex);\r\n#else\r\n vPartIndex = 0.0;\r\n#endif\r\n `,\r\n };\r\n } else if (shaderType === \"fragment\") {\r\n return {\r\n CUSTOM_FRAGMENT_DEFINITIONS: `\r\nvarying float vPartIndex;\r\nuniform vec3 partColors[${maxPartCount}];\r\n `,\r\n CUSTOM_FRAGMENT_BEFORE_FRAGCOLOR: `\r\nint partIdx = int(vPartIndex + 0.5);\r\nfinalColor = vec4(partColors[partIdx], finalColor.w);\r\n `,\r\n };\r\n }\r\n return null;\r\n }\r\n\r\n private _getCustomCodeWGSL(shaderType: string, maxPartCount: number): Nullable<{ [pointName: string]: string }> {\r\n if (shaderType === \"vertex\") {\r\n return {\r\n CUSTOM_VERTEX_DEFINITIONS: `varying vPartIndex: f32;`,\r\n CUSTOM_VERTEX_UPDATE: `\r\n#if IS_COMPOUND\r\n vertexOutputs.vPartIndex = f32(splat.partIndex);\r\n#else\r\n vertexOutputs.vPartIndex = 0.0;\r\n#endif\r\n `,\r\n };\r\n } else if (shaderType === \"fragment\") {\r\n return {\r\n CUSTOM_FRAGMENT_DEFINITIONS: `\r\nvarying vPartIndex: f32;\r\nuniform partColors: array<vec3f, ${maxPartCount}>;\r\n `,\r\n CUSTOM_FRAGMENT_BEFORE_FRAGCOLOR: `\r\nvar partIdx: i32 = i32(fragmentInputs.vPartIndex + 0.5);\r\nfinalColor = vec4f(uniforms.partColors[partIdx], finalColor.w);\r\n `,\r\n };\r\n }\r\n return null;\r\n }\r\n\r\n /**\r\n * Registers the `partColors` uniform with the engine so that\r\n * the Effect can resolve its location.\r\n * @returns uniform descriptions\r\n */\r\n public override getUniforms(): {\r\n ubo?: Array<{ name: string; size?: number; type?: string; arraySize?: number }>;\r\n vertex?: string;\r\n fragment?: string;\r\n externalUniforms?: string[];\r\n } {\r\n return {\r\n externalUniforms: [\"partColors\"],\r\n };\r\n }\r\n\r\n /**\r\n * Binds the `partColors` uniform array each frame.\r\n * @param _uniformBuffer the uniform buffer (unused — we bind directly on the effect)\r\n * @param _scene the current scene\r\n * @param _engine the current engine\r\n * @param subMesh the submesh being rendered\r\n */\r\n public override bindForSubMesh(_uniformBuffer: UniformBuffer, _scene: Scene, _engine: AbstractEngine, subMesh: SubMesh): void {\r\n const effect = subMesh.effect;\r\n if (!effect) {\r\n return;\r\n }\r\n\r\n const colorArray: number[] = [];\r\n for (let i = 0; i < this._maxPartCount; i++) {\r\n const color = this._partColors[i] ?? new Color3(0, 0, 0);\r\n colorArray.push(color.r, color.g, color.b);\r\n }\r\n\r\n effect.setArray3(\"partColors\", colorArray);\r\n }\r\n}\r\n\r\nRegisterClass(\"BABYLON.GaussianSplattingSolidColorMaterialPlugin\", GaussianSplattingSolidColorMaterialPlugin);\r\n"]}
|
|
1
|
+
{"version":3,"file":"gaussianSplattingSolidColorMaterialPlugin.js","sourceRoot":"","sources":["../../../../../dev/core/src/Materials/GaussianSplatting/gaussianSplattingSolidColorMaterialPlugin.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Nullable } from \"../../types\";\r\nimport type { Scene } from \"../../scene\";\r\nimport type { AbstractEngine } from \"../../Engines/abstractEngine\";\r\nimport type { SubMesh } from \"../../Meshes/subMesh\";\r\nimport type { UniformBuffer } from \"../uniformBuffer\";\r\nimport type { MaterialDefines } from \"../materialDefines\";\r\nimport { serialize, expandToProperty } from \"../../Misc/decorators\";\r\nimport { Color3 } from \"../../Maths/math.color\";\r\nimport { MaterialPluginBase } from \"../materialPluginBase\";\r\nimport { ShaderLanguage } from \"../shaderLanguage\";\r\nimport { RegisterClass } from \"../../Misc/typeStore\";\r\nimport { GaussianSplattingMaxPartCount } from \"./gaussianSplattingMaterial\";\r\nimport type { GaussianSplattingMaterial } from \"./gaussianSplattingMaterial\";\r\n\r\n/**\r\n * Plugin for GaussianSplattingMaterial that replaces per-splat colors with a\r\n * solid color per compound-mesh part. Each part index maps to a single Color3\r\n * value, which is looked up in a uniform array in the fragment shader.\r\n */\r\nexport class GaussianSplattingSolidColorMaterialPlugin extends MaterialPluginBase {\r\n private _partColors: Color3[];\r\n private _maxPartCount: number;\r\n private _isEnabled = true;\r\n /**\r\n * Whether the solid-color override is active. When false, splats\r\n * render with their original per-splat colors.\r\n * Toggled via a shader uniform so no recompilation is required.\r\n */\r\n @serialize()\r\n @expandToProperty(\"_onIsEnabledChanged\")\r\n public isEnabled = true;\r\n\r\n /** @internal */\r\n public _onIsEnabledChanged(): void {\r\n // Intentional no-op: isEnabled is applied via a uniform in\r\n // bindForSubMesh, so no dirty-marking or recompilation is needed.\r\n }\r\n\r\n /**\r\n * Creates a new GaussianSplatSolidColorPlugin.\r\n * @param material The GaussianSplattingMaterial to attach the plugin to.\r\n * @param partColors A map from part index to the solid Color3 for that part.\r\n * @param maxPartCount The maximum number of parts supported. This determines the size of the uniform array.\r\n */\r\n constructor(material: GaussianSplattingMaterial, partColors: Color3[], maxPartCount = GaussianSplattingMaxPartCount) {\r\n super(material, \"GaussianSplatSolidColor\", 200);\r\n\r\n this._partColors = partColors;\r\n this._maxPartCount = maxPartCount;\r\n this._enable(true);\r\n }\r\n\r\n /**\r\n * Updates the part colors dynamically.\r\n * @param partColors A map from part index to the solid Color3 for that part.\r\n */\r\n public updatePartColors(partColors: Color3[]): void {\r\n this._partColors = partColors;\r\n }\r\n\r\n // --- Plugin overrides ---\r\n\r\n /**\r\n * @returns the class name\r\n */\r\n public override getClassName(): string {\r\n return \"GaussianSplattingSolidColorMaterialPlugin\";\r\n }\r\n\r\n /**\r\n * Indicates this plugin supports both GLSL and WGSL.\r\n * @param shaderLanguage the shader language to check\r\n * @returns true for GLSL and WGSL\r\n */\r\n public override isCompatible(shaderLanguage: ShaderLanguage): boolean {\r\n switch (shaderLanguage) {\r\n case ShaderLanguage.GLSL:\r\n case ShaderLanguage.WGSL:\r\n return true;\r\n default:\r\n return false;\r\n }\r\n }\r\n\r\n /**\r\n * Always ready — no textures or async resources to wait on.\r\n * @param _defines the defines\r\n * @param _scene the scene\r\n * @param _engine the engine\r\n * @param _subMesh the submesh\r\n * @returns true\r\n */\r\n public override isReadyForSubMesh(_defines: MaterialDefines, _scene: Scene, _engine: AbstractEngine, _subMesh: SubMesh): boolean {\r\n return true;\r\n }\r\n\r\n /**\r\n * Returns custom shader code fragments to inject solid-color rendering.\r\n *\r\n * @param shaderType \"vertex\" or \"fragment\"\r\n * @param shaderLanguage the shader language to use (default: GLSL)\r\n * @returns null or a map of injection point names to code strings\r\n */\r\n public override getCustomCode(shaderType: string, shaderLanguage = ShaderLanguage.GLSL): Nullable<{ [pointName: string]: string }> {\r\n const maxPartCount = this._maxPartCount ?? GaussianSplattingMaxPartCount;\r\n\r\n if (shaderLanguage === ShaderLanguage.WGSL) {\r\n return this._getCustomCodeWGSL(shaderType, maxPartCount);\r\n }\r\n return this._getCustomCodeGLSL(shaderType, maxPartCount);\r\n }\r\n\r\n private _getCustomCodeGLSL(shaderType: string, maxPartCount: number): Nullable<{ [pointName: string]: string }> {\r\n if (shaderType === \"vertex\") {\r\n return {\r\n CUSTOM_VERTEX_DEFINITIONS: `varying float vPartIndex;`,\r\n CUSTOM_VERTEX_UPDATE: `\r\n#if IS_COMPOUND\r\n vPartIndex = float(splat.partIndex);\r\n#else\r\n vPartIndex = 0.0;\r\n#endif\r\n `,\r\n };\r\n } else if (shaderType === \"fragment\") {\r\n return {\r\n CUSTOM_FRAGMENT_DEFINITIONS: `\r\nvarying float vPartIndex;\r\nuniform float solidColorEnabled;\r\nuniform vec3 partColors[${maxPartCount}];\r\n `,\r\n CUSTOM_FRAGMENT_BEFORE_FRAGCOLOR: `\r\nif (solidColorEnabled > 0.5) {\r\n int partIdx = int(vPartIndex + 0.5);\r\n finalColor = vec4(partColors[partIdx], finalColor.w);\r\n}\r\n `,\r\n };\r\n }\r\n return null;\r\n }\r\n\r\n private _getCustomCodeWGSL(shaderType: string, maxPartCount: number): Nullable<{ [pointName: string]: string }> {\r\n if (shaderType === \"vertex\") {\r\n return {\r\n CUSTOM_VERTEX_DEFINITIONS: `varying vPartIndex: f32;`,\r\n CUSTOM_VERTEX_UPDATE: `\r\n#if IS_COMPOUND\r\n vertexOutputs.vPartIndex = f32(splat.partIndex);\r\n#else\r\n vertexOutputs.vPartIndex = 0.0;\r\n#endif\r\n `,\r\n };\r\n } else if (shaderType === \"fragment\") {\r\n return {\r\n CUSTOM_FRAGMENT_DEFINITIONS: `\r\nvarying vPartIndex: f32;\r\nuniform solidColorEnabled: f32;\r\nuniform partColors: array<vec3f, ${maxPartCount}>;\r\n `,\r\n CUSTOM_FRAGMENT_BEFORE_FRAGCOLOR: `\r\nif (uniforms.solidColorEnabled > 0.5) {\r\n var partIdx: i32 = i32(fragmentInputs.vPartIndex + 0.5);\r\n finalColor = vec4f(uniforms.partColors[partIdx], finalColor.w);\r\n}\r\n `,\r\n };\r\n }\r\n return null;\r\n }\r\n\r\n /**\r\n * Registers the plugin uniforms with the engine so that\r\n * the Effect can resolve their locations.\r\n * @returns uniform descriptions\r\n */\r\n public override getUniforms(): {\r\n ubo?: Array<{ name: string; size?: number; type?: string; arraySize?: number }>;\r\n vertex?: string;\r\n fragment?: string;\r\n externalUniforms?: string[];\r\n } {\r\n return {\r\n externalUniforms: [\"partColors\", \"solidColorEnabled\"],\r\n };\r\n }\r\n\r\n /**\r\n * Binds the plugin uniforms each frame.\r\n * @param _uniformBuffer the uniform buffer (unused — we bind directly on the effect)\r\n * @param _scene the current scene\r\n * @param _engine the current engine\r\n * @param subMesh the submesh being rendered\r\n */\r\n public override bindForSubMesh(_uniformBuffer: UniformBuffer, _scene: Scene, _engine: AbstractEngine, subMesh: SubMesh): void {\r\n const effect = subMesh.effect;\r\n if (!effect) {\r\n return;\r\n }\r\n\r\n effect.setFloat(\"solidColorEnabled\", this._isEnabled ? 1.0 : 0.0);\r\n\r\n const colorArray: number[] = [];\r\n for (let i = 0; i < this._maxPartCount; i++) {\r\n const color = this._partColors[i] ?? new Color3(0, 0, 0);\r\n colorArray.push(color.r, color.g, color.b);\r\n }\r\n\r\n effect.setArray3(\"partColors\", colorArray);\r\n }\r\n}\r\n\r\nRegisterClass(\"BABYLON.GaussianSplattingSolidColorMaterialPlugin\", GaussianSplattingSolidColorMaterialPlugin);\r\n"]}
|
|
@@ -16,10 +16,6 @@ import type { AbstractEngine } from "../Engines/abstractEngine.js";
|
|
|
16
16
|
* https://www.khronos.org/opengl/wiki/Uniform_Buffer_Object
|
|
17
17
|
*/
|
|
18
18
|
export declare class UniformBuffer {
|
|
19
|
-
/** @internal */
|
|
20
|
-
static _UpdatedUbosInFrame: {
|
|
21
|
-
[name: string]: number;
|
|
22
|
-
};
|
|
23
19
|
private _engine;
|
|
24
20
|
private _buffer;
|
|
25
21
|
private _buffers;
|
|
@@ -433,12 +433,6 @@ export class UniformBuffer {
|
|
|
433
433
|
}
|
|
434
434
|
this._bufferUpdatedLastFrame = true;
|
|
435
435
|
this._engine.updateUniformBuffer(this._buffer, this._bufferData);
|
|
436
|
-
if (this._engine._features._collectUbosUpdatedInFrame) {
|
|
437
|
-
if (!UniformBuffer._UpdatedUbosInFrame[this._name]) {
|
|
438
|
-
UniformBuffer._UpdatedUbosInFrame[this._name] = 0;
|
|
439
|
-
}
|
|
440
|
-
UniformBuffer._UpdatedUbosInFrame[this._name]++;
|
|
441
|
-
}
|
|
442
436
|
this._needSync = false;
|
|
443
437
|
this._createBufferOnWrite = this._trackUBOsInFrame;
|
|
444
438
|
}
|
|
@@ -923,8 +917,6 @@ export class UniformBuffer {
|
|
|
923
917
|
}
|
|
924
918
|
}
|
|
925
919
|
}
|
|
926
|
-
/** @internal */
|
|
927
|
-
UniformBuffer._UpdatedUbosInFrame = {};
|
|
928
920
|
// Pool for avoiding memory leaks
|
|
929
921
|
UniformBuffer._MAX_UNIFORM_SIZE = 256;
|
|
930
922
|
UniformBuffer._TempBuffer = new Float32Array(UniformBuffer._MAX_UNIFORM_SIZE);
|