@onerjs/core 8.48.4 → 8.48.6
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.d.ts +13 -0
- package/Animations/animatable.core.js +46 -7
- package/Animations/animatable.core.js.map +1 -1
- package/Cameras/Inputs/geospatialCameraPointersInput.js +10 -8
- package/Cameras/Inputs/geospatialCameraPointersInput.js.map +1 -1
- package/Cameras/geospatialCameraMovement.js +2 -2
- package/Cameras/geospatialCameraMovement.js.map +1 -1
- package/FrameGraph/Node/Blocks/Rendering/iblShadowsRendererBlock.d.ts +105 -0
- package/FrameGraph/Node/Blocks/Rendering/iblShadowsRendererBlock.js +318 -0
- package/FrameGraph/Node/Blocks/Rendering/iblShadowsRendererBlock.js.map +1 -0
- package/FrameGraph/Node/Blocks/index.d.ts +1 -0
- package/FrameGraph/Node/Blocks/index.js +1 -0
- package/FrameGraph/Node/Blocks/index.js.map +1 -1
- package/FrameGraph/Tasks/Rendering/iblShadows/iblShadowsAccumulationTask.d.ts +34 -0
- package/FrameGraph/Tasks/Rendering/iblShadows/iblShadowsAccumulationTask.js +144 -0
- package/FrameGraph/Tasks/Rendering/iblShadows/iblShadowsAccumulationTask.js.map +1 -0
- package/FrameGraph/Tasks/Rendering/iblShadows/iblShadowsSpatialBlurTask.d.ts +26 -0
- package/FrameGraph/Tasks/Rendering/iblShadows/iblShadowsSpatialBlurTask.js +82 -0
- package/FrameGraph/Tasks/Rendering/iblShadows/iblShadowsSpatialBlurTask.js.map +1 -0
- package/FrameGraph/Tasks/Rendering/iblShadows/iblShadowsTracingTask.d.ts +61 -0
- package/FrameGraph/Tasks/Rendering/iblShadows/iblShadowsTracingTask.js +207 -0
- package/FrameGraph/Tasks/Rendering/iblShadows/iblShadowsTracingTask.js.map +1 -0
- package/FrameGraph/Tasks/Rendering/iblShadows/iblShadowsVoxelizationTask.d.ts +104 -0
- package/FrameGraph/Tasks/Rendering/iblShadows/iblShadowsVoxelizationTask.js +218 -0
- package/FrameGraph/Tasks/Rendering/iblShadows/iblShadowsVoxelizationTask.js.map +1 -0
- package/FrameGraph/Tasks/Rendering/iblShadowsRendererTask.d.ts +217 -0
- package/FrameGraph/Tasks/Rendering/iblShadowsRendererTask.js +640 -0
- package/FrameGraph/Tasks/Rendering/iblShadowsRendererTask.js.map +1 -0
- package/FrameGraph/frameGraph.js +1 -0
- package/FrameGraph/frameGraph.js.map +1 -1
- package/FrameGraph/index.d.ts +1 -0
- package/FrameGraph/index.js +1 -0
- package/FrameGraph/index.js.map +1 -1
- package/Materials/PBR/openpbrMaterial.d.ts +13 -2
- package/Materials/PBR/openpbrMaterial.js +47 -16
- package/Materials/PBR/openpbrMaterial.js.map +1 -1
- package/Materials/PBR/pbrBRDFConfiguration.js +1 -1
- package/Materials/PBR/pbrBRDFConfiguration.js.map +1 -1
- package/Materials/Textures/Filtering/hdrFiltering.js +6 -0
- package/Materials/Textures/Filtering/hdrFiltering.js.map +1 -1
- package/Materials/Textures/envCubeTexture.js +13 -13
- package/Materials/Textures/envCubeTexture.js.map +1 -1
- package/Materials/materialHelper.functions.js +1 -1
- package/Materials/materialHelper.functions.js.map +1 -1
- package/Misc/textureTools.d.ts +3 -1
- package/Misc/textureTools.js +74 -13
- package/Misc/textureTools.js.map +1 -1
- package/Particles/baseParticleSystem.d.ts +33 -1
- package/Particles/baseParticleSystem.js +65 -0
- package/Particles/baseParticleSystem.js.map +1 -1
- package/Particles/computeShaderParticleSystem.js +6 -0
- package/Particles/computeShaderParticleSystem.js.map +1 -1
- package/Particles/gpuParticleSystem.d.ts +24 -6
- package/Particles/gpuParticleSystem.js +85 -36
- package/Particles/gpuParticleSystem.js.map +1 -1
- package/Particles/particleSystem.d.ts +0 -7
- package/Particles/particleSystem.js +3 -15
- package/Particles/particleSystem.js.map +1 -1
- package/Particles/thinParticleSystem.d.ts +1 -3
- package/Particles/thinParticleSystem.js +1 -27
- package/Particles/thinParticleSystem.js.map +1 -1
- package/Particles/webgl2ParticleSystem.js +7 -0
- package/Particles/webgl2ParticleSystem.js.map +1 -1
- package/Rendering/IBLShadows/iblShadowsAccumulationPass.js +1 -1
- package/Rendering/IBLShadows/iblShadowsAccumulationPass.js.map +1 -1
- package/Rendering/IBLShadows/iblShadowsPluginMaterial.d.ts +3 -1
- package/Rendering/IBLShadows/iblShadowsPluginMaterial.js +11 -1
- package/Rendering/IBLShadows/iblShadowsPluginMaterial.js.map +1 -1
- package/Rendering/IBLShadows/iblShadowsRenderPipeline.d.ts +0 -19
- package/Rendering/IBLShadows/iblShadowsRenderPipeline.js +21 -65
- package/Rendering/IBLShadows/iblShadowsRenderPipeline.js.map +1 -1
- package/Rendering/IBLShadows/iblShadowsVoxelRenderer.d.ts +15 -52
- package/Rendering/IBLShadows/iblShadowsVoxelRenderer.js +129 -220
- package/Rendering/IBLShadows/iblShadowsVoxelRenderer.js.map +1 -1
- package/Rendering/IBLShadows/iblShadowsVoxelTracingPass.js +3 -0
- package/Rendering/IBLShadows/iblShadowsVoxelTracingPass.js.map +1 -1
- package/Rendering/geometryBufferRenderer.d.ts +14 -5
- package/Rendering/geometryBufferRenderer.js +6 -2
- package/Rendering/geometryBufferRenderer.js.map +1 -1
- package/Rendering/geometryBufferRendererSceneComponent.d.ts +4 -6
- package/Rendering/geometryBufferRendererSceneComponent.js.map +1 -1
- package/Rendering/iblCdfGenerator.d.ts +10 -0
- package/Rendering/iblCdfGenerator.js +52 -17
- package/Rendering/iblCdfGenerator.js.map +1 -1
- package/Rendering/index.d.ts +0 -6
- package/Rendering/index.js +0 -6
- package/Rendering/index.js.map +1 -1
- package/Shaders/ShadersInclude/openpbrDirectLighting.js +6 -1
- package/Shaders/ShadersInclude/openpbrDirectLighting.js.map +1 -1
- package/Shaders/ShadersInclude/openpbrEnvironmentLighting.js +1 -1
- package/Shaders/ShadersInclude/openpbrEnvironmentLighting.js.map +1 -1
- package/Shaders/gpuUpdateParticles.vertex.js +12 -6
- package/Shaders/gpuUpdateParticles.vertex.js.map +1 -1
- package/Shaders/iblShadowVoxelTracing.fragment.js +5 -1
- package/Shaders/iblShadowVoxelTracing.fragment.js.map +1 -1
- package/Shaders/iblVoxelGrid.fragment.d.ts +1 -0
- package/Shaders/iblVoxelGrid.fragment.js +33 -5
- package/Shaders/iblVoxelGrid.fragment.js.map +1 -1
- package/Shaders/lod3D.fragment.d.ts +5 -0
- package/Shaders/lod3D.fragment.js +13 -0
- package/Shaders/lod3D.fragment.js.map +1 -0
- package/Shaders/openpbr.fragment.js +5 -0
- package/Shaders/openpbr.fragment.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/openpbrDirectLighting.js +6 -1
- package/ShadersWGSL/ShadersInclude/openpbrDirectLighting.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/openpbrEnvironmentLighting.js +1 -1
- package/ShadersWGSL/ShadersInclude/openpbrEnvironmentLighting.js.map +1 -1
- package/ShadersWGSL/gpuUpdateParticles.compute.js +14 -7
- package/ShadersWGSL/gpuUpdateParticles.compute.js.map +1 -1
- package/ShadersWGSL/iblShadowVoxelTracing.fragment.js +5 -1
- package/ShadersWGSL/iblShadowVoxelTracing.fragment.js.map +1 -1
- package/ShadersWGSL/iblVoxelGrid.fragment.js +1 -1
- package/ShadersWGSL/iblVoxelGrid.fragment.js.map +1 -1
- package/ShadersWGSL/lod3D.fragment.d.ts +5 -0
- package/ShadersWGSL/lod3D.fragment.js +13 -0
- package/ShadersWGSL/lod3D.fragment.js.map +1 -0
- package/ShadersWGSL/openpbr.fragment.js +5 -0
- package/ShadersWGSL/openpbr.fragment.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"iblShadowsRendererBlock.js","sourceRoot":"","sources":["../../../../../../../dev/core/src/FrameGraph/Node/Blocks/Rendering/iblShadowsRendererBlock.ts"],"names":[],"mappings":"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","sourcesContent":["import {\r\n type Camera,\r\n type FrameGraph,\r\n type FrameGraphObjectList,\r\n type FrameGraphTextureHandle,\r\n type NodeRenderGraphBuildState,\r\n type NodeRenderGraphConnectionPoint,\r\n type Scene,\r\n} from \"core/index\";\r\nimport { RegisterClass } from \"../../../../Misc/typeStore\";\r\nimport { editableInPropertyPage, PropertyTypeForEdition } from \"../../../../Decorators/nodeDecorator\";\r\nimport { NodeRenderGraphBlock } from \"../../nodeRenderGraphBlock\";\r\nimport { FrameGraphIblShadowsRendererTask } from \"core/FrameGraph/Tasks/Rendering/iblShadowsRendererTask\";\r\nimport { NodeRenderGraphBlockConnectionPointTypes } from \"../../Types/nodeRenderGraphTypes\";\r\n\r\n/**\r\n * Block that implements IBL (image-based lighting) shadows using voxel tracing.\r\n */\r\nexport class NodeRenderGraphIblShadowsRendererBlock extends NodeRenderGraphBlock {\r\n protected override _frameGraphTask: FrameGraphIblShadowsRendererTask;\r\n\r\n /**\r\n * Gets the frame graph task associated with this block\r\n */\r\n public override get task() {\r\n return this._frameGraphTask;\r\n }\r\n\r\n /**\r\n * Create a new NodeRenderGraphIblShadowsRendererBlock\r\n * @param name defines the block name\r\n * @param frameGraph defines the hosting frame graph\r\n * @param scene defines the hosting scene\r\n */\r\n public constructor(name: string, frameGraph: FrameGraph, scene: Scene) {\r\n super(name, frameGraph, scene);\r\n\r\n this.registerInput(\"depth\", NodeRenderGraphBlockConnectionPointTypes.TextureScreenDepth);\r\n this.registerInput(\"normal\", NodeRenderGraphBlockConnectionPointTypes.TextureWorldNormal);\r\n this.registerInput(\"position\", NodeRenderGraphBlockConnectionPointTypes.TextureWorldPosition);\r\n this.registerInput(\"velocity\", NodeRenderGraphBlockConnectionPointTypes.TextureLinearVelocity);\r\n this.registerInput(\"camera\", NodeRenderGraphBlockConnectionPointTypes.Camera);\r\n this.registerInput(\"objects\", NodeRenderGraphBlockConnectionPointTypes.ObjectList);\r\n\r\n this._addDependenciesInput();\r\n\r\n this.registerOutput(\"output\", NodeRenderGraphBlockConnectionPointTypes.Texture);\r\n\r\n this._frameGraphTask = new FrameGraphIblShadowsRendererTask(name, frameGraph);\r\n }\r\n\r\n // ------ Tracing properties ------\r\n\r\n /** Number of tracing sample directions */\r\n @editableInPropertyPage(\"Sample directions\", PropertyTypeForEdition.Int, \"TRACING\", { min: 1, max: 16 })\r\n public get sampleDirections(): number {\r\n return this._frameGraphTask.sampleDirections;\r\n }\r\n\r\n public set sampleDirections(value: number) {\r\n this._frameGraphTask.sampleDirections = value;\r\n }\r\n\r\n /** Whether traced shadows preserve environment color */\r\n @editableInPropertyPage(\"Colored shadows\", PropertyTypeForEdition.Boolean, \"TRACING\")\r\n public get coloredShadows(): boolean {\r\n return this._frameGraphTask.coloredShadows;\r\n }\r\n\r\n public set coloredShadows(value: boolean) {\r\n this._frameGraphTask.coloredShadows = value;\r\n }\r\n\r\n /** Opacity of voxel-traced shadows */\r\n @editableInPropertyPage(\"Voxel shadow opacity\", PropertyTypeForEdition.Float, \"TRACING\", { min: 0, max: 1 })\r\n public get voxelShadowOpacity(): number {\r\n return this._frameGraphTask.voxelShadowOpacity;\r\n }\r\n\r\n public set voxelShadowOpacity(value: number) {\r\n this._frameGraphTask.voxelShadowOpacity = value;\r\n }\r\n\r\n /** Opacity of screen-space shadows */\r\n @editableInPropertyPage(\"SS shadow opacity\", PropertyTypeForEdition.Float, \"TRACING\", { min: 0, max: 1 })\r\n public get ssShadowOpacity(): number {\r\n return this._frameGraphTask.ssShadowOpacity;\r\n }\r\n\r\n public set ssShadowOpacity(value: number) {\r\n this._frameGraphTask.ssShadowOpacity = value;\r\n }\r\n\r\n /** Number of screen-space shadow samples */\r\n @editableInPropertyPage(\"SS sample count\", PropertyTypeForEdition.Int, \"TRACING\", { min: 1, max: 64 })\r\n public get ssShadowSampleCount(): number {\r\n return this._frameGraphTask.ssShadowSampleCount;\r\n }\r\n\r\n public set ssShadowSampleCount(value: number) {\r\n this._frameGraphTask.ssShadowSampleCount = value;\r\n }\r\n\r\n /** Stride used by screen-space shadow sampling */\r\n @editableInPropertyPage(\"SS stride\", PropertyTypeForEdition.Int, \"TRACING\", { min: 1, max: 32 })\r\n public get ssShadowStride(): number {\r\n return this._frameGraphTask.ssShadowStride;\r\n }\r\n\r\n public set ssShadowStride(value: number) {\r\n this._frameGraphTask.ssShadowStride = value;\r\n }\r\n\r\n /** Distance scale used by screen-space shadow tracing */\r\n @editableInPropertyPage(\"SS distance scale\", PropertyTypeForEdition.Float, \"TRACING\", { min: 0 })\r\n public get ssShadowDistanceScale(): number {\r\n return this._frameGraphTask.ssShadowDistanceScale;\r\n }\r\n\r\n public set ssShadowDistanceScale(value: number) {\r\n this._frameGraphTask.ssShadowDistanceScale = value;\r\n }\r\n\r\n /** Thickness scale used by screen-space shadow tracing */\r\n @editableInPropertyPage(\"SS thickness scale\", PropertyTypeForEdition.Float, \"TRACING\", { min: 0 })\r\n public get ssShadowThicknessScale(): number {\r\n return this._frameGraphTask.ssShadowThicknessScale;\r\n }\r\n\r\n public set ssShadowThicknessScale(value: number) {\r\n this._frameGraphTask.ssShadowThicknessScale = value;\r\n }\r\n\r\n /** Voxel tracing normal bias */\r\n @editableInPropertyPage(\"Normal bias\", PropertyTypeForEdition.Float, \"TRACING\", { min: 0 })\r\n public get voxelNormalBias(): number {\r\n return this._frameGraphTask.voxelNormalBias;\r\n }\r\n\r\n public set voxelNormalBias(value: number) {\r\n this._frameGraphTask.voxelNormalBias = value;\r\n }\r\n\r\n /** Voxel tracing direction bias */\r\n @editableInPropertyPage(\"Direction bias\", PropertyTypeForEdition.Float, \"TRACING\", { min: 0 })\r\n public get voxelDirectionBias(): number {\r\n return this._frameGraphTask.voxelDirectionBias;\r\n }\r\n\r\n public set voxelDirectionBias(value: number) {\r\n this._frameGraphTask.voxelDirectionBias = value;\r\n }\r\n\r\n /** Environment rotation in radians */\r\n @editableInPropertyPage(\"Env rotation\", PropertyTypeForEdition.Float, \"TRACING\")\r\n public get envRotation(): number {\r\n return this._frameGraphTask.envRotation;\r\n }\r\n\r\n public set envRotation(value: number) {\r\n this._frameGraphTask.envRotation = value;\r\n }\r\n\r\n // ------ Accumulation properties ------\r\n\r\n /** Temporal shadow remanence while moving */\r\n @editableInPropertyPage(\"Shadow remanence\", PropertyTypeForEdition.Float, \"ACCUMULATION\", { min: 0, max: 1 })\r\n public get shadowRemanence(): number {\r\n return this._frameGraphTask.shadowRemanence;\r\n }\r\n\r\n public set shadowRemanence(value: number) {\r\n this._frameGraphTask.shadowRemanence = value;\r\n }\r\n\r\n /** Final material shadow opacity */\r\n @editableInPropertyPage(\"Shadow opacity\", PropertyTypeForEdition.Float, \"ACCUMULATION\", { min: 0, max: 1 })\r\n public get shadowOpacity(): number {\r\n return this._frameGraphTask.shadowOpacity;\r\n }\r\n\r\n public set shadowOpacity(value: number) {\r\n this._frameGraphTask.shadowOpacity = value;\r\n }\r\n\r\n // ------ Voxelization properties ------\r\n\r\n /** Voxelization resolution exponent (actual resolution is 2^value) */\r\n @editableInPropertyPage(\"Resolution exp\", PropertyTypeForEdition.Int, \"VOXELIZATION\", { min: 1, max: 8 })\r\n public get resolutionExp(): number {\r\n return this._frameGraphTask.resolutionExp;\r\n }\r\n\r\n public set resolutionExp(value: number) {\r\n this._frameGraphTask.resolutionExp = value;\r\n }\r\n\r\n /** Voxelization refresh rate (-1: manual, 0: every frame, N: skip N frames) */\r\n @editableInPropertyPage(\"Refresh rate\", PropertyTypeForEdition.Int, \"VOXELIZATION\", { min: -1 })\r\n public get refreshRate(): number {\r\n return this._frameGraphTask.refreshRate;\r\n }\r\n\r\n public set refreshRate(value: number) {\r\n this._frameGraphTask.refreshRate = value;\r\n }\r\n\r\n /** Whether tri-planar voxelization is used */\r\n @editableInPropertyPage(\"Tri-planar\", PropertyTypeForEdition.Boolean, \"VOXELIZATION\")\r\n public get triPlanarVoxelization(): boolean {\r\n return this._frameGraphTask.triPlanarVoxelization;\r\n }\r\n\r\n public set triPlanarVoxelization(value: boolean) {\r\n this._frameGraphTask.triPlanarVoxelization = value;\r\n }\r\n\r\n /**\r\n * Gets the current class name\r\n * @returns the class name\r\n */\r\n public override getClassName() {\r\n return \"NodeRenderGraphIblShadowsRendererBlock\";\r\n }\r\n\r\n /**\r\n * Gets the depth texture input component\r\n */\r\n public get depth(): NodeRenderGraphConnectionPoint {\r\n return this._inputs[0];\r\n }\r\n\r\n /**\r\n * Gets the normal texture input component\r\n */\r\n public get normal(): NodeRenderGraphConnectionPoint {\r\n return this._inputs[1];\r\n }\r\n\r\n /**\r\n * Gets the position texture input component\r\n */\r\n public get position(): NodeRenderGraphConnectionPoint {\r\n return this._inputs[2];\r\n }\r\n\r\n /**\r\n * Gets the velocity texture input component\r\n */\r\n public get velocity(): NodeRenderGraphConnectionPoint {\r\n return this._inputs[3];\r\n }\r\n\r\n /**\r\n * Gets the camera input component\r\n */\r\n public get camera(): NodeRenderGraphConnectionPoint {\r\n return this._inputs[4];\r\n }\r\n\r\n /**\r\n * Gets the objects input component\r\n */\r\n public get objects(): NodeRenderGraphConnectionPoint {\r\n return this._inputs[5];\r\n }\r\n\r\n /**\r\n * Gets the output component\r\n */\r\n public get output(): NodeRenderGraphConnectionPoint {\r\n return this._outputs[0];\r\n }\r\n\r\n protected override _buildBlock(state: NodeRenderGraphBuildState) {\r\n super._buildBlock(state);\r\n\r\n this.output.value = this._frameGraphTask.outputTexture;\r\n\r\n this._frameGraphTask.depthTexture = this.depth.connectedPoint?.value as FrameGraphTextureHandle;\r\n this._frameGraphTask.normalTexture = this.normal.connectedPoint?.value as FrameGraphTextureHandle;\r\n this._frameGraphTask.positionTexture = this.position.connectedPoint?.value as FrameGraphTextureHandle;\r\n this._frameGraphTask.velocityTexture = this.velocity.connectedPoint?.value as FrameGraphTextureHandle;\r\n this._frameGraphTask.camera = this.camera.connectedPoint?.value as Camera;\r\n this._frameGraphTask.objectList = this.objects.connectedPoint?.value as FrameGraphObjectList;\r\n }\r\n\r\n protected override _dumpPropertiesCode() {\r\n const codes: string[] = [];\r\n codes.push(`${this._codeVariableName}.sampleDirections = ${this.sampleDirections};`);\r\n codes.push(`${this._codeVariableName}.coloredShadows = ${this.coloredShadows};`);\r\n codes.push(`${this._codeVariableName}.voxelShadowOpacity = ${this.voxelShadowOpacity};`);\r\n codes.push(`${this._codeVariableName}.ssShadowOpacity = ${this.ssShadowOpacity};`);\r\n codes.push(`${this._codeVariableName}.ssShadowSampleCount = ${this.ssShadowSampleCount};`);\r\n codes.push(`${this._codeVariableName}.ssShadowStride = ${this.ssShadowStride};`);\r\n codes.push(`${this._codeVariableName}.ssShadowDistanceScale = ${this.ssShadowDistanceScale};`);\r\n codes.push(`${this._codeVariableName}.ssShadowThicknessScale = ${this.ssShadowThicknessScale};`);\r\n codes.push(`${this._codeVariableName}.voxelNormalBias = ${this.voxelNormalBias};`);\r\n codes.push(`${this._codeVariableName}.voxelDirectionBias = ${this.voxelDirectionBias};`);\r\n codes.push(`${this._codeVariableName}.envRotation = ${this.envRotation};`);\r\n codes.push(`${this._codeVariableName}.shadowRemanence = ${this.shadowRemanence};`);\r\n codes.push(`${this._codeVariableName}.shadowOpacity = ${this.shadowOpacity};`);\r\n codes.push(`${this._codeVariableName}.resolutionExp = ${this.resolutionExp};`);\r\n codes.push(`${this._codeVariableName}.refreshRate = ${this.refreshRate};`);\r\n codes.push(`${this._codeVariableName}.triPlanarVoxelization = ${this.triPlanarVoxelization};`);\r\n return super._dumpPropertiesCode() + codes.join(\"\\n\");\r\n }\r\n\r\n public override serialize(): any {\r\n const serializationObject = super.serialize();\r\n serializationObject.sampleDirections = this.sampleDirections;\r\n serializationObject.coloredShadows = this.coloredShadows;\r\n serializationObject.voxelShadowOpacity = this.voxelShadowOpacity;\r\n serializationObject.ssShadowOpacity = this.ssShadowOpacity;\r\n serializationObject.ssShadowSampleCount = this.ssShadowSampleCount;\r\n serializationObject.ssShadowStride = this.ssShadowStride;\r\n serializationObject.ssShadowDistanceScale = this.ssShadowDistanceScale;\r\n serializationObject.ssShadowThicknessScale = this.ssShadowThicknessScale;\r\n serializationObject.voxelNormalBias = this.voxelNormalBias;\r\n serializationObject.voxelDirectionBias = this.voxelDirectionBias;\r\n serializationObject.envRotation = this.envRotation;\r\n serializationObject.shadowRemanence = this.shadowRemanence;\r\n serializationObject.shadowOpacity = this.shadowOpacity;\r\n serializationObject.resolutionExp = this.resolutionExp;\r\n serializationObject.refreshRate = this.refreshRate;\r\n serializationObject.triPlanarVoxelization = this.triPlanarVoxelization;\r\n return serializationObject;\r\n }\r\n\r\n public override _deserialize(serializationObject: any) {\r\n super._deserialize(serializationObject);\r\n this.sampleDirections = serializationObject.sampleDirections;\r\n this.coloredShadows = serializationObject.coloredShadows;\r\n this.voxelShadowOpacity = serializationObject.voxelShadowOpacity;\r\n this.ssShadowOpacity = serializationObject.ssShadowOpacity;\r\n this.ssShadowSampleCount = serializationObject.ssShadowSampleCount;\r\n this.ssShadowStride = serializationObject.ssShadowStride;\r\n this.ssShadowDistanceScale = serializationObject.ssShadowDistanceScale;\r\n this.ssShadowThicknessScale = serializationObject.ssShadowThicknessScale;\r\n this.voxelNormalBias = serializationObject.voxelNormalBias;\r\n this.voxelDirectionBias = serializationObject.voxelDirectionBias;\r\n this.envRotation = serializationObject.envRotation;\r\n this.shadowRemanence = serializationObject.shadowRemanence;\r\n this.shadowOpacity = serializationObject.shadowOpacity;\r\n this.resolutionExp = serializationObject.resolutionExp;\r\n this.refreshRate = serializationObject.refreshRate;\r\n this.triPlanarVoxelization = serializationObject.triPlanarVoxelization;\r\n }\r\n}\r\n\r\nRegisterClass(\"BABYLON.NodeRenderGraphIblShadowsRendererBlock\", NodeRenderGraphIblShadowsRendererBlock);\r\n"]}
|
|
@@ -36,6 +36,7 @@ export * from "./PostProcesses/tonemapPostProcessBlock.js";
|
|
|
36
36
|
export * from "./PostProcesses/volumetricLightingBlock.js";
|
|
37
37
|
export * from "./Rendering/csmShadowGeneratorBlock.js";
|
|
38
38
|
export * from "./Rendering/geometryRendererBlock.js";
|
|
39
|
+
export * from "./Rendering/iblShadowsRendererBlock.js";
|
|
39
40
|
export * from "./Rendering/objectRendererBlock.js";
|
|
40
41
|
export * from "./Rendering/shadowGeneratorBlock.js";
|
|
41
42
|
export * from "./Rendering/utilityLayerRendererBlock.js";
|
|
@@ -36,6 +36,7 @@ export * from "./PostProcesses/tonemapPostProcessBlock.js";
|
|
|
36
36
|
export * from "./PostProcesses/volumetricLightingBlock.js";
|
|
37
37
|
export * from "./Rendering/csmShadowGeneratorBlock.js";
|
|
38
38
|
export * from "./Rendering/geometryRendererBlock.js";
|
|
39
|
+
export * from "./Rendering/iblShadowsRendererBlock.js";
|
|
39
40
|
export * from "./Rendering/objectRendererBlock.js";
|
|
40
41
|
export * from "./Rendering/shadowGeneratorBlock.js";
|
|
41
42
|
export * from "./Rendering/utilityLayerRendererBlock.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../dev/core/src/FrameGraph/Node/Blocks/index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC;AACnC,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,uBAAuB,CAAC;AACtC,cAAc,eAAe,CAAC;AAC9B,cAAc,0BAA0B,CAAC;AAEzC,cAAc,yBAAyB,CAAC;AACxC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,qCAAqC,CAAC;AAEpD,cAAc,0CAA0C,CAAC;AACzD,cAAc,sCAAsC,CAAC;AACrD,cAAc,oDAAoD,CAAC;AACnE,cAAc,+CAA+C,CAAC;AAC9D,cAAc,uCAAuC,CAAC;AACtD,cAAc,sCAAsC,CAAC;AACrD,cAAc,qDAAqD,CAAC;AACpE,cAAc,mDAAmD,CAAC;AAClE,cAAc,iDAAiD,CAAC;AAChE,cAAc,6CAA6C,CAAC;AAC5D,cAAc,8CAA8C,CAAC;AAC7D,cAAc,mDAAmD,CAAC;AAClE,cAAc,wCAAwC,CAAC;AACvD,cAAc,sCAAsC,CAAC;AACrD,cAAc,uCAAuC,CAAC;AACtD,cAAc,iDAAiD,CAAC;AAChE,cAAc,4CAA4C,CAAC;AAC3D,cAAc,sCAAsC,CAAC;AACrD,cAAc,yCAAyC,CAAC;AACxD,cAAc,sDAAsD,CAAC;AACrE,cAAc,uCAAuC,CAAC;AACtD,cAAc,qCAAqC,CAAC;AACpD,cAAc,qCAAqC,CAAC;AACpD,cAAc,yCAAyC,CAAC;AACxD,cAAc,yCAAyC,CAAC;AAExD,cAAc,qCAAqC,CAAC;AACpD,cAAc,mCAAmC,CAAC;AAClD,cAAc,iCAAiC,CAAC;AAChD,cAAc,kCAAkC,CAAC;AACjD,cAAc,uCAAuC,CAAC;AAEtD,cAAc,4BAA4B,CAAC;AAC3C,cAAc,6BAA6B,CAAC;AAE5C,cAAc,uBAAuB,CAAC;AACtC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,iCAAiC,CAAC","sourcesContent":["export * from \"./computeShaderBlock\";\r\nexport * from \"./cullObjectsBlock\";\r\nexport * from \"./elbowBlock\";\r\nexport * from \"./executeBlock\";\r\nexport * from \"./inputBlock\";\r\nexport * from \"./lightingVolumeBlock\";\r\nexport * from \"./outputBlock\";\r\nexport * from \"./resourceContainerBlock\";\r\n\r\nexport * from \"./Layers/glowLayerBlock\";\r\nexport * from \"./Layers/highlightLayerBlock\";\r\nexport * from \"./Layers/selectionOutlineLayerBlock\";\r\n\r\nexport * from \"./PostProcesses/anaglyphPostProcessBlock\";\r\nexport * from \"./PostProcesses/basePostProcessBlock\";\r\nexport * from \"./PostProcesses/baseWithPropertiesPostProcessBlock\";\r\nexport * from \"./PostProcesses/blackAndWhitePostProcessBlock\";\r\nexport * from \"./PostProcesses/bloomPostProcessBlock\";\r\nexport * from \"./PostProcesses/blurPostProcessBlock\";\r\nexport * from \"./PostProcesses/chromaticAberrationPostProcessBlock\";\r\nexport * from \"./PostProcesses/circleOfConfusionPostProcessBlock\";\r\nexport * from \"./PostProcesses/colorCorrectionPostProcessBlock\";\r\nexport * from \"./PostProcesses/convolutionPostProcessBlock\";\r\nexport * from \"./PostProcesses/depthOfFieldPostProcessBlock\";\r\nexport * from \"./PostProcesses/extractHighlightsPostProcessBlock\";\r\nexport * from \"./PostProcesses/filterPostProcessBlock\";\r\nexport * from \"./PostProcesses/fxaaPostProcessBlock\";\r\nexport * from \"./PostProcesses/grainPostProcessBlock\";\r\nexport * from \"./PostProcesses/imageProcessingPostProcessBlock\";\r\nexport * from \"./PostProcesses/motionBlurPostProcessBlock\";\r\nexport * from \"./PostProcesses/passPostProcessBlock\";\r\nexport * from \"./PostProcesses/sharpenPostProcessBlock\";\r\nexport * from \"./PostProcesses/screenSpaceCurvaturePostProcessBlock\";\r\nexport * from \"./PostProcesses/ssao2PostProcessBlock\";\r\nexport * from \"./PostProcesses/ssrPostProcessBlock\";\r\nexport * from \"./PostProcesses/taaPostProcessBlock\";\r\nexport * from \"./PostProcesses/tonemapPostProcessBlock\";\r\nexport * from \"./PostProcesses/volumetricLightingBlock\";\r\n\r\nexport * from \"./Rendering/csmShadowGeneratorBlock\";\r\nexport * from \"./Rendering/geometryRendererBlock\";\r\nexport * from \"./Rendering/objectRendererBlock\";\r\nexport * from \"./Rendering/shadowGeneratorBlock\";\r\nexport * from \"./Rendering/utilityLayerRendererBlock\";\r\n\r\nexport * from \"./Teleport/teleportInBlock\";\r\nexport * from \"./Teleport/teleportOutBlock\";\r\n\r\nexport * from \"./Textures/clearBlock\";\r\nexport * from \"./Textures/copyTextureBlock\";\r\nexport * from \"./Textures/generateMipmapsBlock\";\r\n"]}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../dev/core/src/FrameGraph/Node/Blocks/index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC;AACnC,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,uBAAuB,CAAC;AACtC,cAAc,eAAe,CAAC;AAC9B,cAAc,0BAA0B,CAAC;AAEzC,cAAc,yBAAyB,CAAC;AACxC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,qCAAqC,CAAC;AAEpD,cAAc,0CAA0C,CAAC;AACzD,cAAc,sCAAsC,CAAC;AACrD,cAAc,oDAAoD,CAAC;AACnE,cAAc,+CAA+C,CAAC;AAC9D,cAAc,uCAAuC,CAAC;AACtD,cAAc,sCAAsC,CAAC;AACrD,cAAc,qDAAqD,CAAC;AACpE,cAAc,mDAAmD,CAAC;AAClE,cAAc,iDAAiD,CAAC;AAChE,cAAc,6CAA6C,CAAC;AAC5D,cAAc,8CAA8C,CAAC;AAC7D,cAAc,mDAAmD,CAAC;AAClE,cAAc,wCAAwC,CAAC;AACvD,cAAc,sCAAsC,CAAC;AACrD,cAAc,uCAAuC,CAAC;AACtD,cAAc,iDAAiD,CAAC;AAChE,cAAc,4CAA4C,CAAC;AAC3D,cAAc,sCAAsC,CAAC;AACrD,cAAc,yCAAyC,CAAC;AACxD,cAAc,sDAAsD,CAAC;AACrE,cAAc,uCAAuC,CAAC;AACtD,cAAc,qCAAqC,CAAC;AACpD,cAAc,qCAAqC,CAAC;AACpD,cAAc,yCAAyC,CAAC;AACxD,cAAc,yCAAyC,CAAC;AAExD,cAAc,qCAAqC,CAAC;AACpD,cAAc,mCAAmC,CAAC;AAClD,cAAc,qCAAqC,CAAC;AACpD,cAAc,iCAAiC,CAAC;AAChD,cAAc,kCAAkC,CAAC;AACjD,cAAc,uCAAuC,CAAC;AAEtD,cAAc,4BAA4B,CAAC;AAC3C,cAAc,6BAA6B,CAAC;AAE5C,cAAc,uBAAuB,CAAC;AACtC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,iCAAiC,CAAC","sourcesContent":["export * from \"./computeShaderBlock\";\r\nexport * from \"./cullObjectsBlock\";\r\nexport * from \"./elbowBlock\";\r\nexport * from \"./executeBlock\";\r\nexport * from \"./inputBlock\";\r\nexport * from \"./lightingVolumeBlock\";\r\nexport * from \"./outputBlock\";\r\nexport * from \"./resourceContainerBlock\";\r\n\r\nexport * from \"./Layers/glowLayerBlock\";\r\nexport * from \"./Layers/highlightLayerBlock\";\r\nexport * from \"./Layers/selectionOutlineLayerBlock\";\r\n\r\nexport * from \"./PostProcesses/anaglyphPostProcessBlock\";\r\nexport * from \"./PostProcesses/basePostProcessBlock\";\r\nexport * from \"./PostProcesses/baseWithPropertiesPostProcessBlock\";\r\nexport * from \"./PostProcesses/blackAndWhitePostProcessBlock\";\r\nexport * from \"./PostProcesses/bloomPostProcessBlock\";\r\nexport * from \"./PostProcesses/blurPostProcessBlock\";\r\nexport * from \"./PostProcesses/chromaticAberrationPostProcessBlock\";\r\nexport * from \"./PostProcesses/circleOfConfusionPostProcessBlock\";\r\nexport * from \"./PostProcesses/colorCorrectionPostProcessBlock\";\r\nexport * from \"./PostProcesses/convolutionPostProcessBlock\";\r\nexport * from \"./PostProcesses/depthOfFieldPostProcessBlock\";\r\nexport * from \"./PostProcesses/extractHighlightsPostProcessBlock\";\r\nexport * from \"./PostProcesses/filterPostProcessBlock\";\r\nexport * from \"./PostProcesses/fxaaPostProcessBlock\";\r\nexport * from \"./PostProcesses/grainPostProcessBlock\";\r\nexport * from \"./PostProcesses/imageProcessingPostProcessBlock\";\r\nexport * from \"./PostProcesses/motionBlurPostProcessBlock\";\r\nexport * from \"./PostProcesses/passPostProcessBlock\";\r\nexport * from \"./PostProcesses/sharpenPostProcessBlock\";\r\nexport * from \"./PostProcesses/screenSpaceCurvaturePostProcessBlock\";\r\nexport * from \"./PostProcesses/ssao2PostProcessBlock\";\r\nexport * from \"./PostProcesses/ssrPostProcessBlock\";\r\nexport * from \"./PostProcesses/taaPostProcessBlock\";\r\nexport * from \"./PostProcesses/tonemapPostProcessBlock\";\r\nexport * from \"./PostProcesses/volumetricLightingBlock\";\r\n\r\nexport * from \"./Rendering/csmShadowGeneratorBlock\";\r\nexport * from \"./Rendering/geometryRendererBlock\";\r\nexport * from \"./Rendering/iblShadowsRendererBlock\";\r\nexport * from \"./Rendering/objectRendererBlock\";\r\nexport * from \"./Rendering/shadowGeneratorBlock\";\r\nexport * from \"./Rendering/utilityLayerRendererBlock\";\r\n\r\nexport * from \"./Teleport/teleportInBlock\";\r\nexport * from \"./Teleport/teleportOutBlock\";\r\n\r\nexport * from \"./Textures/clearBlock\";\r\nexport * from \"./Textures/copyTextureBlock\";\r\nexport * from \"./Textures/generateMipmapsBlock\";\r\n"]}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { type DrawWrapper, type FrameGraph, type FrameGraphTextureHandle } from "../../../../index.js";
|
|
2
|
+
import { type FrameGraphIblShadowsVoxelizationTask } from "./iblShadowsVoxelizationTask.js";
|
|
3
|
+
import { Vector4 } from "../../../../Maths/math.vector.js";
|
|
4
|
+
import { ThinCustomPostProcess } from "../../../../PostProcesses/thinCustomPostProcess.js";
|
|
5
|
+
import { FrameGraphTask } from "../../../frameGraphTask.js";
|
|
6
|
+
/**
|
|
7
|
+
* Task used to temporally accumulate IBL shadows.
|
|
8
|
+
* @internal
|
|
9
|
+
*/
|
|
10
|
+
export declare class FrameGraphIblShadowsAccumulationTask extends FrameGraphTask {
|
|
11
|
+
sourceTexture?: FrameGraphTextureHandle;
|
|
12
|
+
velocityTexture?: FrameGraphTextureHandle;
|
|
13
|
+
positionTexture?: FrameGraphTextureHandle;
|
|
14
|
+
private _remanence;
|
|
15
|
+
get remanence(): number;
|
|
16
|
+
set remanence(value: number);
|
|
17
|
+
reset: boolean;
|
|
18
|
+
isMoving: boolean;
|
|
19
|
+
voxelGridSize: number;
|
|
20
|
+
/** Voxelization task providing the runtime voxelGridSize used by the accumulation shader. */
|
|
21
|
+
voxelizationTask?: FrameGraphIblShadowsVoxelizationTask;
|
|
22
|
+
protected _accumulationHistoryTexture?: FrameGraphTextureHandle;
|
|
23
|
+
protected _positionHistoryTexture?: FrameGraphTextureHandle;
|
|
24
|
+
readonly outputTexture: FrameGraphTextureHandle;
|
|
25
|
+
readonly postProcess: ThinCustomPostProcess;
|
|
26
|
+
protected readonly _postProcessDrawWrapper: DrawWrapper;
|
|
27
|
+
protected readonly _accumulationParams: Vector4;
|
|
28
|
+
constructor(name: string, frameGraph: FrameGraph);
|
|
29
|
+
getClassName(): string;
|
|
30
|
+
initAsync(): Promise<unknown>;
|
|
31
|
+
isReady(): boolean;
|
|
32
|
+
record(): void;
|
|
33
|
+
dispose(): void;
|
|
34
|
+
}
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
|
|
2
|
+
import { Vector4 } from "../../../../Maths/math.vector.js";
|
|
3
|
+
import { ThinCustomPostProcess } from "../../../../PostProcesses/thinCustomPostProcess.js";
|
|
4
|
+
import { FrameGraphTask } from "../../../frameGraphTask.js";
|
|
5
|
+
/**
|
|
6
|
+
* Task used to temporally accumulate IBL shadows.
|
|
7
|
+
* @internal
|
|
8
|
+
*/
|
|
9
|
+
export class FrameGraphIblShadowsAccumulationTask extends FrameGraphTask {
|
|
10
|
+
get remanence() {
|
|
11
|
+
return this._remanence;
|
|
12
|
+
}
|
|
13
|
+
set remanence(value) {
|
|
14
|
+
this._remanence = Math.max(0, Math.min(value, 1));
|
|
15
|
+
}
|
|
16
|
+
constructor(name, frameGraph) {
|
|
17
|
+
super(name, frameGraph);
|
|
18
|
+
this._remanence = 0.75;
|
|
19
|
+
this.reset = true;
|
|
20
|
+
this.isMoving = false;
|
|
21
|
+
this.voxelGridSize = 1;
|
|
22
|
+
this._accumulationParams = new Vector4(0, 0, 0, 0);
|
|
23
|
+
this.postProcess = new ThinCustomPostProcess(name, frameGraph.engine, {
|
|
24
|
+
fragmentShader: "iblShadowAccumulation",
|
|
25
|
+
uniforms: ["accumulationParameters"],
|
|
26
|
+
samplers: ["spatialBlurSampler", "oldAccumulationSampler", "prevPositionSampler", "motionSampler", "positionSampler"],
|
|
27
|
+
shaderLanguage: frameGraph.engine.isWebGPU ? 1 /* ShaderLanguage.WGSL */ : 0 /* ShaderLanguage.GLSL */,
|
|
28
|
+
});
|
|
29
|
+
this._postProcessDrawWrapper = this.postProcess.drawWrapper;
|
|
30
|
+
this.outputTexture = this._frameGraph.textureManager.createDanglingHandle();
|
|
31
|
+
}
|
|
32
|
+
getClassName() {
|
|
33
|
+
return "FrameGraphIblShadowsAccumulationTask";
|
|
34
|
+
}
|
|
35
|
+
// eslint-disable-next-line @typescript-eslint/promise-function-async, no-restricted-syntax
|
|
36
|
+
initAsync() {
|
|
37
|
+
if (this._frameGraph.engine.isWebGPU) {
|
|
38
|
+
return import("../../../../ShadersWGSL/iblShadowAccumulation.fragment.js");
|
|
39
|
+
}
|
|
40
|
+
return import("../../../../Shaders/iblShadowAccumulation.fragment.js");
|
|
41
|
+
}
|
|
42
|
+
isReady() {
|
|
43
|
+
return this.postProcess.isReady();
|
|
44
|
+
}
|
|
45
|
+
record() {
|
|
46
|
+
if (this.sourceTexture === undefined || this.velocityTexture === undefined || this.positionTexture === undefined) {
|
|
47
|
+
throw new Error(`FrameGraphIblShadowsAccumulationTask ${this.name}: sourceTexture, velocityTexture and positionTexture are required`);
|
|
48
|
+
}
|
|
49
|
+
const textureManager = this._frameGraph.textureManager;
|
|
50
|
+
const outputSize = textureManager.getTextureAbsoluteDimensions(this.sourceTexture);
|
|
51
|
+
const positionSize = textureManager.getTextureAbsoluteDimensions(this.positionTexture);
|
|
52
|
+
const outputCreationOptions = {
|
|
53
|
+
size: outputSize,
|
|
54
|
+
sizeIsPercentage: false,
|
|
55
|
+
isHistoryTexture: false,
|
|
56
|
+
options: {
|
|
57
|
+
createMipMaps: false,
|
|
58
|
+
samples: 1,
|
|
59
|
+
types: [2],
|
|
60
|
+
formats: [5],
|
|
61
|
+
useSRGBBuffers: [false],
|
|
62
|
+
creationFlags: [0],
|
|
63
|
+
labels: [`${this.name} Output`],
|
|
64
|
+
},
|
|
65
|
+
};
|
|
66
|
+
textureManager.resolveDanglingHandle(this.outputTexture, undefined, `${this.name} Output`, outputCreationOptions);
|
|
67
|
+
const accumulationHistoryCreationOptions = {
|
|
68
|
+
size: outputSize,
|
|
69
|
+
sizeIsPercentage: false,
|
|
70
|
+
isHistoryTexture: true,
|
|
71
|
+
options: {
|
|
72
|
+
createMipMaps: false,
|
|
73
|
+
samples: 1,
|
|
74
|
+
types: [2],
|
|
75
|
+
formats: [5],
|
|
76
|
+
useSRGBBuffers: [false],
|
|
77
|
+
creationFlags: [0],
|
|
78
|
+
labels: [`${this.name} History`],
|
|
79
|
+
},
|
|
80
|
+
};
|
|
81
|
+
const positionHistoryCreationOptions = {
|
|
82
|
+
size: positionSize,
|
|
83
|
+
sizeIsPercentage: false,
|
|
84
|
+
isHistoryTexture: true,
|
|
85
|
+
options: {
|
|
86
|
+
createMipMaps: false,
|
|
87
|
+
samples: 1,
|
|
88
|
+
types: [2],
|
|
89
|
+
formats: [5],
|
|
90
|
+
useSRGBBuffers: [false],
|
|
91
|
+
creationFlags: [0],
|
|
92
|
+
labels: [`${this.name} Position History`],
|
|
93
|
+
},
|
|
94
|
+
};
|
|
95
|
+
this._accumulationHistoryTexture = textureManager.createRenderTargetTexture(`${this.name} Accumulation History`, accumulationHistoryCreationOptions, this._accumulationHistoryTexture);
|
|
96
|
+
this._positionHistoryTexture = textureManager.createRenderTargetTexture(`${this.name} Position History`, positionHistoryCreationOptions, this._positionHistoryTexture);
|
|
97
|
+
const pass = this._frameGraph.addRenderPass(this.name);
|
|
98
|
+
pass.addDependencies(this.sourceTexture);
|
|
99
|
+
pass.addDependencies(this.velocityTexture);
|
|
100
|
+
pass.addDependencies(this.positionTexture);
|
|
101
|
+
pass.addDependencies(this._accumulationHistoryTexture);
|
|
102
|
+
pass.addDependencies(this._positionHistoryTexture);
|
|
103
|
+
// Accumulation writes directly to the history handle (current frame write side)
|
|
104
|
+
// so oldAccumulationSampler reads previous-frame data automatically.
|
|
105
|
+
// A dedicated copy pass then exposes a stable current-frame outputTexture.
|
|
106
|
+
pass.setRenderTarget(this._accumulationHistoryTexture);
|
|
107
|
+
pass.setExecuteFunc((context) => {
|
|
108
|
+
context.setTextureSamplingMode(this.sourceTexture, 1);
|
|
109
|
+
context.setTextureSamplingMode(this.velocityTexture, 1);
|
|
110
|
+
context.setTextureSamplingMode(this.positionTexture, 1);
|
|
111
|
+
const remanence = this.isMoving ? this.remanence : 0.99;
|
|
112
|
+
this._accumulationParams.set(remanence, this.reset ? 1.0 : 0.0, this.voxelizationTask?.voxelGridSize ?? this.voxelGridSize, 0.0);
|
|
113
|
+
context.applyFullScreenEffect(this._postProcessDrawWrapper, () => {
|
|
114
|
+
const effect = this._postProcessDrawWrapper.effect;
|
|
115
|
+
context.bindTextureHandle(effect, "spatialBlurSampler", this.sourceTexture);
|
|
116
|
+
context.bindTextureHandle(effect, "oldAccumulationSampler", this._accumulationHistoryTexture);
|
|
117
|
+
context.bindTextureHandle(effect, "prevPositionSampler", this._positionHistoryTexture);
|
|
118
|
+
context.bindTextureHandle(effect, "motionSampler", this.velocityTexture);
|
|
119
|
+
context.bindTextureHandle(effect, "positionSampler", this.positionTexture);
|
|
120
|
+
effect.setVector4("accumulationParameters", this._accumulationParams);
|
|
121
|
+
this.postProcess.bind();
|
|
122
|
+
}, undefined, false, false, true);
|
|
123
|
+
this.reset = false;
|
|
124
|
+
this.isMoving = false;
|
|
125
|
+
});
|
|
126
|
+
const copyPositionToHistoryPass = this._frameGraph.addRenderPass(`${this.name} CopyPositionToHistory`);
|
|
127
|
+
copyPositionToHistoryPass.addDependencies(this.positionTexture);
|
|
128
|
+
copyPositionToHistoryPass.setRenderTarget(this._positionHistoryTexture);
|
|
129
|
+
copyPositionToHistoryPass.setExecuteFunc((context) => {
|
|
130
|
+
context.copyTexture(this.positionTexture);
|
|
131
|
+
});
|
|
132
|
+
const copyAccumulationToOutputPass = this._frameGraph.addRenderPass(`${this.name} CopyAccumulationToOutput`);
|
|
133
|
+
copyAccumulationToOutputPass.addDependencies(this._accumulationHistoryTexture);
|
|
134
|
+
copyAccumulationToOutputPass.setRenderTarget(this.outputTexture);
|
|
135
|
+
copyAccumulationToOutputPass.setExecuteFunc((context) => {
|
|
136
|
+
context.copyTexture(this._accumulationHistoryTexture);
|
|
137
|
+
});
|
|
138
|
+
}
|
|
139
|
+
dispose() {
|
|
140
|
+
this.postProcess.dispose();
|
|
141
|
+
super.dispose();
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
//# sourceMappingURL=iblShadowsAccumulationTask.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"iblShadowsAccumulationTask.js","sourceRoot":"","sources":["../../../../../../../dev/core/src/FrameGraph/Tasks/Rendering/iblShadows/iblShadowsAccumulationTask.ts"],"names":[],"mappings":"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","sourcesContent":["import { type DrawWrapper, type FrameGraph, type FrameGraphTextureCreationOptions, type FrameGraphTextureHandle } from \"core/index\";\r\nimport { Constants } from \"core/Engines/constants\";\r\nimport { type FrameGraphIblShadowsVoxelizationTask } from \"./iblShadowsVoxelizationTask\";\r\nimport { Vector4 } from \"core/Maths/math.vector\";\r\nimport { ThinCustomPostProcess } from \"core/PostProcesses/thinCustomPostProcess\";\r\nimport { ShaderLanguage } from \"core/Materials/shaderLanguage\";\r\nimport { FrameGraphTask } from \"../../../frameGraphTask\";\r\n\r\n/**\r\n * Task used to temporally accumulate IBL shadows.\r\n * @internal\r\n */\r\nexport class FrameGraphIblShadowsAccumulationTask extends FrameGraphTask {\r\n public sourceTexture?: FrameGraphTextureHandle;\r\n public velocityTexture?: FrameGraphTextureHandle;\r\n public positionTexture?: FrameGraphTextureHandle;\r\n\r\n private _remanence = 0.75;\r\n\r\n public get remanence(): number {\r\n return this._remanence;\r\n }\r\n\r\n public set remanence(value: number) {\r\n this._remanence = Math.max(0, Math.min(value, 1));\r\n }\r\n public reset = true;\r\n public isMoving = false;\r\n public voxelGridSize = 1;\r\n /** Voxelization task providing the runtime voxelGridSize used by the accumulation shader. */\r\n public voxelizationTask?: FrameGraphIblShadowsVoxelizationTask;\r\n\r\n protected _accumulationHistoryTexture?: FrameGraphTextureHandle;\r\n protected _positionHistoryTexture?: FrameGraphTextureHandle;\r\n\r\n public readonly outputTexture: FrameGraphTextureHandle;\r\n\r\n public readonly postProcess: ThinCustomPostProcess;\r\n protected readonly _postProcessDrawWrapper: DrawWrapper;\r\n protected readonly _accumulationParams = new Vector4(0, 0, 0, 0);\r\n\r\n constructor(name: string, frameGraph: FrameGraph) {\r\n super(name, frameGraph);\r\n\r\n this.postProcess = new ThinCustomPostProcess(name, frameGraph.engine, {\r\n fragmentShader: \"iblShadowAccumulation\",\r\n uniforms: [\"accumulationParameters\"],\r\n samplers: [\"spatialBlurSampler\", \"oldAccumulationSampler\", \"prevPositionSampler\", \"motionSampler\", \"positionSampler\"],\r\n shaderLanguage: frameGraph.engine.isWebGPU ? ShaderLanguage.WGSL : ShaderLanguage.GLSL,\r\n });\r\n this._postProcessDrawWrapper = this.postProcess.drawWrapper;\r\n\r\n this.outputTexture = this._frameGraph.textureManager.createDanglingHandle();\r\n }\r\n\r\n public override getClassName(): string {\r\n return \"FrameGraphIblShadowsAccumulationTask\";\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/promise-function-async, no-restricted-syntax\r\n public override initAsync(): Promise<unknown> {\r\n if (this._frameGraph.engine.isWebGPU) {\r\n return import(\"../../../../ShadersWGSL/iblShadowAccumulation.fragment\");\r\n }\r\n\r\n return import(\"../../../../Shaders/iblShadowAccumulation.fragment\");\r\n }\r\n\r\n public override isReady(): boolean {\r\n return this.postProcess.isReady();\r\n }\r\n\r\n public override record() {\r\n if (this.sourceTexture === undefined || this.velocityTexture === undefined || this.positionTexture === undefined) {\r\n throw new Error(`FrameGraphIblShadowsAccumulationTask ${this.name}: sourceTexture, velocityTexture and positionTexture are required`);\r\n }\r\n\r\n const textureManager = this._frameGraph.textureManager;\r\n const outputSize = textureManager.getTextureAbsoluteDimensions(this.sourceTexture);\r\n const positionSize = textureManager.getTextureAbsoluteDimensions(this.positionTexture);\r\n\r\n const outputCreationOptions: FrameGraphTextureCreationOptions = {\r\n size: outputSize,\r\n sizeIsPercentage: false,\r\n isHistoryTexture: false,\r\n options: {\r\n createMipMaps: false,\r\n samples: 1,\r\n types: [Constants.TEXTURETYPE_HALF_FLOAT],\r\n formats: [Constants.TEXTUREFORMAT_RGBA],\r\n useSRGBBuffers: [false],\r\n creationFlags: [0],\r\n labels: [`${this.name} Output`],\r\n },\r\n };\r\n\r\n textureManager.resolveDanglingHandle(this.outputTexture, undefined, `${this.name} Output`, outputCreationOptions);\r\n\r\n const accumulationHistoryCreationOptions: FrameGraphTextureCreationOptions = {\r\n size: outputSize,\r\n sizeIsPercentage: false,\r\n isHistoryTexture: true,\r\n options: {\r\n createMipMaps: false,\r\n samples: 1,\r\n types: [Constants.TEXTURETYPE_HALF_FLOAT],\r\n formats: [Constants.TEXTUREFORMAT_RGBA],\r\n useSRGBBuffers: [false],\r\n creationFlags: [0],\r\n labels: [`${this.name} History`],\r\n },\r\n };\r\n\r\n const positionHistoryCreationOptions: FrameGraphTextureCreationOptions = {\r\n size: positionSize,\r\n sizeIsPercentage: false,\r\n isHistoryTexture: true,\r\n options: {\r\n createMipMaps: false,\r\n samples: 1,\r\n types: [Constants.TEXTURETYPE_HALF_FLOAT],\r\n formats: [Constants.TEXTUREFORMAT_RGBA],\r\n useSRGBBuffers: [false],\r\n creationFlags: [0],\r\n labels: [`${this.name} Position History`],\r\n },\r\n };\r\n\r\n this._accumulationHistoryTexture = textureManager.createRenderTargetTexture(\r\n `${this.name} Accumulation History`,\r\n accumulationHistoryCreationOptions,\r\n this._accumulationHistoryTexture\r\n );\r\n this._positionHistoryTexture = textureManager.createRenderTargetTexture(`${this.name} Position History`, positionHistoryCreationOptions, this._positionHistoryTexture);\r\n\r\n const pass = this._frameGraph.addRenderPass(this.name);\r\n\r\n pass.addDependencies(this.sourceTexture);\r\n pass.addDependencies(this.velocityTexture);\r\n pass.addDependencies(this.positionTexture);\r\n pass.addDependencies(this._accumulationHistoryTexture);\r\n pass.addDependencies(this._positionHistoryTexture);\r\n // Accumulation writes directly to the history handle (current frame write side)\r\n // so oldAccumulationSampler reads previous-frame data automatically.\r\n // A dedicated copy pass then exposes a stable current-frame outputTexture.\r\n pass.setRenderTarget(this._accumulationHistoryTexture);\r\n pass.setExecuteFunc((context) => {\r\n context.setTextureSamplingMode(this.sourceTexture!, Constants.TEXTURE_NEAREST_SAMPLINGMODE);\r\n context.setTextureSamplingMode(this.velocityTexture!, Constants.TEXTURE_NEAREST_SAMPLINGMODE);\r\n context.setTextureSamplingMode(this.positionTexture!, Constants.TEXTURE_NEAREST_SAMPLINGMODE);\r\n\r\n const remanence = this.isMoving ? this.remanence : 0.99;\r\n this._accumulationParams.set(remanence, this.reset ? 1.0 : 0.0, this.voxelizationTask?.voxelGridSize ?? this.voxelGridSize, 0.0);\r\n\r\n context.applyFullScreenEffect(\r\n this._postProcessDrawWrapper,\r\n () => {\r\n const effect = this._postProcessDrawWrapper.effect!;\r\n\r\n context.bindTextureHandle(effect, \"spatialBlurSampler\", this.sourceTexture!);\r\n context.bindTextureHandle(effect, \"oldAccumulationSampler\", this._accumulationHistoryTexture!);\r\n context.bindTextureHandle(effect, \"prevPositionSampler\", this._positionHistoryTexture!);\r\n context.bindTextureHandle(effect, \"motionSampler\", this.velocityTexture!);\r\n context.bindTextureHandle(effect, \"positionSampler\", this.positionTexture!);\r\n\r\n effect.setVector4(\"accumulationParameters\", this._accumulationParams);\r\n this.postProcess.bind();\r\n },\r\n undefined,\r\n false,\r\n false,\r\n true\r\n );\r\n\r\n this.reset = false;\r\n this.isMoving = false;\r\n });\r\n\r\n const copyPositionToHistoryPass = this._frameGraph.addRenderPass(`${this.name} CopyPositionToHistory`);\r\n\r\n copyPositionToHistoryPass.addDependencies(this.positionTexture);\r\n copyPositionToHistoryPass.setRenderTarget(this._positionHistoryTexture);\r\n copyPositionToHistoryPass.setExecuteFunc((context) => {\r\n context.copyTexture(this.positionTexture!);\r\n });\r\n\r\n const copyAccumulationToOutputPass = this._frameGraph.addRenderPass(`${this.name} CopyAccumulationToOutput`);\r\n\r\n copyAccumulationToOutputPass.addDependencies(this._accumulationHistoryTexture);\r\n copyAccumulationToOutputPass.setRenderTarget(this.outputTexture);\r\n copyAccumulationToOutputPass.setExecuteFunc((context) => {\r\n context.copyTexture(this._accumulationHistoryTexture!);\r\n });\r\n }\r\n\r\n public override dispose(): void {\r\n this.postProcess.dispose();\r\n super.dispose();\r\n }\r\n}\r\n"]}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { type DrawWrapper, type FrameGraph, type FrameGraphTextureHandle } from "../../../../index.js";
|
|
2
|
+
import { type FrameGraphIblShadowsVoxelizationTask } from "./iblShadowsVoxelizationTask.js";
|
|
3
|
+
import { Vector4 } from "../../../../Maths/math.vector.js";
|
|
4
|
+
import { ThinCustomPostProcess } from "../../../../PostProcesses/thinCustomPostProcess.js";
|
|
5
|
+
import { FrameGraphTask } from "../../../frameGraphTask.js";
|
|
6
|
+
/**
|
|
7
|
+
* Task used to spatially blur IBL shadows.
|
|
8
|
+
* @internal
|
|
9
|
+
*/
|
|
10
|
+
export declare class FrameGraphIblShadowsSpatialBlurTask extends FrameGraphTask {
|
|
11
|
+
sourceTexture?: FrameGraphTextureHandle;
|
|
12
|
+
depthTexture?: FrameGraphTextureHandle;
|
|
13
|
+
normalTexture?: FrameGraphTextureHandle;
|
|
14
|
+
/** Voxelization task providing the dynamic voxelGridSize used as worldScale. */
|
|
15
|
+
voxelizationTask?: FrameGraphIblShadowsVoxelizationTask;
|
|
16
|
+
readonly outputTexture: FrameGraphTextureHandle;
|
|
17
|
+
readonly postProcess: ThinCustomPostProcess;
|
|
18
|
+
protected readonly _postProcessDrawWrapper: DrawWrapper;
|
|
19
|
+
protected readonly _blurParameters: Vector4;
|
|
20
|
+
constructor(name: string, frameGraph: FrameGraph);
|
|
21
|
+
getClassName(): string;
|
|
22
|
+
initAsync(): Promise<unknown>;
|
|
23
|
+
isReady(): boolean;
|
|
24
|
+
record(): void;
|
|
25
|
+
dispose(): void;
|
|
26
|
+
}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
|
|
2
|
+
import { Vector4 } from "../../../../Maths/math.vector.js";
|
|
3
|
+
import { ThinCustomPostProcess } from "../../../../PostProcesses/thinCustomPostProcess.js";
|
|
4
|
+
import { FrameGraphTask } from "../../../frameGraphTask.js";
|
|
5
|
+
/**
|
|
6
|
+
* Task used to spatially blur IBL shadows.
|
|
7
|
+
* @internal
|
|
8
|
+
*/
|
|
9
|
+
export class FrameGraphIblShadowsSpatialBlurTask extends FrameGraphTask {
|
|
10
|
+
constructor(name, frameGraph) {
|
|
11
|
+
super(name, frameGraph);
|
|
12
|
+
this._blurParameters = new Vector4(0, 0, 0, 0);
|
|
13
|
+
this.postProcess = new ThinCustomPostProcess(name, frameGraph.engine, {
|
|
14
|
+
fragmentShader: "iblShadowSpatialBlur",
|
|
15
|
+
uniforms: ["blurParameters"],
|
|
16
|
+
samplers: ["voxelTracingSampler", "depthSampler", "worldNormalSampler"],
|
|
17
|
+
shaderLanguage: frameGraph.engine.isWebGPU ? 1 /* ShaderLanguage.WGSL */ : 0 /* ShaderLanguage.GLSL */,
|
|
18
|
+
});
|
|
19
|
+
this._postProcessDrawWrapper = this.postProcess.drawWrapper;
|
|
20
|
+
this.outputTexture = this._frameGraph.textureManager.createDanglingHandle();
|
|
21
|
+
}
|
|
22
|
+
getClassName() {
|
|
23
|
+
return "FrameGraphIblShadowsSpatialBlurTask";
|
|
24
|
+
}
|
|
25
|
+
// eslint-disable-next-line @typescript-eslint/promise-function-async, no-restricted-syntax
|
|
26
|
+
initAsync() {
|
|
27
|
+
if (this._frameGraph.engine.isWebGPU) {
|
|
28
|
+
return import("../../../../ShadersWGSL/iblShadowSpatialBlur.fragment.js");
|
|
29
|
+
}
|
|
30
|
+
return import("../../../../Shaders/iblShadowSpatialBlur.fragment.js");
|
|
31
|
+
}
|
|
32
|
+
isReady() {
|
|
33
|
+
return this.postProcess.isReady();
|
|
34
|
+
}
|
|
35
|
+
record() {
|
|
36
|
+
if (this.sourceTexture === undefined || this.depthTexture === undefined || this.normalTexture === undefined) {
|
|
37
|
+
throw new Error(`FrameGraphIblShadowsSpatialBlurTask ${this.name}: sourceTexture, depthTexture and normalTexture are required`);
|
|
38
|
+
}
|
|
39
|
+
const textureManager = this._frameGraph.textureManager;
|
|
40
|
+
const size = textureManager.getTextureAbsoluteDimensions(this.sourceTexture);
|
|
41
|
+
const creationOptions = {
|
|
42
|
+
size,
|
|
43
|
+
sizeIsPercentage: false,
|
|
44
|
+
isHistoryTexture: false,
|
|
45
|
+
options: {
|
|
46
|
+
createMipMaps: false,
|
|
47
|
+
samples: 1,
|
|
48
|
+
types: [0],
|
|
49
|
+
formats: [5],
|
|
50
|
+
useSRGBBuffers: [false],
|
|
51
|
+
creationFlags: [0],
|
|
52
|
+
labels: [`${this.name} Output`],
|
|
53
|
+
},
|
|
54
|
+
};
|
|
55
|
+
textureManager.resolveDanglingHandle(this.outputTexture, undefined, `${this.name} Output`, creationOptions);
|
|
56
|
+
const pass = this._frameGraph.addRenderPass(this.name);
|
|
57
|
+
pass.addDependencies(this.sourceTexture);
|
|
58
|
+
pass.addDependencies(this.depthTexture);
|
|
59
|
+
pass.addDependencies(this.normalTexture);
|
|
60
|
+
pass.setRenderTarget(this.outputTexture);
|
|
61
|
+
pass.setExecuteFunc((context) => {
|
|
62
|
+
context.setTextureSamplingMode(this.sourceTexture, 1);
|
|
63
|
+
context.setTextureSamplingMode(this.depthTexture, 1);
|
|
64
|
+
context.setTextureSamplingMode(this.normalTexture, 1);
|
|
65
|
+
const iterationCount = 1;
|
|
66
|
+
this._blurParameters.set(iterationCount, this.voxelizationTask?.voxelGridSize ?? 1.0, 0.0, 0.0);
|
|
67
|
+
context.applyFullScreenEffect(this._postProcessDrawWrapper, () => {
|
|
68
|
+
const effect = this._postProcessDrawWrapper.effect;
|
|
69
|
+
context.bindTextureHandle(effect, "voxelTracingSampler", this.sourceTexture);
|
|
70
|
+
context.bindTextureHandle(effect, "depthSampler", this.depthTexture);
|
|
71
|
+
context.bindTextureHandle(effect, "worldNormalSampler", this.normalTexture);
|
|
72
|
+
effect.setVector4("blurParameters", this._blurParameters);
|
|
73
|
+
this.postProcess.bind();
|
|
74
|
+
}, undefined, false, false, true);
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
dispose() {
|
|
78
|
+
this.postProcess.dispose();
|
|
79
|
+
super.dispose();
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
//# sourceMappingURL=iblShadowsSpatialBlurTask.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"iblShadowsSpatialBlurTask.js","sourceRoot":"","sources":["../../../../../../../dev/core/src/FrameGraph/Tasks/Rendering/iblShadows/iblShadowsSpatialBlurTask.ts"],"names":[],"mappings":"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","sourcesContent":["import { type DrawWrapper, type FrameGraph, type FrameGraphTextureCreationOptions, type FrameGraphTextureHandle } from \"core/index\";\r\nimport { Constants } from \"core/Engines/constants\";\r\nimport { type FrameGraphIblShadowsVoxelizationTask } from \"./iblShadowsVoxelizationTask\";\r\nimport { Vector4 } from \"core/Maths/math.vector\";\r\nimport { ShaderLanguage } from \"core/Materials/shaderLanguage\";\r\nimport { ThinCustomPostProcess } from \"core/PostProcesses/thinCustomPostProcess\";\r\nimport { FrameGraphTask } from \"../../../frameGraphTask\";\r\n\r\n/**\r\n * Task used to spatially blur IBL shadows.\r\n * @internal\r\n */\r\nexport class FrameGraphIblShadowsSpatialBlurTask extends FrameGraphTask {\r\n public sourceTexture?: FrameGraphTextureHandle;\r\n public depthTexture?: FrameGraphTextureHandle;\r\n public normalTexture?: FrameGraphTextureHandle;\r\n\r\n /** Voxelization task providing the dynamic voxelGridSize used as worldScale. */\r\n public voxelizationTask?: FrameGraphIblShadowsVoxelizationTask;\r\n\r\n public readonly outputTexture: FrameGraphTextureHandle;\r\n\r\n public readonly postProcess: ThinCustomPostProcess;\r\n protected readonly _postProcessDrawWrapper: DrawWrapper;\r\n protected readonly _blurParameters = new Vector4(0, 0, 0, 0);\r\n\r\n constructor(name: string, frameGraph: FrameGraph) {\r\n super(name, frameGraph);\r\n\r\n this.postProcess = new ThinCustomPostProcess(name, frameGraph.engine, {\r\n fragmentShader: \"iblShadowSpatialBlur\",\r\n uniforms: [\"blurParameters\"],\r\n samplers: [\"voxelTracingSampler\", \"depthSampler\", \"worldNormalSampler\"],\r\n shaderLanguage: frameGraph.engine.isWebGPU ? ShaderLanguage.WGSL : ShaderLanguage.GLSL,\r\n });\r\n this._postProcessDrawWrapper = this.postProcess.drawWrapper;\r\n\r\n this.outputTexture = this._frameGraph.textureManager.createDanglingHandle();\r\n }\r\n\r\n public override getClassName(): string {\r\n return \"FrameGraphIblShadowsSpatialBlurTask\";\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/promise-function-async, no-restricted-syntax\r\n public override initAsync(): Promise<unknown> {\r\n if (this._frameGraph.engine.isWebGPU) {\r\n return import(\"../../../../ShadersWGSL/iblShadowSpatialBlur.fragment\");\r\n }\r\n\r\n return import(\"../../../../Shaders/iblShadowSpatialBlur.fragment\");\r\n }\r\n\r\n public override isReady(): boolean {\r\n return this.postProcess.isReady();\r\n }\r\n\r\n public override record() {\r\n if (this.sourceTexture === undefined || this.depthTexture === undefined || this.normalTexture === undefined) {\r\n throw new Error(`FrameGraphIblShadowsSpatialBlurTask ${this.name}: sourceTexture, depthTexture and normalTexture are required`);\r\n }\r\n\r\n const textureManager = this._frameGraph.textureManager;\r\n const size = textureManager.getTextureAbsoluteDimensions(this.sourceTexture);\r\n const creationOptions: FrameGraphTextureCreationOptions = {\r\n size,\r\n sizeIsPercentage: false,\r\n isHistoryTexture: false,\r\n options: {\r\n createMipMaps: false,\r\n samples: 1,\r\n types: [Constants.TEXTURETYPE_UNSIGNED_BYTE],\r\n formats: [Constants.TEXTUREFORMAT_RGBA],\r\n useSRGBBuffers: [false],\r\n creationFlags: [0],\r\n labels: [`${this.name} Output`],\r\n },\r\n };\r\n\r\n textureManager.resolveDanglingHandle(this.outputTexture, undefined, `${this.name} Output`, creationOptions);\r\n\r\n const pass = this._frameGraph.addRenderPass(this.name);\r\n\r\n pass.addDependencies(this.sourceTexture);\r\n pass.addDependencies(this.depthTexture);\r\n pass.addDependencies(this.normalTexture);\r\n pass.setRenderTarget(this.outputTexture);\r\n pass.setExecuteFunc((context) => {\r\n context.setTextureSamplingMode(this.sourceTexture!, Constants.TEXTURE_NEAREST_SAMPLINGMODE);\r\n context.setTextureSamplingMode(this.depthTexture!, Constants.TEXTURE_NEAREST_SAMPLINGMODE);\r\n context.setTextureSamplingMode(this.normalTexture!, Constants.TEXTURE_NEAREST_SAMPLINGMODE);\r\n\r\n const iterationCount = 1;\r\n this._blurParameters.set(iterationCount, this.voxelizationTask?.voxelGridSize ?? 1.0, 0.0, 0.0);\r\n\r\n context.applyFullScreenEffect(\r\n this._postProcessDrawWrapper,\r\n () => {\r\n const effect = this._postProcessDrawWrapper.effect!;\r\n\r\n context.bindTextureHandle(effect, \"voxelTracingSampler\", this.sourceTexture!);\r\n context.bindTextureHandle(effect, \"depthSampler\", this.depthTexture!);\r\n context.bindTextureHandle(effect, \"worldNormalSampler\", this.normalTexture!);\r\n effect.setVector4(\"blurParameters\", this._blurParameters);\r\n\r\n this.postProcess.bind();\r\n },\r\n undefined,\r\n false,\r\n false,\r\n true\r\n );\r\n });\r\n }\r\n\r\n public override dispose(): void {\r\n this.postProcess.dispose();\r\n super.dispose();\r\n }\r\n}\r\n"]}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { type Camera, type DrawWrapper, type FrameGraph, type FrameGraphTextureHandle } from "../../../../index.js";
|
|
2
|
+
import { type FrameGraphIblShadowsVoxelizationTask } from "./iblShadowsVoxelizationTask.js";
|
|
3
|
+
import { Matrix, Vector4 } from "../../../../Maths/math.vector.js";
|
|
4
|
+
import { ThinCustomPostProcess } from "../../../../PostProcesses/thinCustomPostProcess.js";
|
|
5
|
+
import { FrameGraphTask } from "../../../frameGraphTask.js";
|
|
6
|
+
/**
|
|
7
|
+
* Task used to trace IBL shadows from a voxel grid.
|
|
8
|
+
* @internal
|
|
9
|
+
*/
|
|
10
|
+
export declare class FrameGraphIblShadowsTracingTask extends FrameGraphTask {
|
|
11
|
+
camera?: Camera;
|
|
12
|
+
voxelGridTexture?: FrameGraphTextureHandle;
|
|
13
|
+
depthTexture?: FrameGraphTextureHandle;
|
|
14
|
+
normalTexture?: FrameGraphTextureHandle;
|
|
15
|
+
icdfTexture?: FrameGraphTextureHandle;
|
|
16
|
+
environmentTexture?: FrameGraphTextureHandle;
|
|
17
|
+
blueNoiseTexture?: FrameGraphTextureHandle;
|
|
18
|
+
private _sampleDirections;
|
|
19
|
+
get sampleDirections(): number;
|
|
20
|
+
set sampleDirections(value: number);
|
|
21
|
+
voxelShadowOpacity: number;
|
|
22
|
+
ssShadowOpacity: number;
|
|
23
|
+
private _ssShadowSampleCount;
|
|
24
|
+
get ssShadowSampleCount(): number;
|
|
25
|
+
set ssShadowSampleCount(value: number);
|
|
26
|
+
private _ssShadowStride;
|
|
27
|
+
get ssShadowStride(): number;
|
|
28
|
+
set ssShadowStride(value: number);
|
|
29
|
+
/** Scale factor applied to voxelGridSize / 2^resolutionExp to get the max SSS ray distance. */
|
|
30
|
+
ssShadowDistanceScale: number;
|
|
31
|
+
/** Scale factor applied to voxelGridSize to get the SSS surface thickness. */
|
|
32
|
+
ssShadowThicknessScale: number;
|
|
33
|
+
/** Voxelization task providing dynamic voxelGridSize and resolutionExp for SSS parameter derivation. */
|
|
34
|
+
voxelizationTask?: FrameGraphIblShadowsVoxelizationTask;
|
|
35
|
+
envRotation: number;
|
|
36
|
+
voxelNormalBias: number;
|
|
37
|
+
voxelDirectionBias: number;
|
|
38
|
+
worldScaleMatrix: Matrix;
|
|
39
|
+
readonly outputTexture: FrameGraphTextureHandle;
|
|
40
|
+
readonly postProcess: ThinCustomPostProcess;
|
|
41
|
+
protected readonly _postProcessDrawWrapper: DrawWrapper;
|
|
42
|
+
protected readonly _shadowParameters: Vector4;
|
|
43
|
+
protected readonly _sssParameters: Vector4;
|
|
44
|
+
protected readonly _opacityParameters: Vector4;
|
|
45
|
+
protected readonly _voxelBiasParameters: Vector4;
|
|
46
|
+
protected readonly _cameraInvView: Matrix;
|
|
47
|
+
protected readonly _cameraInvProj: Matrix;
|
|
48
|
+
protected readonly _cameraInvViewProjection: Matrix;
|
|
49
|
+
protected _frameId: number;
|
|
50
|
+
protected _coloredShadows: boolean;
|
|
51
|
+
protected _currentDefines: string;
|
|
52
|
+
constructor(name: string, frameGraph: FrameGraph);
|
|
53
|
+
getClassName(): string;
|
|
54
|
+
initAsync(): Promise<unknown>;
|
|
55
|
+
get coloredShadows(): boolean;
|
|
56
|
+
set coloredShadows(value: boolean);
|
|
57
|
+
isReady(): boolean;
|
|
58
|
+
record(): void;
|
|
59
|
+
dispose(): void;
|
|
60
|
+
protected _updateDefines(): void;
|
|
61
|
+
}
|