@babylonjs/core 8.34.1 → 8.35.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.
- package/Audio/audioSceneComponent.d.ts +9 -5
- package/Audio/audioSceneComponent.js +1 -0
- package/Audio/audioSceneComponent.js.map +1 -1
- package/AudioV2/abstractAudio/audioEngineV2.d.ts +10 -0
- package/AudioV2/abstractAudio/audioEngineV2.js +29 -0
- package/AudioV2/abstractAudio/audioEngineV2.js.map +1 -1
- package/AudioV2/webAudio/webAudioEngine.d.ts +5 -0
- package/AudioV2/webAudio/webAudioEngine.js +8 -0
- package/AudioV2/webAudio/webAudioEngine.js.map +1 -1
- package/AudioV2/webAudio/webAudioStaticSound.js +2 -2
- package/AudioV2/webAudio/webAudioStaticSound.js.map +1 -1
- package/AudioV2/webAudio/webAudioStreamingSound.js +2 -2
- package/AudioV2/webAudio/webAudioStreamingSound.js.map +1 -1
- package/Cameras/camera.d.ts +4 -0
- package/Cameras/camera.js +18 -9
- package/Cameras/camera.js.map +1 -1
- package/Engines/abstractEngine.js +2 -2
- package/Engines/abstractEngine.js.map +1 -1
- package/FrameGraph/Node/Blocks/PostProcesses/bloomPostProcessBlock.js +1 -1
- package/FrameGraph/Node/Blocks/PostProcesses/bloomPostProcessBlock.js.map +1 -1
- package/FrameGraph/Node/Blocks/PostProcesses/chromaticAberrationPostProcessBlock.js +1 -1
- package/FrameGraph/Node/Blocks/PostProcesses/chromaticAberrationPostProcessBlock.js.map +1 -1
- package/FrameGraph/Node/Blocks/computeShaderBlock.d.ts +42 -0
- package/FrameGraph/Node/Blocks/computeShaderBlock.js +74 -0
- package/FrameGraph/Node/Blocks/computeShaderBlock.js.map +1 -0
- package/FrameGraph/Node/Blocks/executeBlock.d.ts +11 -1
- package/FrameGraph/Node/Blocks/executeBlock.js +18 -0
- package/FrameGraph/Node/Blocks/executeBlock.js.map +1 -1
- package/FrameGraph/Node/Blocks/index.d.ts +1 -0
- package/FrameGraph/Node/Blocks/index.js +1 -0
- package/FrameGraph/Node/Blocks/index.js.map +1 -1
- package/FrameGraph/Node/Blocks/inputBlock.js +2 -0
- package/FrameGraph/Node/Blocks/inputBlock.js.map +1 -1
- package/FrameGraph/Node/Blocks/outputBlock.js +1 -0
- package/FrameGraph/Node/Blocks/outputBlock.js.map +1 -1
- package/FrameGraph/Node/nodeRenderGraph.d.ts +1 -1
- package/FrameGraph/Node/nodeRenderGraph.js +7 -3
- package/FrameGraph/Node/nodeRenderGraph.js.map +1 -1
- package/FrameGraph/Node/nodeRenderGraphBlock.js +7 -0
- package/FrameGraph/Node/nodeRenderGraphBlock.js.map +1 -1
- package/FrameGraph/Passes/pass.d.ts +11 -1
- package/FrameGraph/Passes/pass.js +11 -1
- package/FrameGraph/Passes/pass.js.map +1 -1
- package/FrameGraph/Tasks/Misc/computeShaderTask.d.ts +115 -0
- package/FrameGraph/Tasks/Misc/computeShaderTask.js +174 -0
- package/FrameGraph/Tasks/Misc/computeShaderTask.js.map +1 -0
- package/FrameGraph/Tasks/Misc/executeTask.d.ts +5 -0
- package/FrameGraph/Tasks/Misc/executeTask.js +3 -0
- package/FrameGraph/Tasks/Misc/executeTask.js.map +1 -1
- package/FrameGraph/Tasks/PostProcesses/bloomTask.d.ts +1 -1
- package/FrameGraph/Tasks/PostProcesses/bloomTask.js +1 -1
- package/FrameGraph/Tasks/PostProcesses/bloomTask.js.map +1 -1
- package/FrameGraph/frameGraph.d.ts +1 -1
- package/FrameGraph/frameGraph.js +3 -6
- package/FrameGraph/frameGraph.js.map +1 -1
- package/FrameGraph/frameGraphTask.d.ts +3 -2
- package/FrameGraph/frameGraphTask.js +5 -2
- package/FrameGraph/frameGraphTask.js.map +1 -1
- package/FrameGraph/frameGraphTextureManager.js +2 -2
- package/FrameGraph/frameGraphTextureManager.js.map +1 -1
- package/FrameGraph/index.d.ts +1 -0
- package/FrameGraph/index.js +1 -0
- package/FrameGraph/index.js.map +1 -1
- package/Lights/directionalLight.js +1 -4
- package/Lights/directionalLight.js.map +1 -1
- package/Lights/pointLight.js +2 -5
- package/Lights/pointLight.js.map +1 -1
- package/Materials/clipPlaneMaterialHelper.js +11 -1
- package/Materials/clipPlaneMaterialHelper.js.map +1 -1
- package/Materials/floatingOriginMatrixOverrides.d.ts +4 -1
- package/Materials/floatingOriginMatrixOverrides.js +14 -2
- package/Materials/floatingOriginMatrixOverrides.js.map +1 -1
- package/Materials/index.d.ts +1 -0
- package/Materials/index.js +1 -0
- package/Materials/index.js.map +1 -1
- package/Maths/math.like.d.ts +7 -2
- package/Maths/math.like.js.map +1 -1
- package/Maths/math.vector.functions.d.ts +57 -15
- package/Maths/math.vector.functions.js +77 -8
- package/Maths/math.vector.functions.js.map +1 -1
- package/Misc/decorators.d.ts +1 -1
- package/Misc/decorators.js.map +1 -1
- package/Misc/dumpTools.d.ts +20 -0
- package/Misc/dumpTools.js +60 -49
- package/Misc/dumpTools.js.map +1 -1
- package/Misc/index.d.ts +1 -2
- package/Misc/index.js +1 -2
- package/Misc/index.js.map +1 -1
- package/Particles/Node/Blocks/Emitters/boxShapeBlock.js +7 -7
- package/Particles/Node/Blocks/Emitters/boxShapeBlock.js.map +1 -1
- package/Particles/Node/Blocks/Emitters/createParticleBlock.d.ts +8 -0
- package/Particles/Node/Blocks/Emitters/createParticleBlock.js +25 -2
- package/Particles/Node/Blocks/Emitters/createParticleBlock.js.map +1 -1
- package/Particles/Node/Blocks/Emitters/customShapeBlock.js +7 -7
- package/Particles/Node/Blocks/Emitters/customShapeBlock.js.map +1 -1
- package/Particles/Node/Blocks/Emitters/cylinderShapeBlock.js +8 -8
- package/Particles/Node/Blocks/Emitters/cylinderShapeBlock.js.map +1 -1
- package/Particles/Node/Blocks/Emitters/meshShapeBlock.js +9 -9
- package/Particles/Node/Blocks/Emitters/meshShapeBlock.js.map +1 -1
- package/Particles/Node/Blocks/Emitters/pointShapeBlock.js +6 -6
- package/Particles/Node/Blocks/Emitters/pointShapeBlock.js.map +1 -1
- package/Particles/Node/Blocks/Emitters/sphereShapeBlock.js +7 -7
- package/Particles/Node/Blocks/Emitters/sphereShapeBlock.js.map +1 -1
- package/Particles/Node/Blocks/systemBlock.d.ts +32 -0
- package/Particles/Node/Blocks/systemBlock.js +76 -0
- package/Particles/Node/Blocks/systemBlock.js.map +1 -1
- package/Particles/Node/nodeParticleBuildState.d.ts +2 -7
- package/Particles/Node/nodeParticleBuildState.js +7 -22
- package/Particles/Node/nodeParticleBuildState.js.map +1 -1
- package/Particles/Node/nodeParticleSystemSet.helper.js +164 -56
- package/Particles/Node/nodeParticleSystemSet.helper.js.map +1 -1
- package/Particles/thinParticleSystem.js +1 -0
- package/Particles/thinParticleSystem.js.map +1 -1
- package/Physics/physicsRaycastResult.d.ts +3 -0
- package/Physics/physicsRaycastResult.js.map +1 -1
- package/Physics/v2/Plugins/havokPlugin.js +1 -1
- package/Physics/v2/Plugins/havokPlugin.js.map +1 -1
- package/PostProcesses/RenderPipeline/Pipelines/ssao2RenderingPipeline.js +1 -1
- package/PostProcesses/RenderPipeline/Pipelines/ssao2RenderingPipeline.js.map +1 -1
- package/PostProcesses/thinSSAO2PostProcess.js +9 -2
- package/PostProcesses/thinSSAO2PostProcess.js.map +1 -1
- package/package.json +1 -1
- package/scene.d.ts +7 -2
- package/scene.js +15 -8
- package/scene.js.map +1 -1
|
@@ -284,6 +284,7 @@ export class SSAO2RenderingPipeline extends PostProcessRenderPipeline {
|
|
|
284
284
|
this._originalColorPostProcess = new PassPostProcess("SSAOOriginalSceneColor", 1.0, null, Texture.BILINEAR_SAMPLINGMODE, scene.getEngine(), undefined, this._textureType);
|
|
285
285
|
this._originalColorPostProcess.onBeforeRenderObservable.add(() => {
|
|
286
286
|
const camera = this._scene.activeCamera;
|
|
287
|
+
this._thinSSAORenderingPipeline._ssaoPostProcess.camera = camera;
|
|
287
288
|
if (camera && this._currentCameraMode !== camera.mode) {
|
|
288
289
|
this._currentCameraMode = camera.mode;
|
|
289
290
|
this._thinSSAORenderingPipeline._ssaoPostProcess.updateEffect();
|
|
@@ -404,7 +405,6 @@ export class SSAO2RenderingPipeline extends PostProcessRenderPipeline {
|
|
|
404
405
|
});
|
|
405
406
|
this._ssaoPostProcess.autoClear = false;
|
|
406
407
|
this._ssaoPostProcess.onApply = (effect) => {
|
|
407
|
-
this._thinSSAORenderingPipeline._ssaoPostProcess.camera = this._scene.activeCamera;
|
|
408
408
|
if (this._geometryBufferRenderer) {
|
|
409
409
|
effect.setTexture("depthSampler", this._geometryBufferRenderer.getGBuffer().textures[0]);
|
|
410
410
|
effect.setTexture("normalSampler", this._geometryBufferRenderer.getGBuffer().textures[1]);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ssao2RenderingPipeline.js","sourceRoot":"","sources":["../../../../../../dev/core/src/PostProcesses/RenderPipeline/Pipelines/ssao2RenderingPipeline.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/naming-convention */\r\nimport { Logger } from \"../../../Misc/logger\";\r\nimport { serialize } from \"../../../Misc/decorators\";\r\nimport { SerializationHelper } from \"../../../Misc/decorators.serialization\";\r\nimport type { Camera } from \"../../../Cameras/camera\";\r\nimport type { Effect } from \"../../../Materials/effect\";\r\nimport { Texture } from \"../../../Materials/Textures/texture\";\r\nimport { PostProcess } from \"../../../PostProcesses/postProcess\";\r\nimport { PostProcessRenderPipeline } from \"../../../PostProcesses/RenderPipeline/postProcessRenderPipeline\";\r\nimport { PostProcessRenderEffect } from \"../../../PostProcesses/RenderPipeline/postProcessRenderEffect\";\r\nimport { PassPostProcess } from \"../../../PostProcesses/passPostProcess\";\r\nimport type { Scene } from \"../../../scene\";\r\nimport { RegisterClass } from \"../../../Misc/typeStore\";\r\nimport { EngineStore } from \"../../../Engines/engineStore\";\r\nimport { SSAO2Configuration } from \"../../../Rendering/ssao2Configuration\";\r\nimport type { PrePassRenderer } from \"../../../Rendering/prePassRenderer\";\r\nimport { GeometryBufferRenderer } from \"../../../Rendering/geometryBufferRenderer\";\r\nimport { Constants } from \"../../../Engines/constants\";\r\nimport type { Nullable } from \"../../../types\";\r\n\r\nimport \"../../../PostProcesses/RenderPipeline/postProcessRenderPipelineManagerSceneComponent\";\r\nimport { ThinSSAO2RenderingPipeline } from \"./thinSSAO2RenderingPipeline\";\r\nimport { ThinSSAO2PostProcess } from \"../../thinSSAO2PostProcess\";\r\nimport type { ISize } from \"../../../Maths/math.size\";\r\nimport { ThinSSAO2BlurPostProcess } from \"../../thinSSAO2BlurPostProcess\";\r\nimport { ThinSSAO2CombinePostProcess } from \"../../thinSSAO2CombinePostProcess\";\r\n\r\n/**\r\n * Render pipeline to produce ssao effect\r\n */\r\nexport class SSAO2RenderingPipeline extends PostProcessRenderPipeline {\r\n // Members\r\n\r\n /**\r\n * @ignore\r\n * The PassPostProcess id in the pipeline that contains the original scene color\r\n */\r\n public SSAOOriginalSceneColorEffect: string = \"SSAOOriginalSceneColorEffect\";\r\n /**\r\n * @ignore\r\n * The SSAO PostProcess id in the pipeline\r\n */\r\n public SSAORenderEffect: string = \"SSAORenderEffect\";\r\n /**\r\n * @ignore\r\n * The horizontal blur PostProcess id in the pipeline\r\n */\r\n public SSAOBlurHRenderEffect: string = \"SSAOBlurHRenderEffect\";\r\n /**\r\n * @ignore\r\n * The vertical blur PostProcess id in the pipeline\r\n */\r\n public SSAOBlurVRenderEffect: string = \"SSAOBlurVRenderEffect\";\r\n /**\r\n * @ignore\r\n * The PostProcess id in the pipeline that combines the SSAO-Blur output with the original scene color (SSAOOriginalSceneColorEffect)\r\n */\r\n public SSAOCombineRenderEffect: string = \"SSAOCombineRenderEffect\";\r\n\r\n private _thinSSAORenderingPipeline: ThinSSAO2RenderingPipeline;\r\n\r\n /**\r\n * The output strength of the SSAO post-process. Default value is 1.0.\r\n */\r\n @serialize()\r\n public get totalStrength() {\r\n return this._thinSSAORenderingPipeline.totalStrength;\r\n }\r\n\r\n public set totalStrength(value: number) {\r\n this._thinSSAORenderingPipeline.totalStrength = value;\r\n }\r\n\r\n /**\r\n * Maximum depth value to still render AO. A smooth falloff makes the dimming more natural, so there will be no abrupt shading change.\r\n */\r\n @serialize()\r\n public get maxZ() {\r\n return this._thinSSAORenderingPipeline.maxZ;\r\n }\r\n\r\n public set maxZ(value: number) {\r\n this._thinSSAORenderingPipeline.maxZ = value;\r\n }\r\n\r\n /**\r\n * In order to save performances, SSAO radius is clamped on close geometry. This ratio changes by how much.\r\n */\r\n @serialize()\r\n public get minZAspect() {\r\n return this._thinSSAORenderingPipeline.minZAspect;\r\n }\r\n\r\n public set minZAspect(value: number) {\r\n this._thinSSAORenderingPipeline.minZAspect = value;\r\n }\r\n\r\n /**\r\n * Used in SSAO calculations to compensate for accuracy issues with depth values. Default 0.02.\r\n *\r\n * Normally you do not need to change this value, but you can experiment with it if you get a lot of in false self-occlusion on flat surfaces when using fewer than 16 samples. Useful range is normally [0..0.1] but higher values is allowed.\r\n */\r\n @serialize(\"epsilon\")\r\n public set epsilon(n: number) {\r\n this._thinSSAORenderingPipeline.epsilon = n;\r\n }\r\n public get epsilon(): number {\r\n return this._thinSSAORenderingPipeline.epsilon;\r\n }\r\n\r\n /**\r\n * Number of samples used for the SSAO calculations. Default value is 8.\r\n */\r\n @serialize(\"samples\")\r\n public set samples(n: number) {\r\n this._thinSSAORenderingPipeline.samples = n;\r\n }\r\n public get samples(): number {\r\n return this._thinSSAORenderingPipeline.samples;\r\n }\r\n\r\n @serialize(\"textureSamples\")\r\n private _textureSamples: number = 1;\r\n /**\r\n * Number of samples to use for antialiasing.\r\n */\r\n public set textureSamples(n: number) {\r\n this._textureSamples = n;\r\n\r\n if (this._prePassRenderer) {\r\n this._prePassRenderer.samples = n;\r\n } else {\r\n this._originalColorPostProcess.samples = n;\r\n }\r\n }\r\n public get textureSamples(): number {\r\n return this._textureSamples;\r\n }\r\n\r\n private _forcedGeometryBuffer: Nullable<GeometryBufferRenderer> = null;\r\n /**\r\n * Force rendering the geometry through geometry buffer.\r\n */\r\n @serialize()\r\n private _forceGeometryBuffer: boolean = false;\r\n private get _geometryBufferRenderer(): Nullable<GeometryBufferRenderer> {\r\n if (!this._forceGeometryBuffer) {\r\n return null;\r\n }\r\n return this._forcedGeometryBuffer ?? this._scene.geometryBufferRenderer;\r\n }\r\n private get _prePassRenderer(): Nullable<PrePassRenderer> {\r\n if (this._forceGeometryBuffer) {\r\n return null;\r\n }\r\n return this._scene.prePassRenderer;\r\n }\r\n\r\n /**\r\n * Ratio object used for SSAO ratio and blur ratio\r\n */\r\n @serialize()\r\n private _ratio: any;\r\n\r\n /*\r\n * The texture type used by the different post processes created by SSAO\r\n */\r\n @serialize()\r\n private _textureType: number;\r\n\r\n /**\r\n * The radius around the analyzed pixel used by the SSAO post-process. Default value is 2.0\r\n */\r\n @serialize()\r\n public get radius() {\r\n return this._thinSSAORenderingPipeline.radius;\r\n }\r\n\r\n public set radius(value: number) {\r\n this._thinSSAORenderingPipeline.radius = value;\r\n }\r\n\r\n /**\r\n * The base color of the SSAO post-process\r\n * The final result is \"base + ssao\" between [0, 1]\r\n */\r\n @serialize()\r\n public get base() {\r\n return this._thinSSAORenderingPipeline.base;\r\n }\r\n\r\n public set base(value: number) {\r\n this._thinSSAORenderingPipeline.base = value;\r\n }\r\n\r\n /**\r\n * Skips the denoising (blur) stage of the SSAO calculations.\r\n *\r\n * Useful to temporarily set while experimenting with the other SSAO2 settings.\r\n */\r\n @serialize(\"bypassBlur\")\r\n public set bypassBlur(b: boolean) {\r\n this._thinSSAORenderingPipeline.bypassBlur = b;\r\n }\r\n public get bypassBlur(): boolean {\r\n return this._thinSSAORenderingPipeline.bypassBlur;\r\n }\r\n\r\n /**\r\n * Enables the configurable bilateral denoising (blurring) filter. Default is true.\r\n * Set to false to instead use a legacy bilateral filter that can't be configured.\r\n *\r\n * The denoising filter runs after the SSAO calculations and is a very important step. Both options results in a so called bilateral being used, but the \"expensive\" one can be\r\n * configured in several ways to fit your scene.\r\n */\r\n @serialize(\"expensiveBlur\")\r\n public set expensiveBlur(b: boolean) {\r\n this._thinSSAORenderingPipeline.expensiveBlur = b;\r\n }\r\n public get expensiveBlur(): boolean {\r\n return this._thinSSAORenderingPipeline.expensiveBlur;\r\n }\r\n\r\n /**\r\n * The number of samples the bilateral filter uses in both dimensions when denoising the SSAO calculations. Default value is 16.\r\n *\r\n * A higher value should result in smoother shadows but will use more processing time in the shaders.\r\n *\r\n * A high value can cause the shadows to get to blurry or create visible artifacts (bands) near sharp details in the geometry. The artifacts can sometimes be mitigated by increasing the bilateralSoften setting.\r\n */\r\n @serialize()\r\n public get bilateralSamples(): number {\r\n return this._thinSSAORenderingPipeline.bilateralSamples;\r\n }\r\n\r\n public set bilateralSamples(n: number) {\r\n this._thinSSAORenderingPipeline.bilateralSamples = n;\r\n }\r\n\r\n /**\r\n * Controls the shape of the denoising kernel used by the bilateral filter. Default value is 0.\r\n *\r\n * By default the bilateral filter acts like a box-filter, treating all samples on the same depth with equal weights. This is effective to maximize the denoising effect given a limited set of samples. However, it also often results in visible ghosting around sharp shadow regions and can spread out lines over large areas so they are no longer visible.\r\n *\r\n * Increasing this setting will make the filter pay less attention to samples further away from the center sample, reducing many artifacts but at the same time increasing noise.\r\n *\r\n * Useful value range is [0..1].\r\n */\r\n @serialize()\r\n public get bilateralSoften(): number {\r\n return this._thinSSAORenderingPipeline.bilateralSoften;\r\n }\r\n\r\n public set bilateralSoften(n: number) {\r\n this._thinSSAORenderingPipeline.bilateralSoften = n;\r\n }\r\n\r\n /**\r\n * How forgiving the bilateral denoiser should be when rejecting samples. Default value is 0.\r\n *\r\n * A higher value results in the bilateral filter being more forgiving and thus doing a better job at denoising slanted and curved surfaces, but can lead to shadows spreading out around corners or between objects that are close to each other depth wise.\r\n *\r\n * Useful value range is normally [0..1], but higher values are allowed.\r\n */\r\n @serialize()\r\n public get bilateralTolerance(): number {\r\n return this._thinSSAORenderingPipeline.bilateralTolerance;\r\n }\r\n\r\n public set bilateralTolerance(n: number) {\r\n this._thinSSAORenderingPipeline.bilateralTolerance = n;\r\n }\r\n\r\n /**\r\n * Support test.\r\n */\r\n public static get IsSupported(): boolean {\r\n const engine = EngineStore.LastCreatedEngine;\r\n if (!engine) {\r\n return false;\r\n }\r\n return engine._features.supportSSAO2;\r\n }\r\n\r\n /**\r\n * Indicates that the combine stage should use the current camera viewport to render the SSAO result on only a portion of the output texture (default: true).\r\n */\r\n public get useViewportInCombineStage() {\r\n return this._thinSSAORenderingPipeline.useViewportInCombineStage;\r\n }\r\n\r\n public set useViewportInCombineStage(b: boolean) {\r\n this._thinSSAORenderingPipeline.useViewportInCombineStage = b;\r\n }\r\n\r\n private _scene: Scene;\r\n private _originalColorPostProcess: PassPostProcess;\r\n private _ssaoPostProcess: PostProcess;\r\n private _blurHPostProcess: PostProcess;\r\n private _blurVPostProcess: PostProcess;\r\n private _ssaoCombinePostProcess: PostProcess;\r\n private _currentCameraMode = -1;\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 /**\r\n * Creates the SSAO2 rendering pipeline.\r\n * @param name The rendering pipeline name\r\n * @param scene The scene linked to this pipeline\r\n * @param ratio The size of the postprocesses. Can be a number shared between passes or an object for more precision: { ssaoRatio: 0.5, blurRatio: 1.0 }\r\n * @param cameras The array of cameras that the rendering pipeline will be attached to\r\n * @param forceGeometryBuffer Set to true if you want to use the legacy geometry buffer renderer. You can also pass an existing instance of GeometryBufferRenderer if you want to use your own geometry buffer renderer.\r\n * @param textureType The texture type used by the different post processes created by SSAO (default: Constants.TEXTURETYPE_UNSIGNED_BYTE)\r\n */\r\n constructor(\r\n name: string,\r\n scene: Scene,\r\n ratio: any,\r\n cameras?: Camera[],\r\n forceGeometryBuffer: boolean | GeometryBufferRenderer = false,\r\n textureType = Constants.TEXTURETYPE_UNSIGNED_BYTE\r\n ) {\r\n super(scene.getEngine(), name);\r\n\r\n this._thinSSAORenderingPipeline = new ThinSSAO2RenderingPipeline(name, scene);\r\n\r\n this._scene = scene;\r\n this._ratio = ratio;\r\n this._textureType = textureType;\r\n if (forceGeometryBuffer instanceof GeometryBufferRenderer) {\r\n this._forceGeometryBuffer = true;\r\n this._forcedGeometryBuffer = forceGeometryBuffer;\r\n } else {\r\n this._forceGeometryBuffer = forceGeometryBuffer;\r\n }\r\n\r\n if (!this.isSupported) {\r\n Logger.Error(\"The current engine does not support SSAO 2.\");\r\n return;\r\n }\r\n\r\n const ssaoRatio = this._ratio.ssaoRatio || ratio;\r\n const blurRatio = this._ratio.blurRatio || ratio;\r\n\r\n // Set up assets\r\n if (this._forceGeometryBuffer) {\r\n if (!this._forcedGeometryBuffer) {\r\n scene.enableGeometryBufferRenderer();\r\n }\r\n if (scene.geometryBufferRenderer?.generateNormalsInWorldSpace) {\r\n Logger.Error(\"SSAO2RenderingPipeline does not support generateNormalsInWorldSpace=true for the geometry buffer renderer!\");\r\n }\r\n } else {\r\n scene.enablePrePassRenderer();\r\n if (scene.prePassRenderer?.generateNormalsInWorldSpace) {\r\n Logger.Error(\"SSAO2RenderingPipeline does not support generateNormalsInWorldSpace=true for the prepass renderer!\");\r\n }\r\n }\r\n\r\n this._originalColorPostProcess = new PassPostProcess(\"SSAOOriginalSceneColor\", 1.0, null, Texture.BILINEAR_SAMPLINGMODE, scene.getEngine(), undefined, this._textureType);\r\n this._originalColorPostProcess.onBeforeRenderObservable.add(() => {\r\n const camera = this._scene.activeCamera;\r\n if (camera && this._currentCameraMode !== camera.mode) {\r\n this._currentCameraMode = camera.mode;\r\n this._thinSSAORenderingPipeline._ssaoPostProcess.updateEffect();\r\n }\r\n });\r\n this._originalColorPostProcess.samples = this.textureSamples;\r\n this._createSSAOPostProcess(1.0, textureType);\r\n this._createBlurPostProcess(ssaoRatio, blurRatio, this._textureType);\r\n this._createSSAOCombinePostProcess(blurRatio, this._textureType);\r\n\r\n // Set up pipeline\r\n this.addEffect(\r\n new PostProcessRenderEffect(\r\n scene.getEngine(),\r\n this.SSAOOriginalSceneColorEffect,\r\n () => {\r\n return this._originalColorPostProcess;\r\n },\r\n true\r\n )\r\n );\r\n this.addEffect(\r\n new PostProcessRenderEffect(\r\n scene.getEngine(),\r\n this.SSAORenderEffect,\r\n () => {\r\n return this._ssaoPostProcess;\r\n },\r\n true\r\n )\r\n );\r\n this.addEffect(\r\n new PostProcessRenderEffect(\r\n scene.getEngine(),\r\n this.SSAOBlurHRenderEffect,\r\n () => {\r\n return this._blurHPostProcess;\r\n },\r\n true\r\n )\r\n );\r\n this.addEffect(\r\n new PostProcessRenderEffect(\r\n scene.getEngine(),\r\n this.SSAOBlurVRenderEffect,\r\n () => {\r\n return this._blurVPostProcess;\r\n },\r\n true\r\n )\r\n );\r\n this.addEffect(\r\n new PostProcessRenderEffect(\r\n scene.getEngine(),\r\n this.SSAOCombineRenderEffect,\r\n () => {\r\n return this._ssaoCombinePostProcess;\r\n },\r\n true\r\n )\r\n );\r\n\r\n // Finish\r\n scene.postProcessRenderPipelineManager.addPipeline(this);\r\n if (cameras) {\r\n scene.postProcessRenderPipelineManager.attachCamerasToRenderPipeline(name, cameras);\r\n }\r\n }\r\n\r\n // Public Methods\r\n\r\n /**\r\n * Get the class name\r\n * @returns \"SSAO2RenderingPipeline\"\r\n */\r\n public override getClassName(): string {\r\n return \"SSAO2RenderingPipeline\";\r\n }\r\n\r\n /**\r\n * Removes the internal pipeline assets and detaches the pipeline from the scene cameras\r\n * @param disableGeometryBufferRenderer Set to true if you want to disable the Geometry Buffer renderer\r\n */\r\n public override dispose(disableGeometryBufferRenderer: boolean = false): void {\r\n for (let i = 0; i < this._scene.cameras.length; i++) {\r\n const camera = this._scene.cameras[i];\r\n\r\n this._originalColorPostProcess.dispose(camera);\r\n this._ssaoPostProcess.dispose(camera);\r\n this._blurHPostProcess.dispose(camera);\r\n this._blurVPostProcess.dispose(camera);\r\n this._ssaoCombinePostProcess.dispose(camera);\r\n }\r\n\r\n if (disableGeometryBufferRenderer && !this._forcedGeometryBuffer) {\r\n this._scene.disableGeometryBufferRenderer();\r\n }\r\n\r\n this._scene.postProcessRenderPipelineManager.detachCamerasFromRenderPipeline(this._name, this._scene.cameras);\r\n\r\n this._scene.postProcessRenderPipelineManager.removePipeline(this._name);\r\n\r\n this._thinSSAORenderingPipeline.dispose();\r\n\r\n super.dispose();\r\n }\r\n\r\n // Private Methods\r\n\r\n /** @internal */\r\n public override _rebuild() {\r\n super._rebuild();\r\n }\r\n\r\n private _createBlurPostProcess(ssaoRatio: number, blurRatio: number, textureType: number): void {\r\n this._blurHPostProcess = this._createBlurFilter(\"BlurH\", ssaoRatio, textureType, true);\r\n this._blurVPostProcess = this._createBlurFilter(\"BlurV\", blurRatio, textureType, false);\r\n }\r\n\r\n private _createBlurFilter(name: string, ratio: number, textureType: number, horizontal: boolean): PostProcess {\r\n const blurFilter = new PostProcess(name, ThinSSAO2BlurPostProcess.FragmentUrl, {\r\n size: ratio,\r\n samplingMode: Constants.TEXTURE_BILINEAR_SAMPLINGMODE,\r\n engine: this._scene.getEngine(),\r\n textureType: this._textureType,\r\n effectWrapper: horizontal ? this._thinSSAORenderingPipeline._ssaoBlurXPostProcess : this._thinSSAORenderingPipeline._ssaoBlurYPostProcess,\r\n });\r\n\r\n blurFilter.onApply = (effect: Effect) => {\r\n const ratio = this._ratio.blurRatio || this._ratio;\r\n const ssaoCombineSize = horizontal ? this._originalColorPostProcess.width * ratio : this._originalColorPostProcess.height * ratio;\r\n const originalColorSize = horizontal ? this._originalColorPostProcess.width : this._originalColorPostProcess.height;\r\n\r\n this._thinSSAORenderingPipeline._ssaoBlurXPostProcess.textureSize = ssaoCombineSize > 0 ? ssaoCombineSize : originalColorSize;\r\n this._thinSSAORenderingPipeline._ssaoBlurYPostProcess.textureSize = ssaoCombineSize > 0 ? ssaoCombineSize : originalColorSize;\r\n\r\n if (this._geometryBufferRenderer) {\r\n effect.setTexture(\"depthSampler\", this._geometryBufferRenderer.getGBuffer().textures[0]);\r\n } else if (this._prePassRenderer) {\r\n effect.setTexture(\"depthSampler\", this._prePassRenderer.getRenderTarget().textures[this._prePassRenderer.getIndex(Constants.PREPASS_DEPTH_TEXTURE_TYPE)]);\r\n }\r\n };\r\n\r\n blurFilter.samples = this.textureSamples;\r\n blurFilter.autoClear = false;\r\n return blurFilter;\r\n }\r\n\r\n private _getTextureSize() {\r\n const engine = this._scene.getEngine();\r\n const prePassRenderer = this._prePassRenderer;\r\n\r\n let textureSize: ISize = { width: engine.getRenderWidth(), height: engine.getRenderHeight() };\r\n\r\n if (prePassRenderer && this._scene.activeCamera?._getFirstPostProcess() === this._ssaoPostProcess) {\r\n const renderTarget = prePassRenderer.getRenderTarget();\r\n\r\n if (renderTarget && renderTarget.textures) {\r\n textureSize = renderTarget.textures[prePassRenderer.getIndex(Constants.PREPASS_COLOR_TEXTURE_TYPE)].getSize();\r\n }\r\n } else if (this._ssaoPostProcess.inputTexture) {\r\n textureSize.width = this._ssaoPostProcess.inputTexture.width;\r\n textureSize.height = this._ssaoPostProcess.inputTexture.height;\r\n }\r\n\r\n return textureSize;\r\n }\r\n\r\n private _createSSAOPostProcess(ratio: number, textureType: number): void {\r\n this._ssaoPostProcess = new PostProcess(\"ssao\", ThinSSAO2PostProcess.FragmentUrl, {\r\n size: ratio,\r\n samplingMode: Constants.TEXTURE_BILINEAR_SAMPLINGMODE,\r\n engine: this._scene.getEngine(),\r\n textureType,\r\n effectWrapper: this._thinSSAORenderingPipeline._ssaoPostProcess,\r\n });\r\n this._ssaoPostProcess.autoClear = false;\r\n\r\n this._ssaoPostProcess.onApply = (effect: Effect) => {\r\n this._thinSSAORenderingPipeline._ssaoPostProcess.camera = this._scene.activeCamera;\r\n\r\n if (this._geometryBufferRenderer) {\r\n effect.setTexture(\"depthSampler\", this._geometryBufferRenderer.getGBuffer().textures[0]);\r\n effect.setTexture(\"normalSampler\", this._geometryBufferRenderer.getGBuffer().textures[1]);\r\n } else if (this._prePassRenderer) {\r\n effect.setTexture(\"depthSampler\", this._prePassRenderer.getRenderTarget().textures[this._prePassRenderer.getIndex(Constants.PREPASS_DEPTH_TEXTURE_TYPE)]);\r\n effect.setTexture(\"normalSampler\", this._prePassRenderer.getRenderTarget().textures[this._prePassRenderer.getIndex(Constants.PREPASS_NORMAL_TEXTURE_TYPE)]);\r\n }\r\n\r\n const textureSize = this._getTextureSize();\r\n\r\n this._thinSSAORenderingPipeline._ssaoPostProcess.textureWidth = textureSize.width;\r\n this._thinSSAORenderingPipeline._ssaoPostProcess.textureHeight = textureSize.height;\r\n };\r\n this._ssaoPostProcess.samples = this.textureSamples;\r\n\r\n if (!this._forceGeometryBuffer) {\r\n this._ssaoPostProcess._prePassEffectConfiguration = new SSAO2Configuration();\r\n }\r\n }\r\n\r\n private _createSSAOCombinePostProcess(ratio: number, textureType: number): void {\r\n this._ssaoCombinePostProcess = new PostProcess(\"ssaoCombine\", ThinSSAO2CombinePostProcess.FragmentUrl, {\r\n size: ratio,\r\n samplingMode: Constants.TEXTURE_BILINEAR_SAMPLINGMODE,\r\n engine: this._scene.getEngine(),\r\n textureType,\r\n effectWrapper: this._thinSSAORenderingPipeline._ssaoCombinePostProcess,\r\n });\r\n\r\n this._ssaoCombinePostProcess.onApply = (effect: Effect) => {\r\n this._thinSSAORenderingPipeline._ssaoCombinePostProcess.camera = this._scene.activeCamera;\r\n\r\n effect.setTextureFromPostProcessOutput(\"originalColor\", this._originalColorPostProcess);\r\n };\r\n this._ssaoCombinePostProcess.autoClear = false;\r\n this._ssaoCombinePostProcess.samples = this.textureSamples;\r\n }\r\n\r\n /**\r\n * Serialize 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 = \"SSAO2RenderingPipeline\";\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): SSAO2RenderingPipeline {\r\n return SerializationHelper.Parse(\r\n () => new SSAO2RenderingPipeline(source._name, scene, source._ratio, undefined, source._forceGeometryBuffer, source._textureType),\r\n source,\r\n scene,\r\n rootUrl\r\n );\r\n }\r\n}\r\n\r\nRegisterClass(\"BABYLON.SSAO2RenderingPipeline\", SSAO2RenderingPipeline);\r\n"]}
|
|
1
|
+
{"version":3,"file":"ssao2RenderingPipeline.js","sourceRoot":"","sources":["../../../../../../dev/core/src/PostProcesses/RenderPipeline/Pipelines/ssao2RenderingPipeline.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/naming-convention */\r\nimport { Logger } from \"../../../Misc/logger\";\r\nimport { serialize } from \"../../../Misc/decorators\";\r\nimport { SerializationHelper } from \"../../../Misc/decorators.serialization\";\r\nimport type { Camera } from \"../../../Cameras/camera\";\r\nimport type { Effect } from \"../../../Materials/effect\";\r\nimport { Texture } from \"../../../Materials/Textures/texture\";\r\nimport { PostProcess } from \"../../../PostProcesses/postProcess\";\r\nimport { PostProcessRenderPipeline } from \"../../../PostProcesses/RenderPipeline/postProcessRenderPipeline\";\r\nimport { PostProcessRenderEffect } from \"../../../PostProcesses/RenderPipeline/postProcessRenderEffect\";\r\nimport { PassPostProcess } from \"../../../PostProcesses/passPostProcess\";\r\nimport type { Scene } from \"../../../scene\";\r\nimport { RegisterClass } from \"../../../Misc/typeStore\";\r\nimport { EngineStore } from \"../../../Engines/engineStore\";\r\nimport { SSAO2Configuration } from \"../../../Rendering/ssao2Configuration\";\r\nimport type { PrePassRenderer } from \"../../../Rendering/prePassRenderer\";\r\nimport { GeometryBufferRenderer } from \"../../../Rendering/geometryBufferRenderer\";\r\nimport { Constants } from \"../../../Engines/constants\";\r\nimport type { Nullable } from \"../../../types\";\r\n\r\nimport \"../../../PostProcesses/RenderPipeline/postProcessRenderPipelineManagerSceneComponent\";\r\nimport { ThinSSAO2RenderingPipeline } from \"./thinSSAO2RenderingPipeline\";\r\nimport { ThinSSAO2PostProcess } from \"../../thinSSAO2PostProcess\";\r\nimport type { ISize } from \"../../../Maths/math.size\";\r\nimport { ThinSSAO2BlurPostProcess } from \"../../thinSSAO2BlurPostProcess\";\r\nimport { ThinSSAO2CombinePostProcess } from \"../../thinSSAO2CombinePostProcess\";\r\n\r\n/**\r\n * Render pipeline to produce ssao effect\r\n */\r\nexport class SSAO2RenderingPipeline extends PostProcessRenderPipeline {\r\n // Members\r\n\r\n /**\r\n * @ignore\r\n * The PassPostProcess id in the pipeline that contains the original scene color\r\n */\r\n public SSAOOriginalSceneColorEffect: string = \"SSAOOriginalSceneColorEffect\";\r\n /**\r\n * @ignore\r\n * The SSAO PostProcess id in the pipeline\r\n */\r\n public SSAORenderEffect: string = \"SSAORenderEffect\";\r\n /**\r\n * @ignore\r\n * The horizontal blur PostProcess id in the pipeline\r\n */\r\n public SSAOBlurHRenderEffect: string = \"SSAOBlurHRenderEffect\";\r\n /**\r\n * @ignore\r\n * The vertical blur PostProcess id in the pipeline\r\n */\r\n public SSAOBlurVRenderEffect: string = \"SSAOBlurVRenderEffect\";\r\n /**\r\n * @ignore\r\n * The PostProcess id in the pipeline that combines the SSAO-Blur output with the original scene color (SSAOOriginalSceneColorEffect)\r\n */\r\n public SSAOCombineRenderEffect: string = \"SSAOCombineRenderEffect\";\r\n\r\n private _thinSSAORenderingPipeline: ThinSSAO2RenderingPipeline;\r\n\r\n /**\r\n * The output strength of the SSAO post-process. Default value is 1.0.\r\n */\r\n @serialize()\r\n public get totalStrength() {\r\n return this._thinSSAORenderingPipeline.totalStrength;\r\n }\r\n\r\n public set totalStrength(value: number) {\r\n this._thinSSAORenderingPipeline.totalStrength = value;\r\n }\r\n\r\n /**\r\n * Maximum depth value to still render AO. A smooth falloff makes the dimming more natural, so there will be no abrupt shading change.\r\n */\r\n @serialize()\r\n public get maxZ() {\r\n return this._thinSSAORenderingPipeline.maxZ;\r\n }\r\n\r\n public set maxZ(value: number) {\r\n this._thinSSAORenderingPipeline.maxZ = value;\r\n }\r\n\r\n /**\r\n * In order to save performances, SSAO radius is clamped on close geometry. This ratio changes by how much.\r\n */\r\n @serialize()\r\n public get minZAspect() {\r\n return this._thinSSAORenderingPipeline.minZAspect;\r\n }\r\n\r\n public set minZAspect(value: number) {\r\n this._thinSSAORenderingPipeline.minZAspect = value;\r\n }\r\n\r\n /**\r\n * Used in SSAO calculations to compensate for accuracy issues with depth values. Default 0.02.\r\n *\r\n * Normally you do not need to change this value, but you can experiment with it if you get a lot of in false self-occlusion on flat surfaces when using fewer than 16 samples. Useful range is normally [0..0.1] but higher values is allowed.\r\n */\r\n @serialize(\"epsilon\")\r\n public set epsilon(n: number) {\r\n this._thinSSAORenderingPipeline.epsilon = n;\r\n }\r\n public get epsilon(): number {\r\n return this._thinSSAORenderingPipeline.epsilon;\r\n }\r\n\r\n /**\r\n * Number of samples used for the SSAO calculations. Default value is 8.\r\n */\r\n @serialize(\"samples\")\r\n public set samples(n: number) {\r\n this._thinSSAORenderingPipeline.samples = n;\r\n }\r\n public get samples(): number {\r\n return this._thinSSAORenderingPipeline.samples;\r\n }\r\n\r\n @serialize(\"textureSamples\")\r\n private _textureSamples: number = 1;\r\n /**\r\n * Number of samples to use for antialiasing.\r\n */\r\n public set textureSamples(n: number) {\r\n this._textureSamples = n;\r\n\r\n if (this._prePassRenderer) {\r\n this._prePassRenderer.samples = n;\r\n } else {\r\n this._originalColorPostProcess.samples = n;\r\n }\r\n }\r\n public get textureSamples(): number {\r\n return this._textureSamples;\r\n }\r\n\r\n private _forcedGeometryBuffer: Nullable<GeometryBufferRenderer> = null;\r\n /**\r\n * Force rendering the geometry through geometry buffer.\r\n */\r\n @serialize()\r\n private _forceGeometryBuffer: boolean = false;\r\n private get _geometryBufferRenderer(): Nullable<GeometryBufferRenderer> {\r\n if (!this._forceGeometryBuffer) {\r\n return null;\r\n }\r\n return this._forcedGeometryBuffer ?? this._scene.geometryBufferRenderer;\r\n }\r\n private get _prePassRenderer(): Nullable<PrePassRenderer> {\r\n if (this._forceGeometryBuffer) {\r\n return null;\r\n }\r\n return this._scene.prePassRenderer;\r\n }\r\n\r\n /**\r\n * Ratio object used for SSAO ratio and blur ratio\r\n */\r\n @serialize()\r\n private _ratio: any;\r\n\r\n /*\r\n * The texture type used by the different post processes created by SSAO\r\n */\r\n @serialize()\r\n private _textureType: number;\r\n\r\n /**\r\n * The radius around the analyzed pixel used by the SSAO post-process. Default value is 2.0\r\n */\r\n @serialize()\r\n public get radius() {\r\n return this._thinSSAORenderingPipeline.radius;\r\n }\r\n\r\n public set radius(value: number) {\r\n this._thinSSAORenderingPipeline.radius = value;\r\n }\r\n\r\n /**\r\n * The base color of the SSAO post-process\r\n * The final result is \"base + ssao\" between [0, 1]\r\n */\r\n @serialize()\r\n public get base() {\r\n return this._thinSSAORenderingPipeline.base;\r\n }\r\n\r\n public set base(value: number) {\r\n this._thinSSAORenderingPipeline.base = value;\r\n }\r\n\r\n /**\r\n * Skips the denoising (blur) stage of the SSAO calculations.\r\n *\r\n * Useful to temporarily set while experimenting with the other SSAO2 settings.\r\n */\r\n @serialize(\"bypassBlur\")\r\n public set bypassBlur(b: boolean) {\r\n this._thinSSAORenderingPipeline.bypassBlur = b;\r\n }\r\n public get bypassBlur(): boolean {\r\n return this._thinSSAORenderingPipeline.bypassBlur;\r\n }\r\n\r\n /**\r\n * Enables the configurable bilateral denoising (blurring) filter. Default is true.\r\n * Set to false to instead use a legacy bilateral filter that can't be configured.\r\n *\r\n * The denoising filter runs after the SSAO calculations and is a very important step. Both options results in a so called bilateral being used, but the \"expensive\" one can be\r\n * configured in several ways to fit your scene.\r\n */\r\n @serialize(\"expensiveBlur\")\r\n public set expensiveBlur(b: boolean) {\r\n this._thinSSAORenderingPipeline.expensiveBlur = b;\r\n }\r\n public get expensiveBlur(): boolean {\r\n return this._thinSSAORenderingPipeline.expensiveBlur;\r\n }\r\n\r\n /**\r\n * The number of samples the bilateral filter uses in both dimensions when denoising the SSAO calculations. Default value is 16.\r\n *\r\n * A higher value should result in smoother shadows but will use more processing time in the shaders.\r\n *\r\n * A high value can cause the shadows to get to blurry or create visible artifacts (bands) near sharp details in the geometry. The artifacts can sometimes be mitigated by increasing the bilateralSoften setting.\r\n */\r\n @serialize()\r\n public get bilateralSamples(): number {\r\n return this._thinSSAORenderingPipeline.bilateralSamples;\r\n }\r\n\r\n public set bilateralSamples(n: number) {\r\n this._thinSSAORenderingPipeline.bilateralSamples = n;\r\n }\r\n\r\n /**\r\n * Controls the shape of the denoising kernel used by the bilateral filter. Default value is 0.\r\n *\r\n * By default the bilateral filter acts like a box-filter, treating all samples on the same depth with equal weights. This is effective to maximize the denoising effect given a limited set of samples. However, it also often results in visible ghosting around sharp shadow regions and can spread out lines over large areas so they are no longer visible.\r\n *\r\n * Increasing this setting will make the filter pay less attention to samples further away from the center sample, reducing many artifacts but at the same time increasing noise.\r\n *\r\n * Useful value range is [0..1].\r\n */\r\n @serialize()\r\n public get bilateralSoften(): number {\r\n return this._thinSSAORenderingPipeline.bilateralSoften;\r\n }\r\n\r\n public set bilateralSoften(n: number) {\r\n this._thinSSAORenderingPipeline.bilateralSoften = n;\r\n }\r\n\r\n /**\r\n * How forgiving the bilateral denoiser should be when rejecting samples. Default value is 0.\r\n *\r\n * A higher value results in the bilateral filter being more forgiving and thus doing a better job at denoising slanted and curved surfaces, but can lead to shadows spreading out around corners or between objects that are close to each other depth wise.\r\n *\r\n * Useful value range is normally [0..1], but higher values are allowed.\r\n */\r\n @serialize()\r\n public get bilateralTolerance(): number {\r\n return this._thinSSAORenderingPipeline.bilateralTolerance;\r\n }\r\n\r\n public set bilateralTolerance(n: number) {\r\n this._thinSSAORenderingPipeline.bilateralTolerance = n;\r\n }\r\n\r\n /**\r\n * Support test.\r\n */\r\n public static get IsSupported(): boolean {\r\n const engine = EngineStore.LastCreatedEngine;\r\n if (!engine) {\r\n return false;\r\n }\r\n return engine._features.supportSSAO2;\r\n }\r\n\r\n /**\r\n * Indicates that the combine stage should use the current camera viewport to render the SSAO result on only a portion of the output texture (default: true).\r\n */\r\n public get useViewportInCombineStage() {\r\n return this._thinSSAORenderingPipeline.useViewportInCombineStage;\r\n }\r\n\r\n public set useViewportInCombineStage(b: boolean) {\r\n this._thinSSAORenderingPipeline.useViewportInCombineStage = b;\r\n }\r\n\r\n private _scene: Scene;\r\n private _originalColorPostProcess: PassPostProcess;\r\n private _ssaoPostProcess: PostProcess;\r\n private _blurHPostProcess: PostProcess;\r\n private _blurVPostProcess: PostProcess;\r\n private _ssaoCombinePostProcess: PostProcess;\r\n private _currentCameraMode = -1;\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 /**\r\n * Creates the SSAO2 rendering pipeline.\r\n * @param name The rendering pipeline name\r\n * @param scene The scene linked to this pipeline\r\n * @param ratio The size of the postprocesses. Can be a number shared between passes or an object for more precision: { ssaoRatio: 0.5, blurRatio: 1.0 }\r\n * @param cameras The array of cameras that the rendering pipeline will be attached to\r\n * @param forceGeometryBuffer Set to true if you want to use the legacy geometry buffer renderer. You can also pass an existing instance of GeometryBufferRenderer if you want to use your own geometry buffer renderer.\r\n * @param textureType The texture type used by the different post processes created by SSAO (default: Constants.TEXTURETYPE_UNSIGNED_BYTE)\r\n */\r\n constructor(\r\n name: string,\r\n scene: Scene,\r\n ratio: any,\r\n cameras?: Camera[],\r\n forceGeometryBuffer: boolean | GeometryBufferRenderer = false,\r\n textureType = Constants.TEXTURETYPE_UNSIGNED_BYTE\r\n ) {\r\n super(scene.getEngine(), name);\r\n\r\n this._thinSSAORenderingPipeline = new ThinSSAO2RenderingPipeline(name, scene);\r\n\r\n this._scene = scene;\r\n this._ratio = ratio;\r\n this._textureType = textureType;\r\n if (forceGeometryBuffer instanceof GeometryBufferRenderer) {\r\n this._forceGeometryBuffer = true;\r\n this._forcedGeometryBuffer = forceGeometryBuffer;\r\n } else {\r\n this._forceGeometryBuffer = forceGeometryBuffer;\r\n }\r\n\r\n if (!this.isSupported) {\r\n Logger.Error(\"The current engine does not support SSAO 2.\");\r\n return;\r\n }\r\n\r\n const ssaoRatio = this._ratio.ssaoRatio || ratio;\r\n const blurRatio = this._ratio.blurRatio || ratio;\r\n\r\n // Set up assets\r\n if (this._forceGeometryBuffer) {\r\n if (!this._forcedGeometryBuffer) {\r\n scene.enableGeometryBufferRenderer();\r\n }\r\n if (scene.geometryBufferRenderer?.generateNormalsInWorldSpace) {\r\n Logger.Error(\"SSAO2RenderingPipeline does not support generateNormalsInWorldSpace=true for the geometry buffer renderer!\");\r\n }\r\n } else {\r\n scene.enablePrePassRenderer();\r\n if (scene.prePassRenderer?.generateNormalsInWorldSpace) {\r\n Logger.Error(\"SSAO2RenderingPipeline does not support generateNormalsInWorldSpace=true for the prepass renderer!\");\r\n }\r\n }\r\n\r\n this._originalColorPostProcess = new PassPostProcess(\"SSAOOriginalSceneColor\", 1.0, null, Texture.BILINEAR_SAMPLINGMODE, scene.getEngine(), undefined, this._textureType);\r\n this._originalColorPostProcess.onBeforeRenderObservable.add(() => {\r\n const camera = this._scene.activeCamera;\r\n this._thinSSAORenderingPipeline._ssaoPostProcess.camera = camera;\r\n if (camera && this._currentCameraMode !== camera.mode) {\r\n this._currentCameraMode = camera.mode;\r\n this._thinSSAORenderingPipeline._ssaoPostProcess.updateEffect();\r\n }\r\n });\r\n this._originalColorPostProcess.samples = this.textureSamples;\r\n this._createSSAOPostProcess(1.0, textureType);\r\n this._createBlurPostProcess(ssaoRatio, blurRatio, this._textureType);\r\n this._createSSAOCombinePostProcess(blurRatio, this._textureType);\r\n\r\n // Set up pipeline\r\n this.addEffect(\r\n new PostProcessRenderEffect(\r\n scene.getEngine(),\r\n this.SSAOOriginalSceneColorEffect,\r\n () => {\r\n return this._originalColorPostProcess;\r\n },\r\n true\r\n )\r\n );\r\n this.addEffect(\r\n new PostProcessRenderEffect(\r\n scene.getEngine(),\r\n this.SSAORenderEffect,\r\n () => {\r\n return this._ssaoPostProcess;\r\n },\r\n true\r\n )\r\n );\r\n this.addEffect(\r\n new PostProcessRenderEffect(\r\n scene.getEngine(),\r\n this.SSAOBlurHRenderEffect,\r\n () => {\r\n return this._blurHPostProcess;\r\n },\r\n true\r\n )\r\n );\r\n this.addEffect(\r\n new PostProcessRenderEffect(\r\n scene.getEngine(),\r\n this.SSAOBlurVRenderEffect,\r\n () => {\r\n return this._blurVPostProcess;\r\n },\r\n true\r\n )\r\n );\r\n this.addEffect(\r\n new PostProcessRenderEffect(\r\n scene.getEngine(),\r\n this.SSAOCombineRenderEffect,\r\n () => {\r\n return this._ssaoCombinePostProcess;\r\n },\r\n true\r\n )\r\n );\r\n\r\n // Finish\r\n scene.postProcessRenderPipelineManager.addPipeline(this);\r\n if (cameras) {\r\n scene.postProcessRenderPipelineManager.attachCamerasToRenderPipeline(name, cameras);\r\n }\r\n }\r\n\r\n // Public Methods\r\n\r\n /**\r\n * Get the class name\r\n * @returns \"SSAO2RenderingPipeline\"\r\n */\r\n public override getClassName(): string {\r\n return \"SSAO2RenderingPipeline\";\r\n }\r\n\r\n /**\r\n * Removes the internal pipeline assets and detaches the pipeline from the scene cameras\r\n * @param disableGeometryBufferRenderer Set to true if you want to disable the Geometry Buffer renderer\r\n */\r\n public override dispose(disableGeometryBufferRenderer: boolean = false): void {\r\n for (let i = 0; i < this._scene.cameras.length; i++) {\r\n const camera = this._scene.cameras[i];\r\n\r\n this._originalColorPostProcess.dispose(camera);\r\n this._ssaoPostProcess.dispose(camera);\r\n this._blurHPostProcess.dispose(camera);\r\n this._blurVPostProcess.dispose(camera);\r\n this._ssaoCombinePostProcess.dispose(camera);\r\n }\r\n\r\n if (disableGeometryBufferRenderer && !this._forcedGeometryBuffer) {\r\n this._scene.disableGeometryBufferRenderer();\r\n }\r\n\r\n this._scene.postProcessRenderPipelineManager.detachCamerasFromRenderPipeline(this._name, this._scene.cameras);\r\n\r\n this._scene.postProcessRenderPipelineManager.removePipeline(this._name);\r\n\r\n this._thinSSAORenderingPipeline.dispose();\r\n\r\n super.dispose();\r\n }\r\n\r\n // Private Methods\r\n\r\n /** @internal */\r\n public override _rebuild() {\r\n super._rebuild();\r\n }\r\n\r\n private _createBlurPostProcess(ssaoRatio: number, blurRatio: number, textureType: number): void {\r\n this._blurHPostProcess = this._createBlurFilter(\"BlurH\", ssaoRatio, textureType, true);\r\n this._blurVPostProcess = this._createBlurFilter(\"BlurV\", blurRatio, textureType, false);\r\n }\r\n\r\n private _createBlurFilter(name: string, ratio: number, textureType: number, horizontal: boolean): PostProcess {\r\n const blurFilter = new PostProcess(name, ThinSSAO2BlurPostProcess.FragmentUrl, {\r\n size: ratio,\r\n samplingMode: Constants.TEXTURE_BILINEAR_SAMPLINGMODE,\r\n engine: this._scene.getEngine(),\r\n textureType: this._textureType,\r\n effectWrapper: horizontal ? this._thinSSAORenderingPipeline._ssaoBlurXPostProcess : this._thinSSAORenderingPipeline._ssaoBlurYPostProcess,\r\n });\r\n\r\n blurFilter.onApply = (effect: Effect) => {\r\n const ratio = this._ratio.blurRatio || this._ratio;\r\n const ssaoCombineSize = horizontal ? this._originalColorPostProcess.width * ratio : this._originalColorPostProcess.height * ratio;\r\n const originalColorSize = horizontal ? this._originalColorPostProcess.width : this._originalColorPostProcess.height;\r\n\r\n this._thinSSAORenderingPipeline._ssaoBlurXPostProcess.textureSize = ssaoCombineSize > 0 ? ssaoCombineSize : originalColorSize;\r\n this._thinSSAORenderingPipeline._ssaoBlurYPostProcess.textureSize = ssaoCombineSize > 0 ? ssaoCombineSize : originalColorSize;\r\n\r\n if (this._geometryBufferRenderer) {\r\n effect.setTexture(\"depthSampler\", this._geometryBufferRenderer.getGBuffer().textures[0]);\r\n } else if (this._prePassRenderer) {\r\n effect.setTexture(\"depthSampler\", this._prePassRenderer.getRenderTarget().textures[this._prePassRenderer.getIndex(Constants.PREPASS_DEPTH_TEXTURE_TYPE)]);\r\n }\r\n };\r\n\r\n blurFilter.samples = this.textureSamples;\r\n blurFilter.autoClear = false;\r\n return blurFilter;\r\n }\r\n\r\n private _getTextureSize() {\r\n const engine = this._scene.getEngine();\r\n const prePassRenderer = this._prePassRenderer;\r\n\r\n let textureSize: ISize = { width: engine.getRenderWidth(), height: engine.getRenderHeight() };\r\n\r\n if (prePassRenderer && this._scene.activeCamera?._getFirstPostProcess() === this._ssaoPostProcess) {\r\n const renderTarget = prePassRenderer.getRenderTarget();\r\n\r\n if (renderTarget && renderTarget.textures) {\r\n textureSize = renderTarget.textures[prePassRenderer.getIndex(Constants.PREPASS_COLOR_TEXTURE_TYPE)].getSize();\r\n }\r\n } else if (this._ssaoPostProcess.inputTexture) {\r\n textureSize.width = this._ssaoPostProcess.inputTexture.width;\r\n textureSize.height = this._ssaoPostProcess.inputTexture.height;\r\n }\r\n\r\n return textureSize;\r\n }\r\n\r\n private _createSSAOPostProcess(ratio: number, textureType: number): void {\r\n this._ssaoPostProcess = new PostProcess(\"ssao\", ThinSSAO2PostProcess.FragmentUrl, {\r\n size: ratio,\r\n samplingMode: Constants.TEXTURE_BILINEAR_SAMPLINGMODE,\r\n engine: this._scene.getEngine(),\r\n textureType,\r\n effectWrapper: this._thinSSAORenderingPipeline._ssaoPostProcess,\r\n });\r\n this._ssaoPostProcess.autoClear = false;\r\n\r\n this._ssaoPostProcess.onApply = (effect: Effect) => {\r\n if (this._geometryBufferRenderer) {\r\n effect.setTexture(\"depthSampler\", this._geometryBufferRenderer.getGBuffer().textures[0]);\r\n effect.setTexture(\"normalSampler\", this._geometryBufferRenderer.getGBuffer().textures[1]);\r\n } else if (this._prePassRenderer) {\r\n effect.setTexture(\"depthSampler\", this._prePassRenderer.getRenderTarget().textures[this._prePassRenderer.getIndex(Constants.PREPASS_DEPTH_TEXTURE_TYPE)]);\r\n effect.setTexture(\"normalSampler\", this._prePassRenderer.getRenderTarget().textures[this._prePassRenderer.getIndex(Constants.PREPASS_NORMAL_TEXTURE_TYPE)]);\r\n }\r\n\r\n const textureSize = this._getTextureSize();\r\n\r\n this._thinSSAORenderingPipeline._ssaoPostProcess.textureWidth = textureSize.width;\r\n this._thinSSAORenderingPipeline._ssaoPostProcess.textureHeight = textureSize.height;\r\n };\r\n this._ssaoPostProcess.samples = this.textureSamples;\r\n\r\n if (!this._forceGeometryBuffer) {\r\n this._ssaoPostProcess._prePassEffectConfiguration = new SSAO2Configuration();\r\n }\r\n }\r\n\r\n private _createSSAOCombinePostProcess(ratio: number, textureType: number): void {\r\n this._ssaoCombinePostProcess = new PostProcess(\"ssaoCombine\", ThinSSAO2CombinePostProcess.FragmentUrl, {\r\n size: ratio,\r\n samplingMode: Constants.TEXTURE_BILINEAR_SAMPLINGMODE,\r\n engine: this._scene.getEngine(),\r\n textureType,\r\n effectWrapper: this._thinSSAORenderingPipeline._ssaoCombinePostProcess,\r\n });\r\n\r\n this._ssaoCombinePostProcess.onApply = (effect: Effect) => {\r\n this._thinSSAORenderingPipeline._ssaoCombinePostProcess.camera = this._scene.activeCamera;\r\n\r\n effect.setTextureFromPostProcessOutput(\"originalColor\", this._originalColorPostProcess);\r\n };\r\n this._ssaoCombinePostProcess.autoClear = false;\r\n this._ssaoCombinePostProcess.samples = this.textureSamples;\r\n }\r\n\r\n /**\r\n * Serialize 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 = \"SSAO2RenderingPipeline\";\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): SSAO2RenderingPipeline {\r\n return SerializationHelper.Parse(\r\n () => new SSAO2RenderingPipeline(source._name, scene, source._ratio, undefined, source._forceGeometryBuffer, source._textureType),\r\n source,\r\n scene,\r\n rootUrl\r\n );\r\n }\r\n}\r\n\r\nRegisterClass(\"BABYLON.SSAO2RenderingPipeline\", SSAO2RenderingPipeline);\r\n"]}
|
|
@@ -103,8 +103,15 @@ export class ThinSSAO2PostProcess extends EffectWrapper {
|
|
|
103
103
|
effect.setFloat("near", camera.minZ);
|
|
104
104
|
if (camera.mode === Camera.PERSPECTIVE_CAMERA) {
|
|
105
105
|
effect.setMatrix3x3("depthProjection", ThinSSAO2PostProcess.PERSPECTIVE_DEPTH_PROJECTION);
|
|
106
|
-
|
|
107
|
-
|
|
106
|
+
const viewportSize = Math.tan(camera.fov / 2);
|
|
107
|
+
if (camera.fovMode === Camera.FOVMODE_VERTICAL_FIXED) {
|
|
108
|
+
effect.setFloat("xViewport", viewportSize * this._scene.getEngine().getAspectRatio(camera, true));
|
|
109
|
+
effect.setFloat("yViewport", viewportSize);
|
|
110
|
+
}
|
|
111
|
+
else {
|
|
112
|
+
effect.setFloat("xViewport", viewportSize);
|
|
113
|
+
effect.setFloat("yViewport", viewportSize / this._scene.getEngine().getAspectRatio(camera, true));
|
|
114
|
+
}
|
|
108
115
|
}
|
|
109
116
|
else {
|
|
110
117
|
const halfWidth = this._scene.getEngine().getRenderWidth() / 2.0;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"thinSSAO2PostProcess.js","sourceRoot":"","sources":["../../../../dev/core/src/PostProcesses/thinSSAO2PostProcess.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Nullable, Scene, EffectWrapperCreationOptions } from \"core/index\";\r\nimport { Constants } from \"core/Engines/constants\";\r\nimport { EffectWrapper } from \"core/Materials/effectRenderer\";\r\nimport { ShaderLanguage } from \"core/Materials/shaderLanguage\";\r\nimport { Vector2, Vector3 } from \"core/Maths/math.vector\";\r\nimport { Camera } from \"core/Cameras/camera\";\r\nimport { RawTexture } from \"core/Materials/Textures/rawTexture\";\r\nimport { RandomRange } from \"core/Maths/math.scalar.functions\";\r\nimport { Texture } from \"core/Materials/Textures/texture\";\r\n\r\n/**\r\n * @internal\r\n */\r\nexport class ThinSSAO2PostProcess extends EffectWrapper {\r\n private static readonly ORTHO_DEPTH_PROJECTION = [1, 0, 0, 0, 1, 0, 0, 0, 1];\r\n\r\n private static readonly PERSPECTIVE_DEPTH_PROJECTION = [0, 0, 0, 0, 0, 0, 1, 1, 1];\r\n\r\n public static readonly FragmentUrl = \"ssao2\";\r\n\r\n public static readonly Uniforms = [\r\n \"sampleSphere\",\r\n \"samplesFactor\",\r\n \"randTextureTiles\",\r\n \"totalStrength\",\r\n \"radius\",\r\n \"base\",\r\n \"range\",\r\n \"projection\",\r\n \"near\",\r\n \"texelSize\",\r\n \"xViewport\",\r\n \"yViewport\",\r\n \"viewport\",\r\n \"maxZ\",\r\n \"minZAspect\",\r\n \"depthProjection\",\r\n ];\r\n\r\n public static readonly Samplers = [\"randomSampler\", \"depthSampler\", \"normalSampler\"];\r\n\r\n protected override _gatherImports(useWebGPU: boolean, list: Promise<any>[]) {\r\n if (useWebGPU) {\r\n this._webGPUReady = true;\r\n list.push(import(\"../ShadersWGSL/ssao2.fragment\"));\r\n } else {\r\n list.push(import(\"../Shaders/ssao2.fragment\"));\r\n }\r\n }\r\n\r\n public camera: Nullable<Camera> = null;\r\n\r\n private _textureWidth = 0;\r\n\r\n public get textureWidth() {\r\n return this._textureWidth;\r\n }\r\n\r\n public set textureWidth(width: number) {\r\n if (this._textureWidth === width) {\r\n return;\r\n }\r\n this._textureWidth = width;\r\n }\r\n\r\n private _textureHeight = 0;\r\n\r\n public get textureHeight() {\r\n return this._textureHeight;\r\n }\r\n\r\n public set textureHeight(height: number) {\r\n if (this._textureHeight === height) {\r\n return;\r\n }\r\n this._textureHeight = height;\r\n }\r\n\r\n private _samples: number = 8;\r\n\r\n public set samples(n: number) {\r\n this._samples = n;\r\n this.updateEffect();\r\n this._sampleSphere = this._generateHemisphere();\r\n }\r\n public get samples(): number {\r\n return this._samples;\r\n }\r\n\r\n public totalStrength: number = 1.0;\r\n\r\n public radius: number = 2.0;\r\n\r\n public maxZ: number = 100.0;\r\n\r\n public minZAspect: number = 0.2;\r\n\r\n public base: number = 0;\r\n\r\n private _epsilon: number = 0.02;\r\n\r\n public set epsilon(n: number) {\r\n this._epsilon = n;\r\n this.updateEffect();\r\n }\r\n public get epsilon(): number {\r\n return this._epsilon;\r\n }\r\n\r\n public override updateEffect() {\r\n super.updateEffect(this._getDefinesForSSAO());\r\n }\r\n\r\n private _scene: Scene;\r\n private _randomTexture: Texture;\r\n private _sampleSphere: number[];\r\n\r\n constructor(name: string, scene: Scene, options?: EffectWrapperCreationOptions) {\r\n super({\r\n ...options,\r\n name,\r\n engine: scene.getEngine(),\r\n useShaderStore: true,\r\n useAsPostProcess: true,\r\n fragmentShader: ThinSSAO2PostProcess.FragmentUrl,\r\n uniforms: ThinSSAO2PostProcess.Uniforms,\r\n samplers: ThinSSAO2PostProcess.Samplers,\r\n defines: `#define SSAO\\n#define SAMPLES 8\\n#define EPSILON 0.0001`,\r\n shaderLanguage: scene.getEngine().isWebGPU ? ShaderLanguage.WGSL : ShaderLanguage.GLSL,\r\n });\r\n\r\n this._scene = scene;\r\n\r\n this._createRandomTexture();\r\n\r\n this.updateEffect();\r\n this._sampleSphere = this._generateHemisphere();\r\n }\r\n\r\n public override bind(noDefaultBindings = false) {\r\n super.bind(noDefaultBindings);\r\n\r\n const effect = this._drawWrapper.effect!;\r\n\r\n const camera = this.camera;\r\n if (!camera) {\r\n return;\r\n }\r\n\r\n const projectionMatrix = camera.getProjectionMatrix();\r\n\r\n effect.setArray3(\"sampleSphere\", this._sampleSphere);\r\n effect.setFloat(\"randTextureTiles\", 32.0);\r\n effect.setFloat(\"samplesFactor\", 1 / this.samples);\r\n effect.setFloat(\"totalStrength\", this.totalStrength);\r\n effect.setFloat2(\"texelSize\", 1 / this.textureWidth, 1 / this.textureHeight);\r\n effect.setFloat(\"radius\", this.radius);\r\n effect.setFloat(\"maxZ\", this.maxZ);\r\n effect.setFloat(\"minZAspect\", this.minZAspect);\r\n effect.setFloat(\"base\", this.base);\r\n effect.setFloat(\"near\", camera.minZ);\r\n if (camera.mode === Camera.PERSPECTIVE_CAMERA) {\r\n effect.setMatrix3x3(\"depthProjection\", ThinSSAO2PostProcess.PERSPECTIVE_DEPTH_PROJECTION);\r\n effect.setFloat(\"xViewport\", Math.tan(camera.fov / 2) * this._scene.getEngine().getAspectRatio(camera, true));\r\n effect.setFloat(\"yViewport\", Math.tan(camera.fov / 2));\r\n } else {\r\n const halfWidth = this._scene.getEngine().getRenderWidth() / 2.0;\r\n const halfHeight = this._scene.getEngine().getRenderHeight() / 2.0;\r\n const orthoLeft = camera.orthoLeft ?? -halfWidth;\r\n const orthoRight = camera.orthoRight ?? halfWidth;\r\n const orthoBottom = camera.orthoBottom ?? -halfHeight;\r\n const orthoTop = camera.orthoTop ?? halfHeight;\r\n effect.setMatrix3x3(\"depthProjection\", ThinSSAO2PostProcess.ORTHO_DEPTH_PROJECTION);\r\n effect.setFloat4(\"viewport\", orthoLeft, orthoRight, orthoBottom, orthoTop);\r\n }\r\n effect.setMatrix(\"projection\", projectionMatrix);\r\n\r\n effect.setTexture(\"randomSampler\", this._randomTexture);\r\n }\r\n\r\n public override dispose() {\r\n this._randomTexture.dispose();\r\n\r\n super.dispose();\r\n }\r\n\r\n private _createRandomTexture(): void {\r\n const size = 128;\r\n\r\n const data = new Uint8Array(size * size * 4);\r\n const randVector = Vector2.Zero();\r\n for (let index = 0; index < data.length; ) {\r\n randVector.set(RandomRange(0, 1), RandomRange(0, 1)).normalize().scaleInPlace(255);\r\n data[index++] = Math.floor(randVector.x);\r\n data[index++] = Math.floor(randVector.y);\r\n data[index++] = 0;\r\n data[index++] = 255;\r\n }\r\n\r\n const texture = RawTexture.CreateRGBATexture(data, size, size, this._scene, false, false, Constants.TEXTURE_BILINEAR_SAMPLINGMODE);\r\n texture.name = \"SSAORandomTexture\";\r\n texture.wrapU = Texture.WRAP_ADDRESSMODE;\r\n texture.wrapV = Texture.WRAP_ADDRESSMODE;\r\n this._randomTexture = texture;\r\n }\r\n\r\n private _bits = new Uint32Array(1);\r\n\r\n //Van der Corput radical inverse\r\n private _radicalInverseVdC(i: number) {\r\n this._bits[0] = i;\r\n this._bits[0] = ((this._bits[0] << 16) | (this._bits[0] >> 16)) >>> 0;\r\n this._bits[0] = ((this._bits[0] & 0x55555555) << 1) | (((this._bits[0] & 0xaaaaaaaa) >>> 1) >>> 0);\r\n this._bits[0] = ((this._bits[0] & 0x33333333) << 2) | (((this._bits[0] & 0xcccccccc) >>> 2) >>> 0);\r\n this._bits[0] = ((this._bits[0] & 0x0f0f0f0f) << 4) | (((this._bits[0] & 0xf0f0f0f0) >>> 4) >>> 0);\r\n this._bits[0] = ((this._bits[0] & 0x00ff00ff) << 8) | (((this._bits[0] & 0xff00ff00) >>> 8) >>> 0);\r\n return this._bits[0] * 2.3283064365386963e-10; // / 0x100000000 or / 4294967296\r\n }\r\n\r\n private _hammersley(i: number, n: number) {\r\n return [i / n, this._radicalInverseVdC(i)];\r\n }\r\n\r\n private _hemisphereSampleUniform(u: number, v: number): Vector3 {\r\n const phi = v * 2.0 * Math.PI;\r\n // rejecting samples that are close to tangent plane to avoid z-fighting artifacts\r\n const cosTheta = 1.0 - u * 0.85;\r\n const sinTheta = Math.sqrt(1.0 - cosTheta * cosTheta);\r\n return new Vector3(Math.cos(phi) * sinTheta, Math.sin(phi) * sinTheta, cosTheta);\r\n }\r\n\r\n private _generateHemisphere(): number[] {\r\n const numSamples = this.samples;\r\n const result = [];\r\n let vector;\r\n\r\n let i = 0;\r\n while (i < numSamples) {\r\n if (numSamples < 16) {\r\n vector = this._hemisphereSampleUniform(Math.random(), Math.random());\r\n } else {\r\n const rand = this._hammersley(i, numSamples);\r\n vector = this._hemisphereSampleUniform(rand[0], rand[1]);\r\n }\r\n\r\n result.push(vector.x, vector.y, vector.z);\r\n i++;\r\n }\r\n\r\n return result;\r\n }\r\n\r\n private _getDefinesForSSAO() {\r\n const epsilon = this._epsilon ?? 0.02;\r\n const samples = this._samples ?? 8;\r\n\r\n let defines = `#define SSAO\\n#define SAMPLES ${samples}\\n#define EPSILON ${epsilon.toFixed(4)}`;\r\n\r\n if (this.camera?.mode === Camera.ORTHOGRAPHIC_CAMERA) {\r\n defines += `\\n#define ORTHOGRAPHIC_CAMERA`;\r\n }\r\n\r\n return defines;\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"thinSSAO2PostProcess.js","sourceRoot":"","sources":["../../../../dev/core/src/PostProcesses/thinSSAO2PostProcess.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Nullable, Scene, EffectWrapperCreationOptions } from \"core/index\";\r\nimport { Constants } from \"core/Engines/constants\";\r\nimport { EffectWrapper } from \"core/Materials/effectRenderer\";\r\nimport { ShaderLanguage } from \"core/Materials/shaderLanguage\";\r\nimport { Vector2, Vector3 } from \"core/Maths/math.vector\";\r\nimport { Camera } from \"core/Cameras/camera\";\r\nimport { RawTexture } from \"core/Materials/Textures/rawTexture\";\r\nimport { RandomRange } from \"core/Maths/math.scalar.functions\";\r\nimport { Texture } from \"core/Materials/Textures/texture\";\r\n\r\n/**\r\n * @internal\r\n */\r\nexport class ThinSSAO2PostProcess extends EffectWrapper {\r\n private static readonly ORTHO_DEPTH_PROJECTION = [1, 0, 0, 0, 1, 0, 0, 0, 1];\r\n\r\n private static readonly PERSPECTIVE_DEPTH_PROJECTION = [0, 0, 0, 0, 0, 0, 1, 1, 1];\r\n\r\n public static readonly FragmentUrl = \"ssao2\";\r\n\r\n public static readonly Uniforms = [\r\n \"sampleSphere\",\r\n \"samplesFactor\",\r\n \"randTextureTiles\",\r\n \"totalStrength\",\r\n \"radius\",\r\n \"base\",\r\n \"range\",\r\n \"projection\",\r\n \"near\",\r\n \"texelSize\",\r\n \"xViewport\",\r\n \"yViewport\",\r\n \"viewport\",\r\n \"maxZ\",\r\n \"minZAspect\",\r\n \"depthProjection\",\r\n ];\r\n\r\n public static readonly Samplers = [\"randomSampler\", \"depthSampler\", \"normalSampler\"];\r\n\r\n protected override _gatherImports(useWebGPU: boolean, list: Promise<any>[]) {\r\n if (useWebGPU) {\r\n this._webGPUReady = true;\r\n list.push(import(\"../ShadersWGSL/ssao2.fragment\"));\r\n } else {\r\n list.push(import(\"../Shaders/ssao2.fragment\"));\r\n }\r\n }\r\n\r\n public camera: Nullable<Camera> = null;\r\n\r\n private _textureWidth = 0;\r\n\r\n public get textureWidth() {\r\n return this._textureWidth;\r\n }\r\n\r\n public set textureWidth(width: number) {\r\n if (this._textureWidth === width) {\r\n return;\r\n }\r\n this._textureWidth = width;\r\n }\r\n\r\n private _textureHeight = 0;\r\n\r\n public get textureHeight() {\r\n return this._textureHeight;\r\n }\r\n\r\n public set textureHeight(height: number) {\r\n if (this._textureHeight === height) {\r\n return;\r\n }\r\n this._textureHeight = height;\r\n }\r\n\r\n private _samples: number = 8;\r\n\r\n public set samples(n: number) {\r\n this._samples = n;\r\n this.updateEffect();\r\n this._sampleSphere = this._generateHemisphere();\r\n }\r\n public get samples(): number {\r\n return this._samples;\r\n }\r\n\r\n public totalStrength: number = 1.0;\r\n\r\n public radius: number = 2.0;\r\n\r\n public maxZ: number = 100.0;\r\n\r\n public minZAspect: number = 0.2;\r\n\r\n public base: number = 0;\r\n\r\n private _epsilon: number = 0.02;\r\n\r\n public set epsilon(n: number) {\r\n this._epsilon = n;\r\n this.updateEffect();\r\n }\r\n public get epsilon(): number {\r\n return this._epsilon;\r\n }\r\n\r\n public override updateEffect() {\r\n super.updateEffect(this._getDefinesForSSAO());\r\n }\r\n\r\n private _scene: Scene;\r\n private _randomTexture: Texture;\r\n private _sampleSphere: number[];\r\n\r\n constructor(name: string, scene: Scene, options?: EffectWrapperCreationOptions) {\r\n super({\r\n ...options,\r\n name,\r\n engine: scene.getEngine(),\r\n useShaderStore: true,\r\n useAsPostProcess: true,\r\n fragmentShader: ThinSSAO2PostProcess.FragmentUrl,\r\n uniforms: ThinSSAO2PostProcess.Uniforms,\r\n samplers: ThinSSAO2PostProcess.Samplers,\r\n defines: `#define SSAO\\n#define SAMPLES 8\\n#define EPSILON 0.0001`,\r\n shaderLanguage: scene.getEngine().isWebGPU ? ShaderLanguage.WGSL : ShaderLanguage.GLSL,\r\n });\r\n\r\n this._scene = scene;\r\n\r\n this._createRandomTexture();\r\n\r\n this.updateEffect();\r\n this._sampleSphere = this._generateHemisphere();\r\n }\r\n\r\n public override bind(noDefaultBindings = false) {\r\n super.bind(noDefaultBindings);\r\n\r\n const effect = this._drawWrapper.effect!;\r\n\r\n const camera = this.camera;\r\n if (!camera) {\r\n return;\r\n }\r\n\r\n const projectionMatrix = camera.getProjectionMatrix();\r\n\r\n effect.setArray3(\"sampleSphere\", this._sampleSphere);\r\n effect.setFloat(\"randTextureTiles\", 32.0);\r\n effect.setFloat(\"samplesFactor\", 1 / this.samples);\r\n effect.setFloat(\"totalStrength\", this.totalStrength);\r\n effect.setFloat2(\"texelSize\", 1 / this.textureWidth, 1 / this.textureHeight);\r\n effect.setFloat(\"radius\", this.radius);\r\n effect.setFloat(\"maxZ\", this.maxZ);\r\n effect.setFloat(\"minZAspect\", this.minZAspect);\r\n effect.setFloat(\"base\", this.base);\r\n effect.setFloat(\"near\", camera.minZ);\r\n if (camera.mode === Camera.PERSPECTIVE_CAMERA) {\r\n effect.setMatrix3x3(\"depthProjection\", ThinSSAO2PostProcess.PERSPECTIVE_DEPTH_PROJECTION);\r\n const viewportSize = Math.tan(camera.fov / 2);\r\n if (camera.fovMode === Camera.FOVMODE_VERTICAL_FIXED) {\r\n effect.setFloat(\"xViewport\", viewportSize * this._scene.getEngine().getAspectRatio(camera, true));\r\n effect.setFloat(\"yViewport\", viewportSize);\r\n } else {\r\n effect.setFloat(\"xViewport\", viewportSize);\r\n effect.setFloat(\"yViewport\", viewportSize / this._scene.getEngine().getAspectRatio(camera, true));\r\n }\r\n } else {\r\n const halfWidth = this._scene.getEngine().getRenderWidth() / 2.0;\r\n const halfHeight = this._scene.getEngine().getRenderHeight() / 2.0;\r\n const orthoLeft = camera.orthoLeft ?? -halfWidth;\r\n const orthoRight = camera.orthoRight ?? halfWidth;\r\n const orthoBottom = camera.orthoBottom ?? -halfHeight;\r\n const orthoTop = camera.orthoTop ?? halfHeight;\r\n effect.setMatrix3x3(\"depthProjection\", ThinSSAO2PostProcess.ORTHO_DEPTH_PROJECTION);\r\n effect.setFloat4(\"viewport\", orthoLeft, orthoRight, orthoBottom, orthoTop);\r\n }\r\n effect.setMatrix(\"projection\", projectionMatrix);\r\n\r\n effect.setTexture(\"randomSampler\", this._randomTexture);\r\n }\r\n\r\n public override dispose() {\r\n this._randomTexture.dispose();\r\n\r\n super.dispose();\r\n }\r\n\r\n private _createRandomTexture(): void {\r\n const size = 128;\r\n\r\n const data = new Uint8Array(size * size * 4);\r\n const randVector = Vector2.Zero();\r\n for (let index = 0; index < data.length; ) {\r\n randVector.set(RandomRange(0, 1), RandomRange(0, 1)).normalize().scaleInPlace(255);\r\n data[index++] = Math.floor(randVector.x);\r\n data[index++] = Math.floor(randVector.y);\r\n data[index++] = 0;\r\n data[index++] = 255;\r\n }\r\n\r\n const texture = RawTexture.CreateRGBATexture(data, size, size, this._scene, false, false, Constants.TEXTURE_BILINEAR_SAMPLINGMODE);\r\n texture.name = \"SSAORandomTexture\";\r\n texture.wrapU = Texture.WRAP_ADDRESSMODE;\r\n texture.wrapV = Texture.WRAP_ADDRESSMODE;\r\n this._randomTexture = texture;\r\n }\r\n\r\n private _bits = new Uint32Array(1);\r\n\r\n //Van der Corput radical inverse\r\n private _radicalInverseVdC(i: number) {\r\n this._bits[0] = i;\r\n this._bits[0] = ((this._bits[0] << 16) | (this._bits[0] >> 16)) >>> 0;\r\n this._bits[0] = ((this._bits[0] & 0x55555555) << 1) | (((this._bits[0] & 0xaaaaaaaa) >>> 1) >>> 0);\r\n this._bits[0] = ((this._bits[0] & 0x33333333) << 2) | (((this._bits[0] & 0xcccccccc) >>> 2) >>> 0);\r\n this._bits[0] = ((this._bits[0] & 0x0f0f0f0f) << 4) | (((this._bits[0] & 0xf0f0f0f0) >>> 4) >>> 0);\r\n this._bits[0] = ((this._bits[0] & 0x00ff00ff) << 8) | (((this._bits[0] & 0xff00ff00) >>> 8) >>> 0);\r\n return this._bits[0] * 2.3283064365386963e-10; // / 0x100000000 or / 4294967296\r\n }\r\n\r\n private _hammersley(i: number, n: number) {\r\n return [i / n, this._radicalInverseVdC(i)];\r\n }\r\n\r\n private _hemisphereSampleUniform(u: number, v: number): Vector3 {\r\n const phi = v * 2.0 * Math.PI;\r\n // rejecting samples that are close to tangent plane to avoid z-fighting artifacts\r\n const cosTheta = 1.0 - u * 0.85;\r\n const sinTheta = Math.sqrt(1.0 - cosTheta * cosTheta);\r\n return new Vector3(Math.cos(phi) * sinTheta, Math.sin(phi) * sinTheta, cosTheta);\r\n }\r\n\r\n private _generateHemisphere(): number[] {\r\n const numSamples = this.samples;\r\n const result = [];\r\n let vector;\r\n\r\n let i = 0;\r\n while (i < numSamples) {\r\n if (numSamples < 16) {\r\n vector = this._hemisphereSampleUniform(Math.random(), Math.random());\r\n } else {\r\n const rand = this._hammersley(i, numSamples);\r\n vector = this._hemisphereSampleUniform(rand[0], rand[1]);\r\n }\r\n\r\n result.push(vector.x, vector.y, vector.z);\r\n i++;\r\n }\r\n\r\n return result;\r\n }\r\n\r\n private _getDefinesForSSAO() {\r\n const epsilon = this._epsilon ?? 0.02;\r\n const samples = this._samples ?? 8;\r\n\r\n let defines = `#define SSAO\\n#define SAMPLES ${samples}\\n#define EPSILON ${epsilon.toFixed(4)}`;\r\n\r\n if (this.camera?.mode === Camera.ORTHOGRAPHIC_CAMERA) {\r\n defines += `\\n#define ORTHOGRAPHIC_CAMERA`;\r\n }\r\n\r\n return defines;\r\n }\r\n}\r\n"]}
|
package/package.json
CHANGED
package/scene.d.ts
CHANGED
|
@@ -169,6 +169,7 @@ export declare class Scene implements IAnimatable, IClipPlanesHolder, IAssetCont
|
|
|
169
169
|
*/
|
|
170
170
|
autoClearDepthAndStencil: boolean;
|
|
171
171
|
private _clearColor;
|
|
172
|
+
private _tempVect3;
|
|
172
173
|
private _tempVect4;
|
|
173
174
|
/**
|
|
174
175
|
* Observable triggered when the performance priority is changed
|
|
@@ -381,6 +382,7 @@ export declare class Scene implements IAnimatable, IClipPlanesHolder, IAssetCont
|
|
|
381
382
|
effectLayers: Array<EffectLayer>;
|
|
382
383
|
/**
|
|
383
384
|
* The list of sounds used in the scene.
|
|
385
|
+
* @deprecated please use AudioEngineV2 instead
|
|
384
386
|
*/
|
|
385
387
|
sounds: Nullable<Array<Sound>>;
|
|
386
388
|
/**
|
|
@@ -823,6 +825,10 @@ export declare class Scene implements IAnimatable, IClipPlanesHolder, IAssetCont
|
|
|
823
825
|
/** If you need to check double click without raising a single click at first click, enable this flag */
|
|
824
826
|
static get ExclusiveDoubleClickMode(): boolean;
|
|
825
827
|
static set ExclusiveDoubleClickMode(value: boolean);
|
|
828
|
+
/**
|
|
829
|
+
* Gets the current eye position, in order of forcedViewPosition, mirroredCameraPosition, activeCamera world position, ZeroReadonlyVector3
|
|
830
|
+
*/
|
|
831
|
+
private get _eyePosition();
|
|
826
832
|
/**
|
|
827
833
|
* Bind the current view position to an effect.
|
|
828
834
|
* @param effect The effect to be bound
|
|
@@ -1602,10 +1608,9 @@ export declare class Scene implements IAnimatable, IClipPlanesHolder, IAssetCont
|
|
|
1602
1608
|
* 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
|
|
1603
1609
|
*/
|
|
1604
1610
|
get floatingOriginMode(): boolean;
|
|
1605
|
-
private _floatingOriginOffsetDefault;
|
|
1606
1611
|
/**
|
|
1607
1612
|
* @experimental
|
|
1608
|
-
* When floatingOriginMode is enabled, offset is equal to the
|
|
1613
|
+
* When floatingOriginMode is enabled, offset is equal to the eye position. Default to ZeroReadonly when mode is disabled.
|
|
1609
1614
|
*/
|
|
1610
1615
|
get floatingOriginOffset(): Vector3;
|
|
1611
1616
|
/**
|
package/scene.js
CHANGED
|
@@ -362,6 +362,16 @@ export class Scene {
|
|
|
362
362
|
static set ExclusiveDoubleClickMode(value) {
|
|
363
363
|
InputManager.ExclusiveDoubleClickMode = value;
|
|
364
364
|
}
|
|
365
|
+
/**
|
|
366
|
+
* Gets the current eye position, in order of forcedViewPosition, mirroredCameraPosition, activeCamera world position, ZeroReadonlyVector3
|
|
367
|
+
*/
|
|
368
|
+
get _eyePosition() {
|
|
369
|
+
return this._forcedViewPosition
|
|
370
|
+
? this._forcedViewPosition
|
|
371
|
+
: this._mirroredCameraPosition
|
|
372
|
+
? this._mirroredCameraPosition
|
|
373
|
+
: (this.activeCamera?.getWorldMatrix().getTranslationToRef(this._tempVect3) ?? Vector3.ZeroReadOnly);
|
|
374
|
+
}
|
|
365
375
|
/**
|
|
366
376
|
* Bind the current view position to an effect.
|
|
367
377
|
* @param effect The effect to be bound
|
|
@@ -370,11 +380,7 @@ export class Scene {
|
|
|
370
380
|
* @returns the computed eye position
|
|
371
381
|
*/
|
|
372
382
|
bindEyePosition(effect, variableName = "vEyePosition", isVector3 = false) {
|
|
373
|
-
const eyePosition = this.
|
|
374
|
-
? this._forcedViewPosition
|
|
375
|
-
: this._mirroredCameraPosition
|
|
376
|
-
? this._mirroredCameraPosition
|
|
377
|
-
: (this.activeCamera?.globalPosition ?? Vector3.ZeroReadOnly);
|
|
383
|
+
const eyePosition = this._eyePosition;
|
|
378
384
|
const invertNormal = this.useRightHandedSystem === (this._mirroredCameraPosition != null);
|
|
379
385
|
const offset = this.floatingOriginOffset;
|
|
380
386
|
const eyePos = this._tempVect4.set(eyePosition.x, eyePosition.y, eyePosition.z, invertNormal ? -1 : 1);
|
|
@@ -685,6 +691,7 @@ export class Scene {
|
|
|
685
691
|
*/
|
|
686
692
|
this.autoClearDepthAndStencil = true;
|
|
687
693
|
this._clearColor = new Color4(0.2, 0.2, 0.3, 1.0);
|
|
694
|
+
this._tempVect3 = new Vector3();
|
|
688
695
|
this._tempVect4 = new Vector4();
|
|
689
696
|
/**
|
|
690
697
|
* Observable triggered when the performance priority is changed
|
|
@@ -808,6 +815,7 @@ export class Scene {
|
|
|
808
815
|
this.effectLayers = [];
|
|
809
816
|
/**
|
|
810
817
|
* The list of sounds used in the scene.
|
|
818
|
+
* @deprecated please use AudioEngineV2 instead
|
|
811
819
|
*/
|
|
812
820
|
this.sounds = null;
|
|
813
821
|
/**
|
|
@@ -1457,7 +1465,6 @@ export class Scene {
|
|
|
1457
1465
|
length: 0,
|
|
1458
1466
|
};
|
|
1459
1467
|
this._floatingOriginScene = undefined;
|
|
1460
|
-
this._floatingOriginOffsetDefault = Vector3.Zero();
|
|
1461
1468
|
this._preventFreeActiveMeshesAndRenderingGroups = false;
|
|
1462
1469
|
/** @internal */
|
|
1463
1470
|
this._activeMeshesFrozen = false;
|
|
@@ -2161,10 +2168,10 @@ export class Scene {
|
|
|
2161
2168
|
}
|
|
2162
2169
|
/**
|
|
2163
2170
|
* @experimental
|
|
2164
|
-
* When floatingOriginMode is enabled, offset is equal to the
|
|
2171
|
+
* When floatingOriginMode is enabled, offset is equal to the eye position. Default to ZeroReadonly when mode is disabled.
|
|
2165
2172
|
*/
|
|
2166
2173
|
get floatingOriginOffset() {
|
|
2167
|
-
return this.floatingOriginMode
|
|
2174
|
+
return this.floatingOriginMode ? this._eyePosition : Vector3.ZeroReadOnly;
|
|
2168
2175
|
}
|
|
2169
2176
|
/**
|
|
2170
2177
|
* Gets an unique (relatively to the current scene) Id
|