@babylonjs/core 7.25.1 → 7.26.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 (171) hide show
  1. package/Collisions/gpuPicker.d.ts +5 -0
  2. package/Collisions/gpuPicker.js +34 -11
  3. package/Collisions/gpuPicker.js.map +1 -1
  4. package/Engines/Extensions/engine.prefilteredCubeTexture.d.ts +0 -1
  5. package/Engines/Extensions/engine.prefilteredCubeTexture.js +0 -1
  6. package/Engines/Extensions/engine.prefilteredCubeTexture.js.map +1 -1
  7. package/Engines/WebGPU/Extensions/engine.alpha.js +3 -3
  8. package/Engines/WebGPU/Extensions/engine.alpha.js.map +1 -1
  9. package/Engines/WebGPU/Extensions/engine.cubeTexture.js +5 -5
  10. package/Engines/WebGPU/Extensions/engine.cubeTexture.js.map +1 -1
  11. package/Engines/WebGPU/Extensions/engine.rawTexture.js +10 -10
  12. package/Engines/WebGPU/Extensions/engine.rawTexture.js.map +1 -1
  13. package/Engines/WebGPU/Extensions/engine.readTexture.js +3 -3
  14. package/Engines/WebGPU/Extensions/engine.readTexture.js.map +1 -1
  15. package/Engines/WebGPU/Extensions/engine.renderTarget.js +6 -6
  16. package/Engines/WebGPU/Extensions/engine.renderTarget.js.map +1 -1
  17. package/Engines/WebGPU/Extensions/engine.renderTargetCube.js +2 -2
  18. package/Engines/WebGPU/Extensions/engine.renderTargetCube.js.map +1 -1
  19. package/Engines/WebGPU/Extensions/engine.renderTargetTexture.js +2 -2
  20. package/Engines/WebGPU/Extensions/engine.renderTargetTexture.js.map +1 -1
  21. package/Engines/WebGPU/webgpuRenderTargetWrapper.d.ts +2 -2
  22. package/Engines/WebGPU/webgpuRenderTargetWrapper.js.map +1 -1
  23. package/Engines/abstractEngine.d.ts +2 -0
  24. package/Engines/abstractEngine.js +2 -2
  25. package/Engines/abstractEngine.js.map +1 -1
  26. package/Engines/constants.d.ts +3 -3
  27. package/Engines/constants.js +3 -3
  28. package/Engines/constants.js.map +1 -1
  29. package/Engines/engine.d.ts +5 -5
  30. package/Engines/engine.js +5 -0
  31. package/Engines/engine.js.map +1 -1
  32. package/Engines/thinEngine.js +6 -2
  33. package/Engines/thinEngine.js.map +1 -1
  34. package/Engines/thinWebGPUEngine.d.ts +66 -0
  35. package/Engines/thinWebGPUEngine.js +120 -0
  36. package/Engines/thinWebGPUEngine.js.map +1 -0
  37. package/Engines/webgpuEngine.d.ts +9 -58
  38. package/Engines/webgpuEngine.js +9 -108
  39. package/Engines/webgpuEngine.js.map +1 -1
  40. package/Materials/Node/Blocks/Fragment/prePassOutputBlock.d.ts +10 -10
  41. package/Materials/Node/Blocks/Fragment/prePassOutputBlock.js +22 -20
  42. package/Materials/Node/Blocks/Fragment/prePassOutputBlock.js.map +1 -1
  43. package/Materials/Node/Blocks/Input/prePassTextureBlock.d.ts +9 -9
  44. package/Materials/Node/Blocks/Input/prePassTextureBlock.js +41 -32
  45. package/Materials/Node/Blocks/Input/prePassTextureBlock.js.map +1 -1
  46. package/Materials/Node/Blocks/PBR/clearCoatBlock.js +0 -5
  47. package/Materials/Node/Blocks/PBR/clearCoatBlock.js.map +1 -1
  48. package/Materials/Node/Blocks/colorConverterBlock.d.ts +36 -0
  49. package/Materials/Node/Blocks/colorConverterBlock.js +192 -0
  50. package/Materials/Node/Blocks/colorConverterBlock.js.map +1 -0
  51. package/Materials/Node/Blocks/index.d.ts +1 -0
  52. package/Materials/Node/Blocks/index.js +1 -0
  53. package/Materials/Node/Blocks/index.js.map +1 -1
  54. package/Materials/Node/nodeMaterial.d.ts +2 -2
  55. package/Materials/Node/nodeMaterial.js +7 -4
  56. package/Materials/Node/nodeMaterial.js.map +1 -1
  57. package/Materials/Node/nodeMaterialBuildState.d.ts +1 -1
  58. package/Materials/PBR/pbrBaseMaterial.d.ts +2 -2
  59. package/Materials/PBR/pbrBaseMaterial.js +2 -2
  60. package/Materials/PBR/pbrBaseMaterial.js.map +1 -1
  61. package/Materials/Textures/Filtering/hdrFiltering.d.ts +0 -1
  62. package/Materials/Textures/Filtering/hdrFiltering.js +0 -1
  63. package/Materials/Textures/Filtering/hdrFiltering.js.map +1 -1
  64. package/Materials/Textures/Loaders/basisTextureLoader.d.ts +0 -1
  65. package/Materials/Textures/Loaders/basisTextureLoader.js +0 -1
  66. package/Materials/Textures/Loaders/basisTextureLoader.js.map +1 -1
  67. package/Materials/Textures/Loaders/ddsTextureLoader.d.ts +0 -1
  68. package/Materials/Textures/Loaders/ddsTextureLoader.js +0 -1
  69. package/Materials/Textures/Loaders/ddsTextureLoader.js.map +1 -1
  70. package/Materials/Textures/Loaders/ktxTextureLoader.d.ts +0 -1
  71. package/Materials/Textures/Loaders/ktxTextureLoader.js +0 -1
  72. package/Materials/Textures/Loaders/ktxTextureLoader.js.map +1 -1
  73. package/Materials/Textures/Procedurals/proceduralTexture.d.ts +0 -2
  74. package/Materials/Textures/Procedurals/proceduralTexture.js +0 -2
  75. package/Materials/Textures/Procedurals/proceduralTexture.js.map +1 -1
  76. package/Materials/Textures/baseTexture.d.ts +0 -1
  77. package/Materials/Textures/baseTexture.js +0 -1
  78. package/Materials/Textures/baseTexture.js.map +1 -1
  79. package/Materials/Textures/colorGradingTexture.d.ts +0 -1
  80. package/Materials/Textures/colorGradingTexture.js +0 -2
  81. package/Materials/Textures/colorGradingTexture.js.map +1 -1
  82. package/Materials/Textures/cubeTexture.d.ts +0 -1
  83. package/Materials/Textures/cubeTexture.js +0 -1
  84. package/Materials/Textures/cubeTexture.js.map +1 -1
  85. package/Materials/Textures/equiRectangularCubeTexture.d.ts +0 -1
  86. package/Materials/Textures/equiRectangularCubeTexture.js +0 -1
  87. package/Materials/Textures/equiRectangularCubeTexture.js.map +1 -1
  88. package/Materials/Textures/hdrCubeTexture.d.ts +0 -1
  89. package/Materials/Textures/hdrCubeTexture.js +0 -1
  90. package/Materials/Textures/hdrCubeTexture.js.map +1 -1
  91. package/Materials/Textures/rawCubeTexture.d.ts +0 -1
  92. package/Materials/Textures/rawCubeTexture.js +0 -1
  93. package/Materials/Textures/rawCubeTexture.js.map +1 -1
  94. package/Materials/Textures/rawTexture.d.ts +0 -1
  95. package/Materials/Textures/rawTexture.js +0 -1
  96. package/Materials/Textures/rawTexture.js.map +1 -1
  97. package/Materials/Textures/rawTexture2DArray.d.ts +0 -1
  98. package/Materials/Textures/rawTexture2DArray.js +0 -1
  99. package/Materials/Textures/rawTexture2DArray.js.map +1 -1
  100. package/Materials/Textures/rawTexture3D.d.ts +0 -1
  101. package/Materials/Textures/rawTexture3D.js +0 -1
  102. package/Materials/Textures/rawTexture3D.js.map +1 -1
  103. package/Materials/Textures/renderTargetTexture.d.ts +0 -3
  104. package/Materials/Textures/renderTargetTexture.js +0 -3
  105. package/Materials/Textures/renderTargetTexture.js.map +1 -1
  106. package/Materials/material.detailMapConfiguration.d.ts +2 -2
  107. package/Materials/material.detailMapConfiguration.js.map +1 -1
  108. package/Materials/materialHelper.functions.js +2 -2
  109. package/Materials/materialHelper.functions.js.map +1 -1
  110. package/Materials/standardMaterial.d.ts +2 -2
  111. package/Materials/standardMaterial.js +2 -2
  112. package/Materials/standardMaterial.js.map +1 -1
  113. package/Meshes/GaussianSplatting/gaussianSplattingMesh.d.ts +6 -0
  114. package/Meshes/GaussianSplatting/gaussianSplattingMesh.js +32 -7
  115. package/Meshes/GaussianSplatting/gaussianSplattingMesh.js.map +1 -1
  116. package/Meshes/geometry.d.ts +2 -1
  117. package/Meshes/geometry.js +3 -2
  118. package/Meshes/geometry.js.map +1 -1
  119. package/Meshes/mesh.d.ts +2 -1
  120. package/Meshes/mesh.js +5 -3
  121. package/Meshes/mesh.js.map +1 -1
  122. package/Misc/basis.d.ts +3 -3
  123. package/Misc/basis.js.map +1 -1
  124. package/Misc/dds.d.ts +0 -1
  125. package/Misc/dds.js +0 -1
  126. package/Misc/dds.js.map +1 -1
  127. package/Misc/environmentTextureTools.d.ts +0 -2
  128. package/Misc/environmentTextureTools.js +0 -2
  129. package/Misc/environmentTextureTools.js.map +1 -1
  130. package/Misc/minMaxReducer.d.ts +0 -1
  131. package/Misc/minMaxReducer.js +0 -1
  132. package/Misc/minMaxReducer.js.map +1 -1
  133. package/Misc/rgbdTextureTools.d.ts +0 -2
  134. package/Misc/rgbdTextureTools.js +5 -10
  135. package/Misc/rgbdTextureTools.js.map +1 -1
  136. package/Misc/screenshotTools.d.ts +0 -1
  137. package/Misc/screenshotTools.js +0 -1
  138. package/Misc/screenshotTools.js.map +1 -1
  139. package/Particles/particleSystem.js.map +1 -1
  140. package/Particles/thinParticleSystem.js.map +1 -1
  141. package/PostProcesses/anaglyphPostProcess.d.ts +2 -2
  142. package/PostProcesses/anaglyphPostProcess.js.map +1 -1
  143. package/PostProcesses/highlightsPostProcess.d.ts +2 -2
  144. package/PostProcesses/highlightsPostProcess.js.map +1 -1
  145. package/PostProcesses/postProcess.d.ts +0 -1
  146. package/PostProcesses/postProcess.js +0 -1
  147. package/PostProcesses/postProcess.js.map +1 -1
  148. package/PostProcesses/stereoscopicInterlacePostProcess.d.ts +3 -3
  149. package/PostProcesses/stereoscopicInterlacePostProcess.js.map +1 -1
  150. package/PostProcesses/tonemapPostProcess.d.ts +2 -2
  151. package/PostProcesses/tonemapPostProcess.js.map +1 -1
  152. package/Rendering/IBLShadows/iblShadowsAccumulationPass.js +2 -2
  153. package/Rendering/IBLShadows/iblShadowsAccumulationPass.js.map +1 -1
  154. package/Rendering/IBLShadows/iblShadowsRenderPipeline.js +2 -2
  155. package/Rendering/IBLShadows/iblShadowsRenderPipeline.js.map +1 -1
  156. package/Rendering/IBLShadows/iblShadowsVoxelTracingPass.js.map +1 -1
  157. package/Rendering/prePassRenderer.js +5 -4
  158. package/Rendering/prePassRenderer.js.map +1 -1
  159. package/Shaders/ShadersInclude/pbrBlockClearcoat.js +0 -5
  160. package/Shaders/ShadersInclude/pbrBlockClearcoat.js.map +1 -1
  161. package/Shaders/default.fragment.js +4 -4
  162. package/Shaders/default.fragment.js.map +1 -1
  163. package/Shaders/pbr.fragment.js +5 -9
  164. package/Shaders/pbr.fragment.js.map +1 -1
  165. package/ShadersWGSL/ShadersInclude/pbrBlockClearcoat.js +0 -5
  166. package/ShadersWGSL/ShadersInclude/pbrBlockClearcoat.js.map +1 -1
  167. package/ShadersWGSL/default.fragment.js +4 -4
  168. package/ShadersWGSL/default.fragment.js.map +1 -1
  169. package/ShadersWGSL/pbr.fragment.js +5 -9
  170. package/ShadersWGSL/pbr.fragment.js.map +1 -1
  171. package/package.json +1 -1
@@ -20,30 +20,30 @@ export declare class PrePassOutputBlock extends NodeMaterialBlock {
20
20
  * Gets the view depth component
21
21
  */
22
22
  get viewDepth(): NodeMaterialConnectionPoint;
23
+ /**
24
+ * Gets the screen depth component
25
+ */
26
+ get screenDepth(): NodeMaterialConnectionPoint;
23
27
  /**
24
28
  * Gets the world position component
25
29
  */
26
30
  get worldPosition(): NodeMaterialConnectionPoint;
27
31
  /**
28
- * Gets the view normal component
32
+ * Gets the position in local space component
29
33
  */
30
- get viewNormal(): NodeMaterialConnectionPoint;
34
+ get localPosition(): NodeMaterialConnectionPoint;
31
35
  /**
32
- * Gets the reflectivity component
36
+ * Gets the view normal component
33
37
  */
34
- get reflectivity(): NodeMaterialConnectionPoint;
38
+ get viewNormal(): NodeMaterialConnectionPoint;
35
39
  /**
36
40
  * Gets the world normal component
37
41
  */
38
42
  get worldNormal(): NodeMaterialConnectionPoint;
39
43
  /**
40
- * Gets the position in local space component
41
- */
42
- get localPosition(): NodeMaterialConnectionPoint;
43
- /**
44
- * Gets the linear depth component
44
+ * Gets the reflectivity component
45
45
  */
46
- get viewDepthNDC(): NodeMaterialConnectionPoint;
46
+ get reflectivity(): NodeMaterialConnectionPoint;
47
47
  private _getFragData;
48
48
  protected _buildBlock(state: NodeMaterialBuildState): this;
49
49
  }
@@ -14,15 +14,17 @@ export class PrePassOutputBlock extends NodeMaterialBlock {
14
14
  constructor(name) {
15
15
  super(name, NodeMaterialBlockTargets.Fragment, true);
16
16
  this.registerInput("viewDepth", NodeMaterialBlockConnectionPointTypes.Float, true);
17
- this.registerInput("viewDepthLinear", NodeMaterialBlockConnectionPointTypes.Float, true);
17
+ this.registerInput("screenDepth", NodeMaterialBlockConnectionPointTypes.Float, true);
18
18
  this.registerInput("worldPosition", NodeMaterialBlockConnectionPointTypes.AutoDetect, true);
19
19
  this.registerInput("localPosition", NodeMaterialBlockConnectionPointTypes.AutoDetect, true);
20
20
  this.registerInput("viewNormal", NodeMaterialBlockConnectionPointTypes.AutoDetect, true);
21
21
  this.registerInput("worldNormal", NodeMaterialBlockConnectionPointTypes.AutoDetect, true);
22
22
  this.registerInput("reflectivity", NodeMaterialBlockConnectionPointTypes.AutoDetect, true);
23
- this.inputs[1].addExcludedConnectionPointFromAllowedTypes(NodeMaterialBlockConnectionPointTypes.Vector3 | NodeMaterialBlockConnectionPointTypes.Vector4);
24
23
  this.inputs[2].addExcludedConnectionPointFromAllowedTypes(NodeMaterialBlockConnectionPointTypes.Vector3 | NodeMaterialBlockConnectionPointTypes.Vector4);
25
- this.inputs[3].addExcludedConnectionPointFromAllowedTypes(NodeMaterialBlockConnectionPointTypes.Vector3 |
24
+ this.inputs[3].addExcludedConnectionPointFromAllowedTypes(NodeMaterialBlockConnectionPointTypes.Vector3 | NodeMaterialBlockConnectionPointTypes.Vector4);
25
+ this.inputs[4].addExcludedConnectionPointFromAllowedTypes(NodeMaterialBlockConnectionPointTypes.Vector3 | NodeMaterialBlockConnectionPointTypes.Vector4);
26
+ this.inputs[5].addExcludedConnectionPointFromAllowedTypes(NodeMaterialBlockConnectionPointTypes.Vector3 | NodeMaterialBlockConnectionPointTypes.Vector4);
27
+ this.inputs[6].addExcludedConnectionPointFromAllowedTypes(NodeMaterialBlockConnectionPointTypes.Vector3 |
26
28
  NodeMaterialBlockConnectionPointTypes.Vector4 |
27
29
  NodeMaterialBlockConnectionPointTypes.Color3 |
28
30
  NodeMaterialBlockConnectionPointTypes.Color4);
@@ -41,39 +43,39 @@ export class PrePassOutputBlock extends NodeMaterialBlock {
41
43
  return this._inputs[0];
42
44
  }
43
45
  /**
44
- * Gets the world position component
46
+ * Gets the screen depth component
45
47
  */
46
- get worldPosition() {
48
+ get screenDepth() {
47
49
  return this._inputs[1];
48
50
  }
49
51
  /**
50
- * Gets the view normal component
52
+ * Gets the world position component
51
53
  */
52
- get viewNormal() {
54
+ get worldPosition() {
53
55
  return this._inputs[2];
54
56
  }
55
57
  /**
56
- * Gets the reflectivity component
58
+ * Gets the position in local space component
57
59
  */
58
- get reflectivity() {
60
+ get localPosition() {
59
61
  return this._inputs[3];
60
62
  }
61
63
  /**
62
- * Gets the world normal component
64
+ * Gets the view normal component
63
65
  */
64
- get worldNormal() {
66
+ get viewNormal() {
65
67
  return this._inputs[4];
66
68
  }
67
69
  /**
68
- * Gets the position in local space component
70
+ * Gets the world normal component
69
71
  */
70
- get localPosition() {
72
+ get worldNormal() {
71
73
  return this._inputs[5];
72
74
  }
73
75
  /**
74
- * Gets the linear depth component
76
+ * Gets the reflectivity component
75
77
  */
76
- get viewDepthNDC() {
78
+ get reflectivity() {
77
79
  return this._inputs[6];
78
80
  }
79
81
  _getFragData(isWebGPU, index) {
@@ -87,7 +89,7 @@ export class PrePassOutputBlock extends NodeMaterialBlock {
87
89
  const worldNormal = this.worldNormal;
88
90
  const viewDepth = this.viewDepth;
89
91
  const reflectivity = this.reflectivity;
90
- const viewDepthNDC = this.viewDepthNDC;
92
+ const screenDepth = this.screenDepth;
91
93
  state.sharedData.blocksWithDefines.push(this);
92
94
  const comments = `//${this.name}`;
93
95
  const vec4 = state._getShaderType(NodeMaterialBlockConnectionPointTypes.Vector4);
@@ -104,13 +106,13 @@ export class PrePassOutputBlock extends NodeMaterialBlock {
104
106
  state.compilationString += ` fragData[PREPASS_DEPTH_INDEX] = ${vec4}(0.0, 0.0, 0.0, 0.0);\r\n`;
105
107
  }
106
108
  state.compilationString += `#endif\r\n`;
107
- state.compilationString += `#ifdef PREPASS_NDC_DEPTH\r\n`;
108
- if (viewDepthNDC.connectedPoint) {
109
- state.compilationString += ` gl_FragData[PREPASS_NDC_DEPTH_INDEX] = vec4(${viewDepthNDC.associatedVariableName}, 0.0, 0.0, 1.0);\r\n`;
109
+ state.compilationString += `#ifdef PREPASS_SCREENSPACE_DEPTH\r\n`;
110
+ if (screenDepth.connectedPoint) {
111
+ state.compilationString += ` gl_FragData[PREPASS_SCREENSPACE_DEPTH_INDEX] = vec4(${screenDepth.associatedVariableName}, 0.0, 0.0, 1.0);\r\n`;
110
112
  }
111
113
  else {
112
114
  // We have to write something on the viewDepth output or it will raise a gl error
113
- state.compilationString += ` gl_FragData[PREPASS_NDC_DEPTH_INDEX] = vec4(0.0, 0.0, 0.0, 0.0);\r\n`;
115
+ state.compilationString += ` gl_FragData[PREPASS_SCREENSPACE_DEPTH_INDEX] = vec4(0.0, 0.0, 0.0, 0.0);\r\n`;
114
116
  }
115
117
  state.compilationString += `#endif\r\n`;
116
118
  state.compilationString += `#ifdef PREPASS_POSITION\r\n`;
@@ -1 +1 @@
1
- {"version":3,"file":"prePassOutputBlock.js","sourceRoot":"","sources":["../../../../../../../dev/core/src/Materials/Node/Blocks/Fragment/prePassOutputBlock.ts"],"names":[],"mappings":"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","sourcesContent":["import { NodeMaterialBlock } from \"../../nodeMaterialBlock\";\r\nimport { NodeMaterialBlockConnectionPointTypes } from \"../../Enums/nodeMaterialBlockConnectionPointTypes\";\r\nimport type { NodeMaterialBuildState } from \"../../nodeMaterialBuildState\";\r\nimport { NodeMaterialBlockTargets } from \"../../Enums/nodeMaterialBlockTargets\";\r\nimport type { NodeMaterialConnectionPoint } from \"../../nodeMaterialBlockConnectionPoint\";\r\nimport { RegisterClass } from \"../../../../Misc/typeStore\";\r\nimport { ShaderLanguage } from \"core/Materials/shaderLanguage\";\r\n\r\n/**\r\n * Block used to output values on the prepass textures\r\n * #WW65SN#9\r\n */\r\nexport class PrePassOutputBlock extends NodeMaterialBlock {\r\n /**\r\n * Create a new PrePassOutputBlock\r\n * @param name defines the block name\r\n */\r\n public constructor(name: string) {\r\n super(name, NodeMaterialBlockTargets.Fragment, true);\r\n\r\n this.registerInput(\"viewDepth\", NodeMaterialBlockConnectionPointTypes.Float, true);\r\n this.registerInput(\"viewDepthLinear\", NodeMaterialBlockConnectionPointTypes.Float, true);\r\n this.registerInput(\"worldPosition\", NodeMaterialBlockConnectionPointTypes.AutoDetect, true);\r\n this.registerInput(\"localPosition\", NodeMaterialBlockConnectionPointTypes.AutoDetect, true);\r\n this.registerInput(\"viewNormal\", NodeMaterialBlockConnectionPointTypes.AutoDetect, true);\r\n this.registerInput(\"worldNormal\", NodeMaterialBlockConnectionPointTypes.AutoDetect, true);\r\n this.registerInput(\"reflectivity\", NodeMaterialBlockConnectionPointTypes.AutoDetect, true);\r\n\r\n this.inputs[1].addExcludedConnectionPointFromAllowedTypes(NodeMaterialBlockConnectionPointTypes.Vector3 | NodeMaterialBlockConnectionPointTypes.Vector4);\r\n this.inputs[2].addExcludedConnectionPointFromAllowedTypes(NodeMaterialBlockConnectionPointTypes.Vector3 | NodeMaterialBlockConnectionPointTypes.Vector4);\r\n this.inputs[3].addExcludedConnectionPointFromAllowedTypes(\r\n NodeMaterialBlockConnectionPointTypes.Vector3 |\r\n NodeMaterialBlockConnectionPointTypes.Vector4 |\r\n NodeMaterialBlockConnectionPointTypes.Color3 |\r\n NodeMaterialBlockConnectionPointTypes.Color4\r\n );\r\n }\r\n\r\n /**\r\n * Gets the current class name\r\n * @returns the class name\r\n */\r\n public override getClassName() {\r\n return \"PrePassOutputBlock\";\r\n }\r\n\r\n /**\r\n * Gets the view depth component\r\n */\r\n public get viewDepth(): NodeMaterialConnectionPoint {\r\n return this._inputs[0];\r\n }\r\n\r\n /**\r\n * Gets the world position component\r\n */\r\n public get worldPosition(): NodeMaterialConnectionPoint {\r\n return this._inputs[1];\r\n }\r\n\r\n /**\r\n * Gets the view normal component\r\n */\r\n public get viewNormal(): NodeMaterialConnectionPoint {\r\n return this._inputs[2];\r\n }\r\n\r\n /**\r\n * Gets the reflectivity component\r\n */\r\n public get reflectivity(): NodeMaterialConnectionPoint {\r\n return this._inputs[3];\r\n }\r\n\r\n /**\r\n * Gets the world normal component\r\n */\r\n public get worldNormal(): NodeMaterialConnectionPoint {\r\n return this._inputs[4];\r\n }\r\n\r\n /**\r\n * Gets the position in local space component\r\n */\r\n public get localPosition(): NodeMaterialConnectionPoint {\r\n return this._inputs[5];\r\n }\r\n\r\n /**\r\n * Gets the linear depth component\r\n */\r\n public get viewDepthNDC(): NodeMaterialConnectionPoint {\r\n return this._inputs[6];\r\n }\r\n\r\n private _getFragData(isWebGPU: boolean, index: number) {\r\n return isWebGPU ? `fragmentOutputs.fragData${index}` : `gl_FragData[${index}]`;\r\n }\r\n\r\n protected override _buildBlock(state: NodeMaterialBuildState) {\r\n super._buildBlock(state);\r\n\r\n const worldPosition = this.worldPosition;\r\n const localPosition = this.localPosition;\r\n const viewNormal = this.viewNormal;\r\n const worldNormal = this.worldNormal;\r\n const viewDepth = this.viewDepth;\r\n const reflectivity = this.reflectivity;\r\n const viewDepthNDC = this.viewDepthNDC;\r\n\r\n state.sharedData.blocksWithDefines.push(this);\r\n\r\n const comments = `//${this.name}`;\r\n const vec4 = state._getShaderType(NodeMaterialBlockConnectionPointTypes.Vector4);\r\n const isWebGPU = state.shaderLanguage === ShaderLanguage.WGSL;\r\n state._emitFunctionFromInclude(\"helperFunctions\", comments);\r\n\r\n state.compilationString += `#if defined(PREPASS)\\r\\n`;\r\n state.compilationString += isWebGPU ? `var fragData: array<vec4<f32>, SCENE_MRT_COUNT>;\\r\\n` : `vec4 fragData[SCENE_MRT_COUNT];\\r\\n`;\r\n\r\n state.compilationString += `#ifdef PREPASS_DEPTH\\r\\n`;\r\n if (viewDepth.connectedPoint) {\r\n state.compilationString += ` fragData[PREPASS_DEPTH_INDEX] = ${vec4}(${viewDepth.associatedVariableName}, 0.0, 0.0, 1.0);\\r\\n`;\r\n } else {\r\n // We have to write something on the viewDepth output or it will raise a gl error\r\n state.compilationString += ` fragData[PREPASS_DEPTH_INDEX] = ${vec4}(0.0, 0.0, 0.0, 0.0);\\r\\n`;\r\n }\r\n state.compilationString += `#endif\\r\\n`;\r\n state.compilationString += `#ifdef PREPASS_NDC_DEPTH\\r\\n`;\r\n if (viewDepthNDC.connectedPoint) {\r\n state.compilationString += ` gl_FragData[PREPASS_NDC_DEPTH_INDEX] = vec4(${viewDepthNDC.associatedVariableName}, 0.0, 0.0, 1.0);\\r\\n`;\r\n } else {\r\n // We have to write something on the viewDepth output or it will raise a gl error\r\n state.compilationString += ` gl_FragData[PREPASS_NDC_DEPTH_INDEX] = vec4(0.0, 0.0, 0.0, 0.0);\\r\\n`;\r\n }\r\n state.compilationString += `#endif\\r\\n`;\r\n state.compilationString += `#ifdef PREPASS_POSITION\\r\\n`;\r\n if (worldPosition.connectedPoint) {\r\n state.compilationString += `fragData[PREPASS_POSITION_INDEX] = ${vec4}(${worldPosition.associatedVariableName}.rgb, ${\r\n worldPosition.connectedPoint.type === NodeMaterialBlockConnectionPointTypes.Vector4 ? worldPosition.associatedVariableName + \".a\" : \"1.0\"\r\n });\\r\\n`;\r\n } else {\r\n // We have to write something on the position output or it will raise a gl error\r\n state.compilationString += ` fragData[PREPASS_POSITION_INDEX] = ${vec4}(0.0, 0.0, 0.0, 0.0);\\r\\n`;\r\n }\r\n state.compilationString += `#endif\\r\\n`;\r\n state.compilationString += `#ifdef PREPASS_LOCAL_POSITION\\r\\n`;\r\n if (localPosition.connectedPoint) {\r\n state.compilationString += ` gl_FragData[PREPASS_LOCAL_POSITION_INDEX] = vec4(${localPosition.associatedVariableName}.rgb, ${\r\n localPosition.connectedPoint.type === NodeMaterialBlockConnectionPointTypes.Vector4 ? localPosition.associatedVariableName + \".a\" : \"1.0\"\r\n });\\r\\n`;\r\n } else {\r\n // We have to write something on the position output or it will raise a gl error\r\n state.compilationString += ` gl_FragData[PREPASS_LOCAL_POSITION_INDEX] = vec4(0.0, 0.0, 0.0, 0.0);\\r\\n`;\r\n }\r\n state.compilationString += `#endif\\r\\n`;\r\n state.compilationString += `#ifdef PREPASS_NORMAL\\r\\n`;\r\n if (viewNormal.connectedPoint) {\r\n state.compilationString += ` fragData[PREPASS_NORMAL_INDEX] = ${vec4}(${viewNormal.associatedVariableName}.rgb, ${\r\n viewNormal.connectedPoint.type === NodeMaterialBlockConnectionPointTypes.Vector4 ? viewNormal.associatedVariableName + \".a\" : \"1.0\"\r\n });\\r\\n`;\r\n } else {\r\n // We have to write something on the normal output or it will raise a gl error\r\n state.compilationString += ` fragData[PREPASS_NORMAL_INDEX] = ${vec4}(0.0, 0.0, 0.0, 0.0);\\r\\n`;\r\n }\r\n state.compilationString += `#endif\\r\\n`;\r\n state.compilationString += `#ifdef PREPASS_WORLD_NORMAL\\r\\n`;\r\n if (worldNormal.connectedPoint) {\r\n state.compilationString += ` gl_FragData[PREPASS_WORLD_NORMAL_INDEX] = vec4(${worldNormal.associatedVariableName}.rgb, ${\r\n worldNormal.connectedPoint.type === NodeMaterialBlockConnectionPointTypes.Vector4 ? worldNormal.associatedVariableName + \".a\" : \"1.0\"\r\n });\\r\\n`;\r\n } else {\r\n // We have to write something on the normal output or it will raise a gl error\r\n state.compilationString += ` gl_FragData[PREPASS_WORLD_NORMAL_INDEX] = vec4(0.0, 0.0, 0.0, 0.0);\\r\\n`;\r\n }\r\n state.compilationString += `#endif\\r\\n`;\r\n state.compilationString += `#ifdef PREPASS_REFLECTIVITY\\r\\n`;\r\n if (reflectivity.connectedPoint) {\r\n state.compilationString += ` fragData[PREPASS_REFLECTIVITY_INDEX] = ${vec4}(${reflectivity.associatedVariableName}.rgb, ${\r\n reflectivity.connectedPoint.type === NodeMaterialBlockConnectionPointTypes.Vector4 ? reflectivity.associatedVariableName + \".a\" : \"1.0\"\r\n });\\r\\n`;\r\n } else {\r\n // We have to write something on the reflectivity output or it will raise a gl error\r\n state.compilationString += ` fragData[PREPASS_REFLECTIVITY_INDEX] = ${vec4}(0.0, 0.0, 0.0, 1.0);\\r\\n`;\r\n }\r\n state.compilationString += `#endif\\r\\n`;\r\n\r\n state.compilationString += `#if SCENE_MRT_COUNT > 1\\r\\n`;\r\n state.compilationString += `${this._getFragData(isWebGPU, 1)} = fragData[1];\\r\\n`;\r\n state.compilationString += `#endif\\r\\n`;\r\n state.compilationString += `#if SCENE_MRT_COUNT > 2\\r\\n`;\r\n state.compilationString += `${this._getFragData(isWebGPU, 2)} = fragData[2];\\r\\n`;\r\n state.compilationString += `#endif\\r\\n`;\r\n state.compilationString += `#if SCENE_MRT_COUNT > 3\\r\\n`;\r\n state.compilationString += `${this._getFragData(isWebGPU, 3)} = fragData[3];\\r\\n`;\r\n state.compilationString += `#endif\\r\\n`;\r\n state.compilationString += `#if SCENE_MRT_COUNT > 4\\r\\n`;\r\n state.compilationString += `${this._getFragData(isWebGPU, 4)} = fragData[4];\\r\\n`;\r\n state.compilationString += `#endif\\r\\n`;\r\n state.compilationString += `#if SCENE_MRT_COUNT > 5\\r\\n`;\r\n state.compilationString += `${this._getFragData(isWebGPU, 5)} = fragData[5];\\r\\n`;\r\n state.compilationString += `#endif\\r\\n`;\r\n state.compilationString += `#if SCENE_MRT_COUNT > 6\\r\\n`;\r\n state.compilationString += `${this._getFragData(isWebGPU, 6)} = fragData[6];\\r\\n`;\r\n state.compilationString += `#endif\\r\\n`;\r\n state.compilationString += `#if SCENE_MRT_COUNT > 7\\r\\n`;\r\n state.compilationString += `${this._getFragData(isWebGPU, 7)} = fragData[7];\\r\\n`;\r\n state.compilationString += `#endif\\r\\n`;\r\n\r\n state.compilationString += `#endif\\r\\n`;\r\n\r\n return this;\r\n }\r\n}\r\n\r\nRegisterClass(\"BABYLON.PrePassOutputBlock\", PrePassOutputBlock);\r\n"]}
1
+ {"version":3,"file":"prePassOutputBlock.js","sourceRoot":"","sources":["../../../../../../../dev/core/src/Materials/Node/Blocks/Fragment/prePassOutputBlock.ts"],"names":[],"mappings":"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","sourcesContent":["import { NodeMaterialBlock } from \"../../nodeMaterialBlock\";\r\nimport { NodeMaterialBlockConnectionPointTypes } from \"../../Enums/nodeMaterialBlockConnectionPointTypes\";\r\nimport type { NodeMaterialBuildState } from \"../../nodeMaterialBuildState\";\r\nimport { NodeMaterialBlockTargets } from \"../../Enums/nodeMaterialBlockTargets\";\r\nimport type { NodeMaterialConnectionPoint } from \"../../nodeMaterialBlockConnectionPoint\";\r\nimport { RegisterClass } from \"../../../../Misc/typeStore\";\r\nimport { ShaderLanguage } from \"core/Materials/shaderLanguage\";\r\n\r\n/**\r\n * Block used to output values on the prepass textures\r\n * #WW65SN#9\r\n */\r\nexport class PrePassOutputBlock extends NodeMaterialBlock {\r\n /**\r\n * Create a new PrePassOutputBlock\r\n * @param name defines the block name\r\n */\r\n public constructor(name: string) {\r\n super(name, NodeMaterialBlockTargets.Fragment, true);\r\n\r\n this.registerInput(\"viewDepth\", NodeMaterialBlockConnectionPointTypes.Float, true);\r\n this.registerInput(\"screenDepth\", NodeMaterialBlockConnectionPointTypes.Float, true);\r\n this.registerInput(\"worldPosition\", NodeMaterialBlockConnectionPointTypes.AutoDetect, true);\r\n this.registerInput(\"localPosition\", NodeMaterialBlockConnectionPointTypes.AutoDetect, true);\r\n this.registerInput(\"viewNormal\", NodeMaterialBlockConnectionPointTypes.AutoDetect, true);\r\n this.registerInput(\"worldNormal\", NodeMaterialBlockConnectionPointTypes.AutoDetect, true);\r\n this.registerInput(\"reflectivity\", NodeMaterialBlockConnectionPointTypes.AutoDetect, true);\r\n\r\n this.inputs[2].addExcludedConnectionPointFromAllowedTypes(NodeMaterialBlockConnectionPointTypes.Vector3 | NodeMaterialBlockConnectionPointTypes.Vector4);\r\n this.inputs[3].addExcludedConnectionPointFromAllowedTypes(NodeMaterialBlockConnectionPointTypes.Vector3 | NodeMaterialBlockConnectionPointTypes.Vector4);\r\n this.inputs[4].addExcludedConnectionPointFromAllowedTypes(NodeMaterialBlockConnectionPointTypes.Vector3 | NodeMaterialBlockConnectionPointTypes.Vector4);\r\n this.inputs[5].addExcludedConnectionPointFromAllowedTypes(NodeMaterialBlockConnectionPointTypes.Vector3 | NodeMaterialBlockConnectionPointTypes.Vector4);\r\n this.inputs[6].addExcludedConnectionPointFromAllowedTypes(\r\n NodeMaterialBlockConnectionPointTypes.Vector3 |\r\n NodeMaterialBlockConnectionPointTypes.Vector4 |\r\n NodeMaterialBlockConnectionPointTypes.Color3 |\r\n NodeMaterialBlockConnectionPointTypes.Color4\r\n );\r\n }\r\n\r\n /**\r\n * Gets the current class name\r\n * @returns the class name\r\n */\r\n public override getClassName() {\r\n return \"PrePassOutputBlock\";\r\n }\r\n\r\n /**\r\n * Gets the view depth component\r\n */\r\n public get viewDepth(): NodeMaterialConnectionPoint {\r\n return this._inputs[0];\r\n }\r\n\r\n /**\r\n * Gets the screen depth component\r\n */\r\n public get screenDepth(): NodeMaterialConnectionPoint {\r\n return this._inputs[1];\r\n }\r\n\r\n /**\r\n * Gets the world position component\r\n */\r\n public get worldPosition(): NodeMaterialConnectionPoint {\r\n return this._inputs[2];\r\n }\r\n\r\n /**\r\n * Gets the position in local space component\r\n */\r\n public get localPosition(): NodeMaterialConnectionPoint {\r\n return this._inputs[3];\r\n }\r\n\r\n /**\r\n * Gets the view normal component\r\n */\r\n public get viewNormal(): NodeMaterialConnectionPoint {\r\n return this._inputs[4];\r\n }\r\n\r\n /**\r\n * Gets the world normal component\r\n */\r\n public get worldNormal(): NodeMaterialConnectionPoint {\r\n return this._inputs[5];\r\n }\r\n\r\n /**\r\n * Gets the reflectivity component\r\n */\r\n public get reflectivity(): NodeMaterialConnectionPoint {\r\n return this._inputs[6];\r\n }\r\n\r\n private _getFragData(isWebGPU: boolean, index: number) {\r\n return isWebGPU ? `fragmentOutputs.fragData${index}` : `gl_FragData[${index}]`;\r\n }\r\n\r\n protected override _buildBlock(state: NodeMaterialBuildState) {\r\n super._buildBlock(state);\r\n\r\n const worldPosition = this.worldPosition;\r\n const localPosition = this.localPosition;\r\n const viewNormal = this.viewNormal;\r\n const worldNormal = this.worldNormal;\r\n const viewDepth = this.viewDepth;\r\n const reflectivity = this.reflectivity;\r\n const screenDepth = this.screenDepth;\r\n\r\n state.sharedData.blocksWithDefines.push(this);\r\n\r\n const comments = `//${this.name}`;\r\n const vec4 = state._getShaderType(NodeMaterialBlockConnectionPointTypes.Vector4);\r\n const isWebGPU = state.shaderLanguage === ShaderLanguage.WGSL;\r\n state._emitFunctionFromInclude(\"helperFunctions\", comments);\r\n\r\n state.compilationString += `#if defined(PREPASS)\\r\\n`;\r\n state.compilationString += isWebGPU ? `var fragData: array<vec4<f32>, SCENE_MRT_COUNT>;\\r\\n` : `vec4 fragData[SCENE_MRT_COUNT];\\r\\n`;\r\n\r\n state.compilationString += `#ifdef PREPASS_DEPTH\\r\\n`;\r\n if (viewDepth.connectedPoint) {\r\n state.compilationString += ` fragData[PREPASS_DEPTH_INDEX] = ${vec4}(${viewDepth.associatedVariableName}, 0.0, 0.0, 1.0);\\r\\n`;\r\n } else {\r\n // We have to write something on the viewDepth output or it will raise a gl error\r\n state.compilationString += ` fragData[PREPASS_DEPTH_INDEX] = ${vec4}(0.0, 0.0, 0.0, 0.0);\\r\\n`;\r\n }\r\n state.compilationString += `#endif\\r\\n`;\r\n state.compilationString += `#ifdef PREPASS_SCREENSPACE_DEPTH\\r\\n`;\r\n if (screenDepth.connectedPoint) {\r\n state.compilationString += ` gl_FragData[PREPASS_SCREENSPACE_DEPTH_INDEX] = vec4(${screenDepth.associatedVariableName}, 0.0, 0.0, 1.0);\\r\\n`;\r\n } else {\r\n // We have to write something on the viewDepth output or it will raise a gl error\r\n state.compilationString += ` gl_FragData[PREPASS_SCREENSPACE_DEPTH_INDEX] = vec4(0.0, 0.0, 0.0, 0.0);\\r\\n`;\r\n }\r\n state.compilationString += `#endif\\r\\n`;\r\n state.compilationString += `#ifdef PREPASS_POSITION\\r\\n`;\r\n if (worldPosition.connectedPoint) {\r\n state.compilationString += `fragData[PREPASS_POSITION_INDEX] = ${vec4}(${worldPosition.associatedVariableName}.rgb, ${\r\n worldPosition.connectedPoint.type === NodeMaterialBlockConnectionPointTypes.Vector4 ? worldPosition.associatedVariableName + \".a\" : \"1.0\"\r\n });\\r\\n`;\r\n } else {\r\n // We have to write something on the position output or it will raise a gl error\r\n state.compilationString += ` fragData[PREPASS_POSITION_INDEX] = ${vec4}(0.0, 0.0, 0.0, 0.0);\\r\\n`;\r\n }\r\n state.compilationString += `#endif\\r\\n`;\r\n state.compilationString += `#ifdef PREPASS_LOCAL_POSITION\\r\\n`;\r\n if (localPosition.connectedPoint) {\r\n state.compilationString += ` gl_FragData[PREPASS_LOCAL_POSITION_INDEX] = vec4(${localPosition.associatedVariableName}.rgb, ${\r\n localPosition.connectedPoint.type === NodeMaterialBlockConnectionPointTypes.Vector4 ? localPosition.associatedVariableName + \".a\" : \"1.0\"\r\n });\\r\\n`;\r\n } else {\r\n // We have to write something on the position output or it will raise a gl error\r\n state.compilationString += ` gl_FragData[PREPASS_LOCAL_POSITION_INDEX] = vec4(0.0, 0.0, 0.0, 0.0);\\r\\n`;\r\n }\r\n state.compilationString += `#endif\\r\\n`;\r\n state.compilationString += `#ifdef PREPASS_NORMAL\\r\\n`;\r\n if (viewNormal.connectedPoint) {\r\n state.compilationString += ` fragData[PREPASS_NORMAL_INDEX] = ${vec4}(${viewNormal.associatedVariableName}.rgb, ${\r\n viewNormal.connectedPoint.type === NodeMaterialBlockConnectionPointTypes.Vector4 ? viewNormal.associatedVariableName + \".a\" : \"1.0\"\r\n });\\r\\n`;\r\n } else {\r\n // We have to write something on the normal output or it will raise a gl error\r\n state.compilationString += ` fragData[PREPASS_NORMAL_INDEX] = ${vec4}(0.0, 0.0, 0.0, 0.0);\\r\\n`;\r\n }\r\n state.compilationString += `#endif\\r\\n`;\r\n state.compilationString += `#ifdef PREPASS_WORLD_NORMAL\\r\\n`;\r\n if (worldNormal.connectedPoint) {\r\n state.compilationString += ` gl_FragData[PREPASS_WORLD_NORMAL_INDEX] = vec4(${worldNormal.associatedVariableName}.rgb, ${\r\n worldNormal.connectedPoint.type === NodeMaterialBlockConnectionPointTypes.Vector4 ? worldNormal.associatedVariableName + \".a\" : \"1.0\"\r\n });\\r\\n`;\r\n } else {\r\n // We have to write something on the normal output or it will raise a gl error\r\n state.compilationString += ` gl_FragData[PREPASS_WORLD_NORMAL_INDEX] = vec4(0.0, 0.0, 0.0, 0.0);\\r\\n`;\r\n }\r\n state.compilationString += `#endif\\r\\n`;\r\n state.compilationString += `#ifdef PREPASS_REFLECTIVITY\\r\\n`;\r\n if (reflectivity.connectedPoint) {\r\n state.compilationString += ` fragData[PREPASS_REFLECTIVITY_INDEX] = ${vec4}(${reflectivity.associatedVariableName}.rgb, ${\r\n reflectivity.connectedPoint.type === NodeMaterialBlockConnectionPointTypes.Vector4 ? reflectivity.associatedVariableName + \".a\" : \"1.0\"\r\n });\\r\\n`;\r\n } else {\r\n // We have to write something on the reflectivity output or it will raise a gl error\r\n state.compilationString += ` fragData[PREPASS_REFLECTIVITY_INDEX] = ${vec4}(0.0, 0.0, 0.0, 1.0);\\r\\n`;\r\n }\r\n state.compilationString += `#endif\\r\\n`;\r\n\r\n state.compilationString += `#if SCENE_MRT_COUNT > 1\\r\\n`;\r\n state.compilationString += `${this._getFragData(isWebGPU, 1)} = fragData[1];\\r\\n`;\r\n state.compilationString += `#endif\\r\\n`;\r\n state.compilationString += `#if SCENE_MRT_COUNT > 2\\r\\n`;\r\n state.compilationString += `${this._getFragData(isWebGPU, 2)} = fragData[2];\\r\\n`;\r\n state.compilationString += `#endif\\r\\n`;\r\n state.compilationString += `#if SCENE_MRT_COUNT > 3\\r\\n`;\r\n state.compilationString += `${this._getFragData(isWebGPU, 3)} = fragData[3];\\r\\n`;\r\n state.compilationString += `#endif\\r\\n`;\r\n state.compilationString += `#if SCENE_MRT_COUNT > 4\\r\\n`;\r\n state.compilationString += `${this._getFragData(isWebGPU, 4)} = fragData[4];\\r\\n`;\r\n state.compilationString += `#endif\\r\\n`;\r\n state.compilationString += `#if SCENE_MRT_COUNT > 5\\r\\n`;\r\n state.compilationString += `${this._getFragData(isWebGPU, 5)} = fragData[5];\\r\\n`;\r\n state.compilationString += `#endif\\r\\n`;\r\n state.compilationString += `#if SCENE_MRT_COUNT > 6\\r\\n`;\r\n state.compilationString += `${this._getFragData(isWebGPU, 6)} = fragData[6];\\r\\n`;\r\n state.compilationString += `#endif\\r\\n`;\r\n state.compilationString += `#if SCENE_MRT_COUNT > 7\\r\\n`;\r\n state.compilationString += `${this._getFragData(isWebGPU, 7)} = fragData[7];\\r\\n`;\r\n state.compilationString += `#endif\\r\\n`;\r\n\r\n state.compilationString += `#endif\\r\\n`;\r\n\r\n return this;\r\n }\r\n}\r\n\r\nRegisterClass(\"BABYLON.PrePassOutputBlock\", PrePassOutputBlock);\r\n"]}
@@ -11,7 +11,7 @@ export declare class PrePassTextureBlock extends NodeMaterialBlock {
11
11
  private _positionSamplerName;
12
12
  private _localPositionSamplerName;
13
13
  private _depthSamplerName;
14
- private _clipSpaceDepthSamplerName;
14
+ private _screenSpaceDepthSamplerName;
15
15
  private _normalSamplerName;
16
16
  private _worldNormalSamplerName;
17
17
  /**
@@ -35,10 +35,18 @@ export declare class PrePassTextureBlock extends NodeMaterialBlock {
35
35
  * Gets the position texture
36
36
  */
37
37
  get position(): NodeMaterialConnectionPoint;
38
+ /**
39
+ * Gets the local position texture
40
+ */
41
+ get localPosition(): NodeMaterialConnectionPoint;
38
42
  /**
39
43
  * Gets the depth texture
40
44
  */
41
45
  get depth(): NodeMaterialConnectionPoint;
46
+ /**
47
+ * Gets the screen depth texture
48
+ */
49
+ get screenDepth(): NodeMaterialConnectionPoint;
42
50
  /**
43
51
  * Gets the normal texture
44
52
  */
@@ -47,14 +55,6 @@ export declare class PrePassTextureBlock extends NodeMaterialBlock {
47
55
  * Gets the world normal texture
48
56
  */
49
57
  get worldNormal(): NodeMaterialConnectionPoint;
50
- /**
51
- * Gets the local position texture
52
- */
53
- get localPosition(): NodeMaterialConnectionPoint;
54
- /**
55
- * Gets the depth texture
56
- */
57
- get clipSpaceDepth(): NodeMaterialConnectionPoint;
58
58
  /**
59
59
  * Gets the sampler name associated with this image source
60
60
  */
@@ -26,8 +26,11 @@ export class PrePassTextureBlock extends NodeMaterialBlock {
26
26
  constructor(name, target = NodeMaterialBlockTargets.VertexAndFragment) {
27
27
  super(name, target, false);
28
28
  this.registerOutput("position", NodeMaterialBlockConnectionPointTypes.Object, NodeMaterialBlockTargets.VertexAndFragment, new NodeMaterialConnectionPointCustomObject("position", this, 1 /* NodeMaterialConnectionPointDirection.Output */, ImageSourceBlock, "ImageSourceBlock"));
29
+ this.registerOutput("localPosition", NodeMaterialBlockConnectionPointTypes.Object, NodeMaterialBlockTargets.VertexAndFragment, new NodeMaterialConnectionPointCustomObject("localPosition", this, 1 /* NodeMaterialConnectionPointDirection.Output */, ImageSourceBlock, "ImageSourceBlock"));
29
30
  this.registerOutput("depth", NodeMaterialBlockConnectionPointTypes.Object, NodeMaterialBlockTargets.VertexAndFragment, new NodeMaterialConnectionPointCustomObject("depth", this, 1 /* NodeMaterialConnectionPointDirection.Output */, ImageSourceBlock, "ImageSourceBlock"));
31
+ this.registerOutput("screenDepth", NodeMaterialBlockConnectionPointTypes.Object, NodeMaterialBlockTargets.VertexAndFragment, new NodeMaterialConnectionPointCustomObject("screenDepth", this, 1 /* NodeMaterialConnectionPointDirection.Output */, ImageSourceBlock, "ImageSourceBlock"));
30
32
  this.registerOutput("normal", NodeMaterialBlockConnectionPointTypes.Object, NodeMaterialBlockTargets.VertexAndFragment, new NodeMaterialConnectionPointCustomObject("normal", this, 1 /* NodeMaterialConnectionPointDirection.Output */, ImageSourceBlock, "ImageSourceBlock"));
33
+ this.registerOutput("worldNormal", NodeMaterialBlockConnectionPointTypes.Object, NodeMaterialBlockTargets.VertexAndFragment, new NodeMaterialConnectionPointCustomObject("worldNormal", this, 1 /* NodeMaterialConnectionPointDirection.Output */, ImageSourceBlock, "ImageSourceBlock"));
31
34
  }
32
35
  /**
33
36
  * Returns the sampler name associated with the node connection point
@@ -39,19 +42,19 @@ export class PrePassTextureBlock extends NodeMaterialBlock {
39
42
  return this._positionSamplerName;
40
43
  }
41
44
  if (output === this._outputs[1]) {
42
- return this._depthSamplerName;
45
+ return this._localPositionSamplerName;
43
46
  }
44
47
  if (output === this._outputs[2]) {
45
- return this._normalSamplerName;
48
+ return this._depthSamplerName;
46
49
  }
47
50
  if (output === this._outputs[3]) {
48
- return this._worldNormalSamplerName;
51
+ return this._screenSpaceDepthSamplerName;
49
52
  }
50
53
  if (output === this._outputs[4]) {
51
- return this._localPositionSamplerName;
54
+ return this._normalSamplerName;
52
55
  }
53
56
  if (output === this._outputs[5]) {
54
- return this._clipSpaceDepthSamplerName;
57
+ return this._worldNormalSamplerName;
55
58
  }
56
59
  return "";
57
60
  }
@@ -62,33 +65,33 @@ export class PrePassTextureBlock extends NodeMaterialBlock {
62
65
  return this._outputs[0];
63
66
  }
64
67
  /**
65
- * Gets the depth texture
68
+ * Gets the local position texture
66
69
  */
67
- get depth() {
70
+ get localPosition() {
68
71
  return this._outputs[1];
69
72
  }
70
73
  /**
71
- * Gets the normal texture
74
+ * Gets the depth texture
72
75
  */
73
- get normal() {
76
+ get depth() {
74
77
  return this._outputs[2];
75
78
  }
76
79
  /**
77
- * Gets the world normal texture
80
+ * Gets the screen depth texture
78
81
  */
79
- get worldNormal() {
82
+ get screenDepth() {
80
83
  return this._outputs[3];
81
84
  }
82
85
  /**
83
- * Gets the local position texture
86
+ * Gets the normal texture
84
87
  */
85
- get localPosition() {
88
+ get normal() {
86
89
  return this._outputs[4];
87
90
  }
88
91
  /**
89
- * Gets the depth texture
92
+ * Gets the world normal texture
90
93
  */
91
- get clipSpaceDepth() {
94
+ get worldNormal() {
92
95
  return this._outputs[5];
93
96
  }
94
97
  /**
@@ -125,7 +128,7 @@ export class PrePassTextureBlock extends NodeMaterialBlock {
125
128
  * Gets the sampler name associated with this image source
126
129
  */
127
130
  get linearDepthSamplerName() {
128
- return this._clipSpaceDepthSamplerName;
131
+ return this._screenSpaceDepthSamplerName;
129
132
  }
130
133
  /**
131
134
  * Gets the current class name
@@ -144,23 +147,35 @@ export class PrePassTextureBlock extends NodeMaterialBlock {
144
147
  this._normalSamplerName = "prepassNormalSampler";
145
148
  this._worldNormalSamplerName = "prepassWorldNormalSampler";
146
149
  this._localPositionSamplerName = "prepassLocalPositionSampler";
147
- this._clipSpaceDepthSamplerName = "prepassClipSpaceDepthSampler";
150
+ this._screenSpaceDepthSamplerName = "prepassScreenSpaceDepthSampler";
148
151
  // Unique sampler names for every prepasstexture block
149
152
  state.sharedData.variableNames.prepassPositionSampler = 0;
150
153
  state.sharedData.variableNames.prepassDepthSampler = 0;
151
154
  state.sharedData.variableNames.prepassNormalSampler = 0;
152
155
  state.sharedData.variableNames.prepassWorldNormalSampler = 0;
153
156
  state.sharedData.variableNames.prepassLocalPositionSampler = 0;
154
- state.sharedData.variableNames.prepassClipSpaceDepthSampler = 0;
157
+ state.sharedData.variableNames.prepassScreenSpaceDepthSampler = 0;
155
158
  // Declarations
156
159
  state.sharedData.textureBlocks.push(this);
157
160
  state.sharedData.bindableBlocks.push(this);
158
- state._emit2DSampler(this._positionSamplerName);
159
- state._emit2DSampler(this._depthSamplerName);
160
- state._emit2DSampler(this._normalSamplerName);
161
- state._emit2DSampler(this._worldNormalSamplerName);
162
- state._emit2DSampler(this._localPositionSamplerName);
163
- state._emit2DSampler(this._clipSpaceDepthSamplerName);
161
+ if (this.position.isConnected) {
162
+ state._emit2DSampler(this._positionSamplerName);
163
+ }
164
+ if (this.depth.isConnected) {
165
+ state._emit2DSampler(this._depthSamplerName);
166
+ }
167
+ if (this.normal.isConnected) {
168
+ state._emit2DSampler(this._normalSamplerName);
169
+ }
170
+ if (this.worldNormal.isConnected) {
171
+ state._emit2DSampler(this._worldNormalSamplerName);
172
+ }
173
+ if (this.localPosition.isConnected) {
174
+ state._emit2DSampler(this._localPositionSamplerName);
175
+ }
176
+ if (this.screenDepth.isConnected) {
177
+ state._emit2DSampler(this._screenSpaceDepthSamplerName);
178
+ }
164
179
  return this;
165
180
  }
166
181
  bind(effect, nodeMaterial) {
@@ -182,8 +197,8 @@ export class PrePassTextureBlock extends NodeMaterialBlock {
182
197
  if (this.depth.isConnected) {
183
198
  effect.setTexture(this._depthSamplerName, sceneRT.textures[prePassRenderer.getIndex(5)]);
184
199
  }
185
- if (this.clipSpaceDepth.isConnected) {
186
- effect.setTexture(this._clipSpaceDepthSamplerName, sceneRT.textures[prePassRenderer.getIndex(10)]);
200
+ if (this.screenDepth.isConnected) {
201
+ effect.setTexture(this._screenSpaceDepthSamplerName, sceneRT.textures[prePassRenderer.getIndex(10)]);
187
202
  }
188
203
  if (this.normal.isConnected) {
189
204
  effect.setTexture(this._normalSamplerName, sceneRT.textures[prePassRenderer.getIndex(6)]);
@@ -191,12 +206,6 @@ export class PrePassTextureBlock extends NodeMaterialBlock {
191
206
  if (this.worldNormal.isConnected) {
192
207
  effect.setTexture(this._worldNormalSamplerName, sceneRT.textures[prePassRenderer.getIndex(8)]);
193
208
  }
194
- if (this.localPosition.isConnected) {
195
- effect.setTexture(this._localPositionSamplerName, sceneRT.textures[prePassRenderer.getIndex(9)]);
196
- }
197
- if (this.clipSpaceDepth.isConnected) {
198
- effect.setTexture(this._clipSpaceDepthSamplerName, sceneRT.textures[prePassRenderer.getIndex(10)]);
199
- }
200
209
  }
201
210
  }
202
211
  RegisterClass("BABYLON.PrePassTextureBlock", PrePassTextureBlock);
@@ -1 +1 @@
1
- {"version":3,"file":"prePassTextureBlock.js","sourceRoot":"","sources":["../../../../../../../dev/core/src/Materials/Node/Blocks/Input/prePassTextureBlock.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,qCAAqC,EAAE,MAAM,mDAAmD,CAAC;AAK1G,OAAO,EAAE,wBAAwB,EAAE,MAAM,sCAAsC,CAAC;AAChF,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAE3D,OAAO,EAAE,uCAAuC,EAAE,MAAM,+CAA+C,CAAC;AACxG,OAAO,EAAE,SAAS,EAAE,MAAM,+BAA+B,CAAC;AAC1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAE5D;;GAEG;AACH,MAAM,OAAO,mBAAoB,SAAQ,iBAAiB;IAQtD;;OAEG;IACH,IAAW,OAAO;QACd,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,IAAW,OAAO,CAAC,KAAU;QACzB,OAAO;IACX,CAAC;IAED;;;;OAIG;IACH,YAAmB,IAAY,EAAE,MAAM,GAAG,wBAAwB,CAAC,iBAAiB;QAChF,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;QAE3B,IAAI,CAAC,cAAc,CACf,UAAU,EACV,qCAAqC,CAAC,MAAM,EAC5C,wBAAwB,CAAC,iBAAiB,EAC1C,IAAI,uCAAuC,CAAC,UAAU,EAAE,IAAI,uDAA+C,gBAAgB,EAAE,kBAAkB,CAAC,CACnJ,CAAC;QACF,IAAI,CAAC,cAAc,CACf,OAAO,EACP,qCAAqC,CAAC,MAAM,EAC5C,wBAAwB,CAAC,iBAAiB,EAC1C,IAAI,uCAAuC,CAAC,OAAO,EAAE,IAAI,uDAA+C,gBAAgB,EAAE,kBAAkB,CAAC,CAChJ,CAAC;QACF,IAAI,CAAC,cAAc,CACf,QAAQ,EACR,qCAAqC,CAAC,MAAM,EAC5C,wBAAwB,CAAC,iBAAiB,EAC1C,IAAI,uCAAuC,CAAC,QAAQ,EAAE,IAAI,uDAA+C,gBAAgB,EAAE,kBAAkB,CAAC,CACjJ,CAAC;IACN,CAAC;IAED;;;;OAIG;IACI,cAAc,CAAC,MAAmC;QACrD,IAAI,MAAM,KAAK,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE;YAC7B,OAAO,IAAI,CAAC,oBAAoB,CAAC;SACpC;QAED,IAAI,MAAM,KAAK,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE;YAC7B,OAAO,IAAI,CAAC,iBAAiB,CAAC;SACjC;QAED,IAAI,MAAM,KAAK,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE;YAC7B,OAAO,IAAI,CAAC,kBAAkB,CAAC;SAClC;QAED,IAAI,MAAM,KAAK,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE;YAC7B,OAAO,IAAI,CAAC,uBAAuB,CAAC;SACvC;QAED,IAAI,MAAM,KAAK,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE;YAC7B,OAAO,IAAI,CAAC,yBAAyB,CAAC;SACzC;QAED,IAAI,MAAM,KAAK,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE;YAC7B,OAAO,IAAI,CAAC,0BAA0B,CAAC;SAC1C;QAED,OAAO,EAAE,CAAC;IACd,CAAC;IAED;;OAEG;IACH,IAAW,QAAQ;QACf,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IAC5B,CAAC;IAED;;OAEG;IACH,IAAW,KAAK;QACZ,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IAC5B,CAAC;IAED;;OAEG;IACH,IAAW,MAAM;QACb,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IAC5B,CAAC;IAED;;OAEG;IACH,IAAW,WAAW;QAClB,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IAC5B,CAAC;IAED;;OAEG;IACH,IAAW,aAAa;QACpB,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IAC5B,CAAC;IAED;;OAEG;IACH,IAAW,cAAc;QACrB,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IAC5B,CAAC;IAED;;OAEG;IACH,IAAW,mBAAmB;QAC1B,OAAO,IAAI,CAAC,oBAAoB,CAAC;IACrC,CAAC;IAED;;OAEG;IACH,IAAW,wBAAwB;QAC/B,OAAO,IAAI,CAAC,yBAAyB,CAAC;IAC1C,CAAC;IAED;;OAEG;IACH,IAAW,iBAAiB;QACxB,OAAO,IAAI,CAAC,kBAAkB,CAAC;IACnC,CAAC;IAED;;OAEG;IACH,IAAW,sBAAsB;QAC7B,OAAO,IAAI,CAAC,uBAAuB,CAAC;IACxC,CAAC;IAED;;OAEG;IACH,IAAW,gBAAgB;QACvB,OAAO,IAAI,CAAC,iBAAiB,CAAC;IAClC,CAAC;IAED;;OAEG;IACH,IAAW,sBAAsB;QAC7B,OAAO,IAAI,CAAC,0BAA0B,CAAC;IAC3C,CAAC;IAED;;;OAGG;IACa,YAAY;QACxB,OAAO,qBAAqB,CAAC;IACjC,CAAC;IAEkB,WAAW,CAAC,KAA6B;QACxD,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QAEzB,IAAI,KAAK,CAAC,MAAM,KAAK,wBAAwB,CAAC,MAAM,EAAE;YAClD,OAAO;SACV;QAED,IAAI,CAAC,oBAAoB,GAAG,wBAAwB,CAAC;QACrD,IAAI,CAAC,iBAAiB,GAAG,qBAAqB,CAAC;QAC/C,IAAI,CAAC,kBAAkB,GAAG,sBAAsB,CAAC;QACjD,IAAI,CAAC,uBAAuB,GAAG,2BAA2B,CAAC;QAC3D,IAAI,CAAC,yBAAyB,GAAG,6BAA6B,CAAC;QAC/D,IAAI,CAAC,0BAA0B,GAAG,8BAA8B,CAAC;QAEjE,sDAAsD;QACtD,KAAK,CAAC,UAAU,CAAC,aAAa,CAAC,sBAAsB,GAAG,CAAC,CAAC;QAC1D,KAAK,CAAC,UAAU,CAAC,aAAa,CAAC,mBAAmB,GAAG,CAAC,CAAC;QACvD,KAAK,CAAC,UAAU,CAAC,aAAa,CAAC,oBAAoB,GAAG,CAAC,CAAC;QACxD,KAAK,CAAC,UAAU,CAAC,aAAa,CAAC,yBAAyB,GAAG,CAAC,CAAC;QAC7D,KAAK,CAAC,UAAU,CAAC,aAAa,CAAC,2BAA2B,GAAG,CAAC,CAAC;QAC/D,KAAK,CAAC,UAAU,CAAC,aAAa,CAAC,4BAA4B,GAAG,CAAC,CAAC;QAEhE,eAAe;QACf,KAAK,CAAC,UAAU,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1C,KAAK,CAAC,UAAU,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAE3C,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;QAChD,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAC7C,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;QAC9C,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;QACnD,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;QACrD,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;QAEtD,OAAO,IAAI,CAAC;IAChB,CAAC;IAEe,IAAI,CAAC,MAAc,EAAE,YAA0B;QAC3D,MAAM,KAAK,GAAG,YAAY,CAAC,QAAQ,EAAE,CAAC;QACtC,MAAM,eAAe,GAAG,KAAK,CAAC,qBAAqB,EAAE,CAAC;QACtD,IAAI,CAAC,eAAe,EAAE;YAClB,OAAO;SACV;QAED,MAAM,OAAO,GAAG,eAAe,CAAC,SAAS,CAAC;QAC1C,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE;YACnB,OAAO;SACV;QAED,IAAI,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE;YAC3B,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,oBAAoB,EAAE,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC,QAAQ,CAAC,SAAS,CAAC,6BAA6B,CAAC,CAAC,CAAC,CAAC;SACrI;QACD,IAAI,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE;YAChC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,yBAAyB,EAAE,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC,QAAQ,CAAC,SAAS,CAAC,mCAAmC,CAAC,CAAC,CAAC,CAAC;SAChJ;QACD,IAAI,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE;YACxB,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,iBAAiB,EAAE,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC,QAAQ,CAAC,SAAS,CAAC,0BAA0B,CAAC,CAAC,CAAC,CAAC;SAC/H;QACD,IAAI,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE;YACjC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,0BAA0B,EAAE,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC,QAAQ,CAAC,SAAS,CAAC,8BAA8B,CAAC,CAAC,CAAC,CAAC;SAC5I;QACD,IAAI,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE;YACzB,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,kBAAkB,EAAE,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC,QAAQ,CAAC,SAAS,CAAC,2BAA2B,CAAC,CAAC,CAAC,CAAC;SACjI;QACD,IAAI,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE;YAC9B,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,uBAAuB,EAAE,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC,QAAQ,CAAC,SAAS,CAAC,iCAAiC,CAAC,CAAC,CAAC,CAAC;SAC5I;QACD,IAAI,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE;YAChC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,yBAAyB,EAAE,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC,QAAQ,CAAC,SAAS,CAAC,mCAAmC,CAAC,CAAC,CAAC,CAAC;SAChJ;QACD,IAAI,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE;YACjC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,0BAA0B,EAAE,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC,QAAQ,CAAC,SAAS,CAAC,8BAA8B,CAAC,CAAC,CAAC,CAAC;SAC5I;IACL,CAAC;CACJ;AAED,aAAa,CAAC,6BAA6B,EAAE,mBAAmB,CAAC,CAAC","sourcesContent":["import { NodeMaterialBlock } from \"../../nodeMaterialBlock\";\r\nimport { NodeMaterialBlockConnectionPointTypes } from \"../../Enums/nodeMaterialBlockConnectionPointTypes\";\r\nimport type { Effect } from \"../../../../Materials/effect\";\r\nimport { NodeMaterialConnectionPointDirection } from \"../../nodeMaterialBlockConnectionPoint\";\r\nimport type { NodeMaterialConnectionPoint } from \"../../nodeMaterialBlockConnectionPoint\";\r\nimport type { NodeMaterialBuildState } from \"../../nodeMaterialBuildState\";\r\nimport { NodeMaterialBlockTargets } from \"../../Enums/nodeMaterialBlockTargets\";\r\nimport { RegisterClass } from \"../../../../Misc/typeStore\";\r\nimport type { NodeMaterial } from \"../../nodeMaterial\";\r\nimport { NodeMaterialConnectionPointCustomObject } from \"../../nodeMaterialConnectionPointCustomObject\";\r\nimport { Constants } from \"../../../../Engines/constants\";\r\nimport { ImageSourceBlock } from \"../Dual/imageSourceBlock\";\r\n\r\n/**\r\n * Block used to read from prepass textures\r\n */\r\nexport class PrePassTextureBlock extends NodeMaterialBlock {\r\n private _positionSamplerName: string;\r\n private _localPositionSamplerName: string;\r\n private _depthSamplerName: string;\r\n private _clipSpaceDepthSamplerName: string;\r\n private _normalSamplerName: string;\r\n private _worldNormalSamplerName: string;\r\n\r\n /**\r\n * The texture associated with the node is the prepass texture\r\n */\r\n public get texture() {\r\n return null;\r\n }\r\n\r\n public set texture(value: any) {\r\n return;\r\n }\r\n\r\n /**\r\n * Creates a new PrePassTextureBlock\r\n * @param name defines the block name\r\n * @param target defines the target of that block (VertexAndFragment by default)\r\n */\r\n public constructor(name: string, target = NodeMaterialBlockTargets.VertexAndFragment) {\r\n super(name, target, false);\r\n\r\n this.registerOutput(\r\n \"position\",\r\n NodeMaterialBlockConnectionPointTypes.Object,\r\n NodeMaterialBlockTargets.VertexAndFragment,\r\n new NodeMaterialConnectionPointCustomObject(\"position\", this, NodeMaterialConnectionPointDirection.Output, ImageSourceBlock, \"ImageSourceBlock\")\r\n );\r\n this.registerOutput(\r\n \"depth\",\r\n NodeMaterialBlockConnectionPointTypes.Object,\r\n NodeMaterialBlockTargets.VertexAndFragment,\r\n new NodeMaterialConnectionPointCustomObject(\"depth\", this, NodeMaterialConnectionPointDirection.Output, ImageSourceBlock, \"ImageSourceBlock\")\r\n );\r\n this.registerOutput(\r\n \"normal\",\r\n NodeMaterialBlockConnectionPointTypes.Object,\r\n NodeMaterialBlockTargets.VertexAndFragment,\r\n new NodeMaterialConnectionPointCustomObject(\"normal\", this, NodeMaterialConnectionPointDirection.Output, ImageSourceBlock, \"ImageSourceBlock\")\r\n );\r\n }\r\n\r\n /**\r\n * Returns the sampler name associated with the node connection point\r\n * @param output defines the connection point to get the associated sampler name\r\n * @returns\r\n */\r\n public getSamplerName(output: NodeMaterialConnectionPoint): string {\r\n if (output === this._outputs[0]) {\r\n return this._positionSamplerName;\r\n }\r\n\r\n if (output === this._outputs[1]) {\r\n return this._depthSamplerName;\r\n }\r\n\r\n if (output === this._outputs[2]) {\r\n return this._normalSamplerName;\r\n }\r\n\r\n if (output === this._outputs[3]) {\r\n return this._worldNormalSamplerName;\r\n }\r\n\r\n if (output === this._outputs[4]) {\r\n return this._localPositionSamplerName;\r\n }\r\n\r\n if (output === this._outputs[5]) {\r\n return this._clipSpaceDepthSamplerName;\r\n }\r\n\r\n return \"\";\r\n }\r\n\r\n /**\r\n * Gets the position texture\r\n */\r\n public get position(): NodeMaterialConnectionPoint {\r\n return this._outputs[0];\r\n }\r\n\r\n /**\r\n * Gets the depth texture\r\n */\r\n public get depth(): NodeMaterialConnectionPoint {\r\n return this._outputs[1];\r\n }\r\n\r\n /**\r\n * Gets the normal texture\r\n */\r\n public get normal(): NodeMaterialConnectionPoint {\r\n return this._outputs[2];\r\n }\r\n\r\n /**\r\n * Gets the world normal texture\r\n */\r\n public get worldNormal(): NodeMaterialConnectionPoint {\r\n return this._outputs[3];\r\n }\r\n\r\n /**\r\n * Gets the local position texture\r\n */\r\n public get localPosition(): NodeMaterialConnectionPoint {\r\n return this._outputs[4];\r\n }\r\n\r\n /**\r\n * Gets the depth texture\r\n */\r\n public get clipSpaceDepth(): NodeMaterialConnectionPoint {\r\n return this._outputs[5];\r\n }\r\n\r\n /**\r\n * Gets the sampler name associated with this image source\r\n */\r\n public get positionSamplerName(): string {\r\n return this._positionSamplerName;\r\n }\r\n\r\n /**\r\n * Gets the sampler name associated with this image source\r\n */\r\n public get localPositionSamplerName(): string {\r\n return this._localPositionSamplerName;\r\n }\r\n\r\n /**\r\n * Gets the sampler name associated with this image source\r\n */\r\n public get normalSamplerName(): string {\r\n return this._normalSamplerName;\r\n }\r\n\r\n /**\r\n * Gets the sampler name associated with this image source\r\n */\r\n public get worldNormalSamplerName(): string {\r\n return this._worldNormalSamplerName;\r\n }\r\n\r\n /**\r\n * Gets the sampler name associated with this image source\r\n */\r\n public get depthSamplerName(): string {\r\n return this._depthSamplerName;\r\n }\r\n\r\n /**\r\n * Gets the sampler name associated with this image source\r\n */\r\n public get linearDepthSamplerName(): string {\r\n return this._clipSpaceDepthSamplerName;\r\n }\r\n\r\n /**\r\n * Gets the current class name\r\n * @returns the class name\r\n */\r\n public override getClassName() {\r\n return \"PrePassTextureBlock\";\r\n }\r\n\r\n protected override _buildBlock(state: NodeMaterialBuildState) {\r\n super._buildBlock(state);\r\n\r\n if (state.target === NodeMaterialBlockTargets.Vertex) {\r\n return;\r\n }\r\n\r\n this._positionSamplerName = \"prepassPositionSampler\";\r\n this._depthSamplerName = \"prepassDepthSampler\";\r\n this._normalSamplerName = \"prepassNormalSampler\";\r\n this._worldNormalSamplerName = \"prepassWorldNormalSampler\";\r\n this._localPositionSamplerName = \"prepassLocalPositionSampler\";\r\n this._clipSpaceDepthSamplerName = \"prepassClipSpaceDepthSampler\";\r\n\r\n // Unique sampler names for every prepasstexture block\r\n state.sharedData.variableNames.prepassPositionSampler = 0;\r\n state.sharedData.variableNames.prepassDepthSampler = 0;\r\n state.sharedData.variableNames.prepassNormalSampler = 0;\r\n state.sharedData.variableNames.prepassWorldNormalSampler = 0;\r\n state.sharedData.variableNames.prepassLocalPositionSampler = 0;\r\n state.sharedData.variableNames.prepassClipSpaceDepthSampler = 0;\r\n\r\n // Declarations\r\n state.sharedData.textureBlocks.push(this);\r\n state.sharedData.bindableBlocks.push(this);\r\n\r\n state._emit2DSampler(this._positionSamplerName);\r\n state._emit2DSampler(this._depthSamplerName);\r\n state._emit2DSampler(this._normalSamplerName);\r\n state._emit2DSampler(this._worldNormalSamplerName);\r\n state._emit2DSampler(this._localPositionSamplerName);\r\n state._emit2DSampler(this._clipSpaceDepthSamplerName);\r\n\r\n return this;\r\n }\r\n\r\n public override bind(effect: Effect, nodeMaterial: NodeMaterial) {\r\n const scene = nodeMaterial.getScene();\r\n const prePassRenderer = scene.enablePrePassRenderer();\r\n if (!prePassRenderer) {\r\n return;\r\n }\r\n\r\n const sceneRT = prePassRenderer.defaultRT;\r\n if (!sceneRT.textures) {\r\n return;\r\n }\r\n\r\n if (this.position.isConnected) {\r\n effect.setTexture(this._positionSamplerName, sceneRT.textures[prePassRenderer.getIndex(Constants.PREPASS_POSITION_TEXTURE_TYPE)]);\r\n }\r\n if (this.localPosition.isConnected) {\r\n effect.setTexture(this._localPositionSamplerName, sceneRT.textures[prePassRenderer.getIndex(Constants.PREPASS_LOCAL_POSITION_TEXTURE_TYPE)]);\r\n }\r\n if (this.depth.isConnected) {\r\n effect.setTexture(this._depthSamplerName, sceneRT.textures[prePassRenderer.getIndex(Constants.PREPASS_DEPTH_TEXTURE_TYPE)]);\r\n }\r\n if (this.clipSpaceDepth.isConnected) {\r\n effect.setTexture(this._clipSpaceDepthSamplerName, sceneRT.textures[prePassRenderer.getIndex(Constants.PREPASS_NDC_DEPTH_TEXTURE_TYPE)]);\r\n }\r\n if (this.normal.isConnected) {\r\n effect.setTexture(this._normalSamplerName, sceneRT.textures[prePassRenderer.getIndex(Constants.PREPASS_NORMAL_TEXTURE_TYPE)]);\r\n }\r\n if (this.worldNormal.isConnected) {\r\n effect.setTexture(this._worldNormalSamplerName, sceneRT.textures[prePassRenderer.getIndex(Constants.PREPASS_WORLD_NORMAL_TEXTURE_TYPE)]);\r\n }\r\n if (this.localPosition.isConnected) {\r\n effect.setTexture(this._localPositionSamplerName, sceneRT.textures[prePassRenderer.getIndex(Constants.PREPASS_LOCAL_POSITION_TEXTURE_TYPE)]);\r\n }\r\n if (this.clipSpaceDepth.isConnected) {\r\n effect.setTexture(this._clipSpaceDepthSamplerName, sceneRT.textures[prePassRenderer.getIndex(Constants.PREPASS_NDC_DEPTH_TEXTURE_TYPE)]);\r\n }\r\n }\r\n}\r\n\r\nRegisterClass(\"BABYLON.PrePassTextureBlock\", PrePassTextureBlock);\r\n"]}
1
+ {"version":3,"file":"prePassTextureBlock.js","sourceRoot":"","sources":["../../../../../../../dev/core/src/Materials/Node/Blocks/Input/prePassTextureBlock.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,qCAAqC,EAAE,MAAM,mDAAmD,CAAC;AAK1G,OAAO,EAAE,wBAAwB,EAAE,MAAM,sCAAsC,CAAC;AAChF,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAE3D,OAAO,EAAE,uCAAuC,EAAE,MAAM,+CAA+C,CAAC;AACxG,OAAO,EAAE,SAAS,EAAE,MAAM,+BAA+B,CAAC;AAC1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAE5D;;GAEG;AACH,MAAM,OAAO,mBAAoB,SAAQ,iBAAiB;IAQtD;;OAEG;IACH,IAAW,OAAO;QACd,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,IAAW,OAAO,CAAC,KAAU;QACzB,OAAO;IACX,CAAC;IAED;;;;OAIG;IACH,YAAmB,IAAY,EAAE,MAAM,GAAG,wBAAwB,CAAC,iBAAiB;QAChF,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;QAE3B,IAAI,CAAC,cAAc,CACf,UAAU,EACV,qCAAqC,CAAC,MAAM,EAC5C,wBAAwB,CAAC,iBAAiB,EAC1C,IAAI,uCAAuC,CAAC,UAAU,EAAE,IAAI,uDAA+C,gBAAgB,EAAE,kBAAkB,CAAC,CACnJ,CAAC;QACF,IAAI,CAAC,cAAc,CACf,eAAe,EACf,qCAAqC,CAAC,MAAM,EAC5C,wBAAwB,CAAC,iBAAiB,EAC1C,IAAI,uCAAuC,CAAC,eAAe,EAAE,IAAI,uDAA+C,gBAAgB,EAAE,kBAAkB,CAAC,CACxJ,CAAC;QACF,IAAI,CAAC,cAAc,CACf,OAAO,EACP,qCAAqC,CAAC,MAAM,EAC5C,wBAAwB,CAAC,iBAAiB,EAC1C,IAAI,uCAAuC,CAAC,OAAO,EAAE,IAAI,uDAA+C,gBAAgB,EAAE,kBAAkB,CAAC,CAChJ,CAAC;QACF,IAAI,CAAC,cAAc,CACf,aAAa,EACb,qCAAqC,CAAC,MAAM,EAC5C,wBAAwB,CAAC,iBAAiB,EAC1C,IAAI,uCAAuC,CAAC,aAAa,EAAE,IAAI,uDAA+C,gBAAgB,EAAE,kBAAkB,CAAC,CACtJ,CAAC;QACF,IAAI,CAAC,cAAc,CACf,QAAQ,EACR,qCAAqC,CAAC,MAAM,EAC5C,wBAAwB,CAAC,iBAAiB,EAC1C,IAAI,uCAAuC,CAAC,QAAQ,EAAE,IAAI,uDAA+C,gBAAgB,EAAE,kBAAkB,CAAC,CACjJ,CAAC;QACF,IAAI,CAAC,cAAc,CACf,aAAa,EACb,qCAAqC,CAAC,MAAM,EAC5C,wBAAwB,CAAC,iBAAiB,EAC1C,IAAI,uCAAuC,CAAC,aAAa,EAAE,IAAI,uDAA+C,gBAAgB,EAAE,kBAAkB,CAAC,CACtJ,CAAC;IACN,CAAC;IAED;;;;OAIG;IACI,cAAc,CAAC,MAAmC;QACrD,IAAI,MAAM,KAAK,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE;YAC7B,OAAO,IAAI,CAAC,oBAAoB,CAAC;SACpC;QAED,IAAI,MAAM,KAAK,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE;YAC7B,OAAO,IAAI,CAAC,yBAAyB,CAAC;SACzC;QAED,IAAI,MAAM,KAAK,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE;YAC7B,OAAO,IAAI,CAAC,iBAAiB,CAAC;SACjC;QAED,IAAI,MAAM,KAAK,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE;YAC7B,OAAO,IAAI,CAAC,4BAA4B,CAAC;SAC5C;QAED,IAAI,MAAM,KAAK,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE;YAC7B,OAAO,IAAI,CAAC,kBAAkB,CAAC;SAClC;QAED,IAAI,MAAM,KAAK,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE;YAC7B,OAAO,IAAI,CAAC,uBAAuB,CAAC;SACvC;QAED,OAAO,EAAE,CAAC;IACd,CAAC;IAED;;OAEG;IACH,IAAW,QAAQ;QACf,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IAC5B,CAAC;IAED;;OAEG;IACH,IAAW,aAAa;QACpB,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IAC5B,CAAC;IAED;;OAEG;IACH,IAAW,KAAK;QACZ,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IAC5B,CAAC;IAED;;OAEG;IACH,IAAW,WAAW;QAClB,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IAC5B,CAAC;IAED;;OAEG;IACH,IAAW,MAAM;QACb,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IAC5B,CAAC;IAED;;OAEG;IACH,IAAW,WAAW;QAClB,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IAC5B,CAAC;IAED;;OAEG;IACH,IAAW,mBAAmB;QAC1B,OAAO,IAAI,CAAC,oBAAoB,CAAC;IACrC,CAAC;IAED;;OAEG;IACH,IAAW,wBAAwB;QAC/B,OAAO,IAAI,CAAC,yBAAyB,CAAC;IAC1C,CAAC;IAED;;OAEG;IACH,IAAW,iBAAiB;QACxB,OAAO,IAAI,CAAC,kBAAkB,CAAC;IACnC,CAAC;IAED;;OAEG;IACH,IAAW,sBAAsB;QAC7B,OAAO,IAAI,CAAC,uBAAuB,CAAC;IACxC,CAAC;IAED;;OAEG;IACH,IAAW,gBAAgB;QACvB,OAAO,IAAI,CAAC,iBAAiB,CAAC;IAClC,CAAC;IAED;;OAEG;IACH,IAAW,sBAAsB;QAC7B,OAAO,IAAI,CAAC,4BAA4B,CAAC;IAC7C,CAAC;IAED;;;OAGG;IACa,YAAY;QACxB,OAAO,qBAAqB,CAAC;IACjC,CAAC;IAEkB,WAAW,CAAC,KAA6B;QACxD,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QAEzB,IAAI,KAAK,CAAC,MAAM,KAAK,wBAAwB,CAAC,MAAM,EAAE;YAClD,OAAO;SACV;QAED,IAAI,CAAC,oBAAoB,GAAG,wBAAwB,CAAC;QACrD,IAAI,CAAC,iBAAiB,GAAG,qBAAqB,CAAC;QAC/C,IAAI,CAAC,kBAAkB,GAAG,sBAAsB,CAAC;QACjD,IAAI,CAAC,uBAAuB,GAAG,2BAA2B,CAAC;QAC3D,IAAI,CAAC,yBAAyB,GAAG,6BAA6B,CAAC;QAC/D,IAAI,CAAC,4BAA4B,GAAG,gCAAgC,CAAC;QAErE,sDAAsD;QACtD,KAAK,CAAC,UAAU,CAAC,aAAa,CAAC,sBAAsB,GAAG,CAAC,CAAC;QAC1D,KAAK,CAAC,UAAU,CAAC,aAAa,CAAC,mBAAmB,GAAG,CAAC,CAAC;QACvD,KAAK,CAAC,UAAU,CAAC,aAAa,CAAC,oBAAoB,GAAG,CAAC,CAAC;QACxD,KAAK,CAAC,UAAU,CAAC,aAAa,CAAC,yBAAyB,GAAG,CAAC,CAAC;QAC7D,KAAK,CAAC,UAAU,CAAC,aAAa,CAAC,2BAA2B,GAAG,CAAC,CAAC;QAC/D,KAAK,CAAC,UAAU,CAAC,aAAa,CAAC,8BAA8B,GAAG,CAAC,CAAC;QAElE,eAAe;QACf,KAAK,CAAC,UAAU,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1C,KAAK,CAAC,UAAU,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAE3C,IAAI,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE;YAC3B,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;SACnD;QACD,IAAI,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE;YACxB,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;SAChD;QACD,IAAI,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE;YACzB,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;SACjD;QACD,IAAI,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE;YAC9B,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;SACtD;QACD,IAAI,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE;YAChC,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;SACxD;QACD,IAAI,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE;YAC9B,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;SAC3D;QAED,OAAO,IAAI,CAAC;IAChB,CAAC;IAEe,IAAI,CAAC,MAAc,EAAE,YAA0B;QAC3D,MAAM,KAAK,GAAG,YAAY,CAAC,QAAQ,EAAE,CAAC;QACtC,MAAM,eAAe,GAAG,KAAK,CAAC,qBAAqB,EAAE,CAAC;QACtD,IAAI,CAAC,eAAe,EAAE;YAClB,OAAO;SACV;QAED,MAAM,OAAO,GAAG,eAAe,CAAC,SAAS,CAAC;QAC1C,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE;YACnB,OAAO;SACV;QAED,IAAI,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE;YAC3B,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,oBAAoB,EAAE,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC,QAAQ,CAAC,SAAS,CAAC,6BAA6B,CAAC,CAAC,CAAC,CAAC;SACrI;QACD,IAAI,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE;YAChC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,yBAAyB,EAAE,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC,QAAQ,CAAC,SAAS,CAAC,mCAAmC,CAAC,CAAC,CAAC,CAAC;SAChJ;QACD,IAAI,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE;YACxB,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,iBAAiB,EAAE,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC,QAAQ,CAAC,SAAS,CAAC,0BAA0B,CAAC,CAAC,CAAC,CAAC;SAC/H;QACD,IAAI,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE;YAC9B,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,4BAA4B,EAAE,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC,QAAQ,CAAC,SAAS,CAAC,sCAAsC,CAAC,CAAC,CAAC,CAAC;SACtJ;QACD,IAAI,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE;YACzB,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,kBAAkB,EAAE,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC,QAAQ,CAAC,SAAS,CAAC,2BAA2B,CAAC,CAAC,CAAC,CAAC;SACjI;QACD,IAAI,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE;YAC9B,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,uBAAuB,EAAE,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC,QAAQ,CAAC,SAAS,CAAC,iCAAiC,CAAC,CAAC,CAAC,CAAC;SAC5I;IACL,CAAC;CACJ;AAED,aAAa,CAAC,6BAA6B,EAAE,mBAAmB,CAAC,CAAC","sourcesContent":["import { NodeMaterialBlock } from \"../../nodeMaterialBlock\";\r\nimport { NodeMaterialBlockConnectionPointTypes } from \"../../Enums/nodeMaterialBlockConnectionPointTypes\";\r\nimport type { Effect } from \"../../../../Materials/effect\";\r\nimport { NodeMaterialConnectionPointDirection } from \"../../nodeMaterialBlockConnectionPoint\";\r\nimport type { NodeMaterialConnectionPoint } from \"../../nodeMaterialBlockConnectionPoint\";\r\nimport type { NodeMaterialBuildState } from \"../../nodeMaterialBuildState\";\r\nimport { NodeMaterialBlockTargets } from \"../../Enums/nodeMaterialBlockTargets\";\r\nimport { RegisterClass } from \"../../../../Misc/typeStore\";\r\nimport type { NodeMaterial } from \"../../nodeMaterial\";\r\nimport { NodeMaterialConnectionPointCustomObject } from \"../../nodeMaterialConnectionPointCustomObject\";\r\nimport { Constants } from \"../../../../Engines/constants\";\r\nimport { ImageSourceBlock } from \"../Dual/imageSourceBlock\";\r\n\r\n/**\r\n * Block used to read from prepass textures\r\n */\r\nexport class PrePassTextureBlock extends NodeMaterialBlock {\r\n private _positionSamplerName: string;\r\n private _localPositionSamplerName: string;\r\n private _depthSamplerName: string;\r\n private _screenSpaceDepthSamplerName: string;\r\n private _normalSamplerName: string;\r\n private _worldNormalSamplerName: string;\r\n\r\n /**\r\n * The texture associated with the node is the prepass texture\r\n */\r\n public get texture() {\r\n return null;\r\n }\r\n\r\n public set texture(value: any) {\r\n return;\r\n }\r\n\r\n /**\r\n * Creates a new PrePassTextureBlock\r\n * @param name defines the block name\r\n * @param target defines the target of that block (VertexAndFragment by default)\r\n */\r\n public constructor(name: string, target = NodeMaterialBlockTargets.VertexAndFragment) {\r\n super(name, target, false);\r\n\r\n this.registerOutput(\r\n \"position\",\r\n NodeMaterialBlockConnectionPointTypes.Object,\r\n NodeMaterialBlockTargets.VertexAndFragment,\r\n new NodeMaterialConnectionPointCustomObject(\"position\", this, NodeMaterialConnectionPointDirection.Output, ImageSourceBlock, \"ImageSourceBlock\")\r\n );\r\n this.registerOutput(\r\n \"localPosition\",\r\n NodeMaterialBlockConnectionPointTypes.Object,\r\n NodeMaterialBlockTargets.VertexAndFragment,\r\n new NodeMaterialConnectionPointCustomObject(\"localPosition\", this, NodeMaterialConnectionPointDirection.Output, ImageSourceBlock, \"ImageSourceBlock\")\r\n );\r\n this.registerOutput(\r\n \"depth\",\r\n NodeMaterialBlockConnectionPointTypes.Object,\r\n NodeMaterialBlockTargets.VertexAndFragment,\r\n new NodeMaterialConnectionPointCustomObject(\"depth\", this, NodeMaterialConnectionPointDirection.Output, ImageSourceBlock, \"ImageSourceBlock\")\r\n );\r\n this.registerOutput(\r\n \"screenDepth\",\r\n NodeMaterialBlockConnectionPointTypes.Object,\r\n NodeMaterialBlockTargets.VertexAndFragment,\r\n new NodeMaterialConnectionPointCustomObject(\"screenDepth\", this, NodeMaterialConnectionPointDirection.Output, ImageSourceBlock, \"ImageSourceBlock\")\r\n );\r\n this.registerOutput(\r\n \"normal\",\r\n NodeMaterialBlockConnectionPointTypes.Object,\r\n NodeMaterialBlockTargets.VertexAndFragment,\r\n new NodeMaterialConnectionPointCustomObject(\"normal\", this, NodeMaterialConnectionPointDirection.Output, ImageSourceBlock, \"ImageSourceBlock\")\r\n );\r\n this.registerOutput(\r\n \"worldNormal\",\r\n NodeMaterialBlockConnectionPointTypes.Object,\r\n NodeMaterialBlockTargets.VertexAndFragment,\r\n new NodeMaterialConnectionPointCustomObject(\"worldNormal\", this, NodeMaterialConnectionPointDirection.Output, ImageSourceBlock, \"ImageSourceBlock\")\r\n );\r\n }\r\n\r\n /**\r\n * Returns the sampler name associated with the node connection point\r\n * @param output defines the connection point to get the associated sampler name\r\n * @returns\r\n */\r\n public getSamplerName(output: NodeMaterialConnectionPoint): string {\r\n if (output === this._outputs[0]) {\r\n return this._positionSamplerName;\r\n }\r\n\r\n if (output === this._outputs[1]) {\r\n return this._localPositionSamplerName;\r\n }\r\n\r\n if (output === this._outputs[2]) {\r\n return this._depthSamplerName;\r\n }\r\n\r\n if (output === this._outputs[3]) {\r\n return this._screenSpaceDepthSamplerName;\r\n }\r\n\r\n if (output === this._outputs[4]) {\r\n return this._normalSamplerName;\r\n }\r\n\r\n if (output === this._outputs[5]) {\r\n return this._worldNormalSamplerName;\r\n }\r\n\r\n return \"\";\r\n }\r\n\r\n /**\r\n * Gets the position texture\r\n */\r\n public get position(): NodeMaterialConnectionPoint {\r\n return this._outputs[0];\r\n }\r\n\r\n /**\r\n * Gets the local position texture\r\n */\r\n public get localPosition(): NodeMaterialConnectionPoint {\r\n return this._outputs[1];\r\n }\r\n\r\n /**\r\n * Gets the depth texture\r\n */\r\n public get depth(): NodeMaterialConnectionPoint {\r\n return this._outputs[2];\r\n }\r\n\r\n /**\r\n * Gets the screen depth texture\r\n */\r\n public get screenDepth(): NodeMaterialConnectionPoint {\r\n return this._outputs[3];\r\n }\r\n\r\n /**\r\n * Gets the normal texture\r\n */\r\n public get normal(): NodeMaterialConnectionPoint {\r\n return this._outputs[4];\r\n }\r\n\r\n /**\r\n * Gets the world normal texture\r\n */\r\n public get worldNormal(): NodeMaterialConnectionPoint {\r\n return this._outputs[5];\r\n }\r\n\r\n /**\r\n * Gets the sampler name associated with this image source\r\n */\r\n public get positionSamplerName(): string {\r\n return this._positionSamplerName;\r\n }\r\n\r\n /**\r\n * Gets the sampler name associated with this image source\r\n */\r\n public get localPositionSamplerName(): string {\r\n return this._localPositionSamplerName;\r\n }\r\n\r\n /**\r\n * Gets the sampler name associated with this image source\r\n */\r\n public get normalSamplerName(): string {\r\n return this._normalSamplerName;\r\n }\r\n\r\n /**\r\n * Gets the sampler name associated with this image source\r\n */\r\n public get worldNormalSamplerName(): string {\r\n return this._worldNormalSamplerName;\r\n }\r\n\r\n /**\r\n * Gets the sampler name associated with this image source\r\n */\r\n public get depthSamplerName(): string {\r\n return this._depthSamplerName;\r\n }\r\n\r\n /**\r\n * Gets the sampler name associated with this image source\r\n */\r\n public get linearDepthSamplerName(): string {\r\n return this._screenSpaceDepthSamplerName;\r\n }\r\n\r\n /**\r\n * Gets the current class name\r\n * @returns the class name\r\n */\r\n public override getClassName() {\r\n return \"PrePassTextureBlock\";\r\n }\r\n\r\n protected override _buildBlock(state: NodeMaterialBuildState) {\r\n super._buildBlock(state);\r\n\r\n if (state.target === NodeMaterialBlockTargets.Vertex) {\r\n return;\r\n }\r\n\r\n this._positionSamplerName = \"prepassPositionSampler\";\r\n this._depthSamplerName = \"prepassDepthSampler\";\r\n this._normalSamplerName = \"prepassNormalSampler\";\r\n this._worldNormalSamplerName = \"prepassWorldNormalSampler\";\r\n this._localPositionSamplerName = \"prepassLocalPositionSampler\";\r\n this._screenSpaceDepthSamplerName = \"prepassScreenSpaceDepthSampler\";\r\n\r\n // Unique sampler names for every prepasstexture block\r\n state.sharedData.variableNames.prepassPositionSampler = 0;\r\n state.sharedData.variableNames.prepassDepthSampler = 0;\r\n state.sharedData.variableNames.prepassNormalSampler = 0;\r\n state.sharedData.variableNames.prepassWorldNormalSampler = 0;\r\n state.sharedData.variableNames.prepassLocalPositionSampler = 0;\r\n state.sharedData.variableNames.prepassScreenSpaceDepthSampler = 0;\r\n\r\n // Declarations\r\n state.sharedData.textureBlocks.push(this);\r\n state.sharedData.bindableBlocks.push(this);\r\n\r\n if (this.position.isConnected) {\r\n state._emit2DSampler(this._positionSamplerName);\r\n }\r\n if (this.depth.isConnected) {\r\n state._emit2DSampler(this._depthSamplerName);\r\n }\r\n if (this.normal.isConnected) {\r\n state._emit2DSampler(this._normalSamplerName);\r\n }\r\n if (this.worldNormal.isConnected) {\r\n state._emit2DSampler(this._worldNormalSamplerName);\r\n }\r\n if (this.localPosition.isConnected) {\r\n state._emit2DSampler(this._localPositionSamplerName);\r\n }\r\n if (this.screenDepth.isConnected) {\r\n state._emit2DSampler(this._screenSpaceDepthSamplerName);\r\n }\r\n\r\n return this;\r\n }\r\n\r\n public override bind(effect: Effect, nodeMaterial: NodeMaterial) {\r\n const scene = nodeMaterial.getScene();\r\n const prePassRenderer = scene.enablePrePassRenderer();\r\n if (!prePassRenderer) {\r\n return;\r\n }\r\n\r\n const sceneRT = prePassRenderer.defaultRT;\r\n if (!sceneRT.textures) {\r\n return;\r\n }\r\n\r\n if (this.position.isConnected) {\r\n effect.setTexture(this._positionSamplerName, sceneRT.textures[prePassRenderer.getIndex(Constants.PREPASS_POSITION_TEXTURE_TYPE)]);\r\n }\r\n if (this.localPosition.isConnected) {\r\n effect.setTexture(this._localPositionSamplerName, sceneRT.textures[prePassRenderer.getIndex(Constants.PREPASS_LOCAL_POSITION_TEXTURE_TYPE)]);\r\n }\r\n if (this.depth.isConnected) {\r\n effect.setTexture(this._depthSamplerName, sceneRT.textures[prePassRenderer.getIndex(Constants.PREPASS_DEPTH_TEXTURE_TYPE)]);\r\n }\r\n if (this.screenDepth.isConnected) {\r\n effect.setTexture(this._screenSpaceDepthSamplerName, sceneRT.textures[prePassRenderer.getIndex(Constants.PREPASS_SCREENSPACE_DEPTH_TEXTURE_TYPE)]);\r\n }\r\n if (this.normal.isConnected) {\r\n effect.setTexture(this._normalSamplerName, sceneRT.textures[prePassRenderer.getIndex(Constants.PREPASS_NORMAL_TEXTURE_TYPE)]);\r\n }\r\n if (this.worldNormal.isConnected) {\r\n effect.setTexture(this._worldNormalSamplerName, sceneRT.textures[prePassRenderer.getIndex(Constants.PREPASS_WORLD_NORMAL_TEXTURE_TYPE)]);\r\n }\r\n }\r\n}\r\n\r\nRegisterClass(\"BABYLON.PrePassTextureBlock\", PrePassTextureBlock);\r\n"]}
@@ -297,11 +297,6 @@ export class ClearCoatBlock extends NodeMaterialBlock {
297
297
  #endif
298
298
  #endif
299
299
  #endif
300
- #if defined(ENVIRONMENTBRDF) && !defined(${reflectionBlock?._defineSkyboxName})
301
- #ifdef RADIANCEOCCLUSION
302
- , ambientMonochrome
303
- #endif
304
- #endif
305
300
  #if defined(CLEARCOAT_BUMP) || defined(TWOSIDEDLIGHTING)
306
301
  , (${state._generateTernary("1.", "-1.", isWebGPU ? "fragmentInputs.frontFacing" : "gl_FrontFacing")})
307
302
  #endif