@babylonjs/core 6.41.2 → 6.43.0

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.
Files changed (37) hide show
  1. package/Cameras/arcRotateCamera.js +7 -1
  2. package/Cameras/arcRotateCamera.js.map +1 -1
  3. package/Culling/ray.d.ts +2 -2
  4. package/Culling/ray.js +3 -2
  5. package/Culling/ray.js.map +1 -1
  6. package/Engines/thinEngine.js +2 -2
  7. package/Engines/thinEngine.js.map +1 -1
  8. package/Materials/Node/Blocks/Fragment/heightToNormalBlock.js +1 -1
  9. package/Materials/Node/Blocks/Fragment/heightToNormalBlock.js.map +1 -1
  10. package/Maths/halton2DSequence.d.ts +47 -0
  11. package/Maths/halton2DSequence.js +80 -0
  12. package/Maths/halton2DSequence.js.map +1 -0
  13. package/Maths/index.d.ts +1 -0
  14. package/Maths/index.js +1 -0
  15. package/Maths/index.js.map +1 -1
  16. package/Meshes/GaussianSplatting/gaussianSplattingMesh.js +1 -1
  17. package/Meshes/GaussianSplatting/gaussianSplattingMesh.js.map +1 -1
  18. package/Meshes/mesh.js +10 -0
  19. package/Meshes/mesh.js.map +1 -1
  20. package/Meshes/trailMesh.js +24 -19
  21. package/Meshes/trailMesh.js.map +1 -1
  22. package/Physics/v2/Plugins/havokPlugin.d.ts +0 -1
  23. package/Physics/v2/Plugins/havokPlugin.js +3 -2
  24. package/Physics/v2/Plugins/havokPlugin.js.map +1 -1
  25. package/Physics/v2/physicsEngine.d.ts +1 -0
  26. package/Physics/v2/physicsEngine.js +1 -0
  27. package/Physics/v2/physicsEngine.js.map +1 -1
  28. package/PostProcesses/RenderPipeline/Pipelines/index.d.ts +1 -0
  29. package/PostProcesses/RenderPipeline/Pipelines/index.js +1 -0
  30. package/PostProcesses/RenderPipeline/Pipelines/index.js.map +1 -1
  31. package/PostProcesses/RenderPipeline/Pipelines/taaRenderingPipeline.d.ts +111 -0
  32. package/PostProcesses/RenderPipeline/Pipelines/taaRenderingPipeline.js +303 -0
  33. package/PostProcesses/RenderPipeline/Pipelines/taaRenderingPipeline.js.map +1 -0
  34. package/Shaders/taa.fragment.d.ts +5 -0
  35. package/Shaders/taa.fragment.js +10 -0
  36. package/Shaders/taa.fragment.js.map +1 -0
  37. package/package.json +1 -1
@@ -44,6 +44,7 @@ export declare class PhysicsEngine implements IPhysicsEngine {
44
44
  * Default is 1/60.
45
45
  * To slow it down, enter 1/600 for example.
46
46
  * To speed it up, 1/30
47
+ * Unit is seconds.
47
48
  * @param newTimeStep defines the new timestep to apply to this world.
48
49
  */
49
50
  setTimeStep(newTimeStep?: number): void;
@@ -48,6 +48,7 @@ export class PhysicsEngine {
48
48
  * Default is 1/60.
49
49
  * To slow it down, enter 1/600 for example.
50
50
  * To speed it up, 1/30
51
+ * Unit is seconds.
51
52
  * @param newTimeStep defines the new timestep to apply to this world.
52
53
  */
53
54
  setTimeStep(newTimeStep = 1 / 60) {
@@ -1 +1 @@
1
- {"version":3,"file":"physicsEngine.js","sourceRoot":"","sources":["../../../../../dev/core/src/Physics/v2/physicsEngine.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Nullable } from \"../../types\";\r\nimport { Vector3 } from \"../../Maths/math.vector\";\r\nimport type { IPhysicsEngine } from \"../IPhysicsEngine\";\r\nimport type { IPhysicsEnginePluginV2 } from \"./IPhysicsEnginePlugin\";\r\nimport type { IRaycastQuery } from \"../physicsRaycastResult\";\r\nimport { PhysicsRaycastResult } from \"../physicsRaycastResult\";\r\nimport { _WarnImport } from \"../../Misc/devTools\";\r\nimport type { PhysicsBody } from \"./physicsBody\";\r\n\r\n/**\r\n * Class used to control physics engine\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/physics/usingPhysicsEngine\r\n */\r\nexport class PhysicsEngine implements IPhysicsEngine {\r\n /** @internal */\r\n private _physicsBodies: Array<PhysicsBody> = [];\r\n private _subTimeStep: number = 0;\r\n\r\n /**\r\n * Gets the gravity vector used by the simulation\r\n */\r\n public gravity: Vector3;\r\n\r\n /**\r\n *\r\n * @returns physics plugin version\r\n */\r\n public getPluginVersion(): number {\r\n return this._physicsPlugin.getPluginVersion();\r\n }\r\n // eslint-disable-next-line jsdoc/require-returns-check\r\n /**\r\n * Factory used to create the default physics plugin.\r\n * @returns The default physics plugin\r\n */\r\n public static DefaultPluginFactory(): IPhysicsEnginePluginV2 {\r\n throw _WarnImport(\"\");\r\n }\r\n\r\n /**\r\n * Creates a new Physics Engine\r\n * @param gravity defines the gravity vector used by the simulation\r\n * @param _physicsPlugin defines the plugin to use (CannonJS by default)\r\n */\r\n constructor(\r\n gravity: Nullable<Vector3>,\r\n private _physicsPlugin: IPhysicsEnginePluginV2 = PhysicsEngine.DefaultPluginFactory()\r\n ) {\r\n gravity = gravity || new Vector3(0, -9.807, 0);\r\n this.setGravity(gravity);\r\n this.setTimeStep();\r\n }\r\n\r\n /**\r\n * Sets the gravity vector used by the simulation\r\n * @param gravity defines the gravity vector to use\r\n */\r\n public setGravity(gravity: Vector3): void {\r\n this.gravity = gravity;\r\n this._physicsPlugin.setGravity(this.gravity);\r\n }\r\n\r\n /**\r\n * Set the time step of the physics engine.\r\n * Default is 1/60.\r\n * To slow it down, enter 1/600 for example.\r\n * To speed it up, 1/30\r\n * @param newTimeStep defines the new timestep to apply to this world.\r\n */\r\n public setTimeStep(newTimeStep: number = 1 / 60) {\r\n this._physicsPlugin.setTimeStep(newTimeStep);\r\n }\r\n\r\n /**\r\n * Get the time step of the physics engine.\r\n * @returns the current time step\r\n */\r\n public getTimeStep(): number {\r\n return this._physicsPlugin.getTimeStep();\r\n }\r\n\r\n /**\r\n * Set the sub time step of the physics engine.\r\n * Default is 0 meaning there is no sub steps\r\n * To increase physics resolution precision, set a small value (like 1 ms)\r\n * @param subTimeStep defines the new sub timestep used for physics resolution.\r\n */\r\n public setSubTimeStep(subTimeStep: number = 0) {\r\n this._subTimeStep = subTimeStep;\r\n }\r\n\r\n /**\r\n * Get the sub time step of the physics engine.\r\n * @returns the current sub time step\r\n */\r\n public getSubTimeStep() {\r\n return this._subTimeStep;\r\n }\r\n\r\n /**\r\n * Release all resources\r\n */\r\n public dispose(): void {\r\n this._physicsPlugin.dispose();\r\n }\r\n\r\n /**\r\n * Gets the name of the current physics plugin\r\n * @returns the name of the plugin\r\n */\r\n public getPhysicsPluginName(): string {\r\n return this._physicsPlugin.name;\r\n }\r\n\r\n /**\r\n * Adding a new impostor for the impostor tracking.\r\n * This will be done by the impostor itself.\r\n * @param impostor the impostor to add\r\n */\r\n\r\n /**\r\n * Called by the scene. No need to call it.\r\n * @param delta defines the timespan between frames\r\n */\r\n public _step(delta: number) {\r\n if (delta > 0.1) {\r\n delta = 0.1;\r\n } else if (delta <= 0) {\r\n delta = 1.0 / 60.0;\r\n }\r\n\r\n this._physicsPlugin.executeStep(delta, this._physicsBodies);\r\n }\r\n\r\n /**\r\n * Add a body as an active component of this engine\r\n * @param physicsBody The body to add\r\n */\r\n public addBody(physicsBody: PhysicsBody): void {\r\n this._physicsBodies.push(physicsBody);\r\n }\r\n /**\r\n * Removes a particular body from this engine\r\n * @param physicsBody The body to remove from the simulation\r\n */\r\n public removeBody(physicsBody: PhysicsBody): void {\r\n const index = this._physicsBodies.indexOf(physicsBody);\r\n if (index > -1) {\r\n /*const removed =*/ this._physicsBodies.splice(index, 1);\r\n }\r\n }\r\n /**\r\n * @returns an array of bodies added to this engine\r\n */\r\n public getBodies(): Array<PhysicsBody> {\r\n return this._physicsBodies;\r\n }\r\n\r\n /**\r\n * Gets the current plugin used to run the simulation\r\n * @returns current plugin\r\n */\r\n public getPhysicsPlugin(): IPhysicsEnginePluginV2 {\r\n return this._physicsPlugin;\r\n }\r\n\r\n /**\r\n * Does a raycast in the physics world\r\n * @param from when should the ray start?\r\n * @param to when should the ray end?\r\n * @param result resulting PhysicsRaycastResult\r\n * @param query raycast query object\r\n */\r\n public raycastToRef(from: Vector3, to: Vector3, result: PhysicsRaycastResult, query?: IRaycastQuery): void {\r\n this._physicsPlugin.raycast(from, to, result, query);\r\n }\r\n\r\n /**\r\n * Does a raycast in the physics world\r\n * @param from when should the ray start?\r\n * @param to when should the ray end?\r\n * @param query raycast query object\r\n * @returns PhysicsRaycastResult\r\n */\r\n public raycast(from: Vector3, to: Vector3, query?: IRaycastQuery): PhysicsRaycastResult {\r\n const result = new PhysicsRaycastResult();\r\n this._physicsPlugin.raycast(from, to, result, query);\r\n return result;\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"physicsEngine.js","sourceRoot":"","sources":["../../../../../dev/core/src/Physics/v2/physicsEngine.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAIlD,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAGlD;;;GAGG;AACH,MAAM,OAAO,aAAa;IAUtB;;;OAGG;IACI,gBAAgB;QACnB,OAAO,IAAI,CAAC,cAAc,CAAC,gBAAgB,EAAE,CAAC;IAClD,CAAC;IACD,uDAAuD;IACvD;;;OAGG;IACI,MAAM,CAAC,oBAAoB;QAC9B,MAAM,WAAW,CAAC,EAAE,CAAC,CAAC;IAC1B,CAAC;IAED;;;;OAIG;IACH,YACI,OAA0B,EAClB,iBAAyC,aAAa,CAAC,oBAAoB,EAAE;QAA7E,mBAAc,GAAd,cAAc,CAA+D;QAhCzF,gBAAgB;QACR,mBAAc,GAAuB,EAAE,CAAC;QACxC,iBAAY,GAAW,CAAC,CAAC;QAgC7B,OAAO,GAAG,OAAO,IAAI,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QAC/C,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QACzB,IAAI,CAAC,WAAW,EAAE,CAAC;IACvB,CAAC;IAED;;;OAGG;IACI,UAAU,CAAC,OAAgB;QAC9B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACjD,CAAC;IAED;;;;;;;OAOG;IACI,WAAW,CAAC,cAAsB,CAAC,GAAG,EAAE;QAC3C,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;IACjD,CAAC;IAED;;;OAGG;IACI,WAAW;QACd,OAAO,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE,CAAC;IAC7C,CAAC;IAED;;;;;OAKG;IACI,cAAc,CAAC,cAAsB,CAAC;QACzC,IAAI,CAAC,YAAY,GAAG,WAAW,CAAC;IACpC,CAAC;IAED;;;OAGG;IACI,cAAc;QACjB,OAAO,IAAI,CAAC,YAAY,CAAC;IAC7B,CAAC;IAED;;OAEG;IACI,OAAO;QACV,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC;IAClC,CAAC;IAED;;;OAGG;IACI,oBAAoB;QACvB,OAAO,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC;IACpC,CAAC;IAED;;;;OAIG;IAEH;;;OAGG;IACI,KAAK,CAAC,KAAa;QACtB,IAAI,KAAK,GAAG,GAAG,EAAE;YACb,KAAK,GAAG,GAAG,CAAC;SACf;aAAM,IAAI,KAAK,IAAI,CAAC,EAAE;YACnB,KAAK,GAAG,GAAG,GAAG,IAAI,CAAC;SACtB;QAED,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;IAChE,CAAC;IAED;;;OAGG;IACI,OAAO,CAAC,WAAwB;QACnC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAC1C,CAAC;IACD;;;OAGG;IACI,UAAU,CAAC,WAAwB;QACtC,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QACvD,IAAI,KAAK,GAAG,CAAC,CAAC,EAAE;YACZ,mBAAmB,CAAC,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;SAC5D;IACL,CAAC;IACD;;OAEG;IACI,SAAS;QACZ,OAAO,IAAI,CAAC,cAAc,CAAC;IAC/B,CAAC;IAED;;;OAGG;IACI,gBAAgB;QACnB,OAAO,IAAI,CAAC,cAAc,CAAC;IAC/B,CAAC;IAED;;;;;;OAMG;IACI,YAAY,CAAC,IAAa,EAAE,EAAW,EAAE,MAA4B,EAAE,KAAqB;QAC/F,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;IACzD,CAAC;IAED;;;;;;OAMG;IACI,OAAO,CAAC,IAAa,EAAE,EAAW,EAAE,KAAqB;QAC5D,MAAM,MAAM,GAAG,IAAI,oBAAoB,EAAE,CAAC;QAC1C,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;QACrD,OAAO,MAAM,CAAC;IAClB,CAAC;CACJ","sourcesContent":["import type { Nullable } from \"../../types\";\r\nimport { Vector3 } from \"../../Maths/math.vector\";\r\nimport type { IPhysicsEngine } from \"../IPhysicsEngine\";\r\nimport type { IPhysicsEnginePluginV2 } from \"./IPhysicsEnginePlugin\";\r\nimport type { IRaycastQuery } from \"../physicsRaycastResult\";\r\nimport { PhysicsRaycastResult } from \"../physicsRaycastResult\";\r\nimport { _WarnImport } from \"../../Misc/devTools\";\r\nimport type { PhysicsBody } from \"./physicsBody\";\r\n\r\n/**\r\n * Class used to control physics engine\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/physics/usingPhysicsEngine\r\n */\r\nexport class PhysicsEngine implements IPhysicsEngine {\r\n /** @internal */\r\n private _physicsBodies: Array<PhysicsBody> = [];\r\n private _subTimeStep: number = 0;\r\n\r\n /**\r\n * Gets the gravity vector used by the simulation\r\n */\r\n public gravity: Vector3;\r\n\r\n /**\r\n *\r\n * @returns physics plugin version\r\n */\r\n public getPluginVersion(): number {\r\n return this._physicsPlugin.getPluginVersion();\r\n }\r\n // eslint-disable-next-line jsdoc/require-returns-check\r\n /**\r\n * Factory used to create the default physics plugin.\r\n * @returns The default physics plugin\r\n */\r\n public static DefaultPluginFactory(): IPhysicsEnginePluginV2 {\r\n throw _WarnImport(\"\");\r\n }\r\n\r\n /**\r\n * Creates a new Physics Engine\r\n * @param gravity defines the gravity vector used by the simulation\r\n * @param _physicsPlugin defines the plugin to use (CannonJS by default)\r\n */\r\n constructor(\r\n gravity: Nullable<Vector3>,\r\n private _physicsPlugin: IPhysicsEnginePluginV2 = PhysicsEngine.DefaultPluginFactory()\r\n ) {\r\n gravity = gravity || new Vector3(0, -9.807, 0);\r\n this.setGravity(gravity);\r\n this.setTimeStep();\r\n }\r\n\r\n /**\r\n * Sets the gravity vector used by the simulation\r\n * @param gravity defines the gravity vector to use\r\n */\r\n public setGravity(gravity: Vector3): void {\r\n this.gravity = gravity;\r\n this._physicsPlugin.setGravity(this.gravity);\r\n }\r\n\r\n /**\r\n * Set the time step of the physics engine.\r\n * Default is 1/60.\r\n * To slow it down, enter 1/600 for example.\r\n * To speed it up, 1/30\r\n * Unit is seconds.\r\n * @param newTimeStep defines the new timestep to apply to this world.\r\n */\r\n public setTimeStep(newTimeStep: number = 1 / 60) {\r\n this._physicsPlugin.setTimeStep(newTimeStep);\r\n }\r\n\r\n /**\r\n * Get the time step of the physics engine.\r\n * @returns the current time step\r\n */\r\n public getTimeStep(): number {\r\n return this._physicsPlugin.getTimeStep();\r\n }\r\n\r\n /**\r\n * Set the sub time step of the physics engine.\r\n * Default is 0 meaning there is no sub steps\r\n * To increase physics resolution precision, set a small value (like 1 ms)\r\n * @param subTimeStep defines the new sub timestep used for physics resolution.\r\n */\r\n public setSubTimeStep(subTimeStep: number = 0) {\r\n this._subTimeStep = subTimeStep;\r\n }\r\n\r\n /**\r\n * Get the sub time step of the physics engine.\r\n * @returns the current sub time step\r\n */\r\n public getSubTimeStep() {\r\n return this._subTimeStep;\r\n }\r\n\r\n /**\r\n * Release all resources\r\n */\r\n public dispose(): void {\r\n this._physicsPlugin.dispose();\r\n }\r\n\r\n /**\r\n * Gets the name of the current physics plugin\r\n * @returns the name of the plugin\r\n */\r\n public getPhysicsPluginName(): string {\r\n return this._physicsPlugin.name;\r\n }\r\n\r\n /**\r\n * Adding a new impostor for the impostor tracking.\r\n * This will be done by the impostor itself.\r\n * @param impostor the impostor to add\r\n */\r\n\r\n /**\r\n * Called by the scene. No need to call it.\r\n * @param delta defines the timespan between frames\r\n */\r\n public _step(delta: number) {\r\n if (delta > 0.1) {\r\n delta = 0.1;\r\n } else if (delta <= 0) {\r\n delta = 1.0 / 60.0;\r\n }\r\n\r\n this._physicsPlugin.executeStep(delta, this._physicsBodies);\r\n }\r\n\r\n /**\r\n * Add a body as an active component of this engine\r\n * @param physicsBody The body to add\r\n */\r\n public addBody(physicsBody: PhysicsBody): void {\r\n this._physicsBodies.push(physicsBody);\r\n }\r\n /**\r\n * Removes a particular body from this engine\r\n * @param physicsBody The body to remove from the simulation\r\n */\r\n public removeBody(physicsBody: PhysicsBody): void {\r\n const index = this._physicsBodies.indexOf(physicsBody);\r\n if (index > -1) {\r\n /*const removed =*/ this._physicsBodies.splice(index, 1);\r\n }\r\n }\r\n /**\r\n * @returns an array of bodies added to this engine\r\n */\r\n public getBodies(): Array<PhysicsBody> {\r\n return this._physicsBodies;\r\n }\r\n\r\n /**\r\n * Gets the current plugin used to run the simulation\r\n * @returns current plugin\r\n */\r\n public getPhysicsPlugin(): IPhysicsEnginePluginV2 {\r\n return this._physicsPlugin;\r\n }\r\n\r\n /**\r\n * Does a raycast in the physics world\r\n * @param from when should the ray start?\r\n * @param to when should the ray end?\r\n * @param result resulting PhysicsRaycastResult\r\n * @param query raycast query object\r\n */\r\n public raycastToRef(from: Vector3, to: Vector3, result: PhysicsRaycastResult, query?: IRaycastQuery): void {\r\n this._physicsPlugin.raycast(from, to, result, query);\r\n }\r\n\r\n /**\r\n * Does a raycast in the physics world\r\n * @param from when should the ray start?\r\n * @param to when should the ray end?\r\n * @param query raycast query object\r\n * @returns PhysicsRaycastResult\r\n */\r\n public raycast(from: Vector3, to: Vector3, query?: IRaycastQuery): PhysicsRaycastResult {\r\n const result = new PhysicsRaycastResult();\r\n this._physicsPlugin.raycast(from, to, result, query);\r\n return result;\r\n }\r\n}\r\n"]}
@@ -4,3 +4,4 @@ export * from "./ssao2RenderingPipeline";
4
4
  export * from "./ssaoRenderingPipeline";
5
5
  export * from "./standardRenderingPipeline";
6
6
  export * from "./ssrRenderingPipeline";
7
+ export * from "./taaRenderingPipeline";
@@ -4,4 +4,5 @@ export * from "./ssao2RenderingPipeline.js";
4
4
  export * from "./ssaoRenderingPipeline.js";
5
5
  export * from "./standardRenderingPipeline.js";
6
6
  export * from "./ssrRenderingPipeline.js";
7
+ export * from "./taaRenderingPipeline.js";
7
8
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../dev/core/src/PostProcesses/RenderPipeline/Pipelines/index.ts"],"names":[],"mappings":"AAAA,cAAc,4BAA4B,CAAC;AAC3C,cAAc,yBAAyB,CAAC;AACxC,cAAc,0BAA0B,CAAC;AACzC,cAAc,yBAAyB,CAAC;AACxC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,wBAAwB,CAAC","sourcesContent":["export * from \"./defaultRenderingPipeline\";\r\nexport * from \"./lensRenderingPipeline\";\r\nexport * from \"./ssao2RenderingPipeline\";\r\nexport * from \"./ssaoRenderingPipeline\";\r\nexport * from \"./standardRenderingPipeline\";\r\nexport * from \"./ssrRenderingPipeline\";\r\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../dev/core/src/PostProcesses/RenderPipeline/Pipelines/index.ts"],"names":[],"mappings":"AAAA,cAAc,4BAA4B,CAAC;AAC3C,cAAc,yBAAyB,CAAC;AACxC,cAAc,0BAA0B,CAAC;AACzC,cAAc,yBAAyB,CAAC;AACxC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,wBAAwB,CAAC;AACvC,cAAc,wBAAwB,CAAC","sourcesContent":["export * from \"./defaultRenderingPipeline\";\r\nexport * from \"./lensRenderingPipeline\";\r\nexport * from \"./ssao2RenderingPipeline\";\r\nexport * from \"./ssaoRenderingPipeline\";\r\nexport * from \"./standardRenderingPipeline\";\r\nexport * from \"./ssrRenderingPipeline\";\r\nexport * from \"./taaRenderingPipeline\";\r\n"]}
@@ -0,0 +1,111 @@
1
+ import { Camera } from "../../../Cameras/camera";
2
+ import { PostProcessRenderPipeline } from "../postProcessRenderPipeline";
3
+ import type { Scene } from "../../../scene";
4
+ import "../postProcessRenderPipelineManagerSceneComponent";
5
+ import "../../../Shaders/taa.fragment";
6
+ /**
7
+ * Simple implementation of Temporal Anti-Aliasing (TAA).
8
+ * This can be used to improve image quality for still pictures (screenshots for e.g.).
9
+ */
10
+ export declare class TAARenderingPipeline extends PostProcessRenderPipeline {
11
+ /**
12
+ * The TAA PostProcess effect id in the pipeline
13
+ */
14
+ TAARenderEffect: string;
15
+ /**
16
+ * The pass PostProcess effect id in the pipeline
17
+ */
18
+ TAAPassEffect: string;
19
+ private _samples;
20
+ /**
21
+ * Number of accumulated samples (default: 16)
22
+ */
23
+ set samples(samples: number);
24
+ get samples(): number;
25
+ private _msaaSamples;
26
+ /**
27
+ * MSAA samples (default: 1)
28
+ */
29
+ set msaaSamples(samples: number);
30
+ get msaaSamples(): number;
31
+ /**
32
+ * The factor used to blend the history frame with current frame (default: 0.05)
33
+ */
34
+ factor: number;
35
+ /**
36
+ * Disable TAA on camera move (default: true).
37
+ * You generally want to keep this enabled, otherwise you will get a ghost effect when the camera moves (but if it's what you want, go for it!)
38
+ */
39
+ disableOnCameraMove: boolean;
40
+ private _isEnabled;
41
+ /**
42
+ * Gets or sets a boolean indicating if the render pipeline is enabled (default: true).
43
+ */
44
+ get isEnabled(): boolean;
45
+ set isEnabled(value: boolean);
46
+ /**
47
+ * Gets active scene
48
+ */
49
+ get scene(): Scene;
50
+ private _scene;
51
+ private _isDirty;
52
+ private _camerasToBeAttached;
53
+ private _textureType;
54
+ private _taaPostProcess;
55
+ private _passPostProcess;
56
+ private _ping;
57
+ private _pong;
58
+ private _pingpong;
59
+ private _hs;
60
+ private _firstUpdate;
61
+ /**
62
+ * Returns true if TAA is supported by the running hardware
63
+ */
64
+ get isSupported(): boolean;
65
+ /**
66
+ * Constructor of the TAA rendering pipeline
67
+ * @param name The rendering pipeline name
68
+ * @param scene The scene linked to this pipeline
69
+ * @param cameras The array of cameras that the rendering pipeline will be attached to (default: scene.cameras)
70
+ * @param textureType The type of texture where the scene will be rendered (default: Constants.TEXTURETYPE_UNSIGNED_BYTE)
71
+ */
72
+ constructor(name: string, scene: Scene, cameras?: Camera[], textureType?: number);
73
+ /**
74
+ * Get the class name
75
+ * @returns "TAARenderingPipeline"
76
+ */
77
+ getClassName(): string;
78
+ /**
79
+ * Adds a camera to the pipeline
80
+ * @param camera the camera to be added
81
+ */
82
+ addCamera(camera: Camera): void;
83
+ /**
84
+ * Removes a camera from the pipeline
85
+ * @param camera the camera to remove
86
+ */
87
+ removeCamera(camera: Camera): void;
88
+ /**
89
+ * Removes the internal pipeline assets and detaches the pipeline from the scene cameras
90
+ */
91
+ dispose(): void;
92
+ private _createPingPongTextures;
93
+ private _updateEffectDefines;
94
+ private _buildPipeline;
95
+ private _disposePostProcesses;
96
+ private _createTAAPostProcess;
97
+ private _createPassPostProcess;
98
+ /**
99
+ * Serializes the rendering pipeline (Used when exporting)
100
+ * @returns the serialized object
101
+ */
102
+ serialize(): any;
103
+ /**
104
+ * Parse the serialized pipeline
105
+ * @param source Source pipeline.
106
+ * @param scene The scene to load the pipeline to.
107
+ * @param rootUrl The URL of the serialized pipeline.
108
+ * @returns An instantiated pipeline from the serialized object.
109
+ */
110
+ static Parse(source: any, scene: Scene, rootUrl: string): TAARenderingPipeline;
111
+ }
@@ -0,0 +1,303 @@
1
+ import { __decorate } from "../../../tslib.es6.js";
2
+ /* eslint-disable @typescript-eslint/naming-convention */
3
+ import { serialize, SerializationHelper } from "../../../Misc/decorators.js";
4
+ import { Camera } from "../../../Cameras/camera.js";
5
+ import { PostProcess } from "../../postProcess.js";
6
+ import { PostProcessRenderPipeline } from "../postProcessRenderPipeline.js";
7
+ import { PostProcessRenderEffect } from "../postProcessRenderEffect.js";
8
+ import { RegisterClass } from "../../../Misc/typeStore.js";
9
+
10
+ import { PassPostProcess } from "../../passPostProcess.js";
11
+ import { Halton2DSequence } from "../../../Maths/halton2DSequence.js";
12
+ import "../postProcessRenderPipelineManagerSceneComponent.js";
13
+ import "../../../Shaders/taa.fragment.js";
14
+ /**
15
+ * Simple implementation of Temporal Anti-Aliasing (TAA).
16
+ * This can be used to improve image quality for still pictures (screenshots for e.g.).
17
+ */
18
+ export class TAARenderingPipeline extends PostProcessRenderPipeline {
19
+ /**
20
+ * Number of accumulated samples (default: 16)
21
+ */
22
+ set samples(samples) {
23
+ if (this._samples === samples) {
24
+ return;
25
+ }
26
+ this._samples = samples;
27
+ this._hs.regenerate(samples);
28
+ }
29
+ get samples() {
30
+ return this._samples;
31
+ }
32
+ /**
33
+ * MSAA samples (default: 1)
34
+ */
35
+ set msaaSamples(samples) {
36
+ if (this._msaaSamples === samples) {
37
+ return;
38
+ }
39
+ this._msaaSamples = samples;
40
+ if (this._taaPostProcess) {
41
+ this._taaPostProcess.samples = samples;
42
+ }
43
+ }
44
+ get msaaSamples() {
45
+ return this._msaaSamples;
46
+ }
47
+ /**
48
+ * Gets or sets a boolean indicating if the render pipeline is enabled (default: true).
49
+ */
50
+ get isEnabled() {
51
+ return this._isEnabled;
52
+ }
53
+ set isEnabled(value) {
54
+ if (this._isEnabled === value) {
55
+ return;
56
+ }
57
+ this._isEnabled = value;
58
+ if (!value) {
59
+ if (this._cameras !== null) {
60
+ this._scene.postProcessRenderPipelineManager.detachCamerasFromRenderPipeline(this._name, this._cameras);
61
+ this._cameras = this._camerasToBeAttached.slice();
62
+ }
63
+ }
64
+ else if (value) {
65
+ if (!this._isDirty) {
66
+ if (this._cameras !== null) {
67
+ this._firstUpdate = true;
68
+ this._scene.postProcessRenderPipelineManager.attachCamerasToRenderPipeline(this._name, this._cameras);
69
+ }
70
+ }
71
+ else {
72
+ this._buildPipeline();
73
+ }
74
+ }
75
+ }
76
+ /**
77
+ * Gets active scene
78
+ */
79
+ get scene() {
80
+ return this._scene;
81
+ }
82
+ /**
83
+ * Returns true if TAA is supported by the running hardware
84
+ */
85
+ get isSupported() {
86
+ const caps = this._scene.getEngine().getCaps();
87
+ return caps.texelFetch;
88
+ }
89
+ /**
90
+ * Constructor of the TAA rendering pipeline
91
+ * @param name The rendering pipeline name
92
+ * @param scene The scene linked to this pipeline
93
+ * @param cameras The array of cameras that the rendering pipeline will be attached to (default: scene.cameras)
94
+ * @param textureType The type of texture where the scene will be rendered (default: 0)
95
+ */
96
+ constructor(name, scene, cameras, textureType = 0) {
97
+ const engine = scene.getEngine();
98
+ super(engine, name);
99
+ /**
100
+ * The TAA PostProcess effect id in the pipeline
101
+ */
102
+ this.TAARenderEffect = "TAARenderEffect";
103
+ /**
104
+ * The pass PostProcess effect id in the pipeline
105
+ */
106
+ this.TAAPassEffect = "TAAPassEffect";
107
+ this._samples = 8;
108
+ this._msaaSamples = 1;
109
+ /**
110
+ * The factor used to blend the history frame with current frame (default: 0.05)
111
+ */
112
+ this.factor = 0.05;
113
+ /**
114
+ * Disable TAA on camera move (default: true).
115
+ * You generally want to keep this enabled, otherwise you will get a ghost effect when the camera moves (but if it's what you want, go for it!)
116
+ */
117
+ this.disableOnCameraMove = true;
118
+ this._isEnabled = true;
119
+ this._isDirty = false;
120
+ this._camerasToBeAttached = [];
121
+ this._pingpong = 0;
122
+ this._firstUpdate = true;
123
+ this._cameras = cameras || scene.cameras;
124
+ this._cameras = this._cameras.slice();
125
+ this._camerasToBeAttached = this._cameras.slice();
126
+ this._scene = scene;
127
+ this._textureType = textureType;
128
+ this._hs = new Halton2DSequence(this.samples);
129
+ if (this.isSupported) {
130
+ this._createPingPongTextures(engine.getRenderWidth(), engine.getRenderHeight());
131
+ scene.postProcessRenderPipelineManager.addPipeline(this);
132
+ this._buildPipeline();
133
+ }
134
+ }
135
+ /**
136
+ * Get the class name
137
+ * @returns "TAARenderingPipeline"
138
+ */
139
+ getClassName() {
140
+ return "TAARenderingPipeline";
141
+ }
142
+ /**
143
+ * Adds a camera to the pipeline
144
+ * @param camera the camera to be added
145
+ */
146
+ addCamera(camera) {
147
+ this._camerasToBeAttached.push(camera);
148
+ this._buildPipeline();
149
+ }
150
+ /**
151
+ * Removes a camera from the pipeline
152
+ * @param camera the camera to remove
153
+ */
154
+ removeCamera(camera) {
155
+ const index = this._camerasToBeAttached.indexOf(camera);
156
+ this._camerasToBeAttached.splice(index, 1);
157
+ this._buildPipeline();
158
+ }
159
+ /**
160
+ * Removes the internal pipeline assets and detaches the pipeline from the scene cameras
161
+ */
162
+ dispose() {
163
+ this._disposePostProcesses();
164
+ this._scene.postProcessRenderPipelineManager.detachCamerasFromRenderPipeline(this._name, this._cameras);
165
+ this._ping.dispose();
166
+ this._pong.dispose();
167
+ super.dispose();
168
+ }
169
+ _createPingPongTextures(width, height) {
170
+ const engine = this._scene.getEngine();
171
+ this._ping?.dispose();
172
+ this._pong?.dispose();
173
+ this._ping = engine.createRenderTargetTexture({ width, height }, { generateMipMaps: false, generateDepthBuffer: false, type: 2, samplingMode: 1 });
174
+ this._pong = engine.createRenderTargetTexture({ width, height }, { generateMipMaps: false, generateDepthBuffer: false, type: 2, samplingMode: 1 });
175
+ this._hs.setDimensions(width / 2, height / 2);
176
+ this._firstUpdate = true;
177
+ }
178
+ _updateEffectDefines() {
179
+ const defines = [];
180
+ this._taaPostProcess?.updateEffect(defines.join("\n"));
181
+ }
182
+ _buildPipeline() {
183
+ if (!this.isSupported) {
184
+ return;
185
+ }
186
+ if (!this._isEnabled) {
187
+ this._isDirty = true;
188
+ return;
189
+ }
190
+ this._isDirty = false;
191
+ const engine = this._scene.getEngine();
192
+ this._disposePostProcesses();
193
+ if (this._cameras !== null) {
194
+ this._scene.postProcessRenderPipelineManager.detachCamerasFromRenderPipeline(this._name, this._cameras);
195
+ // get back cameras to be used to reattach pipeline
196
+ this._cameras = this._camerasToBeAttached.slice();
197
+ }
198
+ this._reset();
199
+ this._createTAAPostProcess();
200
+ this.addEffect(new PostProcessRenderEffect(engine, this.TAARenderEffect, () => {
201
+ return this._taaPostProcess;
202
+ }, true));
203
+ this._createPassPostProcess();
204
+ this.addEffect(new PostProcessRenderEffect(engine, this.TAAPassEffect, () => {
205
+ return this._passPostProcess;
206
+ }, true));
207
+ if (this._cameras !== null) {
208
+ this._scene.postProcessRenderPipelineManager.attachCamerasToRenderPipeline(this._name, this._cameras);
209
+ }
210
+ }
211
+ _disposePostProcesses() {
212
+ for (let i = 0; i < this._cameras.length; i++) {
213
+ const camera = this._cameras[i];
214
+ this._taaPostProcess?.dispose(camera);
215
+ this._passPostProcess?.dispose(camera);
216
+ camera.getProjectionMatrix(true); // recompute the projection matrix
217
+ }
218
+ this._taaPostProcess = null;
219
+ this._passPostProcess = null;
220
+ }
221
+ _createTAAPostProcess() {
222
+ this._taaPostProcess = new PostProcess("TAA", "taa", {
223
+ uniforms: ["factor"],
224
+ samplers: ["historySampler"],
225
+ size: 1.0,
226
+ engine: this._scene.getEngine(),
227
+ textureType: this._textureType,
228
+ });
229
+ this._taaPostProcess.samples = this._msaaSamples;
230
+ this._updateEffectDefines();
231
+ this._taaPostProcess.onActivateObservable.add(() => {
232
+ const camera = this._scene.activeCamera;
233
+ if (this._taaPostProcess?.width !== this._ping.width || this._taaPostProcess?.height !== this._ping.height) {
234
+ const engine = this._scene.getEngine();
235
+ this._createPingPongTextures(engine.getRenderWidth(), engine.getRenderHeight());
236
+ }
237
+ if (camera && !camera.hasMoved) {
238
+ if (camera.mode === Camera.PERSPECTIVE_CAMERA) {
239
+ const projMat = camera.getProjectionMatrix();
240
+ projMat.setRowFromFloats(2, this._hs.x, this._hs.y, projMat.m[10], projMat.m[11]);
241
+ }
242
+ else {
243
+ // We must force the update of the projection matrix so that m[12] and m[13] are recomputed, as we modified them the previous frame
244
+ const projMat = camera.getProjectionMatrix(true);
245
+ projMat.setRowFromFloats(3, this._hs.x + projMat.m[12], this._hs.y + projMat.m[13], projMat.m[14], projMat.m[15]);
246
+ }
247
+ }
248
+ if (this._passPostProcess) {
249
+ this._passPostProcess.inputTexture = this._pingpong ? this._ping : this._pong;
250
+ }
251
+ this._pingpong = this._pingpong ^ 1;
252
+ this._hs.next();
253
+ });
254
+ this._taaPostProcess.onApplyObservable.add((effect) => {
255
+ const camera = this._scene.activeCamera;
256
+ effect._bindTexture("historySampler", this._pingpong ? this._ping.texture : this._pong.texture);
257
+ effect.setFloat("factor", (camera?.hasMoved && this.disableOnCameraMove) || this._firstUpdate ? 1 : this.factor);
258
+ this._firstUpdate = false;
259
+ });
260
+ }
261
+ _createPassPostProcess() {
262
+ const engine = this._scene.getEngine();
263
+ this._passPostProcess = new PassPostProcess("TAAPass", 1, null, 1, engine);
264
+ this._passPostProcess.inputTexture = this._ping;
265
+ this._passPostProcess.autoClear = false;
266
+ }
267
+ /**
268
+ * Serializes the rendering pipeline (Used when exporting)
269
+ * @returns the serialized object
270
+ */
271
+ serialize() {
272
+ const serializationObject = SerializationHelper.Serialize(this);
273
+ serializationObject.customType = "TAARenderingPipeline";
274
+ return serializationObject;
275
+ }
276
+ /**
277
+ * Parse the serialized pipeline
278
+ * @param source Source pipeline.
279
+ * @param scene The scene to load the pipeline to.
280
+ * @param rootUrl The URL of the serialized pipeline.
281
+ * @returns An instantiated pipeline from the serialized object.
282
+ */
283
+ static Parse(source, scene, rootUrl) {
284
+ return SerializationHelper.Parse(() => new TAARenderingPipeline(source._name, scene, source._ratio), source, scene, rootUrl);
285
+ }
286
+ }
287
+ __decorate([
288
+ serialize("samples")
289
+ ], TAARenderingPipeline.prototype, "_samples", void 0);
290
+ __decorate([
291
+ serialize("msaaSamples")
292
+ ], TAARenderingPipeline.prototype, "_msaaSamples", void 0);
293
+ __decorate([
294
+ serialize()
295
+ ], TAARenderingPipeline.prototype, "factor", void 0);
296
+ __decorate([
297
+ serialize()
298
+ ], TAARenderingPipeline.prototype, "disableOnCameraMove", void 0);
299
+ __decorate([
300
+ serialize("isEnabled")
301
+ ], TAARenderingPipeline.prototype, "_isEnabled", void 0);
302
+ RegisterClass("BABYLON.TAARenderingPipeline", TAARenderingPipeline);
303
+ //# sourceMappingURL=taaRenderingPipeline.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"taaRenderingPipeline.js","sourceRoot":"","sources":["../../../../../../dev/core/src/PostProcesses/RenderPipeline/Pipelines/taaRenderingPipeline.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/naming-convention */\r\nimport { serialize, SerializationHelper } from \"../../../Misc/decorators\";\r\nimport { Camera } from \"../../../Cameras/camera\";\r\nimport type { Effect } from \"../../../Materials/effect\";\r\nimport { PostProcess } from \"../../postProcess\";\r\nimport { PostProcessRenderPipeline } from \"../postProcessRenderPipeline\";\r\nimport { PostProcessRenderEffect } from \"../postProcessRenderEffect\";\r\nimport type { Scene } from \"../../../scene\";\r\nimport { RegisterClass } from \"../../../Misc/typeStore\";\r\nimport { Constants } from \"../../../Engines/constants\";\r\nimport type { Nullable } from \"../../../types\";\r\nimport { PassPostProcess } from \"core/PostProcesses/passPostProcess\";\r\nimport type { RenderTargetWrapper } from \"core/Engines/renderTargetWrapper\";\r\nimport { Halton2DSequence } from \"core/Maths/halton2DSequence\";\r\n\r\nimport \"../postProcessRenderPipelineManagerSceneComponent\";\r\n\r\nimport \"../../../Shaders/taa.fragment\";\r\n\r\n/**\r\n * Simple implementation of Temporal Anti-Aliasing (TAA).\r\n * This can be used to improve image quality for still pictures (screenshots for e.g.).\r\n */\r\nexport class TAARenderingPipeline extends PostProcessRenderPipeline {\r\n /**\r\n * The TAA PostProcess effect id in the pipeline\r\n */\r\n public TAARenderEffect: string = \"TAARenderEffect\";\r\n /**\r\n * The pass PostProcess effect id in the pipeline\r\n */\r\n public TAAPassEffect: string = \"TAAPassEffect\";\r\n\r\n @serialize(\"samples\")\r\n private _samples = 8;\r\n /**\r\n * Number of accumulated samples (default: 16)\r\n */\r\n public set samples(samples: number) {\r\n if (this._samples === samples) {\r\n return;\r\n }\r\n\r\n this._samples = samples;\r\n this._hs.regenerate(samples);\r\n }\r\n\r\n public get samples(): number {\r\n return this._samples;\r\n }\r\n\r\n @serialize(\"msaaSamples\")\r\n private _msaaSamples = 1;\r\n /**\r\n * MSAA samples (default: 1)\r\n */\r\n public set msaaSamples(samples: number) {\r\n if (this._msaaSamples === samples) {\r\n return;\r\n }\r\n\r\n this._msaaSamples = samples;\r\n if (this._taaPostProcess) {\r\n this._taaPostProcess.samples = samples;\r\n }\r\n }\r\n\r\n public get msaaSamples(): number {\r\n return this._msaaSamples;\r\n }\r\n\r\n /**\r\n * The factor used to blend the history frame with current frame (default: 0.05)\r\n */\r\n @serialize()\r\n public factor = 0.05;\r\n\r\n /**\r\n * Disable TAA on camera move (default: true).\r\n * You generally want to keep this enabled, otherwise you will get a ghost effect when the camera moves (but if it's what you want, go for it!)\r\n */\r\n @serialize()\r\n public disableOnCameraMove = true;\r\n\r\n @serialize(\"isEnabled\")\r\n private _isEnabled = true;\r\n /**\r\n * Gets or sets a boolean indicating if the render pipeline is enabled (default: true).\r\n */\r\n public get isEnabled(): boolean {\r\n return this._isEnabled;\r\n }\r\n\r\n public set isEnabled(value: boolean) {\r\n if (this._isEnabled === value) {\r\n return;\r\n }\r\n\r\n this._isEnabled = value;\r\n\r\n if (!value) {\r\n if (this._cameras !== null) {\r\n this._scene.postProcessRenderPipelineManager.detachCamerasFromRenderPipeline(this._name, this._cameras);\r\n this._cameras = this._camerasToBeAttached.slice();\r\n }\r\n } else if (value) {\r\n if (!this._isDirty) {\r\n if (this._cameras !== null) {\r\n this._firstUpdate = true;\r\n this._scene.postProcessRenderPipelineManager.attachCamerasToRenderPipeline(this._name, this._cameras);\r\n }\r\n } else {\r\n this._buildPipeline();\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Gets active scene\r\n */\r\n public get scene(): Scene {\r\n return this._scene;\r\n }\r\n\r\n private _scene: Scene;\r\n private _isDirty = false;\r\n private _camerasToBeAttached: Array<Camera> = [];\r\n private _textureType: number;\r\n private _taaPostProcess: Nullable<PostProcess>;\r\n private _passPostProcess: Nullable<PassPostProcess>;\r\n private _ping: RenderTargetWrapper;\r\n private _pong: RenderTargetWrapper;\r\n private _pingpong = 0;\r\n private _hs: Halton2DSequence;\r\n private _firstUpdate = true;\r\n\r\n /**\r\n * Returns true if TAA is supported by the running hardware\r\n */\r\n public get isSupported(): boolean {\r\n const caps = this._scene.getEngine().getCaps();\r\n\r\n return caps.texelFetch;\r\n }\r\n\r\n /**\r\n * Constructor of the TAA rendering pipeline\r\n * @param name The rendering pipeline name\r\n * @param scene The scene linked to this pipeline\r\n * @param cameras The array of cameras that the rendering pipeline will be attached to (default: scene.cameras)\r\n * @param textureType The type of texture where the scene will be rendered (default: Constants.TEXTURETYPE_UNSIGNED_BYTE)\r\n */\r\n constructor(name: string, scene: Scene, cameras?: Camera[], textureType = Constants.TEXTURETYPE_UNSIGNED_BYTE) {\r\n const engine = scene.getEngine();\r\n\r\n super(engine, name);\r\n\r\n this._cameras = cameras || scene.cameras;\r\n this._cameras = this._cameras.slice();\r\n this._camerasToBeAttached = this._cameras.slice();\r\n\r\n this._scene = scene;\r\n this._textureType = textureType;\r\n this._hs = new Halton2DSequence(this.samples);\r\n\r\n if (this.isSupported) {\r\n this._createPingPongTextures(engine.getRenderWidth(), engine.getRenderHeight());\r\n\r\n scene.postProcessRenderPipelineManager.addPipeline(this);\r\n\r\n this._buildPipeline();\r\n }\r\n }\r\n\r\n /**\r\n * Get the class name\r\n * @returns \"TAARenderingPipeline\"\r\n */\r\n public getClassName(): string {\r\n return \"TAARenderingPipeline\";\r\n }\r\n\r\n /**\r\n * Adds a camera to the pipeline\r\n * @param camera the camera to be added\r\n */\r\n public addCamera(camera: Camera): void {\r\n this._camerasToBeAttached.push(camera);\r\n this._buildPipeline();\r\n }\r\n\r\n /**\r\n * Removes a camera from the pipeline\r\n * @param camera the camera to remove\r\n */\r\n public removeCamera(camera: Camera): void {\r\n const index = this._camerasToBeAttached.indexOf(camera);\r\n this._camerasToBeAttached.splice(index, 1);\r\n this._buildPipeline();\r\n }\r\n\r\n /**\r\n * Removes the internal pipeline assets and detaches the pipeline from the scene cameras\r\n */\r\n public dispose(): void {\r\n this._disposePostProcesses();\r\n\r\n this._scene.postProcessRenderPipelineManager.detachCamerasFromRenderPipeline(this._name, this._cameras);\r\n\r\n this._ping.dispose();\r\n this._pong.dispose();\r\n\r\n super.dispose();\r\n }\r\n\r\n private _createPingPongTextures(width: number, height: number) {\r\n const engine = this._scene.getEngine();\r\n\r\n this._ping?.dispose();\r\n this._pong?.dispose();\r\n\r\n this._ping = engine.createRenderTargetTexture(\r\n { width, height },\r\n { generateMipMaps: false, generateDepthBuffer: false, type: Constants.TEXTURETYPE_HALF_FLOAT, samplingMode: Constants.TEXTURE_NEAREST_NEAREST }\r\n );\r\n\r\n this._pong = engine.createRenderTargetTexture(\r\n { width, height },\r\n { generateMipMaps: false, generateDepthBuffer: false, type: Constants.TEXTURETYPE_HALF_FLOAT, samplingMode: Constants.TEXTURE_NEAREST_NEAREST }\r\n );\r\n\r\n this._hs.setDimensions(width / 2, height / 2);\r\n this._firstUpdate = true;\r\n }\r\n\r\n private _updateEffectDefines(): void {\r\n const defines: string[] = [];\r\n\r\n this._taaPostProcess?.updateEffect(defines.join(\"\\n\"));\r\n }\r\n\r\n private _buildPipeline() {\r\n if (!this.isSupported) {\r\n return;\r\n }\r\n\r\n if (!this._isEnabled) {\r\n this._isDirty = true;\r\n return;\r\n }\r\n\r\n this._isDirty = false;\r\n\r\n const engine = this._scene.getEngine();\r\n\r\n this._disposePostProcesses();\r\n if (this._cameras !== null) {\r\n this._scene.postProcessRenderPipelineManager.detachCamerasFromRenderPipeline(this._name, this._cameras);\r\n // get back cameras to be used to reattach pipeline\r\n this._cameras = this._camerasToBeAttached.slice();\r\n }\r\n this._reset();\r\n\r\n this._createTAAPostProcess();\r\n this.addEffect(\r\n new PostProcessRenderEffect(\r\n engine,\r\n this.TAARenderEffect,\r\n () => {\r\n return this._taaPostProcess;\r\n },\r\n true\r\n )\r\n );\r\n\r\n this._createPassPostProcess();\r\n this.addEffect(\r\n new PostProcessRenderEffect(\r\n engine,\r\n this.TAAPassEffect,\r\n () => {\r\n return this._passPostProcess;\r\n },\r\n true\r\n )\r\n );\r\n\r\n if (this._cameras !== null) {\r\n this._scene.postProcessRenderPipelineManager.attachCamerasToRenderPipeline(this._name, this._cameras);\r\n }\r\n }\r\n\r\n private _disposePostProcesses(): void {\r\n for (let i = 0; i < this._cameras.length; i++) {\r\n const camera = this._cameras[i];\r\n\r\n this._taaPostProcess?.dispose(camera);\r\n this._passPostProcess?.dispose(camera);\r\n\r\n camera.getProjectionMatrix(true); // recompute the projection matrix\r\n }\r\n\r\n this._taaPostProcess = null;\r\n this._passPostProcess = null;\r\n }\r\n\r\n private _createTAAPostProcess(): void {\r\n this._taaPostProcess = new PostProcess(\"TAA\", \"taa\", {\r\n uniforms: [\"factor\"],\r\n samplers: [\"historySampler\"],\r\n size: 1.0,\r\n engine: this._scene.getEngine(),\r\n textureType: this._textureType,\r\n });\r\n\r\n this._taaPostProcess.samples = this._msaaSamples;\r\n\r\n this._updateEffectDefines();\r\n\r\n this._taaPostProcess.onActivateObservable.add(() => {\r\n const camera = this._scene.activeCamera;\r\n\r\n if (this._taaPostProcess?.width !== this._ping.width || this._taaPostProcess?.height !== this._ping.height) {\r\n const engine = this._scene.getEngine();\r\n this._createPingPongTextures(engine.getRenderWidth(), engine.getRenderHeight());\r\n }\r\n\r\n if (camera && !camera.hasMoved) {\r\n if (camera.mode === Camera.PERSPECTIVE_CAMERA) {\r\n const projMat = camera.getProjectionMatrix();\r\n projMat.setRowFromFloats(2, this._hs.x, this._hs.y, projMat.m[10], projMat.m[11]);\r\n } else {\r\n // We must force the update of the projection matrix so that m[12] and m[13] are recomputed, as we modified them the previous frame\r\n const projMat = camera.getProjectionMatrix(true);\r\n projMat.setRowFromFloats(3, this._hs.x + projMat.m[12], this._hs.y + projMat.m[13], projMat.m[14], projMat.m[15]);\r\n }\r\n }\r\n\r\n if (this._passPostProcess) {\r\n this._passPostProcess.inputTexture = this._pingpong ? this._ping : this._pong;\r\n }\r\n this._pingpong = this._pingpong ^ 1;\r\n this._hs.next();\r\n });\r\n\r\n this._taaPostProcess.onApplyObservable.add((effect: Effect) => {\r\n const camera = this._scene.activeCamera;\r\n\r\n effect._bindTexture(\"historySampler\", this._pingpong ? this._ping.texture : this._pong.texture);\r\n effect.setFloat(\"factor\", (camera?.hasMoved && this.disableOnCameraMove) || this._firstUpdate ? 1 : this.factor);\r\n\r\n this._firstUpdate = false;\r\n });\r\n }\r\n\r\n private _createPassPostProcess() {\r\n const engine = this._scene.getEngine();\r\n\r\n this._passPostProcess = new PassPostProcess(\"TAAPass\", 1, null, Constants.TEXTURE_NEAREST_NEAREST, engine);\r\n this._passPostProcess.inputTexture = this._ping;\r\n this._passPostProcess.autoClear = false;\r\n }\r\n\r\n /**\r\n * Serializes the rendering pipeline (Used when exporting)\r\n * @returns the serialized object\r\n */\r\n public serialize(): any {\r\n const serializationObject = SerializationHelper.Serialize(this);\r\n serializationObject.customType = \"TAARenderingPipeline\";\r\n\r\n return serializationObject;\r\n }\r\n\r\n /**\r\n * Parse the serialized pipeline\r\n * @param source Source pipeline.\r\n * @param scene The scene to load the pipeline to.\r\n * @param rootUrl The URL of the serialized pipeline.\r\n * @returns An instantiated pipeline from the serialized object.\r\n */\r\n public static Parse(source: any, scene: Scene, rootUrl: string): TAARenderingPipeline {\r\n return SerializationHelper.Parse(() => new TAARenderingPipeline(source._name, scene, source._ratio), source, scene, rootUrl);\r\n }\r\n}\r\n\r\nRegisterClass(\"BABYLON.TAARenderingPipeline\", TAARenderingPipeline);\r\n"]}
@@ -0,0 +1,5 @@
1
+ /** @internal */
2
+ export declare const taaPixelShader: {
3
+ name: string;
4
+ shader: string;
5
+ };
@@ -0,0 +1,10 @@
1
+ // Do not edit.
2
+ import { ShaderStore } from "../Engines/shaderStore.js";
3
+ const name = "taaPixelShader";
4
+ const shader = `varying vec2 vUV;uniform sampler2D textureSampler;uniform sampler2D historySampler;uniform float factor;void main() {vec4 c=texelFetch(textureSampler,ivec2(gl_FragCoord.xy),0);vec4 h=texelFetch(historySampler,ivec2(gl_FragCoord.xy),0);gl_FragColor=mix(h,c,factor);}
5
+ `;
6
+ // Sideeffect
7
+ ShaderStore.ShadersStore[name] = shader;
8
+ /** @internal */
9
+ export const taaPixelShader = { name, shader };
10
+ //# sourceMappingURL=taa.fragment.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"taa.fragment.js","sourceRoot":"","sources":["../../../../dev/core/src/Shaders/taa.fragment.ts"],"names":[],"mappings":"AAAA,eAAe;AACf,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAErD,MAAM,IAAI,GAAG,gBAAgB,CAAC;AAC9B,MAAM,MAAM,GAAG;CACd,CAAC;AACF,aAAa;AACb,WAAW,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC;AACxC,gBAAgB;AAChB,MAAM,CAAC,MAAM,cAAc,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC","sourcesContent":["// Do not edit.\nimport { ShaderStore } from \"../Engines/shaderStore\";\n\nconst name = \"taaPixelShader\";\nconst shader = `varying vec2 vUV;uniform sampler2D textureSampler;uniform sampler2D historySampler;uniform float factor;void main() {vec4 c=texelFetch(textureSampler,ivec2(gl_FragCoord.xy),0);vec4 h=texelFetch(historySampler,ivec2(gl_FragCoord.xy),0);gl_FragColor=mix(h,c,factor);}\n`;\n// Sideeffect\nShaderStore.ShadersStore[name] = shader;\n/** @internal */\nexport const taaPixelShader = { name, shader };\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@babylonjs/core",
3
- "version": "6.41.2",
3
+ "version": "6.43.0",
4
4
  "main": "index.js",
5
5
  "module": "index.js",
6
6
  "types": "index.d.ts",