@onerjs/core 8.54.2 → 8.54.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Animations/animatable.core.js.map +1 -1
- package/AudioV2/abstractAudio/abstractSoundSource.d.ts +26 -0
- package/AudioV2/abstractAudio/abstractSoundSource.js.map +1 -1
- package/AudioV2/webAudio/webAudioEngine.js +2 -0
- package/AudioV2/webAudio/webAudioEngine.js.map +1 -1
- package/AudioV2/webAudio/webAudioSoundSource.d.ts +16 -0
- package/AudioV2/webAudio/webAudioSoundSource.js +43 -1
- package/AudioV2/webAudio/webAudioSoundSource.js.map +1 -1
- package/Bones/skeleton.functions.js +1 -1
- package/Bones/skeleton.functions.js.map +1 -1
- package/Cameras/inputMapper.js.map +1 -1
- package/Debug/physicsViewer.pure.js +1 -1
- package/Debug/physicsViewer.pure.js.map +1 -1
- package/Engines/Extensions/engine.alphaToCoverage.d.ts +6 -0
- package/Engines/Extensions/engine.alphaToCoverage.js +9 -0
- package/Engines/Extensions/engine.alphaToCoverage.js.map +1 -0
- package/Engines/Extensions/engine.alphaToCoverage.pure.d.ts +6 -0
- package/Engines/Extensions/engine.alphaToCoverage.pure.js +54 -0
- package/Engines/Extensions/engine.alphaToCoverage.pure.js.map +1 -0
- package/Engines/Extensions/engine.alphaToCoverage.types.d.ts +21 -0
- package/Engines/Extensions/engine.alphaToCoverage.types.js +2 -0
- package/Engines/Extensions/engine.alphaToCoverage.types.js.map +1 -0
- package/Engines/Extensions/index.d.ts +1 -0
- package/Engines/Extensions/index.js +1 -0
- package/Engines/Extensions/index.js.map +1 -1
- package/Engines/Extensions/pure.d.ts +1 -0
- package/Engines/Extensions/pure.js +1 -0
- package/Engines/Extensions/pure.js.map +1 -1
- package/Engines/Native/nativeHelpers.js +6 -4
- package/Engines/Native/nativeHelpers.js.map +1 -1
- package/Engines/Native/nativeInterfaces.d.ts +1 -0
- package/Engines/Native/nativeInterfaces.js.map +1 -1
- package/Engines/WebGPU/Extensions/engine.alphaToCoverage.d.ts +6 -0
- package/Engines/WebGPU/Extensions/engine.alphaToCoverage.js +9 -0
- package/Engines/WebGPU/Extensions/engine.alphaToCoverage.js.map +1 -0
- package/Engines/WebGPU/Extensions/engine.alphaToCoverage.pure.d.ts +6 -0
- package/Engines/WebGPU/Extensions/engine.alphaToCoverage.pure.js +34 -0
- package/Engines/WebGPU/Extensions/engine.alphaToCoverage.pure.js.map +1 -0
- package/Engines/WebGPU/Extensions/engine.alphaToCoverage.types.d.ts +16 -0
- package/Engines/WebGPU/Extensions/engine.alphaToCoverage.types.js +2 -0
- package/Engines/WebGPU/Extensions/engine.alphaToCoverage.types.js.map +1 -0
- package/Engines/WebGPU/Extensions/index.d.ts +1 -0
- package/Engines/WebGPU/Extensions/index.js +1 -0
- package/Engines/WebGPU/Extensions/index.js.map +1 -1
- package/Engines/WebGPU/Extensions/pure.d.ts +1 -0
- package/Engines/WebGPU/Extensions/pure.js +1 -0
- package/Engines/WebGPU/Extensions/pure.js.map +1 -1
- package/Engines/WebGPU/webgpuCacheRenderPipeline.js +0 -1
- package/Engines/WebGPU/webgpuCacheRenderPipeline.js.map +1 -1
- package/Engines/abstractEngine.pure.d.ts +0 -15
- package/Engines/abstractEngine.pure.js +2 -23
- package/Engines/abstractEngine.pure.js.map +1 -1
- package/Engines/constants.d.ts +4 -0
- package/Engines/constants.js +4 -0
- package/Engines/constants.js.map +1 -1
- package/Engines/engine.d.ts +2 -2
- package/Engines/engine.js +1 -0
- package/Engines/engine.js.map +1 -1
- package/Engines/engine.pure.js +1 -1
- package/Engines/engine.pure.js.map +1 -1
- package/Engines/thinEngine.pure.d.ts +0 -11
- package/Engines/thinEngine.pure.js +0 -19
- package/Engines/thinEngine.pure.js.map +1 -1
- package/Engines/webgpuEngine.d.ts +2 -0
- package/Engines/webgpuEngine.js +2 -0
- package/Engines/webgpuEngine.js.map +1 -1
- package/Engines/webgpuEngine.pure.d.ts +0 -5
- package/Engines/webgpuEngine.pure.js +1 -10
- package/Engines/webgpuEngine.pure.js.map +1 -1
- package/FrameGraph/Node/Types/nodeRenderGraphTypes.js.map +1 -1
- package/Loading/loadingScreen.pure.js +2 -0
- package/Loading/loadingScreen.pure.js.map +1 -1
- package/Materials/Node/Blocks/Fragment/ambientOcclusionBlock.pure.js.map +1 -1
- package/Materials/Textures/ktx2decoderTypes.d.ts +14 -3
- package/Materials/Textures/ktx2decoderTypes.js +2 -0
- package/Materials/Textures/ktx2decoderTypes.js.map +1 -1
- package/Materials/Textures/rawTexture2DArray.functions.d.ts +29 -0
- package/Materials/Textures/rawTexture2DArray.functions.js +71 -0
- package/Materials/Textures/rawTexture2DArray.functions.js.map +1 -1
- package/Materials/material.pure.d.ts +1 -0
- package/Materials/material.pure.js +1 -0
- package/Materials/material.pure.js.map +1 -1
- package/Meshes/Builders/pure.d.ts +2 -2
- package/Meshes/Builders/pure.js +2 -2
- package/Meshes/Builders/pure.js.map +1 -1
- package/Meshes/Builders/textBuilder.js.map +1 -1
- package/Meshes/Builders/tiledBoxBuilder.d.ts +1 -83
- package/Meshes/Builders/tiledBoxBuilder.js +3 -215
- package/Meshes/Builders/tiledBoxBuilder.js.map +1 -1
- package/Meshes/Builders/tiledBoxBuilder.pure.d.ts +89 -0
- package/Meshes/Builders/tiledBoxBuilder.pure.js +229 -0
- package/Meshes/Builders/tiledBoxBuilder.pure.js.map +1 -0
- package/Meshes/Builders/tiledPlaneBuilder.d.ts +1 -79
- package/Meshes/Builders/tiledPlaneBuilder.js +3 -429
- package/Meshes/Builders/tiledPlaneBuilder.js.map +1 -1
- package/Meshes/Builders/tiledPlaneBuilder.pure.d.ts +85 -0
- package/Meshes/Builders/tiledPlaneBuilder.pure.js +442 -0
- package/Meshes/Builders/tiledPlaneBuilder.pure.js.map +1 -0
- package/Meshes/GaussianSplatting/gaussianSplattingMeshBase.pure.js +29 -9
- package/Meshes/GaussianSplatting/gaussianSplattingMeshBase.pure.js.map +1 -1
- package/Meshes/Node/Blocks/bevelBlock.pure.js.map +1 -1
- package/Meshes/meshBuilder.d.ts +21 -57
- package/Meshes/meshBuilder.js +21 -58
- package/Meshes/meshBuilder.js.map +1 -1
- package/Meshes/meshBuilder.pure.d.ts +58 -0
- package/Meshes/meshBuilder.pure.js +60 -0
- package/Meshes/meshBuilder.pure.js.map +1 -0
- package/Meshes/pure.d.ts +1 -1
- package/Meshes/pure.js +1 -1
- package/Meshes/pure.js.map +1 -1
- package/Misc/greasedLineTools.js.map +1 -1
- package/Misc/khronosTextureContainer2.d.ts +10 -0
- package/Misc/khronosTextureContainer2.js +23 -12
- package/Misc/khronosTextureContainer2.js.map +1 -1
- package/Misc/perfCounter.d.ts +2 -0
- package/Misc/perfCounter.js +17 -2
- package/Misc/perfCounter.js.map +1 -1
- package/Misc/rgbdTextureTools.js +1 -1
- package/Misc/rgbdTextureTools.js.map +1 -1
- package/Misc/tools.pure.js +1 -1
- package/Misc/tools.pure.js.map +1 -1
- package/Navigation/Plugins/recastJSPlugin.js +1 -1
- package/Navigation/Plugins/recastJSPlugin.js.map +1 -1
- package/PostProcesses/RenderPipeline/Pipelines/lensRenderingPipeline.pure.js.map +1 -1
- package/PostProcesses/RenderPipeline/Pipelines/ssaoRenderingPipeline.pure.js.map +1 -1
- package/PostProcesses/thinSSAO2PostProcess.js.map +1 -1
- package/PostProcesses/volumetricLightScatteringPostProcess.d.ts +3 -0
- package/PostProcesses/volumetricLightScatteringPostProcess.js +3 -0
- package/PostProcesses/volumetricLightScatteringPostProcess.js.map +1 -1
- package/PostProcesses/volumetricLightScatteringPostProcess.pure.d.ts +1 -0
- package/PostProcesses/volumetricLightScatteringPostProcess.pure.js +25 -6
- package/PostProcesses/volumetricLightScatteringPostProcess.pure.js.map +1 -1
- package/Shaders/ShadersInclude/openpbrDielectricReflectance.js +6 -6
- package/Shaders/ShadersInclude/openpbrDielectricReflectance.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/depthPrePass.js +2 -0
- package/ShadersWGSL/ShadersInclude/depthPrePass.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/openpbrDielectricReflectance.js +7 -8
- package/ShadersWGSL/ShadersInclude/openpbrDielectricReflectance.js.map +1 -1
- package/ShadersWGSL/default.fragment.js +3 -0
- package/ShadersWGSL/default.fragment.js.map +1 -1
- package/ShadersWGSL/openpbr.fragment.js +3 -0
- package/ShadersWGSL/openpbr.fragment.js.map +1 -1
- package/ShadersWGSL/pbr.fragment.js +3 -0
- package/ShadersWGSL/pbr.fragment.js.map +1 -1
- package/ShadersWGSL/volumetricLightScattering.fragment.d.ts +5 -0
- package/ShadersWGSL/volumetricLightScattering.fragment.js +20 -0
- package/ShadersWGSL/volumetricLightScattering.fragment.js.map +1 -0
- package/ShadersWGSL/volumetricLightScatteringPass.fragment.d.ts +5 -0
- package/ShadersWGSL/volumetricLightScatteringPass.fragment.js +24 -0
- package/ShadersWGSL/volumetricLightScatteringPass.fragment.js.map +1 -0
- package/ShadersWGSL/volumetricLightScatteringPass.vertex.d.ts +5 -0
- package/ShadersWGSL/volumetricLightScatteringPass.vertex.js +67 -0
- package/ShadersWGSL/volumetricLightScatteringPass.vertex.js.map +1 -0
- package/SmartAssets/smartAssetManager.pure.js +9 -1
- package/SmartAssets/smartAssetManager.pure.js.map +1 -1
- package/States/alphaCullingState.d.ts +0 -9
- package/States/alphaCullingState.js +4 -31
- package/States/alphaCullingState.js.map +1 -1
- package/XR/features/WebXRLayers.pure.js +4 -4
- package/XR/features/WebXRLayers.pure.js.map +1 -1
- package/node.d.ts +18 -1
- package/node.js +52 -1
- package/node.js.map +1 -1
- package/package.json +1 -1
- package/types.js.map +1 -1
|
@@ -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, type Scene, type EffectWrapperCreationOptions } from \"core/index\";\r\nimport { Constants } from \"core/Engines/constants\";\r\nimport { EffectWrapper } from \"core/Materials/effectRenderer.pure\";\r\nimport { ShaderLanguage } from \"core/Materials/shaderLanguage\";\r\nimport { Matrix, Vector2, Vector3 } from \"core/Maths/math.vector.pure\";\r\nimport { Camera } from \"core/Cameras/camera.pure\";\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.pure\";\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 \"normalWorldToView\",\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 private _normalsInWorldSpace = false;\r\n\r\n public set normalsInWorldSpace(value: boolean) {\r\n if (this._normalsInWorldSpace === value) {\r\n return;\r\n }\r\n this._normalsInWorldSpace = value;\r\n this.updateEffect();\r\n }\r\n\r\n public get normalsInWorldSpace(): boolean {\r\n return this._normalsInWorldSpace;\r\n }\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 private readonly _normalWorldToViewMatrix = new Matrix();\r\n private readonly _normalWorldToView = new Float32Array(9);\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 if (this._normalsInWorldSpace) {\r\n camera.getViewMatrix().toNormalMatrix(this._normalWorldToViewMatrix);\r\n const viewMatrix = this._normalWorldToViewMatrix.m;\r\n const normalWorldToView = this._normalWorldToView;\r\n normalWorldToView[0] = viewMatrix[0];\r\n normalWorldToView[1] = viewMatrix[1];\r\n normalWorldToView[2] = viewMatrix[2];\r\n normalWorldToView[3] = viewMatrix[4];\r\n normalWorldToView[4] = viewMatrix[5];\r\n normalWorldToView[5] = viewMatrix[6];\r\n normalWorldToView[6] = viewMatrix[8];\r\n normalWorldToView[7] = viewMatrix[9];\r\n normalWorldToView[8] = viewMatrix[10];\r\n effect.setMatrix3x3(\"normalWorldToView\", normalWorldToView);\r\n }\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 if (this._normalsInWorldSpace) {\r\n defines += `\\n#define NORMAL_WORLDSPACE`;\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, type Scene, type EffectWrapperCreationOptions } from \"core/index\";\r\nimport { Constants } from \"core/Engines/constants\";\r\nimport { EffectWrapper } from \"core/Materials/effectRenderer.pure\";\r\nimport { ShaderLanguage } from \"core/Materials/shaderLanguage\";\r\nimport { Matrix, Vector2, Vector3 } from \"core/Maths/math.vector.pure\";\r\nimport { Camera } from \"core/Cameras/camera.pure\";\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.pure\";\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 \"normalWorldToView\",\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 private _normalsInWorldSpace = false;\r\n\r\n public set normalsInWorldSpace(value: boolean) {\r\n if (this._normalsInWorldSpace === value) {\r\n return;\r\n }\r\n this._normalsInWorldSpace = value;\r\n this.updateEffect();\r\n }\r\n\r\n public get normalsInWorldSpace(): boolean {\r\n return this._normalsInWorldSpace;\r\n }\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 private readonly _normalWorldToViewMatrix = new Matrix();\r\n private readonly _normalWorldToView = new Float32Array(9);\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 if (this._normalsInWorldSpace) {\r\n camera.getViewMatrix().toNormalMatrix(this._normalWorldToViewMatrix);\r\n const viewMatrix = this._normalWorldToViewMatrix.m;\r\n const normalWorldToView = this._normalWorldToView;\r\n normalWorldToView[0] = viewMatrix[0];\r\n normalWorldToView[1] = viewMatrix[1];\r\n normalWorldToView[2] = viewMatrix[2];\r\n normalWorldToView[3] = viewMatrix[4];\r\n normalWorldToView[4] = viewMatrix[5];\r\n normalWorldToView[5] = viewMatrix[6];\r\n normalWorldToView[6] = viewMatrix[8];\r\n normalWorldToView[7] = viewMatrix[9];\r\n normalWorldToView[8] = viewMatrix[10];\r\n effect.setMatrix3x3(\"normalWorldToView\", normalWorldToView);\r\n }\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 if (this._normalsInWorldSpace) {\r\n defines += `\\n#define NORMAL_WORLDSPACE`;\r\n }\r\n\r\n return defines;\r\n }\r\n}\r\n"]}
|
|
@@ -7,3 +7,6 @@ import "../Shaders/depth.vertex.js";
|
|
|
7
7
|
import "../Shaders/volumetricLightScattering.fragment.js";
|
|
8
8
|
import "../Shaders/volumetricLightScatteringPass.vertex.js";
|
|
9
9
|
import "../Shaders/volumetricLightScatteringPass.fragment.js";
|
|
10
|
+
import "../ShadersWGSL/volumetricLightScattering.fragment.js";
|
|
11
|
+
import "../ShadersWGSL/volumetricLightScatteringPass.vertex.js";
|
|
12
|
+
import "../ShadersWGSL/volumetricLightScatteringPass.fragment.js";
|
|
@@ -7,6 +7,9 @@ import "../Shaders/depth.vertex.js";
|
|
|
7
7
|
import "../Shaders/volumetricLightScattering.fragment.js";
|
|
8
8
|
import "../Shaders/volumetricLightScatteringPass.vertex.js";
|
|
9
9
|
import "../Shaders/volumetricLightScatteringPass.fragment.js";
|
|
10
|
+
import "../ShadersWGSL/volumetricLightScattering.fragment.js";
|
|
11
|
+
import "../ShadersWGSL/volumetricLightScatteringPass.vertex.js";
|
|
12
|
+
import "../ShadersWGSL/volumetricLightScatteringPass.fragment.js";
|
|
10
13
|
import { RegisterVolumetricLightScatteringPostProcess } from "./volumetricLightScatteringPostProcess.pure.js";
|
|
11
14
|
RegisterVolumetricLightScatteringPostProcess();
|
|
12
15
|
//# sourceMappingURL=volumetricLightScatteringPostProcess.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"volumetricLightScatteringPostProcess.js","sourceRoot":"","sources":["../../../../dev/core/src/PostProcesses/volumetricLightScatteringPostProcess.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,cAAc,6CAA6C,CAAC;AAE5D,OAAO,yBAAyB,CAAC;AACjC,OAAO,+CAA+C,CAAC;AACvD,OAAO,iDAAiD,CAAC;AACzD,OAAO,mDAAmD,CAAC;
|
|
1
|
+
{"version":3,"file":"volumetricLightScatteringPostProcess.js","sourceRoot":"","sources":["../../../../dev/core/src/PostProcesses/volumetricLightScatteringPostProcess.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,cAAc,6CAA6C,CAAC;AAE5D,OAAO,yBAAyB,CAAC;AACjC,OAAO,+CAA+C,CAAC;AACvD,OAAO,iDAAiD,CAAC;AACzD,OAAO,mDAAmD,CAAC;AAC3D,OAAO,mDAAmD,CAAC;AAC3D,OAAO,qDAAqD,CAAC;AAC7D,OAAO,uDAAuD,CAAC;AAE/D,OAAO,EAAE,4CAA4C,EAAE,MAAM,6CAA6C,CAAC;AAC3G,4CAA4C,EAAE,CAAC","sourcesContent":["/**\n * Re-exports pure implementation and applies runtime side effects.\n * Import volumetricLightScatteringPostProcess.pure for tree-shakeable, side-effect-free usage.\n */\nexport * from \"./volumetricLightScatteringPostProcess.pure\";\n\nimport \"../Shaders/depth.vertex\";\nimport \"../Shaders/volumetricLightScattering.fragment\";\nimport \"../Shaders/volumetricLightScatteringPass.vertex\";\nimport \"../Shaders/volumetricLightScatteringPass.fragment\";\nimport \"../ShadersWGSL/volumetricLightScattering.fragment\";\nimport \"../ShadersWGSL/volumetricLightScatteringPass.vertex\";\nimport \"../ShadersWGSL/volumetricLightScatteringPass.fragment\";\n\nimport { RegisterVolumetricLightScatteringPostProcess } from \"./volumetricLightScatteringPostProcess.pure\";\nRegisterVolumetricLightScatteringPostProcess();\n"]}
|
|
@@ -81,6 +81,7 @@ export declare class VolumetricLightScatteringPostProcess extends PostProcess {
|
|
|
81
81
|
* @param scene The constructor needs a scene reference to initialize internal components. If "camera" is null a "scene" must be provided
|
|
82
82
|
*/
|
|
83
83
|
constructor(name: string, ratio: any, camera: Nullable<Camera>, mesh?: Mesh, samples?: number, samplingMode?: number, engine?: AbstractEngine, reusable?: boolean, scene?: Scene);
|
|
84
|
+
protected _gatherImports(useWebGPU: boolean, list: Promise<any>[]): void;
|
|
84
85
|
/**
|
|
85
86
|
* Returns the string "VolumetricLightScatteringPostProcess"
|
|
86
87
|
* @returns "VolumetricLightScatteringPostProcess"
|
|
@@ -78,7 +78,9 @@ let VolumetricLightScatteringPostProcess = (() => {
|
|
|
78
78
|
* @param scene The constructor needs a scene reference to initialize internal components. If "camera" is null a "scene" must be provided
|
|
79
79
|
*/
|
|
80
80
|
constructor(name, ratio, camera, mesh, samples = 100, samplingMode = Texture.BILINEAR_SAMPLINGMODE, engine, reusable, scene) {
|
|
81
|
-
|
|
81
|
+
const selectedEngine = engine ?? camera?.getScene().getEngine() ?? scene?.getEngine();
|
|
82
|
+
const shaderLanguage = selectedEngine?.isWebGPU && !PostProcess.ForceGLSL ? 1 /* ShaderLanguage.WGSL */ : 0 /* ShaderLanguage.GLSL */;
|
|
83
|
+
super(name, "volumetricLightScattering", ["decay", "exposure", "weight", "meshPositionOnScreen", "density"], ["lightScatteringSampler"], ratio.postProcessRatio || ratio, camera, samplingMode, selectedEngine, reusable, "#define NUM_SAMPLES " + samples, undefined, undefined, undefined, undefined, undefined, shaderLanguage);
|
|
82
84
|
this._screenCoordinates = Vector2.Zero();
|
|
83
85
|
/**
|
|
84
86
|
* Custom position of the mesh. Used if "useCustomMeshPosition" is set to "true"
|
|
@@ -145,6 +147,24 @@ let VolumetricLightScatteringPostProcess = (() => {
|
|
|
145
147
|
effect.setVector2("meshPositionOnScreen", this._screenCoordinates);
|
|
146
148
|
});
|
|
147
149
|
}
|
|
150
|
+
_gatherImports(useWebGPU, list) {
|
|
151
|
+
if (useWebGPU) {
|
|
152
|
+
this._webGPUReady = true;
|
|
153
|
+
list.push(Promise.all([
|
|
154
|
+
import("../ShadersWGSL/volumetricLightScattering.fragment.js"),
|
|
155
|
+
import("../ShadersWGSL/volumetricLightScatteringPass.vertex.js"),
|
|
156
|
+
import("../ShadersWGSL/volumetricLightScatteringPass.fragment.js"),
|
|
157
|
+
]));
|
|
158
|
+
}
|
|
159
|
+
else {
|
|
160
|
+
list.push(Promise.all([
|
|
161
|
+
import("../Shaders/volumetricLightScattering.fragment.js"),
|
|
162
|
+
import("../Shaders/volumetricLightScatteringPass.vertex.js"),
|
|
163
|
+
import("../Shaders/volumetricLightScatteringPass.fragment.js"),
|
|
164
|
+
]));
|
|
165
|
+
}
|
|
166
|
+
super._gatherImports(useWebGPU, list);
|
|
167
|
+
}
|
|
148
168
|
/**
|
|
149
169
|
* Returns the string "VolumetricLightScatteringPostProcess"
|
|
150
170
|
* @returns "VolumetricLightScatteringPostProcess"
|
|
@@ -240,6 +260,7 @@ let VolumetricLightScatteringPostProcess = (() => {
|
|
|
240
260
|
const cachedDefines = drawWrapper.defines;
|
|
241
261
|
const join = defines.join("\n");
|
|
242
262
|
if (cachedDefines !== join) {
|
|
263
|
+
const engine = mesh.getScene().getEngine();
|
|
243
264
|
const uniforms = [
|
|
244
265
|
"world",
|
|
245
266
|
"mBones",
|
|
@@ -256,10 +277,7 @@ let VolumetricLightScatteringPostProcess = (() => {
|
|
|
256
277
|
"bakedVertexAnimationTexture",
|
|
257
278
|
];
|
|
258
279
|
const samplers = ["diffuseSampler", "morphTargets", "boneSampler", "bakedVertexAnimationTexture"];
|
|
259
|
-
drawWrapper.setEffect(
|
|
260
|
-
.getScene()
|
|
261
|
-
.getEngine()
|
|
262
|
-
.createEffect("volumetricLightScatteringPass", {
|
|
280
|
+
drawWrapper.setEffect(engine.createEffect("volumetricLightScatteringPass", {
|
|
263
281
|
attributes: attribs,
|
|
264
282
|
uniformsNames: uniforms,
|
|
265
283
|
uniformBuffersNames: [],
|
|
@@ -269,7 +287,8 @@ let VolumetricLightScatteringPostProcess = (() => {
|
|
|
269
287
|
onCompiled: null,
|
|
270
288
|
onError: null,
|
|
271
289
|
indexParameters: { maxSimultaneousMorphTargets: numMorphInfluencers },
|
|
272
|
-
|
|
290
|
+
shaderLanguage: engine.isWebGPU && !PostProcess.ForceGLSL ? 1 /* ShaderLanguage.WGSL */ : 0 /* ShaderLanguage.GLSL */,
|
|
291
|
+
}, engine), join);
|
|
273
292
|
}
|
|
274
293
|
return drawWrapper.effect.isReady();
|
|
275
294
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"volumetricLightScatteringPostProcess.pure.js","sourceRoot":"","sources":["../../../../dev/core/src/PostProcesses/volumetricLightScatteringPostProcess.pure.ts"],"names":[],"mappings":"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","sourcesContent":["/** This file must only contain pure code and pure imports */\r\n\r\nimport { serializeAsVector3, serialize, serializeAsMeshReference } from \"../Misc/decorators\";\r\nimport { type SmartArray } from \"../Misc/smartArray\";\r\nimport { Logger } from \"../Misc/logger\";\r\nimport { Vector2, Vector3, Matrix } from \"../Maths/math.vector.pure\";\r\nimport { VertexBuffer } from \"../Buffers/buffer.pure\";\r\nimport { AbstractMesh } from \"../Meshes/abstractMesh.pure\";\r\nimport { type SubMesh } from \"../Meshes/subMesh.pure\";\r\nimport { type Mesh } from \"../Meshes/mesh.pure\";\r\nimport { type Camera } from \"../Cameras/camera.pure\";\r\nimport { type Effect, type IEffectCreationOptions } from \"../Materials/effect.pure\";\r\nimport { Material } from \"../Materials/material.pure\";\r\nimport { StandardMaterial } from \"../Materials/standardMaterial.pure\";\r\nimport { Texture } from \"../Materials/Textures/texture.pure\";\r\nimport { RenderTargetTexture } from \"../Materials/Textures/renderTargetTexture.pure\";\r\nimport { PostProcess } from \"./postProcess.pure\";\r\nimport { Constants } from \"../Engines/constants\";\r\nimport { type Scene } from \"../scene.pure\";\r\nimport { CreatePlane } from \"../Meshes/Builders/planeBuilder.pure\";\r\nimport { Color4, Color3 } from \"../Maths/math.color.pure\";\r\nimport { Viewport } from \"../Maths/math.viewport\";\r\nimport { type Nullable } from \"../types\";\r\nimport { BindBonesParameters, BindMorphTargetParameters, PrepareDefinesAndAttributesForMorphTargets, PushAttributesForInstances } from \"../Materials/materialHelper.functions\";\r\nimport { type AbstractEngine } from \"../Engines/abstractEngine.pure\";\r\nimport { EffectFallbacks } from \"core/Materials/effectFallbacks\";\r\nimport { RegisterClass } from \"../Misc/typeStore\";\r\n\r\n/**\r\n * Inspired by https://developer.nvidia.com/gpugems/gpugems3/part-ii-light-and-shadows/chapter-13-volumetric-light-scattering-post-process\r\n */\r\nexport class VolumetricLightScatteringPostProcess extends PostProcess {\r\n // Members\r\n private _volumetricLightScatteringRTT: RenderTargetTexture;\r\n private _viewPort: Viewport;\r\n private _screenCoordinates: Vector2 = Vector2.Zero();\r\n\r\n /**\r\n * If not undefined, the mesh position is computed from the attached node position\r\n */\r\n public attachedNode: { position: Vector3 };\r\n\r\n /**\r\n * Custom position of the mesh. Used if \"useCustomMeshPosition\" is set to \"true\"\r\n */\r\n @serializeAsVector3()\r\n public customMeshPosition: Vector3 = Vector3.Zero();\r\n\r\n /**\r\n * Set if the post-process should use a custom position for the light source (true) or the internal mesh position (false)\r\n */\r\n @serialize()\r\n public useCustomMeshPosition: boolean = false;\r\n\r\n /**\r\n * If the post-process should inverse the light scattering direction\r\n */\r\n @serialize()\r\n public invert: boolean = true;\r\n\r\n /**\r\n * The internal mesh used by the post-process\r\n */\r\n @serializeAsMeshReference()\r\n public mesh: Mesh;\r\n\r\n /**\r\n * @internal\r\n * VolumetricLightScatteringPostProcess.useDiffuseColor is no longer used, use the mesh material directly instead\r\n */\r\n public get useDiffuseColor(): boolean {\r\n Logger.Warn(\"VolumetricLightScatteringPostProcess.useDiffuseColor is no longer used, use the mesh material directly instead\");\r\n return false;\r\n }\r\n\r\n public set useDiffuseColor(useDiffuseColor: boolean) {\r\n Logger.Warn(\"VolumetricLightScatteringPostProcess.useDiffuseColor is no longer used, use the mesh material directly instead\");\r\n }\r\n\r\n /**\r\n * Array containing the excluded meshes not rendered in the internal pass\r\n */\r\n @serialize()\r\n public excludedMeshes: AbstractMesh[] = [];\r\n\r\n /**\r\n * Array containing the only meshes rendered in the internal pass.\r\n * If this array is not empty, only the meshes from this array are rendered in the internal pass\r\n */\r\n @serialize()\r\n public includedMeshes: AbstractMesh[] = [];\r\n\r\n /**\r\n * Controls the overall intensity of the post-process\r\n */\r\n @serialize()\r\n public exposure = 0.3;\r\n\r\n /**\r\n * Dissipates each sample's contribution in range [0, 1]\r\n */\r\n @serialize()\r\n public decay = 0.96815;\r\n\r\n /**\r\n * Controls the overall intensity of each sample\r\n */\r\n @serialize()\r\n public weight = 0.58767;\r\n\r\n /**\r\n * Controls the density of each sample\r\n */\r\n @serialize()\r\n public density = 0.926;\r\n\r\n /**\r\n * @constructor\r\n * @param name The post-process name\r\n * @param ratio The size of the post-process and/or internal pass (0.5 means that your postprocess will have a width = canvas.width 0.5 and a height = canvas.height 0.5)\r\n * @param camera The camera that the post-process will be attached to\r\n * @param mesh The mesh used to create the light scattering\r\n * @param samples The post-process quality, default 100\r\n * @param samplingMode The post-process filtering mode\r\n * @param engine The babylon engine\r\n * @param reusable If the post-process is reusable\r\n * @param scene The constructor needs a scene reference to initialize internal components. If \"camera\" is null a \"scene\" must be provided\r\n */\r\n constructor(\r\n name: string,\r\n ratio: any,\r\n camera: Nullable<Camera>,\r\n mesh?: Mesh,\r\n samples: number = 100,\r\n samplingMode: number = Texture.BILINEAR_SAMPLINGMODE,\r\n engine?: AbstractEngine,\r\n reusable?: boolean,\r\n scene?: Scene\r\n ) {\r\n super(\r\n name,\r\n \"volumetricLightScattering\",\r\n [\"decay\", \"exposure\", \"weight\", \"meshPositionOnScreen\", \"density\"],\r\n [\"lightScatteringSampler\"],\r\n ratio.postProcessRatio || ratio,\r\n camera,\r\n samplingMode,\r\n engine,\r\n reusable,\r\n \"#define NUM_SAMPLES \" + samples\r\n );\r\n scene = camera?.getScene() ?? scene ?? this._scene; // parameter \"scene\" can be null.\r\n\r\n engine = scene.getEngine();\r\n this._viewPort = new Viewport(0, 0, 1, 1).toGlobal(engine.getRenderWidth(), engine.getRenderHeight());\r\n\r\n // Configure mesh\r\n this.mesh = mesh ?? VolumetricLightScatteringPostProcess.CreateDefaultMesh(\"VolumetricLightScatteringMesh\", scene);\r\n // Configure\r\n this._createPass(scene, ratio.passRatio || ratio);\r\n\r\n this.onActivate = (camera: Camera) => {\r\n if (!this.isSupported) {\r\n this.dispose(camera);\r\n }\r\n\r\n this.onActivate = null;\r\n };\r\n\r\n this.onApplyObservable.add((effect: Effect) => {\r\n this._updateMeshScreenCoordinates(scene);\r\n\r\n effect.setTexture(\"lightScatteringSampler\", this._volumetricLightScatteringRTT);\r\n effect.setFloat(\"exposure\", this.exposure);\r\n effect.setFloat(\"decay\", this.decay);\r\n effect.setFloat(\"weight\", this.weight);\r\n effect.setFloat(\"density\", this.density);\r\n effect.setVector2(\"meshPositionOnScreen\", this._screenCoordinates);\r\n });\r\n }\r\n\r\n /**\r\n * Returns the string \"VolumetricLightScatteringPostProcess\"\r\n * @returns \"VolumetricLightScatteringPostProcess\"\r\n */\r\n public override getClassName(): string {\r\n return \"VolumetricLightScatteringPostProcess\";\r\n }\r\n\r\n private _isReady(subMesh: SubMesh, useInstances: boolean): boolean {\r\n const mesh = subMesh.getMesh();\r\n\r\n // Render this.mesh as default\r\n if (mesh === this.mesh && mesh.material) {\r\n return mesh.material.isReady(mesh);\r\n }\r\n\r\n const renderingMaterial = mesh._internalAbstractMeshDataInfo._materialForRenderPass?.[this._scene.getEngine().currentRenderPassId];\r\n\r\n if (renderingMaterial) {\r\n return renderingMaterial.isReadyForSubMesh(mesh, subMesh, useInstances);\r\n }\r\n\r\n const defines = [];\r\n const attribs = [VertexBuffer.PositionKind];\r\n const material = subMesh.getMaterial();\r\n\r\n let uv1 = false;\r\n let uv2 = false;\r\n const color = false;\r\n\r\n // Alpha test\r\n if (material) {\r\n const needAlphaTesting = material.needAlphaTestingForMesh(mesh);\r\n if (needAlphaTesting) {\r\n defines.push(\"#define ALPHATEST\");\r\n }\r\n\r\n if (mesh.isVerticesDataPresent(VertexBuffer.UVKind)) {\r\n attribs.push(VertexBuffer.UVKind);\r\n defines.push(\"#define UV1\");\r\n uv1 = needAlphaTesting;\r\n }\r\n if (mesh.isVerticesDataPresent(VertexBuffer.UV2Kind)) {\r\n attribs.push(VertexBuffer.UV2Kind);\r\n defines.push(\"#define UV2\");\r\n uv2 = needAlphaTesting;\r\n }\r\n }\r\n\r\n // Bones\r\n const fallbacks = new EffectFallbacks();\r\n if (mesh.useBones && mesh.computeBonesUsingShaders && mesh.skeleton) {\r\n attribs.push(VertexBuffer.MatricesIndicesKind);\r\n attribs.push(VertexBuffer.MatricesWeightsKind);\r\n if (mesh.numBoneInfluencers > 4) {\r\n attribs.push(VertexBuffer.MatricesIndicesExtraKind);\r\n attribs.push(VertexBuffer.MatricesWeightsExtraKind);\r\n }\r\n defines.push(\"#define NUM_BONE_INFLUENCERS \" + mesh.numBoneInfluencers);\r\n if (mesh.numBoneInfluencers > 0) {\r\n fallbacks.addCPUSkinningFallback(0, mesh);\r\n }\r\n\r\n const skeleton = mesh.skeleton;\r\n if (skeleton.isUsingTextureForMatrices) {\r\n defines.push(\"#define BONETEXTURE\");\r\n } else {\r\n defines.push(\"#define BonesPerMesh \" + (skeleton.bones.length + 1));\r\n }\r\n } else {\r\n defines.push(\"#define NUM_BONE_INFLUENCERS 0\");\r\n }\r\n\r\n // Morph targets\r\n const numMorphInfluencers = mesh.morphTargetManager\r\n ? PrepareDefinesAndAttributesForMorphTargets(\r\n mesh.morphTargetManager,\r\n defines,\r\n attribs,\r\n mesh,\r\n true, // usePositionMorph\r\n false, // useNormalMorph\r\n false, // useTangentMorph\r\n uv1, // useUVMorph\r\n uv2, // useUV2Morph\r\n color // useColorMorph\r\n )\r\n : 0;\r\n\r\n // Instances\r\n if (useInstances) {\r\n defines.push(\"#define INSTANCES\");\r\n PushAttributesForInstances(attribs);\r\n if (subMesh.getRenderingMesh().hasThinInstances) {\r\n defines.push(\"#define THIN_INSTANCES\");\r\n }\r\n }\r\n\r\n // Baked vertex animations\r\n const bvaManager = mesh.bakedVertexAnimationManager;\r\n if (bvaManager && bvaManager.isEnabled) {\r\n defines.push(\"#define BAKED_VERTEX_ANIMATION_TEXTURE\");\r\n if (useInstances) {\r\n attribs.push(\"bakedVertexAnimationSettingsInstanced\");\r\n }\r\n }\r\n\r\n // Get correct effect\r\n const drawWrapper = subMesh._getDrawWrapper(undefined, true)!;\r\n const cachedDefines = drawWrapper.defines;\r\n const join = defines.join(\"\\n\");\r\n if (cachedDefines !== join) {\r\n const uniforms = [\r\n \"world\",\r\n \"mBones\",\r\n \"boneTextureInfo\",\r\n \"viewProjection\",\r\n \"diffuseMatrix\",\r\n \"morphTargetInfluences\",\r\n \"morphTargetCount\",\r\n \"morphTargetTextureInfo\",\r\n \"morphTargetTextureIndices\",\r\n \"bakedVertexAnimationSettings\",\r\n \"bakedVertexAnimationTextureSizeInverted\",\r\n \"bakedVertexAnimationTime\",\r\n \"bakedVertexAnimationTexture\",\r\n ];\r\n const samplers = [\"diffuseSampler\", \"morphTargets\", \"boneSampler\", \"bakedVertexAnimationTexture\"];\r\n\r\n drawWrapper.setEffect(\r\n mesh\r\n .getScene()\r\n .getEngine()\r\n .createEffect(\r\n \"volumetricLightScatteringPass\",\r\n <IEffectCreationOptions>{\r\n attributes: attribs,\r\n uniformsNames: uniforms,\r\n uniformBuffersNames: [],\r\n samplers: samplers,\r\n defines: join,\r\n fallbacks: fallbacks,\r\n onCompiled: null,\r\n onError: null,\r\n indexParameters: { maxSimultaneousMorphTargets: numMorphInfluencers },\r\n },\r\n mesh.getScene().getEngine()\r\n ),\r\n join\r\n );\r\n }\r\n\r\n return drawWrapper.effect!.isReady();\r\n }\r\n\r\n /**\r\n * Sets the new light position for light scattering effect\r\n * @param position The new custom light position\r\n */\r\n public setCustomMeshPosition(position: Vector3): void {\r\n this.customMeshPosition = position;\r\n }\r\n\r\n /**\r\n * Returns the light position for light scattering effect\r\n * @returns Vector3 The custom light position\r\n */\r\n public getCustomMeshPosition(): Vector3 {\r\n return this.customMeshPosition;\r\n }\r\n\r\n /**\r\n * Disposes the internal assets and detaches the post-process from the camera\r\n * @param camera The camera from which to detach the post-process\r\n */\r\n public override dispose(camera: Camera): void {\r\n const rttIndex = camera.getScene().customRenderTargets.indexOf(this._volumetricLightScatteringRTT);\r\n if (rttIndex !== -1) {\r\n camera.getScene().customRenderTargets.splice(rttIndex, 1);\r\n }\r\n\r\n this._volumetricLightScatteringRTT.dispose();\r\n super.dispose(camera);\r\n }\r\n\r\n /**\r\n * Returns the render target texture used by the post-process\r\n * @returns the render target texture used by the post-process\r\n */\r\n public getPass(): RenderTargetTexture {\r\n return this._volumetricLightScatteringRTT;\r\n }\r\n\r\n // Private methods\r\n private _meshExcluded(mesh: AbstractMesh) {\r\n if ((this.includedMeshes.length > 0 && this.includedMeshes.indexOf(mesh) === -1) || (this.excludedMeshes.length > 0 && this.excludedMeshes.indexOf(mesh) !== -1)) {\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n private _createPass(scene: Scene, ratio: number): void {\r\n const engine = scene.getEngine();\r\n\r\n this._volumetricLightScatteringRTT = new RenderTargetTexture(\r\n \"volumetricLightScatteringMap\",\r\n { width: engine.getRenderWidth() * ratio, height: engine.getRenderHeight() * ratio },\r\n scene,\r\n false,\r\n true,\r\n Constants.TEXTURETYPE_UNSIGNED_BYTE\r\n );\r\n this._volumetricLightScatteringRTT.wrapU = Texture.CLAMP_ADDRESSMODE;\r\n this._volumetricLightScatteringRTT.wrapV = Texture.CLAMP_ADDRESSMODE;\r\n this._volumetricLightScatteringRTT.renderList = null;\r\n this._volumetricLightScatteringRTT.renderParticles = false;\r\n this._volumetricLightScatteringRTT.ignoreCameraViewport = true;\r\n\r\n const camera = this.getCamera();\r\n if (camera) {\r\n camera.customRenderTargets.push(this._volumetricLightScatteringRTT);\r\n } else {\r\n scene.customRenderTargets.push(this._volumetricLightScatteringRTT);\r\n }\r\n\r\n // Custom render function for submeshes\r\n const renderSubMesh = (subMesh: SubMesh): void => {\r\n const renderingMesh = subMesh.getRenderingMesh();\r\n const effectiveMesh = subMesh.getEffectiveMesh();\r\n if (this._meshExcluded(renderingMesh)) {\r\n return;\r\n }\r\n\r\n effectiveMesh._internalAbstractMeshDataInfo._isActiveIntermediate = false;\r\n\r\n const material = subMesh.getMaterial();\r\n\r\n if (!material) {\r\n return;\r\n }\r\n\r\n const scene = renderingMesh.getScene();\r\n const engine = scene.getEngine();\r\n\r\n // Culling\r\n engine.setState(material.backFaceCulling, undefined, undefined, undefined, material.cullBackFaces);\r\n\r\n // Managing instances\r\n const batch = renderingMesh._getInstancesRenderList(subMesh._id, !!subMesh.getReplacementMesh());\r\n\r\n if (batch.mustReturn) {\r\n return;\r\n }\r\n\r\n const hardwareInstancedRendering = engine.getCaps().instancedArrays && (batch.visibleInstances[subMesh._id] !== null || renderingMesh.hasThinInstances);\r\n\r\n if (this._isReady(subMesh, hardwareInstancedRendering)) {\r\n const renderingMaterial = effectiveMesh._internalAbstractMeshDataInfo._materialForRenderPass?.[engine.currentRenderPassId];\r\n\r\n let drawWrapper = subMesh._getDrawWrapper();\r\n if (renderingMesh === this.mesh && !drawWrapper) {\r\n drawWrapper = material._getDrawWrapper();\r\n }\r\n\r\n if (!drawWrapper) {\r\n return;\r\n }\r\n\r\n const effect = drawWrapper.effect!;\r\n\r\n engine.enableEffect(drawWrapper);\r\n if (!hardwareInstancedRendering) {\r\n renderingMesh._bind(subMesh, effect, material.fillMode);\r\n }\r\n\r\n if (renderingMesh === this.mesh) {\r\n material.bind(effectiveMesh.getWorldMatrix(), renderingMesh);\r\n } else if (renderingMaterial) {\r\n renderingMaterial.bindForSubMesh(effectiveMesh.getWorldMatrix(), effectiveMesh as Mesh, subMesh);\r\n } else {\r\n effect.setMatrix(\"viewProjection\", scene.getTransformMatrix());\r\n\r\n // Alpha test\r\n if (material.needAlphaTestingForMesh(effectiveMesh)) {\r\n const alphaTexture = material.getAlphaTestTexture();\r\n\r\n if (alphaTexture) {\r\n effect.setTexture(\"diffuseSampler\", alphaTexture);\r\n effect.setMatrix(\"diffuseMatrix\", alphaTexture.getTextureMatrix());\r\n }\r\n }\r\n\r\n // Bones\r\n BindBonesParameters(renderingMesh, effect);\r\n\r\n // Morph targets\r\n BindMorphTargetParameters(renderingMesh, effect);\r\n if (renderingMesh.morphTargetManager && renderingMesh.morphTargetManager.isUsingTextureForTargets) {\r\n renderingMesh.morphTargetManager._bind(effect);\r\n }\r\n\r\n // Baked vertex animations\r\n const bvaManager = subMesh.getMesh().bakedVertexAnimationManager;\r\n if (bvaManager && bvaManager.isEnabled) {\r\n bvaManager.bind(effect, hardwareInstancedRendering);\r\n }\r\n }\r\n\r\n if (hardwareInstancedRendering && renderingMesh.hasThinInstances) {\r\n effect.setMatrix(\"world\", effectiveMesh.getWorldMatrix());\r\n }\r\n\r\n // Draw\r\n renderingMesh._processRendering(effectiveMesh, subMesh, effect, Material.TriangleFillMode, batch, hardwareInstancedRendering, (isInstance, world) => {\r\n if (!isInstance) {\r\n effect.setMatrix(\"world\", world);\r\n }\r\n });\r\n }\r\n };\r\n\r\n // Render target texture callbacks\r\n let savedSceneClearColor: Color4;\r\n const sceneClearColor = new Color4(0.0, 0.0, 0.0, 1.0);\r\n\r\n this._volumetricLightScatteringRTT.onBeforeRenderObservable.add((): void => {\r\n savedSceneClearColor = scene.clearColor;\r\n scene.clearColor = sceneClearColor;\r\n });\r\n\r\n this._volumetricLightScatteringRTT.onAfterRenderObservable.add((): void => {\r\n scene.clearColor = savedSceneClearColor;\r\n });\r\n\r\n this._volumetricLightScatteringRTT.customIsReadyFunction = (mesh: AbstractMesh, refreshRate: number, preWarm?: boolean) => {\r\n if ((preWarm || refreshRate === 0) && mesh.subMeshes) {\r\n for (let i = 0; i < mesh.subMeshes.length; ++i) {\r\n const subMesh = mesh.subMeshes[i];\r\n const material = subMesh.getMaterial();\r\n const renderingMesh = subMesh.getRenderingMesh();\r\n\r\n if (!material) {\r\n continue;\r\n }\r\n\r\n const batch = renderingMesh._getInstancesRenderList(subMesh._id, !!subMesh.getReplacementMesh());\r\n const hardwareInstancedRendering = engine.getCaps().instancedArrays && (batch.visibleInstances[subMesh._id] !== null || renderingMesh.hasThinInstances);\r\n\r\n if (!this._isReady(subMesh, hardwareInstancedRendering)) {\r\n return false;\r\n }\r\n }\r\n }\r\n\r\n return true;\r\n };\r\n\r\n this._volumetricLightScatteringRTT.customRenderFunction = (\r\n opaqueSubMeshes: SmartArray<SubMesh>,\r\n alphaTestSubMeshes: SmartArray<SubMesh>,\r\n transparentSubMeshes: SmartArray<SubMesh>,\r\n depthOnlySubMeshes: SmartArray<SubMesh>\r\n ): void => {\r\n const engine = scene.getEngine();\r\n let index: number;\r\n\r\n if (depthOnlySubMeshes.length) {\r\n engine.setColorWrite(false);\r\n for (index = 0; index < depthOnlySubMeshes.length; index++) {\r\n renderSubMesh(depthOnlySubMeshes.data[index]);\r\n }\r\n engine.setColorWrite(true);\r\n }\r\n\r\n for (index = 0; index < opaqueSubMeshes.length; index++) {\r\n renderSubMesh(opaqueSubMeshes.data[index]);\r\n }\r\n\r\n for (index = 0; index < alphaTestSubMeshes.length; index++) {\r\n renderSubMesh(alphaTestSubMeshes.data[index]);\r\n }\r\n\r\n if (transparentSubMeshes.length) {\r\n // Sort sub meshes\r\n for (index = 0; index < transparentSubMeshes.length; index++) {\r\n const submesh = transparentSubMeshes.data[index];\r\n const boundingInfo = submesh.getBoundingInfo();\r\n\r\n if (boundingInfo && scene.activeCamera) {\r\n submesh._alphaIndex = submesh.getMesh().alphaIndex;\r\n submesh._distanceToCamera = boundingInfo.boundingSphere.centerWorld.subtract(scene.activeCamera.position).length();\r\n }\r\n }\r\n\r\n const sortedArray = transparentSubMeshes.data.slice(0, transparentSubMeshes.length);\r\n sortedArray.sort((a, b) => {\r\n // Alpha index first\r\n if (a._alphaIndex > b._alphaIndex) {\r\n return 1;\r\n }\r\n if (a._alphaIndex < b._alphaIndex) {\r\n return -1;\r\n }\r\n\r\n // Then distance to camera\r\n if (a._distanceToCamera < b._distanceToCamera) {\r\n return 1;\r\n }\r\n if (a._distanceToCamera > b._distanceToCamera) {\r\n return -1;\r\n }\r\n\r\n return 0;\r\n });\r\n\r\n // Render sub meshes\r\n engine.setAlphaMode(Constants.ALPHA_COMBINE);\r\n for (index = 0; index < sortedArray.length; index++) {\r\n renderSubMesh(sortedArray[index]);\r\n }\r\n engine.setAlphaMode(Constants.ALPHA_DISABLE);\r\n }\r\n };\r\n }\r\n\r\n private _updateMeshScreenCoordinates(scene: Scene): void {\r\n const transform = scene.getTransformMatrix();\r\n let meshPosition: Vector3;\r\n\r\n if (this.useCustomMeshPosition) {\r\n meshPosition = this.customMeshPosition;\r\n } else if (this.attachedNode) {\r\n meshPosition = this.attachedNode.position;\r\n } else {\r\n meshPosition = this.mesh.parent ? this.mesh.getAbsolutePosition() : this.mesh.position;\r\n }\r\n\r\n const pos = Vector3.Project(meshPosition, Matrix.Identity(), transform, this._viewPort);\r\n\r\n this._screenCoordinates.x = pos.x / this._viewPort.width;\r\n this._screenCoordinates.y = pos.y / this._viewPort.height;\r\n\r\n if (this.invert) {\r\n this._screenCoordinates.y = 1.0 - this._screenCoordinates.y;\r\n }\r\n }\r\n\r\n // Static methods\r\n /**\r\n * Creates a default mesh for the Volumeric Light Scattering post-process\r\n * @param name The mesh name\r\n * @param scene The scene where to create the mesh\r\n * @returns the default mesh\r\n */\r\n public static CreateDefaultMesh(name: string, scene: Scene): Mesh {\r\n const mesh = CreatePlane(name, { size: 1 }, scene);\r\n mesh.billboardMode = AbstractMesh.BILLBOARDMODE_ALL;\r\n\r\n const material = new StandardMaterial(name + \"Material\", scene);\r\n material.emissiveColor = new Color3(1, 1, 1);\r\n\r\n mesh.material = material;\r\n\r\n return mesh;\r\n }\r\n}\r\n\r\nlet _Registered = false;\r\n/**\r\n * Register side effects for volumetricLightScatteringPostProcess.\r\n * Safe to call multiple times; only the first call has an effect.\r\n */\r\nexport function RegisterVolumetricLightScatteringPostProcess(): void {\r\n if (_Registered) {\r\n return;\r\n }\r\n _Registered = true;\r\n\r\n RegisterClass(\"BABYLON.VolumetricLightScatteringPostProcess\", VolumetricLightScatteringPostProcess);\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"volumetricLightScatteringPostProcess.pure.js","sourceRoot":"","sources":["../../../../dev/core/src/PostProcesses/volumetricLightScatteringPostProcess.pure.ts"],"names":[],"mappings":"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","sourcesContent":["/** This file must only contain pure code and pure imports */\r\n\r\nimport { serializeAsVector3, serialize, serializeAsMeshReference } from \"../Misc/decorators\";\r\nimport { type SmartArray } from \"../Misc/smartArray\";\r\nimport { Logger } from \"../Misc/logger\";\r\nimport { Vector2, Vector3, Matrix } from \"../Maths/math.vector.pure\";\r\nimport { VertexBuffer } from \"../Buffers/buffer.pure\";\r\nimport { AbstractMesh } from \"../Meshes/abstractMesh.pure\";\r\nimport { type SubMesh } from \"../Meshes/subMesh.pure\";\r\nimport { type Mesh } from \"../Meshes/mesh.pure\";\r\nimport { type Camera } from \"../Cameras/camera.pure\";\r\nimport { type Effect, type IEffectCreationOptions } from \"../Materials/effect.pure\";\r\nimport { Material } from \"../Materials/material.pure\";\r\nimport { StandardMaterial } from \"../Materials/standardMaterial.pure\";\r\nimport { Texture } from \"../Materials/Textures/texture.pure\";\r\nimport { RenderTargetTexture } from \"../Materials/Textures/renderTargetTexture.pure\";\r\nimport { PostProcess } from \"./postProcess.pure\";\r\nimport { Constants } from \"../Engines/constants\";\r\nimport { type Scene } from \"../scene.pure\";\r\nimport { CreatePlane } from \"../Meshes/Builders/planeBuilder.pure\";\r\nimport { Color4, Color3 } from \"../Maths/math.color.pure\";\r\nimport { Viewport } from \"../Maths/math.viewport\";\r\nimport { type Nullable } from \"../types\";\r\nimport { BindBonesParameters, BindMorphTargetParameters, PrepareDefinesAndAttributesForMorphTargets, PushAttributesForInstances } from \"../Materials/materialHelper.functions\";\r\nimport { type AbstractEngine } from \"../Engines/abstractEngine.pure\";\r\nimport { EffectFallbacks } from \"core/Materials/effectFallbacks\";\r\nimport { RegisterClass } from \"../Misc/typeStore\";\r\nimport { ShaderLanguage } from \"../Materials/shaderLanguage\";\r\n\r\n/**\r\n * Inspired by https://developer.nvidia.com/gpugems/gpugems3/part-ii-light-and-shadows/chapter-13-volumetric-light-scattering-post-process\r\n */\r\nexport class VolumetricLightScatteringPostProcess extends PostProcess {\r\n // Members\r\n private _volumetricLightScatteringRTT: RenderTargetTexture;\r\n private _viewPort: Viewport;\r\n private _screenCoordinates: Vector2 = Vector2.Zero();\r\n\r\n /**\r\n * If not undefined, the mesh position is computed from the attached node position\r\n */\r\n public attachedNode: { position: Vector3 };\r\n\r\n /**\r\n * Custom position of the mesh. Used if \"useCustomMeshPosition\" is set to \"true\"\r\n */\r\n @serializeAsVector3()\r\n public customMeshPosition: Vector3 = Vector3.Zero();\r\n\r\n /**\r\n * Set if the post-process should use a custom position for the light source (true) or the internal mesh position (false)\r\n */\r\n @serialize()\r\n public useCustomMeshPosition: boolean = false;\r\n\r\n /**\r\n * If the post-process should inverse the light scattering direction\r\n */\r\n @serialize()\r\n public invert: boolean = true;\r\n\r\n /**\r\n * The internal mesh used by the post-process\r\n */\r\n @serializeAsMeshReference()\r\n public mesh: Mesh;\r\n\r\n /**\r\n * @internal\r\n * VolumetricLightScatteringPostProcess.useDiffuseColor is no longer used, use the mesh material directly instead\r\n */\r\n public get useDiffuseColor(): boolean {\r\n Logger.Warn(\"VolumetricLightScatteringPostProcess.useDiffuseColor is no longer used, use the mesh material directly instead\");\r\n return false;\r\n }\r\n\r\n public set useDiffuseColor(useDiffuseColor: boolean) {\r\n Logger.Warn(\"VolumetricLightScatteringPostProcess.useDiffuseColor is no longer used, use the mesh material directly instead\");\r\n }\r\n\r\n /**\r\n * Array containing the excluded meshes not rendered in the internal pass\r\n */\r\n @serialize()\r\n public excludedMeshes: AbstractMesh[] = [];\r\n\r\n /**\r\n * Array containing the only meshes rendered in the internal pass.\r\n * If this array is not empty, only the meshes from this array are rendered in the internal pass\r\n */\r\n @serialize()\r\n public includedMeshes: AbstractMesh[] = [];\r\n\r\n /**\r\n * Controls the overall intensity of the post-process\r\n */\r\n @serialize()\r\n public exposure = 0.3;\r\n\r\n /**\r\n * Dissipates each sample's contribution in range [0, 1]\r\n */\r\n @serialize()\r\n public decay = 0.96815;\r\n\r\n /**\r\n * Controls the overall intensity of each sample\r\n */\r\n @serialize()\r\n public weight = 0.58767;\r\n\r\n /**\r\n * Controls the density of each sample\r\n */\r\n @serialize()\r\n public density = 0.926;\r\n\r\n /**\r\n * @constructor\r\n * @param name The post-process name\r\n * @param ratio The size of the post-process and/or internal pass (0.5 means that your postprocess will have a width = canvas.width 0.5 and a height = canvas.height 0.5)\r\n * @param camera The camera that the post-process will be attached to\r\n * @param mesh The mesh used to create the light scattering\r\n * @param samples The post-process quality, default 100\r\n * @param samplingMode The post-process filtering mode\r\n * @param engine The babylon engine\r\n * @param reusable If the post-process is reusable\r\n * @param scene The constructor needs a scene reference to initialize internal components. If \"camera\" is null a \"scene\" must be provided\r\n */\r\n constructor(\r\n name: string,\r\n ratio: any,\r\n camera: Nullable<Camera>,\r\n mesh?: Mesh,\r\n samples: number = 100,\r\n samplingMode: number = Texture.BILINEAR_SAMPLINGMODE,\r\n engine?: AbstractEngine,\r\n reusable?: boolean,\r\n scene?: Scene\r\n ) {\r\n const selectedEngine = engine ?? camera?.getScene().getEngine() ?? scene?.getEngine();\r\n const shaderLanguage = selectedEngine?.isWebGPU && !PostProcess.ForceGLSL ? ShaderLanguage.WGSL : ShaderLanguage.GLSL;\r\n super(\r\n name,\r\n \"volumetricLightScattering\",\r\n [\"decay\", \"exposure\", \"weight\", \"meshPositionOnScreen\", \"density\"],\r\n [\"lightScatteringSampler\"],\r\n ratio.postProcessRatio || ratio,\r\n camera,\r\n samplingMode,\r\n selectedEngine,\r\n reusable,\r\n \"#define NUM_SAMPLES \" + samples,\r\n undefined,\r\n undefined,\r\n undefined,\r\n undefined,\r\n undefined,\r\n shaderLanguage\r\n );\r\n scene = camera?.getScene() ?? scene ?? this._scene; // parameter \"scene\" can be null.\r\n\r\n engine = scene.getEngine();\r\n this._viewPort = new Viewport(0, 0, 1, 1).toGlobal(engine.getRenderWidth(), engine.getRenderHeight());\r\n\r\n // Configure mesh\r\n this.mesh = mesh ?? VolumetricLightScatteringPostProcess.CreateDefaultMesh(\"VolumetricLightScatteringMesh\", scene);\r\n // Configure\r\n this._createPass(scene, ratio.passRatio || ratio);\r\n\r\n this.onActivate = (camera: Camera) => {\r\n if (!this.isSupported) {\r\n this.dispose(camera);\r\n }\r\n\r\n this.onActivate = null;\r\n };\r\n\r\n this.onApplyObservable.add((effect: Effect) => {\r\n this._updateMeshScreenCoordinates(scene);\r\n\r\n effect.setTexture(\"lightScatteringSampler\", this._volumetricLightScatteringRTT);\r\n effect.setFloat(\"exposure\", this.exposure);\r\n effect.setFloat(\"decay\", this.decay);\r\n effect.setFloat(\"weight\", this.weight);\r\n effect.setFloat(\"density\", this.density);\r\n effect.setVector2(\"meshPositionOnScreen\", this._screenCoordinates);\r\n });\r\n }\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(\r\n Promise.all([\r\n import(\"../ShadersWGSL/volumetricLightScattering.fragment\"),\r\n import(\"../ShadersWGSL/volumetricLightScatteringPass.vertex\"),\r\n import(\"../ShadersWGSL/volumetricLightScatteringPass.fragment\"),\r\n ])\r\n );\r\n } else {\r\n list.push(\r\n Promise.all([\r\n import(\"../Shaders/volumetricLightScattering.fragment\"),\r\n import(\"../Shaders/volumetricLightScatteringPass.vertex\"),\r\n import(\"../Shaders/volumetricLightScatteringPass.fragment\"),\r\n ])\r\n );\r\n }\r\n\r\n super._gatherImports(useWebGPU, list);\r\n }\r\n\r\n /**\r\n * Returns the string \"VolumetricLightScatteringPostProcess\"\r\n * @returns \"VolumetricLightScatteringPostProcess\"\r\n */\r\n public override getClassName(): string {\r\n return \"VolumetricLightScatteringPostProcess\";\r\n }\r\n\r\n private _isReady(subMesh: SubMesh, useInstances: boolean): boolean {\r\n const mesh = subMesh.getMesh();\r\n\r\n // Render this.mesh as default\r\n if (mesh === this.mesh && mesh.material) {\r\n return mesh.material.isReady(mesh);\r\n }\r\n\r\n const renderingMaterial = mesh._internalAbstractMeshDataInfo._materialForRenderPass?.[this._scene.getEngine().currentRenderPassId];\r\n\r\n if (renderingMaterial) {\r\n return renderingMaterial.isReadyForSubMesh(mesh, subMesh, useInstances);\r\n }\r\n\r\n const defines = [];\r\n const attribs = [VertexBuffer.PositionKind];\r\n const material = subMesh.getMaterial();\r\n\r\n let uv1 = false;\r\n let uv2 = false;\r\n const color = false;\r\n\r\n // Alpha test\r\n if (material) {\r\n const needAlphaTesting = material.needAlphaTestingForMesh(mesh);\r\n if (needAlphaTesting) {\r\n defines.push(\"#define ALPHATEST\");\r\n }\r\n\r\n if (mesh.isVerticesDataPresent(VertexBuffer.UVKind)) {\r\n attribs.push(VertexBuffer.UVKind);\r\n defines.push(\"#define UV1\");\r\n uv1 = needAlphaTesting;\r\n }\r\n if (mesh.isVerticesDataPresent(VertexBuffer.UV2Kind)) {\r\n attribs.push(VertexBuffer.UV2Kind);\r\n defines.push(\"#define UV2\");\r\n uv2 = needAlphaTesting;\r\n }\r\n }\r\n\r\n // Bones\r\n const fallbacks = new EffectFallbacks();\r\n if (mesh.useBones && mesh.computeBonesUsingShaders && mesh.skeleton) {\r\n attribs.push(VertexBuffer.MatricesIndicesKind);\r\n attribs.push(VertexBuffer.MatricesWeightsKind);\r\n if (mesh.numBoneInfluencers > 4) {\r\n attribs.push(VertexBuffer.MatricesIndicesExtraKind);\r\n attribs.push(VertexBuffer.MatricesWeightsExtraKind);\r\n }\r\n defines.push(\"#define NUM_BONE_INFLUENCERS \" + mesh.numBoneInfluencers);\r\n if (mesh.numBoneInfluencers > 0) {\r\n fallbacks.addCPUSkinningFallback(0, mesh);\r\n }\r\n\r\n const skeleton = mesh.skeleton;\r\n if (skeleton.isUsingTextureForMatrices) {\r\n defines.push(\"#define BONETEXTURE\");\r\n } else {\r\n defines.push(\"#define BonesPerMesh \" + (skeleton.bones.length + 1));\r\n }\r\n } else {\r\n defines.push(\"#define NUM_BONE_INFLUENCERS 0\");\r\n }\r\n\r\n // Morph targets\r\n const numMorphInfluencers = mesh.morphTargetManager\r\n ? PrepareDefinesAndAttributesForMorphTargets(\r\n mesh.morphTargetManager,\r\n defines,\r\n attribs,\r\n mesh,\r\n true, // usePositionMorph\r\n false, // useNormalMorph\r\n false, // useTangentMorph\r\n uv1, // useUVMorph\r\n uv2, // useUV2Morph\r\n color // useColorMorph\r\n )\r\n : 0;\r\n\r\n // Instances\r\n if (useInstances) {\r\n defines.push(\"#define INSTANCES\");\r\n PushAttributesForInstances(attribs);\r\n if (subMesh.getRenderingMesh().hasThinInstances) {\r\n defines.push(\"#define THIN_INSTANCES\");\r\n }\r\n }\r\n\r\n // Baked vertex animations\r\n const bvaManager = mesh.bakedVertexAnimationManager;\r\n if (bvaManager && bvaManager.isEnabled) {\r\n defines.push(\"#define BAKED_VERTEX_ANIMATION_TEXTURE\");\r\n if (useInstances) {\r\n attribs.push(\"bakedVertexAnimationSettingsInstanced\");\r\n }\r\n }\r\n\r\n // Get correct effect\r\n const drawWrapper = subMesh._getDrawWrapper(undefined, true)!;\r\n const cachedDefines = drawWrapper.defines;\r\n const join = defines.join(\"\\n\");\r\n if (cachedDefines !== join) {\r\n const engine = mesh.getScene().getEngine();\r\n const uniforms = [\r\n \"world\",\r\n \"mBones\",\r\n \"boneTextureInfo\",\r\n \"viewProjection\",\r\n \"diffuseMatrix\",\r\n \"morphTargetInfluences\",\r\n \"morphTargetCount\",\r\n \"morphTargetTextureInfo\",\r\n \"morphTargetTextureIndices\",\r\n \"bakedVertexAnimationSettings\",\r\n \"bakedVertexAnimationTextureSizeInverted\",\r\n \"bakedVertexAnimationTime\",\r\n \"bakedVertexAnimationTexture\",\r\n ];\r\n const samplers = [\"diffuseSampler\", \"morphTargets\", \"boneSampler\", \"bakedVertexAnimationTexture\"];\r\n\r\n drawWrapper.setEffect(\r\n engine.createEffect(\r\n \"volumetricLightScatteringPass\",\r\n <IEffectCreationOptions>{\r\n attributes: attribs,\r\n uniformsNames: uniforms,\r\n uniformBuffersNames: [],\r\n samplers: samplers,\r\n defines: join,\r\n fallbacks: fallbacks,\r\n onCompiled: null,\r\n onError: null,\r\n indexParameters: { maxSimultaneousMorphTargets: numMorphInfluencers },\r\n shaderLanguage: engine.isWebGPU && !PostProcess.ForceGLSL ? ShaderLanguage.WGSL : ShaderLanguage.GLSL,\r\n },\r\n engine\r\n ),\r\n join\r\n );\r\n }\r\n\r\n return drawWrapper.effect!.isReady();\r\n }\r\n\r\n /**\r\n * Sets the new light position for light scattering effect\r\n * @param position The new custom light position\r\n */\r\n public setCustomMeshPosition(position: Vector3): void {\r\n this.customMeshPosition = position;\r\n }\r\n\r\n /**\r\n * Returns the light position for light scattering effect\r\n * @returns Vector3 The custom light position\r\n */\r\n public getCustomMeshPosition(): Vector3 {\r\n return this.customMeshPosition;\r\n }\r\n\r\n /**\r\n * Disposes the internal assets and detaches the post-process from the camera\r\n * @param camera The camera from which to detach the post-process\r\n */\r\n public override dispose(camera: Camera): void {\r\n const rttIndex = camera.getScene().customRenderTargets.indexOf(this._volumetricLightScatteringRTT);\r\n if (rttIndex !== -1) {\r\n camera.getScene().customRenderTargets.splice(rttIndex, 1);\r\n }\r\n\r\n this._volumetricLightScatteringRTT.dispose();\r\n super.dispose(camera);\r\n }\r\n\r\n /**\r\n * Returns the render target texture used by the post-process\r\n * @returns the render target texture used by the post-process\r\n */\r\n public getPass(): RenderTargetTexture {\r\n return this._volumetricLightScatteringRTT;\r\n }\r\n\r\n // Private methods\r\n private _meshExcluded(mesh: AbstractMesh) {\r\n if ((this.includedMeshes.length > 0 && this.includedMeshes.indexOf(mesh) === -1) || (this.excludedMeshes.length > 0 && this.excludedMeshes.indexOf(mesh) !== -1)) {\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n private _createPass(scene: Scene, ratio: number): void {\r\n const engine = scene.getEngine();\r\n\r\n this._volumetricLightScatteringRTT = new RenderTargetTexture(\r\n \"volumetricLightScatteringMap\",\r\n { width: engine.getRenderWidth() * ratio, height: engine.getRenderHeight() * ratio },\r\n scene,\r\n false,\r\n true,\r\n Constants.TEXTURETYPE_UNSIGNED_BYTE\r\n );\r\n this._volumetricLightScatteringRTT.wrapU = Texture.CLAMP_ADDRESSMODE;\r\n this._volumetricLightScatteringRTT.wrapV = Texture.CLAMP_ADDRESSMODE;\r\n this._volumetricLightScatteringRTT.renderList = null;\r\n this._volumetricLightScatteringRTT.renderParticles = false;\r\n this._volumetricLightScatteringRTT.ignoreCameraViewport = true;\r\n\r\n const camera = this.getCamera();\r\n if (camera) {\r\n camera.customRenderTargets.push(this._volumetricLightScatteringRTT);\r\n } else {\r\n scene.customRenderTargets.push(this._volumetricLightScatteringRTT);\r\n }\r\n\r\n // Custom render function for submeshes\r\n const renderSubMesh = (subMesh: SubMesh): void => {\r\n const renderingMesh = subMesh.getRenderingMesh();\r\n const effectiveMesh = subMesh.getEffectiveMesh();\r\n if (this._meshExcluded(renderingMesh)) {\r\n return;\r\n }\r\n\r\n effectiveMesh._internalAbstractMeshDataInfo._isActiveIntermediate = false;\r\n\r\n const material = subMesh.getMaterial();\r\n\r\n if (!material) {\r\n return;\r\n }\r\n\r\n const scene = renderingMesh.getScene();\r\n const engine = scene.getEngine();\r\n\r\n // Culling\r\n engine.setState(material.backFaceCulling, undefined, undefined, undefined, material.cullBackFaces);\r\n\r\n // Managing instances\r\n const batch = renderingMesh._getInstancesRenderList(subMesh._id, !!subMesh.getReplacementMesh());\r\n\r\n if (batch.mustReturn) {\r\n return;\r\n }\r\n\r\n const hardwareInstancedRendering = engine.getCaps().instancedArrays && (batch.visibleInstances[subMesh._id] !== null || renderingMesh.hasThinInstances);\r\n\r\n if (this._isReady(subMesh, hardwareInstancedRendering)) {\r\n const renderingMaterial = effectiveMesh._internalAbstractMeshDataInfo._materialForRenderPass?.[engine.currentRenderPassId];\r\n\r\n let drawWrapper = subMesh._getDrawWrapper();\r\n if (renderingMesh === this.mesh && !drawWrapper) {\r\n drawWrapper = material._getDrawWrapper();\r\n }\r\n\r\n if (!drawWrapper) {\r\n return;\r\n }\r\n\r\n const effect = drawWrapper.effect!;\r\n\r\n engine.enableEffect(drawWrapper);\r\n if (!hardwareInstancedRendering) {\r\n renderingMesh._bind(subMesh, effect, material.fillMode);\r\n }\r\n\r\n if (renderingMesh === this.mesh) {\r\n material.bind(effectiveMesh.getWorldMatrix(), renderingMesh);\r\n } else if (renderingMaterial) {\r\n renderingMaterial.bindForSubMesh(effectiveMesh.getWorldMatrix(), effectiveMesh as Mesh, subMesh);\r\n } else {\r\n effect.setMatrix(\"viewProjection\", scene.getTransformMatrix());\r\n\r\n // Alpha test\r\n if (material.needAlphaTestingForMesh(effectiveMesh)) {\r\n const alphaTexture = material.getAlphaTestTexture();\r\n\r\n if (alphaTexture) {\r\n effect.setTexture(\"diffuseSampler\", alphaTexture);\r\n effect.setMatrix(\"diffuseMatrix\", alphaTexture.getTextureMatrix());\r\n }\r\n }\r\n\r\n // Bones\r\n BindBonesParameters(renderingMesh, effect);\r\n\r\n // Morph targets\r\n BindMorphTargetParameters(renderingMesh, effect);\r\n if (renderingMesh.morphTargetManager && renderingMesh.morphTargetManager.isUsingTextureForTargets) {\r\n renderingMesh.morphTargetManager._bind(effect);\r\n }\r\n\r\n // Baked vertex animations\r\n const bvaManager = subMesh.getMesh().bakedVertexAnimationManager;\r\n if (bvaManager && bvaManager.isEnabled) {\r\n bvaManager.bind(effect, hardwareInstancedRendering);\r\n }\r\n }\r\n\r\n if (hardwareInstancedRendering && renderingMesh.hasThinInstances) {\r\n effect.setMatrix(\"world\", effectiveMesh.getWorldMatrix());\r\n }\r\n\r\n // Draw\r\n renderingMesh._processRendering(effectiveMesh, subMesh, effect, Material.TriangleFillMode, batch, hardwareInstancedRendering, (isInstance, world) => {\r\n if (!isInstance) {\r\n effect.setMatrix(\"world\", world);\r\n }\r\n });\r\n }\r\n };\r\n\r\n // Render target texture callbacks\r\n let savedSceneClearColor: Color4;\r\n const sceneClearColor = new Color4(0.0, 0.0, 0.0, 1.0);\r\n\r\n this._volumetricLightScatteringRTT.onBeforeRenderObservable.add((): void => {\r\n savedSceneClearColor = scene.clearColor;\r\n scene.clearColor = sceneClearColor;\r\n });\r\n\r\n this._volumetricLightScatteringRTT.onAfterRenderObservable.add((): void => {\r\n scene.clearColor = savedSceneClearColor;\r\n });\r\n\r\n this._volumetricLightScatteringRTT.customIsReadyFunction = (mesh: AbstractMesh, refreshRate: number, preWarm?: boolean) => {\r\n if ((preWarm || refreshRate === 0) && mesh.subMeshes) {\r\n for (let i = 0; i < mesh.subMeshes.length; ++i) {\r\n const subMesh = mesh.subMeshes[i];\r\n const material = subMesh.getMaterial();\r\n const renderingMesh = subMesh.getRenderingMesh();\r\n\r\n if (!material) {\r\n continue;\r\n }\r\n\r\n const batch = renderingMesh._getInstancesRenderList(subMesh._id, !!subMesh.getReplacementMesh());\r\n const hardwareInstancedRendering = engine.getCaps().instancedArrays && (batch.visibleInstances[subMesh._id] !== null || renderingMesh.hasThinInstances);\r\n\r\n if (!this._isReady(subMesh, hardwareInstancedRendering)) {\r\n return false;\r\n }\r\n }\r\n }\r\n\r\n return true;\r\n };\r\n\r\n this._volumetricLightScatteringRTT.customRenderFunction = (\r\n opaqueSubMeshes: SmartArray<SubMesh>,\r\n alphaTestSubMeshes: SmartArray<SubMesh>,\r\n transparentSubMeshes: SmartArray<SubMesh>,\r\n depthOnlySubMeshes: SmartArray<SubMesh>\r\n ): void => {\r\n const engine = scene.getEngine();\r\n let index: number;\r\n\r\n if (depthOnlySubMeshes.length) {\r\n engine.setColorWrite(false);\r\n for (index = 0; index < depthOnlySubMeshes.length; index++) {\r\n renderSubMesh(depthOnlySubMeshes.data[index]);\r\n }\r\n engine.setColorWrite(true);\r\n }\r\n\r\n for (index = 0; index < opaqueSubMeshes.length; index++) {\r\n renderSubMesh(opaqueSubMeshes.data[index]);\r\n }\r\n\r\n for (index = 0; index < alphaTestSubMeshes.length; index++) {\r\n renderSubMesh(alphaTestSubMeshes.data[index]);\r\n }\r\n\r\n if (transparentSubMeshes.length) {\r\n // Sort sub meshes\r\n for (index = 0; index < transparentSubMeshes.length; index++) {\r\n const submesh = transparentSubMeshes.data[index];\r\n const boundingInfo = submesh.getBoundingInfo();\r\n\r\n if (boundingInfo && scene.activeCamera) {\r\n submesh._alphaIndex = submesh.getMesh().alphaIndex;\r\n submesh._distanceToCamera = boundingInfo.boundingSphere.centerWorld.subtract(scene.activeCamera.position).length();\r\n }\r\n }\r\n\r\n const sortedArray = transparentSubMeshes.data.slice(0, transparentSubMeshes.length);\r\n sortedArray.sort((a, b) => {\r\n // Alpha index first\r\n if (a._alphaIndex > b._alphaIndex) {\r\n return 1;\r\n }\r\n if (a._alphaIndex < b._alphaIndex) {\r\n return -1;\r\n }\r\n\r\n // Then distance to camera\r\n if (a._distanceToCamera < b._distanceToCamera) {\r\n return 1;\r\n }\r\n if (a._distanceToCamera > b._distanceToCamera) {\r\n return -1;\r\n }\r\n\r\n return 0;\r\n });\r\n\r\n // Render sub meshes\r\n engine.setAlphaMode(Constants.ALPHA_COMBINE);\r\n for (index = 0; index < sortedArray.length; index++) {\r\n renderSubMesh(sortedArray[index]);\r\n }\r\n engine.setAlphaMode(Constants.ALPHA_DISABLE);\r\n }\r\n };\r\n }\r\n\r\n private _updateMeshScreenCoordinates(scene: Scene): void {\r\n const transform = scene.getTransformMatrix();\r\n let meshPosition: Vector3;\r\n\r\n if (this.useCustomMeshPosition) {\r\n meshPosition = this.customMeshPosition;\r\n } else if (this.attachedNode) {\r\n meshPosition = this.attachedNode.position;\r\n } else {\r\n meshPosition = this.mesh.parent ? this.mesh.getAbsolutePosition() : this.mesh.position;\r\n }\r\n\r\n const pos = Vector3.Project(meshPosition, Matrix.Identity(), transform, this._viewPort);\r\n\r\n this._screenCoordinates.x = pos.x / this._viewPort.width;\r\n this._screenCoordinates.y = pos.y / this._viewPort.height;\r\n\r\n if (this.invert) {\r\n this._screenCoordinates.y = 1.0 - this._screenCoordinates.y;\r\n }\r\n }\r\n\r\n // Static methods\r\n /**\r\n * Creates a default mesh for the Volumeric Light Scattering post-process\r\n * @param name The mesh name\r\n * @param scene The scene where to create the mesh\r\n * @returns the default mesh\r\n */\r\n public static CreateDefaultMesh(name: string, scene: Scene): Mesh {\r\n const mesh = CreatePlane(name, { size: 1 }, scene);\r\n mesh.billboardMode = AbstractMesh.BILLBOARDMODE_ALL;\r\n\r\n const material = new StandardMaterial(name + \"Material\", scene);\r\n material.emissiveColor = new Color3(1, 1, 1);\r\n\r\n mesh.material = material;\r\n\r\n return mesh;\r\n }\r\n}\r\n\r\nlet _Registered = false;\r\n/**\r\n * Register side effects for volumetricLightScatteringPostProcess.\r\n * Safe to call multiple times; only the first call has an effect.\r\n */\r\nexport function RegisterVolumetricLightScatteringPostProcess(): void {\r\n if (_Registered) {\r\n return;\r\n }\r\n _Registered = true;\r\n\r\n RegisterClass(\"BABYLON.VolumetricLightScatteringPostProcess\", VolumetricLightScatteringPostProcess);\r\n}\r\n"]}
|
|
@@ -7,18 +7,18 @@ const shader = `struct ReflectanceParams
|
|
|
7
7
|
ReflectanceParams dielectricReflectance(
|
|
8
8
|
in float insideIOR,in float outsideIOR,in vec3 specularColor,in float specularWeight
|
|
9
9
|
)
|
|
10
|
-
{ReflectanceParams outParams;float dielectricF0=pow((insideIOR-outsideIOR)/(insideIOR+outsideIOR),2.0);float
|
|
10
|
+
{ReflectanceParams outParams;float dielectricF0=pow((insideIOR-outsideIOR)/(insideIOR+outsideIOR),2.0);float f90Scale=clamp(2.0*abs(insideIOR-outsideIOR),0.0,1.0);
|
|
11
11
|
#if (DIELECTRIC_SPECULAR_MODEL==DIELECTRIC_SPECULAR_MODEL_OPENPBR)
|
|
12
|
-
vec3 dielectricColorF90=specularColor.rgb*vec3(f90Scale);
|
|
12
|
+
vec3 dielectricColorF90=specularColor.rgb*vec3(f90Scale);
|
|
13
13
|
#else
|
|
14
|
-
vec3 dielectricColorF90=vec3(f90Scale);
|
|
14
|
+
vec3 dielectricColorF90=vec3(f90Scale);
|
|
15
15
|
#endif
|
|
16
16
|
#if DIELECTRIC_SPECULAR_MODEL==DIELECTRIC_SPECULAR_MODEL_GLTF
|
|
17
|
-
float maxF0=max(specularColor.r,max(specularColor.g,specularColor.b));outParams.F0=
|
|
17
|
+
float maxF0=max(specularColor.r,max(specularColor.g,specularColor.b));outParams.F0=dielectricF0*specularWeight*maxF0;
|
|
18
18
|
#else
|
|
19
|
-
outParams.F0=
|
|
19
|
+
outParams.F0=dielectricF0*specularWeight;
|
|
20
20
|
#endif
|
|
21
|
-
outParams.F90=
|
|
21
|
+
outParams.F90=f90Scale*specularWeight;outParams.coloredF0=vec3(dielectricF0*specularWeight)*specularColor.rgb;outParams.coloredF90=dielectricColorF90*vec3(specularWeight);return outParams;}
|
|
22
22
|
`;
|
|
23
23
|
// Sideeffect
|
|
24
24
|
if (!ShaderStore.IncludesShadersStore[name]) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openpbrDielectricReflectance.js","sourceRoot":"","sources":["../../../../../dev/core/src/Shaders/ShadersInclude/openpbrDielectricReflectance.ts"],"names":[],"mappings":"AAAA,eAAe;AACf,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,MAAM,IAAI,GAAG,8BAA8B,CAAC;AAC5C,MAAM,MAAM,GAAG;;;;;;;;;;;;;;;;;;CAkBd,CAAC;AACF,aAAa;AACb,IAAI,CAAC,WAAW,CAAC,oBAAoB,CAAC,IAAI,CAAC,EAAE,CAAC;IAC1C,WAAW,CAAC,oBAAoB,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC;AACpD,CAAC;AACD,gBAAgB;AAChB,MAAM,CAAC,MAAM,4BAA4B,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC","sourcesContent":["// Do not edit.\nimport { ShaderStore } from \"../../Engines/shaderStore\";\nconst name = \"openpbrDielectricReflectance\";\nconst shader = `struct ReflectanceParams\n{float F0;float F90;vec3 coloredF0;vec3 coloredF90;};\n#define pbr_inline\nReflectanceParams dielectricReflectance(\nin float insideIOR,in float outsideIOR,in vec3 specularColor,in float specularWeight\n)\n{ReflectanceParams outParams;float dielectricF0=pow((insideIOR-outsideIOR)/(insideIOR+outsideIOR),2.0);float
|
|
1
|
+
{"version":3,"file":"openpbrDielectricReflectance.js","sourceRoot":"","sources":["../../../../../dev/core/src/Shaders/ShadersInclude/openpbrDielectricReflectance.ts"],"names":[],"mappings":"AAAA,eAAe;AACf,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,MAAM,IAAI,GAAG,8BAA8B,CAAC;AAC5C,MAAM,MAAM,GAAG;;;;;;;;;;;;;;;;;;CAkBd,CAAC;AACF,aAAa;AACb,IAAI,CAAC,WAAW,CAAC,oBAAoB,CAAC,IAAI,CAAC,EAAE,CAAC;IAC1C,WAAW,CAAC,oBAAoB,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC;AACpD,CAAC;AACD,gBAAgB;AAChB,MAAM,CAAC,MAAM,4BAA4B,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC","sourcesContent":["// Do not edit.\nimport { ShaderStore } from \"../../Engines/shaderStore\";\nconst name = \"openpbrDielectricReflectance\";\nconst shader = `struct ReflectanceParams\n{float F0;float F90;vec3 coloredF0;vec3 coloredF90;};\n#define pbr_inline\nReflectanceParams dielectricReflectance(\nin float insideIOR,in float outsideIOR,in vec3 specularColor,in float specularWeight\n)\n{ReflectanceParams outParams;float dielectricF0=pow((insideIOR-outsideIOR)/(insideIOR+outsideIOR),2.0);float f90Scale=clamp(2.0*abs(insideIOR-outsideIOR),0.0,1.0);\n#if (DIELECTRIC_SPECULAR_MODEL==DIELECTRIC_SPECULAR_MODEL_OPENPBR)\nvec3 dielectricColorF90=specularColor.rgb*vec3(f90Scale);\n#else\nvec3 dielectricColorF90=vec3(f90Scale);\n#endif\n#if DIELECTRIC_SPECULAR_MODEL==DIELECTRIC_SPECULAR_MODEL_GLTF\nfloat maxF0=max(specularColor.r,max(specularColor.g,specularColor.b));outParams.F0=dielectricF0*specularWeight*maxF0;\n#else\noutParams.F0=dielectricF0*specularWeight;\n#endif\noutParams.F90=f90Scale*specularWeight;outParams.coloredF0=vec3(dielectricF0*specularWeight)*specularColor.rgb;outParams.coloredF90=dielectricColorF90*vec3(specularWeight);return outParams;}\n`;\n// Sideeffect\nif (!ShaderStore.IncludesShadersStore[name]) {\n ShaderStore.IncludesShadersStore[name] = shader;\n}\n/** @internal */\nexport const openpbrDielectricReflectance = { name, shader };\n"]}
|
|
@@ -5,8 +5,10 @@ const shader = `#ifdef DEPTHPREPASS
|
|
|
5
5
|
#if !defined(PREPASS) && !defined(ORDER_INDEPENDENT_TRANSPARENCY)
|
|
6
6
|
fragmentOutputs.color= vec4f(0.,0.,0.,1.0);
|
|
7
7
|
#endif
|
|
8
|
+
#ifndef DEPTHPREPASS_SKIP_EARLY_RETURN
|
|
8
9
|
return fragmentOutputs;
|
|
9
10
|
#endif
|
|
11
|
+
#endif
|
|
10
12
|
`;
|
|
11
13
|
// Sideeffect
|
|
12
14
|
if (!ShaderStore.IncludesShadersStoreWGSL[name]) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"depthPrePass.js","sourceRoot":"","sources":["../../../../../dev/core/src/ShadersWGSL/ShadersInclude/depthPrePass.ts"],"names":[],"mappings":"AAAA,eAAe;AACf,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,MAAM,IAAI,GAAG,cAAc,CAAC;AAC5B,MAAM,MAAM,GAAG
|
|
1
|
+
{"version":3,"file":"depthPrePass.js","sourceRoot":"","sources":["../../../../../dev/core/src/ShadersWGSL/ShadersInclude/depthPrePass.ts"],"names":[],"mappings":"AAAA,eAAe;AACf,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,MAAM,IAAI,GAAG,cAAc,CAAC;AAC5B,MAAM,MAAM,GAAG;;;;;;;;CAQd,CAAC;AACF,aAAa;AACb,IAAI,CAAC,WAAW,CAAC,wBAAwB,CAAC,IAAI,CAAC,EAAE,CAAC;IAC9C,WAAW,CAAC,wBAAwB,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC;AACxD,CAAC;AACD,gBAAgB;AAChB,MAAM,CAAC,MAAM,gBAAgB,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC","sourcesContent":["// Do not edit.\nimport { ShaderStore } from \"../../Engines/shaderStore\";\nconst name = \"depthPrePass\";\nconst shader = `#ifdef DEPTHPREPASS\n#if !defined(PREPASS) && !defined(ORDER_INDEPENDENT_TRANSPARENCY)\nfragmentOutputs.color= vec4f(0.,0.,0.,1.0);\n#endif\n#ifndef DEPTHPREPASS_SKIP_EARLY_RETURN\nreturn fragmentOutputs;\n#endif\n#endif\n`;\n// Sideeffect\nif (!ShaderStore.IncludesShadersStoreWGSL[name]) {\n ShaderStore.IncludesShadersStoreWGSL[name] = shader;\n}\n/** @internal */\nexport const depthPrePassWGSL = { name, shader };\n"]}
|
|
@@ -10,19 +10,18 @@ coloredF90: vec3f,};
|
|
|
10
10
|
fn dielectricReflectance(
|
|
11
11
|
insideIOR: f32,outsideIOR: f32,specularColor: vec3f,specularWeight: f32
|
|
12
12
|
)->ReflectanceParams
|
|
13
|
-
{var outParams: ReflectanceParams;let dielectricF0=pow((insideIOR-outsideIOR)/(insideIOR+outsideIOR),2.0);
|
|
13
|
+
{var outParams: ReflectanceParams;let dielectricF0=pow((insideIOR-outsideIOR)/(insideIOR+outsideIOR),2.0);let f90Scale=clamp(2.0f*abs(insideIOR-outsideIOR),0.0f,1.0f);
|
|
14
|
+
#if (DIELECTRIC_SPECULAR_MODEL==DIELECTRIC_SPECULAR_MODEL_OPENPBR)
|
|
15
|
+
let dielectricColorF90: vec3f=specularColor.rgb*vec3f(f90Scale);
|
|
16
|
+
#else
|
|
17
|
+
let dielectricColorF90: vec3f=vec3f(f90Scale);
|
|
18
|
+
#endif
|
|
14
19
|
#if DIELECTRIC_SPECULAR_MODEL==DIELECTRIC_SPECULAR_MODEL_GLTF
|
|
15
20
|
let maxF0=max(specularColor.r,max(specularColor.g,specularColor.b));outParams.F0=dielectricF0*maxF0*specularWeight;
|
|
16
21
|
#else
|
|
17
22
|
outParams.F0=dielectricF0*specularWeight;
|
|
18
23
|
#endif
|
|
19
|
-
|
|
20
|
-
#if (DIELECTRIC_SPECULAR_MODEL==DIELECTRIC_SPECULAR_MODEL_OPENPBR)
|
|
21
|
-
let dielectricColorF90: vec3f=specularColor.rgb*vec3f(f90Scale)*specularWeight;
|
|
22
|
-
#else
|
|
23
|
-
let dielectricColorF90: vec3f=vec3f(f90Scale)*specularWeight;
|
|
24
|
-
#endif
|
|
25
|
-
outParams.coloredF90=dielectricColorF90;return outParams;}
|
|
24
|
+
outParams.F90=f90Scale*specularWeight;outParams.coloredF0=vec3f(dielectricF0*specularWeight)*specularColor.rgb;outParams.coloredF90=dielectricColorF90*vec3f(specularWeight);return outParams;}
|
|
26
25
|
`;
|
|
27
26
|
// Sideeffect
|
|
28
27
|
if (!ShaderStore.IncludesShadersStoreWGSL[name]) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openpbrDielectricReflectance.js","sourceRoot":"","sources":["../../../../../dev/core/src/ShadersWGSL/ShadersInclude/openpbrDielectricReflectance.ts"],"names":[],"mappings":"AAAA,eAAe;AACf,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,MAAM,IAAI,GAAG,8BAA8B,CAAC;AAC5C,MAAM,MAAM,GAAG
|
|
1
|
+
{"version":3,"file":"openpbrDielectricReflectance.js","sourceRoot":"","sources":["../../../../../dev/core/src/ShadersWGSL/ShadersInclude/openpbrDielectricReflectance.ts"],"names":[],"mappings":"AAAA,eAAe;AACf,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,MAAM,IAAI,GAAG,8BAA8B,CAAC;AAC5C,MAAM,MAAM,GAAG;;;;;;;;;;;;;;;;;;;;;CAqBd,CAAC;AACF,aAAa;AACb,IAAI,CAAC,WAAW,CAAC,wBAAwB,CAAC,IAAI,CAAC,EAAE,CAAC;IAC9C,WAAW,CAAC,wBAAwB,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC;AACxD,CAAC;AACD,gBAAgB;AAChB,MAAM,CAAC,MAAM,gCAAgC,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC","sourcesContent":["// Do not edit.\nimport { ShaderStore } from \"../../Engines/shaderStore\";\nconst name = \"openpbrDielectricReflectance\";\nconst shader = `struct ReflectanceParams\n{F0: f32,\nF90: f32,\ncoloredF0: vec3f,\ncoloredF90: vec3f,};\n#define pbr_inline\nfn dielectricReflectance(\ninsideIOR: f32,outsideIOR: f32,specularColor: vec3f,specularWeight: f32\n)->ReflectanceParams\n{var outParams: ReflectanceParams;let dielectricF0=pow((insideIOR-outsideIOR)/(insideIOR+outsideIOR),2.0);let f90Scale=clamp(2.0f*abs(insideIOR-outsideIOR),0.0f,1.0f);\n#if (DIELECTRIC_SPECULAR_MODEL==DIELECTRIC_SPECULAR_MODEL_OPENPBR)\nlet dielectricColorF90: vec3f=specularColor.rgb*vec3f(f90Scale);\n#else\nlet dielectricColorF90: vec3f=vec3f(f90Scale);\n#endif\n#if DIELECTRIC_SPECULAR_MODEL==DIELECTRIC_SPECULAR_MODEL_GLTF\nlet maxF0=max(specularColor.r,max(specularColor.g,specularColor.b));outParams.F0=dielectricF0*maxF0*specularWeight;\n#else\noutParams.F0=dielectricF0*specularWeight;\n#endif\noutParams.F90=f90Scale*specularWeight;outParams.coloredF0=vec3f(dielectricF0*specularWeight)*specularColor.rgb;outParams.coloredF90=dielectricColorF90*vec3f(specularWeight);return outParams;}\n`;\n// Sideeffect\nif (!ShaderStore.IncludesShadersStoreWGSL[name]) {\n ShaderStore.IncludesShadersStoreWGSL[name] = shader;\n}\n/** @internal */\nexport const openpbrDielectricReflectanceWGSL = { name, shader };\n"]}
|
|
@@ -121,7 +121,9 @@ baseColor=vec4f(baseColor.rgb*uniforms.vDiffuseInfos.y,baseColor.a);
|
|
|
121
121
|
var decalColor: vec4f=textureSample(decalSampler,decalSamplerSampler,fragmentInputs.vDecalUV+uvOffset);
|
|
122
122
|
#include<decalFragment>(surfaceAlbedo,baseColor,GAMMADECAL,_GAMMADECAL_NOTUSED_)
|
|
123
123
|
#endif
|
|
124
|
+
#define DEPTHPREPASS_SKIP_EARLY_RETURN
|
|
124
125
|
#include<depthPrePass>
|
|
126
|
+
#ifndef DEPTHPREPASS
|
|
125
127
|
#if defined(VERTEXCOLOR) || defined(INSTANCESCOLOR) && defined(INSTANCES)
|
|
126
128
|
baseColor=vec4f(baseColor.rgb*fragmentInputs.vColor.rgb,baseColor.a);
|
|
127
129
|
#endif
|
|
@@ -398,6 +400,7 @@ fragmentOutputs.color=color;
|
|
|
398
400
|
if (fragDepth==nearestDepth) {fragmentOutputs.frontColor=vec4f(fragmentOutputs.frontColor.rgb+color.rgb*color.a*alphaMultiplier,1.0-alphaMultiplier*(1.0-color.a));} else {fragmentOutputs.backColor+=color;}
|
|
399
401
|
#endif
|
|
400
402
|
#define CUSTOM_FRAGMENT_MAIN_END
|
|
403
|
+
#endif
|
|
401
404
|
}
|
|
402
405
|
`;
|
|
403
406
|
// Sideeffect
|