@onerjs/core 8.29.1 → 8.29.3
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/Engines/abstractEngine.d.ts +13 -1
- package/Engines/abstractEngine.js +6 -3
- package/Engines/abstractEngine.js.map +1 -1
- package/FrameGraph/Node/Types/nodeRenderGraphTypes.d.ts +15 -1
- package/FrameGraph/Node/Types/nodeRenderGraphTypes.js.map +1 -1
- package/FrameGraph/Node/nodeRenderGraph.d.ts +3 -1
- package/FrameGraph/Node/nodeRenderGraph.js +3 -0
- package/FrameGraph/Node/nodeRenderGraph.js.map +1 -1
- package/Materials/floatingOriginMatrixOverrides.d.ts +7 -1
- package/Materials/floatingOriginMatrixOverrides.js +21 -9
- package/Materials/floatingOriginMatrixOverrides.js.map +1 -1
- package/Misc/sceneSerializer.js +3 -2
- package/Misc/sceneSerializer.js.map +1 -1
- package/Particles/IParticleSystem.d.ts +4 -6
- package/Particles/IParticleSystem.js.map +1 -1
- package/Particles/gpuParticleSystem.d.ts +4 -4
- package/Particles/gpuParticleSystem.js +4 -4
- package/Particles/gpuParticleSystem.js.map +1 -1
- package/Particles/particleSystem.d.ts +4 -0
- package/Particles/particleSystem.js +7 -1
- package/Particles/particleSystem.js.map +1 -1
- package/Particles/particleSystemSet.js +3 -1
- package/Particles/particleSystemSet.js.map +1 -1
- package/Rendering/IBLShadows/iblShadowsVoxelRenderer.d.ts +4 -2
- package/Rendering/IBLShadows/iblShadowsVoxelRenderer.js +64 -37
- package/Rendering/IBLShadows/iblShadowsVoxelRenderer.js.map +1 -1
- package/Rendering/utilityLayerRenderer.js +1 -1
- package/Rendering/utilityLayerRenderer.js.map +1 -1
- package/ShadersWGSL/iblVoxelGrid.fragment.js +6 -7
- package/ShadersWGSL/iblVoxelGrid.fragment.js.map +1 -1
- package/ShadersWGSL/iblVoxelGrid.vertex.d.ts +0 -8
- package/ShadersWGSL/iblVoxelGrid.vertex.js +33 -22
- package/ShadersWGSL/iblVoxelGrid.vertex.js.map +1 -1
- package/ShadersWGSL/iblVoxelGrid3dDebug.fragment.js +1 -2
- package/ShadersWGSL/iblVoxelGrid3dDebug.fragment.js.map +1 -1
- package/package.json +1 -1
- package/scene.d.ts +15 -12
- package/scene.js +27 -16
- package/scene.js.map +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utilityLayerRenderer.js","sourceRoot":"","sources":["../../../../dev/core/src/Rendering/utilityLayerRenderer.ts"],"names":[],"mappings":"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","sourcesContent":["import type { IDisposable } from \"../scene\";\r\nimport { Scene } from \"../scene\";\r\nimport type { Nullable } from \"../types\";\r\nimport type { Observer } from \"../Misc/observable\";\r\nimport { Observable } from \"../Misc/observable\";\r\nimport type { PointerInfoPre } from \"../Events/pointerEvents\";\r\nimport { PointerInfo, PointerEventTypes } from \"../Events/pointerEvents\";\r\nimport { PickingInfo } from \"../Collisions/pickingInfo\";\r\nimport type { AbstractMesh } from \"../Meshes/abstractMesh\";\r\nimport { EngineStore } from \"../Engines/engineStore\";\r\nimport { HemisphericLight } from \"../Lights/hemisphericLight\";\r\nimport { Vector3 } from \"../Maths/math.vector\";\r\nimport type { Camera } from \"../Cameras/camera\";\r\nimport { Color3 } from \"../Maths/math.color\";\r\nimport type { IPointerEvent } from \"../Events/deviceInputEvents\";\r\n\r\n/**\r\n * Renders a layer on top of an existing scene\r\n */\r\nexport class UtilityLayerRenderer implements IDisposable {\r\n private _pointerCaptures: { [pointerId: number]: boolean } = {};\r\n private _lastPointerEvents: { [pointerId: number]: boolean } = {};\r\n /** @internal */\r\n public static _DefaultUtilityLayer: Nullable<UtilityLayerRenderer> = null;\r\n /** @internal */\r\n public static _DefaultKeepDepthUtilityLayer: Nullable<UtilityLayerRenderer> = null;\r\n private _sharedGizmoLight: Nullable<HemisphericLight> = null;\r\n\r\n private _renderCamera: Nullable<Camera> = null;\r\n\r\n /**\r\n * Gets the camera that is used to render the utility layer (when not set, this will be the last active camera)\r\n * @param getRigParentIfPossible if the current active camera is a rig camera, should its parent camera be returned\r\n * @returns the camera that is used when rendering the utility layer\r\n */\r\n public getRenderCamera(getRigParentIfPossible?: boolean) {\r\n if (this._renderCamera) {\r\n return this._renderCamera;\r\n } else {\r\n let activeCam: Camera;\r\n if (this.originalScene.activeCameras && this.originalScene.activeCameras.length > 1) {\r\n activeCam = this.originalScene.activeCameras[this.originalScene.activeCameras.length - 1];\r\n } else {\r\n activeCam = this.originalScene.activeCamera!;\r\n }\r\n\r\n if (getRigParentIfPossible && activeCam && activeCam.isRigCamera) {\r\n return activeCam.rigParent!;\r\n }\r\n return activeCam;\r\n }\r\n }\r\n /**\r\n * Sets the camera that should be used when rendering the utility layer (If set to null the last active camera will be used)\r\n * @param cam the camera that should be used when rendering the utility layer\r\n */\r\n public setRenderCamera(cam: Nullable<Camera>) {\r\n this._renderCamera = cam;\r\n }\r\n\r\n /**\r\n * @internal\r\n * Light which used by gizmos to get light shading\r\n */\r\n public _getSharedGizmoLight(): HemisphericLight {\r\n if (!this._sharedGizmoLight) {\r\n this._sharedGizmoLight = new HemisphericLight(\"shared gizmo light\", new Vector3(0, 1, 0), this.utilityLayerScene);\r\n this._sharedGizmoLight.intensity = 2;\r\n this._sharedGizmoLight.groundColor = Color3.Gray();\r\n }\r\n return this._sharedGizmoLight;\r\n }\r\n\r\n /**\r\n * If the picking should be done on the utility layer prior to the actual scene (Default: true)\r\n */\r\n public pickUtilitySceneFirst = true;\r\n /**\r\n * A shared utility layer that can be used to overlay objects into a scene (Depth map of the previous scene is cleared before drawing on top of it)\r\n */\r\n public static get DefaultUtilityLayer(): UtilityLayerRenderer {\r\n if (UtilityLayerRenderer._DefaultUtilityLayer == null) {\r\n return UtilityLayerRenderer._CreateDefaultUtilityLayerFromScene(EngineStore.LastCreatedScene!);\r\n }\r\n\r\n return UtilityLayerRenderer._DefaultUtilityLayer;\r\n }\r\n\r\n /**\r\n * Creates an utility layer, and set it as a default utility layer\r\n * @param scene associated scene\r\n * @internal\r\n */\r\n public static _CreateDefaultUtilityLayerFromScene(scene: Scene): UtilityLayerRenderer {\r\n UtilityLayerRenderer._DefaultUtilityLayer = new UtilityLayerRenderer(scene);\r\n UtilityLayerRenderer._DefaultUtilityLayer.originalScene.onDisposeObservable.addOnce(() => {\r\n UtilityLayerRenderer._DefaultUtilityLayer = null;\r\n });\r\n\r\n return UtilityLayerRenderer._DefaultUtilityLayer;\r\n }\r\n /**\r\n * A shared utility layer that can be used to embed objects into a scene (Depth map of the previous scene is not cleared before drawing on top of it)\r\n */\r\n public static get DefaultKeepDepthUtilityLayer(): UtilityLayerRenderer {\r\n if (UtilityLayerRenderer._DefaultKeepDepthUtilityLayer == null) {\r\n UtilityLayerRenderer._DefaultKeepDepthUtilityLayer = new UtilityLayerRenderer(EngineStore.LastCreatedScene!);\r\n UtilityLayerRenderer._DefaultKeepDepthUtilityLayer.utilityLayerScene.autoClearDepthAndStencil = false;\r\n UtilityLayerRenderer._DefaultKeepDepthUtilityLayer.originalScene.onDisposeObservable.addOnce(() => {\r\n UtilityLayerRenderer._DefaultKeepDepthUtilityLayer = null;\r\n });\r\n }\r\n return UtilityLayerRenderer._DefaultKeepDepthUtilityLayer;\r\n }\r\n\r\n /**\r\n * The scene that is rendered on top of the original scene\r\n */\r\n public utilityLayerScene: Scene;\r\n\r\n /**\r\n * If the utility layer should automatically be rendered on top of existing scene\r\n */\r\n public shouldRender: boolean = true;\r\n /**\r\n * If set to true, only pointer down onPointerObservable events will be blocked when picking is occluded by original scene\r\n */\r\n public onlyCheckPointerDownEvents = true;\r\n\r\n /**\r\n * If set to false, only pointerUp, pointerDown and pointerMove will be sent to the utilityLayerScene (false by default)\r\n */\r\n public processAllEvents = false;\r\n\r\n /**\r\n * Set to false to disable picking\r\n */\r\n public pickingEnabled = true;\r\n\r\n /**\r\n * Observable raised when the pointer moves from the utility layer scene to the main scene\r\n */\r\n public onPointerOutObservable = new Observable<number>();\r\n\r\n /** Gets or sets a predicate that will be used to indicate utility meshes present in the main scene */\r\n public mainSceneTrackerPredicate: (mesh: Nullable<AbstractMesh>) => boolean;\r\n\r\n private _afterRenderObserver: Nullable<Observer<Camera>>;\r\n private _sceneDisposeObserver: Nullable<Observer<Scene>>;\r\n private _originalPointerObserver: Nullable<Observer<PointerInfoPre>>;\r\n /**\r\n * Instantiates a UtilityLayerRenderer\r\n * @param originalScene the original scene that will be rendered on top of\r\n * @param handleEvents boolean indicating if the utility layer should handle events\r\n * @param manualRender boolean indicating if the utility layer should render manually.\r\n */\r\n constructor(\r\n /** the original scene that will be rendered on top of */\r\n public originalScene: Scene,\r\n public readonly handleEvents: boolean = true,\r\n manualRender = false\r\n ) {\r\n // Create scene which will be rendered in the foreground and remove it from being referenced by engine to avoid interfering with existing app\r\n this.utilityLayerScene = new Scene(originalScene.getEngine(), { virtual: true });\r\n this.utilityLayerScene.useRightHandedSystem = originalScene.useRightHandedSystem;\r\n this.utilityLayerScene._allowPostProcessClearColor = false;\r\n\r\n // Deactivate post processes\r\n this.utilityLayerScene.postProcessesEnabled = false;\r\n\r\n // Detach controls on utility scene, events will be fired by logic below to handle picking priority\r\n this.utilityLayerScene.detachControl();\r\n\r\n if (handleEvents) {\r\n this._originalPointerObserver = originalScene.onPrePointerObservable.add((prePointerInfo) => {\r\n if (!this.utilityLayerScene.activeCamera) {\r\n return;\r\n }\r\n if (!this.pickingEnabled) {\r\n return;\r\n }\r\n\r\n if (!this.processAllEvents) {\r\n if (\r\n prePointerInfo.type !== PointerEventTypes.POINTERMOVE &&\r\n prePointerInfo.type !== PointerEventTypes.POINTERUP &&\r\n prePointerInfo.type !== PointerEventTypes.POINTERDOWN &&\r\n prePointerInfo.type !== PointerEventTypes.POINTERDOUBLETAP\r\n ) {\r\n return;\r\n }\r\n }\r\n this.utilityLayerScene.pointerX = originalScene.pointerX;\r\n this.utilityLayerScene.pointerY = originalScene.pointerY;\r\n const pointerEvent = <IPointerEvent>prePointerInfo.event;\r\n if (originalScene.isPointerCaptured(pointerEvent.pointerId)) {\r\n this._pointerCaptures[pointerEvent.pointerId] = false;\r\n return;\r\n }\r\n\r\n const getNearPickDataForScene = (scene: Scene) => {\r\n let scenePick = null;\r\n\r\n if (prePointerInfo.nearInteractionPickingInfo) {\r\n if (prePointerInfo.nearInteractionPickingInfo.pickedMesh!.getScene() == scene) {\r\n scenePick = prePointerInfo.nearInteractionPickingInfo;\r\n } else {\r\n scenePick = new PickingInfo();\r\n }\r\n } else if (scene !== this.utilityLayerScene && prePointerInfo.originalPickingInfo) {\r\n scenePick = prePointerInfo.originalPickingInfo;\r\n } else {\r\n let previousActiveCamera: Nullable<Camera> = null;\r\n // If a camera is set for rendering with this layer\r\n // it will also be used for the ray computation\r\n // To preserve back compat and because scene.pick always use activeCamera\r\n // it's substituted temporarily and a new scenePick is forced.\r\n // otherwise, the ray with previously active camera is always used.\r\n // It's set back to previous activeCamera after operation.\r\n if (this._renderCamera) {\r\n previousActiveCamera = scene._activeCamera;\r\n scene._activeCamera = this._renderCamera;\r\n prePointerInfo.ray = null;\r\n }\r\n scenePick = prePointerInfo.ray ? scene.pickWithRay(prePointerInfo.ray) : scene.pick(originalScene.pointerX, originalScene.pointerY);\r\n if (previousActiveCamera) {\r\n scene._activeCamera = previousActiveCamera;\r\n }\r\n }\r\n\r\n return scenePick;\r\n };\r\n\r\n const utilityScenePick = getNearPickDataForScene(this.utilityLayerScene);\r\n\r\n if (!prePointerInfo.ray && utilityScenePick) {\r\n prePointerInfo.ray = utilityScenePick.ray;\r\n }\r\n\r\n if (prePointerInfo.originalPickingInfo?.aimTransform && utilityScenePick) {\r\n utilityScenePick.aimTransform = prePointerInfo.originalPickingInfo.aimTransform;\r\n utilityScenePick.gripTransform = prePointerInfo.originalPickingInfo.gripTransform;\r\n }\r\n\r\n // always fire the prepointer observable\r\n this.utilityLayerScene.onPrePointerObservable.notifyObservers(prePointerInfo);\r\n\r\n // allow every non pointer down event to flow to the utility layer\r\n if (this.onlyCheckPointerDownEvents && prePointerInfo.type != PointerEventTypes.POINTERDOWN) {\r\n if (!prePointerInfo.skipOnPointerObservable) {\r\n this.utilityLayerScene.onPointerObservable.notifyObservers(\r\n new PointerInfo(prePointerInfo.type, prePointerInfo.event, utilityScenePick),\r\n prePointerInfo.type\r\n );\r\n }\r\n if (prePointerInfo.type === PointerEventTypes.POINTERUP && this._pointerCaptures[pointerEvent.pointerId]) {\r\n this._pointerCaptures[pointerEvent.pointerId] = false;\r\n }\r\n return;\r\n }\r\n\r\n if (this.utilityLayerScene.autoClearDepthAndStencil || this.pickUtilitySceneFirst) {\r\n // If this layer is an overlay, check if this layer was hit and if so, skip pointer events for the main scene\r\n if (utilityScenePick && utilityScenePick.hit) {\r\n if (!prePointerInfo.skipOnPointerObservable) {\r\n this.utilityLayerScene.onPointerObservable.notifyObservers(\r\n new PointerInfo(prePointerInfo.type, prePointerInfo.event, utilityScenePick),\r\n prePointerInfo.type\r\n );\r\n }\r\n prePointerInfo.skipOnPointerObservable = true;\r\n }\r\n } else {\r\n const originalScenePick = getNearPickDataForScene(originalScene);\r\n const pointerEvent = <IPointerEvent>prePointerInfo.event;\r\n\r\n // If the layer can be occluded by the original scene, only fire pointer events to the first layer that hit they ray\r\n if (originalScenePick && utilityScenePick) {\r\n // No pick in utility scene\r\n if (utilityScenePick.distance === 0 && originalScenePick.pickedMesh) {\r\n if (this.mainSceneTrackerPredicate && this.mainSceneTrackerPredicate(originalScenePick.pickedMesh)) {\r\n // We touched an utility mesh present in the main scene\r\n this._notifyObservers(prePointerInfo, originalScenePick, pointerEvent);\r\n prePointerInfo.skipOnPointerObservable = true;\r\n } else if (prePointerInfo.type === PointerEventTypes.POINTERDOWN) {\r\n this._pointerCaptures[pointerEvent.pointerId] = true;\r\n this._notifyObservers(prePointerInfo, originalScenePick, pointerEvent);\r\n } else if (prePointerInfo.type === PointerEventTypes.POINTERMOVE || prePointerInfo.type === PointerEventTypes.POINTERUP) {\r\n if (this._lastPointerEvents[pointerEvent.pointerId]) {\r\n // We need to send a last pointerup to the utilityLayerScene to make sure animations can complete\r\n this.onPointerOutObservable.notifyObservers(pointerEvent.pointerId);\r\n delete this._lastPointerEvents[pointerEvent.pointerId];\r\n }\r\n this._notifyObservers(prePointerInfo, originalScenePick, pointerEvent);\r\n }\r\n } else if (!this._pointerCaptures[pointerEvent.pointerId] && (utilityScenePick.distance < originalScenePick.distance || originalScenePick.distance === 0)) {\r\n // We pick something in utility scene or the pick in utility is closer than the one in main scene\r\n this._notifyObservers(prePointerInfo, utilityScenePick, pointerEvent);\r\n // If a previous utility layer set this, do not unset this\r\n if (!prePointerInfo.skipOnPointerObservable) {\r\n prePointerInfo.skipOnPointerObservable = utilityScenePick.distance > 0;\r\n }\r\n } else if (!this._pointerCaptures[pointerEvent.pointerId] && utilityScenePick.distance >= originalScenePick.distance) {\r\n // We have a pick in both scenes but main is closer than utility\r\n\r\n // We touched an utility mesh present in the main scene\r\n if (this.mainSceneTrackerPredicate && this.mainSceneTrackerPredicate(originalScenePick.pickedMesh)) {\r\n this._notifyObservers(prePointerInfo, originalScenePick, pointerEvent);\r\n prePointerInfo.skipOnPointerObservable = true;\r\n } else {\r\n if (prePointerInfo.type === PointerEventTypes.POINTERMOVE || prePointerInfo.type === PointerEventTypes.POINTERUP) {\r\n if (this._lastPointerEvents[pointerEvent.pointerId]) {\r\n // We need to send a last pointerup to the utilityLayerScene to make sure animations can complete\r\n this.onPointerOutObservable.notifyObservers(pointerEvent.pointerId);\r\n delete this._lastPointerEvents[pointerEvent.pointerId];\r\n }\r\n }\r\n this._notifyObservers(prePointerInfo, utilityScenePick, pointerEvent);\r\n }\r\n }\r\n\r\n if (prePointerInfo.type === PointerEventTypes.POINTERUP && this._pointerCaptures[pointerEvent.pointerId]) {\r\n this._pointerCaptures[pointerEvent.pointerId] = false;\r\n }\r\n }\r\n }\r\n });\r\n\r\n // As a newly added utility layer will be rendered over the screen last, it's pointer events should be processed first\r\n if (this._originalPointerObserver) {\r\n originalScene.onPrePointerObservable.makeObserverTopPriority(this._originalPointerObserver);\r\n }\r\n }\r\n\r\n // Render directly on top of existing scene without clearing\r\n this.utilityLayerScene.autoClear = false;\r\n\r\n if (!manualRender) {\r\n this._afterRenderObserver = this.originalScene.onAfterRenderCameraObservable.add((camera) => {\r\n // Only render when the render camera finishes rendering\r\n if (this.shouldRender && camera == this.getRenderCamera()) {\r\n this.render();\r\n }\r\n });\r\n }\r\n\r\n this._sceneDisposeObserver = this.originalScene.onDisposeObservable.add(() => {\r\n this.dispose();\r\n });\r\n\r\n this._updateCamera();\r\n }\r\n\r\n private _notifyObservers(prePointerInfo: PointerInfoPre, pickInfo: PickingInfo, pointerEvent: IPointerEvent) {\r\n if (!prePointerInfo.skipOnPointerObservable) {\r\n this.utilityLayerScene.onPointerObservable.notifyObservers(new PointerInfo(prePointerInfo.type, prePointerInfo.event, pickInfo), prePointerInfo.type);\r\n this._lastPointerEvents[pointerEvent.pointerId] = true;\r\n }\r\n }\r\n\r\n /**\r\n * Renders the utility layers scene on top of the original scene\r\n */\r\n public render() {\r\n this._updateCamera();\r\n if (this.utilityLayerScene.activeCamera) {\r\n // Set the camera's scene to utility layers scene\r\n const oldScene = this.utilityLayerScene.activeCamera.getScene();\r\n const camera = this.utilityLayerScene.activeCamera;\r\n camera._scene = this.utilityLayerScene;\r\n if (camera.leftCamera) {\r\n camera.leftCamera._scene = this.utilityLayerScene;\r\n }\r\n if (camera.rightCamera) {\r\n camera.rightCamera._scene = this.utilityLayerScene;\r\n }\r\n\r\n this.utilityLayerScene.render(false);\r\n\r\n // Reset camera's scene back to original\r\n camera._scene = oldScene;\r\n if (camera.leftCamera) {\r\n camera.leftCamera._scene = oldScene;\r\n }\r\n if (camera.rightCamera) {\r\n camera.rightCamera._scene = oldScene;\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Disposes of the renderer\r\n */\r\n public dispose() {\r\n this.onPointerOutObservable.clear();\r\n\r\n if (this._afterRenderObserver) {\r\n this.originalScene.onAfterCameraRenderObservable.remove(this._afterRenderObserver);\r\n }\r\n if (this._sceneDisposeObserver) {\r\n this.originalScene.onDisposeObservable.remove(this._sceneDisposeObserver);\r\n }\r\n if (this._originalPointerObserver) {\r\n this.originalScene.onPrePointerObservable.remove(this._originalPointerObserver);\r\n }\r\n this.utilityLayerScene.dispose();\r\n }\r\n\r\n private _updateCamera() {\r\n this.utilityLayerScene.cameraToUseForPointers = this.getRenderCamera();\r\n this.utilityLayerScene.activeCamera = this.getRenderCamera();\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"utilityLayerRenderer.js","sourceRoot":"","sources":["../../../../dev/core/src/Rendering/utilityLayerRenderer.ts"],"names":[],"mappings":"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","sourcesContent":["import type { IDisposable } from \"../scene\";\r\nimport { Scene } from \"../scene\";\r\nimport type { Nullable } from \"../types\";\r\nimport type { Observer } from \"../Misc/observable\";\r\nimport { Observable } from \"../Misc/observable\";\r\nimport type { PointerInfoPre } from \"../Events/pointerEvents\";\r\nimport { PointerInfo, PointerEventTypes } from \"../Events/pointerEvents\";\r\nimport { PickingInfo } from \"../Collisions/pickingInfo\";\r\nimport type { AbstractMesh } from \"../Meshes/abstractMesh\";\r\nimport { EngineStore } from \"../Engines/engineStore\";\r\nimport { HemisphericLight } from \"../Lights/hemisphericLight\";\r\nimport { Vector3 } from \"../Maths/math.vector\";\r\nimport type { Camera } from \"../Cameras/camera\";\r\nimport { Color3 } from \"../Maths/math.color\";\r\nimport type { IPointerEvent } from \"../Events/deviceInputEvents\";\r\n\r\n/**\r\n * Renders a layer on top of an existing scene\r\n */\r\nexport class UtilityLayerRenderer implements IDisposable {\r\n private _pointerCaptures: { [pointerId: number]: boolean } = {};\r\n private _lastPointerEvents: { [pointerId: number]: boolean } = {};\r\n /** @internal */\r\n public static _DefaultUtilityLayer: Nullable<UtilityLayerRenderer> = null;\r\n /** @internal */\r\n public static _DefaultKeepDepthUtilityLayer: Nullable<UtilityLayerRenderer> = null;\r\n private _sharedGizmoLight: Nullable<HemisphericLight> = null;\r\n\r\n private _renderCamera: Nullable<Camera> = null;\r\n\r\n /**\r\n * Gets the camera that is used to render the utility layer (when not set, this will be the last active camera)\r\n * @param getRigParentIfPossible if the current active camera is a rig camera, should its parent camera be returned\r\n * @returns the camera that is used when rendering the utility layer\r\n */\r\n public getRenderCamera(getRigParentIfPossible?: boolean) {\r\n if (this._renderCamera) {\r\n return this._renderCamera;\r\n } else {\r\n let activeCam: Camera;\r\n if (this.originalScene.activeCameras && this.originalScene.activeCameras.length > 1) {\r\n activeCam = this.originalScene.activeCameras[this.originalScene.activeCameras.length - 1];\r\n } else {\r\n activeCam = this.originalScene.activeCamera!;\r\n }\r\n\r\n if (getRigParentIfPossible && activeCam && activeCam.isRigCamera) {\r\n return activeCam.rigParent!;\r\n }\r\n return activeCam;\r\n }\r\n }\r\n /**\r\n * Sets the camera that should be used when rendering the utility layer (If set to null the last active camera will be used)\r\n * @param cam the camera that should be used when rendering the utility layer\r\n */\r\n public setRenderCamera(cam: Nullable<Camera>) {\r\n this._renderCamera = cam;\r\n }\r\n\r\n /**\r\n * @internal\r\n * Light which used by gizmos to get light shading\r\n */\r\n public _getSharedGizmoLight(): HemisphericLight {\r\n if (!this._sharedGizmoLight) {\r\n this._sharedGizmoLight = new HemisphericLight(\"shared gizmo light\", new Vector3(0, 1, 0), this.utilityLayerScene);\r\n this._sharedGizmoLight.intensity = 2;\r\n this._sharedGizmoLight.groundColor = Color3.Gray();\r\n }\r\n return this._sharedGizmoLight;\r\n }\r\n\r\n /**\r\n * If the picking should be done on the utility layer prior to the actual scene (Default: true)\r\n */\r\n public pickUtilitySceneFirst = true;\r\n /**\r\n * A shared utility layer that can be used to overlay objects into a scene (Depth map of the previous scene is cleared before drawing on top of it)\r\n */\r\n public static get DefaultUtilityLayer(): UtilityLayerRenderer {\r\n if (UtilityLayerRenderer._DefaultUtilityLayer == null) {\r\n return UtilityLayerRenderer._CreateDefaultUtilityLayerFromScene(EngineStore.LastCreatedScene!);\r\n }\r\n\r\n return UtilityLayerRenderer._DefaultUtilityLayer;\r\n }\r\n\r\n /**\r\n * Creates an utility layer, and set it as a default utility layer\r\n * @param scene associated scene\r\n * @internal\r\n */\r\n public static _CreateDefaultUtilityLayerFromScene(scene: Scene): UtilityLayerRenderer {\r\n UtilityLayerRenderer._DefaultUtilityLayer = new UtilityLayerRenderer(scene);\r\n UtilityLayerRenderer._DefaultUtilityLayer.originalScene.onDisposeObservable.addOnce(() => {\r\n UtilityLayerRenderer._DefaultUtilityLayer = null;\r\n });\r\n\r\n return UtilityLayerRenderer._DefaultUtilityLayer;\r\n }\r\n /**\r\n * A shared utility layer that can be used to embed objects into a scene (Depth map of the previous scene is not cleared before drawing on top of it)\r\n */\r\n public static get DefaultKeepDepthUtilityLayer(): UtilityLayerRenderer {\r\n if (UtilityLayerRenderer._DefaultKeepDepthUtilityLayer == null) {\r\n UtilityLayerRenderer._DefaultKeepDepthUtilityLayer = new UtilityLayerRenderer(EngineStore.LastCreatedScene!);\r\n UtilityLayerRenderer._DefaultKeepDepthUtilityLayer.utilityLayerScene.autoClearDepthAndStencil = false;\r\n UtilityLayerRenderer._DefaultKeepDepthUtilityLayer.originalScene.onDisposeObservable.addOnce(() => {\r\n UtilityLayerRenderer._DefaultKeepDepthUtilityLayer = null;\r\n });\r\n }\r\n return UtilityLayerRenderer._DefaultKeepDepthUtilityLayer;\r\n }\r\n\r\n /**\r\n * The scene that is rendered on top of the original scene\r\n */\r\n public utilityLayerScene: Scene;\r\n\r\n /**\r\n * If the utility layer should automatically be rendered on top of existing scene\r\n */\r\n public shouldRender: boolean = true;\r\n /**\r\n * If set to true, only pointer down onPointerObservable events will be blocked when picking is occluded by original scene\r\n */\r\n public onlyCheckPointerDownEvents = true;\r\n\r\n /**\r\n * If set to false, only pointerUp, pointerDown and pointerMove will be sent to the utilityLayerScene (false by default)\r\n */\r\n public processAllEvents = false;\r\n\r\n /**\r\n * Set to false to disable picking\r\n */\r\n public pickingEnabled = true;\r\n\r\n /**\r\n * Observable raised when the pointer moves from the utility layer scene to the main scene\r\n */\r\n public onPointerOutObservable = new Observable<number>();\r\n\r\n /** Gets or sets a predicate that will be used to indicate utility meshes present in the main scene */\r\n public mainSceneTrackerPredicate: (mesh: Nullable<AbstractMesh>) => boolean;\r\n\r\n private _afterRenderObserver: Nullable<Observer<Camera>>;\r\n private _sceneDisposeObserver: Nullable<Observer<Scene>>;\r\n private _originalPointerObserver: Nullable<Observer<PointerInfoPre>>;\r\n /**\r\n * Instantiates a UtilityLayerRenderer\r\n * @param originalScene the original scene that will be rendered on top of\r\n * @param handleEvents boolean indicating if the utility layer should handle events\r\n * @param manualRender boolean indicating if the utility layer should render manually.\r\n */\r\n constructor(\r\n /** the original scene that will be rendered on top of */\r\n public originalScene: Scene,\r\n public readonly handleEvents: boolean = true,\r\n manualRender = false\r\n ) {\r\n // Create scene which will be rendered in the foreground and remove it from being referenced by engine to avoid interfering with existing app\r\n this.utilityLayerScene = new Scene(originalScene.getEngine(), { virtual: true, useFloatingOrigin: originalScene.floatingOriginMode });\r\n this.utilityLayerScene.useRightHandedSystem = originalScene.useRightHandedSystem;\r\n this.utilityLayerScene._allowPostProcessClearColor = false;\r\n\r\n // Deactivate post processes\r\n this.utilityLayerScene.postProcessesEnabled = false;\r\n\r\n // Detach controls on utility scene, events will be fired by logic below to handle picking priority\r\n this.utilityLayerScene.detachControl();\r\n\r\n if (handleEvents) {\r\n this._originalPointerObserver = originalScene.onPrePointerObservable.add((prePointerInfo) => {\r\n if (!this.utilityLayerScene.activeCamera) {\r\n return;\r\n }\r\n if (!this.pickingEnabled) {\r\n return;\r\n }\r\n\r\n if (!this.processAllEvents) {\r\n if (\r\n prePointerInfo.type !== PointerEventTypes.POINTERMOVE &&\r\n prePointerInfo.type !== PointerEventTypes.POINTERUP &&\r\n prePointerInfo.type !== PointerEventTypes.POINTERDOWN &&\r\n prePointerInfo.type !== PointerEventTypes.POINTERDOUBLETAP\r\n ) {\r\n return;\r\n }\r\n }\r\n this.utilityLayerScene.pointerX = originalScene.pointerX;\r\n this.utilityLayerScene.pointerY = originalScene.pointerY;\r\n const pointerEvent = <IPointerEvent>prePointerInfo.event;\r\n if (originalScene.isPointerCaptured(pointerEvent.pointerId)) {\r\n this._pointerCaptures[pointerEvent.pointerId] = false;\r\n return;\r\n }\r\n\r\n const getNearPickDataForScene = (scene: Scene) => {\r\n let scenePick = null;\r\n\r\n if (prePointerInfo.nearInteractionPickingInfo) {\r\n if (prePointerInfo.nearInteractionPickingInfo.pickedMesh!.getScene() == scene) {\r\n scenePick = prePointerInfo.nearInteractionPickingInfo;\r\n } else {\r\n scenePick = new PickingInfo();\r\n }\r\n } else if (scene !== this.utilityLayerScene && prePointerInfo.originalPickingInfo) {\r\n scenePick = prePointerInfo.originalPickingInfo;\r\n } else {\r\n let previousActiveCamera: Nullable<Camera> = null;\r\n // If a camera is set for rendering with this layer\r\n // it will also be used for the ray computation\r\n // To preserve back compat and because scene.pick always use activeCamera\r\n // it's substituted temporarily and a new scenePick is forced.\r\n // otherwise, the ray with previously active camera is always used.\r\n // It's set back to previous activeCamera after operation.\r\n if (this._renderCamera) {\r\n previousActiveCamera = scene._activeCamera;\r\n scene._activeCamera = this._renderCamera;\r\n prePointerInfo.ray = null;\r\n }\r\n scenePick = prePointerInfo.ray ? scene.pickWithRay(prePointerInfo.ray) : scene.pick(originalScene.pointerX, originalScene.pointerY);\r\n if (previousActiveCamera) {\r\n scene._activeCamera = previousActiveCamera;\r\n }\r\n }\r\n\r\n return scenePick;\r\n };\r\n\r\n const utilityScenePick = getNearPickDataForScene(this.utilityLayerScene);\r\n\r\n if (!prePointerInfo.ray && utilityScenePick) {\r\n prePointerInfo.ray = utilityScenePick.ray;\r\n }\r\n\r\n if (prePointerInfo.originalPickingInfo?.aimTransform && utilityScenePick) {\r\n utilityScenePick.aimTransform = prePointerInfo.originalPickingInfo.aimTransform;\r\n utilityScenePick.gripTransform = prePointerInfo.originalPickingInfo.gripTransform;\r\n }\r\n\r\n // always fire the prepointer observable\r\n this.utilityLayerScene.onPrePointerObservable.notifyObservers(prePointerInfo);\r\n\r\n // allow every non pointer down event to flow to the utility layer\r\n if (this.onlyCheckPointerDownEvents && prePointerInfo.type != PointerEventTypes.POINTERDOWN) {\r\n if (!prePointerInfo.skipOnPointerObservable) {\r\n this.utilityLayerScene.onPointerObservable.notifyObservers(\r\n new PointerInfo(prePointerInfo.type, prePointerInfo.event, utilityScenePick),\r\n prePointerInfo.type\r\n );\r\n }\r\n if (prePointerInfo.type === PointerEventTypes.POINTERUP && this._pointerCaptures[pointerEvent.pointerId]) {\r\n this._pointerCaptures[pointerEvent.pointerId] = false;\r\n }\r\n return;\r\n }\r\n\r\n if (this.utilityLayerScene.autoClearDepthAndStencil || this.pickUtilitySceneFirst) {\r\n // If this layer is an overlay, check if this layer was hit and if so, skip pointer events for the main scene\r\n if (utilityScenePick && utilityScenePick.hit) {\r\n if (!prePointerInfo.skipOnPointerObservable) {\r\n this.utilityLayerScene.onPointerObservable.notifyObservers(\r\n new PointerInfo(prePointerInfo.type, prePointerInfo.event, utilityScenePick),\r\n prePointerInfo.type\r\n );\r\n }\r\n prePointerInfo.skipOnPointerObservable = true;\r\n }\r\n } else {\r\n const originalScenePick = getNearPickDataForScene(originalScene);\r\n const pointerEvent = <IPointerEvent>prePointerInfo.event;\r\n\r\n // If the layer can be occluded by the original scene, only fire pointer events to the first layer that hit they ray\r\n if (originalScenePick && utilityScenePick) {\r\n // No pick in utility scene\r\n if (utilityScenePick.distance === 0 && originalScenePick.pickedMesh) {\r\n if (this.mainSceneTrackerPredicate && this.mainSceneTrackerPredicate(originalScenePick.pickedMesh)) {\r\n // We touched an utility mesh present in the main scene\r\n this._notifyObservers(prePointerInfo, originalScenePick, pointerEvent);\r\n prePointerInfo.skipOnPointerObservable = true;\r\n } else if (prePointerInfo.type === PointerEventTypes.POINTERDOWN) {\r\n this._pointerCaptures[pointerEvent.pointerId] = true;\r\n this._notifyObservers(prePointerInfo, originalScenePick, pointerEvent);\r\n } else if (prePointerInfo.type === PointerEventTypes.POINTERMOVE || prePointerInfo.type === PointerEventTypes.POINTERUP) {\r\n if (this._lastPointerEvents[pointerEvent.pointerId]) {\r\n // We need to send a last pointerup to the utilityLayerScene to make sure animations can complete\r\n this.onPointerOutObservable.notifyObservers(pointerEvent.pointerId);\r\n delete this._lastPointerEvents[pointerEvent.pointerId];\r\n }\r\n this._notifyObservers(prePointerInfo, originalScenePick, pointerEvent);\r\n }\r\n } else if (!this._pointerCaptures[pointerEvent.pointerId] && (utilityScenePick.distance < originalScenePick.distance || originalScenePick.distance === 0)) {\r\n // We pick something in utility scene or the pick in utility is closer than the one in main scene\r\n this._notifyObservers(prePointerInfo, utilityScenePick, pointerEvent);\r\n // If a previous utility layer set this, do not unset this\r\n if (!prePointerInfo.skipOnPointerObservable) {\r\n prePointerInfo.skipOnPointerObservable = utilityScenePick.distance > 0;\r\n }\r\n } else if (!this._pointerCaptures[pointerEvent.pointerId] && utilityScenePick.distance >= originalScenePick.distance) {\r\n // We have a pick in both scenes but main is closer than utility\r\n\r\n // We touched an utility mesh present in the main scene\r\n if (this.mainSceneTrackerPredicate && this.mainSceneTrackerPredicate(originalScenePick.pickedMesh)) {\r\n this._notifyObservers(prePointerInfo, originalScenePick, pointerEvent);\r\n prePointerInfo.skipOnPointerObservable = true;\r\n } else {\r\n if (prePointerInfo.type === PointerEventTypes.POINTERMOVE || prePointerInfo.type === PointerEventTypes.POINTERUP) {\r\n if (this._lastPointerEvents[pointerEvent.pointerId]) {\r\n // We need to send a last pointerup to the utilityLayerScene to make sure animations can complete\r\n this.onPointerOutObservable.notifyObservers(pointerEvent.pointerId);\r\n delete this._lastPointerEvents[pointerEvent.pointerId];\r\n }\r\n }\r\n this._notifyObservers(prePointerInfo, utilityScenePick, pointerEvent);\r\n }\r\n }\r\n\r\n if (prePointerInfo.type === PointerEventTypes.POINTERUP && this._pointerCaptures[pointerEvent.pointerId]) {\r\n this._pointerCaptures[pointerEvent.pointerId] = false;\r\n }\r\n }\r\n }\r\n });\r\n\r\n // As a newly added utility layer will be rendered over the screen last, it's pointer events should be processed first\r\n if (this._originalPointerObserver) {\r\n originalScene.onPrePointerObservable.makeObserverTopPriority(this._originalPointerObserver);\r\n }\r\n }\r\n\r\n // Render directly on top of existing scene without clearing\r\n this.utilityLayerScene.autoClear = false;\r\n\r\n if (!manualRender) {\r\n this._afterRenderObserver = this.originalScene.onAfterRenderCameraObservable.add((camera) => {\r\n // Only render when the render camera finishes rendering\r\n if (this.shouldRender && camera == this.getRenderCamera()) {\r\n this.render();\r\n }\r\n });\r\n }\r\n\r\n this._sceneDisposeObserver = this.originalScene.onDisposeObservable.add(() => {\r\n this.dispose();\r\n });\r\n\r\n this._updateCamera();\r\n }\r\n\r\n private _notifyObservers(prePointerInfo: PointerInfoPre, pickInfo: PickingInfo, pointerEvent: IPointerEvent) {\r\n if (!prePointerInfo.skipOnPointerObservable) {\r\n this.utilityLayerScene.onPointerObservable.notifyObservers(new PointerInfo(prePointerInfo.type, prePointerInfo.event, pickInfo), prePointerInfo.type);\r\n this._lastPointerEvents[pointerEvent.pointerId] = true;\r\n }\r\n }\r\n\r\n /**\r\n * Renders the utility layers scene on top of the original scene\r\n */\r\n public render() {\r\n this._updateCamera();\r\n if (this.utilityLayerScene.activeCamera) {\r\n // Set the camera's scene to utility layers scene\r\n const oldScene = this.utilityLayerScene.activeCamera.getScene();\r\n const camera = this.utilityLayerScene.activeCamera;\r\n camera._scene = this.utilityLayerScene;\r\n if (camera.leftCamera) {\r\n camera.leftCamera._scene = this.utilityLayerScene;\r\n }\r\n if (camera.rightCamera) {\r\n camera.rightCamera._scene = this.utilityLayerScene;\r\n }\r\n\r\n this.utilityLayerScene.render(false);\r\n\r\n // Reset camera's scene back to original\r\n camera._scene = oldScene;\r\n if (camera.leftCamera) {\r\n camera.leftCamera._scene = oldScene;\r\n }\r\n if (camera.rightCamera) {\r\n camera.rightCamera._scene = oldScene;\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Disposes of the renderer\r\n */\r\n public dispose() {\r\n this.onPointerOutObservable.clear();\r\n\r\n if (this._afterRenderObserver) {\r\n this.originalScene.onAfterCameraRenderObservable.remove(this._afterRenderObserver);\r\n }\r\n if (this._sceneDisposeObserver) {\r\n this.originalScene.onDisposeObservable.remove(this._sceneDisposeObserver);\r\n }\r\n if (this._originalPointerObserver) {\r\n this.originalScene.onPrePointerObservable.remove(this._originalPointerObserver);\r\n }\r\n this.utilityLayerScene.dispose();\r\n }\r\n\r\n private _updateCamera() {\r\n this.utilityLayerScene.cameraToUseForPointers = this.getRenderCamera();\r\n this.utilityLayerScene.activeCamera = this.getRenderCamera();\r\n }\r\n}\r\n"]}
|
|
@@ -1,13 +1,12 @@
|
|
|
1
1
|
// Do not edit.
|
|
2
2
|
import { ShaderStore } from "../Engines/shaderStore.js";
|
|
3
3
|
const name = "iblVoxelGridPixelShader";
|
|
4
|
-
const shader = `varying vNormalizedPosition: vec3f;
|
|
5
|
-
fn main(input: FragmentInputs)->FragmentOutputs {var normPos: vec3f=input.vNormalizedPosition.xyz;
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
}`;
|
|
4
|
+
const shader = `var voxel_storage: texture_storage_3d<rgba8unorm,write>;varying vNormalizedPosition: vec3f;flat varying f_swizzle: i32;@fragment
|
|
5
|
+
fn main(input: FragmentInputs)->FragmentOutputs {var size: vec3f=vec3f(textureDimensions(voxel_storage));var normPos: vec3f=input.vNormalizedPosition.xyz;var outputColor: vec4f=vec4f(0.0,0.0,0.0,1.0);switch (input.f_swizzle) {case 0: {normPos=normPos.zxy;
|
|
6
|
+
outputColor=vec4f(1.0,1.0,0.0,1.0);break;}
|
|
7
|
+
case 1: {normPos=normPos.yzx;outputColor=vec4f(1.0,1.0,1.0,1.0);break;}
|
|
8
|
+
default: {normPos=normPos.xyz;outputColor=vec4f(1.0,1.0,0.0,1.0);break;}}
|
|
9
|
+
textureStore(voxel_storage,vec3<i32>(i32(normPos.x*size.x),i32(normPos.y*size.y),i32(normPos.z*size.z)),outputColor);fragmentOutputs.color=vec4<f32>(vec3<f32>(normPos),1.);}`;
|
|
11
10
|
// Sideeffect
|
|
12
11
|
if (!ShaderStore.ShadersStoreWGSL[name]) {
|
|
13
12
|
ShaderStore.ShadersStoreWGSL[name] = shader;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"iblVoxelGrid.fragment.js","sourceRoot":"","sources":["../../../../dev/core/src/ShadersWGSL/iblVoxelGrid.fragment.ts"],"names":[],"mappings":"AAAA,eAAe;AACf,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAErD,MAAM,IAAI,GAAG,yBAAyB,CAAC;AACvC,MAAM,MAAM,GAAG
|
|
1
|
+
{"version":3,"file":"iblVoxelGrid.fragment.js","sourceRoot":"","sources":["../../../../dev/core/src/ShadersWGSL/iblVoxelGrid.fragment.ts"],"names":[],"mappings":"AAAA,eAAe;AACf,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAErD,MAAM,IAAI,GAAG,yBAAyB,CAAC;AACvC,MAAM,MAAM,GAAG;;;;;8KAK+J,CAAC;AAC/K,aAAa;AACb,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC;IACtC,WAAW,CAAC,gBAAgB,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC;AAChD,CAAC;AACD,gBAAgB;AAChB,MAAM,CAAC,MAAM,2BAA2B,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC","sourcesContent":["// Do not edit.\nimport { ShaderStore } from \"../Engines/shaderStore\";\n\nconst name = \"iblVoxelGridPixelShader\";\nconst shader = `var voxel_storage: texture_storage_3d<rgba8unorm,write>;varying vNormalizedPosition: vec3f;flat varying f_swizzle: i32;@fragment\nfn main(input: FragmentInputs)->FragmentOutputs {var size: vec3f=vec3f(textureDimensions(voxel_storage));var normPos: vec3f=input.vNormalizedPosition.xyz;var outputColor: vec4f=vec4f(0.0,0.0,0.0,1.0);switch (input.f_swizzle) {case 0: {normPos=normPos.zxy; \noutputColor=vec4f(1.0,1.0,0.0,1.0);break;}\ncase 1: {normPos=normPos.yzx;outputColor=vec4f(1.0,1.0,1.0,1.0);break;}\ndefault: {normPos=normPos.xyz;outputColor=vec4f(1.0,1.0,0.0,1.0);break;}}\ntextureStore(voxel_storage,vec3<i32>(i32(normPos.x*size.x),i32(normPos.y*size.y),i32(normPos.z*size.z)),outputColor);fragmentOutputs.color=vec4<f32>(vec3<f32>(normPos),1.);}`;\n// Sideeffect\nif (!ShaderStore.ShadersStoreWGSL[name]) {\n ShaderStore.ShadersStoreWGSL[name] = shader;\n}\n/** @internal */\nexport const iblVoxelGridPixelShaderWGSL = { name, shader };\n"]}
|
|
@@ -1,13 +1,5 @@
|
|
|
1
|
-
import "./ShadersInclude/bonesDeclaration.js";
|
|
2
|
-
import "./ShadersInclude/bakedVertexAnimationDeclaration.js";
|
|
3
|
-
import "./ShadersInclude/instancesDeclaration.js";
|
|
4
1
|
import "./ShadersInclude/morphTargetsVertexGlobalDeclaration.js";
|
|
5
2
|
import "./ShadersInclude/morphTargetsVertexDeclaration.js";
|
|
6
|
-
import "./ShadersInclude/morphTargetsVertexGlobal.js";
|
|
7
|
-
import "./ShadersInclude/morphTargetsVertex.js";
|
|
8
|
-
import "./ShadersInclude/instancesVertex.js";
|
|
9
|
-
import "./ShadersInclude/bonesVertex.js";
|
|
10
|
-
import "./ShadersInclude/bakedVertexAnimation.js";
|
|
11
3
|
/** @internal */
|
|
12
4
|
export declare const iblVoxelGridVertexShaderWGSL: {
|
|
13
5
|
name: string;
|
|
@@ -1,34 +1,45 @@
|
|
|
1
1
|
// Do not edit.
|
|
2
2
|
import { ShaderStore } from "../Engines/shaderStore.js";
|
|
3
|
-
import "./ShadersInclude/bonesDeclaration.js";
|
|
4
|
-
import "./ShadersInclude/bakedVertexAnimationDeclaration.js";
|
|
5
|
-
import "./ShadersInclude/instancesDeclaration.js";
|
|
6
3
|
import "./ShadersInclude/morphTargetsVertexGlobalDeclaration.js";
|
|
7
4
|
import "./ShadersInclude/morphTargetsVertexDeclaration.js";
|
|
8
|
-
import "./ShadersInclude/morphTargetsVertexGlobal.js";
|
|
9
|
-
import "./ShadersInclude/morphTargetsVertex.js";
|
|
10
|
-
import "./ShadersInclude/instancesVertex.js";
|
|
11
|
-
import "./ShadersInclude/bonesVertex.js";
|
|
12
|
-
import "./ShadersInclude/bakedVertexAnimation.js";
|
|
13
5
|
const name = "iblVoxelGridVertexShader";
|
|
14
|
-
const shader =
|
|
15
|
-
#include<bonesDeclaration>
|
|
16
|
-
#include<
|
|
17
|
-
#include<instancesDeclaration>
|
|
6
|
+
const shader = `#include <bakedVertexAnimationDeclaration>
|
|
7
|
+
#include <bonesDeclaration>
|
|
8
|
+
#include <helperFunctions>
|
|
9
|
+
#include <instancesDeclaration>
|
|
18
10
|
#include<morphTargetsVertexGlobalDeclaration>
|
|
19
11
|
#include<morphTargetsVertexDeclaration>[0..maxSimultaneousMorphTargets]
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
#
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
#
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
#ifdef
|
|
29
|
-
|
|
12
|
+
#ifdef VERTEX_PULLING_USE_INDEX_BUFFER
|
|
13
|
+
var<storage,read> indices : array<u32>;
|
|
14
|
+
#endif
|
|
15
|
+
var<storage,read> position : array<f32>;uniform world : mat4x4f;uniform invWorldScale: mat4x4f;varying vNormalizedPosition : vec3f;flat varying f_swizzle: i32;fn readVertexPosition(index : u32)->vec3f {var pos : vec3f;pos.x=position[index*3];pos.y=position[index*3+1];pos.z=position[index*3+2];return pos;}
|
|
16
|
+
fn readVertexIndex(index : u32)->u32 {
|
|
17
|
+
#ifndef VERTEX_PULLING_USE_INDEX_BUFFER
|
|
18
|
+
return index;
|
|
19
|
+
#else
|
|
20
|
+
#ifdef VERTEX_PULLING_INDEX_BUFFER_32BITS
|
|
21
|
+
return indices[index];
|
|
22
|
+
#else
|
|
23
|
+
let u32_index=index/2u;let bit_offset=(index & 1u)*16u;return (indices[u32_index]>>bit_offset) & 0xFFFFu;
|
|
24
|
+
#endif
|
|
30
25
|
#endif
|
|
31
26
|
}
|
|
27
|
+
fn calculateTriangleNormal(v0
|
|
28
|
+
: vec3<f32>,v1
|
|
29
|
+
: vec3<f32>,v2
|
|
30
|
+
: vec3<f32>)
|
|
31
|
+
->vec3<f32> {let edge1=v1-v0;let edge2=v2-v0;let triangleNormal=cross(edge1,edge2);let normalizedTriangleNormal=normalize(triangleNormal);return normalizedTriangleNormal;}
|
|
32
|
+
@vertex
|
|
33
|
+
fn main(input : VertexInputs)->FragmentInputs {var vertIdx=readVertexIndex(input.vertexIndex);var positionUpdated=readVertexPosition(vertIdx);
|
|
34
|
+
#include <morphTargetsVertexGlobal>
|
|
35
|
+
let inputPosition: vec3f=positionUpdated;
|
|
36
|
+
#include <morphTargetsVertex>(vertexInputs.position\\),inputPosition))[0..maxSimultaneousMorphTargets]
|
|
37
|
+
#include <instancesVertex>
|
|
38
|
+
#include <bakedVertexAnimation>
|
|
39
|
+
#include <bonesVertex>
|
|
40
|
+
let worldPos=finalWorld*vec4f(positionUpdated,1.0);vertexOutputs.position=uniforms.invWorldScale*worldPos;var provokingVertNum : u32=input.vertexIndex/3*3;var pos0=readVertexPosition(readVertexIndex(provokingVertNum));var pos1=readVertexPosition(readVertexIndex(provokingVertNum+1));var pos2=readVertexPosition(readVertexIndex(provokingVertNum+2));var N : vec3<f32>=calculateTriangleNormal(pos0,pos1,pos2);N=abs(N);if (N.x>N.y && N.x>N.z) {vertexOutputs.f_swizzle=0;vertexOutputs.position=vec4f(vertexOutputs.position.yzx,1.0);} else if (N.y>N.z) {vertexOutputs.f_swizzle=1;vertexOutputs.position=vec4f(vertexOutputs.position.zxy,1.0);} else {vertexOutputs.f_swizzle=2;vertexOutputs.position=vec4f(vertexOutputs.position.xyz,1.0);}
|
|
41
|
+
vertexOutputs.vNormalizedPosition=vertexOutputs.position.xyz*0.5+0.5;vertexOutputs.position.z =
|
|
42
|
+
vertexOutputs.vNormalizedPosition.z; }
|
|
32
43
|
`;
|
|
33
44
|
// Sideeffect
|
|
34
45
|
if (!ShaderStore.ShadersStoreWGSL[name]) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"iblVoxelGrid.vertex.js","sourceRoot":"","sources":["../../../../dev/core/src/ShadersWGSL/iblVoxelGrid.vertex.ts"],"names":[],"mappings":"AAAA,eAAe;AACf,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,
|
|
1
|
+
{"version":3,"file":"iblVoxelGrid.vertex.js","sourceRoot":"","sources":["../../../../dev/core/src/ShadersWGSL/iblVoxelGrid.vertex.ts"],"names":[],"mappings":"AAAA,eAAe;AACf,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,sDAAsD,CAAC;AAC9D,OAAO,gDAAgD,CAAC;AAExD,MAAM,IAAI,GAAG,0BAA0B,CAAC;AACxC,MAAM,MAAM,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAqCd,CAAC;AACF,aAAa;AACb,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC;IACtC,WAAW,CAAC,gBAAgB,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC;AAChD,CAAC;AACD,gBAAgB;AAChB,MAAM,CAAC,MAAM,4BAA4B,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC","sourcesContent":["// Do not edit.\nimport { ShaderStore } from \"../Engines/shaderStore\";\nimport \"./ShadersInclude/morphTargetsVertexGlobalDeclaration\";\nimport \"./ShadersInclude/morphTargetsVertexDeclaration\";\n\nconst name = \"iblVoxelGridVertexShader\";\nconst shader = `#include <bakedVertexAnimationDeclaration>\n#include <bonesDeclaration>\n#include <helperFunctions>\n#include <instancesDeclaration>\n#include<morphTargetsVertexGlobalDeclaration>\n#include<morphTargetsVertexDeclaration>[0..maxSimultaneousMorphTargets]\n#ifdef VERTEX_PULLING_USE_INDEX_BUFFER\nvar<storage,read> indices : array<u32>;\n#endif\nvar<storage,read> position : array<f32>;uniform world : mat4x4f;uniform invWorldScale: mat4x4f;varying vNormalizedPosition : vec3f;flat varying f_swizzle: i32;fn readVertexPosition(index : u32)->vec3f {var pos : vec3f;pos.x=position[index*3];pos.y=position[index*3+1];pos.z=position[index*3+2];return pos;}\nfn readVertexIndex(index : u32)->u32 {\n#ifndef VERTEX_PULLING_USE_INDEX_BUFFER\nreturn index;\n#else\n#ifdef VERTEX_PULLING_INDEX_BUFFER_32BITS\nreturn indices[index];\n#else\nlet u32_index=index/2u;let bit_offset=(index & 1u)*16u;return (indices[u32_index]>>bit_offset) & 0xFFFFu;\n#endif\n#endif\n}\nfn calculateTriangleNormal(v0\n: vec3<f32>,v1\n: vec3<f32>,v2\n: vec3<f32>)\n->vec3<f32> {let edge1=v1-v0;let edge2=v2-v0;let triangleNormal=cross(edge1,edge2);let normalizedTriangleNormal=normalize(triangleNormal);return normalizedTriangleNormal;}\n@vertex\nfn main(input : VertexInputs)->FragmentInputs {var vertIdx=readVertexIndex(input.vertexIndex);var positionUpdated=readVertexPosition(vertIdx);\n#include <morphTargetsVertexGlobal>\nlet inputPosition: vec3f=positionUpdated;\n#include <morphTargetsVertex>(vertexInputs.position\\\\),inputPosition))[0..maxSimultaneousMorphTargets]\n#include <instancesVertex>\n#include <bakedVertexAnimation>\n#include <bonesVertex>\nlet worldPos=finalWorld*vec4f(positionUpdated,1.0);vertexOutputs.position=uniforms.invWorldScale*worldPos;var provokingVertNum : u32=input.vertexIndex/3*3;var pos0=readVertexPosition(readVertexIndex(provokingVertNum));var pos1=readVertexPosition(readVertexIndex(provokingVertNum+1));var pos2=readVertexPosition(readVertexIndex(provokingVertNum+2));var N : vec3<f32>=calculateTriangleNormal(pos0,pos1,pos2);N=abs(N);if (N.x>N.y && N.x>N.z) {vertexOutputs.f_swizzle=0;vertexOutputs.position=vec4f(vertexOutputs.position.yzx,1.0);} else if (N.y>N.z) {vertexOutputs.f_swizzle=1;vertexOutputs.position=vec4f(vertexOutputs.position.zxy,1.0);} else {vertexOutputs.f_swizzle=2;vertexOutputs.position=vec4f(vertexOutputs.position.xyz,1.0);}\nvertexOutputs.vNormalizedPosition=vertexOutputs.position.xyz*0.5+0.5;vertexOutputs.position.z =\nvertexOutputs.vNormalizedPosition.z; }\n`;\n// Sideeffect\nif (!ShaderStore.ShadersStoreWGSL[name]) {\n ShaderStore.ShadersStoreWGSL[name] = shader;\n}\n/** @internal */\nexport const iblVoxelGridVertexShaderWGSL = { name, shader };\n"]}
|
|
@@ -12,8 +12,7 @@ vec2f((offsetX+input.vUV.x)*widthScale,(offsetY+input.vUV.y)*heightScale);var ba
|
|
|
12
12
|
floor(uv.y* f32(dimension))*dimension);var mip_separator: f32=0.0;if (samplePos.x<0.01 || samplePos.y<0.01) {mip_separator=1.0;}
|
|
13
13
|
var outBounds: bool=select(false,true,sampleIndex>size.z-1);sampleIndex=clamp(sampleIndex,0,size.z-1);var samplePosInt: vec2i= vec2i(samplePos.xy* vec2f(size.xy));var voxel: vec3f=textureLoad(voxelTexture,
|
|
14
14
|
vec3i(i32(samplePosInt.x),i32(samplePosInt.y),i32(sampleIndex)),
|
|
15
|
-
i32(uniforms.mipNumber)).rgb;if (uv.x<0.0 || uv.x>1.0 || uv.y<0.0 || uv.y>1.0) {fragmentOutputs.color=background;} else {if (outBounds) {voxel= vec3f(0.15,0.0,0.0);} else {
|
|
16
|
-
voxel.r+=mip_separator;}
|
|
15
|
+
i32(uniforms.mipNumber)).rgb;if (uv.x<0.0 || uv.x>1.0 || uv.y<0.0 || uv.y>1.0) {fragmentOutputs.color=background;} else {if (outBounds) {voxel= vec3f(0.15,0.0,0.0);} else {voxel.r+=mip_separator;}
|
|
17
16
|
fragmentOutputs.color=vec4f(mix(background.rgb,voxelSlab.rgb,voxelSlab.a)+voxel,1.0);}}`;
|
|
18
17
|
// Sideeffect
|
|
19
18
|
if (!ShaderStore.ShadersStoreWGSL[name]) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"iblVoxelGrid3dDebug.fragment.js","sourceRoot":"","sources":["../../../../dev/core/src/ShadersWGSL/iblVoxelGrid3dDebug.fragment.ts"],"names":[],"mappings":"AAAA,eAAe;AACf,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAErD,MAAM,IAAI,GAAG,gCAAgC,CAAC;AAC9C,MAAM,MAAM,GAAG
|
|
1
|
+
{"version":3,"file":"iblVoxelGrid3dDebug.fragment.js","sourceRoot":"","sources":["../../../../dev/core/src/ShadersWGSL/iblVoxelGrid3dDebug.fragment.ts"],"names":[],"mappings":"AAAA,eAAe;AACf,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAErD,MAAM,IAAI,GAAG,gCAAgC,CAAC;AAC9C,MAAM,MAAM,GAAG;;;;;;;;;;;;wFAYyE,CAAC;AACzF,aAAa;AACb,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC;IACtC,WAAW,CAAC,gBAAgB,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC;AAChD,CAAC;AACD,gBAAgB;AAChB,MAAM,CAAC,MAAM,kCAAkC,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC","sourcesContent":["// Do not edit.\nimport { ShaderStore } from \"../Engines/shaderStore\";\n\nconst name = \"iblVoxelGrid3dDebugPixelShader\";\nconst shader = `varying vUV: vec2f;var voxelTextureSampler: sampler;var voxelTexture: texture_3d<f32>;var voxelSlabTextureSampler: sampler;var voxelSlabTexture: texture_2d<f32>;var textureSamplerSampler: sampler;var textureSampler: texture_2d<f32>;uniform sizeParams: vec4f;\n#define offsetX uniforms.sizeParams.x\n#define offsetY uniforms.sizeParams.y\n#define widthScale uniforms.sizeParams.z\n#define heightScale uniforms.sizeParams.w\nuniform mipNumber: f32;@fragment\nfn main(input: FragmentInputs)->FragmentOutputs {var uv: vec2f =\nvec2f((offsetX+input.vUV.x)*widthScale,(offsetY+input.vUV.y)*heightScale);var background: vec4f=textureSample(textureSampler,textureSamplerSampler,input.vUV);var voxelSlab: vec4f=textureSample(voxelSlabTexture,voxelSlabTextureSampler,input.vUV);var size: vec3u=textureDimensions(voxelTexture, i32(uniforms.mipNumber));var dimension: f32=ceil(sqrt( f32(size.z)));var samplePos: vec2f=fract(uv.xy* vec2f(dimension));var sampleIndex: u32= u32(floor(uv.x* f32(dimension)) +\nfloor(uv.y* f32(dimension))*dimension);var mip_separator: f32=0.0;if (samplePos.x<0.01 || samplePos.y<0.01) {mip_separator=1.0;}\nvar outBounds: bool=select(false,true,sampleIndex>size.z-1);sampleIndex=clamp(sampleIndex,0,size.z-1);var samplePosInt: vec2i= vec2i(samplePos.xy* vec2f(size.xy));var voxel: vec3f=textureLoad(voxelTexture,\nvec3i(i32(samplePosInt.x),i32(samplePosInt.y),i32(sampleIndex)),\ni32(uniforms.mipNumber)).rgb;if (uv.x<0.0 || uv.x>1.0 || uv.y<0.0 || uv.y>1.0) {fragmentOutputs.color=background;} else {if (outBounds) {voxel= vec3f(0.15,0.0,0.0);} else {voxel.r+=mip_separator;}\nfragmentOutputs.color=vec4f(mix(background.rgb,voxelSlab.rgb,voxelSlab.a)+voxel,1.0);}}`;\n// Sideeffect\nif (!ShaderStore.ShadersStoreWGSL[name]) {\n ShaderStore.ShadersStoreWGSL[name] = shader;\n}\n/** @internal */\nexport const iblVoxelGrid3dDebugPixelShaderWGSL = { name, shader };\n"]}
|
package/package.json
CHANGED
package/scene.d.ts
CHANGED
|
@@ -3,8 +3,8 @@ import type { IAnimatable } from "./Animations/animatable.interface.js";
|
|
|
3
3
|
import { Observable } from "./Misc/observable.js";
|
|
4
4
|
import type { ISmartArrayLike } from "./Misc/smartArray.js";
|
|
5
5
|
import { SmartArrayNoDuplicate, SmartArray } from "./Misc/smartArray.js";
|
|
6
|
-
import type { Vector2
|
|
7
|
-
import { Vector3, Matrix } from "./Maths/math.vector.js";
|
|
6
|
+
import type { Vector2 } from "./Maths/math.vector.js";
|
|
7
|
+
import { Vector3, Vector4, Matrix } from "./Maths/math.vector.js";
|
|
8
8
|
import type { IParticleSystem } from "./Particles/IParticleSystem.js";
|
|
9
9
|
import { ImageProcessingConfiguration } from "./Materials/imageProcessingConfiguration.js";
|
|
10
10
|
import { UniformBuffer } from "./Materials/uniformBuffer.js";
|
|
@@ -88,15 +88,17 @@ export interface SceneOptions {
|
|
|
88
88
|
* It will improve performance when the number of mesh becomes important, but might consume a bit more memory
|
|
89
89
|
*/
|
|
90
90
|
useClonedMeshMap?: boolean;
|
|
91
|
-
/** Defines if the creation of the scene should impact the engine (Eg. UtilityLayer's scene) */
|
|
92
|
-
virtual?: boolean;
|
|
93
91
|
/**
|
|
94
92
|
* @experimental
|
|
95
|
-
*
|
|
96
|
-
*
|
|
97
|
-
*
|
|
93
|
+
* When enabled, the scene can handle large world coordinate rendering without jittering caused by floating point imprecision on the GPU.
|
|
94
|
+
* This mode offsets matrices and position-related attribute values before passing to shaders, centering camera at origin and offsetting other scene objects by camera active position.
|
|
95
|
+
*
|
|
96
|
+
* IMPORTANT: Only use this scene-level option if you intend to enable floating origin on a per-scene basis. Must use in conjunction with engine creation option 'useHighPrecisionMatrix' to fix CPU-side floating point imprecision.
|
|
97
|
+
* HOWEVER if you want largeWorldRendering on ALL scenes, set the useLargeWorldRendering flag on the engine instead of this scene-level flag. Doing so will automatically set useHighPrecisionMatrix on the engine as well.
|
|
98
98
|
*/
|
|
99
|
-
|
|
99
|
+
useFloatingOrigin?: boolean;
|
|
100
|
+
/** Defines if the creation of the scene should impact the engine (Eg. UtilityLayer's scene) */
|
|
101
|
+
virtual?: boolean;
|
|
100
102
|
}
|
|
101
103
|
/**
|
|
102
104
|
* Define how the scene should favor performance over ease of use
|
|
@@ -167,6 +169,7 @@ export declare class Scene implements IAnimatable, IClipPlanesHolder, IAssetCont
|
|
|
167
169
|
*/
|
|
168
170
|
autoClearDepthAndStencil: boolean;
|
|
169
171
|
private _clearColor;
|
|
172
|
+
private _tempVect4;
|
|
170
173
|
/**
|
|
171
174
|
* Observable triggered when the performance priority is changed
|
|
172
175
|
*/
|
|
@@ -1592,12 +1595,11 @@ export declare class Scene implements IAnimatable, IClipPlanesHolder, IAssetCont
|
|
|
1592
1595
|
* @param ubo the ubo to set for the scene
|
|
1593
1596
|
*/
|
|
1594
1597
|
setSceneUniformBuffer(ubo: UniformBuffer): void;
|
|
1595
|
-
private
|
|
1598
|
+
private _floatingOriginScene;
|
|
1596
1599
|
/**
|
|
1597
1600
|
* @experimental
|
|
1598
|
-
*
|
|
1599
|
-
*
|
|
1600
|
-
* 2. Offsetting uniform values before passing to shader so that camera is centered at origin and world is offset by camera position
|
|
1601
|
+
* True if floatingOriginMode was passed to engine or this scene creation otions.
|
|
1602
|
+
* This mode avoids floating point imprecision in huge coordinate system by offsetting uniform values before passing to shader, centering camera at origin and displacing rest of scene by camera position
|
|
1601
1603
|
*/
|
|
1602
1604
|
get floatingOriginMode(): boolean;
|
|
1603
1605
|
private _floatingOriginOffsetDefault;
|
|
@@ -2251,6 +2253,7 @@ export declare class Scene implements IAnimatable, IClipPlanesHolder, IAssetCont
|
|
|
2251
2253
|
* @internal
|
|
2252
2254
|
*/
|
|
2253
2255
|
_renderRenderTarget(renderTarget: RenderTargetTexture, activeCamera: Nullable<Camera>, useCameraPostProcess?: boolean, dumpForDebug?: boolean): void;
|
|
2256
|
+
private _getFloatingOriginScene;
|
|
2254
2257
|
/**
|
|
2255
2258
|
* Render the scene
|
|
2256
2259
|
* @param updateCameras defines a boolean indicating if cameras must update according to their inputs (true by default)
|
package/scene.js
CHANGED
|
@@ -4,13 +4,13 @@ import { Observable } from "./Misc/observable.js";
|
|
|
4
4
|
import { SmartArrayNoDuplicate, SmartArray } from "./Misc/smartArray.js";
|
|
5
5
|
import { StringDictionary } from "./Misc/stringDictionary.js";
|
|
6
6
|
import { Tags } from "./Misc/tags.js";
|
|
7
|
-
import { Vector3, Matrix, TmpVectors } from "./Maths/math.vector.js";
|
|
7
|
+
import { Vector3, Vector4, Matrix, TmpVectors } from "./Maths/math.vector.js";
|
|
8
8
|
import { ImageProcessingConfiguration } from "./Materials/imageProcessingConfiguration.js";
|
|
9
9
|
import { UniformBuffer } from "./Materials/uniformBuffer.js";
|
|
10
10
|
import { PickingInfo } from "./Collisions/pickingInfo.js";
|
|
11
11
|
import { ActionEvent } from "./Actions/actionEvent.js";
|
|
12
12
|
import { PostProcessManager } from "./PostProcesses/postProcessManager.js";
|
|
13
|
-
import { OverrideMatrixFunctions, ResetMatrixFunctions } from "./Materials/floatingOriginMatrixOverrides.js";
|
|
13
|
+
import { FloatingOriginCurrentScene, OverrideMatrixFunctions, ResetMatrixFunctions } from "./Materials/floatingOriginMatrixOverrides.js";
|
|
14
14
|
import { RenderingManager } from "./Rendering/renderingManager.js";
|
|
15
15
|
import { Stage } from "./sceneComponent.js";
|
|
16
16
|
|
|
@@ -377,16 +377,18 @@ export class Scene {
|
|
|
377
377
|
: (this.activeCamera?.globalPosition ?? Vector3.ZeroReadOnly);
|
|
378
378
|
const invertNormal = this.useRightHandedSystem === (this._mirroredCameraPosition != null);
|
|
379
379
|
const offset = this.floatingOriginOffset;
|
|
380
|
-
const
|
|
380
|
+
const eyePos = this._tempVect4.set(eyePosition.x, eyePosition.y, eyePosition.z, invertNormal ? -1 : 1);
|
|
381
|
+
const offsetEyePos = eyePos.subtractFromFloatsToRef(offset.x, offset.y, offset.z, 0, TmpVectors.Vector4[1]);
|
|
381
382
|
if (effect) {
|
|
382
383
|
if (isVector3) {
|
|
383
|
-
effect.setFloat3(variableName,
|
|
384
|
+
effect.setFloat3(variableName, offsetEyePos.x, offsetEyePos.y, offsetEyePos.z);
|
|
384
385
|
}
|
|
385
386
|
else {
|
|
386
|
-
effect.setVector4(variableName,
|
|
387
|
+
effect.setVector4(variableName, offsetEyePos);
|
|
387
388
|
}
|
|
388
389
|
}
|
|
389
|
-
|
|
390
|
+
// Return the non-offset position
|
|
391
|
+
return eyePos;
|
|
390
392
|
}
|
|
391
393
|
/**
|
|
392
394
|
* Update the scene ubo before it can be used in rendering processing
|
|
@@ -683,6 +685,7 @@ export class Scene {
|
|
|
683
685
|
*/
|
|
684
686
|
this.autoClearDepthAndStencil = true;
|
|
685
687
|
this._clearColor = new Color4(0.2, 0.2, 0.3, 1.0);
|
|
688
|
+
this._tempVect4 = new Vector4();
|
|
686
689
|
/**
|
|
687
690
|
* Observable triggered when the performance priority is changed
|
|
688
691
|
*/
|
|
@@ -1453,7 +1456,7 @@ export class Scene {
|
|
|
1453
1456
|
data: [],
|
|
1454
1457
|
length: 0,
|
|
1455
1458
|
};
|
|
1456
|
-
this.
|
|
1459
|
+
this._floatingOriginScene = undefined;
|
|
1457
1460
|
this._floatingOriginOffsetDefault = Vector3.Zero();
|
|
1458
1461
|
this._preventFreeActiveMeshesAndRenderingGroups = false;
|
|
1459
1462
|
/** @internal */
|
|
@@ -1473,6 +1476,9 @@ export class Scene {
|
|
|
1473
1476
|
this.getDeterministicFrameTime = () => {
|
|
1474
1477
|
return this._engine.getTimeStep();
|
|
1475
1478
|
};
|
|
1479
|
+
this._getFloatingOriginScene = () => {
|
|
1480
|
+
return this._floatingOriginScene;
|
|
1481
|
+
};
|
|
1476
1482
|
/** @internal */
|
|
1477
1483
|
this._registeredActions = 0;
|
|
1478
1484
|
this._blockMaterialDirtyMechanism = false;
|
|
@@ -1498,10 +1504,9 @@ export class Scene {
|
|
|
1498
1504
|
EngineStore._LastCreatedScene = this;
|
|
1499
1505
|
engine.scenes.push(this);
|
|
1500
1506
|
}
|
|
1501
|
-
if (options?.
|
|
1502
|
-
|
|
1503
|
-
|
|
1504
|
-
this._floatingOriginMode = true;
|
|
1507
|
+
if (engine.getCreationOptions().useLargeWorldRendering || options?.useFloatingOrigin) {
|
|
1508
|
+
OverrideMatrixFunctions();
|
|
1509
|
+
this._floatingOriginScene = this;
|
|
1505
1510
|
}
|
|
1506
1511
|
this._uid = null;
|
|
1507
1512
|
this._renderingManager = new RenderingManager(this);
|
|
@@ -2148,12 +2153,11 @@ export class Scene {
|
|
|
2148
2153
|
}
|
|
2149
2154
|
/**
|
|
2150
2155
|
* @experimental
|
|
2151
|
-
*
|
|
2152
|
-
*
|
|
2153
|
-
* 2. Offsetting uniform values before passing to shader so that camera is centered at origin and world is offset by camera position
|
|
2156
|
+
* True if floatingOriginMode was passed to engine or this scene creation otions.
|
|
2157
|
+
* This mode avoids floating point imprecision in huge coordinate system by offsetting uniform values before passing to shader, centering camera at origin and displacing rest of scene by camera position
|
|
2154
2158
|
*/
|
|
2155
2159
|
get floatingOriginMode() {
|
|
2156
|
-
return this.
|
|
2160
|
+
return this._floatingOriginScene !== undefined;
|
|
2157
2161
|
}
|
|
2158
2162
|
/**
|
|
2159
2163
|
* @experimental
|
|
@@ -4322,6 +4326,8 @@ export class Scene {
|
|
|
4322
4326
|
if (this.onReadyObservable.hasObservers() && this._executeWhenReadyTimeoutId === null) {
|
|
4323
4327
|
this._checkIsReady();
|
|
4324
4328
|
}
|
|
4329
|
+
// Ensures that the floatingOriginOffset is grabbed from the correct scene
|
|
4330
|
+
FloatingOriginCurrentScene.getScene = this._getFloatingOriginScene;
|
|
4325
4331
|
this._frameId++;
|
|
4326
4332
|
this._defaultFrameBufferCleared = false;
|
|
4327
4333
|
this._checkCameraRenderTarget(this.activeCamera);
|
|
@@ -4596,6 +4602,12 @@ export class Scene {
|
|
|
4596
4602
|
if (index > -1) {
|
|
4597
4603
|
this._engine.scenes.splice(index, 1);
|
|
4598
4604
|
}
|
|
4605
|
+
this._floatingOriginScene = undefined;
|
|
4606
|
+
if (this._engine.scenes.length === 0) {
|
|
4607
|
+
// If this is the last scene to be disposed, reset matrix overrides
|
|
4608
|
+
// Cannot reset from within engine class due floatingOriginMatrixOverrides file import side effects
|
|
4609
|
+
ResetMatrixFunctions();
|
|
4610
|
+
}
|
|
4599
4611
|
if (EngineStore._LastCreatedScene === this) {
|
|
4600
4612
|
EngineStore._LastCreatedScene = null;
|
|
4601
4613
|
let engineIndex = EngineStore.Instances.length - 1;
|
|
@@ -4667,7 +4679,6 @@ export class Scene {
|
|
|
4667
4679
|
this.onClearColorChangedObservable.clear();
|
|
4668
4680
|
this.onEnvironmentTextureChangedObservable.clear();
|
|
4669
4681
|
this.onMeshUnderPointerUpdatedObservable.clear();
|
|
4670
|
-
ResetMatrixFunctions();
|
|
4671
4682
|
this._isDisposed = true;
|
|
4672
4683
|
}
|
|
4673
4684
|
_disposeList(items, callback) {
|