@onerjs/core 8.56.1 → 8.56.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/Cameras/arcRotateCamera.pure.js +24 -0
- package/Cameras/arcRotateCamera.pure.js.map +1 -1
- package/Cameras/camera.pure.js +7 -7
- package/Cameras/camera.pure.js.map +1 -1
- package/Engines/abstractEngine.pure.js +2 -2
- package/Engines/abstractEngine.pure.js.map +1 -1
- package/Engines/constants.d.ts +5 -0
- package/Engines/constants.js +5 -0
- package/Engines/constants.js.map +1 -1
- package/FrameGraph/Node/Blocks/Rendering/geometryRendererBlock.pure.d.ts +4 -0
- package/FrameGraph/Node/Blocks/Rendering/geometryRendererBlock.pure.js +12 -0
- package/FrameGraph/Node/Blocks/Rendering/geometryRendererBlock.pure.js.map +1 -1
- package/FrameGraph/Node/Blocks/inputBlock.pure.js +2 -1
- package/FrameGraph/Node/Blocks/inputBlock.pure.js.map +1 -1
- package/FrameGraph/Node/Types/nodeRenderGraphTypes.d.ts +2 -0
- package/FrameGraph/Node/Types/nodeRenderGraphTypes.js +2 -0
- package/FrameGraph/Node/Types/nodeRenderGraphTypes.js.map +1 -1
- package/FrameGraph/Tasks/Rendering/geometryRendererTask.d.ts +21 -0
- package/FrameGraph/Tasks/Rendering/geometryRendererTask.js +45 -0
- package/FrameGraph/Tasks/Rendering/geometryRendererTask.js.map +1 -1
- package/Materials/Node/Blocks/Fragment/fragmentOutputBlock.pure.d.ts +1 -0
- package/Materials/Node/Blocks/Fragment/fragmentOutputBlock.pure.js +18 -3
- package/Materials/Node/Blocks/Fragment/fragmentOutputBlock.pure.js.map +1 -1
- package/Materials/Node/Blocks/Fragment/prePassOutputBlock.pure.js +5 -21
- package/Materials/Node/Blocks/Fragment/prePassOutputBlock.pure.js.map +1 -1
- package/Materials/Node/nodeMaterial.pure.d.ts +10 -0
- package/Materials/Node/nodeMaterial.pure.js +11 -0
- package/Materials/Node/nodeMaterial.pure.js.map +1 -1
- package/Materials/Node/nodeMaterialBuildState.d.ts +1 -0
- package/Materials/Node/nodeMaterialBuildState.js +7 -1
- package/Materials/Node/nodeMaterialBuildState.js.map +1 -1
- package/Materials/PBR/openpbrMaterial.pure.d.ts +3 -0
- package/Materials/PBR/pbrBaseMaterial.pure.d.ts +3 -0
- package/Materials/Textures/textureProcessor.d.ts +29 -6
- package/Materials/Textures/textureProcessor.js +22 -16
- package/Materials/Textures/textureProcessor.js.map +1 -1
- package/Materials/materialHelper.geometryrendering.d.ts +19 -0
- package/Materials/materialHelper.geometryrendering.js +29 -1
- package/Materials/materialHelper.geometryrendering.js.map +1 -1
- package/Materials/prepass.defines.d.ts +3 -0
- package/Materials/prepass.defines.js +3 -0
- package/Materials/prepass.defines.js.map +1 -1
- package/Materials/standardMaterial.pure.d.ts +3 -0
- package/Maths/math.vector.pure.d.ts +1 -5
- package/Maths/math.vector.pure.js.map +1 -1
- package/Misc/filesInput.d.ts +15 -0
- package/Misc/filesInput.js +156 -74
- package/Misc/filesInput.js.map +1 -1
- package/Misc/tools.pure.js +1 -1
- package/Misc/tools.pure.js.map +1 -1
- package/Rendering/geometryBufferRenderer.pure.d.ts +30 -0
- package/Rendering/geometryBufferRenderer.pure.js +84 -0
- package/Rendering/geometryBufferRenderer.pure.js.map +1 -1
- package/Shaders/ShadersInclude/objectIdFunctions.d.ts +5 -0
- package/Shaders/ShadersInclude/objectIdFunctions.js +22 -0
- package/Shaders/ShadersInclude/objectIdFunctions.js.map +1 -0
- package/Shaders/ShadersInclude/openpbrBlockPrePass.js +3 -0
- package/Shaders/ShadersInclude/openpbrBlockPrePass.js.map +1 -1
- package/Shaders/ShadersInclude/pbrBlockPrePass.js +3 -0
- package/Shaders/ShadersInclude/pbrBlockPrePass.js.map +1 -1
- package/Shaders/ShadersInclude/prePassDeclaration.d.ts +1 -0
- package/Shaders/ShadersInclude/prePassDeclaration.js +5 -0
- package/Shaders/ShadersInclude/prePassDeclaration.js.map +1 -1
- package/Shaders/default.fragment.js +5 -1
- package/Shaders/default.fragment.js.map +1 -1
- package/Shaders/geometry.fragment.js +9 -1
- package/Shaders/geometry.fragment.js.map +1 -1
- package/Shaders/openpbr.fragment.js +2 -1
- package/Shaders/openpbr.fragment.js.map +1 -1
- package/Shaders/pbr.fragment.js +2 -1
- package/Shaders/pbr.fragment.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/objectIdFunctions.d.ts +5 -0
- package/ShadersWGSL/ShadersInclude/objectIdFunctions.js +22 -0
- package/ShadersWGSL/ShadersInclude/objectIdFunctions.js.map +1 -0
- package/ShadersWGSL/ShadersInclude/openpbrBlockPrePass.js +3 -0
- package/ShadersWGSL/ShadersInclude/openpbrBlockPrePass.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/pbrBlockPrePass.js +3 -0
- package/ShadersWGSL/ShadersInclude/pbrBlockPrePass.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/prePassDeclaration.d.ts +1 -0
- package/ShadersWGSL/ShadersInclude/prePassDeclaration.js +5 -0
- package/ShadersWGSL/ShadersInclude/prePassDeclaration.js.map +1 -1
- package/ShadersWGSL/default.fragment.js +5 -1
- package/ShadersWGSL/default.fragment.js.map +1 -1
- package/ShadersWGSL/geometry.fragment.js +9 -1
- package/ShadersWGSL/geometry.fragment.js.map +1 -1
- package/ShadersWGSL/openpbr.fragment.js +2 -1
- package/ShadersWGSL/openpbr.fragment.js.map +1 -1
- package/ShadersWGSL/pbr.fragment.js +2 -1
- package/ShadersWGSL/pbr.fragment.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"geometryRendererTask.js","sourceRoot":"","sources":["../../../../../../dev/core/src/FrameGraph/Tasks/Rendering/geometryRendererTask.ts"],"names":[],"mappings":"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","sourcesContent":["import {\r\n type FrameGraphTextureHandle,\r\n type Scene,\r\n type FrameGraph,\r\n type AbstractMesh,\r\n type ObjectRendererOptions,\r\n type FrameGraphRenderContext,\r\n type FrameGraphRenderPass,\r\n type ObjectRenderer,\r\n} from \"core/index\";\r\nimport { Color4 } from \"core/Maths/math.color.pure\";\r\nimport { MaterialHelperGeometryRendering, GeometryRenderingTextureClearType } from \"core/Materials/materialHelper.geometryrendering\";\r\nimport { Constants } from \"core/Engines/constants\";\r\nimport { FrameGraphObjectRendererTask } from \"./objectRendererTask\";\r\n\r\n/**\r\n * Description of a texture used by the geometry renderer task.\r\n */\r\nexport interface IFrameGraphGeometryRendererTextureDescription {\r\n /**\r\n * The type of the texture.\r\n * The value should be one of the Constants.PREPASS_XXX_TEXTURE_TYPE values.\r\n */\r\n type: number;\r\n\r\n /**\r\n * The type of the texture.\r\n */\r\n textureType: number;\r\n\r\n /**\r\n * The format of the texture.\r\n */\r\n textureFormat: number;\r\n}\r\n\r\nconst ClearColors: Color4[] = [new Color4(0, 0, 0, 0), new Color4(1, 1, 1, 1), new Color4(0, 0, 0, 0)];\r\n\r\n/**\r\n * Task used to render geometry to a set of textures.\r\n */\r\nexport class FrameGraphGeometryRendererTask extends FrameGraphObjectRendererTask {\r\n /**\r\n * The size of the output textures (default is 100% of the back buffer texture size).\r\n */\r\n public size: { width: number; height: number } = { width: 100, height: 100 };\r\n\r\n /**\r\n * Whether the size is a percentage of the back buffer size (default is true).\r\n */\r\n public sizeIsPercentage = true;\r\n\r\n /**\r\n * The number of samples to use for the output textures (default is 1).\r\n */\r\n public samples = 1;\r\n\r\n private _reverseCulling = false;\r\n\r\n /**\r\n * Whether to reverse culling (default is false).\r\n */\r\n public get reverseCulling() {\r\n return this._reverseCulling;\r\n }\r\n\r\n public set reverseCulling(value: boolean) {\r\n this._reverseCulling = value;\r\n\r\n const configuration = MaterialHelperGeometryRendering.GetConfiguration(this._renderer.renderPassId);\r\n if (configuration) {\r\n configuration.reverseCulling = value;\r\n }\r\n }\r\n\r\n /**\r\n * Indicates if a mesh shouldn't be rendered when its material has depth write disabled (default is true).\r\n */\r\n public dontRenderWhenMaterialDepthWriteIsDisabled = true;\r\n\r\n private _disableDepthPrePass = true;\r\n /**\r\n * Indicates whether the depth pre-pass is disabled (default is true).\r\n * Materials that require depth pre-pass (Material.needDepthPrePass == true) don't work with the geometry renderer, that's why this setting is true by default.\r\n * However, if the geometry renderer doesn't generate any geometry textures but only renders to the main target texture, then depth pre-pass can be enabled.\r\n */\r\n public get disableDepthPrePass() {\r\n return this._disableDepthPrePass;\r\n }\r\n\r\n public set disableDepthPrePass(value: boolean) {\r\n this._disableDepthPrePass = value;\r\n this._renderer.disableDepthPrePass = value;\r\n }\r\n\r\n /**\r\n * The list of texture descriptions used by the geometry renderer task.\r\n */\r\n public textureDescriptions: IFrameGraphGeometryRendererTextureDescription[] = [];\r\n\r\n /**\r\n * The irradiance output texture. Will point to a valid texture only if that texture has been requested in textureDescriptions!\r\n */\r\n public readonly geometryIrradianceTexture: FrameGraphTextureHandle;\r\n\r\n /**\r\n * The depth (in view space) output texture. Will point to a valid texture only if that texture has been requested in textureDescriptions!\r\n */\r\n public readonly geometryViewDepthTexture: FrameGraphTextureHandle;\r\n\r\n /**\r\n * The normalized depth (in view space) output texture. Will point to a valid texture only if that texture has been requested in textureDescriptions!\r\n * The normalization is (d - near) / (far - near), where d is the depth value in view space and near and far are the near and far planes of the camera.\r\n */\r\n public readonly geometryNormViewDepthTexture: FrameGraphTextureHandle;\r\n\r\n /**\r\n * The depth (in screen space) output texture. Will point to a valid texture only if that texture has been requested in textureDescriptions!\r\n */\r\n public readonly geometryScreenDepthTexture: FrameGraphTextureHandle;\r\n\r\n /**\r\n * The normal (in view space) output texture. Will point to a valid texture only if that texture has been requested in textureDescriptions!\r\n */\r\n public readonly geometryViewNormalTexture: FrameGraphTextureHandle;\r\n\r\n /**\r\n * The normal (in world space) output texture. Will point to a valid texture only if that texture has been requested in textureDescriptions!\r\n */\r\n public readonly geometryWorldNormalTexture: FrameGraphTextureHandle;\r\n\r\n /**\r\n * The position (in local space) output texture. Will point to a valid texture only if that texture has been requested in textureDescriptions!\r\n */\r\n public readonly geometryLocalPositionTexture: FrameGraphTextureHandle;\r\n\r\n /**\r\n * The position (in world space) output texture. Will point to a valid texture only if that texture has been requested in textureDescriptions!\r\n */\r\n public readonly geometryWorldPositionTexture: FrameGraphTextureHandle;\r\n\r\n /**\r\n * The albedo output texture. Will point to a valid texture only if that texture has been requested in textureDescriptions!\r\n */\r\n public readonly geometryAlbedoTexture: FrameGraphTextureHandle;\r\n\r\n /**\r\n * The reflectivity output texture. Will point to a valid texture only if that texture has been requested in textureDescriptions!\r\n */\r\n public readonly geometryReflectivityTexture: FrameGraphTextureHandle;\r\n\r\n /**\r\n * The velocity output texture. Will point to a valid texture only if that texture has been requested in textureDescriptions!\r\n */\r\n public readonly geometryVelocityTexture: FrameGraphTextureHandle;\r\n\r\n /**\r\n * The linear velocity output texture. Will point to a valid texture only if that texture has been requested in textureDescriptions!\r\n */\r\n public readonly geometryLinearVelocityTexture: FrameGraphTextureHandle;\r\n\r\n /**\r\n * Gets or sets the name of the task.\r\n */\r\n public override get name() {\r\n return this._name;\r\n }\r\n\r\n public override set name(value: string) {\r\n this._name = value;\r\n if (this._renderer) {\r\n this._renderer.name = value;\r\n }\r\n }\r\n\r\n private _clearAttachmentsLayout: Map<GeometryRenderingTextureClearType, number[]>;\r\n private _allAttachmentsLayout: number[];\r\n\r\n /**\r\n * Constructs a new geometry renderer task.\r\n * @param name The name of the task.\r\n * @param frameGraph The frame graph the task belongs to.\r\n * @param scene The scene the frame graph is associated with.\r\n * @param options The options of the object renderer.\r\n * @param existingObjectRenderer An existing object renderer to use (optional). If provided, the options parameter will be ignored.\r\n */\r\n constructor(name: string, frameGraph: FrameGraph, scene: Scene, options?: ObjectRendererOptions, existingObjectRenderer?: ObjectRenderer) {\r\n super(name, frameGraph, scene, options, existingObjectRenderer);\r\n\r\n this.renderSprites = false;\r\n this.renderParticles = false;\r\n this.enableBoundingBoxRendering = false;\r\n this.enableOutlineRendering = false;\r\n this._renderer.disableDepthPrePass = true;\r\n\r\n this._renderer.customIsReadyFunction = (mesh: AbstractMesh, refreshRate: number, preWarm?: boolean) => {\r\n if (this.dontRenderWhenMaterialDepthWriteIsDisabled && mesh.material && mesh.material.disableDepthWrite) {\r\n return !!preWarm;\r\n }\r\n\r\n return mesh.isReady(refreshRate === 0);\r\n };\r\n\r\n this._renderer.onBeforeRenderingManagerRenderObservable.add(() => {\r\n if (!this._renderer.options.doNotChangeAspectRatio) {\r\n scene.updateTransformMatrix(true);\r\n }\r\n });\r\n\r\n this._clearAttachmentsLayout = new Map();\r\n this._allAttachmentsLayout = [];\r\n\r\n this.geometryIrradianceTexture = this._frameGraph.textureManager.createDanglingHandle();\r\n this.geometryViewDepthTexture = this._frameGraph.textureManager.createDanglingHandle();\r\n this.geometryNormViewDepthTexture = this._frameGraph.textureManager.createDanglingHandle();\r\n this.geometryScreenDepthTexture = this._frameGraph.textureManager.createDanglingHandle();\r\n this.geometryViewNormalTexture = this._frameGraph.textureManager.createDanglingHandle();\r\n this.geometryWorldNormalTexture = this._frameGraph.textureManager.createDanglingHandle();\r\n this.geometryLocalPositionTexture = this._frameGraph.textureManager.createDanglingHandle();\r\n this.geometryWorldPositionTexture = this._frameGraph.textureManager.createDanglingHandle();\r\n this.geometryAlbedoTexture = this._frameGraph.textureManager.createDanglingHandle();\r\n this.geometryReflectivityTexture = this._frameGraph.textureManager.createDanglingHandle();\r\n this.geometryVelocityTexture = this._frameGraph.textureManager.createDanglingHandle();\r\n this.geometryLinearVelocityTexture = this._frameGraph.textureManager.createDanglingHandle();\r\n }\r\n\r\n /**\r\n * Gets the list of excluded meshes from the velocity texture.\r\n */\r\n public get excludedSkinnedMeshFromVelocityTexture(): AbstractMesh[] {\r\n return MaterialHelperGeometryRendering.GetConfiguration(this._renderer.renderPassId).excludedSkinnedMesh;\r\n }\r\n\r\n /**\r\n * Excludes the given skinned mesh from computing bones velocities.\r\n * Computing bones velocities can have a cost. The cost can be saved by calling this function and by passing the skinned mesh to ignore.\r\n * @param skinnedMesh The mesh containing the skeleton to ignore when computing the velocity map.\r\n */\r\n public excludeSkinnedMeshFromVelocityTexture(skinnedMesh: AbstractMesh): void {\r\n if (skinnedMesh.skeleton) {\r\n const list = this.excludedSkinnedMeshFromVelocityTexture;\r\n if (list.indexOf(skinnedMesh) === -1) {\r\n list.push(skinnedMesh);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Removes the given skinned mesh from the excluded meshes to integrate bones velocities while rendering the velocity map.\r\n * @param skinnedMesh The mesh containing the skeleton that has been ignored previously.\r\n * @see excludeSkinnedMesh to exclude a skinned mesh from bones velocity computation.\r\n */\r\n public removeExcludedSkinnedMeshFromVelocityTexture(skinnedMesh: AbstractMesh): void {\r\n const list = this.excludedSkinnedMeshFromVelocityTexture;\r\n const index = list.indexOf(skinnedMesh);\r\n if (index !== -1) {\r\n list.splice(index, 1);\r\n }\r\n }\r\n\r\n public override getClassName(): string {\r\n return \"FrameGraphGeometryRendererTask\";\r\n }\r\n\r\n /**\r\n * Records the geometry renderer task into the frame graph.\r\n * @param skipCreationOfDisabledPasses defines whether disabled passes should be skipped\r\n * @param additionalExecute defines an optional callback executed by the pass\r\n * @returns the recorded render pass\r\n */\r\n public override record(skipCreationOfDisabledPasses = false, additionalExecute?: (context: FrameGraphRenderContext) => void): FrameGraphRenderPass {\r\n this._buildClearAttachmentsLayout();\r\n\r\n this._registerForRenderPassId(this._renderer.renderPassId);\r\n\r\n MaterialHelperGeometryRendering.MarkAsDirty(this._renderer.renderPassId, this.objectList.meshes || this._scene.meshes);\r\n\r\n const pass = super.record(skipCreationOfDisabledPasses, additionalExecute) as FrameGraphRenderPass;\r\n\r\n const outputTextureHandles = pass.renderTarget as FrameGraphTextureHandle[];\r\n\r\n let needPreviousWorldMatrices = false;\r\n\r\n for (let i = 0; i < this.textureDescriptions.length; i++) {\r\n const description = this.textureDescriptions[i];\r\n const handle = outputTextureHandles[i];\r\n const index = MaterialHelperGeometryRendering.GeometryTextureDescriptions.findIndex((f) => f.type === description.type);\r\n const geometryDescription = MaterialHelperGeometryRendering.GeometryTextureDescriptions[index];\r\n\r\n switch (geometryDescription.type) {\r\n case Constants.PREPASS_IRRADIANCE_TEXTURE_TYPE:\r\n this._frameGraph.textureManager.resolveDanglingHandle(this.geometryIrradianceTexture, handle);\r\n break;\r\n case Constants.PREPASS_DEPTH_TEXTURE_TYPE:\r\n this._frameGraph.textureManager.resolveDanglingHandle(this.geometryViewDepthTexture, handle);\r\n break;\r\n case Constants.PREPASS_NORMALIZED_VIEW_DEPTH_TEXTURE_TYPE:\r\n this._frameGraph.textureManager.resolveDanglingHandle(this.geometryNormViewDepthTexture, handle);\r\n break;\r\n case Constants.PREPASS_SCREENSPACE_DEPTH_TEXTURE_TYPE:\r\n this._frameGraph.textureManager.resolveDanglingHandle(this.geometryScreenDepthTexture, handle);\r\n break;\r\n case Constants.PREPASS_NORMAL_TEXTURE_TYPE:\r\n this._frameGraph.textureManager.resolveDanglingHandle(this.geometryViewNormalTexture, handle);\r\n break;\r\n case Constants.PREPASS_WORLD_NORMAL_TEXTURE_TYPE:\r\n this._frameGraph.textureManager.resolveDanglingHandle(this.geometryWorldNormalTexture, handle);\r\n break;\r\n case Constants.PREPASS_LOCAL_POSITION_TEXTURE_TYPE:\r\n this._frameGraph.textureManager.resolveDanglingHandle(this.geometryLocalPositionTexture, handle);\r\n break;\r\n case Constants.PREPASS_POSITION_TEXTURE_TYPE:\r\n this._frameGraph.textureManager.resolveDanglingHandle(this.geometryWorldPositionTexture, handle);\r\n break;\r\n case Constants.PREPASS_ALBEDO_TEXTURE_TYPE:\r\n this._frameGraph.textureManager.resolveDanglingHandle(this.geometryAlbedoTexture, handle);\r\n break;\r\n case Constants.PREPASS_REFLECTIVITY_TEXTURE_TYPE:\r\n this._frameGraph.textureManager.resolveDanglingHandle(this.geometryReflectivityTexture, handle);\r\n break;\r\n case Constants.PREPASS_VELOCITY_TEXTURE_TYPE:\r\n this._frameGraph.textureManager.resolveDanglingHandle(this.geometryVelocityTexture, handle);\r\n needPreviousWorldMatrices = true;\r\n break;\r\n case Constants.PREPASS_VELOCITY_LINEAR_TEXTURE_TYPE:\r\n this._frameGraph.textureManager.resolveDanglingHandle(this.geometryLinearVelocityTexture, handle);\r\n needPreviousWorldMatrices = true;\r\n break;\r\n }\r\n }\r\n\r\n this._scene.needsPreviousWorldMatrices = needPreviousWorldMatrices;\r\n\r\n return pass;\r\n }\r\n\r\n public override dispose(): void {\r\n MaterialHelperGeometryRendering.DeleteConfiguration(this._renderer.renderPassId);\r\n this._renderer.dispose();\r\n super.dispose();\r\n }\r\n\r\n protected override _resolveDanglingHandles(_targetTextures: FrameGraphTextureHandle[]) {\r\n if (this.targetTexture !== undefined) {\r\n this._frameGraph.textureManager.resolveDanglingHandle(this.outputTexture, Array.isArray(this.targetTexture) ? this.targetTexture[0] : this.targetTexture);\r\n }\r\n\r\n if (this.depthTexture !== undefined) {\r\n this._frameGraph.textureManager.resolveDanglingHandle(this.outputDepthTexture, this.depthTexture);\r\n }\r\n }\r\n\r\n protected override _checkParameters() {\r\n if (this.objectList === undefined || this.camera === undefined) {\r\n throw new Error(`FrameGraphGeometryRendererTask ${this.name}: object list and camera must be provided`);\r\n }\r\n }\r\n\r\n protected override _checkTextureCompatibility(targetTextures: FrameGraphTextureHandle[]): boolean {\r\n let depthEnabled = false;\r\n\r\n let dimensions: { width: number; height: number } | null = null;\r\n\r\n if (this.targetTexture !== undefined) {\r\n const outputTextureDescription = this._frameGraph.textureManager.getTextureDescription(Array.isArray(this.targetTexture) ? this.targetTexture[0] : this.targetTexture);\r\n if (this.samples !== outputTextureDescription.options.samples) {\r\n throw new Error(`FrameGraphGeometryRendererTask ${this.name}: the target texture and the output geometry textures must have the same number of samples`);\r\n }\r\n dimensions = outputTextureDescription.size;\r\n }\r\n\r\n if (this.depthTexture !== undefined) {\r\n const depthTextureDescription = this._frameGraph.textureManager.getTextureDescription(this.depthTexture);\r\n if (depthTextureDescription.options.samples !== this.samples && this.textureDescriptions.length > 0) {\r\n throw new Error(`FrameGraphGeometryRendererTask ${this.name}: the depth texture and the output geometry textures must have the same number of samples`);\r\n }\r\n\r\n this._frameGraph.textureManager.resolveDanglingHandle(this.outputDepthTexture, this.depthTexture);\r\n\r\n depthEnabled = true;\r\n dimensions = depthTextureDescription.size;\r\n }\r\n\r\n const geomTextureDimensions = this.sizeIsPercentage ? this._frameGraph.textureManager.getAbsoluteDimensions(this.size) : this.size;\r\n if (dimensions !== null) {\r\n if (geomTextureDimensions.width !== dimensions.width || geomTextureDimensions.height !== dimensions.height) {\r\n throw new Error(\r\n `FrameGraphGeometryRendererTask ${this.name}: the geometry textures (size: ${geomTextureDimensions.width}x${geomTextureDimensions.height}) and the target/depth texture (size: ${dimensions.width}x${dimensions.height}) must have the same dimensions.`\r\n );\r\n }\r\n }\r\n\r\n depthEnabled = depthEnabled || super._checkTextureCompatibility(targetTextures);\r\n\r\n return depthEnabled;\r\n }\r\n\r\n protected override _getTargetHandles(): FrameGraphTextureHandle[] {\r\n const types: number[] = [];\r\n const formats: number[] = [];\r\n const labels: string[] = [];\r\n const useSRGBBuffers: boolean[] = [];\r\n\r\n for (let i = 0; i < this.textureDescriptions.length; i++) {\r\n const description = this.textureDescriptions[i];\r\n const index = MaterialHelperGeometryRendering.GeometryTextureDescriptions.findIndex((f) => f.type === description.type);\r\n\r\n if (index === -1) {\r\n throw new Error(`FrameGraphGeometryRendererTask ${this.name}: unknown texture type ${description.type}`);\r\n }\r\n\r\n types[i] = description.textureType;\r\n formats[i] = description.textureFormat;\r\n labels[i] = MaterialHelperGeometryRendering.GeometryTextureDescriptions[index].name;\r\n useSRGBBuffers[i] = false;\r\n }\r\n\r\n const handles: FrameGraphTextureHandle[] = [];\r\n\r\n if (this.textureDescriptions.length > 0) {\r\n const baseHandle = this._frameGraph.textureManager.createRenderTargetTexture(this.name, {\r\n size: this.size,\r\n sizeIsPercentage: this.sizeIsPercentage,\r\n options: {\r\n createMipMaps: false,\r\n samples: this.samples,\r\n types,\r\n formats,\r\n useSRGBBuffers,\r\n labels,\r\n },\r\n });\r\n\r\n for (let i = 0; i < this.textureDescriptions.length; i++) {\r\n handles.push(baseHandle + i);\r\n }\r\n }\r\n\r\n if (this.targetTexture !== undefined) {\r\n if (Array.isArray(this.targetTexture)) {\r\n handles.push(...this.targetTexture);\r\n } else {\r\n handles.push(this.targetTexture);\r\n }\r\n }\r\n\r\n return handles;\r\n }\r\n\r\n protected override _prepareRendering(context: FrameGraphRenderContext, depthEnabled: boolean) {\r\n context.setDepthStates(this.depthTest && depthEnabled, this.depthWrite && depthEnabled);\r\n\r\n context.pushDebugGroup(`Clear attachments`);\r\n\r\n this._clearAttachmentsLayout.forEach((layout, clearType) => {\r\n context.clearColorAttachments(ClearColors[clearType], layout);\r\n });\r\n\r\n context.restoreDefaultFramebuffer();\r\n context.popDebugGroup();\r\n\r\n return this._allAttachmentsLayout;\r\n }\r\n\r\n private _buildClearAttachmentsLayout() {\r\n const clearAttachmentsLayout = new Map<GeometryRenderingTextureClearType, boolean[]>();\r\n const allAttachmentsLayout: boolean[] = [];\r\n\r\n for (let i = 0; i < this.textureDescriptions.length; i++) {\r\n const description = this.textureDescriptions[i];\r\n const index = MaterialHelperGeometryRendering.GeometryTextureDescriptions.findIndex((f) => f.type === description.type);\r\n const geometryDescription = MaterialHelperGeometryRendering.GeometryTextureDescriptions[index];\r\n\r\n const clearType =\r\n geometryDescription.type === Constants.PREPASS_SCREENSPACE_DEPTH_TEXTURE_TYPE && this._engine.useReverseDepthBuffer\r\n ? GeometryRenderingTextureClearType.Zero\r\n : geometryDescription.clearType;\r\n let layout = clearAttachmentsLayout.get(clearType);\r\n if (layout === undefined) {\r\n layout = [];\r\n clearAttachmentsLayout.set(clearType, layout);\r\n for (let j = 0; j < i; j++) {\r\n layout[j] = false;\r\n }\r\n }\r\n\r\n clearAttachmentsLayout.forEach((layout, layoutClearType) => {\r\n layout.push(layoutClearType === clearType);\r\n });\r\n\r\n allAttachmentsLayout.push(true);\r\n }\r\n\r\n if (this.targetTexture !== undefined) {\r\n // We don't clear the target texture, but we need to add a layout for it in clearAttachmentsLayout to be able to use clearColorAttachments with the correct number of attachments in _prepareRendering.\r\n // We also need to add a value in allAttachmentsLayout for the target texture.\r\n let layout = clearAttachmentsLayout.get(GeometryRenderingTextureClearType.Zero);\r\n if (layout === undefined) {\r\n layout = [];\r\n clearAttachmentsLayout.set(GeometryRenderingTextureClearType.Zero, layout);\r\n for (let j = 0; j < this.textureDescriptions.length - 1; j++) {\r\n layout[j] = false;\r\n }\r\n }\r\n\r\n clearAttachmentsLayout.forEach((layout) => {\r\n layout.push(false);\r\n });\r\n\r\n allAttachmentsLayout.push(true);\r\n }\r\n\r\n this._clearAttachmentsLayout = new Map();\r\n\r\n clearAttachmentsLayout.forEach((layout, clearType) => {\r\n this._clearAttachmentsLayout.set(clearType, this._engine.buildTextureLayout(layout));\r\n });\r\n\r\n this._allAttachmentsLayout = this._engine.buildTextureLayout(allAttachmentsLayout);\r\n }\r\n\r\n private _registerForRenderPassId(renderPassId: number) {\r\n const configuration = MaterialHelperGeometryRendering.CreateConfiguration(renderPassId);\r\n\r\n for (let i = 0; i < this.textureDescriptions.length; i++) {\r\n const description = this.textureDescriptions[i];\r\n const index = MaterialHelperGeometryRendering.GeometryTextureDescriptions.findIndex((f) => f.type === description.type);\r\n const geometryDescription = MaterialHelperGeometryRendering.GeometryTextureDescriptions[index];\r\n\r\n configuration.defines[geometryDescription.defineIndex] = i;\r\n }\r\n\r\n if (this.targetTexture !== undefined) {\r\n configuration.defines[\"PREPASS_COLOR_INDEX\"] = this.textureDescriptions.length;\r\n }\r\n\r\n configuration.reverseCulling = this.reverseCulling;\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"geometryRendererTask.js","sourceRoot":"","sources":["../../../../../../dev/core/src/FrameGraph/Tasks/Rendering/geometryRendererTask.ts"],"names":[],"mappings":"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","sourcesContent":["import {\r\n type FrameGraphTextureHandle,\r\n type Scene,\r\n type FrameGraph,\r\n type AbstractMesh,\r\n type ObjectRendererOptions,\r\n type FrameGraphRenderContext,\r\n type FrameGraphRenderPass,\r\n type ObjectRenderer,\r\n} from \"core/index\";\r\nimport { Color4 } from \"core/Maths/math.color.pure\";\r\nimport { MaterialHelperGeometryRendering, GeometryRenderingTextureClearType, type GeometryRenderingObjectIdProvider } from \"core/Materials/materialHelper.geometryrendering\";\r\nimport { Constants } from \"core/Engines/constants\";\r\nimport { FrameGraphObjectRendererTask } from \"./objectRendererTask\";\r\n\r\n/**\r\n * Description of a texture used by the geometry renderer task.\r\n */\r\nexport interface IFrameGraphGeometryRendererTextureDescription {\r\n /**\r\n * The type of the texture.\r\n * The value should be one of the Constants.PREPASS_XXX_TEXTURE_TYPE values.\r\n */\r\n type: number;\r\n\r\n /**\r\n * The type of the texture.\r\n */\r\n textureType: number;\r\n\r\n /**\r\n * The format of the texture.\r\n */\r\n textureFormat: number;\r\n}\r\n\r\nconst ClearColors: Color4[] = [new Color4(0, 0, 0, 0), new Color4(1, 1, 1, 1), new Color4(0, 0, 0, 0)];\r\n\r\n/**\r\n * Task used to render geometry to a set of textures.\r\n */\r\nexport class FrameGraphGeometryRendererTask extends FrameGraphObjectRendererTask {\r\n /**\r\n * The size of the output textures (default is 100% of the back buffer texture size).\r\n */\r\n public size: { width: number; height: number } = { width: 100, height: 100 };\r\n\r\n /**\r\n * Whether the size is a percentage of the back buffer size (default is true).\r\n */\r\n public sizeIsPercentage = true;\r\n\r\n /**\r\n * The number of samples to use for the output textures (default is 1).\r\n */\r\n public samples = 1;\r\n\r\n private _reverseCulling = false;\r\n\r\n /**\r\n * Whether to reverse culling (default is false).\r\n */\r\n public get reverseCulling() {\r\n return this._reverseCulling;\r\n }\r\n\r\n public set reverseCulling(value: boolean) {\r\n this._reverseCulling = value;\r\n\r\n const configuration = MaterialHelperGeometryRendering.GetConfiguration(this._renderer.renderPassId);\r\n if (configuration) {\r\n configuration.reverseCulling = value;\r\n }\r\n }\r\n\r\n /**\r\n * Indicates if a mesh shouldn't be rendered when its material has depth write disabled (default is true).\r\n */\r\n public dontRenderWhenMaterialDepthWriteIsDisabled = true;\r\n\r\n private _disableDepthPrePass = true;\r\n /**\r\n * Indicates whether the depth pre-pass is disabled (default is true).\r\n * Materials that require depth pre-pass (Material.needDepthPrePass == true) don't work with the geometry renderer, that's why this setting is true by default.\r\n * However, if the geometry renderer doesn't generate any geometry textures but only renders to the main target texture, then depth pre-pass can be enabled.\r\n */\r\n public get disableDepthPrePass() {\r\n return this._disableDepthPrePass;\r\n }\r\n\r\n public set disableDepthPrePass(value: boolean) {\r\n this._disableDepthPrePass = value;\r\n this._renderer.disableDepthPrePass = value;\r\n }\r\n\r\n /**\r\n * The list of texture descriptions used by the geometry renderer task.\r\n */\r\n public textureDescriptions: IFrameGraphGeometryRendererTextureDescription[] = [];\r\n\r\n private _objectIdProvider?: GeometryRenderingObjectIdProvider;\r\n\r\n /**\r\n * Provides the object ID written for each rendered mesh.\r\n *\r\n * IDs must be integers between 0 and 0xFFFFFF for RGBA textures, or between 0 and 0xFF for RED textures.\r\n * ID 0 is reserved for background or excluded meshes.\r\n * By default, meshes use their unique ID.\r\n * Instances use the ID of their source mesh. Default IDs are only stable for the lifetime of the current scene and should not be persisted.\r\n * When using a RED texture, provide a custom ID if mesh unique IDs can exceed 0xFF.\r\n * The provider runs in the render hot path and may be called multiple times for the same mesh in a frame.\r\n * @see https://playground.babylonjs.com/#00T6WJ#0\r\n */\r\n public get objectIdProvider(): GeometryRenderingObjectIdProvider | undefined {\r\n return this._objectIdProvider;\r\n }\r\n\r\n public set objectIdProvider(value: GeometryRenderingObjectIdProvider | undefined) {\r\n this._objectIdProvider = value;\r\n\r\n const configuration = MaterialHelperGeometryRendering.GetConfiguration(this._renderer.renderPassId);\r\n if (configuration) {\r\n configuration.objectIdProvider = value;\r\n }\r\n }\r\n\r\n /**\r\n * The irradiance output texture. Will point to a valid texture only if that texture has been requested in textureDescriptions!\r\n */\r\n public readonly geometryIrradianceTexture: FrameGraphTextureHandle;\r\n\r\n /**\r\n * The depth (in view space) output texture. Will point to a valid texture only if that texture has been requested in textureDescriptions!\r\n */\r\n public readonly geometryViewDepthTexture: FrameGraphTextureHandle;\r\n\r\n /**\r\n * The normalized depth (in view space) output texture. Will point to a valid texture only if that texture has been requested in textureDescriptions!\r\n * The normalization is (d - near) / (far - near), where d is the depth value in view space and near and far are the near and far planes of the camera.\r\n */\r\n public readonly geometryNormViewDepthTexture: FrameGraphTextureHandle;\r\n\r\n /**\r\n * The depth (in screen space) output texture. Will point to a valid texture only if that texture has been requested in textureDescriptions!\r\n */\r\n public readonly geometryScreenDepthTexture: FrameGraphTextureHandle;\r\n\r\n /**\r\n * The normal (in view space) output texture. Will point to a valid texture only if that texture has been requested in textureDescriptions!\r\n */\r\n public readonly geometryViewNormalTexture: FrameGraphTextureHandle;\r\n\r\n /**\r\n * The normal (in world space) output texture. Will point to a valid texture only if that texture has been requested in textureDescriptions!\r\n */\r\n public readonly geometryWorldNormalTexture: FrameGraphTextureHandle;\r\n\r\n /**\r\n * The position (in local space) output texture. Will point to a valid texture only if that texture has been requested in textureDescriptions!\r\n */\r\n public readonly geometryLocalPositionTexture: FrameGraphTextureHandle;\r\n\r\n /**\r\n * The position (in world space) output texture. Will point to a valid texture only if that texture has been requested in textureDescriptions!\r\n */\r\n public readonly geometryWorldPositionTexture: FrameGraphTextureHandle;\r\n\r\n /**\r\n * The albedo output texture. Will point to a valid texture only if that texture has been requested in textureDescriptions!\r\n */\r\n public readonly geometryAlbedoTexture: FrameGraphTextureHandle;\r\n\r\n /**\r\n * The reflectivity output texture. Will point to a valid texture only if that texture has been requested in textureDescriptions!\r\n */\r\n public readonly geometryReflectivityTexture: FrameGraphTextureHandle;\r\n\r\n /**\r\n * The velocity output texture. Will point to a valid texture only if that texture has been requested in textureDescriptions!\r\n */\r\n public readonly geometryVelocityTexture: FrameGraphTextureHandle;\r\n\r\n /**\r\n * The linear velocity output texture. Will point to a valid texture only if that texture has been requested in textureDescriptions!\r\n */\r\n public readonly geometryLinearVelocityTexture: FrameGraphTextureHandle;\r\n\r\n /**\r\n * The object ID output texture. Will point to a valid texture only if that texture has been requested in textureDescriptions!\r\n * RGBA unsigned byte textures store 24-bit IDs, while RED unsigned byte textures store 8-bit IDs.\r\n * Decode RED values with `round(value * 255.0)`.\r\n */\r\n public readonly geometryObjectIdTexture: FrameGraphTextureHandle;\r\n\r\n /**\r\n * Gets or sets the name of the task.\r\n */\r\n public override get name() {\r\n return this._name;\r\n }\r\n\r\n public override set name(value: string) {\r\n this._name = value;\r\n if (this._renderer) {\r\n this._renderer.name = value;\r\n }\r\n }\r\n\r\n private _clearAttachmentsLayout: Map<GeometryRenderingTextureClearType, number[]>;\r\n private _allAttachmentsLayout: number[];\r\n\r\n /**\r\n * Constructs a new geometry renderer task.\r\n * @param name The name of the task.\r\n * @param frameGraph The frame graph the task belongs to.\r\n * @param scene The scene the frame graph is associated with.\r\n * @param options The options of the object renderer.\r\n * @param existingObjectRenderer An existing object renderer to use (optional). If provided, the options parameter will be ignored.\r\n */\r\n constructor(name: string, frameGraph: FrameGraph, scene: Scene, options?: ObjectRendererOptions, existingObjectRenderer?: ObjectRenderer) {\r\n super(name, frameGraph, scene, options, existingObjectRenderer);\r\n\r\n this.renderSprites = false;\r\n this.renderParticles = false;\r\n this.enableBoundingBoxRendering = false;\r\n this.enableOutlineRendering = false;\r\n this._renderer.disableDepthPrePass = true;\r\n\r\n this._renderer.customIsReadyFunction = (mesh: AbstractMesh, refreshRate: number, preWarm?: boolean) => {\r\n if (this.dontRenderWhenMaterialDepthWriteIsDisabled && mesh.material && mesh.material.disableDepthWrite) {\r\n return !!preWarm;\r\n }\r\n\r\n return mesh.isReady(refreshRate === 0);\r\n };\r\n\r\n this._renderer.onBeforeRenderingManagerRenderObservable.add(() => {\r\n if (!this._renderer.options.doNotChangeAspectRatio) {\r\n scene.updateTransformMatrix(true);\r\n }\r\n });\r\n\r\n this._clearAttachmentsLayout = new Map();\r\n this._allAttachmentsLayout = [];\r\n\r\n this.geometryIrradianceTexture = this._frameGraph.textureManager.createDanglingHandle();\r\n this.geometryViewDepthTexture = this._frameGraph.textureManager.createDanglingHandle();\r\n this.geometryNormViewDepthTexture = this._frameGraph.textureManager.createDanglingHandle();\r\n this.geometryScreenDepthTexture = this._frameGraph.textureManager.createDanglingHandle();\r\n this.geometryViewNormalTexture = this._frameGraph.textureManager.createDanglingHandle();\r\n this.geometryWorldNormalTexture = this._frameGraph.textureManager.createDanglingHandle();\r\n this.geometryLocalPositionTexture = this._frameGraph.textureManager.createDanglingHandle();\r\n this.geometryWorldPositionTexture = this._frameGraph.textureManager.createDanglingHandle();\r\n this.geometryAlbedoTexture = this._frameGraph.textureManager.createDanglingHandle();\r\n this.geometryReflectivityTexture = this._frameGraph.textureManager.createDanglingHandle();\r\n this.geometryVelocityTexture = this._frameGraph.textureManager.createDanglingHandle();\r\n this.geometryLinearVelocityTexture = this._frameGraph.textureManager.createDanglingHandle();\r\n this.geometryObjectIdTexture = this._frameGraph.textureManager.createDanglingHandle();\r\n }\r\n\r\n /**\r\n * Gets the list of excluded meshes from the velocity texture.\r\n */\r\n public get excludedSkinnedMeshFromVelocityTexture(): AbstractMesh[] {\r\n return MaterialHelperGeometryRendering.GetConfiguration(this._renderer.renderPassId).excludedSkinnedMesh;\r\n }\r\n\r\n /**\r\n * Excludes the given skinned mesh from computing bones velocities.\r\n * Computing bones velocities can have a cost. The cost can be saved by calling this function and by passing the skinned mesh to ignore.\r\n * @param skinnedMesh The mesh containing the skeleton to ignore when computing the velocity map.\r\n */\r\n public excludeSkinnedMeshFromVelocityTexture(skinnedMesh: AbstractMesh): void {\r\n if (skinnedMesh.skeleton) {\r\n const list = this.excludedSkinnedMeshFromVelocityTexture;\r\n if (list.indexOf(skinnedMesh) === -1) {\r\n list.push(skinnedMesh);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Removes the given skinned mesh from the excluded meshes to integrate bones velocities while rendering the velocity map.\r\n * @param skinnedMesh The mesh containing the skeleton that has been ignored previously.\r\n * @see excludeSkinnedMesh to exclude a skinned mesh from bones velocity computation.\r\n */\r\n public removeExcludedSkinnedMeshFromVelocityTexture(skinnedMesh: AbstractMesh): void {\r\n const list = this.excludedSkinnedMeshFromVelocityTexture;\r\n const index = list.indexOf(skinnedMesh);\r\n if (index !== -1) {\r\n list.splice(index, 1);\r\n }\r\n }\r\n\r\n public override getClassName(): string {\r\n return \"FrameGraphGeometryRendererTask\";\r\n }\r\n\r\n /**\r\n * Records the geometry renderer task into the frame graph.\r\n * @param skipCreationOfDisabledPasses defines whether disabled passes should be skipped\r\n * @param additionalExecute defines an optional callback executed by the pass\r\n * @returns the recorded render pass\r\n */\r\n public override record(skipCreationOfDisabledPasses = false, additionalExecute?: (context: FrameGraphRenderContext) => void): FrameGraphRenderPass {\r\n this._buildClearAttachmentsLayout();\r\n\r\n this._registerForRenderPassId(this._renderer.renderPassId);\r\n\r\n MaterialHelperGeometryRendering.MarkAsDirty(this._renderer.renderPassId, this.objectList.meshes || this._scene.meshes);\r\n\r\n const pass = super.record(skipCreationOfDisabledPasses, additionalExecute) as FrameGraphRenderPass;\r\n\r\n const outputTextureHandles = pass.renderTarget as FrameGraphTextureHandle[];\r\n\r\n let needPreviousWorldMatrices = false;\r\n\r\n for (let i = 0; i < this.textureDescriptions.length; i++) {\r\n const description = this.textureDescriptions[i];\r\n const handle = outputTextureHandles[i];\r\n const index = MaterialHelperGeometryRendering.GeometryTextureDescriptions.findIndex((f) => f.type === description.type);\r\n const geometryDescription = MaterialHelperGeometryRendering.GeometryTextureDescriptions[index];\r\n\r\n switch (geometryDescription.type) {\r\n case Constants.PREPASS_IRRADIANCE_TEXTURE_TYPE:\r\n this._frameGraph.textureManager.resolveDanglingHandle(this.geometryIrradianceTexture, handle);\r\n break;\r\n case Constants.PREPASS_DEPTH_TEXTURE_TYPE:\r\n this._frameGraph.textureManager.resolveDanglingHandle(this.geometryViewDepthTexture, handle);\r\n break;\r\n case Constants.PREPASS_NORMALIZED_VIEW_DEPTH_TEXTURE_TYPE:\r\n this._frameGraph.textureManager.resolveDanglingHandle(this.geometryNormViewDepthTexture, handle);\r\n break;\r\n case Constants.PREPASS_SCREENSPACE_DEPTH_TEXTURE_TYPE:\r\n this._frameGraph.textureManager.resolveDanglingHandle(this.geometryScreenDepthTexture, handle);\r\n break;\r\n case Constants.PREPASS_NORMAL_TEXTURE_TYPE:\r\n this._frameGraph.textureManager.resolveDanglingHandle(this.geometryViewNormalTexture, handle);\r\n break;\r\n case Constants.PREPASS_WORLD_NORMAL_TEXTURE_TYPE:\r\n this._frameGraph.textureManager.resolveDanglingHandle(this.geometryWorldNormalTexture, handle);\r\n break;\r\n case Constants.PREPASS_LOCAL_POSITION_TEXTURE_TYPE:\r\n this._frameGraph.textureManager.resolveDanglingHandle(this.geometryLocalPositionTexture, handle);\r\n break;\r\n case Constants.PREPASS_POSITION_TEXTURE_TYPE:\r\n this._frameGraph.textureManager.resolveDanglingHandle(this.geometryWorldPositionTexture, handle);\r\n break;\r\n case Constants.PREPASS_ALBEDO_TEXTURE_TYPE:\r\n this._frameGraph.textureManager.resolveDanglingHandle(this.geometryAlbedoTexture, handle);\r\n break;\r\n case Constants.PREPASS_REFLECTIVITY_TEXTURE_TYPE:\r\n this._frameGraph.textureManager.resolveDanglingHandle(this.geometryReflectivityTexture, handle);\r\n break;\r\n case Constants.PREPASS_VELOCITY_TEXTURE_TYPE:\r\n this._frameGraph.textureManager.resolveDanglingHandle(this.geometryVelocityTexture, handle);\r\n needPreviousWorldMatrices = true;\r\n break;\r\n case Constants.PREPASS_VELOCITY_LINEAR_TEXTURE_TYPE:\r\n this._frameGraph.textureManager.resolveDanglingHandle(this.geometryLinearVelocityTexture, handle);\r\n needPreviousWorldMatrices = true;\r\n break;\r\n case Constants.PREPASS_OBJECT_ID_TEXTURE_TYPE:\r\n this._frameGraph.textureManager.resolveDanglingHandle(this.geometryObjectIdTexture, handle);\r\n break;\r\n }\r\n }\r\n\r\n this._scene.needsPreviousWorldMatrices = needPreviousWorldMatrices;\r\n\r\n return pass;\r\n }\r\n\r\n public override dispose(): void {\r\n MaterialHelperGeometryRendering.DeleteConfiguration(this._renderer.renderPassId);\r\n this._renderer.dispose();\r\n super.dispose();\r\n }\r\n\r\n protected override _resolveDanglingHandles(_targetTextures: FrameGraphTextureHandle[]) {\r\n if (this.targetTexture !== undefined) {\r\n this._frameGraph.textureManager.resolveDanglingHandle(this.outputTexture, Array.isArray(this.targetTexture) ? this.targetTexture[0] : this.targetTexture);\r\n }\r\n\r\n if (this.depthTexture !== undefined) {\r\n this._frameGraph.textureManager.resolveDanglingHandle(this.outputDepthTexture, this.depthTexture);\r\n }\r\n }\r\n\r\n protected override _checkParameters() {\r\n if (this.objectList === undefined || this.camera === undefined) {\r\n throw new Error(`FrameGraphGeometryRendererTask ${this.name}: object list and camera must be provided`);\r\n }\r\n\r\n const objectIdDescription = this.textureDescriptions.find((description) => description.type === Constants.PREPASS_OBJECT_ID_TEXTURE_TYPE);\r\n if (objectIdDescription) {\r\n if (this.samples !== 1) {\r\n throw new Error(`FrameGraphGeometryRendererTask ${this.name}: object ID textures currently require samples to be 1`);\r\n }\r\n\r\n const isSupportedFormat = objectIdDescription.textureFormat === Constants.TEXTUREFORMAT_RGBA || objectIdDescription.textureFormat === Constants.TEXTUREFORMAT_RED;\r\n if (objectIdDescription.textureType !== Constants.TEXTURETYPE_UNSIGNED_BYTE || !isSupportedFormat) {\r\n throw new Error(`FrameGraphGeometryRendererTask ${this.name}: object ID textures must use TEXTURETYPE_UNSIGNED_BYTE with TEXTUREFORMAT_RGBA or TEXTUREFORMAT_RED`);\r\n }\r\n }\r\n\r\n const targetTextureCount = this.targetTexture === undefined ? 0 : Array.isArray(this.targetTexture) ? this.targetTexture.length : 1;\r\n const attachmentCount = this.textureDescriptions.length + targetTextureCount;\r\n const maxDrawBuffers = Math.min(this._engine.getCaps().maxDrawBuffers ?? 1, 8);\r\n if (attachmentCount > maxDrawBuffers) {\r\n throw new Error(`FrameGraphGeometryRendererTask ${this.name}: ${attachmentCount} color attachments were requested, but this engine supports at most ${maxDrawBuffers}`);\r\n }\r\n }\r\n\r\n protected override _checkTextureCompatibility(targetTextures: FrameGraphTextureHandle[]): boolean {\r\n let depthEnabled = false;\r\n\r\n let dimensions: { width: number; height: number } | null = null;\r\n\r\n if (this.targetTexture !== undefined) {\r\n const outputTextureDescription = this._frameGraph.textureManager.getTextureDescription(Array.isArray(this.targetTexture) ? this.targetTexture[0] : this.targetTexture);\r\n if (this.samples !== outputTextureDescription.options.samples) {\r\n throw new Error(`FrameGraphGeometryRendererTask ${this.name}: the target texture and the output geometry textures must have the same number of samples`);\r\n }\r\n dimensions = outputTextureDescription.size;\r\n }\r\n\r\n if (this.depthTexture !== undefined) {\r\n const depthTextureDescription = this._frameGraph.textureManager.getTextureDescription(this.depthTexture);\r\n if (depthTextureDescription.options.samples !== this.samples && this.textureDescriptions.length > 0) {\r\n throw new Error(`FrameGraphGeometryRendererTask ${this.name}: the depth texture and the output geometry textures must have the same number of samples`);\r\n }\r\n\r\n this._frameGraph.textureManager.resolveDanglingHandle(this.outputDepthTexture, this.depthTexture);\r\n\r\n depthEnabled = true;\r\n dimensions = depthTextureDescription.size;\r\n }\r\n\r\n const geomTextureDimensions = this.sizeIsPercentage ? this._frameGraph.textureManager.getAbsoluteDimensions(this.size) : this.size;\r\n if (dimensions !== null) {\r\n if (geomTextureDimensions.width !== dimensions.width || geomTextureDimensions.height !== dimensions.height) {\r\n throw new Error(\r\n `FrameGraphGeometryRendererTask ${this.name}: the geometry textures (size: ${geomTextureDimensions.width}x${geomTextureDimensions.height}) and the target/depth texture (size: ${dimensions.width}x${dimensions.height}) must have the same dimensions.`\r\n );\r\n }\r\n }\r\n\r\n depthEnabled = depthEnabled || super._checkTextureCompatibility(targetTextures);\r\n\r\n return depthEnabled;\r\n }\r\n\r\n protected override _getTargetHandles(): FrameGraphTextureHandle[] {\r\n const types: number[] = [];\r\n const formats: number[] = [];\r\n const labels: string[] = [];\r\n const useSRGBBuffers: boolean[] = [];\r\n\r\n for (let i = 0; i < this.textureDescriptions.length; i++) {\r\n const description = this.textureDescriptions[i];\r\n const index = MaterialHelperGeometryRendering.GeometryTextureDescriptions.findIndex((f) => f.type === description.type);\r\n\r\n if (index === -1) {\r\n throw new Error(`FrameGraphGeometryRendererTask ${this.name}: unknown texture type ${description.type}`);\r\n }\r\n\r\n types[i] = description.textureType;\r\n formats[i] = description.textureFormat;\r\n labels[i] = MaterialHelperGeometryRendering.GeometryTextureDescriptions[index].name;\r\n useSRGBBuffers[i] = false;\r\n }\r\n\r\n const handles: FrameGraphTextureHandle[] = [];\r\n\r\n if (this.textureDescriptions.length > 0) {\r\n const baseHandle = this._frameGraph.textureManager.createRenderTargetTexture(this.name, {\r\n size: this.size,\r\n sizeIsPercentage: this.sizeIsPercentage,\r\n options: {\r\n createMipMaps: false,\r\n samples: this.samples,\r\n types,\r\n formats,\r\n useSRGBBuffers,\r\n labels,\r\n },\r\n });\r\n\r\n for (let i = 0; i < this.textureDescriptions.length; i++) {\r\n handles.push(baseHandle + i);\r\n }\r\n }\r\n\r\n if (this.targetTexture !== undefined) {\r\n if (Array.isArray(this.targetTexture)) {\r\n handles.push(...this.targetTexture);\r\n } else {\r\n handles.push(this.targetTexture);\r\n }\r\n }\r\n\r\n return handles;\r\n }\r\n\r\n protected override _prepareRendering(context: FrameGraphRenderContext, depthEnabled: boolean) {\r\n context.setDepthStates(this.depthTest && depthEnabled, this.depthWrite && depthEnabled);\r\n\r\n context.pushDebugGroup(`Clear attachments`);\r\n\r\n this._clearAttachmentsLayout.forEach((layout, clearType) => {\r\n context.clearColorAttachments(ClearColors[clearType], layout);\r\n });\r\n\r\n context.restoreDefaultFramebuffer();\r\n context.popDebugGroup();\r\n\r\n return this._allAttachmentsLayout;\r\n }\r\n\r\n private _buildClearAttachmentsLayout() {\r\n const clearAttachmentsLayout = new Map<GeometryRenderingTextureClearType, boolean[]>();\r\n const allAttachmentsLayout: boolean[] = [];\r\n\r\n for (let i = 0; i < this.textureDescriptions.length; i++) {\r\n const description = this.textureDescriptions[i];\r\n const index = MaterialHelperGeometryRendering.GeometryTextureDescriptions.findIndex((f) => f.type === description.type);\r\n const geometryDescription = MaterialHelperGeometryRendering.GeometryTextureDescriptions[index];\r\n\r\n const clearType =\r\n geometryDescription.type === Constants.PREPASS_SCREENSPACE_DEPTH_TEXTURE_TYPE && this._engine.useReverseDepthBuffer\r\n ? GeometryRenderingTextureClearType.Zero\r\n : geometryDescription.clearType;\r\n let layout = clearAttachmentsLayout.get(clearType);\r\n if (layout === undefined) {\r\n layout = [];\r\n clearAttachmentsLayout.set(clearType, layout);\r\n for (let j = 0; j < i; j++) {\r\n layout[j] = false;\r\n }\r\n }\r\n\r\n clearAttachmentsLayout.forEach((layout, layoutClearType) => {\r\n layout.push(layoutClearType === clearType);\r\n });\r\n\r\n allAttachmentsLayout.push(true);\r\n }\r\n\r\n if (this.targetTexture !== undefined) {\r\n // We don't clear the target texture, but we need to add a layout for it in clearAttachmentsLayout to be able to use clearColorAttachments with the correct number of attachments in _prepareRendering.\r\n // We also need to add a value in allAttachmentsLayout for the target texture.\r\n let layout = clearAttachmentsLayout.get(GeometryRenderingTextureClearType.Zero);\r\n if (layout === undefined) {\r\n layout = [];\r\n clearAttachmentsLayout.set(GeometryRenderingTextureClearType.Zero, layout);\r\n for (let j = 0; j < this.textureDescriptions.length - 1; j++) {\r\n layout[j] = false;\r\n }\r\n }\r\n\r\n clearAttachmentsLayout.forEach((layout) => {\r\n layout.push(false);\r\n });\r\n\r\n allAttachmentsLayout.push(true);\r\n }\r\n\r\n this._clearAttachmentsLayout = new Map();\r\n\r\n clearAttachmentsLayout.forEach((layout, clearType) => {\r\n this._clearAttachmentsLayout.set(clearType, this._engine.buildTextureLayout(layout));\r\n });\r\n\r\n this._allAttachmentsLayout = this._engine.buildTextureLayout(allAttachmentsLayout);\r\n }\r\n\r\n private _registerForRenderPassId(renderPassId: number) {\r\n const configuration = MaterialHelperGeometryRendering.CreateConfiguration(renderPassId);\r\n\r\n for (let i = 0; i < this.textureDescriptions.length; i++) {\r\n const description = this.textureDescriptions[i];\r\n const index = MaterialHelperGeometryRendering.GeometryTextureDescriptions.findIndex((f) => f.type === description.type);\r\n const geometryDescription = MaterialHelperGeometryRendering.GeometryTextureDescriptions[index];\r\n\r\n configuration.defines[geometryDescription.defineIndex] = i;\r\n if (description.type === Constants.PREPASS_OBJECT_ID_TEXTURE_TYPE) {\r\n configuration.objectIdIsRedFormat = description.textureFormat === Constants.TEXTUREFORMAT_RED;\r\n }\r\n }\r\n\r\n if (this.targetTexture !== undefined) {\r\n configuration.defines[\"PREPASS_COLOR_INDEX\"] = this.textureDescriptions.length;\r\n }\r\n\r\n configuration.reverseCulling = this.reverseCulling;\r\n configuration.objectIdProvider = this.objectIdProvider;\r\n }\r\n}\r\n"]}
|
|
@@ -73,6 +73,7 @@ export declare class FragmentOutputBlock extends NodeMaterialBlock {
|
|
|
73
73
|
*/
|
|
74
74
|
get glow(): NodeMaterialConnectionPoint;
|
|
75
75
|
protected _getOutputString(state: NodeMaterialBuildState): string;
|
|
76
|
+
private _writePrePassOutput;
|
|
76
77
|
/**
|
|
77
78
|
* Prepare the list of defines
|
|
78
79
|
* @param defines - the material defines
|
|
@@ -83,16 +83,17 @@ let FragmentOutputBlock = (() => {
|
|
|
83
83
|
initialize(state) {
|
|
84
84
|
state._excludeVariableName("logarithmicDepthConstant");
|
|
85
85
|
state._excludeVariableName("vFragmentDepth");
|
|
86
|
+
state._excludeVariableName("objectId");
|
|
86
87
|
// eslint-disable-next-line @typescript-eslint/no-floating-promises
|
|
87
88
|
this._initShaderSourceAsync(state.shaderLanguage);
|
|
88
89
|
}
|
|
89
90
|
async _initShaderSourceAsync(shaderLanguage) {
|
|
90
91
|
this._codeIsReady = false;
|
|
91
92
|
if (shaderLanguage === 1 /* ShaderLanguage.WGSL */) {
|
|
92
|
-
await import("../../../../ShadersWGSL/ShadersInclude/helperFunctions.js");
|
|
93
|
+
await Promise.all([import("../../../../ShadersWGSL/ShadersInclude/helperFunctions.js"), import("../../../../ShadersWGSL/ShadersInclude/objectIdFunctions.js")]);
|
|
93
94
|
}
|
|
94
95
|
else {
|
|
95
|
-
await import("../../../../Shaders/ShadersInclude/helperFunctions.js");
|
|
96
|
+
await Promise.all([import("../../../../Shaders/ShadersInclude/helperFunctions.js"), import("../../../../Shaders/ShadersInclude/objectIdFunctions.js")]);
|
|
96
97
|
}
|
|
97
98
|
this._codeIsReady = true;
|
|
98
99
|
this.onCodeIsReadyObservable.notifyObservers(this);
|
|
@@ -130,6 +131,16 @@ let FragmentOutputBlock = (() => {
|
|
|
130
131
|
_getOutputString(state) {
|
|
131
132
|
return state.shaderLanguage === 1 /* ShaderLanguage.WGSL */ ? "fragmentOutputsColor" : "gl_FragColor";
|
|
132
133
|
}
|
|
134
|
+
_writePrePassOutput(state, define, indexDefine, value) {
|
|
135
|
+
if (state.shaderLanguage !== 1 /* ShaderLanguage.WGSL */) {
|
|
136
|
+
return `#ifdef ${define}\r\ngl_FragData[${indexDefine}] = ${value};\r\n#endif\r\n`;
|
|
137
|
+
}
|
|
138
|
+
let code = "";
|
|
139
|
+
for (let index = 0; index < 8; index++) {
|
|
140
|
+
code += `#if defined(${define}) && ${indexDefine} == ${index}\r\nfragmentOutputs.fragData${index} = ${value};\r\n#endif\r\n`;
|
|
141
|
+
}
|
|
142
|
+
return code;
|
|
143
|
+
}
|
|
133
144
|
/**
|
|
134
145
|
* Prepare the list of defines
|
|
135
146
|
* @param defines - the material defines
|
|
@@ -176,6 +187,8 @@ let FragmentOutputBlock = (() => {
|
|
|
176
187
|
this._gammaDefineName = state._getFreeDefineName("CONVERTTOGAMMA");
|
|
177
188
|
const comments = `//${this.name}`;
|
|
178
189
|
state._emitFunctionFromInclude("helperFunctions", comments);
|
|
190
|
+
state._emitFunctionFromInclude("objectIdFunctions", comments, { define: "PREPASS_OBJECT_ID" });
|
|
191
|
+
state._emitUniformFromString("objectId", NodeMaterialBlockConnectionPointTypes.Float, "PREPASS_OBJECT_ID");
|
|
179
192
|
const outputString = this._getOutputString(state);
|
|
180
193
|
if (state.shaderLanguage === 1 /* ShaderLanguage.WGSL */) {
|
|
181
194
|
state.compilationString += `var ${outputString} : vec4<f32>;\r\n`;
|
|
@@ -238,8 +251,10 @@ let FragmentOutputBlock = (() => {
|
|
|
238
251
|
const output = isWebGPU ? "fragmentOutputs.fragDepth" : "gl_FragDepthEXT";
|
|
239
252
|
state.compilationString += `${output} = log2(${fragDepth}) * ${uniformP}logarithmicDepthConstant * 0.5;\n`;
|
|
240
253
|
}
|
|
254
|
+
const uniformPrefix = isWebGPU ? "uniforms." : "";
|
|
241
255
|
state.compilationString += `#if defined(PREPASS)\r\n`;
|
|
242
|
-
state.compilationString +=
|
|
256
|
+
state.compilationString += this._writePrePassOutput(state, "PREPASS_COLOR", "PREPASS_COLOR_INDEX", outputString);
|
|
257
|
+
state.compilationString += this._writePrePassOutput(state, "PREPASS_OBJECT_ID", "PREPASS_OBJECT_ID_INDEX", `encodeObjectId(${uniformPrefix}objectId)`);
|
|
243
258
|
state.compilationString += `#endif\r\n`;
|
|
244
259
|
return this;
|
|
245
260
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fragmentOutputBlock.pure.js","sourceRoot":"","sources":["../../../../../../../dev/core/src/Materials/Node/Blocks/Fragment/fragmentOutputBlock.pure.ts"],"names":[],"mappings":"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","sourcesContent":["/** This file must only contain pure code and pure imports */\r\n\r\nimport { NodeMaterialBlock } from \"../../nodeMaterialBlock\";\r\nimport { NodeMaterialBlockConnectionPointTypes } from \"../../Enums/nodeMaterialBlockConnectionPointTypes\";\r\nimport { type NodeMaterialBuildState } from \"../../nodeMaterialBuildState\";\r\nimport { NodeMaterialBlockTargets } from \"../../Enums/nodeMaterialBlockTargets\";\r\nimport { type NodeMaterialConnectionPoint } from \"../../nodeMaterialBlockConnectionPoint\";\r\nimport { type Scene } from \"../../../../scene.pure\";\r\nimport { type NodeMaterialDefines, type NodeMaterial } from \"../../nodeMaterial.pure\";\r\nimport { editableInPropertyPage, PropertyTypeForEdition } from \"../../../../Decorators/nodeDecorator\";\r\nimport { type Effect } from \"../../../effect.pure\";\r\nimport { type Mesh } from \"../../../../Meshes/mesh.pure\";\r\nimport { BindLogDepth } from \"../../../materialHelper.functions\";\r\nimport { ShaderLanguage } from \"core/Materials/shaderLanguage\";\r\nimport { RegisterClass } from \"../../../../Misc/typeStore\";\r\n\r\n/**\r\n * Color spaces supported by the fragment output block\r\n */\r\nexport enum FragmentOutputBlockColorSpace {\r\n /** Unspecified */\r\n NoColorSpace,\r\n /** Gamma */\r\n Gamma,\r\n /** Linear */\r\n Linear,\r\n}\r\n\r\n/**\r\n * Block used to output the final color\r\n */\r\nexport class FragmentOutputBlock extends NodeMaterialBlock {\r\n private _linearDefineName: string;\r\n private _gammaDefineName: string;\r\n private _additionalColorDefineName: string | undefined;\r\n protected _outputString: string;\r\n\r\n /**\r\n * Create a new FragmentOutputBlock\r\n * @param name defines the block name\r\n */\r\n public constructor(name: string) {\r\n super(name, NodeMaterialBlockTargets.Fragment, true, true);\r\n\r\n this.registerInput(\"rgba\", NodeMaterialBlockConnectionPointTypes.Color4, true);\r\n this.registerInput(\"rgb\", NodeMaterialBlockConnectionPointTypes.Color3, true);\r\n this.registerInput(\"a\", NodeMaterialBlockConnectionPointTypes.Float, true);\r\n this.registerInput(\"glow\", NodeMaterialBlockConnectionPointTypes.Color3, true);\r\n\r\n this.rgb.acceptedConnectionPointTypes.push(NodeMaterialBlockConnectionPointTypes.Vector3);\r\n this.rgb.acceptedConnectionPointTypes.push(NodeMaterialBlockConnectionPointTypes.Float);\r\n\r\n this.additionalColor.acceptedConnectionPointTypes.push(NodeMaterialBlockConnectionPointTypes.Vector3);\r\n this.additionalColor.acceptedConnectionPointTypes.push(NodeMaterialBlockConnectionPointTypes.Float);\r\n }\r\n\r\n /** Gets or sets a boolean indicating if content needs to be converted to gamma space */\r\n public convertToGammaSpace = false;\r\n\r\n /** Gets or sets a boolean indicating if content needs to be converted to linear space */\r\n public convertToLinearSpace = false;\r\n\r\n /** Gets or sets a boolean indicating if logarithmic depth should be used */\r\n @editableInPropertyPage(\"Use logarithmic depth\", PropertyTypeForEdition.Boolean, \"PROPERTIES\", { embedded: true })\r\n public useLogarithmicDepth = false;\r\n\r\n /**\r\n * Gets or sets the color space used for the block\r\n */\r\n @editableInPropertyPage(\"Color space\", PropertyTypeForEdition.List, \"ADVANCED\", {\r\n notifiers: { rebuild: true },\r\n embedded: true,\r\n options: [\r\n { label: \"No color space\", value: FragmentOutputBlockColorSpace.NoColorSpace },\r\n { label: \"To Gamma\", value: FragmentOutputBlockColorSpace.Gamma },\r\n { label: \"To Linear\", value: FragmentOutputBlockColorSpace.Linear },\r\n ],\r\n })\r\n public get colorSpace() {\r\n if (this.convertToGammaSpace) {\r\n return FragmentOutputBlockColorSpace.Gamma;\r\n }\r\n if (this.convertToLinearSpace) {\r\n return FragmentOutputBlockColorSpace.Linear;\r\n }\r\n return FragmentOutputBlockColorSpace.NoColorSpace;\r\n }\r\n\r\n public set colorSpace(value: FragmentOutputBlockColorSpace) {\r\n this.convertToGammaSpace = value === FragmentOutputBlockColorSpace.Gamma;\r\n this.convertToLinearSpace = value === FragmentOutputBlockColorSpace.Linear;\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 \"FragmentOutputBlock\";\r\n }\r\n\r\n /**\r\n * Initialize the block and prepare the context for build\r\n * @param state defines the state that will be used for the build\r\n */\r\n public override initialize(state: NodeMaterialBuildState) {\r\n state._excludeVariableName(\"logarithmicDepthConstant\");\r\n state._excludeVariableName(\"vFragmentDepth\");\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n this._initShaderSourceAsync(state.shaderLanguage);\r\n }\r\n\r\n private async _initShaderSourceAsync(shaderLanguage: ShaderLanguage) {\r\n this._codeIsReady = false;\r\n\r\n if (shaderLanguage === ShaderLanguage.WGSL) {\r\n await import(\"../../../../ShadersWGSL/ShadersInclude/helperFunctions\");\r\n } else {\r\n await import(\"../../../../Shaders/ShadersInclude/helperFunctions\");\r\n }\r\n\r\n this._codeIsReady = true;\r\n this.onCodeIsReadyObservable.notifyObservers(this);\r\n }\r\n\r\n /**\r\n * Gets the rgba input component\r\n */\r\n public get rgba(): NodeMaterialConnectionPoint {\r\n return this._inputs[0];\r\n }\r\n\r\n /**\r\n * Gets the rgb input component\r\n */\r\n public get rgb(): NodeMaterialConnectionPoint {\r\n return this._inputs[1];\r\n }\r\n\r\n /**\r\n * Gets the a input component\r\n */\r\n public get a(): NodeMaterialConnectionPoint {\r\n return this._inputs[2];\r\n }\r\n\r\n /**\r\n * Gets the additionalColor input component (named glow in the UI for now)\r\n */\r\n public get additionalColor(): NodeMaterialConnectionPoint {\r\n return this._inputs[3];\r\n }\r\n\r\n /**\r\n * Gets the glow input component\r\n */\r\n public get glow(): NodeMaterialConnectionPoint {\r\n return this._inputs[3];\r\n }\r\n\r\n protected _getOutputString(state: NodeMaterialBuildState): string {\r\n return state.shaderLanguage === ShaderLanguage.WGSL ? \"fragmentOutputsColor\" : \"gl_FragColor\";\r\n }\r\n\r\n /**\r\n * Prepare the list of defines\r\n * @param defines - the material defines\r\n * @param nodeMaterial - the node material\r\n */\r\n public override prepareDefines(defines: NodeMaterialDefines, nodeMaterial: NodeMaterial) {\r\n defines.setValue(this._linearDefineName, this.convertToLinearSpace, true);\r\n defines.setValue(this._gammaDefineName, this.convertToGammaSpace, true);\r\n if (this._additionalColorDefineName !== undefined) {\r\n defines.setValue(this._additionalColorDefineName, !!this.additionalColor.connectedPoint && nodeMaterial._useAdditionalColor, true);\r\n }\r\n }\r\n\r\n /**\r\n * Bind data to effect\r\n * @param effect - the effect to bind to\r\n * @param nodeMaterial - the node material\r\n * @param mesh - the mesh to bind for\r\n */\r\n public override bind(effect: Effect, nodeMaterial: NodeMaterial, mesh?: Mesh) {\r\n if ((this.useLogarithmicDepth || nodeMaterial.useLogarithmicDepth) && mesh) {\r\n BindLogDepth(undefined, effect, mesh.getScene());\r\n }\r\n }\r\n\r\n protected override _buildBlock(state: NodeMaterialBuildState) {\r\n super._buildBlock(state);\r\n\r\n const rgba = this.rgba;\r\n const rgb = this.rgb;\r\n const a = this.a;\r\n const additionalColor = this.additionalColor;\r\n\r\n const isWebGPU = state.shaderLanguage === ShaderLanguage.WGSL;\r\n state.sharedData.hints.needAlphaBlending = rgba.isConnected || a.isConnected;\r\n state.sharedData.blocksWithDefines.push(this);\r\n\r\n if (this.useLogarithmicDepth || state.sharedData.nodeMaterial.useLogarithmicDepth) {\r\n state._emitUniformFromString(\"logarithmicDepthConstant\", NodeMaterialBlockConnectionPointTypes.Float);\r\n state._emitVaryingFromString(\"vFragmentDepth\", NodeMaterialBlockConnectionPointTypes.Float);\r\n state.sharedData.bindableBlocks.push(this);\r\n }\r\n\r\n if (additionalColor.connectedPoint) {\r\n state._excludeVariableName(\"useAdditionalColor\");\r\n state._emitUniformFromString(\"useAdditionalColor\", NodeMaterialBlockConnectionPointTypes.Float);\r\n this._additionalColorDefineName = state._getFreeDefineName(\"USEADDITIONALCOLOR\");\r\n }\r\n\r\n this._linearDefineName = state._getFreeDefineName(\"CONVERTTOLINEAR\");\r\n this._gammaDefineName = state._getFreeDefineName(\"CONVERTTOGAMMA\");\r\n\r\n const comments = `//${this.name}`;\r\n state._emitFunctionFromInclude(\"helperFunctions\", comments);\r\n\r\n const outputString = this._getOutputString(state);\r\n if (state.shaderLanguage === ShaderLanguage.WGSL) {\r\n state.compilationString += `var ${outputString} : vec4<f32>;\\r\\n`;\r\n }\r\n\r\n const vec4 = state._getShaderType(NodeMaterialBlockConnectionPointTypes.Vector4);\r\n\r\n if (additionalColor.connectedPoint) {\r\n let aValue = \"1.0\";\r\n\r\n if (a.connectedPoint) {\r\n aValue = a.associatedVariableName;\r\n }\r\n state.compilationString += `#ifdef ${this._additionalColorDefineName}\\n`;\r\n if (additionalColor.connectedPoint.type === NodeMaterialBlockConnectionPointTypes.Float) {\r\n state.compilationString += `${outputString} = ${vec4}(${additionalColor.associatedVariableName}, ${additionalColor.associatedVariableName}, ${additionalColor.associatedVariableName}, ${aValue});\\n`;\r\n } else {\r\n state.compilationString += `${outputString} = ${vec4}(${additionalColor.associatedVariableName}, ${aValue});\\n`;\r\n }\r\n state.compilationString += `#else\\n`;\r\n }\r\n\r\n if (rgba.connectedPoint) {\r\n if (a.isConnected) {\r\n state.compilationString += `${outputString} = ${vec4}(${rgba.associatedVariableName}.rgb, ${a.associatedVariableName});\\n`;\r\n } else {\r\n state.compilationString += `${outputString} = ${rgba.associatedVariableName};\\n`;\r\n }\r\n } else if (rgb.connectedPoint) {\r\n let aValue = \"1.0\";\r\n\r\n if (a.connectedPoint) {\r\n aValue = a.associatedVariableName;\r\n }\r\n\r\n if (rgb.connectedPoint.type === NodeMaterialBlockConnectionPointTypes.Float) {\r\n state.compilationString += `${outputString} = ${vec4}(${rgb.associatedVariableName}, ${rgb.associatedVariableName}, ${rgb.associatedVariableName}, ${aValue});\\n`;\r\n } else {\r\n state.compilationString += `${outputString} = ${vec4}(${rgb.associatedVariableName}, ${aValue});\\n`;\r\n }\r\n } else {\r\n state.sharedData.checks.notConnectedNonOptionalInputs.push(rgba);\r\n }\r\n\r\n if (additionalColor.connectedPoint) {\r\n state.compilationString += `#endif\\n`;\r\n }\r\n\r\n state.compilationString += `#ifdef ${this._linearDefineName}\\n`;\r\n state.compilationString += `${outputString} = toLinearSpace${state.shaderLanguage === ShaderLanguage.WGSL ? \"Vec4\" : \"\"}(${outputString});\\n`;\r\n state.compilationString += `#endif\\n`;\r\n\r\n state.compilationString += `#ifdef ${this._gammaDefineName}\\n`;\r\n state.compilationString += `${outputString} = toGammaSpace(${outputString});\\n`;\r\n state.compilationString += `#endif\\n`;\r\n\r\n if (state.shaderLanguage === ShaderLanguage.WGSL) {\r\n state.compilationString += `#if !defined(PREPASS)\\r\\n`;\r\n state.compilationString += `fragmentOutputs.color = ${outputString};\\r\\n`;\r\n state.compilationString += `#endif\\r\\n`;\r\n }\r\n\r\n if (this.useLogarithmicDepth || state.sharedData.nodeMaterial.useLogarithmicDepth) {\r\n const fragDepth = isWebGPU ? \"input.vFragmentDepth\" : \"vFragmentDepth\";\r\n const uniformP = isWebGPU ? \"uniforms.\" : \"\";\r\n const output = isWebGPU ? \"fragmentOutputs.fragDepth\" : \"gl_FragDepthEXT\";\r\n\r\n state.compilationString += `${output} = log2(${fragDepth}) * ${uniformP}logarithmicDepthConstant * 0.5;\\n`;\r\n }\r\n\r\n state.compilationString += `#if defined(PREPASS)\\r\\n`;\r\n state.compilationString += `${isWebGPU ? \"fragmentOutputs.fragData0\" : \"gl_FragData[0]\"} = ${outputString};\\r\\n`;\r\n state.compilationString += `#endif\\r\\n`;\r\n\r\n return this;\r\n }\r\n\r\n protected override _dumpPropertiesCode() {\r\n let codeString = super._dumpPropertiesCode();\r\n codeString += `${this._codeVariableName}.convertToGammaSpace = ${this.convertToGammaSpace};\\n`;\r\n codeString += `${this._codeVariableName}.convertToLinearSpace = ${this.convertToLinearSpace};\\n`;\r\n codeString += `${this._codeVariableName}.useLogarithmicDepth = ${this.useLogarithmicDepth};\\n`;\r\n\r\n return codeString;\r\n }\r\n\r\n /**\r\n * Serializes the block\r\n * @returns the serialized object\r\n */\r\n public override serialize(): any {\r\n const serializationObject = super.serialize();\r\n\r\n serializationObject.convertToGammaSpace = this.convertToGammaSpace;\r\n serializationObject.convertToLinearSpace = this.convertToLinearSpace;\r\n serializationObject.useLogarithmicDepth = this.useLogarithmicDepth;\r\n\r\n return serializationObject;\r\n }\r\n\r\n /**\r\n * Deserializes the block\r\n * @param serializationObject - the serialization object\r\n * @param scene - the scene\r\n * @param rootUrl - the root url\r\n */\r\n public override _deserialize(serializationObject: any, scene: Scene, rootUrl: string) {\r\n super._deserialize(serializationObject, scene, rootUrl);\r\n\r\n this.convertToGammaSpace = !!serializationObject.convertToGammaSpace;\r\n this.convertToLinearSpace = !!serializationObject.convertToLinearSpace;\r\n this.useLogarithmicDepth = serializationObject.useLogarithmicDepth ?? false;\r\n }\r\n}\r\n\r\nlet _Registered = false;\r\n/**\r\n * Register side effects for fragmentOutputBlock.\r\n * Safe to call multiple times; only the first call has an effect.\r\n */\r\nexport function RegisterFragmentOutputBlock(): void {\r\n if (_Registered) {\r\n return;\r\n }\r\n _Registered = true;\r\n\r\n RegisterClass(\"BABYLON.FragmentOutputBlock\", FragmentOutputBlock);\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"fragmentOutputBlock.pure.js","sourceRoot":"","sources":["../../../../../../../dev/core/src/Materials/Node/Blocks/Fragment/fragmentOutputBlock.pure.ts"],"names":[],"mappings":"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","sourcesContent":["/** This file must only contain pure code and pure imports */\r\n\r\nimport { NodeMaterialBlock } from \"../../nodeMaterialBlock\";\r\nimport { NodeMaterialBlockConnectionPointTypes } from \"../../Enums/nodeMaterialBlockConnectionPointTypes\";\r\nimport { type NodeMaterialBuildState } from \"../../nodeMaterialBuildState\";\r\nimport { NodeMaterialBlockTargets } from \"../../Enums/nodeMaterialBlockTargets\";\r\nimport { type NodeMaterialConnectionPoint } from \"../../nodeMaterialBlockConnectionPoint\";\r\nimport { type Scene } from \"../../../../scene.pure\";\r\nimport { type NodeMaterialDefines, type NodeMaterial } from \"../../nodeMaterial.pure\";\r\nimport { editableInPropertyPage, PropertyTypeForEdition } from \"../../../../Decorators/nodeDecorator\";\r\nimport { type Effect } from \"../../../effect.pure\";\r\nimport { type Mesh } from \"../../../../Meshes/mesh.pure\";\r\nimport { BindLogDepth } from \"../../../materialHelper.functions\";\r\nimport { ShaderLanguage } from \"core/Materials/shaderLanguage\";\r\nimport { RegisterClass } from \"../../../../Misc/typeStore\";\r\n\r\n/**\r\n * Color spaces supported by the fragment output block\r\n */\r\nexport enum FragmentOutputBlockColorSpace {\r\n /** Unspecified */\r\n NoColorSpace,\r\n /** Gamma */\r\n Gamma,\r\n /** Linear */\r\n Linear,\r\n}\r\n\r\n/**\r\n * Block used to output the final color\r\n */\r\nexport class FragmentOutputBlock extends NodeMaterialBlock {\r\n private _linearDefineName: string;\r\n private _gammaDefineName: string;\r\n private _additionalColorDefineName: string | undefined;\r\n protected _outputString: string;\r\n\r\n /**\r\n * Create a new FragmentOutputBlock\r\n * @param name defines the block name\r\n */\r\n public constructor(name: string) {\r\n super(name, NodeMaterialBlockTargets.Fragment, true, true);\r\n\r\n this.registerInput(\"rgba\", NodeMaterialBlockConnectionPointTypes.Color4, true);\r\n this.registerInput(\"rgb\", NodeMaterialBlockConnectionPointTypes.Color3, true);\r\n this.registerInput(\"a\", NodeMaterialBlockConnectionPointTypes.Float, true);\r\n this.registerInput(\"glow\", NodeMaterialBlockConnectionPointTypes.Color3, true);\r\n\r\n this.rgb.acceptedConnectionPointTypes.push(NodeMaterialBlockConnectionPointTypes.Vector3);\r\n this.rgb.acceptedConnectionPointTypes.push(NodeMaterialBlockConnectionPointTypes.Float);\r\n\r\n this.additionalColor.acceptedConnectionPointTypes.push(NodeMaterialBlockConnectionPointTypes.Vector3);\r\n this.additionalColor.acceptedConnectionPointTypes.push(NodeMaterialBlockConnectionPointTypes.Float);\r\n }\r\n\r\n /** Gets or sets a boolean indicating if content needs to be converted to gamma space */\r\n public convertToGammaSpace = false;\r\n\r\n /** Gets or sets a boolean indicating if content needs to be converted to linear space */\r\n public convertToLinearSpace = false;\r\n\r\n /** Gets or sets a boolean indicating if logarithmic depth should be used */\r\n @editableInPropertyPage(\"Use logarithmic depth\", PropertyTypeForEdition.Boolean, \"PROPERTIES\", { embedded: true })\r\n public useLogarithmicDepth = false;\r\n\r\n /**\r\n * Gets or sets the color space used for the block\r\n */\r\n @editableInPropertyPage(\"Color space\", PropertyTypeForEdition.List, \"ADVANCED\", {\r\n notifiers: { rebuild: true },\r\n embedded: true,\r\n options: [\r\n { label: \"No color space\", value: FragmentOutputBlockColorSpace.NoColorSpace },\r\n { label: \"To Gamma\", value: FragmentOutputBlockColorSpace.Gamma },\r\n { label: \"To Linear\", value: FragmentOutputBlockColorSpace.Linear },\r\n ],\r\n })\r\n public get colorSpace() {\r\n if (this.convertToGammaSpace) {\r\n return FragmentOutputBlockColorSpace.Gamma;\r\n }\r\n if (this.convertToLinearSpace) {\r\n return FragmentOutputBlockColorSpace.Linear;\r\n }\r\n return FragmentOutputBlockColorSpace.NoColorSpace;\r\n }\r\n\r\n public set colorSpace(value: FragmentOutputBlockColorSpace) {\r\n this.convertToGammaSpace = value === FragmentOutputBlockColorSpace.Gamma;\r\n this.convertToLinearSpace = value === FragmentOutputBlockColorSpace.Linear;\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 \"FragmentOutputBlock\";\r\n }\r\n\r\n /**\r\n * Initialize the block and prepare the context for build\r\n * @param state defines the state that will be used for the build\r\n */\r\n public override initialize(state: NodeMaterialBuildState) {\r\n state._excludeVariableName(\"logarithmicDepthConstant\");\r\n state._excludeVariableName(\"vFragmentDepth\");\r\n state._excludeVariableName(\"objectId\");\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n this._initShaderSourceAsync(state.shaderLanguage);\r\n }\r\n\r\n private async _initShaderSourceAsync(shaderLanguage: ShaderLanguage) {\r\n this._codeIsReady = false;\r\n\r\n if (shaderLanguage === ShaderLanguage.WGSL) {\r\n await Promise.all([import(\"../../../../ShadersWGSL/ShadersInclude/helperFunctions\"), import(\"../../../../ShadersWGSL/ShadersInclude/objectIdFunctions\")]);\r\n } else {\r\n await Promise.all([import(\"../../../../Shaders/ShadersInclude/helperFunctions\"), import(\"../../../../Shaders/ShadersInclude/objectIdFunctions\")]);\r\n }\r\n\r\n this._codeIsReady = true;\r\n this.onCodeIsReadyObservable.notifyObservers(this);\r\n }\r\n\r\n /**\r\n * Gets the rgba input component\r\n */\r\n public get rgba(): NodeMaterialConnectionPoint {\r\n return this._inputs[0];\r\n }\r\n\r\n /**\r\n * Gets the rgb input component\r\n */\r\n public get rgb(): NodeMaterialConnectionPoint {\r\n return this._inputs[1];\r\n }\r\n\r\n /**\r\n * Gets the a input component\r\n */\r\n public get a(): NodeMaterialConnectionPoint {\r\n return this._inputs[2];\r\n }\r\n\r\n /**\r\n * Gets the additionalColor input component (named glow in the UI for now)\r\n */\r\n public get additionalColor(): NodeMaterialConnectionPoint {\r\n return this._inputs[3];\r\n }\r\n\r\n /**\r\n * Gets the glow input component\r\n */\r\n public get glow(): NodeMaterialConnectionPoint {\r\n return this._inputs[3];\r\n }\r\n\r\n protected _getOutputString(state: NodeMaterialBuildState): string {\r\n return state.shaderLanguage === ShaderLanguage.WGSL ? \"fragmentOutputsColor\" : \"gl_FragColor\";\r\n }\r\n\r\n private _writePrePassOutput(state: NodeMaterialBuildState, define: string, indexDefine: string, value: string): string {\r\n if (state.shaderLanguage !== ShaderLanguage.WGSL) {\r\n return `#ifdef ${define}\\r\\ngl_FragData[${indexDefine}] = ${value};\\r\\n#endif\\r\\n`;\r\n }\r\n\r\n let code = \"\";\r\n for (let index = 0; index < 8; index++) {\r\n code += `#if defined(${define}) && ${indexDefine} == ${index}\\r\\nfragmentOutputs.fragData${index} = ${value};\\r\\n#endif\\r\\n`;\r\n }\r\n return code;\r\n }\r\n\r\n /**\r\n * Prepare the list of defines\r\n * @param defines - the material defines\r\n * @param nodeMaterial - the node material\r\n */\r\n public override prepareDefines(defines: NodeMaterialDefines, nodeMaterial: NodeMaterial) {\r\n defines.setValue(this._linearDefineName, this.convertToLinearSpace, true);\r\n defines.setValue(this._gammaDefineName, this.convertToGammaSpace, true);\r\n if (this._additionalColorDefineName !== undefined) {\r\n defines.setValue(this._additionalColorDefineName, !!this.additionalColor.connectedPoint && nodeMaterial._useAdditionalColor, true);\r\n }\r\n }\r\n\r\n /**\r\n * Bind data to effect\r\n * @param effect - the effect to bind to\r\n * @param nodeMaterial - the node material\r\n * @param mesh - the mesh to bind for\r\n */\r\n public override bind(effect: Effect, nodeMaterial: NodeMaterial, mesh?: Mesh) {\r\n if ((this.useLogarithmicDepth || nodeMaterial.useLogarithmicDepth) && mesh) {\r\n BindLogDepth(undefined, effect, mesh.getScene());\r\n }\r\n }\r\n\r\n protected override _buildBlock(state: NodeMaterialBuildState) {\r\n super._buildBlock(state);\r\n\r\n const rgba = this.rgba;\r\n const rgb = this.rgb;\r\n const a = this.a;\r\n const additionalColor = this.additionalColor;\r\n\r\n const isWebGPU = state.shaderLanguage === ShaderLanguage.WGSL;\r\n state.sharedData.hints.needAlphaBlending = rgba.isConnected || a.isConnected;\r\n state.sharedData.blocksWithDefines.push(this);\r\n\r\n if (this.useLogarithmicDepth || state.sharedData.nodeMaterial.useLogarithmicDepth) {\r\n state._emitUniformFromString(\"logarithmicDepthConstant\", NodeMaterialBlockConnectionPointTypes.Float);\r\n state._emitVaryingFromString(\"vFragmentDepth\", NodeMaterialBlockConnectionPointTypes.Float);\r\n state.sharedData.bindableBlocks.push(this);\r\n }\r\n\r\n if (additionalColor.connectedPoint) {\r\n state._excludeVariableName(\"useAdditionalColor\");\r\n state._emitUniformFromString(\"useAdditionalColor\", NodeMaterialBlockConnectionPointTypes.Float);\r\n this._additionalColorDefineName = state._getFreeDefineName(\"USEADDITIONALCOLOR\");\r\n }\r\n\r\n this._linearDefineName = state._getFreeDefineName(\"CONVERTTOLINEAR\");\r\n this._gammaDefineName = state._getFreeDefineName(\"CONVERTTOGAMMA\");\r\n\r\n const comments = `//${this.name}`;\r\n state._emitFunctionFromInclude(\"helperFunctions\", comments);\r\n state._emitFunctionFromInclude(\"objectIdFunctions\", comments, { define: \"PREPASS_OBJECT_ID\" });\r\n state._emitUniformFromString(\"objectId\", NodeMaterialBlockConnectionPointTypes.Float, \"PREPASS_OBJECT_ID\");\r\n\r\n const outputString = this._getOutputString(state);\r\n if (state.shaderLanguage === ShaderLanguage.WGSL) {\r\n state.compilationString += `var ${outputString} : vec4<f32>;\\r\\n`;\r\n }\r\n\r\n const vec4 = state._getShaderType(NodeMaterialBlockConnectionPointTypes.Vector4);\r\n\r\n if (additionalColor.connectedPoint) {\r\n let aValue = \"1.0\";\r\n\r\n if (a.connectedPoint) {\r\n aValue = a.associatedVariableName;\r\n }\r\n state.compilationString += `#ifdef ${this._additionalColorDefineName}\\n`;\r\n if (additionalColor.connectedPoint.type === NodeMaterialBlockConnectionPointTypes.Float) {\r\n state.compilationString += `${outputString} = ${vec4}(${additionalColor.associatedVariableName}, ${additionalColor.associatedVariableName}, ${additionalColor.associatedVariableName}, ${aValue});\\n`;\r\n } else {\r\n state.compilationString += `${outputString} = ${vec4}(${additionalColor.associatedVariableName}, ${aValue});\\n`;\r\n }\r\n state.compilationString += `#else\\n`;\r\n }\r\n\r\n if (rgba.connectedPoint) {\r\n if (a.isConnected) {\r\n state.compilationString += `${outputString} = ${vec4}(${rgba.associatedVariableName}.rgb, ${a.associatedVariableName});\\n`;\r\n } else {\r\n state.compilationString += `${outputString} = ${rgba.associatedVariableName};\\n`;\r\n }\r\n } else if (rgb.connectedPoint) {\r\n let aValue = \"1.0\";\r\n\r\n if (a.connectedPoint) {\r\n aValue = a.associatedVariableName;\r\n }\r\n\r\n if (rgb.connectedPoint.type === NodeMaterialBlockConnectionPointTypes.Float) {\r\n state.compilationString += `${outputString} = ${vec4}(${rgb.associatedVariableName}, ${rgb.associatedVariableName}, ${rgb.associatedVariableName}, ${aValue});\\n`;\r\n } else {\r\n state.compilationString += `${outputString} = ${vec4}(${rgb.associatedVariableName}, ${aValue});\\n`;\r\n }\r\n } else {\r\n state.sharedData.checks.notConnectedNonOptionalInputs.push(rgba);\r\n }\r\n\r\n if (additionalColor.connectedPoint) {\r\n state.compilationString += `#endif\\n`;\r\n }\r\n\r\n state.compilationString += `#ifdef ${this._linearDefineName}\\n`;\r\n state.compilationString += `${outputString} = toLinearSpace${state.shaderLanguage === ShaderLanguage.WGSL ? \"Vec4\" : \"\"}(${outputString});\\n`;\r\n state.compilationString += `#endif\\n`;\r\n\r\n state.compilationString += `#ifdef ${this._gammaDefineName}\\n`;\r\n state.compilationString += `${outputString} = toGammaSpace(${outputString});\\n`;\r\n state.compilationString += `#endif\\n`;\r\n\r\n if (state.shaderLanguage === ShaderLanguage.WGSL) {\r\n state.compilationString += `#if !defined(PREPASS)\\r\\n`;\r\n state.compilationString += `fragmentOutputs.color = ${outputString};\\r\\n`;\r\n state.compilationString += `#endif\\r\\n`;\r\n }\r\n\r\n if (this.useLogarithmicDepth || state.sharedData.nodeMaterial.useLogarithmicDepth) {\r\n const fragDepth = isWebGPU ? \"input.vFragmentDepth\" : \"vFragmentDepth\";\r\n const uniformP = isWebGPU ? \"uniforms.\" : \"\";\r\n const output = isWebGPU ? \"fragmentOutputs.fragDepth\" : \"gl_FragDepthEXT\";\r\n\r\n state.compilationString += `${output} = log2(${fragDepth}) * ${uniformP}logarithmicDepthConstant * 0.5;\\n`;\r\n }\r\n\r\n const uniformPrefix = isWebGPU ? \"uniforms.\" : \"\";\r\n state.compilationString += `#if defined(PREPASS)\\r\\n`;\r\n state.compilationString += this._writePrePassOutput(state, \"PREPASS_COLOR\", \"PREPASS_COLOR_INDEX\", outputString);\r\n state.compilationString += this._writePrePassOutput(state, \"PREPASS_OBJECT_ID\", \"PREPASS_OBJECT_ID_INDEX\", `encodeObjectId(${uniformPrefix}objectId)`);\r\n state.compilationString += `#endif\\r\\n`;\r\n\r\n return this;\r\n }\r\n\r\n protected override _dumpPropertiesCode() {\r\n let codeString = super._dumpPropertiesCode();\r\n codeString += `${this._codeVariableName}.convertToGammaSpace = ${this.convertToGammaSpace};\\n`;\r\n codeString += `${this._codeVariableName}.convertToLinearSpace = ${this.convertToLinearSpace};\\n`;\r\n codeString += `${this._codeVariableName}.useLogarithmicDepth = ${this.useLogarithmicDepth};\\n`;\r\n\r\n return codeString;\r\n }\r\n\r\n /**\r\n * Serializes the block\r\n * @returns the serialized object\r\n */\r\n public override serialize(): any {\r\n const serializationObject = super.serialize();\r\n\r\n serializationObject.convertToGammaSpace = this.convertToGammaSpace;\r\n serializationObject.convertToLinearSpace = this.convertToLinearSpace;\r\n serializationObject.useLogarithmicDepth = this.useLogarithmicDepth;\r\n\r\n return serializationObject;\r\n }\r\n\r\n /**\r\n * Deserializes the block\r\n * @param serializationObject - the serialization object\r\n * @param scene - the scene\r\n * @param rootUrl - the root url\r\n */\r\n public override _deserialize(serializationObject: any, scene: Scene, rootUrl: string) {\r\n super._deserialize(serializationObject, scene, rootUrl);\r\n\r\n this.convertToGammaSpace = !!serializationObject.convertToGammaSpace;\r\n this.convertToLinearSpace = !!serializationObject.convertToLinearSpace;\r\n this.useLogarithmicDepth = serializationObject.useLogarithmicDepth ?? false;\r\n }\r\n}\r\n\r\nlet _Registered = false;\r\n/**\r\n * Register side effects for fragmentOutputBlock.\r\n * Safe to call multiple times; only the first call has an effect.\r\n */\r\nexport function RegisterFragmentOutputBlock(): void {\r\n if (_Registered) {\r\n return;\r\n }\r\n _Registered = true;\r\n\r\n RegisterClass(\"BABYLON.FragmentOutputBlock\", FragmentOutputBlock);\r\n}\r\n"]}
|
|
@@ -216,27 +216,11 @@ export class PrePassOutputBlock extends NodeMaterialBlock {
|
|
|
216
216
|
state.compilationString += ` fragData[PREPASS_VELOCITY_LINEAR_INDEX] = ${vec4}(0.0, 0.0, 0.0, 1.0);\r\n`;
|
|
217
217
|
}
|
|
218
218
|
state.compilationString += `#endif\r\n`;
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
state.compilationString += `#endif\r\n`;
|
|
225
|
-
state.compilationString += `#if SCENE_MRT_COUNT > 3\r\n`;
|
|
226
|
-
state.compilationString += `${this._getFragData(isWebGPU, 3)} = fragData[3];\r\n`;
|
|
227
|
-
state.compilationString += `#endif\r\n`;
|
|
228
|
-
state.compilationString += `#if SCENE_MRT_COUNT > 4\r\n`;
|
|
229
|
-
state.compilationString += `${this._getFragData(isWebGPU, 4)} = fragData[4];\r\n`;
|
|
230
|
-
state.compilationString += `#endif\r\n`;
|
|
231
|
-
state.compilationString += `#if SCENE_MRT_COUNT > 5\r\n`;
|
|
232
|
-
state.compilationString += `${this._getFragData(isWebGPU, 5)} = fragData[5];\r\n`;
|
|
233
|
-
state.compilationString += `#endif\r\n`;
|
|
234
|
-
state.compilationString += `#if SCENE_MRT_COUNT > 6\r\n`;
|
|
235
|
-
state.compilationString += `${this._getFragData(isWebGPU, 6)} = fragData[6];\r\n`;
|
|
236
|
-
state.compilationString += `#endif\r\n`;
|
|
237
|
-
state.compilationString += `#if SCENE_MRT_COUNT > 7\r\n`;
|
|
238
|
-
state.compilationString += `${this._getFragData(isWebGPU, 7)} = fragData[7];\r\n`;
|
|
239
|
-
state.compilationString += `#endif\r\n`;
|
|
219
|
+
for (let index = 0; index < 8; index++) {
|
|
220
|
+
state.compilationString += `#if SCENE_MRT_COUNT > ${index} && (!defined(PREPASS_COLOR) || PREPASS_COLOR_INDEX != ${index}) && (!defined(PREPASS_OBJECT_ID) || PREPASS_OBJECT_ID_INDEX != ${index})\r\n`;
|
|
221
|
+
state.compilationString += `${this._getFragData(isWebGPU, index)} = fragData[${index}];\r\n`;
|
|
222
|
+
state.compilationString += `#endif\r\n`;
|
|
223
|
+
}
|
|
240
224
|
state.compilationString += `#endif\r\n`;
|
|
241
225
|
return this;
|
|
242
226
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prePassOutputBlock.pure.js","sourceRoot":"","sources":["../../../../../../../dev/core/src/Materials/Node/Blocks/Fragment/prePassOutputBlock.pure.ts"],"names":[],"mappings":"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","sourcesContent":["/** This file must only contain pure code and pure imports */\r\n\r\nimport { NodeMaterialBlock } from \"../../nodeMaterialBlock\";\r\nimport { NodeMaterialBlockConnectionPointTypes } from \"../../Enums/nodeMaterialBlockConnectionPointTypes\";\r\nimport { type NodeMaterialBuildState } from \"../../nodeMaterialBuildState\";\r\nimport { NodeMaterialBlockTargets } from \"../../Enums/nodeMaterialBlockTargets\";\r\nimport { type NodeMaterialConnectionPoint } from \"../../nodeMaterialBlockConnectionPoint\";\r\nimport { ShaderLanguage } from \"core/Materials/shaderLanguage\";\r\nimport { RegisterClass } from \"../../../../Misc/typeStore\";\r\n\r\n/**\r\n * Block used to output values on the prepass textures\r\n * @see https://playground.babylonjs.com/#WW65SN#9\r\n */\r\nexport class PrePassOutputBlock extends NodeMaterialBlock {\r\n /**\r\n * Create a new PrePassOutputBlock\r\n * @param name defines the block name\r\n */\r\n public constructor(name: string) {\r\n super(name, NodeMaterialBlockTargets.Fragment, true);\r\n\r\n this.registerInput(\"viewDepth\", NodeMaterialBlockConnectionPointTypes.Float, true);\r\n this.registerInput(\"screenDepth\", NodeMaterialBlockConnectionPointTypes.Float, true);\r\n this.registerInput(\"worldPosition\", NodeMaterialBlockConnectionPointTypes.AutoDetect, true);\r\n this.registerInput(\"localPosition\", NodeMaterialBlockConnectionPointTypes.AutoDetect, true);\r\n this.registerInput(\"viewNormal\", NodeMaterialBlockConnectionPointTypes.AutoDetect, true);\r\n this.registerInput(\"worldNormal\", NodeMaterialBlockConnectionPointTypes.AutoDetect, true);\r\n this.registerInput(\"reflectivity\", NodeMaterialBlockConnectionPointTypes.AutoDetect, true);\r\n this.registerInput(\"velocity\", NodeMaterialBlockConnectionPointTypes.AutoDetect, true);\r\n this.registerInput(\"velocityLinear\", NodeMaterialBlockConnectionPointTypes.AutoDetect, true);\r\n\r\n this.inputs[2].addExcludedConnectionPointFromAllowedTypes(NodeMaterialBlockConnectionPointTypes.Vector3 | NodeMaterialBlockConnectionPointTypes.Vector4);\r\n this.inputs[3].addExcludedConnectionPointFromAllowedTypes(NodeMaterialBlockConnectionPointTypes.Vector3 | NodeMaterialBlockConnectionPointTypes.Vector4);\r\n this.inputs[4].addExcludedConnectionPointFromAllowedTypes(NodeMaterialBlockConnectionPointTypes.Vector3 | NodeMaterialBlockConnectionPointTypes.Vector4);\r\n this.inputs[5].addExcludedConnectionPointFromAllowedTypes(NodeMaterialBlockConnectionPointTypes.Vector3 | NodeMaterialBlockConnectionPointTypes.Vector4);\r\n this.inputs[6].addExcludedConnectionPointFromAllowedTypes(\r\n NodeMaterialBlockConnectionPointTypes.Vector3 |\r\n NodeMaterialBlockConnectionPointTypes.Vector4 |\r\n NodeMaterialBlockConnectionPointTypes.Color3 |\r\n NodeMaterialBlockConnectionPointTypes.Color4\r\n );\r\n this.inputs[7].addExcludedConnectionPointFromAllowedTypes(NodeMaterialBlockConnectionPointTypes.Vector3 | NodeMaterialBlockConnectionPointTypes.Vector4);\r\n this.inputs[8].addExcludedConnectionPointFromAllowedTypes(NodeMaterialBlockConnectionPointTypes.Vector3 | NodeMaterialBlockConnectionPointTypes.Vector4);\r\n }\r\n\r\n /**\r\n * Initialize the block and prepare the context for build\r\n * @param state defines the state that will be used for the build\r\n */\r\n public override initialize(state: NodeMaterialBuildState) {\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n this._initShaderSourceAsync(state.shaderLanguage);\r\n }\r\n\r\n private async _initShaderSourceAsync(shaderLanguage: ShaderLanguage) {\r\n this._codeIsReady = false;\r\n\r\n if (shaderLanguage === ShaderLanguage.WGSL) {\r\n await import(\"../../../../ShadersWGSL/ShadersInclude/helperFunctions\");\r\n } else {\r\n await import(\"../../../../Shaders/ShadersInclude/helperFunctions\");\r\n }\r\n\r\n this._codeIsReady = true;\r\n this.onCodeIsReadyObservable.notifyObservers(this);\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 \"PrePassOutputBlock\";\r\n }\r\n\r\n /**\r\n * Gets the view depth component\r\n */\r\n public get viewDepth(): NodeMaterialConnectionPoint {\r\n return this._inputs[0];\r\n }\r\n\r\n /**\r\n * Gets the screen depth component\r\n */\r\n public get screenDepth(): NodeMaterialConnectionPoint {\r\n return this._inputs[1];\r\n }\r\n\r\n /**\r\n * Gets the world position component\r\n */\r\n public get worldPosition(): NodeMaterialConnectionPoint {\r\n return this._inputs[2];\r\n }\r\n\r\n /**\r\n * Gets the position in local space component\r\n */\r\n public get localPosition(): NodeMaterialConnectionPoint {\r\n return this._inputs[3];\r\n }\r\n\r\n /**\r\n * Gets the view normal component\r\n */\r\n public get viewNormal(): NodeMaterialConnectionPoint {\r\n return this._inputs[4];\r\n }\r\n\r\n /**\r\n * Gets the world normal component\r\n */\r\n public get worldNormal(): NodeMaterialConnectionPoint {\r\n return this._inputs[5];\r\n }\r\n\r\n /**\r\n * Gets the reflectivity component\r\n */\r\n public get reflectivity(): NodeMaterialConnectionPoint {\r\n return this._inputs[6];\r\n }\r\n\r\n /**\r\n * Gets the velocity component\r\n */\r\n public get velocity(): NodeMaterialConnectionPoint {\r\n return this._inputs[7];\r\n }\r\n\r\n /**\r\n * Gets the linear velocity component\r\n */\r\n public get velocityLinear(): NodeMaterialConnectionPoint {\r\n return this._inputs[8];\r\n }\r\n\r\n private _getFragData(isWebGPU: boolean, index: number) {\r\n return isWebGPU ? `fragmentOutputs.fragData${index}` : `gl_FragData[${index}]`;\r\n }\r\n\r\n protected override _buildBlock(state: NodeMaterialBuildState) {\r\n super._buildBlock(state);\r\n\r\n const worldPosition = this.worldPosition;\r\n const localPosition = this.localPosition;\r\n const viewNormal = this.viewNormal;\r\n const worldNormal = this.worldNormal;\r\n const viewDepth = this.viewDepth;\r\n const reflectivity = this.reflectivity;\r\n const screenDepth = this.screenDepth;\r\n const velocity = this.velocity;\r\n const velocityLinear = this.velocityLinear;\r\n\r\n state.sharedData.blocksWithDefines.push(this);\r\n\r\n const comments = `//${this.name}`;\r\n const vec4 = state._getShaderType(NodeMaterialBlockConnectionPointTypes.Vector4);\r\n const isWebGPU = state.shaderLanguage === ShaderLanguage.WGSL;\r\n state._emitFunctionFromInclude(\"helperFunctions\", comments);\r\n\r\n state.compilationString += `#if defined(PREPASS)\\r\\n`;\r\n state.compilationString += isWebGPU ? `var fragData: array<vec4<f32>, SCENE_MRT_COUNT>;\\r\\n` : `vec4 fragData[SCENE_MRT_COUNT];\\r\\n`;\r\n\r\n state.compilationString += `#ifdef PREPASS_DEPTH\\r\\n`;\r\n if (viewDepth.connectedPoint) {\r\n state.compilationString += ` fragData[PREPASS_DEPTH_INDEX] = ${vec4}(${viewDepth.associatedVariableName}, 0.0, 0.0, 1.0);\\r\\n`;\r\n } else {\r\n // We have to write something on the viewDepth output or it will raise a gl error\r\n state.compilationString += ` fragData[PREPASS_DEPTH_INDEX] = ${vec4}(0.0, 0.0, 0.0, 0.0);\\r\\n`;\r\n }\r\n state.compilationString += `#endif\\r\\n`;\r\n state.compilationString += `#ifdef PREPASS_SCREENSPACE_DEPTH\\r\\n`;\r\n if (screenDepth.connectedPoint) {\r\n state.compilationString += ` fragData[PREPASS_SCREENSPACE_DEPTH_INDEX] = ${vec4}(${screenDepth.associatedVariableName}, 0.0, 0.0, 1.0);\\r\\n`;\r\n } else {\r\n // We have to write something on the viewDepth output or it will raise a gl error\r\n state.compilationString += ` fragData[PREPASS_SCREENSPACE_DEPTH_INDEX] = ${vec4}(0.0, 0.0, 0.0, 0.0);\\r\\n`;\r\n }\r\n state.compilationString += `#endif\\r\\n`;\r\n state.compilationString += `#ifdef PREPASS_POSITION\\r\\n`;\r\n if (worldPosition.connectedPoint) {\r\n state.compilationString += `fragData[PREPASS_POSITION_INDEX] = ${vec4}(${worldPosition.associatedVariableName}.rgb, ${\r\n worldPosition.connectedPoint.type === NodeMaterialBlockConnectionPointTypes.Vector4 ? worldPosition.associatedVariableName + \".a\" : \"1.0\"\r\n });\\r\\n`;\r\n } else {\r\n // We have to write something on the position output or it will raise a gl error\r\n state.compilationString += ` fragData[PREPASS_POSITION_INDEX] = ${vec4}(0.0, 0.0, 0.0, 0.0);\\r\\n`;\r\n }\r\n state.compilationString += `#endif\\r\\n`;\r\n state.compilationString += `#ifdef PREPASS_LOCAL_POSITION\\r\\n`;\r\n if (localPosition.connectedPoint) {\r\n state.compilationString += ` fragData[PREPASS_LOCAL_POSITION_INDEX] = ${vec4}(${localPosition.associatedVariableName}.rgb, ${\r\n localPosition.connectedPoint.type === NodeMaterialBlockConnectionPointTypes.Vector4 ? localPosition.associatedVariableName + \".a\" : \"1.0\"\r\n });\\r\\n`;\r\n } else {\r\n // We have to write something on the position output or it will raise a gl error\r\n state.compilationString += ` fragData[PREPASS_LOCAL_POSITION_INDEX] = ${vec4}(0.0, 0.0, 0.0, 0.0);\\r\\n`;\r\n }\r\n state.compilationString += `#endif\\r\\n`;\r\n state.compilationString += `#ifdef PREPASS_NORMAL\\r\\n`;\r\n if (viewNormal.connectedPoint) {\r\n state.compilationString += ` fragData[PREPASS_NORMAL_INDEX] = ${vec4}(${viewNormal.associatedVariableName}.rgb, ${\r\n viewNormal.connectedPoint.type === NodeMaterialBlockConnectionPointTypes.Vector4 ? viewNormal.associatedVariableName + \".a\" : \"1.0\"\r\n });\\r\\n`;\r\n } else {\r\n // We have to write something on the normal output or it will raise a gl error\r\n state.compilationString += ` fragData[PREPASS_NORMAL_INDEX] = ${vec4}(0.0, 0.0, 0.0, 0.0);\\r\\n`;\r\n }\r\n state.compilationString += `#endif\\r\\n`;\r\n state.compilationString += `#ifdef PREPASS_WORLD_NORMAL\\r\\n`;\r\n if (worldNormal.connectedPoint) {\r\n state.compilationString += ` fragData[PREPASS_WORLD_NORMAL_INDEX] = ${vec4}(${worldNormal.associatedVariableName}.rgb, ${\r\n worldNormal.connectedPoint.type === NodeMaterialBlockConnectionPointTypes.Vector4 ? worldNormal.associatedVariableName + \".a\" : \"1.0\"\r\n });\\r\\n`;\r\n } else {\r\n // We have to write something on the normal output or it will raise a gl error\r\n state.compilationString += ` fragData[PREPASS_WORLD_NORMAL_INDEX] = ${vec4}(0.0, 0.0, 0.0, 0.0);\\r\\n`;\r\n }\r\n state.compilationString += `#endif\\r\\n`;\r\n state.compilationString += `#ifdef PREPASS_REFLECTIVITY\\r\\n`;\r\n if (reflectivity.connectedPoint) {\r\n state.compilationString += ` fragData[PREPASS_REFLECTIVITY_INDEX] = ${vec4}(${reflectivity.associatedVariableName}.rgb, ${\r\n reflectivity.connectedPoint.type === NodeMaterialBlockConnectionPointTypes.Vector4 ? reflectivity.associatedVariableName + \".a\" : \"1.0\"\r\n });\\r\\n`;\r\n } else {\r\n // We have to write something on the reflectivity output or it will raise a gl error\r\n state.compilationString += ` fragData[PREPASS_REFLECTIVITY_INDEX] = ${vec4}(0.0, 0.0, 0.0, 1.0);\\r\\n`;\r\n }\r\n state.compilationString += `#endif\\r\\n`;\r\n state.compilationString += `#ifdef PREPASS_VELOCITY\\r\\n`;\r\n if (velocity.connectedPoint) {\r\n state.compilationString += ` fragData[PREPASS_VELOCITY_INDEX] = ${vec4}(${velocity.associatedVariableName}.rgb, ${\r\n velocity.connectedPoint.type === NodeMaterialBlockConnectionPointTypes.Vector4 ? velocity.associatedVariableName + \".a\" : \"1.0\"\r\n });\\r\\n`;\r\n } else {\r\n // We have to write something on the reflectivity output or it will raise a gl error\r\n state.compilationString += ` fragData[PREPASS_VELOCITY_INDEX] = ${vec4}(0.0, 0.0, 0.0, 1.0);\\r\\n`;\r\n }\r\n state.compilationString += `#endif\\r\\n`;\r\n state.compilationString += `#ifdef PREPASS_VELOCITY_LINEAR\\r\\n`;\r\n if (velocityLinear.connectedPoint) {\r\n state.compilationString += ` fragData[PREPASS_VELOCITY_LINEAR_INDEX] = ${vec4}(${velocityLinear.associatedVariableName}.rgb, ${\r\n velocityLinear.connectedPoint.type === NodeMaterialBlockConnectionPointTypes.Vector4 ? velocityLinear.associatedVariableName + \".a\" : \"1.0\"\r\n });\\r\\n`;\r\n } else {\r\n // We have to write something on the reflectivity output or it will raise a gl error\r\n state.compilationString += ` fragData[PREPASS_VELOCITY_LINEAR_INDEX] = ${vec4}(0.0, 0.0, 0.0, 1.0);\\r\\n`;\r\n }\r\n state.compilationString += `#endif\\r\\n`;\r\n\r\n state.compilationString += `#if SCENE_MRT_COUNT > 1\\r\\n`;\r\n state.compilationString += `${this._getFragData(isWebGPU, 1)} = fragData[1];\\r\\n`;\r\n state.compilationString += `#endif\\r\\n`;\r\n state.compilationString += `#if SCENE_MRT_COUNT > 2\\r\\n`;\r\n state.compilationString += `${this._getFragData(isWebGPU, 2)} = fragData[2];\\r\\n`;\r\n state.compilationString += `#endif\\r\\n`;\r\n state.compilationString += `#if SCENE_MRT_COUNT > 3\\r\\n`;\r\n state.compilationString += `${this._getFragData(isWebGPU, 3)} = fragData[3];\\r\\n`;\r\n state.compilationString += `#endif\\r\\n`;\r\n state.compilationString += `#if SCENE_MRT_COUNT > 4\\r\\n`;\r\n state.compilationString += `${this._getFragData(isWebGPU, 4)} = fragData[4];\\r\\n`;\r\n state.compilationString += `#endif\\r\\n`;\r\n state.compilationString += `#if SCENE_MRT_COUNT > 5\\r\\n`;\r\n state.compilationString += `${this._getFragData(isWebGPU, 5)} = fragData[5];\\r\\n`;\r\n state.compilationString += `#endif\\r\\n`;\r\n state.compilationString += `#if SCENE_MRT_COUNT > 6\\r\\n`;\r\n state.compilationString += `${this._getFragData(isWebGPU, 6)} = fragData[6];\\r\\n`;\r\n state.compilationString += `#endif\\r\\n`;\r\n state.compilationString += `#if SCENE_MRT_COUNT > 7\\r\\n`;\r\n state.compilationString += `${this._getFragData(isWebGPU, 7)} = fragData[7];\\r\\n`;\r\n state.compilationString += `#endif\\r\\n`;\r\n\r\n state.compilationString += `#endif\\r\\n`;\r\n\r\n return this;\r\n }\r\n}\r\n\r\nlet _Registered = false;\r\n/**\r\n * Register side effects for prePassOutputBlock.\r\n * Safe to call multiple times; only the first call has an effect.\r\n */\r\nexport function RegisterPrePassOutputBlock(): void {\r\n if (_Registered) {\r\n return;\r\n }\r\n _Registered = true;\r\n\r\n RegisterClass(\"BABYLON.PrePassOutputBlock\", PrePassOutputBlock);\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"prePassOutputBlock.pure.js","sourceRoot":"","sources":["../../../../../../../dev/core/src/Materials/Node/Blocks/Fragment/prePassOutputBlock.pure.ts"],"names":[],"mappings":"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","sourcesContent":["/** This file must only contain pure code and pure imports */\r\n\r\nimport { NodeMaterialBlock } from \"../../nodeMaterialBlock\";\r\nimport { NodeMaterialBlockConnectionPointTypes } from \"../../Enums/nodeMaterialBlockConnectionPointTypes\";\r\nimport { type NodeMaterialBuildState } from \"../../nodeMaterialBuildState\";\r\nimport { NodeMaterialBlockTargets } from \"../../Enums/nodeMaterialBlockTargets\";\r\nimport { type NodeMaterialConnectionPoint } from \"../../nodeMaterialBlockConnectionPoint\";\r\nimport { ShaderLanguage } from \"core/Materials/shaderLanguage\";\r\nimport { RegisterClass } from \"../../../../Misc/typeStore\";\r\n\r\n/**\r\n * Block used to output values on the prepass textures\r\n * @see https://playground.babylonjs.com/#WW65SN#9\r\n */\r\nexport class PrePassOutputBlock extends NodeMaterialBlock {\r\n /**\r\n * Create a new PrePassOutputBlock\r\n * @param name defines the block name\r\n */\r\n public constructor(name: string) {\r\n super(name, NodeMaterialBlockTargets.Fragment, true);\r\n\r\n this.registerInput(\"viewDepth\", NodeMaterialBlockConnectionPointTypes.Float, true);\r\n this.registerInput(\"screenDepth\", NodeMaterialBlockConnectionPointTypes.Float, true);\r\n this.registerInput(\"worldPosition\", NodeMaterialBlockConnectionPointTypes.AutoDetect, true);\r\n this.registerInput(\"localPosition\", NodeMaterialBlockConnectionPointTypes.AutoDetect, true);\r\n this.registerInput(\"viewNormal\", NodeMaterialBlockConnectionPointTypes.AutoDetect, true);\r\n this.registerInput(\"worldNormal\", NodeMaterialBlockConnectionPointTypes.AutoDetect, true);\r\n this.registerInput(\"reflectivity\", NodeMaterialBlockConnectionPointTypes.AutoDetect, true);\r\n this.registerInput(\"velocity\", NodeMaterialBlockConnectionPointTypes.AutoDetect, true);\r\n this.registerInput(\"velocityLinear\", NodeMaterialBlockConnectionPointTypes.AutoDetect, true);\r\n\r\n this.inputs[2].addExcludedConnectionPointFromAllowedTypes(NodeMaterialBlockConnectionPointTypes.Vector3 | NodeMaterialBlockConnectionPointTypes.Vector4);\r\n this.inputs[3].addExcludedConnectionPointFromAllowedTypes(NodeMaterialBlockConnectionPointTypes.Vector3 | NodeMaterialBlockConnectionPointTypes.Vector4);\r\n this.inputs[4].addExcludedConnectionPointFromAllowedTypes(NodeMaterialBlockConnectionPointTypes.Vector3 | NodeMaterialBlockConnectionPointTypes.Vector4);\r\n this.inputs[5].addExcludedConnectionPointFromAllowedTypes(NodeMaterialBlockConnectionPointTypes.Vector3 | NodeMaterialBlockConnectionPointTypes.Vector4);\r\n this.inputs[6].addExcludedConnectionPointFromAllowedTypes(\r\n NodeMaterialBlockConnectionPointTypes.Vector3 |\r\n NodeMaterialBlockConnectionPointTypes.Vector4 |\r\n NodeMaterialBlockConnectionPointTypes.Color3 |\r\n NodeMaterialBlockConnectionPointTypes.Color4\r\n );\r\n this.inputs[7].addExcludedConnectionPointFromAllowedTypes(NodeMaterialBlockConnectionPointTypes.Vector3 | NodeMaterialBlockConnectionPointTypes.Vector4);\r\n this.inputs[8].addExcludedConnectionPointFromAllowedTypes(NodeMaterialBlockConnectionPointTypes.Vector3 | NodeMaterialBlockConnectionPointTypes.Vector4);\r\n }\r\n\r\n /**\r\n * Initialize the block and prepare the context for build\r\n * @param state defines the state that will be used for the build\r\n */\r\n public override initialize(state: NodeMaterialBuildState) {\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n this._initShaderSourceAsync(state.shaderLanguage);\r\n }\r\n\r\n private async _initShaderSourceAsync(shaderLanguage: ShaderLanguage) {\r\n this._codeIsReady = false;\r\n\r\n if (shaderLanguage === ShaderLanguage.WGSL) {\r\n await import(\"../../../../ShadersWGSL/ShadersInclude/helperFunctions\");\r\n } else {\r\n await import(\"../../../../Shaders/ShadersInclude/helperFunctions\");\r\n }\r\n\r\n this._codeIsReady = true;\r\n this.onCodeIsReadyObservable.notifyObservers(this);\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 \"PrePassOutputBlock\";\r\n }\r\n\r\n /**\r\n * Gets the view depth component\r\n */\r\n public get viewDepth(): NodeMaterialConnectionPoint {\r\n return this._inputs[0];\r\n }\r\n\r\n /**\r\n * Gets the screen depth component\r\n */\r\n public get screenDepth(): NodeMaterialConnectionPoint {\r\n return this._inputs[1];\r\n }\r\n\r\n /**\r\n * Gets the world position component\r\n */\r\n public get worldPosition(): NodeMaterialConnectionPoint {\r\n return this._inputs[2];\r\n }\r\n\r\n /**\r\n * Gets the position in local space component\r\n */\r\n public get localPosition(): NodeMaterialConnectionPoint {\r\n return this._inputs[3];\r\n }\r\n\r\n /**\r\n * Gets the view normal component\r\n */\r\n public get viewNormal(): NodeMaterialConnectionPoint {\r\n return this._inputs[4];\r\n }\r\n\r\n /**\r\n * Gets the world normal component\r\n */\r\n public get worldNormal(): NodeMaterialConnectionPoint {\r\n return this._inputs[5];\r\n }\r\n\r\n /**\r\n * Gets the reflectivity component\r\n */\r\n public get reflectivity(): NodeMaterialConnectionPoint {\r\n return this._inputs[6];\r\n }\r\n\r\n /**\r\n * Gets the velocity component\r\n */\r\n public get velocity(): NodeMaterialConnectionPoint {\r\n return this._inputs[7];\r\n }\r\n\r\n /**\r\n * Gets the linear velocity component\r\n */\r\n public get velocityLinear(): NodeMaterialConnectionPoint {\r\n return this._inputs[8];\r\n }\r\n\r\n private _getFragData(isWebGPU: boolean, index: number) {\r\n return isWebGPU ? `fragmentOutputs.fragData${index}` : `gl_FragData[${index}]`;\r\n }\r\n\r\n protected override _buildBlock(state: NodeMaterialBuildState) {\r\n super._buildBlock(state);\r\n\r\n const worldPosition = this.worldPosition;\r\n const localPosition = this.localPosition;\r\n const viewNormal = this.viewNormal;\r\n const worldNormal = this.worldNormal;\r\n const viewDepth = this.viewDepth;\r\n const reflectivity = this.reflectivity;\r\n const screenDepth = this.screenDepth;\r\n const velocity = this.velocity;\r\n const velocityLinear = this.velocityLinear;\r\n\r\n state.sharedData.blocksWithDefines.push(this);\r\n\r\n const comments = `//${this.name}`;\r\n const vec4 = state._getShaderType(NodeMaterialBlockConnectionPointTypes.Vector4);\r\n const isWebGPU = state.shaderLanguage === ShaderLanguage.WGSL;\r\n state._emitFunctionFromInclude(\"helperFunctions\", comments);\r\n\r\n state.compilationString += `#if defined(PREPASS)\\r\\n`;\r\n state.compilationString += isWebGPU ? `var fragData: array<vec4<f32>, SCENE_MRT_COUNT>;\\r\\n` : `vec4 fragData[SCENE_MRT_COUNT];\\r\\n`;\r\n\r\n state.compilationString += `#ifdef PREPASS_DEPTH\\r\\n`;\r\n if (viewDepth.connectedPoint) {\r\n state.compilationString += ` fragData[PREPASS_DEPTH_INDEX] = ${vec4}(${viewDepth.associatedVariableName}, 0.0, 0.0, 1.0);\\r\\n`;\r\n } else {\r\n // We have to write something on the viewDepth output or it will raise a gl error\r\n state.compilationString += ` fragData[PREPASS_DEPTH_INDEX] = ${vec4}(0.0, 0.0, 0.0, 0.0);\\r\\n`;\r\n }\r\n state.compilationString += `#endif\\r\\n`;\r\n state.compilationString += `#ifdef PREPASS_SCREENSPACE_DEPTH\\r\\n`;\r\n if (screenDepth.connectedPoint) {\r\n state.compilationString += ` fragData[PREPASS_SCREENSPACE_DEPTH_INDEX] = ${vec4}(${screenDepth.associatedVariableName}, 0.0, 0.0, 1.0);\\r\\n`;\r\n } else {\r\n // We have to write something on the viewDepth output or it will raise a gl error\r\n state.compilationString += ` fragData[PREPASS_SCREENSPACE_DEPTH_INDEX] = ${vec4}(0.0, 0.0, 0.0, 0.0);\\r\\n`;\r\n }\r\n state.compilationString += `#endif\\r\\n`;\r\n state.compilationString += `#ifdef PREPASS_POSITION\\r\\n`;\r\n if (worldPosition.connectedPoint) {\r\n state.compilationString += `fragData[PREPASS_POSITION_INDEX] = ${vec4}(${worldPosition.associatedVariableName}.rgb, ${\r\n worldPosition.connectedPoint.type === NodeMaterialBlockConnectionPointTypes.Vector4 ? worldPosition.associatedVariableName + \".a\" : \"1.0\"\r\n });\\r\\n`;\r\n } else {\r\n // We have to write something on the position output or it will raise a gl error\r\n state.compilationString += ` fragData[PREPASS_POSITION_INDEX] = ${vec4}(0.0, 0.0, 0.0, 0.0);\\r\\n`;\r\n }\r\n state.compilationString += `#endif\\r\\n`;\r\n state.compilationString += `#ifdef PREPASS_LOCAL_POSITION\\r\\n`;\r\n if (localPosition.connectedPoint) {\r\n state.compilationString += ` fragData[PREPASS_LOCAL_POSITION_INDEX] = ${vec4}(${localPosition.associatedVariableName}.rgb, ${\r\n localPosition.connectedPoint.type === NodeMaterialBlockConnectionPointTypes.Vector4 ? localPosition.associatedVariableName + \".a\" : \"1.0\"\r\n });\\r\\n`;\r\n } else {\r\n // We have to write something on the position output or it will raise a gl error\r\n state.compilationString += ` fragData[PREPASS_LOCAL_POSITION_INDEX] = ${vec4}(0.0, 0.0, 0.0, 0.0);\\r\\n`;\r\n }\r\n state.compilationString += `#endif\\r\\n`;\r\n state.compilationString += `#ifdef PREPASS_NORMAL\\r\\n`;\r\n if (viewNormal.connectedPoint) {\r\n state.compilationString += ` fragData[PREPASS_NORMAL_INDEX] = ${vec4}(${viewNormal.associatedVariableName}.rgb, ${\r\n viewNormal.connectedPoint.type === NodeMaterialBlockConnectionPointTypes.Vector4 ? viewNormal.associatedVariableName + \".a\" : \"1.0\"\r\n });\\r\\n`;\r\n } else {\r\n // We have to write something on the normal output or it will raise a gl error\r\n state.compilationString += ` fragData[PREPASS_NORMAL_INDEX] = ${vec4}(0.0, 0.0, 0.0, 0.0);\\r\\n`;\r\n }\r\n state.compilationString += `#endif\\r\\n`;\r\n state.compilationString += `#ifdef PREPASS_WORLD_NORMAL\\r\\n`;\r\n if (worldNormal.connectedPoint) {\r\n state.compilationString += ` fragData[PREPASS_WORLD_NORMAL_INDEX] = ${vec4}(${worldNormal.associatedVariableName}.rgb, ${\r\n worldNormal.connectedPoint.type === NodeMaterialBlockConnectionPointTypes.Vector4 ? worldNormal.associatedVariableName + \".a\" : \"1.0\"\r\n });\\r\\n`;\r\n } else {\r\n // We have to write something on the normal output or it will raise a gl error\r\n state.compilationString += ` fragData[PREPASS_WORLD_NORMAL_INDEX] = ${vec4}(0.0, 0.0, 0.0, 0.0);\\r\\n`;\r\n }\r\n state.compilationString += `#endif\\r\\n`;\r\n state.compilationString += `#ifdef PREPASS_REFLECTIVITY\\r\\n`;\r\n if (reflectivity.connectedPoint) {\r\n state.compilationString += ` fragData[PREPASS_REFLECTIVITY_INDEX] = ${vec4}(${reflectivity.associatedVariableName}.rgb, ${\r\n reflectivity.connectedPoint.type === NodeMaterialBlockConnectionPointTypes.Vector4 ? reflectivity.associatedVariableName + \".a\" : \"1.0\"\r\n });\\r\\n`;\r\n } else {\r\n // We have to write something on the reflectivity output or it will raise a gl error\r\n state.compilationString += ` fragData[PREPASS_REFLECTIVITY_INDEX] = ${vec4}(0.0, 0.0, 0.0, 1.0);\\r\\n`;\r\n }\r\n state.compilationString += `#endif\\r\\n`;\r\n state.compilationString += `#ifdef PREPASS_VELOCITY\\r\\n`;\r\n if (velocity.connectedPoint) {\r\n state.compilationString += ` fragData[PREPASS_VELOCITY_INDEX] = ${vec4}(${velocity.associatedVariableName}.rgb, ${\r\n velocity.connectedPoint.type === NodeMaterialBlockConnectionPointTypes.Vector4 ? velocity.associatedVariableName + \".a\" : \"1.0\"\r\n });\\r\\n`;\r\n } else {\r\n // We have to write something on the reflectivity output or it will raise a gl error\r\n state.compilationString += ` fragData[PREPASS_VELOCITY_INDEX] = ${vec4}(0.0, 0.0, 0.0, 1.0);\\r\\n`;\r\n }\r\n state.compilationString += `#endif\\r\\n`;\r\n state.compilationString += `#ifdef PREPASS_VELOCITY_LINEAR\\r\\n`;\r\n if (velocityLinear.connectedPoint) {\r\n state.compilationString += ` fragData[PREPASS_VELOCITY_LINEAR_INDEX] = ${vec4}(${velocityLinear.associatedVariableName}.rgb, ${\r\n velocityLinear.connectedPoint.type === NodeMaterialBlockConnectionPointTypes.Vector4 ? velocityLinear.associatedVariableName + \".a\" : \"1.0\"\r\n });\\r\\n`;\r\n } else {\r\n // We have to write something on the reflectivity output or it will raise a gl error\r\n state.compilationString += ` fragData[PREPASS_VELOCITY_LINEAR_INDEX] = ${vec4}(0.0, 0.0, 0.0, 1.0);\\r\\n`;\r\n }\r\n state.compilationString += `#endif\\r\\n`;\r\n\r\n for (let index = 0; index < 8; index++) {\r\n state.compilationString += `#if SCENE_MRT_COUNT > ${index} && (!defined(PREPASS_COLOR) || PREPASS_COLOR_INDEX != ${index}) && (!defined(PREPASS_OBJECT_ID) || PREPASS_OBJECT_ID_INDEX != ${index})\\r\\n`;\r\n state.compilationString += `${this._getFragData(isWebGPU, index)} = fragData[${index}];\\r\\n`;\r\n state.compilationString += `#endif\\r\\n`;\r\n }\r\n\r\n state.compilationString += `#endif\\r\\n`;\r\n\r\n return this;\r\n }\r\n}\r\n\r\nlet _Registered = false;\r\n/**\r\n * Register side effects for prePassOutputBlock.\r\n * Safe to call multiple times; only the first call has an effect.\r\n */\r\nexport function RegisterPrePassOutputBlock(): void {\r\n if (_Registered) {\r\n return;\r\n }\r\n _Registered = true;\r\n\r\n RegisterClass(\"BABYLON.PrePassOutputBlock\", PrePassOutputBlock);\r\n}\r\n"]}
|
|
@@ -92,6 +92,10 @@ export declare class NodeMaterialDefines extends NodeMaterialDefines_base {
|
|
|
92
92
|
VERTEXCOLOR_NME: boolean;
|
|
93
93
|
/** Prepass **/
|
|
94
94
|
PREPASS: boolean;
|
|
95
|
+
/** Prepass color */
|
|
96
|
+
PREPASS_COLOR: boolean;
|
|
97
|
+
/** Prepass color index */
|
|
98
|
+
PREPASS_COLOR_INDEX: number;
|
|
95
99
|
/** Prepass normal */
|
|
96
100
|
PREPASS_NORMAL: boolean;
|
|
97
101
|
/** Prepass normal index */
|
|
@@ -128,6 +132,12 @@ export declare class NodeMaterialDefines extends NodeMaterialDefines_base {
|
|
|
128
132
|
PREPASS_VELOCITY_LINEAR: boolean;
|
|
129
133
|
/** Velocity linear index */
|
|
130
134
|
PREPASS_VELOCITY_LINEAR_INDEX: number;
|
|
135
|
+
/** Object ID */
|
|
136
|
+
PREPASS_OBJECT_ID: boolean;
|
|
137
|
+
/** Object ID index */
|
|
138
|
+
PREPASS_OBJECT_ID_INDEX: number;
|
|
139
|
+
/** Whether object IDs use the RED texture format */
|
|
140
|
+
PREPASS_OBJECT_ID_R8: boolean;
|
|
131
141
|
/** Scene MRT count */
|
|
132
142
|
SCENE_MRT_COUNT: number;
|
|
133
143
|
/** BONES */
|
|
@@ -67,6 +67,10 @@ export class NodeMaterialDefines extends ImageProcessingDefinesMixin(NodeMateria
|
|
|
67
67
|
this.VERTEXCOLOR_NME = false;
|
|
68
68
|
/** Prepass **/
|
|
69
69
|
this.PREPASS = false;
|
|
70
|
+
/** Prepass color */
|
|
71
|
+
this.PREPASS_COLOR = false;
|
|
72
|
+
/** Prepass color index */
|
|
73
|
+
this.PREPASS_COLOR_INDEX = -1;
|
|
70
74
|
/** Prepass normal */
|
|
71
75
|
this.PREPASS_NORMAL = false;
|
|
72
76
|
/** Prepass normal index */
|
|
@@ -103,6 +107,12 @@ export class NodeMaterialDefines extends ImageProcessingDefinesMixin(NodeMateria
|
|
|
103
107
|
this.PREPASS_VELOCITY_LINEAR = false;
|
|
104
108
|
/** Velocity linear index */
|
|
105
109
|
this.PREPASS_VELOCITY_LINEAR_INDEX = -1;
|
|
110
|
+
/** Object ID */
|
|
111
|
+
this.PREPASS_OBJECT_ID = false;
|
|
112
|
+
/** Object ID index */
|
|
113
|
+
this.PREPASS_OBJECT_ID_INDEX = -1;
|
|
114
|
+
/** Whether object IDs use the RED texture format */
|
|
115
|
+
this.PREPASS_OBJECT_ID_R8 = false;
|
|
106
116
|
/** Scene MRT count */
|
|
107
117
|
this.SCENE_MRT_COUNT = 0;
|
|
108
118
|
/** BONES */
|
|
@@ -1407,6 +1417,7 @@ let NodeMaterial = (() => {
|
|
|
1407
1417
|
this._activeEffect = effect;
|
|
1408
1418
|
// Matrices
|
|
1409
1419
|
this.bindOnlyWorldMatrix(world);
|
|
1420
|
+
MaterialHelperGeometryRendering.Bind(scene.getEngine().currentRenderPassId, effect, mesh, world, this);
|
|
1410
1421
|
const mustRebind = this._mustRebind(scene, effect, subMesh, mesh.visibility);
|
|
1411
1422
|
const sharedData = this._sharedData;
|
|
1412
1423
|
if (mustRebind) {
|