@babylonjs/core 7.32.5 → 7.34.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (136) hide show
  1. package/Cameras/arcRotateCamera.d.ts +14 -0
  2. package/Cameras/arcRotateCamera.js +39 -19
  3. package/Cameras/arcRotateCamera.js.map +1 -1
  4. package/Decorators/nodeDecorator.d.ts +2 -0
  5. package/Decorators/nodeDecorator.js +1 -0
  6. package/Decorators/nodeDecorator.js.map +1 -1
  7. package/Engines/abstractEngine.js +2 -2
  8. package/Engines/abstractEngine.js.map +1 -1
  9. package/FrameGraph/Node/Blocks/Rendering/baseObjectRendererBlock.d.ts +63 -0
  10. package/FrameGraph/Node/Blocks/Rendering/baseObjectRendererBlock.js +150 -0
  11. package/FrameGraph/Node/Blocks/Rendering/baseObjectRendererBlock.js.map +1 -0
  12. package/FrameGraph/Node/Blocks/Rendering/objectRendererBlock.d.ts +3 -47
  13. package/FrameGraph/Node/Blocks/Rendering/objectRendererBlock.js +2 -129
  14. package/FrameGraph/Node/Blocks/Rendering/objectRendererBlock.js.map +1 -1
  15. package/FrameGraph/Node/Blocks/Rendering/taaObjectRendererBlock.d.ts +40 -0
  16. package/FrameGraph/Node/Blocks/Rendering/taaObjectRendererBlock.js +98 -0
  17. package/FrameGraph/Node/Blocks/Rendering/taaObjectRendererBlock.js.map +1 -0
  18. package/FrameGraph/Node/Blocks/Textures/clearBlock.js +3 -3
  19. package/FrameGraph/Node/Blocks/Textures/clearBlock.js.map +1 -1
  20. package/FrameGraph/Node/Blocks/index.d.ts +3 -2
  21. package/FrameGraph/Node/Blocks/index.js +3 -2
  22. package/FrameGraph/Node/Blocks/index.js.map +1 -1
  23. package/FrameGraph/Node/nodeRenderGraph.js.map +1 -1
  24. package/FrameGraph/Passes/renderPass.js +1 -1
  25. package/FrameGraph/Passes/renderPass.js.map +1 -1
  26. package/FrameGraph/Tasks/Rendering/taaObjectRendererTask.d.ts +21 -0
  27. package/FrameGraph/Tasks/Rendering/taaObjectRendererTask.js +110 -0
  28. package/FrameGraph/Tasks/Rendering/taaObjectRendererTask.js.map +1 -0
  29. package/FrameGraph/frameGraph.d.ts +6 -0
  30. package/FrameGraph/frameGraph.js +15 -1
  31. package/FrameGraph/frameGraph.js.map +1 -1
  32. package/FrameGraph/frameGraphRenderContext.d.ts +3 -2
  33. package/FrameGraph/frameGraphRenderContext.js +9 -4
  34. package/FrameGraph/frameGraphRenderContext.js.map +1 -1
  35. package/FrameGraph/frameGraphTask.js +5 -1
  36. package/FrameGraph/frameGraphTask.js.map +1 -1
  37. package/FrameGraph/frameGraphTextureManager.d.ts +8 -0
  38. package/FrameGraph/frameGraphTextureManager.js +51 -7
  39. package/FrameGraph/frameGraphTextureManager.js.map +1 -1
  40. package/FrameGraph/frameGraphTypes.d.ts +2 -0
  41. package/FrameGraph/frameGraphTypes.js.map +1 -1
  42. package/FrameGraph/index.d.ts +3 -2
  43. package/FrameGraph/index.js +3 -2
  44. package/FrameGraph/index.js.map +1 -1
  45. package/Layers/layer.d.ts +4 -0
  46. package/Layers/layer.js +13 -2
  47. package/Layers/layer.js.map +1 -1
  48. package/Loading/sceneLoader.d.ts +11 -8
  49. package/Loading/sceneLoader.js +64 -35
  50. package/Loading/sceneLoader.js.map +1 -1
  51. package/Materials/GaussianSplatting/gaussianSplattingMaterial.d.ts +2 -0
  52. package/Materials/GaussianSplatting/gaussianSplattingMaterial.js +12 -0
  53. package/Materials/GaussianSplatting/gaussianSplattingMaterial.js.map +1 -1
  54. package/Materials/Node/Blocks/Fragment/fragmentOutputBlock.d.ts +16 -0
  55. package/Materials/Node/Blocks/Fragment/fragmentOutputBlock.js +40 -7
  56. package/Materials/Node/Blocks/Fragment/fragmentOutputBlock.js.map +1 -1
  57. package/Materials/Node/Blocks/GaussianSplatting/gaussianBlock.js +6 -1
  58. package/Materials/Node/Blocks/GaussianSplatting/gaussianBlock.js.map +1 -1
  59. package/Materials/Node/Blocks/GaussianSplatting/gaussianSplattingBlock.js +9 -2
  60. package/Materials/Node/Blocks/GaussianSplatting/gaussianSplattingBlock.js.map +1 -1
  61. package/Materials/Node/Blocks/GaussianSplatting/index.d.ts +2 -0
  62. package/Materials/Node/Blocks/GaussianSplatting/index.js +3 -0
  63. package/Materials/Node/Blocks/GaussianSplatting/index.js.map +1 -1
  64. package/Materials/Node/Blocks/GaussianSplatting/splatReaderBlock.js +10 -3
  65. package/Materials/Node/Blocks/GaussianSplatting/splatReaderBlock.js.map +1 -1
  66. package/Materials/Node/nodeMaterial.d.ts +1 -1
  67. package/Materials/Node/nodeMaterial.js +1 -1
  68. package/Materials/Node/nodeMaterial.js.map +1 -1
  69. package/Materials/effectRenderer.d.ts +1 -1
  70. package/Materials/effectRenderer.js +2 -2
  71. package/Materials/effectRenderer.js.map +1 -1
  72. package/Meshes/GaussianSplatting/gaussianSplattingMesh.d.ts +2 -0
  73. package/Meshes/GaussianSplatting/gaussianSplattingMesh.js +7 -2
  74. package/Meshes/GaussianSplatting/gaussianSplattingMesh.js.map +1 -1
  75. package/Meshes/Node/nodeGeometry.js.map +1 -1
  76. package/Meshes/abstractMesh.hotSpot.js +2 -0
  77. package/Meshes/abstractMesh.hotSpot.js.map +1 -1
  78. package/Meshes/csg2.js +0 -3
  79. package/Meshes/csg2.js.map +1 -1
  80. package/Misc/webRequest.fetch.d.ts +16 -0
  81. package/Misc/webRequest.fetch.js +33 -0
  82. package/Misc/webRequest.fetch.js.map +1 -0
  83. package/PostProcesses/RenderPipeline/Pipelines/index.d.ts +2 -0
  84. package/PostProcesses/RenderPipeline/Pipelines/index.js +2 -0
  85. package/PostProcesses/RenderPipeline/Pipelines/index.js.map +1 -1
  86. package/PostProcesses/RenderPipeline/Pipelines/taaRenderingPipeline.d.ts +6 -8
  87. package/PostProcesses/RenderPipeline/Pipelines/taaRenderingPipeline.js +32 -49
  88. package/PostProcesses/RenderPipeline/Pipelines/taaRenderingPipeline.js.map +1 -1
  89. package/PostProcesses/thinTAAPostProcess.d.ts +72 -0
  90. package/PostProcesses/thinTAAPostProcess.js +149 -0
  91. package/PostProcesses/thinTAAPostProcess.js.map +1 -0
  92. package/PostProcesses/volumetricLightScatteringPostProcess.js.map +1 -1
  93. package/Rendering/IBLShadows/iblShadowsAccumulationPass.d.ts +3 -3
  94. package/Rendering/IBLShadows/iblShadowsAccumulationPass.js +7 -7
  95. package/Rendering/IBLShadows/iblShadowsAccumulationPass.js.map +1 -1
  96. package/Rendering/IBLShadows/iblShadowsRenderPipeline.d.ts +81 -80
  97. package/Rendering/IBLShadows/iblShadowsRenderPipeline.js +102 -112
  98. package/Rendering/IBLShadows/iblShadowsRenderPipeline.js.map +1 -1
  99. package/Rendering/geometryBufferRenderer.js +8 -6
  100. package/Rendering/geometryBufferRenderer.js.map +1 -1
  101. package/Shaders/geometry.vertex.js +1 -1
  102. package/Shaders/geometry.vertex.js.map +1 -1
  103. package/Shaders/iblShadowAccumulation.fragment.js +2 -1
  104. package/Shaders/iblShadowAccumulation.fragment.js.map +1 -1
  105. package/Shaders/layer.fragment.js +3 -1
  106. package/Shaders/layer.fragment.js.map +1 -1
  107. package/Shaders/volumetricLightScattering.fragment.js +1 -1
  108. package/Shaders/volumetricLightScattering.fragment.js.map +1 -1
  109. package/ShadersWGSL/ShadersInclude/gaussianSplatting.d.ts +5 -0
  110. package/ShadersWGSL/ShadersInclude/gaussianSplatting.js +47 -0
  111. package/ShadersWGSL/ShadersInclude/gaussianSplatting.js.map +1 -0
  112. package/ShadersWGSL/ShadersInclude/gaussianSplattingFragmentDeclaration.d.ts +7 -0
  113. package/ShadersWGSL/ShadersInclude/gaussianSplattingFragmentDeclaration.js +20 -0
  114. package/ShadersWGSL/ShadersInclude/gaussianSplattingFragmentDeclaration.js.map +1 -0
  115. package/ShadersWGSL/ShadersInclude/gaussianSplattingUboDeclaration.d.ts +7 -0
  116. package/ShadersWGSL/ShadersInclude/gaussianSplattingUboDeclaration.js +13 -0
  117. package/ShadersWGSL/ShadersInclude/gaussianSplattingUboDeclaration.js.map +1 -0
  118. package/ShadersWGSL/ShadersInclude/gaussianSplattingVertexDeclaration.d.ts +5 -0
  119. package/ShadersWGSL/ShadersInclude/gaussianSplattingVertexDeclaration.js +10 -0
  120. package/ShadersWGSL/ShadersInclude/gaussianSplattingVertexDeclaration.js.map +1 -0
  121. package/ShadersWGSL/gaussianSplatting.fragment.d.ts +10 -0
  122. package/ShadersWGSL/gaussianSplatting.fragment.js +23 -0
  123. package/ShadersWGSL/gaussianSplatting.fragment.js.map +1 -0
  124. package/ShadersWGSL/gaussianSplatting.vertex.d.ts +14 -0
  125. package/ShadersWGSL/gaussianSplatting.vertex.js +31 -0
  126. package/ShadersWGSL/gaussianSplatting.vertex.js.map +1 -0
  127. package/ShadersWGSL/geometry.vertex.js +1 -1
  128. package/ShadersWGSL/geometry.vertex.js.map +1 -1
  129. package/ShadersWGSL/iblShadowAccumulation.fragment.js +2 -1
  130. package/ShadersWGSL/iblShadowAccumulation.fragment.js.map +1 -1
  131. package/ShadersWGSL/layer.fragment.js +4 -2
  132. package/ShadersWGSL/layer.fragment.js.map +1 -1
  133. package/ShadersWGSL/taa.fragment.d.ts +5 -0
  134. package/ShadersWGSL/taa.fragment.js +11 -0
  135. package/ShadersWGSL/taa.fragment.js.map +1 -0
  136. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"geometryBufferRenderer.js","sourceRoot":"","sources":["../../../../dev/core/src/Rendering/geometryBufferRenderer.ts"],"names":[],"mappings":"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","sourcesContent":["import { Matrix } from \"../Maths/math.vector\";\r\nimport { VertexBuffer } from \"../Buffers/buffer\";\r\nimport type { SubMesh } from \"../Meshes/subMesh\";\r\nimport type { Mesh } from \"../Meshes/mesh\";\r\nimport { Constants } from \"../Engines/constants\";\r\nimport type { SmartArray } from \"../Misc/smartArray\";\r\nimport { Texture } from \"../Materials/Textures/texture\";\r\nimport type { InternalTexture } from \"../Materials/Textures/internalTexture\";\r\nimport { MultiRenderTarget } from \"../Materials/Textures/multiRenderTarget\";\r\nimport type { PrePassRenderer } from \"../Rendering/prePassRenderer\";\r\nimport type { Scene } from \"../scene\";\r\nimport type { AbstractMesh } from \"../Meshes/abstractMesh\";\r\nimport { Color4 } from \"../Maths/math.color\";\r\nimport { _WarnImport } from \"../Misc/devTools\";\r\nimport type { Observer } from \"../Misc/observable\";\r\nimport type { AbstractEngine } from \"../Engines/abstractEngine\";\r\nimport type { Nullable } from \"../types\";\r\nimport { Material } from \"../Materials/material\";\r\n\r\nimport \"../Shaders/geometry.fragment\";\r\nimport \"../Shaders/geometry.vertex\";\r\nimport { MaterialFlags } from \"../Materials/materialFlags\";\r\nimport { addClipPlaneUniforms, bindClipPlane, prepareStringDefinesForClipPlanes } from \"../Materials/clipPlaneMaterialHelper\";\r\nimport { BindMorphTargetParameters, BindSceneUniformBuffer, PrepareAttributesForMorphTargetsInfluencers, PushAttributesForInstances } from \"../Materials/materialHelper.functions\";\r\n\r\nimport \"../Engines/Extensions/engine.multiRender\";\r\nimport { ShaderLanguage } from \"core/Materials/shaderLanguage\";\r\n\r\n/** @internal */\r\ninterface ISavedTransformationMatrix {\r\n world: Matrix;\r\n viewProjection: Matrix;\r\n}\r\n\r\n/** list the uniforms used by the geometry renderer */\r\nconst uniforms = [\r\n \"world\",\r\n \"mBones\",\r\n \"viewProjection\",\r\n \"diffuseMatrix\",\r\n \"view\",\r\n \"previousWorld\",\r\n \"previousViewProjection\",\r\n \"mPreviousBones\",\r\n \"bumpMatrix\",\r\n \"reflectivityMatrix\",\r\n \"albedoMatrix\",\r\n \"reflectivityColor\",\r\n \"albedoColor\",\r\n \"metallic\",\r\n \"glossiness\",\r\n \"vTangentSpaceParams\",\r\n \"vBumpInfos\",\r\n \"morphTargetInfluences\",\r\n \"morphTargetCount\",\r\n \"morphTargetTextureInfo\",\r\n \"morphTargetTextureIndices\",\r\n \"boneTextureWidth\",\r\n];\r\naddClipPlaneUniforms(uniforms);\r\n\r\n/**\r\n * This renderer is helpful to fill one of the render target with a geometry buffer.\r\n */\r\nexport class GeometryBufferRenderer {\r\n /**\r\n * Force all the standard materials to compile to glsl even on WebGPU engines.\r\n * False by default. This is mostly meant for backward compatibility.\r\n */\r\n public static ForceGLSL = false;\r\n /**\r\n * Constant used to retrieve the depth texture index in the G-Buffer textures array\r\n * using getIndex(GeometryBufferRenderer.DEPTH_TEXTURE_INDEX)\r\n */\r\n public static readonly DEPTH_TEXTURE_TYPE = 0;\r\n /**\r\n * Constant used to retrieve the normal texture index in the G-Buffer textures array\r\n * using getIndex(GeometryBufferRenderer.NORMAL_TEXTURE_INDEX)\r\n */\r\n public static readonly NORMAL_TEXTURE_TYPE = 1;\r\n /**\r\n * Constant used to retrieve the position texture index in the G-Buffer textures array\r\n * using getIndex(GeometryBufferRenderer.POSITION_TEXTURE_INDEX)\r\n */\r\n public static readonly POSITION_TEXTURE_TYPE = 2;\r\n /**\r\n * Constant used to retrieve the velocity texture index in the G-Buffer textures array\r\n * using getIndex(GeometryBufferRenderer.VELOCITY_TEXTURE_INDEX)\r\n */\r\n public static readonly VELOCITY_TEXTURE_TYPE = 3;\r\n /**\r\n * Constant used to retrieve the reflectivity texture index in the G-Buffer textures array\r\n * using the getIndex(GeometryBufferRenderer.REFLECTIVITY_TEXTURE_TYPE)\r\n */\r\n public static readonly REFLECTIVITY_TEXTURE_TYPE = 4;\r\n\r\n /**\r\n * Constant used to retrieve the screen-space depth texture index in the G-Buffer textures array\r\n * using getIndex(GeometryBufferRenderer.SCREENSPACE_DEPTH_TEXTURE_TYPE)\r\n */\r\n public static readonly SCREENSPACE_DEPTH_TEXTURE_TYPE = 5;\r\n\r\n /**\r\n * Constant used to retrieve the linear velocity texture index in the G-Buffer textures array\r\n * using getIndex(GeometryBufferRenderer.VELOCITY_LINEAR_TEXTURE_TYPE)\r\n */\r\n public static readonly VELOCITY_LINEAR_TEXTURE_TYPE = 6;\r\n\r\n /**\r\n * Dictionary used to store the previous transformation matrices of each rendered mesh\r\n * in order to compute objects velocities when enableVelocity is set to \"true\"\r\n * @internal\r\n */\r\n public _previousTransformationMatrices: { [index: number]: ISavedTransformationMatrix } = {};\r\n /**\r\n * Dictionary used to store the previous bones transformation matrices of each rendered mesh\r\n * in order to compute objects velocities when enableVelocity is set to \"true\"\r\n * @internal\r\n */\r\n public _previousBonesTransformationMatrices: { [index: number]: Float32Array } = {};\r\n /**\r\n * Array used to store the ignored skinned meshes while computing velocity map (typically used by the motion blur post-process).\r\n * Avoids computing bones velocities and computes only mesh's velocity itself (position, rotation, scaling).\r\n */\r\n public excludedSkinnedMeshesFromVelocity: AbstractMesh[] = [];\r\n\r\n /** Gets or sets a boolean indicating if transparent meshes should be rendered */\r\n public renderTransparentMeshes = true;\r\n\r\n /**\r\n * Gets or sets a boolean indicating if normals should be generated in world space (default: false, meaning normals are generated in view space)\r\n */\r\n public generateNormalsInWorldSpace = false;\r\n\r\n private _normalsAreUnsigned = false;\r\n\r\n /**\r\n * Gets a boolean indicating if normals are encoded in the [0,1] range in the render target. If true, you should do `normal = normal_rt * 2.0 - 1.0` to get the right normal\r\n */\r\n public get normalsAreUnsigned() {\r\n return this._normalsAreUnsigned;\r\n }\r\n\r\n private _scene: Scene;\r\n private _resizeObserver: Nullable<Observer<AbstractEngine>> = null;\r\n private _multiRenderTarget: MultiRenderTarget;\r\n private _textureTypesAndFormats: { [key: number]: { textureType: number; textureFormat: number } };\r\n private _ratioOrDimensions: number | { width: number; height: number };\r\n private _enableDepth: boolean = true;\r\n private _enableNormal: boolean = true;\r\n private _enablePosition: boolean = false;\r\n private _enableVelocity: boolean = false;\r\n private _enableVelocityLinear: boolean = false;\r\n private _enableReflectivity: boolean = false;\r\n private _enableScreenspaceDepth: boolean = false;\r\n private _depthFormat: number;\r\n private _clearColor = new Color4(0, 0, 0, 0);\r\n private _clearDepthColor = new Color4(1e8, 0, 0, 1); // \"infinity\" value - depth in the depth texture is view.z, not a 0..1 value!\r\n\r\n private _positionIndex: number = -1;\r\n private _velocityIndex: number = -1;\r\n private _velocityLinearIndex: number = -1;\r\n private _reflectivityIndex: number = -1;\r\n private _depthIndex: number = -1;\r\n private _normalIndex: number = -1;\r\n private _screenspaceDepthIndex: number = -1;\r\n\r\n private _linkedWithPrePass: boolean = false;\r\n private _prePassRenderer: PrePassRenderer;\r\n private _attachmentsFromPrePass: number[];\r\n private _useUbo: boolean;\r\n\r\n protected _cachedDefines: string;\r\n\r\n /**\r\n * @internal\r\n * Sets up internal structures to share outputs with PrePassRenderer\r\n * This method should only be called by the PrePassRenderer itself\r\n */\r\n public _linkPrePassRenderer(prePassRenderer: PrePassRenderer) {\r\n this._linkedWithPrePass = true;\r\n this._prePassRenderer = prePassRenderer;\r\n\r\n if (this._multiRenderTarget) {\r\n // prevents clearing of the RT since it's done by prepass\r\n this._multiRenderTarget.onClearObservable.clear();\r\n this._multiRenderTarget.onClearObservable.add(() => {\r\n // pass\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * @internal\r\n * Separates internal structures from PrePassRenderer so the geometry buffer can now operate by itself.\r\n * This method should only be called by the PrePassRenderer itself\r\n */\r\n public _unlinkPrePassRenderer() {\r\n this._linkedWithPrePass = false;\r\n this._createRenderTargets();\r\n }\r\n\r\n /**\r\n * @internal\r\n * Resets the geometry buffer layout\r\n */\r\n public _resetLayout() {\r\n this._enableDepth = true;\r\n this._enableNormal = true;\r\n this._enablePosition = false;\r\n this._enableReflectivity = false;\r\n this._enableVelocity = false;\r\n this._enableVelocityLinear = false;\r\n this._enableScreenspaceDepth = false;\r\n this._attachmentsFromPrePass = [];\r\n }\r\n\r\n /**\r\n * @internal\r\n * Replaces a texture in the geometry buffer renderer\r\n * Useful when linking textures of the prepass renderer\r\n */\r\n public _forceTextureType(geometryBufferType: number, index: number) {\r\n if (geometryBufferType === GeometryBufferRenderer.POSITION_TEXTURE_TYPE) {\r\n this._positionIndex = index;\r\n this._enablePosition = true;\r\n } else if (geometryBufferType === GeometryBufferRenderer.VELOCITY_TEXTURE_TYPE) {\r\n this._velocityIndex = index;\r\n this._enableVelocity = true;\r\n } else if (geometryBufferType === GeometryBufferRenderer.VELOCITY_LINEAR_TEXTURE_TYPE) {\r\n this._velocityLinearIndex = index;\r\n this._enableVelocityLinear = true;\r\n } else if (geometryBufferType === GeometryBufferRenderer.REFLECTIVITY_TEXTURE_TYPE) {\r\n this._reflectivityIndex = index;\r\n this._enableReflectivity = true;\r\n } else if (geometryBufferType === GeometryBufferRenderer.DEPTH_TEXTURE_TYPE) {\r\n this._depthIndex = index;\r\n this._enableDepth = true;\r\n } else if (geometryBufferType === GeometryBufferRenderer.NORMAL_TEXTURE_TYPE) {\r\n this._normalIndex = index;\r\n this._enableNormal = true;\r\n } else if (geometryBufferType === GeometryBufferRenderer.SCREENSPACE_DEPTH_TEXTURE_TYPE) {\r\n this._screenspaceDepthIndex = index;\r\n this._enableScreenspaceDepth = true;\r\n }\r\n }\r\n\r\n /**\r\n * @internal\r\n * Sets texture attachments\r\n * Useful when linking textures of the prepass renderer\r\n */\r\n public _setAttachments(attachments: number[]) {\r\n this._attachmentsFromPrePass = attachments;\r\n }\r\n\r\n /**\r\n * @internal\r\n * Replaces the first texture which is hard coded as a depth texture in the geometry buffer\r\n * Useful when linking textures of the prepass renderer\r\n */\r\n public _linkInternalTexture(internalTexture: InternalTexture) {\r\n this._multiRenderTarget.setInternalTexture(internalTexture, 0, false);\r\n }\r\n\r\n /**\r\n * Gets the render list (meshes to be rendered) used in the G buffer.\r\n */\r\n public get renderList() {\r\n return this._multiRenderTarget.renderList;\r\n }\r\n\r\n /**\r\n * Set the render list (meshes to be rendered) used in the G buffer.\r\n */\r\n public set renderList(meshes: Nullable<AbstractMesh[]>) {\r\n this._multiRenderTarget.renderList = meshes;\r\n }\r\n\r\n /**\r\n * Gets whether or not G buffer are supported by the running hardware.\r\n * This requires draw buffer supports\r\n */\r\n public get isSupported(): boolean {\r\n return this._multiRenderTarget.isSupported;\r\n }\r\n\r\n /**\r\n * Returns the index of the given texture type in the G-Buffer textures array\r\n * @param textureType The texture type constant. For example GeometryBufferRenderer.POSITION_TEXTURE_INDEX\r\n * @returns the index of the given texture type in the G-Buffer textures array\r\n */\r\n public getTextureIndex(textureType: number): number {\r\n switch (textureType) {\r\n case GeometryBufferRenderer.POSITION_TEXTURE_TYPE:\r\n return this._positionIndex;\r\n case GeometryBufferRenderer.VELOCITY_TEXTURE_TYPE:\r\n return this._velocityIndex;\r\n case GeometryBufferRenderer.VELOCITY_LINEAR_TEXTURE_TYPE:\r\n return this._velocityLinearIndex;\r\n case GeometryBufferRenderer.REFLECTIVITY_TEXTURE_TYPE:\r\n return this._reflectivityIndex;\r\n case GeometryBufferRenderer.DEPTH_TEXTURE_TYPE:\r\n return this._depthIndex;\r\n case GeometryBufferRenderer.NORMAL_TEXTURE_TYPE:\r\n return this._normalIndex;\r\n case GeometryBufferRenderer.SCREENSPACE_DEPTH_TEXTURE_TYPE:\r\n return this._screenspaceDepthIndex;\r\n default:\r\n return -1;\r\n }\r\n }\r\n\r\n /**\r\n * @returns a boolean indicating if object's depths are enabled for the G buffer.\r\n */\r\n public get enableDepth(): boolean {\r\n return this._enableDepth;\r\n }\r\n\r\n /**\r\n * Sets whether or not object's depths are enabled for the G buffer.\r\n */\r\n public set enableDepth(enable: boolean) {\r\n this._enableDepth = enable;\r\n\r\n if (!this._linkedWithPrePass) {\r\n this.dispose();\r\n this._createRenderTargets();\r\n }\r\n }\r\n\r\n /**\r\n * @returns a boolean indicating if object's normals are enabled for the G buffer.\r\n */\r\n public get enableNormal(): boolean {\r\n return this._enableNormal;\r\n }\r\n\r\n /**\r\n * Sets whether or not object's normals are enabled for the G buffer.\r\n */\r\n public set enableNormal(enable: boolean) {\r\n this._enableNormal = enable;\r\n\r\n if (!this._linkedWithPrePass) {\r\n this.dispose();\r\n this._createRenderTargets();\r\n }\r\n }\r\n\r\n /**\r\n * @returns a boolean indicating if objects positions are enabled for the G buffer.\r\n */\r\n public get enablePosition(): boolean {\r\n return this._enablePosition;\r\n }\r\n\r\n /**\r\n * Sets whether or not objects positions are enabled for the G buffer.\r\n */\r\n public set enablePosition(enable: boolean) {\r\n this._enablePosition = enable;\r\n\r\n // PrePass handles index and texture links\r\n if (!this._linkedWithPrePass) {\r\n this.dispose();\r\n this._createRenderTargets();\r\n }\r\n }\r\n\r\n /**\r\n * @returns a boolean indicating if objects velocities are enabled for the G buffer.\r\n */\r\n public get enableVelocity(): boolean {\r\n return this._enableVelocity;\r\n }\r\n\r\n /**\r\n * Sets whether or not objects velocities are enabled for the G buffer.\r\n */\r\n public set enableVelocity(enable: boolean) {\r\n this._enableVelocity = enable;\r\n\r\n if (!enable) {\r\n this._previousTransformationMatrices = {};\r\n }\r\n\r\n if (!this._linkedWithPrePass) {\r\n this.dispose();\r\n this._createRenderTargets();\r\n }\r\n\r\n this._scene.needsPreviousWorldMatrices = enable;\r\n }\r\n\r\n /**\r\n * @returns a boolean indicating if object's linear velocities are enabled for the G buffer.\r\n */\r\n public get enableVelocityLinear(): boolean {\r\n return this._enableVelocityLinear;\r\n }\r\n\r\n /**\r\n * Sets whether or not object's linear velocities are enabled for the G buffer.\r\n */\r\n public set enableVelocityLinear(enable: boolean) {\r\n this._enableVelocityLinear = enable;\r\n\r\n if (!this._linkedWithPrePass) {\r\n this.dispose();\r\n this._createRenderTargets();\r\n }\r\n }\r\n\r\n /**\r\n * Gets a boolean indicating if objects reflectivity are enabled in the G buffer.\r\n */\r\n public get enableReflectivity(): boolean {\r\n return this._enableReflectivity;\r\n }\r\n\r\n /**\r\n * Sets whether or not objects reflectivity are enabled for the G buffer.\r\n * For Metallic-Roughness workflow with ORM texture, we assume that ORM texture is defined according to the default layout:\r\n * pbr.useRoughnessFromMetallicTextureAlpha = false;\r\n * pbr.useRoughnessFromMetallicTextureGreen = true;\r\n * pbr.useMetallnessFromMetallicTextureBlue = true;\r\n */\r\n public set enableReflectivity(enable: boolean) {\r\n this._enableReflectivity = enable;\r\n\r\n if (!this._linkedWithPrePass) {\r\n this.dispose();\r\n this._createRenderTargets();\r\n }\r\n }\r\n\r\n /**\r\n * Sets whether or not objects screenspace depth are enabled for the G buffer.\r\n */\r\n public get enableScreenspaceDepth(): boolean {\r\n return this._enableScreenspaceDepth;\r\n }\r\n\r\n public set enableScreenspaceDepth(enable: boolean) {\r\n this._enableScreenspaceDepth = enable;\r\n\r\n if (!this._linkedWithPrePass) {\r\n this.dispose();\r\n this._createRenderTargets();\r\n }\r\n }\r\n\r\n /**\r\n * If set to true (default: false), the depth texture will be cleared with the depth value corresponding to the far plane (1 in normal mode, 0 in reverse depth buffer mode)\r\n * If set to false, the depth texture is always cleared with 0.\r\n */\r\n public useSpecificClearForDepthTexture = false;\r\n\r\n /**\r\n * Gets the scene associated with the buffer.\r\n */\r\n public get scene(): Scene {\r\n return this._scene;\r\n }\r\n\r\n /**\r\n * Gets the ratio used by the buffer during its creation.\r\n * How big is the buffer related to the main canvas.\r\n */\r\n public get ratio(): number {\r\n return typeof this._ratioOrDimensions === \"object\" ? 1 : this._ratioOrDimensions;\r\n }\r\n\r\n /** Shader language used by the material */\r\n protected _shaderLanguage = ShaderLanguage.GLSL;\r\n\r\n /**\r\n * Gets the shader language used in this material.\r\n */\r\n public get shaderLanguage(): ShaderLanguage {\r\n return this._shaderLanguage;\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n public static _SceneComponentInitialization: (scene: Scene) => void = (_) => {\r\n throw _WarnImport(\"GeometryBufferRendererSceneComponent\");\r\n };\r\n\r\n /**\r\n * Creates a new G Buffer for the scene\r\n * @param scene The scene the buffer belongs to\r\n * @param ratioOrDimensions How big is the buffer related to the main canvas (default: 1). You can also directly pass a width and height for the generated textures\r\n * @param depthFormat Format of the depth texture (default: Constants.TEXTUREFORMAT_DEPTH16)\r\n * @param textureTypesAndFormats The types and formats of textures to create as render targets. If not provided, all textures will be RGBA and float or half float, depending on the engine capabilities.\r\n */\r\n constructor(\r\n scene: Scene,\r\n ratioOrDimensions: number | { width: number; height: number } = 1,\r\n depthFormat = Constants.TEXTUREFORMAT_DEPTH16,\r\n textureTypesAndFormats?: { [key: number]: { textureType: number; textureFormat: number } }\r\n ) {\r\n this._scene = scene;\r\n this._ratioOrDimensions = ratioOrDimensions;\r\n this._useUbo = scene.getEngine().supportsUniformBuffers;\r\n this._depthFormat = depthFormat;\r\n this._textureTypesAndFormats = textureTypesAndFormats || {};\r\n\r\n this._initShaderSourceAsync();\r\n\r\n GeometryBufferRenderer._SceneComponentInitialization(this._scene);\r\n\r\n // Render target\r\n this._createRenderTargets();\r\n }\r\n\r\n private _shadersLoaded = false;\r\n\r\n private async _initShaderSourceAsync() {\r\n const engine = this._scene.getEngine();\r\n\r\n if (engine.isWebGPU && !GeometryBufferRenderer.ForceGLSL) {\r\n this._shaderLanguage = ShaderLanguage.WGSL;\r\n\r\n await Promise.all([import(\"../ShadersWGSL/geometry.vertex\"), import(\"../ShadersWGSL/geometry.fragment\")]);\r\n } else {\r\n await Promise.all([import(\"../Shaders/geometry.vertex\"), import(\"../Shaders/geometry.fragment\")]);\r\n }\r\n\r\n this._shadersLoaded = true;\r\n }\r\n\r\n /**\r\n * Checks whether everything is ready to render a submesh to the G buffer.\r\n * @param subMesh the submesh to check readiness for\r\n * @param useInstances is the mesh drawn using instance or not\r\n * @returns true if ready otherwise false\r\n */\r\n public isReady(subMesh: SubMesh, useInstances: boolean): boolean {\r\n if (!this._shadersLoaded) {\r\n return false;\r\n }\r\n\r\n const material = <any>subMesh.getMaterial();\r\n\r\n if (material && material.disableDepthWrite) {\r\n return false;\r\n }\r\n\r\n const defines = [];\r\n const attribs = [VertexBuffer.PositionKind, VertexBuffer.NormalKind];\r\n const mesh = subMesh.getMesh();\r\n\r\n if (material) {\r\n let needUv = false;\r\n // Alpha test\r\n if (material.needAlphaTesting() && material.getAlphaTestTexture()) {\r\n defines.push(\"#define ALPHATEST\");\r\n defines.push(`#define ALPHATEST_UV${material.getAlphaTestTexture().coordinatesIndex + 1}`);\r\n needUv = true;\r\n }\r\n\r\n // Normal map texture\r\n if (material.bumpTexture && MaterialFlags.BumpTextureEnabled) {\r\n defines.push(\"#define BUMP\");\r\n defines.push(`#define BUMP_UV${material.bumpTexture.coordinatesIndex + 1}`);\r\n needUv = true;\r\n }\r\n\r\n if (this._enableReflectivity) {\r\n let metallicWorkflow = false;\r\n // for PBR materials: cf. https://doc.babylonjs.com/features/featuresDeepDive/materials/using/masterPBR\r\n if (material.getClassName() === \"PBRMetallicRoughnessMaterial\") {\r\n // if it is a PBR material in MetallicRoughness Mode:\r\n if (material.metallicRoughnessTexture) {\r\n defines.push(\"#define ORMTEXTURE\");\r\n defines.push(`#define REFLECTIVITY_UV${material.metallicRoughnessTexture.coordinatesIndex + 1}`);\r\n defines.push(\"#define METALLICWORKFLOW\");\r\n needUv = true;\r\n metallicWorkflow = true;\r\n }\r\n // null or undefined\r\n if (material.metallic != null) {\r\n defines.push(\"#define METALLIC\");\r\n defines.push(\"#define METALLICWORKFLOW\");\r\n metallicWorkflow = true;\r\n }\r\n // null or undefined\r\n if (material.roughness != null) {\r\n defines.push(\"#define ROUGHNESS\");\r\n defines.push(\"#define METALLICWORKFLOW\");\r\n metallicWorkflow = true;\r\n }\r\n if (metallicWorkflow) {\r\n if (material.baseTexture) {\r\n defines.push(\"#define ALBEDOTEXTURE\");\r\n defines.push(`#define ALBEDO_UV${material.baseTexture.coordinatesIndex + 1}`);\r\n if (material.baseTexture.gammaSpace) {\r\n defines.push(\"#define GAMMAALBEDO\");\r\n }\r\n needUv = true;\r\n }\r\n if (material.baseColor) {\r\n defines.push(\"#define ALBEDOCOLOR\");\r\n }\r\n }\r\n } else if (material.getClassName() === \"PBRSpecularGlossinessMaterial\") {\r\n // if it is a PBR material in Specular/Glossiness Mode:\r\n if (material.specularGlossinessTexture) {\r\n defines.push(\"#define SPECULARGLOSSINESSTEXTURE\");\r\n defines.push(`#define REFLECTIVITY_UV${material.specularGlossinessTexture.coordinatesIndex + 1}`);\r\n needUv = true;\r\n if (material.specularGlossinessTexture.gammaSpace) {\r\n defines.push(\"#define GAMMAREFLECTIVITYTEXTURE\");\r\n }\r\n } else {\r\n if (material.specularColor) {\r\n defines.push(\"#define REFLECTIVITYCOLOR\");\r\n }\r\n }\r\n // null or undefined\r\n if (material.glossiness != null) {\r\n defines.push(\"#define GLOSSINESS\");\r\n }\r\n } else if (material.getClassName() === \"PBRMaterial\") {\r\n // if it is the bigger PBRMaterial\r\n if (material.metallicTexture) {\r\n defines.push(\"#define ORMTEXTURE\");\r\n defines.push(`#define REFLECTIVITY_UV${material.metallicTexture.coordinatesIndex + 1}`);\r\n defines.push(\"#define METALLICWORKFLOW\");\r\n needUv = true;\r\n metallicWorkflow = true;\r\n }\r\n // null or undefined\r\n if (material.metallic != null) {\r\n defines.push(\"#define METALLIC\");\r\n defines.push(\"#define METALLICWORKFLOW\");\r\n metallicWorkflow = true;\r\n }\r\n\r\n // null or undefined\r\n if (material.roughness != null) {\r\n defines.push(\"#define ROUGHNESS\");\r\n defines.push(\"#define METALLICWORKFLOW\");\r\n metallicWorkflow = true;\r\n }\r\n\r\n if (metallicWorkflow) {\r\n if (material.albedoTexture) {\r\n defines.push(\"#define ALBEDOTEXTURE\");\r\n defines.push(`#define ALBEDO_UV${material.albedoTexture.coordinatesIndex + 1}`);\r\n if (material.albedoTexture.gammaSpace) {\r\n defines.push(\"#define GAMMAALBEDO\");\r\n }\r\n needUv = true;\r\n }\r\n if (material.albedoColor) {\r\n defines.push(\"#define ALBEDOCOLOR\");\r\n }\r\n } else {\r\n // SpecularGlossiness Model\r\n if (material.reflectivityTexture) {\r\n defines.push(\"#define SPECULARGLOSSINESSTEXTURE\");\r\n defines.push(`#define REFLECTIVITY_UV${material.reflectivityTexture.coordinatesIndex + 1}`);\r\n if (material.reflectivityTexture.gammaSpace) {\r\n defines.push(\"#define GAMMAREFLECTIVITYTEXTURE\");\r\n }\r\n needUv = true;\r\n } else if (material.reflectivityColor) {\r\n defines.push(\"#define REFLECTIVITYCOLOR\");\r\n }\r\n // null or undefined\r\n if (material.microSurface != null) {\r\n defines.push(\"#define GLOSSINESS\");\r\n }\r\n }\r\n } else if (material.getClassName() === \"StandardMaterial\") {\r\n // if StandardMaterial:\r\n if (material.specularTexture) {\r\n defines.push(\"#define REFLECTIVITYTEXTURE\");\r\n defines.push(`#define REFLECTIVITY_UV${material.specularTexture.coordinatesIndex + 1}`);\r\n if (material.specularTexture.gammaSpace) {\r\n defines.push(\"#define GAMMAREFLECTIVITYTEXTURE\");\r\n }\r\n needUv = true;\r\n }\r\n if (material.specularColor) {\r\n defines.push(\"#define REFLECTIVITYCOLOR\");\r\n }\r\n }\r\n }\r\n\r\n if (needUv) {\r\n defines.push(\"#define NEED_UV\");\r\n if (mesh.isVerticesDataPresent(VertexBuffer.UVKind)) {\r\n attribs.push(VertexBuffer.UVKind);\r\n defines.push(\"#define UV1\");\r\n }\r\n if (mesh.isVerticesDataPresent(VertexBuffer.UV2Kind)) {\r\n attribs.push(VertexBuffer.UV2Kind);\r\n defines.push(\"#define UV2\");\r\n }\r\n }\r\n }\r\n\r\n // Buffers\r\n if (this._enableDepth) {\r\n defines.push(\"#define DEPTH\");\r\n defines.push(\"#define DEPTH_INDEX \" + this._depthIndex);\r\n }\r\n\r\n if (this._enableNormal) {\r\n defines.push(\"#define NORMAL\");\r\n defines.push(\"#define NORMAL_INDEX \" + this._normalIndex);\r\n }\r\n\r\n if (this._enablePosition) {\r\n defines.push(\"#define POSITION\");\r\n defines.push(\"#define POSITION_INDEX \" + this._positionIndex);\r\n }\r\n\r\n if (this._enableVelocity) {\r\n defines.push(\"#define VELOCITY\");\r\n defines.push(\"#define VELOCITY_INDEX \" + this._velocityIndex);\r\n if (this.excludedSkinnedMeshesFromVelocity.indexOf(mesh) === -1) {\r\n defines.push(\"#define BONES_VELOCITY_ENABLED\");\r\n }\r\n }\r\n\r\n if (this._enableVelocityLinear) {\r\n defines.push(\"#define VELOCITY_LINEAR\");\r\n defines.push(\"#define VELOCITY_LINEAR_INDEX \" + this._velocityLinearIndex);\r\n if (this.excludedSkinnedMeshesFromVelocity.indexOf(mesh) === -1) {\r\n defines.push(\"#define BONES_VELOCITY_ENABLED\");\r\n }\r\n }\r\n\r\n if (this._enableReflectivity) {\r\n defines.push(\"#define REFLECTIVITY\");\r\n defines.push(\"#define REFLECTIVITY_INDEX \" + this._reflectivityIndex);\r\n }\r\n\r\n if (this._enableScreenspaceDepth) {\r\n if (this._screenspaceDepthIndex !== -1) {\r\n defines.push(\"#define SCREENSPACE_DEPTH_INDEX \" + this._screenspaceDepthIndex);\r\n defines.push(\"#define SCREENSPACE_DEPTH\");\r\n }\r\n }\r\n\r\n if (this.generateNormalsInWorldSpace) {\r\n defines.push(\"#define NORMAL_WORLDSPACE\");\r\n }\r\n\r\n if (this._normalsAreUnsigned) {\r\n defines.push(\"#define ENCODE_NORMAL\");\r\n }\r\n\r\n // Bones\r\n if (mesh.useBones && mesh.computeBonesUsingShaders && mesh.skeleton) {\r\n attribs.push(VertexBuffer.MatricesIndicesKind);\r\n attribs.push(VertexBuffer.MatricesWeightsKind);\r\n if (mesh.numBoneInfluencers > 4) {\r\n attribs.push(VertexBuffer.MatricesIndicesExtraKind);\r\n attribs.push(VertexBuffer.MatricesWeightsExtraKind);\r\n }\r\n defines.push(\"#define NUM_BONE_INFLUENCERS \" + mesh.numBoneInfluencers);\r\n defines.push(\"#define BONETEXTURE \" + mesh.skeleton.isUsingTextureForMatrices);\r\n defines.push(\"#define BonesPerMesh \" + (mesh.skeleton.bones.length + 1));\r\n } else {\r\n defines.push(\"#define NUM_BONE_INFLUENCERS 0\");\r\n defines.push(\"#define BONETEXTURE false\");\r\n defines.push(\"#define BonesPerMesh 0\");\r\n }\r\n\r\n // Morph targets\r\n const morphTargetManager = (mesh as Mesh).morphTargetManager;\r\n let numMorphInfluencers = 0;\r\n if (morphTargetManager) {\r\n numMorphInfluencers = morphTargetManager.numMaxInfluencers || morphTargetManager.numInfluencers;\r\n if (numMorphInfluencers > 0) {\r\n defines.push(\"#define MORPHTARGETS\");\r\n defines.push(\"#define NUM_MORPH_INFLUENCERS \" + numMorphInfluencers);\r\n if (morphTargetManager.isUsingTextureForTargets) {\r\n defines.push(\"#define MORPHTARGETS_TEXTURE\");\r\n }\r\n PrepareAttributesForMorphTargetsInfluencers(attribs, mesh, numMorphInfluencers);\r\n }\r\n }\r\n\r\n // Instances\r\n if (useInstances) {\r\n defines.push(\"#define INSTANCES\");\r\n PushAttributesForInstances(attribs, this._enableVelocity || this._enableVelocityLinear);\r\n if (subMesh.getRenderingMesh().hasThinInstances) {\r\n defines.push(\"#define THIN_INSTANCES\");\r\n }\r\n }\r\n\r\n // Setup textures count\r\n if (this._linkedWithPrePass) {\r\n defines.push(\"#define SCENE_MRT_COUNT \" + this._attachmentsFromPrePass.length);\r\n } else {\r\n defines.push(\"#define SCENE_MRT_COUNT \" + this._multiRenderTarget.textures.length);\r\n }\r\n\r\n prepareStringDefinesForClipPlanes(material, this._scene, defines);\r\n\r\n // Get correct effect\r\n const engine = this._scene.getEngine();\r\n const drawWrapper = subMesh._getDrawWrapper(undefined, true)!;\r\n const cachedDefines = drawWrapper.defines;\r\n const join = defines.join(\"\\n\");\r\n if (cachedDefines !== join) {\r\n drawWrapper.setEffect(\r\n engine.createEffect(\r\n \"geometry\",\r\n {\r\n attributes: attribs,\r\n uniformsNames: uniforms,\r\n samplers: [\"diffuseSampler\", \"bumpSampler\", \"reflectivitySampler\", \"albedoSampler\", \"morphTargets\", \"boneSampler\"],\r\n defines: join,\r\n onCompiled: null,\r\n fallbacks: null,\r\n onError: null,\r\n uniformBuffersNames: [\"Scene\"],\r\n indexParameters: { buffersCount: this._multiRenderTarget.textures.length - 1, maxSimultaneousMorphTargets: numMorphInfluencers },\r\n shaderLanguage: this.shaderLanguage,\r\n },\r\n engine\r\n ),\r\n join\r\n );\r\n }\r\n\r\n return drawWrapper.effect!.isReady();\r\n }\r\n\r\n /**\r\n * Gets the current underlying G Buffer.\r\n * @returns the buffer\r\n */\r\n public getGBuffer(): MultiRenderTarget {\r\n return this._multiRenderTarget;\r\n }\r\n\r\n /**\r\n * Gets the number of samples used to render the buffer (anti aliasing).\r\n */\r\n public get samples(): number {\r\n return this._multiRenderTarget.samples;\r\n }\r\n\r\n /**\r\n * Sets the number of samples used to render the buffer (anti aliasing).\r\n */\r\n public set samples(value: number) {\r\n this._multiRenderTarget.samples = value;\r\n }\r\n\r\n /**\r\n * Disposes the renderer and frees up associated resources.\r\n */\r\n public dispose(): void {\r\n if (this._resizeObserver) {\r\n const engine = this._scene.getEngine();\r\n engine.onResizeObservable.remove(this._resizeObserver);\r\n this._resizeObserver = null;\r\n }\r\n this.getGBuffer().dispose();\r\n }\r\n\r\n private _assignRenderTargetIndices(): [number, string[], Array<{ textureType: number; textureFormat: number } | undefined>] {\r\n const textureNames: string[] = [];\r\n const textureTypesAndFormats: Array<{ textureType: number; textureFormat: number } | undefined> = [];\r\n let count = 0;\r\n\r\n if (this._enableDepth) {\r\n this._depthIndex = count;\r\n count++;\r\n textureNames.push(\"gBuffer_Depth\");\r\n textureTypesAndFormats.push(this._textureTypesAndFormats[GeometryBufferRenderer.DEPTH_TEXTURE_TYPE]);\r\n }\r\n\r\n if (this._enableNormal) {\r\n this._normalIndex = count;\r\n count++;\r\n textureNames.push(\"gBuffer_Normal\");\r\n textureTypesAndFormats.push(this._textureTypesAndFormats[GeometryBufferRenderer.NORMAL_TEXTURE_TYPE]);\r\n }\r\n\r\n if (this._enablePosition) {\r\n this._positionIndex = count;\r\n count++;\r\n textureNames.push(\"gBuffer_Position\");\r\n textureTypesAndFormats.push(this._textureTypesAndFormats[GeometryBufferRenderer.POSITION_TEXTURE_TYPE]);\r\n }\r\n\r\n if (this._enableVelocity) {\r\n this._velocityIndex = count;\r\n count++;\r\n textureNames.push(\"gBuffer_Velocity\");\r\n textureTypesAndFormats.push(this._textureTypesAndFormats[GeometryBufferRenderer.VELOCITY_TEXTURE_TYPE]);\r\n }\r\n\r\n if (this._enableVelocityLinear) {\r\n this._velocityLinearIndex = count;\r\n count++;\r\n textureNames.push(\"gBuffer_VelocityLinear\");\r\n textureTypesAndFormats.push(this._textureTypesAndFormats[GeometryBufferRenderer.VELOCITY_LINEAR_TEXTURE_TYPE]);\r\n }\r\n\r\n if (this._enableReflectivity) {\r\n this._reflectivityIndex = count;\r\n count++;\r\n textureNames.push(\"gBuffer_Reflectivity\");\r\n textureTypesAndFormats.push(this._textureTypesAndFormats[GeometryBufferRenderer.REFLECTIVITY_TEXTURE_TYPE]);\r\n }\r\n\r\n if (this._enableScreenspaceDepth) {\r\n this._screenspaceDepthIndex = count;\r\n count++;\r\n textureNames.push(\"gBuffer_ScreenspaceDepth\");\r\n textureTypesAndFormats.push(this._textureTypesAndFormats[GeometryBufferRenderer.SCREENSPACE_DEPTH_TEXTURE_TYPE]);\r\n }\r\n\r\n return [count, textureNames, textureTypesAndFormats];\r\n }\r\n\r\n protected _createRenderTargets(): void {\r\n const engine = this._scene.getEngine();\r\n const [count, textureNames, textureTypesAndFormat] = this._assignRenderTargetIndices();\r\n\r\n let type = Constants.TEXTURETYPE_UNSIGNED_BYTE;\r\n if (engine._caps.textureFloat && engine._caps.textureFloatLinearFiltering) {\r\n type = Constants.TEXTURETYPE_FLOAT;\r\n } else if (engine._caps.textureHalfFloat && engine._caps.textureHalfFloatLinearFiltering) {\r\n type = Constants.TEXTURETYPE_HALF_FLOAT;\r\n }\r\n\r\n const dimensions =\r\n (this._ratioOrDimensions as any).width !== undefined\r\n ? (this._ratioOrDimensions as { width: number; height: number })\r\n : { width: engine.getRenderWidth() * (this._ratioOrDimensions as number), height: engine.getRenderHeight() * (this._ratioOrDimensions as number) };\r\n\r\n const textureTypes: number[] = [];\r\n const textureFormats: number[] = [];\r\n\r\n for (const typeAndFormat of textureTypesAndFormat) {\r\n if (typeAndFormat) {\r\n textureTypes.push(typeAndFormat.textureType);\r\n textureFormats.push(typeAndFormat.textureFormat);\r\n } else {\r\n textureTypes.push(type);\r\n textureFormats.push(Constants.TEXTUREFORMAT_RGBA);\r\n }\r\n }\r\n\r\n this._normalsAreUnsigned =\r\n textureTypes[GeometryBufferRenderer.NORMAL_TEXTURE_TYPE] === Constants.TEXTURETYPE_UNSIGNED_INT_2_10_10_10_REV ||\r\n textureTypes[GeometryBufferRenderer.NORMAL_TEXTURE_TYPE] === Constants.TEXTURETYPE_UNSIGNED_INT_10F_11F_11F_REV;\r\n\r\n this._multiRenderTarget = new MultiRenderTarget(\r\n \"gBuffer\",\r\n dimensions,\r\n count,\r\n this._scene,\r\n { generateMipMaps: false, generateDepthTexture: true, types: textureTypes, formats: textureFormats, depthTextureFormat: this._depthFormat },\r\n textureNames.concat(\"gBuffer_DepthBuffer\")\r\n );\r\n if (!this.isSupported) {\r\n return;\r\n }\r\n this._multiRenderTarget.wrapU = Texture.CLAMP_ADDRESSMODE;\r\n this._multiRenderTarget.wrapV = Texture.CLAMP_ADDRESSMODE;\r\n this._multiRenderTarget.refreshRate = 1;\r\n this._multiRenderTarget.renderParticles = false;\r\n this._multiRenderTarget.renderList = null;\r\n\r\n // Depth is always the first texture in the geometry buffer renderer!\r\n const layoutAttachmentsAll = [true];\r\n const layoutAttachmentsAllButDepth = [false];\r\n const layoutAttachmentsDepthOnly = [true];\r\n\r\n for (let i = 1; i < count; ++i) {\r\n layoutAttachmentsAll.push(true);\r\n layoutAttachmentsDepthOnly.push(false);\r\n layoutAttachmentsAllButDepth.push(true);\r\n }\r\n\r\n const attachmentsAll = engine.buildTextureLayout(layoutAttachmentsAll);\r\n const attachmentsAllButDepth = engine.buildTextureLayout(layoutAttachmentsAllButDepth);\r\n const attachmentsDepthOnly = engine.buildTextureLayout(layoutAttachmentsDepthOnly);\r\n\r\n this._multiRenderTarget.onClearObservable.add((engine) => {\r\n engine.bindAttachments(this.useSpecificClearForDepthTexture ? attachmentsAllButDepth : attachmentsAll);\r\n engine.clear(this._clearColor, true, true, true);\r\n if (this.useSpecificClearForDepthTexture) {\r\n engine.bindAttachments(attachmentsDepthOnly);\r\n engine.clear(this._clearDepthColor, true, true, true);\r\n }\r\n engine.bindAttachments(attachmentsAll);\r\n });\r\n\r\n this._resizeObserver = engine.onResizeObservable.add(() => {\r\n if (this._multiRenderTarget) {\r\n const dimensions =\r\n (this._ratioOrDimensions as any).width !== undefined\r\n ? (this._ratioOrDimensions as { width: number; height: number })\r\n : { width: engine.getRenderWidth() * (this._ratioOrDimensions as number), height: engine.getRenderHeight() * (this._ratioOrDimensions as number) };\r\n this._multiRenderTarget.resize(dimensions);\r\n }\r\n });\r\n\r\n // Custom render function\r\n const renderSubMesh = (subMesh: SubMesh): void => {\r\n const renderingMesh = subMesh.getRenderingMesh();\r\n const effectiveMesh = subMesh.getEffectiveMesh();\r\n const scene = this._scene;\r\n const engine = scene.getEngine();\r\n const material = <any>subMesh.getMaterial();\r\n\r\n if (!material) {\r\n return;\r\n }\r\n\r\n effectiveMesh._internalAbstractMeshDataInfo._isActiveIntermediate = false;\r\n\r\n // Velocity\r\n if ((this._enableVelocity || this._enableVelocityLinear) && !this._previousTransformationMatrices[effectiveMesh.uniqueId]) {\r\n this._previousTransformationMatrices[effectiveMesh.uniqueId] = {\r\n world: Matrix.Identity(),\r\n viewProjection: scene.getTransformMatrix(),\r\n };\r\n\r\n if (renderingMesh.skeleton) {\r\n const bonesTransformations = renderingMesh.skeleton.getTransformMatrices(renderingMesh);\r\n this._previousBonesTransformationMatrices[renderingMesh.uniqueId] = this._copyBonesTransformationMatrices(\r\n bonesTransformations,\r\n new Float32Array(bonesTransformations.length)\r\n );\r\n }\r\n }\r\n\r\n // Managing instances\r\n const batch = renderingMesh._getInstancesRenderList(subMesh._id, !!subMesh.getReplacementMesh());\r\n\r\n if (batch.mustReturn) {\r\n return;\r\n }\r\n\r\n const hardwareInstancedRendering = engine.getCaps().instancedArrays && (batch.visibleInstances[subMesh._id] !== null || renderingMesh.hasThinInstances);\r\n const world = effectiveMesh.getWorldMatrix();\r\n\r\n if (this.isReady(subMesh, hardwareInstancedRendering)) {\r\n const drawWrapper = subMesh._getDrawWrapper();\r\n\r\n if (!drawWrapper) {\r\n return;\r\n }\r\n\r\n const effect = drawWrapper.effect!;\r\n\r\n engine.enableEffect(drawWrapper);\r\n if (!hardwareInstancedRendering) {\r\n renderingMesh._bind(subMesh, effect, material.fillMode);\r\n }\r\n\r\n if (!this._useUbo) {\r\n effect.setMatrix(\"viewProjection\", scene.getTransformMatrix());\r\n effect.setMatrix(\"view\", scene.getViewMatrix());\r\n } else {\r\n BindSceneUniformBuffer(effect, this._scene.getSceneUniformBuffer());\r\n this._scene.finalizeSceneUbo();\r\n }\r\n\r\n let sideOrientation: Nullable<number>;\r\n const instanceDataStorage = (renderingMesh as Mesh)._instanceDataStorage;\r\n\r\n if (!instanceDataStorage.isFrozen && (material.backFaceCulling || material.sideOrientation !== null)) {\r\n const mainDeterminant = effectiveMesh._getWorldMatrixDeterminant();\r\n sideOrientation = material._getEffectiveOrientation(renderingMesh);\r\n\r\n if (mainDeterminant < 0) {\r\n sideOrientation = sideOrientation === Material.ClockWiseSideOrientation ? Material.CounterClockWiseSideOrientation : Material.ClockWiseSideOrientation;\r\n }\r\n } else {\r\n sideOrientation = instanceDataStorage.sideOrientation;\r\n }\r\n\r\n material._preBind(drawWrapper, sideOrientation);\r\n\r\n // Alpha test\r\n if (material.needAlphaTesting()) {\r\n const alphaTexture = material.getAlphaTestTexture();\r\n if (alphaTexture) {\r\n effect.setTexture(\"diffuseSampler\", alphaTexture);\r\n effect.setMatrix(\"diffuseMatrix\", alphaTexture.getTextureMatrix());\r\n }\r\n }\r\n\r\n // Bump\r\n if (material.bumpTexture && scene.getEngine().getCaps().standardDerivatives && MaterialFlags.BumpTextureEnabled) {\r\n effect.setFloat3(\"vBumpInfos\", material.bumpTexture.coordinatesIndex, 1.0 / material.bumpTexture.level, material.parallaxScaleBias);\r\n effect.setMatrix(\"bumpMatrix\", material.bumpTexture.getTextureMatrix());\r\n effect.setTexture(\"bumpSampler\", material.bumpTexture);\r\n effect.setFloat2(\"vTangentSpaceParams\", material.invertNormalMapX ? -1.0 : 1.0, material.invertNormalMapY ? -1.0 : 1.0);\r\n }\r\n\r\n // Reflectivity\r\n if (this._enableReflectivity) {\r\n // for PBR materials: cf. https://doc.babylonjs.com/features/featuresDeepDive/materials/using/masterPBR\r\n if (material.getClassName() === \"PBRMetallicRoughnessMaterial\") {\r\n // if it is a PBR material in MetallicRoughness Mode:\r\n if (material.metallicRoughnessTexture !== null) {\r\n effect.setTexture(\"reflectivitySampler\", material.metallicRoughnessTexture);\r\n effect.setMatrix(\"reflectivityMatrix\", material.metallicRoughnessTexture.getTextureMatrix());\r\n }\r\n if (material.metallic !== null) {\r\n effect.setFloat(\"metallic\", material.metallic);\r\n }\r\n if (material.roughness !== null) {\r\n effect.setFloat(\"glossiness\", 1.0 - material.roughness);\r\n }\r\n if (material.baseTexture !== null) {\r\n effect.setTexture(\"albedoSampler\", material.baseTexture);\r\n effect.setMatrix(\"albedoMatrix\", material.baseTexture.getTextureMatrix());\r\n }\r\n if (material.baseColor !== null) {\r\n effect.setColor3(\"albedoColor\", material.baseColor);\r\n }\r\n } else if (material.getClassName() === \"PBRSpecularGlossinessMaterial\") {\r\n // if it is a PBR material in Specular/Glossiness Mode:\r\n if (material.specularGlossinessTexture !== null) {\r\n effect.setTexture(\"reflectivitySampler\", material.specularGlossinessTexture);\r\n effect.setMatrix(\"reflectivityMatrix\", material.specularGlossinessTexture.getTextureMatrix());\r\n } else {\r\n if (material.specularColor !== null) {\r\n effect.setColor3(\"reflectivityColor\", material.specularColor);\r\n }\r\n }\r\n if (material.glossiness !== null) {\r\n effect.setFloat(\"glossiness\", material.glossiness);\r\n }\r\n } else if (material.getClassName() === \"PBRMaterial\") {\r\n // if it is the bigger PBRMaterial\r\n if (material.metallicTexture !== null) {\r\n effect.setTexture(\"reflectivitySampler\", material.metallicTexture);\r\n effect.setMatrix(\"reflectivityMatrix\", material.metallicTexture.getTextureMatrix());\r\n }\r\n if (material.metallic !== null) {\r\n effect.setFloat(\"metallic\", material.metallic);\r\n }\r\n\r\n if (material.roughness !== null) {\r\n effect.setFloat(\"glossiness\", 1.0 - material.roughness);\r\n }\r\n\r\n if (material.roughness !== null || material.metallic !== null || material.metallicTexture !== null) {\r\n // MetallicRoughness Model\r\n if (material.albedoTexture !== null) {\r\n effect.setTexture(\"albedoSampler\", material.albedoTexture);\r\n effect.setMatrix(\"albedoMatrix\", material.albedoTexture.getTextureMatrix());\r\n }\r\n if (material.albedoColor !== null) {\r\n effect.setColor3(\"albedoColor\", material.albedoColor);\r\n }\r\n } else {\r\n // SpecularGlossiness Model\r\n if (material.reflectivityTexture !== null) {\r\n effect.setTexture(\"reflectivitySampler\", material.reflectivityTexture);\r\n effect.setMatrix(\"reflectivityMatrix\", material.reflectivityTexture.getTextureMatrix());\r\n } else if (material.reflectivityColor !== null) {\r\n effect.setColor3(\"reflectivityColor\", material.reflectivityColor);\r\n }\r\n if (material.microSurface !== null) {\r\n effect.setFloat(\"glossiness\", material.microSurface);\r\n }\r\n }\r\n } else if (material.getClassName() === \"StandardMaterial\") {\r\n // if StandardMaterial:\r\n if (material.specularTexture !== null) {\r\n effect.setTexture(\"reflectivitySampler\", material.specularTexture);\r\n effect.setMatrix(\"reflectivityMatrix\", material.specularTexture.getTextureMatrix());\r\n }\r\n if (material.specularColor !== null) {\r\n effect.setColor3(\"reflectivityColor\", material.specularColor);\r\n }\r\n }\r\n }\r\n\r\n // Clip plane\r\n bindClipPlane(effect, material, this._scene);\r\n\r\n // Bones\r\n if (renderingMesh.useBones && renderingMesh.computeBonesUsingShaders && renderingMesh.skeleton) {\r\n const skeleton = renderingMesh.skeleton;\r\n\r\n if (skeleton.isUsingTextureForMatrices && effect.getUniformIndex(\"boneTextureWidth\") > -1) {\r\n const boneTexture = skeleton.getTransformMatrixTexture(renderingMesh);\r\n effect.setTexture(\"boneSampler\", boneTexture);\r\n effect.setFloat(\"boneTextureWidth\", 4.0 * (skeleton.bones.length + 1));\r\n } else {\r\n effect.setMatrices(\"mBones\", renderingMesh.skeleton.getTransformMatrices(renderingMesh));\r\n }\r\n\r\n if (this._enableVelocity || this._enableVelocityLinear) {\r\n effect.setMatrices(\"mPreviousBones\", this._previousBonesTransformationMatrices[renderingMesh.uniqueId]);\r\n }\r\n }\r\n\r\n // Morph targets\r\n BindMorphTargetParameters(renderingMesh, effect);\r\n if (renderingMesh.morphTargetManager && renderingMesh.morphTargetManager.isUsingTextureForTargets) {\r\n renderingMesh.morphTargetManager._bind(effect);\r\n }\r\n\r\n // Velocity\r\n if (this._enableVelocity || this._enableVelocityLinear) {\r\n effect.setMatrix(\"previousWorld\", this._previousTransformationMatrices[effectiveMesh.uniqueId].world);\r\n effect.setMatrix(\"previousViewProjection\", this._previousTransformationMatrices[effectiveMesh.uniqueId].viewProjection);\r\n }\r\n\r\n if (hardwareInstancedRendering && renderingMesh.hasThinInstances) {\r\n effect.setMatrix(\"world\", world);\r\n }\r\n\r\n // Draw\r\n renderingMesh._processRendering(effectiveMesh, subMesh, effect, material.fillMode, batch, hardwareInstancedRendering, (isInstance, w) => {\r\n if (!isInstance) {\r\n effect.setMatrix(\"world\", w);\r\n }\r\n });\r\n }\r\n\r\n // Velocity\r\n if (this._enableVelocity || this._enableVelocityLinear) {\r\n this._previousTransformationMatrices[effectiveMesh.uniqueId].world = world.clone();\r\n this._previousTransformationMatrices[effectiveMesh.uniqueId].viewProjection = this._scene.getTransformMatrix().clone();\r\n if (renderingMesh.skeleton) {\r\n this._copyBonesTransformationMatrices(\r\n renderingMesh.skeleton.getTransformMatrices(renderingMesh),\r\n this._previousBonesTransformationMatrices[effectiveMesh.uniqueId]\r\n );\r\n }\r\n }\r\n };\r\n\r\n this._multiRenderTarget.customIsReadyFunction = (mesh: AbstractMesh, refreshRate: number, preWarm?: boolean) => {\r\n if ((preWarm || refreshRate === 0) && mesh.subMeshes) {\r\n for (let i = 0; i < mesh.subMeshes.length; ++i) {\r\n const subMesh = mesh.subMeshes[i];\r\n const material = subMesh.getMaterial();\r\n const renderingMesh = subMesh.getRenderingMesh();\r\n\r\n if (!material) {\r\n continue;\r\n }\r\n\r\n const batch = renderingMesh._getInstancesRenderList(subMesh._id, !!subMesh.getReplacementMesh());\r\n const hardwareInstancedRendering = engine.getCaps().instancedArrays && (batch.visibleInstances[subMesh._id] !== null || renderingMesh.hasThinInstances);\r\n\r\n if (!this.isReady(subMesh, hardwareInstancedRendering)) {\r\n return false;\r\n }\r\n }\r\n }\r\n\r\n return true;\r\n };\r\n\r\n this._multiRenderTarget.customRenderFunction = (\r\n opaqueSubMeshes: SmartArray<SubMesh>,\r\n alphaTestSubMeshes: SmartArray<SubMesh>,\r\n transparentSubMeshes: SmartArray<SubMesh>,\r\n depthOnlySubMeshes: SmartArray<SubMesh>\r\n ): void => {\r\n let index;\r\n\r\n if (this._linkedWithPrePass) {\r\n if (!this._prePassRenderer.enabled) {\r\n return;\r\n }\r\n this._scene.getEngine().bindAttachments(this._attachmentsFromPrePass);\r\n }\r\n\r\n if (depthOnlySubMeshes.length) {\r\n engine.setColorWrite(false);\r\n for (index = 0; index < depthOnlySubMeshes.length; index++) {\r\n renderSubMesh(depthOnlySubMeshes.data[index]);\r\n }\r\n engine.setColorWrite(true);\r\n }\r\n\r\n for (index = 0; index < opaqueSubMeshes.length; index++) {\r\n renderSubMesh(opaqueSubMeshes.data[index]);\r\n }\r\n\r\n engine.setDepthWrite(false);\r\n for (index = 0; index < alphaTestSubMeshes.length; index++) {\r\n renderSubMesh(alphaTestSubMeshes.data[index]);\r\n }\r\n\r\n if (this.renderTransparentMeshes) {\r\n for (index = 0; index < transparentSubMeshes.length; index++) {\r\n renderSubMesh(transparentSubMeshes.data[index]);\r\n }\r\n }\r\n engine.setDepthWrite(true);\r\n };\r\n }\r\n\r\n // Copies the bones transformation matrices into the target array and returns the target's reference\r\n private _copyBonesTransformationMatrices(source: Float32Array, target: Float32Array): Float32Array {\r\n for (let i = 0; i < source.length; i++) {\r\n target[i] = source[i];\r\n }\r\n\r\n return target;\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"geometryBufferRenderer.js","sourceRoot":"","sources":["../../../../dev/core/src/Rendering/geometryBufferRenderer.ts"],"names":[],"mappings":"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","sourcesContent":["import { Matrix } from \"../Maths/math.vector\";\r\nimport { VertexBuffer } from \"../Buffers/buffer\";\r\nimport type { SubMesh } from \"../Meshes/subMesh\";\r\nimport type { Mesh } from \"../Meshes/mesh\";\r\nimport { Constants } from \"../Engines/constants\";\r\nimport type { SmartArray } from \"../Misc/smartArray\";\r\nimport { Texture } from \"../Materials/Textures/texture\";\r\nimport type { InternalTexture } from \"../Materials/Textures/internalTexture\";\r\nimport { MultiRenderTarget } from \"../Materials/Textures/multiRenderTarget\";\r\nimport type { PrePassRenderer } from \"../Rendering/prePassRenderer\";\r\nimport type { Scene } from \"../scene\";\r\nimport type { AbstractMesh } from \"../Meshes/abstractMesh\";\r\nimport { Color4 } from \"../Maths/math.color\";\r\nimport { _WarnImport } from \"../Misc/devTools\";\r\nimport type { Observer } from \"../Misc/observable\";\r\nimport type { AbstractEngine } from \"../Engines/abstractEngine\";\r\nimport type { Nullable } from \"../types\";\r\nimport { Material } from \"../Materials/material\";\r\n\r\nimport \"../Shaders/geometry.fragment\";\r\nimport \"../Shaders/geometry.vertex\";\r\nimport { MaterialFlags } from \"../Materials/materialFlags\";\r\nimport { addClipPlaneUniforms, bindClipPlane, prepareStringDefinesForClipPlanes } from \"../Materials/clipPlaneMaterialHelper\";\r\nimport { BindMorphTargetParameters, BindSceneUniformBuffer, PrepareAttributesForMorphTargetsInfluencers, PushAttributesForInstances } from \"../Materials/materialHelper.functions\";\r\n\r\nimport \"../Engines/Extensions/engine.multiRender\";\r\nimport { ShaderLanguage } from \"core/Materials/shaderLanguage\";\r\n\r\n/** @internal */\r\ninterface ISavedTransformationMatrix {\r\n world: Matrix;\r\n viewProjection: Matrix;\r\n}\r\n\r\n/** list the uniforms used by the geometry renderer */\r\nconst uniforms = [\r\n \"world\",\r\n \"mBones\",\r\n \"viewProjection\",\r\n \"diffuseMatrix\",\r\n \"view\",\r\n \"previousWorld\",\r\n \"previousViewProjection\",\r\n \"mPreviousBones\",\r\n \"bumpMatrix\",\r\n \"reflectivityMatrix\",\r\n \"albedoMatrix\",\r\n \"reflectivityColor\",\r\n \"albedoColor\",\r\n \"metallic\",\r\n \"glossiness\",\r\n \"vTangentSpaceParams\",\r\n \"vBumpInfos\",\r\n \"morphTargetInfluences\",\r\n \"morphTargetCount\",\r\n \"morphTargetTextureInfo\",\r\n \"morphTargetTextureIndices\",\r\n \"boneTextureWidth\",\r\n];\r\naddClipPlaneUniforms(uniforms);\r\n\r\n/**\r\n * This renderer is helpful to fill one of the render target with a geometry buffer.\r\n */\r\nexport class GeometryBufferRenderer {\r\n /**\r\n * Force all the standard materials to compile to glsl even on WebGPU engines.\r\n * False by default. This is mostly meant for backward compatibility.\r\n */\r\n public static ForceGLSL = false;\r\n /**\r\n * Constant used to retrieve the depth texture index in the G-Buffer textures array\r\n * using getIndex(GeometryBufferRenderer.DEPTH_TEXTURE_INDEX)\r\n */\r\n public static readonly DEPTH_TEXTURE_TYPE = 0;\r\n /**\r\n * Constant used to retrieve the normal texture index in the G-Buffer textures array\r\n * using getIndex(GeometryBufferRenderer.NORMAL_TEXTURE_INDEX)\r\n */\r\n public static readonly NORMAL_TEXTURE_TYPE = 1;\r\n /**\r\n * Constant used to retrieve the position texture index in the G-Buffer textures array\r\n * using getIndex(GeometryBufferRenderer.POSITION_TEXTURE_INDEX)\r\n */\r\n public static readonly POSITION_TEXTURE_TYPE = 2;\r\n /**\r\n * Constant used to retrieve the velocity texture index in the G-Buffer textures array\r\n * using getIndex(GeometryBufferRenderer.VELOCITY_TEXTURE_INDEX)\r\n */\r\n public static readonly VELOCITY_TEXTURE_TYPE = 3;\r\n /**\r\n * Constant used to retrieve the reflectivity texture index in the G-Buffer textures array\r\n * using the getIndex(GeometryBufferRenderer.REFLECTIVITY_TEXTURE_TYPE)\r\n */\r\n public static readonly REFLECTIVITY_TEXTURE_TYPE = 4;\r\n\r\n /**\r\n * Constant used to retrieve the screen-space depth texture index in the G-Buffer textures array\r\n * using getIndex(GeometryBufferRenderer.SCREENSPACE_DEPTH_TEXTURE_TYPE)\r\n */\r\n public static readonly SCREENSPACE_DEPTH_TEXTURE_TYPE = 5;\r\n\r\n /**\r\n * Constant used to retrieve the linear velocity texture index in the G-Buffer textures array\r\n * using getIndex(GeometryBufferRenderer.VELOCITY_LINEAR_TEXTURE_TYPE)\r\n */\r\n public static readonly VELOCITY_LINEAR_TEXTURE_TYPE = 6;\r\n\r\n /**\r\n * Dictionary used to store the previous transformation matrices of each rendered mesh\r\n * in order to compute objects velocities when enableVelocity is set to \"true\"\r\n * @internal\r\n */\r\n public _previousTransformationMatrices: { [index: number]: ISavedTransformationMatrix } = {};\r\n /**\r\n * Dictionary used to store the previous bones transformation matrices of each rendered mesh\r\n * in order to compute objects velocities when enableVelocity is set to \"true\"\r\n * @internal\r\n */\r\n public _previousBonesTransformationMatrices: { [index: number]: Float32Array } = {};\r\n /**\r\n * Array used to store the ignored skinned meshes while computing velocity map (typically used by the motion blur post-process).\r\n * Avoids computing bones velocities and computes only mesh's velocity itself (position, rotation, scaling).\r\n */\r\n public excludedSkinnedMeshesFromVelocity: AbstractMesh[] = [];\r\n\r\n /** Gets or sets a boolean indicating if transparent meshes should be rendered */\r\n public renderTransparentMeshes = true;\r\n\r\n /**\r\n * Gets or sets a boolean indicating if normals should be generated in world space (default: false, meaning normals are generated in view space)\r\n */\r\n public generateNormalsInWorldSpace = false;\r\n\r\n private _normalsAreUnsigned = false;\r\n\r\n /**\r\n * Gets a boolean indicating if normals are encoded in the [0,1] range in the render target. If true, you should do `normal = normal_rt * 2.0 - 1.0` to get the right normal\r\n */\r\n public get normalsAreUnsigned() {\r\n return this._normalsAreUnsigned;\r\n }\r\n\r\n private _scene: Scene;\r\n private _resizeObserver: Nullable<Observer<AbstractEngine>> = null;\r\n private _multiRenderTarget: MultiRenderTarget;\r\n private _textureTypesAndFormats: { [key: number]: { textureType: number; textureFormat: number } };\r\n private _ratioOrDimensions: number | { width: number; height: number };\r\n private _enableDepth: boolean = true;\r\n private _enableNormal: boolean = true;\r\n private _enablePosition: boolean = false;\r\n private _enableVelocity: boolean = false;\r\n private _enableVelocityLinear: boolean = false;\r\n private _enableReflectivity: boolean = false;\r\n private _enableScreenspaceDepth: boolean = false;\r\n private _depthFormat: number;\r\n private _clearColor = new Color4(0, 0, 0, 0);\r\n private _clearDepthColor = new Color4(1e8, 0, 0, 1); // \"infinity\" value - depth in the depth texture is view.z, not a 0..1 value!\r\n\r\n private _positionIndex: number = -1;\r\n private _velocityIndex: number = -1;\r\n private _velocityLinearIndex: number = -1;\r\n private _reflectivityIndex: number = -1;\r\n private _depthIndex: number = -1;\r\n private _normalIndex: number = -1;\r\n private _screenspaceDepthIndex: number = -1;\r\n\r\n private _linkedWithPrePass: boolean = false;\r\n private _prePassRenderer: PrePassRenderer;\r\n private _attachmentsFromPrePass: number[];\r\n private _useUbo: boolean;\r\n\r\n protected _cachedDefines: string;\r\n\r\n /**\r\n * @internal\r\n * Sets up internal structures to share outputs with PrePassRenderer\r\n * This method should only be called by the PrePassRenderer itself\r\n */\r\n public _linkPrePassRenderer(prePassRenderer: PrePassRenderer) {\r\n this._linkedWithPrePass = true;\r\n this._prePassRenderer = prePassRenderer;\r\n\r\n if (this._multiRenderTarget) {\r\n // prevents clearing of the RT since it's done by prepass\r\n this._multiRenderTarget.onClearObservable.clear();\r\n this._multiRenderTarget.onClearObservable.add(() => {\r\n // pass\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * @internal\r\n * Separates internal structures from PrePassRenderer so the geometry buffer can now operate by itself.\r\n * This method should only be called by the PrePassRenderer itself\r\n */\r\n public _unlinkPrePassRenderer() {\r\n this._linkedWithPrePass = false;\r\n this._createRenderTargets();\r\n }\r\n\r\n /**\r\n * @internal\r\n * Resets the geometry buffer layout\r\n */\r\n public _resetLayout() {\r\n this._enableDepth = true;\r\n this._enableNormal = true;\r\n this._enablePosition = false;\r\n this._enableReflectivity = false;\r\n this._enableVelocity = false;\r\n this._enableVelocityLinear = false;\r\n this._enableScreenspaceDepth = false;\r\n this._attachmentsFromPrePass = [];\r\n }\r\n\r\n /**\r\n * @internal\r\n * Replaces a texture in the geometry buffer renderer\r\n * Useful when linking textures of the prepass renderer\r\n */\r\n public _forceTextureType(geometryBufferType: number, index: number) {\r\n if (geometryBufferType === GeometryBufferRenderer.POSITION_TEXTURE_TYPE) {\r\n this._positionIndex = index;\r\n this._enablePosition = true;\r\n } else if (geometryBufferType === GeometryBufferRenderer.VELOCITY_TEXTURE_TYPE) {\r\n this._velocityIndex = index;\r\n this._enableVelocity = true;\r\n } else if (geometryBufferType === GeometryBufferRenderer.VELOCITY_LINEAR_TEXTURE_TYPE) {\r\n this._velocityLinearIndex = index;\r\n this._enableVelocityLinear = true;\r\n } else if (geometryBufferType === GeometryBufferRenderer.REFLECTIVITY_TEXTURE_TYPE) {\r\n this._reflectivityIndex = index;\r\n this._enableReflectivity = true;\r\n } else if (geometryBufferType === GeometryBufferRenderer.DEPTH_TEXTURE_TYPE) {\r\n this._depthIndex = index;\r\n this._enableDepth = true;\r\n } else if (geometryBufferType === GeometryBufferRenderer.NORMAL_TEXTURE_TYPE) {\r\n this._normalIndex = index;\r\n this._enableNormal = true;\r\n } else if (geometryBufferType === GeometryBufferRenderer.SCREENSPACE_DEPTH_TEXTURE_TYPE) {\r\n this._screenspaceDepthIndex = index;\r\n this._enableScreenspaceDepth = true;\r\n }\r\n }\r\n\r\n /**\r\n * @internal\r\n * Sets texture attachments\r\n * Useful when linking textures of the prepass renderer\r\n */\r\n public _setAttachments(attachments: number[]) {\r\n this._attachmentsFromPrePass = attachments;\r\n }\r\n\r\n /**\r\n * @internal\r\n * Replaces the first texture which is hard coded as a depth texture in the geometry buffer\r\n * Useful when linking textures of the prepass renderer\r\n */\r\n public _linkInternalTexture(internalTexture: InternalTexture) {\r\n this._multiRenderTarget.setInternalTexture(internalTexture, 0, false);\r\n }\r\n\r\n /**\r\n * Gets the render list (meshes to be rendered) used in the G buffer.\r\n */\r\n public get renderList() {\r\n return this._multiRenderTarget.renderList;\r\n }\r\n\r\n /**\r\n * Set the render list (meshes to be rendered) used in the G buffer.\r\n */\r\n public set renderList(meshes: Nullable<AbstractMesh[]>) {\r\n this._multiRenderTarget.renderList = meshes;\r\n }\r\n\r\n /**\r\n * Gets whether or not G buffer are supported by the running hardware.\r\n * This requires draw buffer supports\r\n */\r\n public get isSupported(): boolean {\r\n return this._multiRenderTarget.isSupported;\r\n }\r\n\r\n /**\r\n * Returns the index of the given texture type in the G-Buffer textures array\r\n * @param textureType The texture type constant. For example GeometryBufferRenderer.POSITION_TEXTURE_INDEX\r\n * @returns the index of the given texture type in the G-Buffer textures array\r\n */\r\n public getTextureIndex(textureType: number): number {\r\n switch (textureType) {\r\n case GeometryBufferRenderer.POSITION_TEXTURE_TYPE:\r\n return this._positionIndex;\r\n case GeometryBufferRenderer.VELOCITY_TEXTURE_TYPE:\r\n return this._velocityIndex;\r\n case GeometryBufferRenderer.VELOCITY_LINEAR_TEXTURE_TYPE:\r\n return this._velocityLinearIndex;\r\n case GeometryBufferRenderer.REFLECTIVITY_TEXTURE_TYPE:\r\n return this._reflectivityIndex;\r\n case GeometryBufferRenderer.DEPTH_TEXTURE_TYPE:\r\n return this._depthIndex;\r\n case GeometryBufferRenderer.NORMAL_TEXTURE_TYPE:\r\n return this._normalIndex;\r\n case GeometryBufferRenderer.SCREENSPACE_DEPTH_TEXTURE_TYPE:\r\n return this._screenspaceDepthIndex;\r\n default:\r\n return -1;\r\n }\r\n }\r\n\r\n /**\r\n * @returns a boolean indicating if object's depths are enabled for the G buffer.\r\n */\r\n public get enableDepth(): boolean {\r\n return this._enableDepth;\r\n }\r\n\r\n /**\r\n * Sets whether or not object's depths are enabled for the G buffer.\r\n */\r\n public set enableDepth(enable: boolean) {\r\n this._enableDepth = enable;\r\n\r\n if (!this._linkedWithPrePass) {\r\n this.dispose();\r\n this._createRenderTargets();\r\n }\r\n }\r\n\r\n /**\r\n * @returns a boolean indicating if object's normals are enabled for the G buffer.\r\n */\r\n public get enableNormal(): boolean {\r\n return this._enableNormal;\r\n }\r\n\r\n /**\r\n * Sets whether or not object's normals are enabled for the G buffer.\r\n */\r\n public set enableNormal(enable: boolean) {\r\n this._enableNormal = enable;\r\n\r\n if (!this._linkedWithPrePass) {\r\n this.dispose();\r\n this._createRenderTargets();\r\n }\r\n }\r\n\r\n /**\r\n * @returns a boolean indicating if objects positions are enabled for the G buffer.\r\n */\r\n public get enablePosition(): boolean {\r\n return this._enablePosition;\r\n }\r\n\r\n /**\r\n * Sets whether or not objects positions are enabled for the G buffer.\r\n */\r\n public set enablePosition(enable: boolean) {\r\n this._enablePosition = enable;\r\n\r\n // PrePass handles index and texture links\r\n if (!this._linkedWithPrePass) {\r\n this.dispose();\r\n this._createRenderTargets();\r\n }\r\n }\r\n\r\n /**\r\n * @returns a boolean indicating if objects velocities are enabled for the G buffer.\r\n */\r\n public get enableVelocity(): boolean {\r\n return this._enableVelocity;\r\n }\r\n\r\n /**\r\n * Sets whether or not objects velocities are enabled for the G buffer.\r\n */\r\n public set enableVelocity(enable: boolean) {\r\n this._enableVelocity = enable;\r\n\r\n if (!enable) {\r\n this._previousTransformationMatrices = {};\r\n }\r\n\r\n if (!this._linkedWithPrePass) {\r\n this.dispose();\r\n this._createRenderTargets();\r\n }\r\n\r\n this._scene.needsPreviousWorldMatrices = enable;\r\n }\r\n\r\n /**\r\n * @returns a boolean indicating if object's linear velocities are enabled for the G buffer.\r\n */\r\n public get enableVelocityLinear(): boolean {\r\n return this._enableVelocityLinear;\r\n }\r\n\r\n /**\r\n * Sets whether or not object's linear velocities are enabled for the G buffer.\r\n */\r\n public set enableVelocityLinear(enable: boolean) {\r\n this._enableVelocityLinear = enable;\r\n\r\n if (!this._linkedWithPrePass) {\r\n this.dispose();\r\n this._createRenderTargets();\r\n }\r\n }\r\n\r\n /**\r\n * Gets a boolean indicating if objects reflectivity are enabled in the G buffer.\r\n */\r\n public get enableReflectivity(): boolean {\r\n return this._enableReflectivity;\r\n }\r\n\r\n /**\r\n * Sets whether or not objects reflectivity are enabled for the G buffer.\r\n * For Metallic-Roughness workflow with ORM texture, we assume that ORM texture is defined according to the default layout:\r\n * pbr.useRoughnessFromMetallicTextureAlpha = false;\r\n * pbr.useRoughnessFromMetallicTextureGreen = true;\r\n * pbr.useMetallnessFromMetallicTextureBlue = true;\r\n */\r\n public set enableReflectivity(enable: boolean) {\r\n this._enableReflectivity = enable;\r\n\r\n if (!this._linkedWithPrePass) {\r\n this.dispose();\r\n this._createRenderTargets();\r\n }\r\n }\r\n\r\n /**\r\n * Sets whether or not objects screenspace depth are enabled for the G buffer.\r\n */\r\n public get enableScreenspaceDepth(): boolean {\r\n return this._enableScreenspaceDepth;\r\n }\r\n\r\n public set enableScreenspaceDepth(enable: boolean) {\r\n this._enableScreenspaceDepth = enable;\r\n\r\n if (!this._linkedWithPrePass) {\r\n this.dispose();\r\n this._createRenderTargets();\r\n }\r\n }\r\n\r\n /**\r\n * If set to true (default: false), the depth texture will be cleared with the depth value corresponding to the far plane (1 in normal mode, 0 in reverse depth buffer mode)\r\n * If set to false, the depth texture is always cleared with 0.\r\n */\r\n public useSpecificClearForDepthTexture = false;\r\n\r\n /**\r\n * Gets the scene associated with the buffer.\r\n */\r\n public get scene(): Scene {\r\n return this._scene;\r\n }\r\n\r\n /**\r\n * Gets the ratio used by the buffer during its creation.\r\n * How big is the buffer related to the main canvas.\r\n */\r\n public get ratio(): number {\r\n return typeof this._ratioOrDimensions === \"object\" ? 1 : this._ratioOrDimensions;\r\n }\r\n\r\n /** Shader language used by the material */\r\n protected _shaderLanguage = ShaderLanguage.GLSL;\r\n\r\n /**\r\n * Gets the shader language used in this material.\r\n */\r\n public get shaderLanguage(): ShaderLanguage {\r\n return this._shaderLanguage;\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n public static _SceneComponentInitialization: (scene: Scene) => void = (_) => {\r\n throw _WarnImport(\"GeometryBufferRendererSceneComponent\");\r\n };\r\n\r\n /**\r\n * Creates a new G Buffer for the scene\r\n * @param scene The scene the buffer belongs to\r\n * @param ratioOrDimensions How big is the buffer related to the main canvas (default: 1). You can also directly pass a width and height for the generated textures\r\n * @param depthFormat Format of the depth texture (default: Constants.TEXTUREFORMAT_DEPTH16)\r\n * @param textureTypesAndFormats The types and formats of textures to create as render targets. If not provided, all textures will be RGBA and float or half float, depending on the engine capabilities.\r\n */\r\n constructor(\r\n scene: Scene,\r\n ratioOrDimensions: number | { width: number; height: number } = 1,\r\n depthFormat = Constants.TEXTUREFORMAT_DEPTH16,\r\n textureTypesAndFormats?: { [key: number]: { textureType: number; textureFormat: number } }\r\n ) {\r\n this._scene = scene;\r\n this._ratioOrDimensions = ratioOrDimensions;\r\n this._useUbo = scene.getEngine().supportsUniformBuffers;\r\n this._depthFormat = depthFormat;\r\n this._textureTypesAndFormats = textureTypesAndFormats || {};\r\n\r\n this._initShaderSourceAsync();\r\n\r\n GeometryBufferRenderer._SceneComponentInitialization(this._scene);\r\n\r\n // Render target\r\n this._createRenderTargets();\r\n }\r\n\r\n private _shadersLoaded = false;\r\n\r\n private async _initShaderSourceAsync() {\r\n const engine = this._scene.getEngine();\r\n\r\n if (engine.isWebGPU && !GeometryBufferRenderer.ForceGLSL) {\r\n this._shaderLanguage = ShaderLanguage.WGSL;\r\n\r\n await Promise.all([import(\"../ShadersWGSL/geometry.vertex\"), import(\"../ShadersWGSL/geometry.fragment\")]);\r\n } else {\r\n await Promise.all([import(\"../Shaders/geometry.vertex\"), import(\"../Shaders/geometry.fragment\")]);\r\n }\r\n\r\n this._shadersLoaded = true;\r\n }\r\n\r\n /**\r\n * Checks whether everything is ready to render a submesh to the G buffer.\r\n * @param subMesh the submesh to check readiness for\r\n * @param useInstances is the mesh drawn using instance or not\r\n * @returns true if ready otherwise false\r\n */\r\n public isReady(subMesh: SubMesh, useInstances: boolean): boolean {\r\n if (!this._shadersLoaded) {\r\n return false;\r\n }\r\n\r\n const material = <any>subMesh.getMaterial();\r\n\r\n if (material && material.disableDepthWrite) {\r\n return false;\r\n }\r\n\r\n const defines = [];\r\n const attribs = [VertexBuffer.PositionKind, VertexBuffer.NormalKind];\r\n const mesh = subMesh.getMesh();\r\n\r\n if (material) {\r\n let needUv = false;\r\n // Alpha test\r\n if (material.needAlphaTesting() && material.getAlphaTestTexture()) {\r\n defines.push(\"#define ALPHATEST\");\r\n defines.push(`#define ALPHATEST_UV${material.getAlphaTestTexture().coordinatesIndex + 1}`);\r\n needUv = true;\r\n }\r\n\r\n // Normal map texture\r\n if ((material.bumpTexture || material.normalTexture) && MaterialFlags.BumpTextureEnabled) {\r\n const texture = material.bumpTexture || material.normalTexture;\r\n defines.push(\"#define BUMP\");\r\n defines.push(`#define BUMP_UV${texture.coordinatesIndex + 1}`);\r\n needUv = true;\r\n }\r\n\r\n if (this._enableReflectivity) {\r\n let metallicWorkflow = false;\r\n // for PBR materials: cf. https://doc.babylonjs.com/features/featuresDeepDive/materials/using/masterPBR\r\n if (material.getClassName() === \"PBRMetallicRoughnessMaterial\") {\r\n // if it is a PBR material in MetallicRoughness Mode:\r\n if (material.metallicRoughnessTexture) {\r\n defines.push(\"#define ORMTEXTURE\");\r\n defines.push(`#define REFLECTIVITY_UV${material.metallicRoughnessTexture.coordinatesIndex + 1}`);\r\n defines.push(\"#define METALLICWORKFLOW\");\r\n needUv = true;\r\n metallicWorkflow = true;\r\n }\r\n // null or undefined\r\n if (material.metallic != null) {\r\n defines.push(\"#define METALLIC\");\r\n defines.push(\"#define METALLICWORKFLOW\");\r\n metallicWorkflow = true;\r\n }\r\n // null or undefined\r\n if (material.roughness != null) {\r\n defines.push(\"#define ROUGHNESS\");\r\n defines.push(\"#define METALLICWORKFLOW\");\r\n metallicWorkflow = true;\r\n }\r\n if (metallicWorkflow) {\r\n if (material.baseTexture) {\r\n defines.push(\"#define ALBEDOTEXTURE\");\r\n defines.push(`#define ALBEDO_UV${material.baseTexture.coordinatesIndex + 1}`);\r\n if (material.baseTexture.gammaSpace) {\r\n defines.push(\"#define GAMMAALBEDO\");\r\n }\r\n needUv = true;\r\n }\r\n if (material.baseColor) {\r\n defines.push(\"#define ALBEDOCOLOR\");\r\n }\r\n }\r\n } else if (material.getClassName() === \"PBRSpecularGlossinessMaterial\") {\r\n // if it is a PBR material in Specular/Glossiness Mode:\r\n if (material.specularGlossinessTexture) {\r\n defines.push(\"#define SPECULARGLOSSINESSTEXTURE\");\r\n defines.push(`#define REFLECTIVITY_UV${material.specularGlossinessTexture.coordinatesIndex + 1}`);\r\n needUv = true;\r\n if (material.specularGlossinessTexture.gammaSpace) {\r\n defines.push(\"#define GAMMAREFLECTIVITYTEXTURE\");\r\n }\r\n } else {\r\n if (material.specularColor) {\r\n defines.push(\"#define REFLECTIVITYCOLOR\");\r\n }\r\n }\r\n // null or undefined\r\n if (material.glossiness != null) {\r\n defines.push(\"#define GLOSSINESS\");\r\n }\r\n } else if (material.getClassName() === \"PBRMaterial\") {\r\n // if it is the bigger PBRMaterial\r\n if (material.metallicTexture) {\r\n defines.push(\"#define ORMTEXTURE\");\r\n defines.push(`#define REFLECTIVITY_UV${material.metallicTexture.coordinatesIndex + 1}`);\r\n defines.push(\"#define METALLICWORKFLOW\");\r\n needUv = true;\r\n metallicWorkflow = true;\r\n }\r\n // null or undefined\r\n if (material.metallic != null) {\r\n defines.push(\"#define METALLIC\");\r\n defines.push(\"#define METALLICWORKFLOW\");\r\n metallicWorkflow = true;\r\n }\r\n\r\n // null or undefined\r\n if (material.roughness != null) {\r\n defines.push(\"#define ROUGHNESS\");\r\n defines.push(\"#define METALLICWORKFLOW\");\r\n metallicWorkflow = true;\r\n }\r\n\r\n if (metallicWorkflow) {\r\n if (material.albedoTexture) {\r\n defines.push(\"#define ALBEDOTEXTURE\");\r\n defines.push(`#define ALBEDO_UV${material.albedoTexture.coordinatesIndex + 1}`);\r\n if (material.albedoTexture.gammaSpace) {\r\n defines.push(\"#define GAMMAALBEDO\");\r\n }\r\n needUv = true;\r\n }\r\n if (material.albedoColor) {\r\n defines.push(\"#define ALBEDOCOLOR\");\r\n }\r\n } else {\r\n // SpecularGlossiness Model\r\n if (material.reflectivityTexture) {\r\n defines.push(\"#define SPECULARGLOSSINESSTEXTURE\");\r\n defines.push(`#define REFLECTIVITY_UV${material.reflectivityTexture.coordinatesIndex + 1}`);\r\n if (material.reflectivityTexture.gammaSpace) {\r\n defines.push(\"#define GAMMAREFLECTIVITYTEXTURE\");\r\n }\r\n needUv = true;\r\n } else if (material.reflectivityColor) {\r\n defines.push(\"#define REFLECTIVITYCOLOR\");\r\n }\r\n // null or undefined\r\n if (material.microSurface != null) {\r\n defines.push(\"#define GLOSSINESS\");\r\n }\r\n }\r\n } else if (material.getClassName() === \"StandardMaterial\") {\r\n // if StandardMaterial:\r\n if (material.specularTexture) {\r\n defines.push(\"#define REFLECTIVITYTEXTURE\");\r\n defines.push(`#define REFLECTIVITY_UV${material.specularTexture.coordinatesIndex + 1}`);\r\n if (material.specularTexture.gammaSpace) {\r\n defines.push(\"#define GAMMAREFLECTIVITYTEXTURE\");\r\n }\r\n needUv = true;\r\n }\r\n if (material.specularColor) {\r\n defines.push(\"#define REFLECTIVITYCOLOR\");\r\n }\r\n }\r\n }\r\n\r\n if (needUv) {\r\n defines.push(\"#define NEED_UV\");\r\n if (mesh.isVerticesDataPresent(VertexBuffer.UVKind)) {\r\n attribs.push(VertexBuffer.UVKind);\r\n defines.push(\"#define UV1\");\r\n }\r\n if (mesh.isVerticesDataPresent(VertexBuffer.UV2Kind)) {\r\n attribs.push(VertexBuffer.UV2Kind);\r\n defines.push(\"#define UV2\");\r\n }\r\n }\r\n }\r\n\r\n // Buffers\r\n if (this._enableDepth) {\r\n defines.push(\"#define DEPTH\");\r\n defines.push(\"#define DEPTH_INDEX \" + this._depthIndex);\r\n }\r\n\r\n if (this._enableNormal) {\r\n defines.push(\"#define NORMAL\");\r\n defines.push(\"#define NORMAL_INDEX \" + this._normalIndex);\r\n }\r\n\r\n if (this._enablePosition) {\r\n defines.push(\"#define POSITION\");\r\n defines.push(\"#define POSITION_INDEX \" + this._positionIndex);\r\n }\r\n\r\n if (this._enableVelocity) {\r\n defines.push(\"#define VELOCITY\");\r\n defines.push(\"#define VELOCITY_INDEX \" + this._velocityIndex);\r\n if (this.excludedSkinnedMeshesFromVelocity.indexOf(mesh) === -1) {\r\n defines.push(\"#define BONES_VELOCITY_ENABLED\");\r\n }\r\n }\r\n\r\n if (this._enableVelocityLinear) {\r\n defines.push(\"#define VELOCITY_LINEAR\");\r\n defines.push(\"#define VELOCITY_LINEAR_INDEX \" + this._velocityLinearIndex);\r\n if (this.excludedSkinnedMeshesFromVelocity.indexOf(mesh) === -1) {\r\n defines.push(\"#define BONES_VELOCITY_ENABLED\");\r\n }\r\n }\r\n\r\n if (this._enableReflectivity) {\r\n defines.push(\"#define REFLECTIVITY\");\r\n defines.push(\"#define REFLECTIVITY_INDEX \" + this._reflectivityIndex);\r\n }\r\n\r\n if (this._enableScreenspaceDepth) {\r\n if (this._screenspaceDepthIndex !== -1) {\r\n defines.push(\"#define SCREENSPACE_DEPTH_INDEX \" + this._screenspaceDepthIndex);\r\n defines.push(\"#define SCREENSPACE_DEPTH\");\r\n }\r\n }\r\n\r\n if (this.generateNormalsInWorldSpace) {\r\n defines.push(\"#define NORMAL_WORLDSPACE\");\r\n }\r\n\r\n if (this._normalsAreUnsigned) {\r\n defines.push(\"#define ENCODE_NORMAL\");\r\n }\r\n\r\n // Bones\r\n if (mesh.useBones && mesh.computeBonesUsingShaders && mesh.skeleton) {\r\n attribs.push(VertexBuffer.MatricesIndicesKind);\r\n attribs.push(VertexBuffer.MatricesWeightsKind);\r\n if (mesh.numBoneInfluencers > 4) {\r\n attribs.push(VertexBuffer.MatricesIndicesExtraKind);\r\n attribs.push(VertexBuffer.MatricesWeightsExtraKind);\r\n }\r\n defines.push(\"#define NUM_BONE_INFLUENCERS \" + mesh.numBoneInfluencers);\r\n defines.push(\"#define BONETEXTURE \" + mesh.skeleton.isUsingTextureForMatrices);\r\n defines.push(\"#define BonesPerMesh \" + (mesh.skeleton.bones.length + 1));\r\n } else {\r\n defines.push(\"#define NUM_BONE_INFLUENCERS 0\");\r\n defines.push(\"#define BONETEXTURE false\");\r\n defines.push(\"#define BonesPerMesh 0\");\r\n }\r\n\r\n // Morph targets\r\n const morphTargetManager = (mesh as Mesh).morphTargetManager;\r\n let numMorphInfluencers = 0;\r\n if (morphTargetManager) {\r\n numMorphInfluencers = morphTargetManager.numMaxInfluencers || morphTargetManager.numInfluencers;\r\n if (numMorphInfluencers > 0) {\r\n defines.push(\"#define MORPHTARGETS\");\r\n defines.push(\"#define NUM_MORPH_INFLUENCERS \" + numMorphInfluencers);\r\n if (morphTargetManager.isUsingTextureForTargets) {\r\n defines.push(\"#define MORPHTARGETS_TEXTURE\");\r\n }\r\n PrepareAttributesForMorphTargetsInfluencers(attribs, mesh, numMorphInfluencers);\r\n }\r\n }\r\n\r\n // Instances\r\n if (useInstances) {\r\n defines.push(\"#define INSTANCES\");\r\n PushAttributesForInstances(attribs, this._enableVelocity || this._enableVelocityLinear);\r\n if (subMesh.getRenderingMesh().hasThinInstances) {\r\n defines.push(\"#define THIN_INSTANCES\");\r\n }\r\n }\r\n\r\n // Setup textures count\r\n if (this._linkedWithPrePass) {\r\n defines.push(\"#define SCENE_MRT_COUNT \" + this._attachmentsFromPrePass.length);\r\n } else {\r\n defines.push(\"#define SCENE_MRT_COUNT \" + this._multiRenderTarget.textures.length);\r\n }\r\n\r\n prepareStringDefinesForClipPlanes(material, this._scene, defines);\r\n\r\n // Get correct effect\r\n const engine = this._scene.getEngine();\r\n const drawWrapper = subMesh._getDrawWrapper(undefined, true)!;\r\n const cachedDefines = drawWrapper.defines;\r\n const join = defines.join(\"\\n\");\r\n if (cachedDefines !== join) {\r\n drawWrapper.setEffect(\r\n engine.createEffect(\r\n \"geometry\",\r\n {\r\n attributes: attribs,\r\n uniformsNames: uniforms,\r\n samplers: [\"diffuseSampler\", \"bumpSampler\", \"reflectivitySampler\", \"albedoSampler\", \"morphTargets\", \"boneSampler\"],\r\n defines: join,\r\n onCompiled: null,\r\n fallbacks: null,\r\n onError: null,\r\n uniformBuffersNames: [\"Scene\"],\r\n indexParameters: { buffersCount: this._multiRenderTarget.textures.length - 1, maxSimultaneousMorphTargets: numMorphInfluencers },\r\n shaderLanguage: this.shaderLanguage,\r\n },\r\n engine\r\n ),\r\n join\r\n );\r\n }\r\n\r\n return drawWrapper.effect!.isReady();\r\n }\r\n\r\n /**\r\n * Gets the current underlying G Buffer.\r\n * @returns the buffer\r\n */\r\n public getGBuffer(): MultiRenderTarget {\r\n return this._multiRenderTarget;\r\n }\r\n\r\n /**\r\n * Gets the number of samples used to render the buffer (anti aliasing).\r\n */\r\n public get samples(): number {\r\n return this._multiRenderTarget.samples;\r\n }\r\n\r\n /**\r\n * Sets the number of samples used to render the buffer (anti aliasing).\r\n */\r\n public set samples(value: number) {\r\n this._multiRenderTarget.samples = value;\r\n }\r\n\r\n /**\r\n * Disposes the renderer and frees up associated resources.\r\n */\r\n public dispose(): void {\r\n if (this._resizeObserver) {\r\n const engine = this._scene.getEngine();\r\n engine.onResizeObservable.remove(this._resizeObserver);\r\n this._resizeObserver = null;\r\n }\r\n this.getGBuffer().dispose();\r\n }\r\n\r\n private _assignRenderTargetIndices(): [number, string[], Array<{ textureType: number; textureFormat: number } | undefined>] {\r\n const textureNames: string[] = [];\r\n const textureTypesAndFormats: Array<{ textureType: number; textureFormat: number } | undefined> = [];\r\n let count = 0;\r\n\r\n if (this._enableDepth) {\r\n this._depthIndex = count;\r\n count++;\r\n textureNames.push(\"gBuffer_Depth\");\r\n textureTypesAndFormats.push(this._textureTypesAndFormats[GeometryBufferRenderer.DEPTH_TEXTURE_TYPE]);\r\n }\r\n\r\n if (this._enableNormal) {\r\n this._normalIndex = count;\r\n count++;\r\n textureNames.push(\"gBuffer_Normal\");\r\n textureTypesAndFormats.push(this._textureTypesAndFormats[GeometryBufferRenderer.NORMAL_TEXTURE_TYPE]);\r\n }\r\n\r\n if (this._enablePosition) {\r\n this._positionIndex = count;\r\n count++;\r\n textureNames.push(\"gBuffer_Position\");\r\n textureTypesAndFormats.push(this._textureTypesAndFormats[GeometryBufferRenderer.POSITION_TEXTURE_TYPE]);\r\n }\r\n\r\n if (this._enableVelocity) {\r\n this._velocityIndex = count;\r\n count++;\r\n textureNames.push(\"gBuffer_Velocity\");\r\n textureTypesAndFormats.push(this._textureTypesAndFormats[GeometryBufferRenderer.VELOCITY_TEXTURE_TYPE]);\r\n }\r\n\r\n if (this._enableVelocityLinear) {\r\n this._velocityLinearIndex = count;\r\n count++;\r\n textureNames.push(\"gBuffer_VelocityLinear\");\r\n textureTypesAndFormats.push(this._textureTypesAndFormats[GeometryBufferRenderer.VELOCITY_LINEAR_TEXTURE_TYPE]);\r\n }\r\n\r\n if (this._enableReflectivity) {\r\n this._reflectivityIndex = count;\r\n count++;\r\n textureNames.push(\"gBuffer_Reflectivity\");\r\n textureTypesAndFormats.push(this._textureTypesAndFormats[GeometryBufferRenderer.REFLECTIVITY_TEXTURE_TYPE]);\r\n }\r\n\r\n if (this._enableScreenspaceDepth) {\r\n this._screenspaceDepthIndex = count;\r\n count++;\r\n textureNames.push(\"gBuffer_ScreenspaceDepth\");\r\n textureTypesAndFormats.push(this._textureTypesAndFormats[GeometryBufferRenderer.SCREENSPACE_DEPTH_TEXTURE_TYPE]);\r\n }\r\n\r\n return [count, textureNames, textureTypesAndFormats];\r\n }\r\n\r\n protected _createRenderTargets(): void {\r\n const engine = this._scene.getEngine();\r\n const [count, textureNames, textureTypesAndFormat] = this._assignRenderTargetIndices();\r\n\r\n let type = Constants.TEXTURETYPE_UNSIGNED_BYTE;\r\n if (engine._caps.textureFloat && engine._caps.textureFloatLinearFiltering) {\r\n type = Constants.TEXTURETYPE_FLOAT;\r\n } else if (engine._caps.textureHalfFloat && engine._caps.textureHalfFloatLinearFiltering) {\r\n type = Constants.TEXTURETYPE_HALF_FLOAT;\r\n }\r\n\r\n const dimensions =\r\n (this._ratioOrDimensions as any).width !== undefined\r\n ? (this._ratioOrDimensions as { width: number; height: number })\r\n : { width: engine.getRenderWidth() * (this._ratioOrDimensions as number), height: engine.getRenderHeight() * (this._ratioOrDimensions as number) };\r\n\r\n const textureTypes: number[] = [];\r\n const textureFormats: number[] = [];\r\n\r\n for (const typeAndFormat of textureTypesAndFormat) {\r\n if (typeAndFormat) {\r\n textureTypes.push(typeAndFormat.textureType);\r\n textureFormats.push(typeAndFormat.textureFormat);\r\n } else {\r\n textureTypes.push(type);\r\n textureFormats.push(Constants.TEXTUREFORMAT_RGBA);\r\n }\r\n }\r\n\r\n this._normalsAreUnsigned =\r\n textureTypes[GeometryBufferRenderer.NORMAL_TEXTURE_TYPE] === Constants.TEXTURETYPE_UNSIGNED_INT_2_10_10_10_REV ||\r\n textureTypes[GeometryBufferRenderer.NORMAL_TEXTURE_TYPE] === Constants.TEXTURETYPE_UNSIGNED_INT_10F_11F_11F_REV;\r\n\r\n this._multiRenderTarget = new MultiRenderTarget(\r\n \"gBuffer\",\r\n dimensions,\r\n count,\r\n this._scene,\r\n { generateMipMaps: false, generateDepthTexture: true, types: textureTypes, formats: textureFormats, depthTextureFormat: this._depthFormat },\r\n textureNames.concat(\"gBuffer_DepthBuffer\")\r\n );\r\n if (!this.isSupported) {\r\n return;\r\n }\r\n this._multiRenderTarget.wrapU = Texture.CLAMP_ADDRESSMODE;\r\n this._multiRenderTarget.wrapV = Texture.CLAMP_ADDRESSMODE;\r\n this._multiRenderTarget.refreshRate = 1;\r\n this._multiRenderTarget.renderParticles = false;\r\n this._multiRenderTarget.renderList = null;\r\n\r\n // Depth is always the first texture in the geometry buffer renderer!\r\n const layoutAttachmentsAll = [true];\r\n const layoutAttachmentsAllButDepth = [false];\r\n const layoutAttachmentsDepthOnly = [true];\r\n\r\n for (let i = 1; i < count; ++i) {\r\n layoutAttachmentsAll.push(true);\r\n layoutAttachmentsDepthOnly.push(false);\r\n layoutAttachmentsAllButDepth.push(true);\r\n }\r\n\r\n const attachmentsAll = engine.buildTextureLayout(layoutAttachmentsAll);\r\n const attachmentsAllButDepth = engine.buildTextureLayout(layoutAttachmentsAllButDepth);\r\n const attachmentsDepthOnly = engine.buildTextureLayout(layoutAttachmentsDepthOnly);\r\n\r\n this._multiRenderTarget.onClearObservable.add((engine) => {\r\n engine.bindAttachments(this.useSpecificClearForDepthTexture ? attachmentsAllButDepth : attachmentsAll);\r\n engine.clear(this._clearColor, true, true, true);\r\n if (this.useSpecificClearForDepthTexture) {\r\n engine.bindAttachments(attachmentsDepthOnly);\r\n engine.clear(this._clearDepthColor, true, true, true);\r\n }\r\n engine.bindAttachments(attachmentsAll);\r\n });\r\n\r\n this._resizeObserver = engine.onResizeObservable.add(() => {\r\n if (this._multiRenderTarget) {\r\n const dimensions =\r\n (this._ratioOrDimensions as any).width !== undefined\r\n ? (this._ratioOrDimensions as { width: number; height: number })\r\n : { width: engine.getRenderWidth() * (this._ratioOrDimensions as number), height: engine.getRenderHeight() * (this._ratioOrDimensions as number) };\r\n this._multiRenderTarget.resize(dimensions);\r\n }\r\n });\r\n\r\n // Custom render function\r\n const renderSubMesh = (subMesh: SubMesh): void => {\r\n const renderingMesh = subMesh.getRenderingMesh();\r\n const effectiveMesh = subMesh.getEffectiveMesh();\r\n const scene = this._scene;\r\n const engine = scene.getEngine();\r\n const material = <any>subMesh.getMaterial();\r\n\r\n if (!material) {\r\n return;\r\n }\r\n\r\n effectiveMesh._internalAbstractMeshDataInfo._isActiveIntermediate = false;\r\n\r\n // Velocity\r\n if ((this._enableVelocity || this._enableVelocityLinear) && !this._previousTransformationMatrices[effectiveMesh.uniqueId]) {\r\n this._previousTransformationMatrices[effectiveMesh.uniqueId] = {\r\n world: Matrix.Identity(),\r\n viewProjection: scene.getTransformMatrix(),\r\n };\r\n\r\n if (renderingMesh.skeleton) {\r\n const bonesTransformations = renderingMesh.skeleton.getTransformMatrices(renderingMesh);\r\n this._previousBonesTransformationMatrices[renderingMesh.uniqueId] = this._copyBonesTransformationMatrices(\r\n bonesTransformations,\r\n new Float32Array(bonesTransformations.length)\r\n );\r\n }\r\n }\r\n\r\n // Managing instances\r\n const batch = renderingMesh._getInstancesRenderList(subMesh._id, !!subMesh.getReplacementMesh());\r\n\r\n if (batch.mustReturn) {\r\n return;\r\n }\r\n\r\n const hardwareInstancedRendering = engine.getCaps().instancedArrays && (batch.visibleInstances[subMesh._id] !== null || renderingMesh.hasThinInstances);\r\n const world = effectiveMesh.getWorldMatrix();\r\n\r\n if (this.isReady(subMesh, hardwareInstancedRendering)) {\r\n const drawWrapper = subMesh._getDrawWrapper();\r\n\r\n if (!drawWrapper) {\r\n return;\r\n }\r\n\r\n const effect = drawWrapper.effect!;\r\n\r\n engine.enableEffect(drawWrapper);\r\n if (!hardwareInstancedRendering) {\r\n renderingMesh._bind(subMesh, effect, material.fillMode);\r\n }\r\n\r\n if (!this._useUbo) {\r\n effect.setMatrix(\"viewProjection\", scene.getTransformMatrix());\r\n effect.setMatrix(\"view\", scene.getViewMatrix());\r\n } else {\r\n BindSceneUniformBuffer(effect, this._scene.getSceneUniformBuffer());\r\n this._scene.finalizeSceneUbo();\r\n }\r\n\r\n let sideOrientation: Nullable<number>;\r\n const instanceDataStorage = (renderingMesh as Mesh)._instanceDataStorage;\r\n\r\n if (!instanceDataStorage.isFrozen && (material.backFaceCulling || material.sideOrientation !== null)) {\r\n const mainDeterminant = effectiveMesh._getWorldMatrixDeterminant();\r\n sideOrientation = material._getEffectiveOrientation(renderingMesh);\r\n\r\n if (mainDeterminant < 0) {\r\n sideOrientation = sideOrientation === Material.ClockWiseSideOrientation ? Material.CounterClockWiseSideOrientation : Material.ClockWiseSideOrientation;\r\n }\r\n } else {\r\n sideOrientation = instanceDataStorage.sideOrientation;\r\n }\r\n\r\n material._preBind(drawWrapper, sideOrientation);\r\n\r\n // Alpha test\r\n if (material.needAlphaTesting()) {\r\n const alphaTexture = material.getAlphaTestTexture();\r\n if (alphaTexture) {\r\n effect.setTexture(\"diffuseSampler\", alphaTexture);\r\n effect.setMatrix(\"diffuseMatrix\", alphaTexture.getTextureMatrix());\r\n }\r\n }\r\n\r\n // Bump\r\n if ((material.bumpTexture || material.normalTexture) && scene.getEngine().getCaps().standardDerivatives && MaterialFlags.BumpTextureEnabled) {\r\n const texture = material.bumpTexture || material.normalTexture;\r\n effect.setFloat3(\"vBumpInfos\", texture.coordinatesIndex, 1.0 / texture.level, material.parallaxScaleBias);\r\n effect.setMatrix(\"bumpMatrix\", texture.getTextureMatrix());\r\n effect.setTexture(\"bumpSampler\", texture);\r\n effect.setFloat2(\"vTangentSpaceParams\", material.invertNormalMapX ? -1.0 : 1.0, material.invertNormalMapY ? -1.0 : 1.0);\r\n }\r\n\r\n // Reflectivity\r\n if (this._enableReflectivity) {\r\n // for PBR materials: cf. https://doc.babylonjs.com/features/featuresDeepDive/materials/using/masterPBR\r\n if (material.getClassName() === \"PBRMetallicRoughnessMaterial\") {\r\n // if it is a PBR material in MetallicRoughness Mode:\r\n if (material.metallicRoughnessTexture !== null) {\r\n effect.setTexture(\"reflectivitySampler\", material.metallicRoughnessTexture);\r\n effect.setMatrix(\"reflectivityMatrix\", material.metallicRoughnessTexture.getTextureMatrix());\r\n }\r\n if (material.metallic !== null) {\r\n effect.setFloat(\"metallic\", material.metallic);\r\n }\r\n if (material.roughness !== null) {\r\n effect.setFloat(\"glossiness\", 1.0 - material.roughness);\r\n }\r\n if (material.baseTexture !== null) {\r\n effect.setTexture(\"albedoSampler\", material.baseTexture);\r\n effect.setMatrix(\"albedoMatrix\", material.baseTexture.getTextureMatrix());\r\n }\r\n if (material.baseColor !== null) {\r\n effect.setColor3(\"albedoColor\", material.baseColor);\r\n }\r\n } else if (material.getClassName() === \"PBRSpecularGlossinessMaterial\") {\r\n // if it is a PBR material in Specular/Glossiness Mode:\r\n if (material.specularGlossinessTexture !== null) {\r\n effect.setTexture(\"reflectivitySampler\", material.specularGlossinessTexture);\r\n effect.setMatrix(\"reflectivityMatrix\", material.specularGlossinessTexture.getTextureMatrix());\r\n } else {\r\n if (material.specularColor !== null) {\r\n effect.setColor3(\"reflectivityColor\", material.specularColor);\r\n }\r\n }\r\n if (material.glossiness !== null) {\r\n effect.setFloat(\"glossiness\", material.glossiness);\r\n }\r\n } else if (material.getClassName() === \"PBRMaterial\") {\r\n // if it is the bigger PBRMaterial\r\n if (material.metallicTexture !== null) {\r\n effect.setTexture(\"reflectivitySampler\", material.metallicTexture);\r\n effect.setMatrix(\"reflectivityMatrix\", material.metallicTexture.getTextureMatrix());\r\n }\r\n if (material.metallic !== null) {\r\n effect.setFloat(\"metallic\", material.metallic);\r\n }\r\n\r\n if (material.roughness !== null) {\r\n effect.setFloat(\"glossiness\", 1.0 - material.roughness);\r\n }\r\n\r\n if (material.roughness !== null || material.metallic !== null || material.metallicTexture !== null) {\r\n // MetallicRoughness Model\r\n if (material.albedoTexture !== null) {\r\n effect.setTexture(\"albedoSampler\", material.albedoTexture);\r\n effect.setMatrix(\"albedoMatrix\", material.albedoTexture.getTextureMatrix());\r\n }\r\n if (material.albedoColor !== null) {\r\n effect.setColor3(\"albedoColor\", material.albedoColor);\r\n }\r\n } else {\r\n // SpecularGlossiness Model\r\n if (material.reflectivityTexture !== null) {\r\n effect.setTexture(\"reflectivitySampler\", material.reflectivityTexture);\r\n effect.setMatrix(\"reflectivityMatrix\", material.reflectivityTexture.getTextureMatrix());\r\n } else if (material.reflectivityColor !== null) {\r\n effect.setColor3(\"reflectivityColor\", material.reflectivityColor);\r\n }\r\n if (material.microSurface !== null) {\r\n effect.setFloat(\"glossiness\", material.microSurface);\r\n }\r\n }\r\n } else if (material.getClassName() === \"StandardMaterial\") {\r\n // if StandardMaterial:\r\n if (material.specularTexture !== null) {\r\n effect.setTexture(\"reflectivitySampler\", material.specularTexture);\r\n effect.setMatrix(\"reflectivityMatrix\", material.specularTexture.getTextureMatrix());\r\n }\r\n if (material.specularColor !== null) {\r\n effect.setColor3(\"reflectivityColor\", material.specularColor);\r\n }\r\n }\r\n }\r\n\r\n // Clip plane\r\n bindClipPlane(effect, material, this._scene);\r\n\r\n // Bones\r\n if (renderingMesh.useBones && renderingMesh.computeBonesUsingShaders && renderingMesh.skeleton) {\r\n const skeleton = renderingMesh.skeleton;\r\n\r\n if (skeleton.isUsingTextureForMatrices && effect.getUniformIndex(\"boneTextureWidth\") > -1) {\r\n const boneTexture = skeleton.getTransformMatrixTexture(renderingMesh);\r\n effect.setTexture(\"boneSampler\", boneTexture);\r\n effect.setFloat(\"boneTextureWidth\", 4.0 * (skeleton.bones.length + 1));\r\n } else {\r\n effect.setMatrices(\"mBones\", renderingMesh.skeleton.getTransformMatrices(renderingMesh));\r\n }\r\n\r\n if (this._enableVelocity || this._enableVelocityLinear) {\r\n effect.setMatrices(\"mPreviousBones\", this._previousBonesTransformationMatrices[renderingMesh.uniqueId]);\r\n }\r\n }\r\n\r\n // Morph targets\r\n BindMorphTargetParameters(renderingMesh, effect);\r\n if (renderingMesh.morphTargetManager && renderingMesh.morphTargetManager.isUsingTextureForTargets) {\r\n renderingMesh.morphTargetManager._bind(effect);\r\n }\r\n\r\n // Velocity\r\n if (this._enableVelocity || this._enableVelocityLinear) {\r\n effect.setMatrix(\"previousWorld\", this._previousTransformationMatrices[effectiveMesh.uniqueId].world);\r\n effect.setMatrix(\"previousViewProjection\", this._previousTransformationMatrices[effectiveMesh.uniqueId].viewProjection);\r\n }\r\n\r\n if (hardwareInstancedRendering && renderingMesh.hasThinInstances) {\r\n effect.setMatrix(\"world\", world);\r\n }\r\n\r\n // Draw\r\n renderingMesh._processRendering(effectiveMesh, subMesh, effect, material.fillMode, batch, hardwareInstancedRendering, (isInstance, w) => {\r\n if (!isInstance) {\r\n effect.setMatrix(\"world\", w);\r\n }\r\n });\r\n }\r\n\r\n // Velocity\r\n if (this._enableVelocity || this._enableVelocityLinear) {\r\n this._previousTransformationMatrices[effectiveMesh.uniqueId].world = world.clone();\r\n this._previousTransformationMatrices[effectiveMesh.uniqueId].viewProjection = this._scene.getTransformMatrix().clone();\r\n if (renderingMesh.skeleton) {\r\n this._copyBonesTransformationMatrices(\r\n renderingMesh.skeleton.getTransformMatrices(renderingMesh),\r\n this._previousBonesTransformationMatrices[effectiveMesh.uniqueId]\r\n );\r\n }\r\n }\r\n };\r\n\r\n this._multiRenderTarget.customIsReadyFunction = (mesh: AbstractMesh, refreshRate: number, preWarm?: boolean) => {\r\n if ((preWarm || refreshRate === 0) && mesh.subMeshes) {\r\n for (let i = 0; i < mesh.subMeshes.length; ++i) {\r\n const subMesh = mesh.subMeshes[i];\r\n const material = subMesh.getMaterial();\r\n const renderingMesh = subMesh.getRenderingMesh();\r\n\r\n if (!material) {\r\n continue;\r\n }\r\n\r\n const batch = renderingMesh._getInstancesRenderList(subMesh._id, !!subMesh.getReplacementMesh());\r\n const hardwareInstancedRendering = engine.getCaps().instancedArrays && (batch.visibleInstances[subMesh._id] !== null || renderingMesh.hasThinInstances);\r\n\r\n if (!this.isReady(subMesh, hardwareInstancedRendering)) {\r\n return false;\r\n }\r\n }\r\n }\r\n\r\n return true;\r\n };\r\n\r\n this._multiRenderTarget.customRenderFunction = (\r\n opaqueSubMeshes: SmartArray<SubMesh>,\r\n alphaTestSubMeshes: SmartArray<SubMesh>,\r\n transparentSubMeshes: SmartArray<SubMesh>,\r\n depthOnlySubMeshes: SmartArray<SubMesh>\r\n ): void => {\r\n let index;\r\n\r\n if (this._linkedWithPrePass) {\r\n if (!this._prePassRenderer.enabled) {\r\n return;\r\n }\r\n this._scene.getEngine().bindAttachments(this._attachmentsFromPrePass);\r\n }\r\n\r\n if (depthOnlySubMeshes.length) {\r\n engine.setColorWrite(false);\r\n for (index = 0; index < depthOnlySubMeshes.length; index++) {\r\n renderSubMesh(depthOnlySubMeshes.data[index]);\r\n }\r\n engine.setColorWrite(true);\r\n }\r\n\r\n for (index = 0; index < opaqueSubMeshes.length; index++) {\r\n renderSubMesh(opaqueSubMeshes.data[index]);\r\n }\r\n\r\n engine.setDepthWrite(false);\r\n for (index = 0; index < alphaTestSubMeshes.length; index++) {\r\n renderSubMesh(alphaTestSubMeshes.data[index]);\r\n }\r\n\r\n if (this.renderTransparentMeshes) {\r\n for (index = 0; index < transparentSubMeshes.length; index++) {\r\n renderSubMesh(transparentSubMeshes.data[index]);\r\n }\r\n }\r\n engine.setDepthWrite(true);\r\n };\r\n }\r\n\r\n // Copies the bones transformation matrices into the target array and returns the target's reference\r\n private _copyBonesTransformationMatrices(source: Float32Array, target: Float32Array): Float32Array {\r\n for (let i = 0; i < source.length; i++) {\r\n target[i] = source[i];\r\n }\r\n\r\n return target;\r\n }\r\n}\r\n"]}
@@ -74,7 +74,7 @@ vCurrentPosition=viewProjection*finalWorld*vec4(positionUpdated,1.0);vPreviousPo
74
74
  #include<bakedVertexAnimation>
75
75
  vec4 worldPos=vec4(finalWorld*vec4(positionUpdated,1.0));
76
76
  #ifdef BUMP
77
- vWorldView=view*finalWorld;vNormalW=normalUpdated;
77
+ vWorldView=view*finalWorld;mat3 normalWorld=mat3(finalWorld);vNormalW=normalize(normalWorld*normalUpdated);
78
78
  #else
79
79
  #ifdef NORMAL_WORLDSPACE
80
80
  vNormalV=normalize(vec3(finalWorld*vec4(normalUpdated,0.0)));
@@ -1 +1 @@
1
- {"version":3,"file":"geometry.vertex.js","sourceRoot":"","sources":["../../../../dev/core/src/Shaders/geometry.vertex.ts"],"names":[],"mappings":"AAAA,eAAe;AACf,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,mCAAmC,CAAC;AAC3C,OAAO,kDAAkD,CAAC;AAC1D,OAAO,sDAAsD,CAAC;AAC9D,OAAO,gDAAgD,CAAC;AACxD,OAAO,uCAAuC,CAAC;AAC/C,OAAO,4CAA4C,CAAC;AACpD,OAAO,yCAAyC,CAAC;AACjD,OAAO,6CAA6C,CAAC;AACrD,OAAO,2CAA2C,CAAC;AACnD,OAAO,qCAAqC,CAAC;AAC7C,OAAO,kCAAkC,CAAC;AAC1C,OAAO,8BAA8B,CAAC;AACtC,OAAO,uCAAuC,CAAC;AAC/C,OAAO,kCAAkC,CAAC;AAC1C,OAAO,6BAA6B,CAAC;AAErC,MAAM,IAAI,GAAG,sBAAsB,CAAC;AACpC,MAAM,MAAM,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA0Id,CAAC;AACF,aAAa;AACb,WAAW,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC;AACxC,gBAAgB;AAChB,MAAM,CAAC,MAAM,oBAAoB,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC","sourcesContent":["// Do not edit.\nimport { ShaderStore } from \"../Engines/shaderStore\";\nimport \"./ShadersInclude/bonesDeclaration\";\nimport \"./ShadersInclude/bakedVertexAnimationDeclaration\";\nimport \"./ShadersInclude/morphTargetsVertexGlobalDeclaration\";\nimport \"./ShadersInclude/morphTargetsVertexDeclaration\";\nimport \"./ShadersInclude/instancesDeclaration\";\nimport \"./ShadersInclude/geometryVertexDeclaration\";\nimport \"./ShadersInclude/geometryUboDeclaration\";\nimport \"./ShadersInclude/clipPlaneVertexDeclaration\";\nimport \"./ShadersInclude/morphTargetsVertexGlobal\";\nimport \"./ShadersInclude/morphTargetsVertex\";\nimport \"./ShadersInclude/instancesVertex\";\nimport \"./ShadersInclude/bonesVertex\";\nimport \"./ShadersInclude/bakedVertexAnimation\";\nimport \"./ShadersInclude/clipPlaneVertex\";\nimport \"./ShadersInclude/bumpVertex\";\n\nconst name = \"geometryVertexShader\";\nconst shader = `precision highp float;\n#include<bonesDeclaration>\n#include<bakedVertexAnimationDeclaration>\n#include<morphTargetsVertexGlobalDeclaration>\n#include<morphTargetsVertexDeclaration>[0..maxSimultaneousMorphTargets]\n#include<instancesDeclaration>\n#include<__decl__geometryVertex>\n#include<clipPlaneVertexDeclaration>\nattribute vec3 position;attribute vec3 normal;\n#ifdef NEED_UV\nvarying vec2 vUV;\n#ifdef ALPHATEST\nuniform mat4 diffuseMatrix;\n#endif\n#ifdef BUMP\nuniform mat4 bumpMatrix;varying vec2 vBumpUV;\n#endif\n#ifdef REFLECTIVITY\nuniform mat4 reflectivityMatrix;uniform mat4 albedoMatrix;varying vec2 vReflectivityUV;varying vec2 vAlbedoUV;\n#endif\n#ifdef UV1\nattribute vec2 uv;\n#endif\n#ifdef UV2\nattribute vec2 uv2;\n#endif\n#endif\n#ifdef BUMP\nvarying mat4 vWorldView;\n#endif\n#ifdef BUMP\nvarying vec3 vNormalW;\n#else\nvarying vec3 vNormalV;\n#endif\nvarying vec4 vViewPos;\n#if defined(POSITION) || defined(BUMP)\nvarying vec3 vPositionW;\n#endif\n#if defined(VELOCITY) || defined(VELOCITY_LINEAR)\nuniform mat4 previousViewProjection;varying vec4 vCurrentPosition;varying vec4 vPreviousPosition;\n#endif\n#define CUSTOM_VERTEX_DEFINITIONS\nvoid main(void)\n{vec3 positionUpdated=position;vec3 normalUpdated=normal;\n#ifdef UV1\nvec2 uvUpdated=uv;\n#endif\n#include<morphTargetsVertexGlobal>\n#include<morphTargetsVertex>[0..maxSimultaneousMorphTargets]\n#include<instancesVertex>\n#if (defined(VELOCITY) || defined(VELOCITY_LINEAR)) && !defined(BONES_VELOCITY_ENABLED)\nvCurrentPosition=viewProjection*finalWorld*vec4(positionUpdated,1.0);vPreviousPosition=previousViewProjection*finalPreviousWorld*vec4(positionUpdated,1.0);\n#endif\n#include<bonesVertex>\n#include<bakedVertexAnimation>\nvec4 worldPos=vec4(finalWorld*vec4(positionUpdated,1.0));\n#ifdef BUMP\nvWorldView=view*finalWorld;vNormalW=normalUpdated;\n#else\n#ifdef NORMAL_WORLDSPACE\nvNormalV=normalize(vec3(finalWorld*vec4(normalUpdated,0.0)));\n#else\nvNormalV=normalize(vec3((view*finalWorld)*vec4(normalUpdated,0.0)));\n#endif\n#endif\nvViewPos=view*worldPos;\n#if (defined(VELOCITY) || defined(VELOCITY_LINEAR)) && defined(BONES_VELOCITY_ENABLED)\nvCurrentPosition=viewProjection*finalWorld*vec4(positionUpdated,1.0);\n#if NUM_BONE_INFLUENCERS>0\nmat4 previousInfluence;previousInfluence=mPreviousBones[int(matricesIndices[0])]*matricesWeights[0];\n#if NUM_BONE_INFLUENCERS>1\npreviousInfluence+=mPreviousBones[int(matricesIndices[1])]*matricesWeights[1];\n#endif\n#if NUM_BONE_INFLUENCERS>2\npreviousInfluence+=mPreviousBones[int(matricesIndices[2])]*matricesWeights[2];\n#endif\n#if NUM_BONE_INFLUENCERS>3\npreviousInfluence+=mPreviousBones[int(matricesIndices[3])]*matricesWeights[3];\n#endif\n#if NUM_BONE_INFLUENCERS>4\npreviousInfluence+=mPreviousBones[int(matricesIndicesExtra[0])]*matricesWeightsExtra[0];\n#endif\n#if NUM_BONE_INFLUENCERS>5\npreviousInfluence+=mPreviousBones[int(matricesIndicesExtra[1])]*matricesWeightsExtra[1];\n#endif\n#if NUM_BONE_INFLUENCERS>6\npreviousInfluence+=mPreviousBones[int(matricesIndicesExtra[2])]*matricesWeightsExtra[2];\n#endif\n#if NUM_BONE_INFLUENCERS>7\npreviousInfluence+=mPreviousBones[int(matricesIndicesExtra[3])]*matricesWeightsExtra[3];\n#endif\nvPreviousPosition=previousViewProjection*finalPreviousWorld*previousInfluence*vec4(positionUpdated,1.0);\n#else\nvPreviousPosition=previousViewProjection*finalPreviousWorld*vec4(positionUpdated,1.0);\n#endif\n#endif\n#if defined(POSITION) || defined(BUMP)\nvPositionW=worldPos.xyz/worldPos.w;\n#endif\ngl_Position=viewProjection*finalWorld*vec4(positionUpdated,1.0);\n#include<clipPlaneVertex>\n#ifdef NEED_UV\n#ifdef UV1\n#if defined(ALPHATEST) && defined(ALPHATEST_UV1)\nvUV=vec2(diffuseMatrix*vec4(uvUpdated,1.0,0.0));\n#else\nvUV=uv;\n#endif\n#ifdef BUMP_UV1\nvBumpUV=vec2(bumpMatrix*vec4(uvUpdated,1.0,0.0));\n#endif\n#ifdef REFLECTIVITY_UV1\nvReflectivityUV=vec2(reflectivityMatrix*vec4(uvUpdated,1.0,0.0));\n#endif\n#ifdef ALBEDO_UV1\nvAlbedoUV=vec2(albedoMatrix*vec4(uvUpdated,1.0,0.0));\n#endif\n#endif\n#ifdef UV2\n#if defined(ALPHATEST) && defined(ALPHATEST_UV2)\nvUV=vec2(diffuseMatrix*vec4(uv2,1.0,0.0));\n#else\nvUV=uv2;\n#endif\n#ifdef BUMP_UV2\nvBumpUV=vec2(bumpMatrix*vec4(uv2,1.0,0.0));\n#endif\n#ifdef REFLECTIVITY_UV2\nvReflectivityUV=vec2(reflectivityMatrix*vec4(uv2,1.0,0.0));\n#endif\n#ifdef ALBEDO_UV2\nvAlbedoUV=vec2(albedoMatrix*vec4(uv2,1.0,0.0));\n#endif\n#endif\n#endif\n#include<bumpVertex>\n}\n`;\n// Sideeffect\nShaderStore.ShadersStore[name] = shader;\n/** @internal */\nexport const geometryVertexShader = { name, shader };\n"]}
1
+ {"version":3,"file":"geometry.vertex.js","sourceRoot":"","sources":["../../../../dev/core/src/Shaders/geometry.vertex.ts"],"names":[],"mappings":"AAAA,eAAe;AACf,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,mCAAmC,CAAC;AAC3C,OAAO,kDAAkD,CAAC;AAC1D,OAAO,sDAAsD,CAAC;AAC9D,OAAO,gDAAgD,CAAC;AACxD,OAAO,uCAAuC,CAAC;AAC/C,OAAO,4CAA4C,CAAC;AACpD,OAAO,yCAAyC,CAAC;AACjD,OAAO,6CAA6C,CAAC;AACrD,OAAO,2CAA2C,CAAC;AACnD,OAAO,qCAAqC,CAAC;AAC7C,OAAO,kCAAkC,CAAC;AAC1C,OAAO,8BAA8B,CAAC;AACtC,OAAO,uCAAuC,CAAC;AAC/C,OAAO,kCAAkC,CAAC;AAC1C,OAAO,6BAA6B,CAAC;AAErC,MAAM,IAAI,GAAG,sBAAsB,CAAC;AACpC,MAAM,MAAM,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA0Id,CAAC;AACF,aAAa;AACb,WAAW,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC;AACxC,gBAAgB;AAChB,MAAM,CAAC,MAAM,oBAAoB,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC","sourcesContent":["// Do not edit.\nimport { ShaderStore } from \"../Engines/shaderStore\";\nimport \"./ShadersInclude/bonesDeclaration\";\nimport \"./ShadersInclude/bakedVertexAnimationDeclaration\";\nimport \"./ShadersInclude/morphTargetsVertexGlobalDeclaration\";\nimport \"./ShadersInclude/morphTargetsVertexDeclaration\";\nimport \"./ShadersInclude/instancesDeclaration\";\nimport \"./ShadersInclude/geometryVertexDeclaration\";\nimport \"./ShadersInclude/geometryUboDeclaration\";\nimport \"./ShadersInclude/clipPlaneVertexDeclaration\";\nimport \"./ShadersInclude/morphTargetsVertexGlobal\";\nimport \"./ShadersInclude/morphTargetsVertex\";\nimport \"./ShadersInclude/instancesVertex\";\nimport \"./ShadersInclude/bonesVertex\";\nimport \"./ShadersInclude/bakedVertexAnimation\";\nimport \"./ShadersInclude/clipPlaneVertex\";\nimport \"./ShadersInclude/bumpVertex\";\n\nconst name = \"geometryVertexShader\";\nconst shader = `precision highp float;\n#include<bonesDeclaration>\n#include<bakedVertexAnimationDeclaration>\n#include<morphTargetsVertexGlobalDeclaration>\n#include<morphTargetsVertexDeclaration>[0..maxSimultaneousMorphTargets]\n#include<instancesDeclaration>\n#include<__decl__geometryVertex>\n#include<clipPlaneVertexDeclaration>\nattribute vec3 position;attribute vec3 normal;\n#ifdef NEED_UV\nvarying vec2 vUV;\n#ifdef ALPHATEST\nuniform mat4 diffuseMatrix;\n#endif\n#ifdef BUMP\nuniform mat4 bumpMatrix;varying vec2 vBumpUV;\n#endif\n#ifdef REFLECTIVITY\nuniform mat4 reflectivityMatrix;uniform mat4 albedoMatrix;varying vec2 vReflectivityUV;varying vec2 vAlbedoUV;\n#endif\n#ifdef UV1\nattribute vec2 uv;\n#endif\n#ifdef UV2\nattribute vec2 uv2;\n#endif\n#endif\n#ifdef BUMP\nvarying mat4 vWorldView;\n#endif\n#ifdef BUMP\nvarying vec3 vNormalW;\n#else\nvarying vec3 vNormalV;\n#endif\nvarying vec4 vViewPos;\n#if defined(POSITION) || defined(BUMP)\nvarying vec3 vPositionW;\n#endif\n#if defined(VELOCITY) || defined(VELOCITY_LINEAR)\nuniform mat4 previousViewProjection;varying vec4 vCurrentPosition;varying vec4 vPreviousPosition;\n#endif\n#define CUSTOM_VERTEX_DEFINITIONS\nvoid main(void)\n{vec3 positionUpdated=position;vec3 normalUpdated=normal;\n#ifdef UV1\nvec2 uvUpdated=uv;\n#endif\n#include<morphTargetsVertexGlobal>\n#include<morphTargetsVertex>[0..maxSimultaneousMorphTargets]\n#include<instancesVertex>\n#if (defined(VELOCITY) || defined(VELOCITY_LINEAR)) && !defined(BONES_VELOCITY_ENABLED)\nvCurrentPosition=viewProjection*finalWorld*vec4(positionUpdated,1.0);vPreviousPosition=previousViewProjection*finalPreviousWorld*vec4(positionUpdated,1.0);\n#endif\n#include<bonesVertex>\n#include<bakedVertexAnimation>\nvec4 worldPos=vec4(finalWorld*vec4(positionUpdated,1.0));\n#ifdef BUMP\nvWorldView=view*finalWorld;mat3 normalWorld=mat3(finalWorld);vNormalW=normalize(normalWorld*normalUpdated);\n#else\n#ifdef NORMAL_WORLDSPACE\nvNormalV=normalize(vec3(finalWorld*vec4(normalUpdated,0.0)));\n#else\nvNormalV=normalize(vec3((view*finalWorld)*vec4(normalUpdated,0.0)));\n#endif\n#endif\nvViewPos=view*worldPos;\n#if (defined(VELOCITY) || defined(VELOCITY_LINEAR)) && defined(BONES_VELOCITY_ENABLED)\nvCurrentPosition=viewProjection*finalWorld*vec4(positionUpdated,1.0);\n#if NUM_BONE_INFLUENCERS>0\nmat4 previousInfluence;previousInfluence=mPreviousBones[int(matricesIndices[0])]*matricesWeights[0];\n#if NUM_BONE_INFLUENCERS>1\npreviousInfluence+=mPreviousBones[int(matricesIndices[1])]*matricesWeights[1];\n#endif\n#if NUM_BONE_INFLUENCERS>2\npreviousInfluence+=mPreviousBones[int(matricesIndices[2])]*matricesWeights[2];\n#endif\n#if NUM_BONE_INFLUENCERS>3\npreviousInfluence+=mPreviousBones[int(matricesIndices[3])]*matricesWeights[3];\n#endif\n#if NUM_BONE_INFLUENCERS>4\npreviousInfluence+=mPreviousBones[int(matricesIndicesExtra[0])]*matricesWeightsExtra[0];\n#endif\n#if NUM_BONE_INFLUENCERS>5\npreviousInfluence+=mPreviousBones[int(matricesIndicesExtra[1])]*matricesWeightsExtra[1];\n#endif\n#if NUM_BONE_INFLUENCERS>6\npreviousInfluence+=mPreviousBones[int(matricesIndicesExtra[2])]*matricesWeightsExtra[2];\n#endif\n#if NUM_BONE_INFLUENCERS>7\npreviousInfluence+=mPreviousBones[int(matricesIndicesExtra[3])]*matricesWeightsExtra[3];\n#endif\nvPreviousPosition=previousViewProjection*finalPreviousWorld*previousInfluence*vec4(positionUpdated,1.0);\n#else\nvPreviousPosition=previousViewProjection*finalPreviousWorld*vec4(positionUpdated,1.0);\n#endif\n#endif\n#if defined(POSITION) || defined(BUMP)\nvPositionW=worldPos.xyz/worldPos.w;\n#endif\ngl_Position=viewProjection*finalWorld*vec4(positionUpdated,1.0);\n#include<clipPlaneVertex>\n#ifdef NEED_UV\n#ifdef UV1\n#if defined(ALPHATEST) && defined(ALPHATEST_UV1)\nvUV=vec2(diffuseMatrix*vec4(uvUpdated,1.0,0.0));\n#else\nvUV=uv;\n#endif\n#ifdef BUMP_UV1\nvBumpUV=vec2(bumpMatrix*vec4(uvUpdated,1.0,0.0));\n#endif\n#ifdef REFLECTIVITY_UV1\nvReflectivityUV=vec2(reflectivityMatrix*vec4(uvUpdated,1.0,0.0));\n#endif\n#ifdef ALBEDO_UV1\nvAlbedoUV=vec2(albedoMatrix*vec4(uvUpdated,1.0,0.0));\n#endif\n#endif\n#ifdef UV2\n#if defined(ALPHATEST) && defined(ALPHATEST_UV2)\nvUV=vec2(diffuseMatrix*vec4(uv2,1.0,0.0));\n#else\nvUV=uv2;\n#endif\n#ifdef BUMP_UV2\nvBumpUV=vec2(bumpMatrix*vec4(uv2,1.0,0.0));\n#endif\n#ifdef REFLECTIVITY_UV2\nvReflectivityUV=vec2(reflectivityMatrix*vec4(uv2,1.0,0.0));\n#endif\n#ifdef ALBEDO_UV2\nvAlbedoUV=vec2(albedoMatrix*vec4(uv2,1.0,0.0));\n#endif\n#endif\n#endif\n#include<bumpVertex>\n}\n`;\n// Sideeffect\nShaderStore.ShadersStore[name] = shader;\n/** @internal */\nexport const geometryVertexShader = { name, shader };\n"]}
@@ -7,11 +7,12 @@ precision mediump float;
7
7
  varying vec2 vUV;uniform vec4 accumulationParameters;
8
8
  #define remanence accumulationParameters.x
9
9
  #define resetb accumulationParameters.y
10
+ #define sceneSize accumulationParameters.z
10
11
  uniform sampler2D motionSampler;uniform sampler2D positionSampler;uniform sampler2D spatialBlurSampler;uniform sampler2D oldAccumulationSampler;uniform sampler2D prevPositionSampler;vec2 max2(vec2 v,vec2 w) { return vec2(max(v.x,w.x),max(v.y,w.y)); }
11
12
  void main(void) {bool reset=bool(resetb);vec2 gbufferRes=vec2(textureSize(motionSampler,0));ivec2 gbufferPixelCoord=ivec2(vUV*gbufferRes);vec2 shadowRes=vec2(textureSize(spatialBlurSampler,0));ivec2 shadowPixelCoord=ivec2(vUV*shadowRes);vec4 LP=texelFetch(positionSampler,gbufferPixelCoord,0);if (0.0==LP.w) {gl_FragColor=vec4(1.0,0.0,0.0,1.0);return;}
12
13
  vec2 velocityColor=texelFetch(motionSampler,gbufferPixelCoord,0).xy;vec2 prevCoord=vUV+velocityColor;vec3 PrevLP=texture(prevPositionSampler,prevCoord).xyz;vec3 PrevShadows=texture(oldAccumulationSampler,prevCoord).xyz;vec2 newShadows=texelFetch(spatialBlurSampler,shadowPixelCoord,0).xy;PrevShadows.z =
13
14
  !reset && all(lessThan(abs(prevCoord-vec2(0.5)),vec2(0.5))) &&
14
- distance(LP.xyz,PrevLP)<5e-2
15
+ distance(LP.xyz,PrevLP)<5e-2*sceneSize
15
16
  ? max(PrevShadows.z/(1.0+PrevShadows.z),1.0-remanence)
16
17
  : 1.0;PrevShadows=max(vec3(0.0),PrevShadows);gl_FragColor =
17
18
  vec4(mix(PrevShadows.x,newShadows.x,PrevShadows.z),
@@ -1 +1 @@
1
- {"version":3,"file":"iblShadowAccumulation.fragment.js","sourceRoot":"","sources":["../../../../dev/core/src/Shaders/iblShadowAccumulation.fragment.ts"],"names":[],"mappings":"AAAA,eAAe;AACf,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAErD,MAAM,IAAI,GAAG,kCAAkC,CAAC;AAChD,MAAM,MAAM,GAAG;;;;;;;;;;;;;;mEAcoD,CAAC;AACpE,aAAa;AACb,WAAW,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC;AACxC,gBAAgB;AAChB,MAAM,CAAC,MAAM,gCAAgC,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC","sourcesContent":["// Do not edit.\nimport { ShaderStore } from \"../Engines/shaderStore\";\n\nconst name = \"iblShadowAccumulationPixelShader\";\nconst shader = `#ifdef GL_ES\nprecision mediump float;\n#endif\nvarying vec2 vUV;uniform vec4 accumulationParameters;\n#define remanence accumulationParameters.x\n#define resetb accumulationParameters.y\nuniform sampler2D motionSampler;uniform sampler2D positionSampler;uniform sampler2D spatialBlurSampler;uniform sampler2D oldAccumulationSampler;uniform sampler2D prevPositionSampler;vec2 max2(vec2 v,vec2 w) { return vec2(max(v.x,w.x),max(v.y,w.y)); }\nvoid main(void) {bool reset=bool(resetb);vec2 gbufferRes=vec2(textureSize(motionSampler,0));ivec2 gbufferPixelCoord=ivec2(vUV*gbufferRes);vec2 shadowRes=vec2(textureSize(spatialBlurSampler,0));ivec2 shadowPixelCoord=ivec2(vUV*shadowRes);vec4 LP=texelFetch(positionSampler,gbufferPixelCoord,0);if (0.0==LP.w) {gl_FragColor=vec4(1.0,0.0,0.0,1.0);return;}\nvec2 velocityColor=texelFetch(motionSampler,gbufferPixelCoord,0).xy;vec2 prevCoord=vUV+velocityColor;vec3 PrevLP=texture(prevPositionSampler,prevCoord).xyz;vec3 PrevShadows=texture(oldAccumulationSampler,prevCoord).xyz;vec2 newShadows=texelFetch(spatialBlurSampler,shadowPixelCoord,0).xy;PrevShadows.z =\n!reset && all(lessThan(abs(prevCoord-vec2(0.5)),vec2(0.5))) &&\ndistance(LP.xyz,PrevLP)<5e-2\n? max(PrevShadows.z/(1.0+PrevShadows.z),1.0-remanence)\n: 1.0;PrevShadows=max(vec3(0.0),PrevShadows);gl_FragColor =\nvec4(mix(PrevShadows.x,newShadows.x,PrevShadows.z),\nmix(PrevShadows.y,newShadows.y,PrevShadows.z),PrevShadows.z,1.0);}`;\n// Sideeffect\nShaderStore.ShadersStore[name] = shader;\n/** @internal */\nexport const iblShadowAccumulationPixelShader = { name, shader };\n"]}
1
+ {"version":3,"file":"iblShadowAccumulation.fragment.js","sourceRoot":"","sources":["../../../../dev/core/src/Shaders/iblShadowAccumulation.fragment.ts"],"names":[],"mappings":"AAAA,eAAe;AACf,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAErD,MAAM,IAAI,GAAG,kCAAkC,CAAC;AAChD,MAAM,MAAM,GAAG;;;;;;;;;;;;;;;mEAeoD,CAAC;AACpE,aAAa;AACb,WAAW,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC;AACxC,gBAAgB;AAChB,MAAM,CAAC,MAAM,gCAAgC,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC","sourcesContent":["// Do not edit.\nimport { ShaderStore } from \"../Engines/shaderStore\";\n\nconst name = \"iblShadowAccumulationPixelShader\";\nconst shader = `#ifdef GL_ES\nprecision mediump float;\n#endif\nvarying vec2 vUV;uniform vec4 accumulationParameters;\n#define remanence accumulationParameters.x\n#define resetb accumulationParameters.y\n#define sceneSize accumulationParameters.z\nuniform sampler2D motionSampler;uniform sampler2D positionSampler;uniform sampler2D spatialBlurSampler;uniform sampler2D oldAccumulationSampler;uniform sampler2D prevPositionSampler;vec2 max2(vec2 v,vec2 w) { return vec2(max(v.x,w.x),max(v.y,w.y)); }\nvoid main(void) {bool reset=bool(resetb);vec2 gbufferRes=vec2(textureSize(motionSampler,0));ivec2 gbufferPixelCoord=ivec2(vUV*gbufferRes);vec2 shadowRes=vec2(textureSize(spatialBlurSampler,0));ivec2 shadowPixelCoord=ivec2(vUV*shadowRes);vec4 LP=texelFetch(positionSampler,gbufferPixelCoord,0);if (0.0==LP.w) {gl_FragColor=vec4(1.0,0.0,0.0,1.0);return;}\nvec2 velocityColor=texelFetch(motionSampler,gbufferPixelCoord,0).xy;vec2 prevCoord=vUV+velocityColor;vec3 PrevLP=texture(prevPositionSampler,prevCoord).xyz;vec3 PrevShadows=texture(oldAccumulationSampler,prevCoord).xyz;vec2 newShadows=texelFetch(spatialBlurSampler,shadowPixelCoord,0).xy;PrevShadows.z =\n!reset && all(lessThan(abs(prevCoord-vec2(0.5)),vec2(0.5))) &&\ndistance(LP.xyz,PrevLP)<5e-2*sceneSize\n? max(PrevShadows.z/(1.0+PrevShadows.z),1.0-remanence)\n: 1.0;PrevShadows=max(vec3(0.0),PrevShadows);gl_FragColor =\nvec4(mix(PrevShadows.x,newShadows.x,PrevShadows.z),\nmix(PrevShadows.y,newShadows.y,PrevShadows.z),PrevShadows.z,1.0);}`;\n// Sideeffect\nShaderStore.ShadersStore[name] = shader;\n/** @internal */\nexport const iblShadowAccumulationPixelShader = { name, shader };\n"]}
@@ -8,8 +8,10 @@ const shader = `varying vec2 vUV;uniform sampler2D textureSampler;uniform vec4 c
8
8
  void main(void) {
9
9
  #define CUSTOM_FRAGMENT_MAIN_BEGIN
10
10
  vec4 baseColor=texture2D(textureSampler,vUV);
11
- #ifdef LINEAR
11
+ #if defined(CONVERT_TO_GAMMA)
12
12
  baseColor.rgb=toGammaSpace(baseColor.rgb);
13
+ #elif defined(CONVERT_TO_LINEAR)
14
+ baseColor.rgb=toLinearSpace(baseColor.rgb);
13
15
  #endif
14
16
  #ifdef ALPHATEST
15
17
  if (baseColor.a<0.4)
@@ -1 +1 @@
1
- {"version":3,"file":"layer.fragment.js","sourceRoot":"","sources":["../../../../dev/core/src/Shaders/layer.fragment.ts"],"names":[],"mappings":"AAAA,eAAe;AACf,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,kCAAkC,CAAC;AAE1C,MAAM,IAAI,GAAG,kBAAkB,CAAC;AAChC,MAAM,MAAM,GAAG;;;;;;;;;;;;;;;EAeb,CAAC;AACH,aAAa;AACb,WAAW,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC;AACxC,gBAAgB;AAChB,MAAM,CAAC,MAAM,gBAAgB,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC","sourcesContent":["// Do not edit.\nimport { ShaderStore } from \"../Engines/shaderStore\";\nimport \"./ShadersInclude/helperFunctions\";\n\nconst name = \"layerPixelShader\";\nconst shader = `varying vec2 vUV;uniform sampler2D textureSampler;uniform vec4 color;\n#include<helperFunctions>\n#define CUSTOM_FRAGMENT_DEFINITIONS\nvoid main(void) {\n#define CUSTOM_FRAGMENT_MAIN_BEGIN\nvec4 baseColor=texture2D(textureSampler,vUV);\n#ifdef LINEAR\nbaseColor.rgb=toGammaSpace(baseColor.rgb);\n#endif\n#ifdef ALPHATEST\nif (baseColor.a<0.4)\ndiscard;\n#endif\ngl_FragColor=baseColor*color;\n#define CUSTOM_FRAGMENT_MAIN_END\n}`;\n// Sideeffect\nShaderStore.ShadersStore[name] = shader;\n/** @internal */\nexport const layerPixelShader = { name, shader };\n"]}
1
+ {"version":3,"file":"layer.fragment.js","sourceRoot":"","sources":["../../../../dev/core/src/Shaders/layer.fragment.ts"],"names":[],"mappings":"AAAA,eAAe;AACf,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,kCAAkC,CAAC;AAE1C,MAAM,IAAI,GAAG,kBAAkB,CAAC;AAChC,MAAM,MAAM,GAAG;;;;;;;;;;;;;;;;;EAiBb,CAAC;AACH,aAAa;AACb,WAAW,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC;AACxC,gBAAgB;AAChB,MAAM,CAAC,MAAM,gBAAgB,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC","sourcesContent":["// Do not edit.\nimport { ShaderStore } from \"../Engines/shaderStore\";\nimport \"./ShadersInclude/helperFunctions\";\n\nconst name = \"layerPixelShader\";\nconst shader = `varying vec2 vUV;uniform sampler2D textureSampler;uniform vec4 color;\n#include<helperFunctions>\n#define CUSTOM_FRAGMENT_DEFINITIONS\nvoid main(void) {\n#define CUSTOM_FRAGMENT_MAIN_BEGIN\nvec4 baseColor=texture2D(textureSampler,vUV);\n#if defined(CONVERT_TO_GAMMA)\nbaseColor.rgb=toGammaSpace(baseColor.rgb);\n#elif defined(CONVERT_TO_LINEAR)\nbaseColor.rgb=toLinearSpace(baseColor.rgb);\n#endif\n#ifdef ALPHATEST\nif (baseColor.a<0.4)\ndiscard;\n#endif\ngl_FragColor=baseColor*color;\n#define CUSTOM_FRAGMENT_MAIN_END\n}`;\n// Sideeffect\nShaderStore.ShadersStore[name] = shader;\n/** @internal */\nexport const layerPixelShader = { name, shader };\n"]}
@@ -6,7 +6,7 @@ const shader = `uniform sampler2D textureSampler;uniform sampler2D lightScatteri
6
6
  void main(void) {
7
7
  #define CUSTOM_FRAGMENT_MAIN_BEGIN
8
8
  vec2 tc=vUV;vec2 deltaTexCoord=(tc-meshPositionOnScreen.xy);deltaTexCoord*=1.0/float(NUM_SAMPLES)*density;float illuminationDecay=1.0;vec4 color=texture2D(lightScatteringSampler,tc)*0.4;for(int i=0; i<NUM_SAMPLES; i++) {tc-=deltaTexCoord;vec4 dataSample=texture2D(lightScatteringSampler,tc)*0.4;dataSample*=illuminationDecay*weight;color+=dataSample;illuminationDecay*=decay;}
9
- vec4 realColor=texture2D(textureSampler,vUV);gl_FragColor=((vec4((vec3(color.r,color.g,color.b)*exposure),1))+(realColor*(1.5-0.4)));
9
+ vec4 realColor=texture2D(textureSampler,vUV);gl_FragColor=((vec4((vec3(color.r,color.g,color.b)*exposure),realColor.a))+(realColor*(1.5-0.4)));
10
10
  #define CUSTOM_FRAGMENT_MAIN_END
11
11
  }
12
12
  `;
@@ -1 +1 @@
1
- {"version":3,"file":"volumetricLightScattering.fragment.js","sourceRoot":"","sources":["../../../../dev/core/src/Shaders/volumetricLightScattering.fragment.ts"],"names":[],"mappings":"AAAA,eAAe;AACf,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAErD,MAAM,IAAI,GAAG,sCAAsC,CAAC;AACpD,MAAM,MAAM,GAAG;;;;;;;;CAQd,CAAC;AACF,aAAa;AACb,WAAW,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC;AACxC,gBAAgB;AAChB,MAAM,CAAC,MAAM,oCAAoC,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC","sourcesContent":["// Do not edit.\nimport { ShaderStore } from \"../Engines/shaderStore\";\n\nconst name = \"volumetricLightScatteringPixelShader\";\nconst shader = `uniform sampler2D textureSampler;uniform sampler2D lightScatteringSampler;uniform float decay;uniform float exposure;uniform float weight;uniform float density;uniform vec2 meshPositionOnScreen;varying vec2 vUV;\n#define CUSTOM_FRAGMENT_DEFINITIONS\nvoid main(void) {\n#define CUSTOM_FRAGMENT_MAIN_BEGIN\nvec2 tc=vUV;vec2 deltaTexCoord=(tc-meshPositionOnScreen.xy);deltaTexCoord*=1.0/float(NUM_SAMPLES)*density;float illuminationDecay=1.0;vec4 color=texture2D(lightScatteringSampler,tc)*0.4;for(int i=0; i<NUM_SAMPLES; i++) {tc-=deltaTexCoord;vec4 dataSample=texture2D(lightScatteringSampler,tc)*0.4;dataSample*=illuminationDecay*weight;color+=dataSample;illuminationDecay*=decay;}\nvec4 realColor=texture2D(textureSampler,vUV);gl_FragColor=((vec4((vec3(color.r,color.g,color.b)*exposure),1))+(realColor*(1.5-0.4)));\n#define CUSTOM_FRAGMENT_MAIN_END\n}\n`;\n// Sideeffect\nShaderStore.ShadersStore[name] = shader;\n/** @internal */\nexport const volumetricLightScatteringPixelShader = { name, shader };\n"]}
1
+ {"version":3,"file":"volumetricLightScattering.fragment.js","sourceRoot":"","sources":["../../../../dev/core/src/Shaders/volumetricLightScattering.fragment.ts"],"names":[],"mappings":"AAAA,eAAe;AACf,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAErD,MAAM,IAAI,GAAG,sCAAsC,CAAC;AACpD,MAAM,MAAM,GAAG;;;;;;;;CAQd,CAAC;AACF,aAAa;AACb,WAAW,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC;AACxC,gBAAgB;AAChB,MAAM,CAAC,MAAM,oCAAoC,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC","sourcesContent":["// Do not edit.\nimport { ShaderStore } from \"../Engines/shaderStore\";\n\nconst name = \"volumetricLightScatteringPixelShader\";\nconst shader = `uniform sampler2D textureSampler;uniform sampler2D lightScatteringSampler;uniform float decay;uniform float exposure;uniform float weight;uniform float density;uniform vec2 meshPositionOnScreen;varying vec2 vUV;\n#define CUSTOM_FRAGMENT_DEFINITIONS\nvoid main(void) {\n#define CUSTOM_FRAGMENT_MAIN_BEGIN\nvec2 tc=vUV;vec2 deltaTexCoord=(tc-meshPositionOnScreen.xy);deltaTexCoord*=1.0/float(NUM_SAMPLES)*density;float illuminationDecay=1.0;vec4 color=texture2D(lightScatteringSampler,tc)*0.4;for(int i=0; i<NUM_SAMPLES; i++) {tc-=deltaTexCoord;vec4 dataSample=texture2D(lightScatteringSampler,tc)*0.4;dataSample*=illuminationDecay*weight;color+=dataSample;illuminationDecay*=decay;}\nvec4 realColor=texture2D(textureSampler,vUV);gl_FragColor=((vec4((vec3(color.r,color.g,color.b)*exposure),realColor.a))+(realColor*(1.5-0.4)));\n#define CUSTOM_FRAGMENT_MAIN_END\n}\n`;\n// Sideeffect\nShaderStore.ShadersStore[name] = shader;\n/** @internal */\nexport const volumetricLightScatteringPixelShader = { name, shader };\n"]}
@@ -0,0 +1,5 @@
1
+ /** @internal */
2
+ export declare const gaussianSplattingWGSL: {
3
+ name: string;
4
+ shader: string;
5
+ };