@onerjs/core 8.28.4 → 8.28.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (90) hide show
  1. package/Engines/abstractEngine.js +2 -2
  2. package/Engines/abstractEngine.js.map +1 -1
  3. package/FrameGraph/Node/Blocks/Layers/glowLayerBlock.d.ts +1 -0
  4. package/FrameGraph/Node/Blocks/Layers/glowLayerBlock.js.map +1 -1
  5. package/FrameGraph/Node/Blocks/Layers/highlightLayerBlock.d.ts +1 -0
  6. package/FrameGraph/Node/Blocks/Layers/highlightLayerBlock.js.map +1 -1
  7. package/FrameGraph/Node/Blocks/PostProcesses/bloomPostProcessBlock.d.ts +1 -0
  8. package/FrameGraph/Node/Blocks/PostProcesses/bloomPostProcessBlock.js.map +1 -1
  9. package/FrameGraph/Node/Blocks/PostProcesses/convolutionPostProcessBlock.d.ts +1 -0
  10. package/FrameGraph/Node/Blocks/PostProcesses/convolutionPostProcessBlock.js.map +1 -1
  11. package/FrameGraph/Node/Blocks/PostProcesses/ssao2PostProcessBlock.d.ts +94 -0
  12. package/FrameGraph/Node/Blocks/PostProcesses/ssao2PostProcessBlock.js +312 -0
  13. package/FrameGraph/Node/Blocks/PostProcesses/ssao2PostProcessBlock.js.map +1 -0
  14. package/FrameGraph/Node/Blocks/PostProcesses/ssrPostProcessBlock.d.ts +1 -0
  15. package/FrameGraph/Node/Blocks/PostProcesses/ssrPostProcessBlock.js.map +1 -1
  16. package/FrameGraph/Node/Blocks/PostProcesses/tonemapPostProcessBlock.d.ts +1 -0
  17. package/FrameGraph/Node/Blocks/PostProcesses/tonemapPostProcessBlock.js.map +1 -1
  18. package/FrameGraph/Node/Blocks/Rendering/baseObjectRendererBlock.d.ts +1 -0
  19. package/FrameGraph/Node/Blocks/Rendering/baseObjectRendererBlock.js.map +1 -1
  20. package/FrameGraph/Node/Blocks/Rendering/geometryRendererBlock.d.ts +1 -0
  21. package/FrameGraph/Node/Blocks/Rendering/geometryRendererBlock.js.map +1 -1
  22. package/FrameGraph/Node/Blocks/Rendering/taaObjectRendererBlock.js +1 -1
  23. package/FrameGraph/Node/Blocks/Rendering/taaObjectRendererBlock.js.map +1 -1
  24. package/FrameGraph/Node/Blocks/index.d.ts +1 -0
  25. package/FrameGraph/Node/Blocks/index.js +1 -0
  26. package/FrameGraph/Node/Blocks/index.js.map +1 -1
  27. package/FrameGraph/Node/nodeRenderGraph.js +1 -1
  28. package/FrameGraph/Node/nodeRenderGraph.js.map +1 -1
  29. package/FrameGraph/Tasks/Layers/baseLayerTask.js +1 -7
  30. package/FrameGraph/Tasks/Layers/baseLayerTask.js.map +1 -1
  31. package/FrameGraph/Tasks/PostProcesses/bloomTask.js +0 -6
  32. package/FrameGraph/Tasks/PostProcesses/bloomTask.js.map +1 -1
  33. package/FrameGraph/Tasks/PostProcesses/circleOfConfusionTask.js +3 -4
  34. package/FrameGraph/Tasks/PostProcesses/circleOfConfusionTask.js.map +1 -1
  35. package/FrameGraph/Tasks/PostProcesses/depthOfFieldBlurTask.js +3 -4
  36. package/FrameGraph/Tasks/PostProcesses/depthOfFieldBlurTask.js.map +1 -1
  37. package/FrameGraph/Tasks/PostProcesses/depthOfFieldMergeTask.js +3 -4
  38. package/FrameGraph/Tasks/PostProcesses/depthOfFieldMergeTask.js.map +1 -1
  39. package/FrameGraph/Tasks/PostProcesses/depthOfFieldTask.js +0 -8
  40. package/FrameGraph/Tasks/PostProcesses/depthOfFieldTask.js.map +1 -1
  41. package/FrameGraph/Tasks/PostProcesses/postProcessTask.js +3 -5
  42. package/FrameGraph/Tasks/PostProcesses/postProcessTask.js.map +1 -1
  43. package/FrameGraph/Tasks/PostProcesses/ssao2BlurTask.d.ts +13 -0
  44. package/FrameGraph/Tasks/PostProcesses/ssao2BlurTask.js +25 -0
  45. package/FrameGraph/Tasks/PostProcesses/ssao2BlurTask.js.map +1 -0
  46. package/FrameGraph/Tasks/PostProcesses/ssao2RenderingPipelineTask.d.ts +76 -0
  47. package/FrameGraph/Tasks/PostProcesses/ssao2RenderingPipelineTask.js +147 -0
  48. package/FrameGraph/Tasks/PostProcesses/ssao2RenderingPipelineTask.js.map +1 -0
  49. package/FrameGraph/Tasks/PostProcesses/ssao2Task.d.ts +14 -0
  50. package/FrameGraph/Tasks/PostProcesses/ssao2Task.js +29 -0
  51. package/FrameGraph/Tasks/PostProcesses/ssao2Task.js.map +1 -0
  52. package/FrameGraph/Tasks/PostProcesses/ssrRenderingPipelineTask.js +2 -11
  53. package/FrameGraph/Tasks/PostProcesses/ssrRenderingPipelineTask.js.map +1 -1
  54. package/FrameGraph/Tasks/PostProcesses/ssrTask.js +8 -9
  55. package/FrameGraph/Tasks/PostProcesses/ssrTask.js.map +1 -1
  56. package/FrameGraph/index.d.ts +1 -0
  57. package/FrameGraph/index.js +1 -0
  58. package/FrameGraph/index.js.map +1 -1
  59. package/Materials/Node/Blocks/Fragment/fragmentOutputBlock.d.ts +4 -0
  60. package/Materials/Node/Blocks/Fragment/fragmentOutputBlock.js +6 -0
  61. package/Materials/Node/Blocks/Fragment/fragmentOutputBlock.js.map +1 -1
  62. package/Materials/Node/nodeMaterial.js +1 -1
  63. package/Materials/Node/nodeMaterial.js.map +1 -1
  64. package/Materials/PBR/openPbrMaterial.js +5 -5
  65. package/Materials/PBR/openPbrMaterial.js.map +1 -1
  66. package/Meshes/Node/nodeGeometry.js +1 -1
  67. package/Meshes/Node/nodeGeometry.js.map +1 -1
  68. package/Particles/Node/nodeParticleSystemSet.d.ts +14 -6
  69. package/Particles/Node/nodeParticleSystemSet.js +38 -7
  70. package/Particles/Node/nodeParticleSystemSet.js.map +1 -1
  71. package/PostProcesses/RenderPipeline/Pipelines/ssao2RenderingPipeline.d.ts +21 -30
  72. package/PostProcesses/RenderPipeline/Pipelines/ssao2RenderingPipeline.js +163 -256
  73. package/PostProcesses/RenderPipeline/Pipelines/ssao2RenderingPipeline.js.map +1 -1
  74. package/PostProcesses/RenderPipeline/Pipelines/ssrRenderingPipeline.d.ts +1 -3
  75. package/PostProcesses/RenderPipeline/Pipelines/ssrRenderingPipeline.js.map +1 -1
  76. package/PostProcesses/RenderPipeline/Pipelines/thinSSAO2RenderingPipeline.d.ts +130 -0
  77. package/PostProcesses/RenderPipeline/Pipelines/thinSSAO2RenderingPipeline.js +193 -0
  78. package/PostProcesses/RenderPipeline/Pipelines/thinSSAO2RenderingPipeline.js.map +1 -0
  79. package/PostProcesses/thinSSAO2BlurPostProcess.d.ts +26 -0
  80. package/PostProcesses/thinSSAO2BlurPostProcess.js +81 -0
  81. package/PostProcesses/thinSSAO2BlurPostProcess.js.map +1 -0
  82. package/PostProcesses/thinSSAO2CombinePostProcess.d.ts +15 -0
  83. package/PostProcesses/thinSSAO2CombinePostProcess.js +48 -0
  84. package/PostProcesses/thinSSAO2CombinePostProcess.js.map +1 -0
  85. package/PostProcesses/thinSSAO2PostProcess.d.ts +45 -0
  86. package/PostProcesses/thinSSAO2PostProcess.js +208 -0
  87. package/PostProcesses/thinSSAO2PostProcess.js.map +1 -0
  88. package/Shaders/ShadersInclude/shadowsFragmentFunctions.js +29 -4
  89. package/Shaders/ShadersInclude/shadowsFragmentFunctions.js.map +1 -1
  90. package/package.json +1 -1
@@ -0,0 +1,312 @@
1
+ import { __decorate } from "../../../../tslib.es6.js";
2
+
3
+ import { RegisterClass } from "../../../../Misc/typeStore.js";
4
+ import { NodeRenderGraphBlockConnectionPointTypes } from "../../Types/nodeRenderGraphTypes.js";
5
+ import { editableInPropertyPage } from "../../../../Decorators/nodeDecorator.js";
6
+ import { FrameGraphSSAO2RenderingPipelineTask } from "../../../Tasks/PostProcesses/ssao2RenderingPipelineTask.js";
7
+ import { NodeRenderGraphBasePostProcessBlock } from "./basePostProcessBlock.js";
8
+ /**
9
+ * Block that implements the SSAO2 post process
10
+ */
11
+ export class NodeRenderGraphSSAO2PostProcessBlock extends NodeRenderGraphBasePostProcessBlock {
12
+ /**
13
+ * Gets the frame graph task associated with this block
14
+ */
15
+ get task() {
16
+ return this._frameGraphTask;
17
+ }
18
+ /**
19
+ * Create a new NodeRenderGraphSSAO2PostProcessBlock
20
+ * @param name defines the block name
21
+ * @param frameGraph defines the hosting frame graph
22
+ * @param scene defines the hosting scene
23
+ * @param ratioSSAO The ratio between the SSAO texture size and the source texture size (default: 1)
24
+ * @param ratioBlur The ratio between the SSAO blur texture size and the source texture size (default: 1)
25
+ * @param textureType The texture type used by the different post processes created by SSAO2 (default: 0)
26
+ */
27
+ constructor(name, frameGraph, scene, ratioSSAO = 1, ratioBlur = 1, textureType = 0) {
28
+ super(name, frameGraph, scene);
29
+ this._additionalConstructionParameters = [ratioSSAO, ratioBlur, textureType];
30
+ this.registerInput("camera", NodeRenderGraphBlockConnectionPointTypes.Camera);
31
+ this.registerInput("geomDepth", NodeRenderGraphBlockConnectionPointTypes.TextureViewDepth);
32
+ this.registerInput("geomNormal", NodeRenderGraphBlockConnectionPointTypes.TextureViewNormal);
33
+ this._finalizeInputOutputRegistering();
34
+ this._frameGraphTask = new FrameGraphSSAO2RenderingPipelineTask(this.name, frameGraph, ratioSSAO, ratioBlur, textureType);
35
+ }
36
+ _createTask(ratioSSAO, ratioBlur, textureType) {
37
+ const sourceSamplingMode = this.sourceSamplingMode;
38
+ const samples = this.samples;
39
+ const totalStrength = this.totalStrength;
40
+ const base = this.base;
41
+ const maxZ = this.maxZ;
42
+ const minZAspect = this.minZAspect;
43
+ const radius = this.radius;
44
+ const epsilon = this.epsilon;
45
+ const useViewportInCombineStage = this.useViewportInCombineStage;
46
+ const bypassBlur = this.bypassBlur;
47
+ const expensiveBlur = this.expensiveBlur;
48
+ const bilateralSoften = this.bilateralSoften;
49
+ const bilateralSamples = this.bilateralSamples;
50
+ const bilateralTolerance = this.bilateralTolerance;
51
+ this._frameGraphTask.dispose();
52
+ this._frameGraphTask = new FrameGraphSSAO2RenderingPipelineTask(this.name, this._frameGraph, ratioSSAO, ratioBlur, textureType);
53
+ this.sourceSamplingMode = sourceSamplingMode;
54
+ this.samples = samples;
55
+ this.totalStrength = totalStrength;
56
+ this.base = base;
57
+ this.maxZ = maxZ;
58
+ this.minZAspect = minZAspect;
59
+ this.radius = radius;
60
+ this.epsilon = epsilon;
61
+ this.useViewportInCombineStage = useViewportInCombineStage;
62
+ this.bypassBlur = bypassBlur;
63
+ this.expensiveBlur = expensiveBlur;
64
+ this.bilateralSoften = bilateralSoften;
65
+ this.bilateralSamples = bilateralSamples;
66
+ this.bilateralTolerance = bilateralTolerance;
67
+ this._additionalConstructionParameters = [ratioSSAO, ratioBlur, textureType];
68
+ }
69
+ /** The texture type used by the different post processes created by SSAO2 */
70
+ get textureType() {
71
+ return this._frameGraphTask.textureType;
72
+ }
73
+ set textureType(value) {
74
+ this._createTask(this._frameGraphTask.ratioSSAO, this._frameGraphTask.ratioBlur, value);
75
+ }
76
+ /** The ratio between the SSAO texture size and the source texture size */
77
+ get ratioSSAO() {
78
+ return this._frameGraphTask.ratioSSAO;
79
+ }
80
+ set ratioSSAO(value) {
81
+ this._createTask(value, this._frameGraphTask.ratioBlur, this._frameGraphTask.textureType);
82
+ }
83
+ /** The ratio between the SSAO blur texture size and the source texture size */
84
+ get ratioBlur() {
85
+ return this._frameGraphTask.ratioBlur;
86
+ }
87
+ set ratioBlur(value) {
88
+ this._createTask(this._frameGraphTask.ratioSSAO, value, this._frameGraphTask.textureType);
89
+ }
90
+ /** Number of samples used for the SSAO calculations. Default value is 8. */
91
+ get samples() {
92
+ return this._frameGraphTask.ssao.samples;
93
+ }
94
+ set samples(value) {
95
+ this._frameGraphTask.ssao.samples = value;
96
+ }
97
+ /** The strength of the SSAO post-process. Default value is 1.0. */
98
+ get totalStrength() {
99
+ return this._frameGraphTask.ssao.totalStrength;
100
+ }
101
+ set totalStrength(value) {
102
+ this._frameGraphTask.ssao.totalStrength = value;
103
+ }
104
+ /** The base color of the SSAO post-process. The final result is "base + ssao" between [0, 1] */
105
+ get base() {
106
+ return this._frameGraphTask.ssao.base;
107
+ }
108
+ set base(value) {
109
+ this._frameGraphTask.ssao.base = value;
110
+ }
111
+ /** Maximum depth value to still render AO. A smooth falloff makes the dimming more natural, so there will be no abrupt shading change. */
112
+ get maxZ() {
113
+ return this._frameGraphTask.ssao.maxZ;
114
+ }
115
+ set maxZ(value) {
116
+ this._frameGraphTask.ssao.maxZ = value;
117
+ }
118
+ /** In order to save performances, SSAO radius is clamped on close geometry. This ratio changes by how much. */
119
+ get minZAspect() {
120
+ return this._frameGraphTask.ssao.minZAspect;
121
+ }
122
+ set minZAspect(value) {
123
+ this._frameGraphTask.ssao.minZAspect = value;
124
+ }
125
+ /** The radius around the analyzed pixel used by the SSAO post-process. */
126
+ get radius() {
127
+ return this._frameGraphTask.ssao.radius;
128
+ }
129
+ set radius(value) {
130
+ this._frameGraphTask.ssao.radius = value;
131
+ }
132
+ /** Used in SSAO calculations to compensate for accuracy issues with depth values. */
133
+ get epsilon() {
134
+ return this._frameGraphTask.ssao.epsilon;
135
+ }
136
+ set epsilon(value) {
137
+ this._frameGraphTask.ssao.epsilon = value;
138
+ }
139
+ /** Indicates that the combine stage should use the current camera viewport to render the SSAO result on only a portion of the output texture. */
140
+ get useViewportInCombineStage() {
141
+ return this._frameGraphTask.ssao.useViewportInCombineStage;
142
+ }
143
+ set useViewportInCombineStage(value) {
144
+ this._frameGraphTask.ssao.useViewportInCombineStage = value;
145
+ }
146
+ /** Skips the denoising (blur) stage of the SSAO calculations. */
147
+ get bypassBlur() {
148
+ return this._frameGraphTask.ssao.bypassBlur;
149
+ }
150
+ set bypassBlur(value) {
151
+ this._frameGraphTask.ssao.bypassBlur = value;
152
+ }
153
+ /** Enables the configurable bilateral denoising (blurring) filter. */
154
+ get expensiveBlur() {
155
+ return this._frameGraphTask.ssao.expensiveBlur;
156
+ }
157
+ set expensiveBlur(value) {
158
+ this._frameGraphTask.ssao.expensiveBlur = value;
159
+ }
160
+ /** The number of samples the bilateral filter uses in both dimensions when denoising the SSAO calculations. */
161
+ get bilateralSamples() {
162
+ return this._frameGraphTask.ssao.bilateralSamples;
163
+ }
164
+ set bilateralSamples(value) {
165
+ this._frameGraphTask.ssao.bilateralSamples = value;
166
+ }
167
+ /** Controls the shape of the denoising kernel used by the bilateral filter. */
168
+ get bilateralSoften() {
169
+ return this._frameGraphTask.ssao.bilateralSoften;
170
+ }
171
+ set bilateralSoften(value) {
172
+ this._frameGraphTask.ssao.bilateralSoften = value;
173
+ }
174
+ /** How forgiving the bilateral denoiser should be when rejecting samples. */
175
+ get bilateralTolerance() {
176
+ return this._frameGraphTask.ssao.bilateralTolerance;
177
+ }
178
+ set bilateralTolerance(value) {
179
+ this._frameGraphTask.ssao.bilateralTolerance = value;
180
+ }
181
+ /**
182
+ * Gets the current class name
183
+ * @returns the class name
184
+ */
185
+ getClassName() {
186
+ return "NodeRenderGraphSSAO2PostProcessBlock";
187
+ }
188
+ /**
189
+ * Gets the camera input component
190
+ */
191
+ get camera() {
192
+ return this._inputs[2];
193
+ }
194
+ /**
195
+ * Gets the geometry depth input component
196
+ */
197
+ get geomDepth() {
198
+ return this._inputs[3];
199
+ }
200
+ /**
201
+ * Gets the geometry normal input component
202
+ */
203
+ get geomNormal() {
204
+ return this._inputs[4];
205
+ }
206
+ _buildBlock(state) {
207
+ super._buildBlock(state);
208
+ this._frameGraphTask.normalTexture = this.geomNormal.connectedPoint?.value;
209
+ this._frameGraphTask.depthTexture = this.geomDepth.connectedPoint?.value;
210
+ this._frameGraphTask.camera = this.camera.connectedPoint?.value;
211
+ }
212
+ _dumpPropertiesCode() {
213
+ const codes = [];
214
+ codes.push(`${this._codeVariableName}.samples = ${this.samples};`);
215
+ codes.push(`${this._codeVariableName}.totalStrength = ${this.totalStrength};`);
216
+ codes.push(`${this._codeVariableName}.base = ${this.base};`);
217
+ codes.push(`${this._codeVariableName}.maxZ = ${this.maxZ};`);
218
+ codes.push(`${this._codeVariableName}.minZAspect = ${this.minZAspect};`);
219
+ codes.push(`${this._codeVariableName}.radius = ${this.radius};`);
220
+ codes.push(`${this._codeVariableName}.epsilon = ${this.epsilon};`);
221
+ codes.push(`${this._codeVariableName}.useViewportInCombineStage = ${this.useViewportInCombineStage};`);
222
+ codes.push(`${this._codeVariableName}.bypassBlur = ${this.bypassBlur};`);
223
+ codes.push(`${this._codeVariableName}.expensiveBlur = ${this.expensiveBlur};`);
224
+ codes.push(`${this._codeVariableName}.bilateralSamples = ${this.bilateralSamples};`);
225
+ codes.push(`${this._codeVariableName}.bilateralSoften = ${this.bilateralSoften};`);
226
+ codes.push(`${this._codeVariableName}.bilateralTolerance = ${this.bilateralTolerance};`);
227
+ return super._dumpPropertiesCode() + codes.join("\n");
228
+ }
229
+ serialize() {
230
+ const serializationObject = super.serialize();
231
+ serializationObject.samples = this.samples;
232
+ serializationObject.totalStrength = this.totalStrength;
233
+ serializationObject.base = this.base;
234
+ serializationObject.maxZ = this.maxZ;
235
+ serializationObject.minZAspect = this.minZAspect;
236
+ serializationObject.radius = this.radius;
237
+ serializationObject.epsilon = this.epsilon;
238
+ serializationObject.useViewportInCombineStage = this.useViewportInCombineStage;
239
+ serializationObject.bypassBlur = this.bypassBlur;
240
+ serializationObject.expensiveBlur = this.expensiveBlur;
241
+ serializationObject.bilateralSoften = this.bilateralSoften;
242
+ serializationObject.bilateralSamples = this.bilateralSamples;
243
+ serializationObject.bilateralTolerance = this.bilateralTolerance;
244
+ return serializationObject;
245
+ }
246
+ _deserialize(serializationObject) {
247
+ super._deserialize(serializationObject);
248
+ this.samples = serializationObject.samples;
249
+ this.totalStrength = serializationObject.totalStrength;
250
+ this.base = serializationObject.base;
251
+ this.maxZ = serializationObject.maxZ;
252
+ this.minZAspect = serializationObject.minZAspect;
253
+ this.radius = serializationObject.radius;
254
+ this.epsilon = serializationObject.epsilon;
255
+ this.useViewportInCombineStage = serializationObject.useViewportInCombineStage;
256
+ this.bypassBlur = serializationObject.bypassBlur;
257
+ this.expensiveBlur = serializationObject.expensiveBlur;
258
+ this.bilateralSoften = serializationObject.bilateralSoften;
259
+ this.bilateralSamples = serializationObject.bilateralSamples;
260
+ this.bilateralTolerance = serializationObject.bilateralTolerance;
261
+ }
262
+ }
263
+ __decorate([
264
+ editableInPropertyPage("Texture type", 9 /* PropertyTypeForEdition.TextureType */, "TEXTURE")
265
+ ], NodeRenderGraphSSAO2PostProcessBlock.prototype, "textureType", null);
266
+ __decorate([
267
+ editableInPropertyPage("SSAO texture ratio", 1 /* PropertyTypeForEdition.Float */, "TEXTURE", { min: 0.1, max: 1 })
268
+ ], NodeRenderGraphSSAO2PostProcessBlock.prototype, "ratioSSAO", null);
269
+ __decorate([
270
+ editableInPropertyPage("SSAO blur texture ratio", 1 /* PropertyTypeForEdition.Float */, "TEXTURE", { min: 0.1, max: 1 })
271
+ ], NodeRenderGraphSSAO2PostProcessBlock.prototype, "ratioBlur", null);
272
+ __decorate([
273
+ editableInPropertyPage("Samples", 2 /* PropertyTypeForEdition.Int */, "SSAO", { min: 1, max: 128 })
274
+ ], NodeRenderGraphSSAO2PostProcessBlock.prototype, "samples", null);
275
+ __decorate([
276
+ editableInPropertyPage("Strength", 1 /* PropertyTypeForEdition.Float */, "SSAO", { min: 0, max: 3 })
277
+ ], NodeRenderGraphSSAO2PostProcessBlock.prototype, "totalStrength", null);
278
+ __decorate([
279
+ editableInPropertyPage("Base", 1 /* PropertyTypeForEdition.Float */, "SSAO", { min: 0, max: 1 })
280
+ ], NodeRenderGraphSSAO2PostProcessBlock.prototype, "base", null);
281
+ __decorate([
282
+ editableInPropertyPage("Max Z", 1 /* PropertyTypeForEdition.Float */, "SSAO", { min: 0, max: 10000 })
283
+ ], NodeRenderGraphSSAO2PostProcessBlock.prototype, "maxZ", null);
284
+ __decorate([
285
+ editableInPropertyPage("Min Z aspect", 1 /* PropertyTypeForEdition.Float */, "SSAO", { min: 0, max: 0.5 })
286
+ ], NodeRenderGraphSSAO2PostProcessBlock.prototype, "minZAspect", null);
287
+ __decorate([
288
+ editableInPropertyPage("Radius", 1 /* PropertyTypeForEdition.Float */, "SSAO", { min: 0, max: 10 })
289
+ ], NodeRenderGraphSSAO2PostProcessBlock.prototype, "radius", null);
290
+ __decorate([
291
+ editableInPropertyPage("Epsilon", 1 /* PropertyTypeForEdition.Float */, "SSAO", { min: 0, max: 1 })
292
+ ], NodeRenderGraphSSAO2PostProcessBlock.prototype, "epsilon", null);
293
+ __decorate([
294
+ editableInPropertyPage("Use viewport in combine stage", 0 /* PropertyTypeForEdition.Boolean */, "SSAO")
295
+ ], NodeRenderGraphSSAO2PostProcessBlock.prototype, "useViewportInCombineStage", null);
296
+ __decorate([
297
+ editableInPropertyPage("Bypass blur", 0 /* PropertyTypeForEdition.Boolean */, "Blur")
298
+ ], NodeRenderGraphSSAO2PostProcessBlock.prototype, "bypassBlur", null);
299
+ __decorate([
300
+ editableInPropertyPage("Expensive blur", 0 /* PropertyTypeForEdition.Boolean */, "Blur")
301
+ ], NodeRenderGraphSSAO2PostProcessBlock.prototype, "expensiveBlur", null);
302
+ __decorate([
303
+ editableInPropertyPage("Samples", 2 /* PropertyTypeForEdition.Int */, "Blur", { min: 1, max: 128 })
304
+ ], NodeRenderGraphSSAO2PostProcessBlock.prototype, "bilateralSamples", null);
305
+ __decorate([
306
+ editableInPropertyPage("Soften", 1 /* PropertyTypeForEdition.Float */, "Blur", { min: 0, max: 1 })
307
+ ], NodeRenderGraphSSAO2PostProcessBlock.prototype, "bilateralSoften", null);
308
+ __decorate([
309
+ editableInPropertyPage("Tolerance", 1 /* PropertyTypeForEdition.Float */, "Blur", { min: 0, max: 1 })
310
+ ], NodeRenderGraphSSAO2PostProcessBlock.prototype, "bilateralTolerance", null);
311
+ RegisterClass("BABYLON.NodeRenderGraphSSAO2PostProcessBlock", NodeRenderGraphSSAO2PostProcessBlock);
312
+ //# sourceMappingURL=ssao2PostProcessBlock.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ssao2PostProcessBlock.js","sourceRoot":"","sources":["../../../../../../../dev/core/src/FrameGraph/Node/Blocks/PostProcesses/ssao2PostProcessBlock.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Scene, FrameGraph, NodeRenderGraphConnectionPoint, NodeRenderGraphBuildState, FrameGraphTextureHandle, Camera } from \"core/index\";\r\nimport { Constants } from \"core/Engines/constants\";\r\nimport { RegisterClass } from \"../../../../Misc/typeStore\";\r\nimport { NodeRenderGraphBlockConnectionPointTypes } from \"../../Types/nodeRenderGraphTypes\";\r\nimport { editableInPropertyPage, PropertyTypeForEdition } from \"../../../../Decorators/nodeDecorator\";\r\nimport { FrameGraphSSAO2RenderingPipelineTask } from \"../../../Tasks/PostProcesses/ssao2RenderingPipelineTask\";\r\nimport { NodeRenderGraphBasePostProcessBlock } from \"./basePostProcessBlock\";\r\n\r\n/**\r\n * Block that implements the SSAO2 post process\r\n */\r\nexport class NodeRenderGraphSSAO2PostProcessBlock extends NodeRenderGraphBasePostProcessBlock {\r\n protected override _frameGraphTask: FrameGraphSSAO2RenderingPipelineTask;\r\n\r\n public override _additionalConstructionParameters: [number, number, number];\r\n\r\n /**\r\n * Gets the frame graph task associated with this block\r\n */\r\n public override get task() {\r\n return this._frameGraphTask;\r\n }\r\n\r\n /**\r\n * Create a new NodeRenderGraphSSAO2PostProcessBlock\r\n * @param name defines the block name\r\n * @param frameGraph defines the hosting frame graph\r\n * @param scene defines the hosting scene\r\n * @param ratioSSAO The ratio between the SSAO texture size and the source texture size (default: 1)\r\n * @param ratioBlur The ratio between the SSAO blur texture size and the source texture size (default: 1)\r\n * @param textureType The texture type used by the different post processes created by SSAO2 (default: Constants.TEXTURETYPE_UNSIGNED_BYTE)\r\n */\r\n public constructor(name: string, frameGraph: FrameGraph, scene: Scene, ratioSSAO = 1, ratioBlur = 1, textureType = Constants.TEXTURETYPE_UNSIGNED_BYTE) {\r\n super(name, frameGraph, scene);\r\n\r\n this._additionalConstructionParameters = [ratioSSAO, ratioBlur, textureType];\r\n\r\n this.registerInput(\"camera\", NodeRenderGraphBlockConnectionPointTypes.Camera);\r\n this.registerInput(\"geomDepth\", NodeRenderGraphBlockConnectionPointTypes.TextureViewDepth);\r\n this.registerInput(\"geomNormal\", NodeRenderGraphBlockConnectionPointTypes.TextureViewNormal);\r\n\r\n this._finalizeInputOutputRegistering();\r\n\r\n this._frameGraphTask = new FrameGraphSSAO2RenderingPipelineTask(this.name, frameGraph, ratioSSAO, ratioBlur, textureType);\r\n }\r\n\r\n private _createTask(ratioSSAO: number, ratioBlur: number, textureType: number) {\r\n const sourceSamplingMode = this.sourceSamplingMode;\r\n const samples = this.samples;\r\n const totalStrength = this.totalStrength;\r\n const base = this.base;\r\n const maxZ = this.maxZ;\r\n const minZAspect = this.minZAspect;\r\n const radius = this.radius;\r\n const epsilon = this.epsilon;\r\n const useViewportInCombineStage = this.useViewportInCombineStage;\r\n const bypassBlur = this.bypassBlur;\r\n const expensiveBlur = this.expensiveBlur;\r\n const bilateralSoften = this.bilateralSoften;\r\n const bilateralSamples = this.bilateralSamples;\r\n const bilateralTolerance = this.bilateralTolerance;\r\n\r\n this._frameGraphTask.dispose();\r\n this._frameGraphTask = new FrameGraphSSAO2RenderingPipelineTask(this.name, this._frameGraph, ratioSSAO, ratioBlur, textureType);\r\n\r\n this.sourceSamplingMode = sourceSamplingMode;\r\n this.samples = samples;\r\n this.totalStrength = totalStrength;\r\n this.base = base;\r\n this.maxZ = maxZ;\r\n this.minZAspect = minZAspect;\r\n this.radius = radius;\r\n this.epsilon = epsilon;\r\n this.useViewportInCombineStage = useViewportInCombineStage;\r\n this.bypassBlur = bypassBlur;\r\n this.expensiveBlur = expensiveBlur;\r\n this.bilateralSoften = bilateralSoften;\r\n this.bilateralSamples = bilateralSamples;\r\n this.bilateralTolerance = bilateralTolerance;\r\n\r\n this._additionalConstructionParameters = [ratioSSAO, ratioBlur, textureType];\r\n }\r\n\r\n /** The texture type used by the different post processes created by SSAO2 */\r\n @editableInPropertyPage(\"Texture type\", PropertyTypeForEdition.TextureType, \"TEXTURE\")\r\n public get textureType() {\r\n return this._frameGraphTask.textureType;\r\n }\r\n\r\n public set textureType(value: number) {\r\n this._createTask(this._frameGraphTask.ratioSSAO, this._frameGraphTask.ratioBlur, value);\r\n }\r\n\r\n /** The ratio between the SSAO texture size and the source texture size */\r\n @editableInPropertyPage(\"SSAO texture ratio\", PropertyTypeForEdition.Float, \"TEXTURE\", { min: 0.1, max: 1 })\r\n public get ratioSSAO() {\r\n return this._frameGraphTask.ratioSSAO;\r\n }\r\n\r\n public set ratioSSAO(value: number) {\r\n this._createTask(value, this._frameGraphTask.ratioBlur, this._frameGraphTask.textureType);\r\n }\r\n\r\n /** The ratio between the SSAO blur texture size and the source texture size */\r\n @editableInPropertyPage(\"SSAO blur texture ratio\", PropertyTypeForEdition.Float, \"TEXTURE\", { min: 0.1, max: 1 })\r\n public get ratioBlur() {\r\n return this._frameGraphTask.ratioBlur;\r\n }\r\n\r\n public set ratioBlur(value: number) {\r\n this._createTask(this._frameGraphTask.ratioSSAO, value, this._frameGraphTask.textureType);\r\n }\r\n\r\n /** Number of samples used for the SSAO calculations. Default value is 8. */\r\n @editableInPropertyPage(\"Samples\", PropertyTypeForEdition.Int, \"SSAO\", { min: 1, max: 128 })\r\n public get samples() {\r\n return this._frameGraphTask.ssao.samples;\r\n }\r\n\r\n public set samples(value: number) {\r\n this._frameGraphTask.ssao.samples = value;\r\n }\r\n\r\n /** The strength of the SSAO post-process. Default value is 1.0. */\r\n @editableInPropertyPage(\"Strength\", PropertyTypeForEdition.Float, \"SSAO\", { min: 0, max: 3 })\r\n public get totalStrength() {\r\n return this._frameGraphTask.ssao.totalStrength;\r\n }\r\n\r\n public set totalStrength(value: number) {\r\n this._frameGraphTask.ssao.totalStrength = value;\r\n }\r\n\r\n /** The base color of the SSAO post-process. The final result is \"base + ssao\" between [0, 1] */\r\n @editableInPropertyPage(\"Base\", PropertyTypeForEdition.Float, \"SSAO\", { min: 0, max: 1 })\r\n public get base() {\r\n return this._frameGraphTask.ssao.base;\r\n }\r\n\r\n public set base(value: number) {\r\n this._frameGraphTask.ssao.base = value;\r\n }\r\n\r\n /** Maximum depth value to still render AO. A smooth falloff makes the dimming more natural, so there will be no abrupt shading change. */\r\n @editableInPropertyPage(\"Max Z\", PropertyTypeForEdition.Float, \"SSAO\", { min: 0, max: 10000 })\r\n public get maxZ() {\r\n return this._frameGraphTask.ssao.maxZ;\r\n }\r\n\r\n public set maxZ(value: number) {\r\n this._frameGraphTask.ssao.maxZ = value;\r\n }\r\n\r\n /** In order to save performances, SSAO radius is clamped on close geometry. This ratio changes by how much. */\r\n @editableInPropertyPage(\"Min Z aspect\", PropertyTypeForEdition.Float, \"SSAO\", { min: 0, max: 0.5 })\r\n public get minZAspect() {\r\n return this._frameGraphTask.ssao.minZAspect;\r\n }\r\n\r\n public set minZAspect(value: number) {\r\n this._frameGraphTask.ssao.minZAspect = value;\r\n }\r\n\r\n /** The radius around the analyzed pixel used by the SSAO post-process. */\r\n @editableInPropertyPage(\"Radius\", PropertyTypeForEdition.Float, \"SSAO\", { min: 0, max: 10 })\r\n public get radius() {\r\n return this._frameGraphTask.ssao.radius;\r\n }\r\n\r\n public set radius(value: number) {\r\n this._frameGraphTask.ssao.radius = value;\r\n }\r\n\r\n /** Used in SSAO calculations to compensate for accuracy issues with depth values. */\r\n @editableInPropertyPage(\"Epsilon\", PropertyTypeForEdition.Float, \"SSAO\", { min: 0, max: 1 })\r\n public get epsilon() {\r\n return this._frameGraphTask.ssao.epsilon;\r\n }\r\n\r\n public set epsilon(value: number) {\r\n this._frameGraphTask.ssao.epsilon = value;\r\n }\r\n\r\n /** Indicates that the combine stage should use the current camera viewport to render the SSAO result on only a portion of the output texture. */\r\n @editableInPropertyPage(\"Use viewport in combine stage\", PropertyTypeForEdition.Boolean, \"SSAO\")\r\n public get useViewportInCombineStage() {\r\n return this._frameGraphTask.ssao.useViewportInCombineStage;\r\n }\r\n\r\n public set useViewportInCombineStage(value: boolean) {\r\n this._frameGraphTask.ssao.useViewportInCombineStage = value;\r\n }\r\n\r\n /** Skips the denoising (blur) stage of the SSAO calculations. */\r\n @editableInPropertyPage(\"Bypass blur\", PropertyTypeForEdition.Boolean, \"Blur\")\r\n public get bypassBlur() {\r\n return this._frameGraphTask.ssao.bypassBlur;\r\n }\r\n\r\n public set bypassBlur(value: boolean) {\r\n this._frameGraphTask.ssao.bypassBlur = value;\r\n }\r\n\r\n /** Enables the configurable bilateral denoising (blurring) filter. */\r\n @editableInPropertyPage(\"Expensive blur\", PropertyTypeForEdition.Boolean, \"Blur\")\r\n public get expensiveBlur() {\r\n return this._frameGraphTask.ssao.expensiveBlur;\r\n }\r\n\r\n public set expensiveBlur(value: boolean) {\r\n this._frameGraphTask.ssao.expensiveBlur = value;\r\n }\r\n\r\n /** The number of samples the bilateral filter uses in both dimensions when denoising the SSAO calculations. */\r\n @editableInPropertyPage(\"Samples\", PropertyTypeForEdition.Int, \"Blur\", { min: 1, max: 128 })\r\n public get bilateralSamples() {\r\n return this._frameGraphTask.ssao.bilateralSamples;\r\n }\r\n\r\n public set bilateralSamples(value: number) {\r\n this._frameGraphTask.ssao.bilateralSamples = value;\r\n }\r\n\r\n /** Controls the shape of the denoising kernel used by the bilateral filter. */\r\n @editableInPropertyPage(\"Soften\", PropertyTypeForEdition.Float, \"Blur\", { min: 0, max: 1 })\r\n public get bilateralSoften() {\r\n return this._frameGraphTask.ssao.bilateralSoften;\r\n }\r\n\r\n public set bilateralSoften(value: number) {\r\n this._frameGraphTask.ssao.bilateralSoften = value;\r\n }\r\n\r\n /** How forgiving the bilateral denoiser should be when rejecting samples. */\r\n @editableInPropertyPage(\"Tolerance\", PropertyTypeForEdition.Float, \"Blur\", { min: 0, max: 1 })\r\n public get bilateralTolerance() {\r\n return this._frameGraphTask.ssao.bilateralTolerance;\r\n }\r\n\r\n public set bilateralTolerance(value: number) {\r\n this._frameGraphTask.ssao.bilateralTolerance = value;\r\n }\r\n\r\n /**\r\n * Gets the current class name\r\n * @returns the class name\r\n */\r\n public override getClassName() {\r\n return \"NodeRenderGraphSSAO2PostProcessBlock\";\r\n }\r\n\r\n /**\r\n * Gets the camera input component\r\n */\r\n public get camera(): NodeRenderGraphConnectionPoint {\r\n return this._inputs[2];\r\n }\r\n\r\n /**\r\n * Gets the geometry depth input component\r\n */\r\n public get geomDepth(): NodeRenderGraphConnectionPoint {\r\n return this._inputs[3];\r\n }\r\n\r\n /**\r\n * Gets the geometry normal input component\r\n */\r\n public get geomNormal(): NodeRenderGraphConnectionPoint {\r\n return this._inputs[4];\r\n }\r\n\r\n protected override _buildBlock(state: NodeRenderGraphBuildState) {\r\n super._buildBlock(state);\r\n\r\n this._frameGraphTask.normalTexture = this.geomNormal.connectedPoint?.value as FrameGraphTextureHandle;\r\n this._frameGraphTask.depthTexture = this.geomDepth.connectedPoint?.value as FrameGraphTextureHandle;\r\n this._frameGraphTask.camera = this.camera.connectedPoint?.value as Camera;\r\n }\r\n\r\n protected override _dumpPropertiesCode() {\r\n const codes: string[] = [];\r\n codes.push(`${this._codeVariableName}.samples = ${this.samples};`);\r\n codes.push(`${this._codeVariableName}.totalStrength = ${this.totalStrength};`);\r\n codes.push(`${this._codeVariableName}.base = ${this.base};`);\r\n codes.push(`${this._codeVariableName}.maxZ = ${this.maxZ};`);\r\n codes.push(`${this._codeVariableName}.minZAspect = ${this.minZAspect};`);\r\n codes.push(`${this._codeVariableName}.radius = ${this.radius};`);\r\n codes.push(`${this._codeVariableName}.epsilon = ${this.epsilon};`);\r\n codes.push(`${this._codeVariableName}.useViewportInCombineStage = ${this.useViewportInCombineStage};`);\r\n codes.push(`${this._codeVariableName}.bypassBlur = ${this.bypassBlur};`);\r\n codes.push(`${this._codeVariableName}.expensiveBlur = ${this.expensiveBlur};`);\r\n codes.push(`${this._codeVariableName}.bilateralSamples = ${this.bilateralSamples};`);\r\n codes.push(`${this._codeVariableName}.bilateralSoften = ${this.bilateralSoften};`);\r\n codes.push(`${this._codeVariableName}.bilateralTolerance = ${this.bilateralTolerance};`);\r\n return super._dumpPropertiesCode() + codes.join(\"\\n\");\r\n }\r\n\r\n public override serialize(): any {\r\n const serializationObject = super.serialize();\r\n serializationObject.samples = this.samples;\r\n serializationObject.totalStrength = this.totalStrength;\r\n serializationObject.base = this.base;\r\n serializationObject.maxZ = this.maxZ;\r\n serializationObject.minZAspect = this.minZAspect;\r\n serializationObject.radius = this.radius;\r\n serializationObject.epsilon = this.epsilon;\r\n serializationObject.useViewportInCombineStage = this.useViewportInCombineStage;\r\n serializationObject.bypassBlur = this.bypassBlur;\r\n serializationObject.expensiveBlur = this.expensiveBlur;\r\n serializationObject.bilateralSoften = this.bilateralSoften;\r\n serializationObject.bilateralSamples = this.bilateralSamples;\r\n serializationObject.bilateralTolerance = this.bilateralTolerance;\r\n return serializationObject;\r\n }\r\n\r\n public override _deserialize(serializationObject: any) {\r\n super._deserialize(serializationObject);\r\n this.samples = serializationObject.samples;\r\n this.totalStrength = serializationObject.totalStrength;\r\n this.base = serializationObject.base;\r\n this.maxZ = serializationObject.maxZ;\r\n this.minZAspect = serializationObject.minZAspect;\r\n this.radius = serializationObject.radius;\r\n this.epsilon = serializationObject.epsilon;\r\n this.useViewportInCombineStage = serializationObject.useViewportInCombineStage;\r\n this.bypassBlur = serializationObject.bypassBlur;\r\n this.expensiveBlur = serializationObject.expensiveBlur;\r\n this.bilateralSoften = serializationObject.bilateralSoften;\r\n this.bilateralSamples = serializationObject.bilateralSamples;\r\n this.bilateralTolerance = serializationObject.bilateralTolerance;\r\n }\r\n}\r\n\r\nRegisterClass(\"BABYLON.NodeRenderGraphSSAO2PostProcessBlock\", NodeRenderGraphSSAO2PostProcessBlock);\r\n"]}
@@ -6,6 +6,7 @@ import { NodeRenderGraphBasePostProcessBlock } from "./basePostProcessBlock.js";
6
6
  */
7
7
  export declare class NodeRenderGraphSSRPostProcessBlock extends NodeRenderGraphBasePostProcessBlock {
8
8
  protected _frameGraphTask: FrameGraphSSRRenderingPipelineTask;
9
+ _additionalConstructionParameters: [number];
9
10
  /**
10
11
  * Gets the frame graph task associated with this block
11
12
  */
@@ -1 +1 @@
1
- {"version":3,"file":"ssrPostProcessBlock.js","sourceRoot":"","sources":["../../../../../../../dev/core/src/FrameGraph/Node/Blocks/PostProcesses/ssrPostProcessBlock.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\r\n Scene,\r\n FrameGraph,\r\n NodeRenderGraphConnectionPoint,\r\n NodeRenderGraphBuildState,\r\n FrameGraphTextureHandle,\r\n Camera,\r\n NodeRenderGraphGeometryRendererBlock,\r\n} from \"core/index\";\r\nimport { Constants } from \"core/Engines/constants\";\r\nimport { RegisterClass } from \"../../../../Misc/typeStore\";\r\nimport { NodeRenderGraphBlockConnectionPointTypes } from \"../../Types/nodeRenderGraphTypes\";\r\nimport { editableInPropertyPage, PropertyTypeForEdition } from \"../../../../Decorators/nodeDecorator\";\r\nimport { FrameGraphSSRRenderingPipelineTask } from \"../../../Tasks/PostProcesses/ssrRenderingPipelineTask\";\r\nimport { NodeRenderGraphBasePostProcessBlock } from \"./basePostProcessBlock\";\r\n\r\n/**\r\n * Block that implements the SSR post process\r\n */\r\nexport class NodeRenderGraphSSRPostProcessBlock extends NodeRenderGraphBasePostProcessBlock {\r\n protected override _frameGraphTask: FrameGraphSSRRenderingPipelineTask;\r\n\r\n /**\r\n * Gets the frame graph task associated with this block\r\n */\r\n public override get task() {\r\n return this._frameGraphTask;\r\n }\r\n\r\n /**\r\n * Create a new NodeRenderGraphSSRPostProcessBlock\r\n * @param name defines the block name\r\n * @param frameGraph defines the hosting frame graph\r\n * @param scene defines the hosting scene\r\n * @param textureType The texture type used by the different post processes created by SSR (default: Constants.TEXTURETYPE_UNSIGNED_BYTE)\r\n */\r\n public constructor(name: string, frameGraph: FrameGraph, scene: Scene, textureType = Constants.TEXTURETYPE_UNSIGNED_BYTE) {\r\n super(name, frameGraph, scene);\r\n\r\n this._additionalConstructionParameters = [textureType];\r\n\r\n this.registerInput(\"camera\", NodeRenderGraphBlockConnectionPointTypes.Camera);\r\n this.registerInput(\"geomDepth\", NodeRenderGraphBlockConnectionPointTypes.AutoDetect);\r\n this.registerInput(\"geomNormal\", NodeRenderGraphBlockConnectionPointTypes.AutoDetect);\r\n this.registerInput(\"geomReflectivity\", NodeRenderGraphBlockConnectionPointTypes.TextureReflectivity);\r\n this.registerInput(\"geomBackDepth\", NodeRenderGraphBlockConnectionPointTypes.AutoDetect, true);\r\n\r\n this.geomNormal.addExcludedConnectionPointFromAllowedTypes(\r\n NodeRenderGraphBlockConnectionPointTypes.TextureWorldNormal | NodeRenderGraphBlockConnectionPointTypes.TextureViewNormal\r\n );\r\n this.geomDepth.addExcludedConnectionPointFromAllowedTypes(\r\n NodeRenderGraphBlockConnectionPointTypes.TextureScreenDepth | NodeRenderGraphBlockConnectionPointTypes.TextureViewDepth\r\n );\r\n this.geomBackDepth.addExcludedConnectionPointFromAllowedTypes(\r\n NodeRenderGraphBlockConnectionPointTypes.TextureScreenDepth | NodeRenderGraphBlockConnectionPointTypes.TextureViewDepth\r\n );\r\n\r\n this._finalizeInputOutputRegistering();\r\n\r\n this._frameGraphTask = new FrameGraphSSRRenderingPipelineTask(this.name, frameGraph, textureType);\r\n }\r\n\r\n private _createTask(textureType: number) {\r\n const sourceSamplingMode = this.sourceSamplingMode;\r\n const maxDistance = this.maxDistance;\r\n const step = this.step;\r\n const thickness = this.thickness;\r\n const strength = this.strength;\r\n const reflectionSpecularFalloffExponent = this.reflectionSpecularFalloffExponent;\r\n const maxSteps = this.maxSteps;\r\n const roughnessFactor = this.roughnessFactor;\r\n const selfCollisionNumSkip = this.selfCollisionNumSkip;\r\n const reflectivityThreshold = this.reflectivityThreshold;\r\n const ssrDownsample = this.ssrDownsample;\r\n const blurDispersionStrength = this.blurDispersionStrength;\r\n const blurDownsample = this.blurDownsample;\r\n const enableSmoothReflections = this.enableSmoothReflections;\r\n const attenuateScreenBorders = this.attenuateScreenBorders;\r\n const attenuateIntersectionDistance = this.attenuateIntersectionDistance;\r\n const attenuateIntersectionIterations = this.attenuateIntersectionIterations;\r\n const attenuateFacingCamera = this.attenuateFacingCamera;\r\n const attenuateBackfaceReflection = this.attenuateBackfaceReflection;\r\n const clipToFrustum = this.clipToFrustum;\r\n const enableAutomaticThicknessComputation = this.enableAutomaticThicknessComputation;\r\n const useFresnel = this.useFresnel;\r\n const inputTextureColorIsInGammaSpace = this.inputTextureColorIsInGammaSpace;\r\n const generateOutputInGammaSpace = this.generateOutputInGammaSpace;\r\n const debug = this.debug;\r\n\r\n this._frameGraphTask.dispose();\r\n this._frameGraphTask = new FrameGraphSSRRenderingPipelineTask(this.name, this._frameGraph, textureType);\r\n\r\n this.sourceSamplingMode = sourceSamplingMode;\r\n this.maxDistance = maxDistance;\r\n this.step = step;\r\n this.thickness = thickness;\r\n this.strength = strength;\r\n this.reflectionSpecularFalloffExponent = reflectionSpecularFalloffExponent;\r\n this.maxSteps = maxSteps;\r\n this.roughnessFactor = roughnessFactor;\r\n this.selfCollisionNumSkip = selfCollisionNumSkip;\r\n this.reflectivityThreshold = reflectivityThreshold;\r\n this.ssrDownsample = ssrDownsample;\r\n this.blurDispersionStrength = blurDispersionStrength;\r\n this.blurDownsample = blurDownsample;\r\n this.enableSmoothReflections = enableSmoothReflections;\r\n this.attenuateScreenBorders = attenuateScreenBorders;\r\n this.attenuateIntersectionDistance = attenuateIntersectionDistance;\r\n this.attenuateIntersectionIterations = attenuateIntersectionIterations;\r\n this.attenuateFacingCamera = attenuateFacingCamera;\r\n this.attenuateBackfaceReflection = attenuateBackfaceReflection;\r\n this.clipToFrustum = clipToFrustum;\r\n this.useFresnel = useFresnel;\r\n this.enableAutomaticThicknessComputation = enableAutomaticThicknessComputation;\r\n this.inputTextureColorIsInGammaSpace = inputTextureColorIsInGammaSpace;\r\n this.generateOutputInGammaSpace = generateOutputInGammaSpace;\r\n this.debug = debug;\r\n\r\n this._additionalConstructionParameters = [textureType];\r\n }\r\n\r\n /** The texture type used by the different post processes created by SSR */\r\n @editableInPropertyPage(\"Texture type\", PropertyTypeForEdition.TextureType, \"SSR\")\r\n public get textureType() {\r\n return this._frameGraphTask.textureType;\r\n }\r\n\r\n public set textureType(value: number) {\r\n this._createTask(value);\r\n }\r\n\r\n /** Gets or sets a boolean indicating if the effect should be rendered in debug mode */\r\n @editableInPropertyPage(\"Debug\", PropertyTypeForEdition.Boolean, \"SSR\")\r\n public get debug() {\r\n return this._frameGraphTask.ssr.debug;\r\n }\r\n\r\n public set debug(value: boolean) {\r\n this._frameGraphTask.ssr.debug = value;\r\n }\r\n\r\n /** Gets or sets the current reflection strength. 1.0 is an ideal value but can be increased/decreased for particular results */\r\n @editableInPropertyPage(\"Strength\", PropertyTypeForEdition.Float, \"SSR\", { min: 0, max: 5 })\r\n public get strength() {\r\n return this._frameGraphTask.ssr.strength;\r\n }\r\n\r\n public set strength(value: number) {\r\n this._frameGraphTask.ssr.strength = value;\r\n }\r\n\r\n /** Gets or sets the falloff exponent used to compute the reflection strength. Higher values lead to fainter reflections */\r\n @editableInPropertyPage(\"Reflection exponent\", PropertyTypeForEdition.Float, \"SSR\", { min: 0, max: 5 })\r\n public get reflectionSpecularFalloffExponent() {\r\n return this._frameGraphTask.ssr.reflectionSpecularFalloffExponent;\r\n }\r\n\r\n public set reflectionSpecularFalloffExponent(value: number) {\r\n this._frameGraphTask.ssr.reflectionSpecularFalloffExponent = value;\r\n }\r\n\r\n /** Gets or sets the minimum value for one of the reflectivity component of the material to consider it for SSR */\r\n @editableInPropertyPage(\"Reflectivity threshold\", PropertyTypeForEdition.Float, \"SSR\", { min: 0, max: 1 })\r\n public get reflectivityThreshold() {\r\n return this._frameGraphTask.ssr.reflectivityThreshold;\r\n }\r\n\r\n public set reflectivityThreshold(value: number) {\r\n this._frameGraphTask.ssr.reflectivityThreshold = value;\r\n }\r\n\r\n /** Gets or sets the thickness value used as tolerance when computing the intersection between the reflected ray and the scene */\r\n @editableInPropertyPage(\"Thickness\", PropertyTypeForEdition.Float, \"SSR\", { min: 0, max: 10 })\r\n public get thickness() {\r\n return this._frameGraphTask.ssr.thickness;\r\n }\r\n\r\n public set thickness(value: number) {\r\n this._frameGraphTask.ssr.thickness = value;\r\n }\r\n\r\n /** Gets or sets the step size used to iterate until the effect finds the color of the reflection's pixel */\r\n @editableInPropertyPage(\"Step\", PropertyTypeForEdition.Int, \"SSR\", { min: 1, max: 50 })\r\n public get step() {\r\n return this._frameGraphTask.ssr.step;\r\n }\r\n\r\n public set step(value: number) {\r\n this._frameGraphTask.ssr.step = value;\r\n }\r\n\r\n /** Gets or sets whether or not smoothing reflections is enabled */\r\n @editableInPropertyPage(\"Smooth reflections\", PropertyTypeForEdition.Boolean, \"SSR\")\r\n public get enableSmoothReflections() {\r\n return this._frameGraphTask.ssr.enableSmoothReflections;\r\n }\r\n\r\n public set enableSmoothReflections(value: boolean) {\r\n this._frameGraphTask.ssr.enableSmoothReflections = value;\r\n }\r\n\r\n /** Maximum number of steps during the ray marching process after which we consider an intersection could not be found */\r\n @editableInPropertyPage(\"Max steps\", PropertyTypeForEdition.Int, \"SSR\", { min: 1, max: 3000 })\r\n public get maxSteps() {\r\n return this._frameGraphTask.ssr.maxSteps;\r\n }\r\n\r\n public set maxSteps(value: number) {\r\n this._frameGraphTask.ssr.maxSteps = value;\r\n }\r\n\r\n /** Gets or sets the max distance used to define how far we look for reflection during the ray-marching on the reflected ray */\r\n @editableInPropertyPage(\"Max distance\", PropertyTypeForEdition.Float, \"SSR\", { min: 1, max: 3000 })\r\n public get maxDistance() {\r\n return this._frameGraphTask.ssr.maxDistance;\r\n }\r\n\r\n public set maxDistance(value: number) {\r\n this._frameGraphTask.ssr.maxDistance = value;\r\n }\r\n\r\n /** Gets or sets the factor applied when computing roughness */\r\n @editableInPropertyPage(\"Roughness factor\", PropertyTypeForEdition.Float, \"SSR\", { min: 0, max: 1 })\r\n public get roughnessFactor() {\r\n return this._frameGraphTask.ssr.roughnessFactor;\r\n }\r\n\r\n public set roughnessFactor(value: number) {\r\n this._frameGraphTask.ssr.roughnessFactor = value;\r\n }\r\n\r\n /** Number of steps to skip at start when marching the ray to avoid self collisions */\r\n @editableInPropertyPage(\"Self collision skips\", PropertyTypeForEdition.Int, \"SSR\", { min: 1, max: 10 })\r\n public get selfCollisionNumSkip() {\r\n return this._frameGraphTask.ssr.selfCollisionNumSkip;\r\n }\r\n\r\n public set selfCollisionNumSkip(value: number) {\r\n this._frameGraphTask.ssr.selfCollisionNumSkip = value;\r\n }\r\n\r\n /** Gets or sets the downsample factor used to reduce the size of the texture used to compute the SSR contribution */\r\n @editableInPropertyPage(\"SSR downsample\", PropertyTypeForEdition.Int, \"SSR\", { min: 0, max: 5 })\r\n public get ssrDownsample() {\r\n return this._frameGraphTask.ssr.ssrDownsample;\r\n }\r\n\r\n public set ssrDownsample(value: number) {\r\n this._frameGraphTask.ssr.ssrDownsample = value;\r\n }\r\n\r\n /** Gets or sets a boolean indicating if the ray should be clipped to the frustum */\r\n @editableInPropertyPage(\"Clip to frustum\", PropertyTypeForEdition.Boolean, \"SSR\")\r\n public get clipToFrustum() {\r\n return this._frameGraphTask.ssr.clipToFrustum;\r\n }\r\n\r\n public set clipToFrustum(value: boolean) {\r\n this._frameGraphTask.ssr.clipToFrustum = value;\r\n }\r\n\r\n /** Gets or sets a boolean defining if geometry thickness should be computed automatically */\r\n @editableInPropertyPage(\"Automatic thickness computation\", PropertyTypeForEdition.Boolean, \"SSR\")\r\n public get enableAutomaticThicknessComputation() {\r\n return this._frameGraphTask.ssr.enableAutomaticThicknessComputation;\r\n }\r\n\r\n public set enableAutomaticThicknessComputation(value: boolean) {\r\n this._frameGraphTask.ssr.enableAutomaticThicknessComputation = value;\r\n }\r\n\r\n /** Gets or sets a boolean indicating whether the blending between the current color pixel and the reflection color should be done with a Fresnel coefficient */\r\n @editableInPropertyPage(\"Use Fresnel\", PropertyTypeForEdition.Boolean, \"SSR\")\r\n public get useFresnel() {\r\n return this._frameGraphTask.ssr.useFresnel;\r\n }\r\n\r\n public set useFresnel(value: boolean) {\r\n this._frameGraphTask.ssr.useFresnel = value;\r\n }\r\n\r\n /** Gets or sets the blur dispersion strength. Set this value to 0 to disable blurring */\r\n @editableInPropertyPage(\"Strength\", PropertyTypeForEdition.Float, \"Blur\", { min: 0, max: 0.15 })\r\n public get blurDispersionStrength() {\r\n return this._frameGraphTask.ssr.blurDispersionStrength;\r\n }\r\n\r\n public set blurDispersionStrength(value: number) {\r\n this._frameGraphTask.ssr.blurDispersionStrength = value;\r\n }\r\n\r\n /** Gets or sets the downsample factor used to reduce the size of the textures used to blur the reflection effect */\r\n @editableInPropertyPage(\"Blur downsample\", PropertyTypeForEdition.Int, \"Blur\", { min: 0, max: 5 })\r\n public get blurDownsample() {\r\n return this._frameGraphTask.ssr.blurDownsample;\r\n }\r\n\r\n public set blurDownsample(value: number) {\r\n this._frameGraphTask.ssr.blurDownsample = value;\r\n }\r\n\r\n /** Gets or sets a boolean indicating if the reflections should be attenuated at the screen borders */\r\n @editableInPropertyPage(\"Screen borders\", PropertyTypeForEdition.Boolean, \"Attenuations\")\r\n public get attenuateScreenBorders() {\r\n return this._frameGraphTask.ssr.attenuateScreenBorders;\r\n }\r\n\r\n public set attenuateScreenBorders(value: boolean) {\r\n this._frameGraphTask.ssr.attenuateScreenBorders = value;\r\n }\r\n\r\n /** Gets or sets a boolean indicating if the reflections should be attenuated according to the distance of the intersection */\r\n @editableInPropertyPage(\"Distance\", PropertyTypeForEdition.Boolean, \"Attenuations\")\r\n public get attenuateIntersectionDistance() {\r\n return this._frameGraphTask.ssr.attenuateIntersectionDistance;\r\n }\r\n\r\n public set attenuateIntersectionDistance(value: boolean) {\r\n this._frameGraphTask.ssr.attenuateIntersectionDistance = value;\r\n }\r\n\r\n /** Gets or sets a boolean indicating if the reflections should be attenuated according to the number of iterations performed to find the intersection */\r\n @editableInPropertyPage(\"Step iterations\", PropertyTypeForEdition.Boolean, \"Attenuations\")\r\n public get attenuateIntersectionIterations() {\r\n return this._frameGraphTask.ssr.attenuateIntersectionIterations;\r\n }\r\n\r\n public set attenuateIntersectionIterations(value: boolean) {\r\n this._frameGraphTask.ssr.attenuateIntersectionIterations = value;\r\n }\r\n\r\n /** Gets or sets a boolean indicating if the reflections should be attenuated when the reflection ray is facing the camera (the view direction) */\r\n @editableInPropertyPage(\"Facing camera\", PropertyTypeForEdition.Boolean, \"Attenuations\")\r\n public get attenuateFacingCamera() {\r\n return this._frameGraphTask.ssr.attenuateFacingCamera;\r\n }\r\n\r\n public set attenuateFacingCamera(value: boolean) {\r\n this._frameGraphTask.ssr.attenuateFacingCamera = value;\r\n }\r\n\r\n /** Gets or sets a boolean indicating if the backface reflections should be attenuated */\r\n @editableInPropertyPage(\"Backface reflections\", PropertyTypeForEdition.Boolean, \"Attenuations\")\r\n public get attenuateBackfaceReflection() {\r\n return this._frameGraphTask.ssr.attenuateBackfaceReflection;\r\n }\r\n\r\n public set attenuateBackfaceReflection(value: boolean) {\r\n this._frameGraphTask.ssr.attenuateBackfaceReflection = value;\r\n }\r\n\r\n /** Gets or sets a boolean defining if the input color texture is in gamma space */\r\n @editableInPropertyPage(\"Input is in gamma space\", PropertyTypeForEdition.Boolean, \"Color space\")\r\n public get inputTextureColorIsInGammaSpace() {\r\n return this._frameGraphTask.ssr.inputTextureColorIsInGammaSpace;\r\n }\r\n\r\n public set inputTextureColorIsInGammaSpace(value: boolean) {\r\n this._frameGraphTask.ssr.inputTextureColorIsInGammaSpace = value;\r\n }\r\n\r\n /** Gets or sets a boolean defining if the output color texture generated by the SSR pipeline should be in gamma space */\r\n @editableInPropertyPage(\"Output to gamma space\", PropertyTypeForEdition.Boolean, \"Color space\")\r\n public get generateOutputInGammaSpace() {\r\n return this._frameGraphTask.ssr.generateOutputInGammaSpace;\r\n }\r\n\r\n public set generateOutputInGammaSpace(value: boolean) {\r\n this._frameGraphTask.ssr.generateOutputInGammaSpace = value;\r\n }\r\n\r\n /**\r\n * Gets the current class name\r\n * @returns the class name\r\n */\r\n public override getClassName() {\r\n return \"NodeRenderGraphSSRPostProcessBlock\";\r\n }\r\n\r\n /**\r\n * Gets the camera input component\r\n */\r\n public get camera(): NodeRenderGraphConnectionPoint {\r\n return this._inputs[2];\r\n }\r\n\r\n /**\r\n * Gets the geometry depth input component\r\n */\r\n public get geomDepth(): NodeRenderGraphConnectionPoint {\r\n return this._inputs[3];\r\n }\r\n\r\n /**\r\n * Gets the geometry normal input component\r\n */\r\n public get geomNormal(): NodeRenderGraphConnectionPoint {\r\n return this._inputs[4];\r\n }\r\n\r\n /**\r\n * Gets the geometry reflectivity input component\r\n */\r\n public get geomReflectivity(): NodeRenderGraphConnectionPoint {\r\n return this._inputs[5];\r\n }\r\n\r\n /**\r\n * Gets the geometry back depth input component\r\n */\r\n public get geomBackDepth(): NodeRenderGraphConnectionPoint {\r\n return this._inputs[6];\r\n }\r\n\r\n protected override _buildBlock(state: NodeRenderGraphBuildState) {\r\n super._buildBlock(state);\r\n\r\n this._frameGraphTask.normalTexture = this.geomNormal.connectedPoint?.value as FrameGraphTextureHandle;\r\n this._frameGraphTask.depthTexture = this.geomDepth.connectedPoint?.value as FrameGraphTextureHandle;\r\n this._frameGraphTask.reflectivityTexture = this.geomReflectivity.connectedPoint?.value as FrameGraphTextureHandle;\r\n this._frameGraphTask.backDepthTexture = this.geomBackDepth.connectedPoint?.value as FrameGraphTextureHandle;\r\n this._frameGraphTask.camera = this.camera.connectedPoint?.value as Camera;\r\n\r\n if (this.enableAutomaticThicknessComputation) {\r\n if (!this._frameGraphTask.backDepthTexture) {\r\n throw new Error(`SSR post process \"${this.name}\": Automatic thickness computation requires a back depth texture to be connected!`);\r\n }\r\n\r\n const geomBackDepthOwnerBlock = this.geomBackDepth.connectedPoint!.ownerBlock;\r\n if (geomBackDepthOwnerBlock.getClassName() === \"NodeRenderGraphGeometryRendererBlock\") {\r\n const geometryBackFaceRendererBlock = geomBackDepthOwnerBlock as NodeRenderGraphGeometryRendererBlock;\r\n if (!geometryBackFaceRendererBlock.reverseCulling) {\r\n throw new Error(\r\n `SSR post process \"${this.name}\": Automatic thickness computation requires the geometry renderer block for the back depth texture to have reverse culling enabled!`\r\n );\r\n }\r\n\r\n if (this._frameGraphTask.depthTexture) {\r\n const geomDepthOwnerBlock = this.geomDepth.connectedPoint!.ownerBlock;\r\n if (geomDepthOwnerBlock.getClassName() === \"NodeRenderGraphGeometryRendererBlock\") {\r\n const geomDepthConnectionPointType = this.geomDepth.connectedPoint!.type;\r\n const geomBackDepthConnectionPointType = this.geomBackDepth.connectedPoint!.type;\r\n\r\n if (geomDepthConnectionPointType !== geomBackDepthConnectionPointType) {\r\n throw new Error(\r\n `SSR post process \"${this.name}\": Automatic thickness computation requires that geomDepth and geomBackDepth have the same type (view or screen space depth)!`\r\n );\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (this.geomNormal.connectedPoint) {\r\n if (this.geomNormal.connectedPoint.type === NodeRenderGraphBlockConnectionPointTypes.TextureWorldNormal) {\r\n this._frameGraphTask.ssr.normalsAreInWorldSpace = true;\r\n this._frameGraphTask.ssr.normalsAreUnsigned = true;\r\n }\r\n }\r\n if (this.geomDepth.connectedPoint) {\r\n if (this.geomDepth.connectedPoint.type === NodeRenderGraphBlockConnectionPointTypes.TextureScreenDepth) {\r\n this._frameGraphTask.ssr.useScreenspaceDepth = true;\r\n }\r\n }\r\n }\r\n\r\n protected override _dumpPropertiesCode() {\r\n const codes: string[] = [];\r\n codes.push(`${this._codeVariableName}.debug = ${this.debug};`);\r\n codes.push(`${this._codeVariableName}.strength = ${this.strength};`);\r\n codes.push(`${this._codeVariableName}.reflectionSpecularFalloffExponent = ${this.reflectionSpecularFalloffExponent};`);\r\n codes.push(`${this._codeVariableName}.reflectivityThreshold = ${this.reflectivityThreshold};`);\r\n codes.push(`${this._codeVariableName}.thickness = ${this.thickness};`);\r\n codes.push(`${this._codeVariableName}.step = ${this.step};`);\r\n codes.push(`${this._codeVariableName}.enableSmoothReflections = ${this.enableSmoothReflections};`);\r\n codes.push(`${this._codeVariableName}.maxSteps = ${this.maxSteps};`);\r\n codes.push(`${this._codeVariableName}.maxDistance = ${this.maxDistance};`);\r\n codes.push(`${this._codeVariableName}.roughnessFactor = ${this.roughnessFactor};`);\r\n codes.push(`${this._codeVariableName}.selfCollisionNumSkip = ${this.selfCollisionNumSkip};`);\r\n codes.push(`${this._codeVariableName}.ssrDownsample = ${this.ssrDownsample};`);\r\n codes.push(`${this._codeVariableName}.clipToFrustum = ${this.clipToFrustum};`);\r\n codes.push(`${this._codeVariableName}.useFresnel = ${this.useFresnel};`);\r\n codes.push(`${this._codeVariableName}.enableAutomaticThicknessComputation = ${this.enableAutomaticThicknessComputation};`);\r\n codes.push(`${this._codeVariableName}.blurDispersionStrength = ${this.blurDispersionStrength};`);\r\n codes.push(`${this._codeVariableName}.blurDownsample = ${this.blurDownsample};`);\r\n codes.push(`${this._codeVariableName}.attenuateScreenBorders = ${this.attenuateScreenBorders};`);\r\n codes.push(`${this._codeVariableName}.attenuateIntersectionDistance = ${this.attenuateIntersectionDistance};`);\r\n codes.push(`${this._codeVariableName}.attenuateIntersectionIterations = ${this.attenuateIntersectionIterations};`);\r\n codes.push(`${this._codeVariableName}.attenuateFacingCamera = ${this.attenuateFacingCamera};`);\r\n codes.push(`${this._codeVariableName}.attenuateBackfaceReflection = ${this.attenuateBackfaceReflection};`);\r\n codes.push(`${this._codeVariableName}.inputTextureColorIsInGammaSpace = ${this.inputTextureColorIsInGammaSpace};`);\r\n codes.push(`${this._codeVariableName}.generateOutputInGammaSpace = ${this.generateOutputInGammaSpace};`);\r\n return super._dumpPropertiesCode() + codes.join(\"\\n\");\r\n }\r\n\r\n public override serialize(): any {\r\n const serializationObject = super.serialize();\r\n serializationObject.debug = this.debug;\r\n serializationObject.strength = this.strength;\r\n serializationObject.reflectionSpecularFalloffExponent = this.reflectionSpecularFalloffExponent;\r\n serializationObject.reflectivityThreshold = this.reflectivityThreshold;\r\n serializationObject.thickness = this.thickness;\r\n serializationObject.step = this.step;\r\n serializationObject.enableSmoothReflections = this.enableSmoothReflections;\r\n serializationObject.maxSteps = this.maxSteps;\r\n serializationObject.maxDistance = this.maxDistance;\r\n serializationObject.roughnessFactor = this.roughnessFactor;\r\n serializationObject.selfCollisionNumSkip = this.selfCollisionNumSkip;\r\n serializationObject.ssrDownsample = this.ssrDownsample;\r\n serializationObject.clipToFrustum = this.clipToFrustum;\r\n serializationObject.useFresnel = this.useFresnel;\r\n serializationObject.enableAutomaticThicknessComputation = this.enableAutomaticThicknessComputation;\r\n serializationObject.blurDispersionStrength = this.blurDispersionStrength;\r\n serializationObject.blurDownsample = this.blurDownsample;\r\n serializationObject.attenuateScreenBorders = this.attenuateScreenBorders;\r\n serializationObject.attenuateIntersectionDistance = this.attenuateIntersectionDistance;\r\n serializationObject.attenuateIntersectionIterations = this.attenuateIntersectionIterations;\r\n serializationObject.attenuateFacingCamera = this.attenuateFacingCamera;\r\n serializationObject.attenuateBackfaceReflection = this.attenuateBackfaceReflection;\r\n serializationObject.inputTextureColorIsInGammaSpace = this.inputTextureColorIsInGammaSpace;\r\n serializationObject.generateOutputInGammaSpace = this.generateOutputInGammaSpace;\r\n return serializationObject;\r\n }\r\n\r\n public override _deserialize(serializationObject: any) {\r\n super._deserialize(serializationObject);\r\n this.debug = serializationObject.debug;\r\n this.strength = serializationObject.strength;\r\n this.reflectionSpecularFalloffExponent = serializationObject.reflectionSpecularFalloffExponent;\r\n this.reflectivityThreshold = serializationObject.reflectivityThreshold;\r\n this.thickness = serializationObject.thickness;\r\n this.step = serializationObject.step;\r\n this.enableSmoothReflections = serializationObject.enableSmoothReflections;\r\n this.maxSteps = serializationObject.maxSteps;\r\n this.maxDistance = serializationObject.maxDistance;\r\n this.roughnessFactor = serializationObject.roughnessFactor;\r\n this.selfCollisionNumSkip = serializationObject.selfCollisionNumSkip;\r\n this.ssrDownsample = serializationObject.ssrDownsample;\r\n this.clipToFrustum = serializationObject.clipToFrustum;\r\n this.useFresnel = serializationObject.useFresnel;\r\n this.enableAutomaticThicknessComputation = serializationObject.enableAutomaticThicknessComputation;\r\n this.blurDispersionStrength = serializationObject.blurDispersionStrength;\r\n this.blurDownsample = serializationObject.blurDownsample;\r\n this.attenuateScreenBorders = serializationObject.attenuateScreenBorders;\r\n this.attenuateIntersectionDistance = serializationObject.attenuateIntersectionDistance;\r\n this.attenuateIntersectionIterations = serializationObject.attenuateIntersectionIterations;\r\n this.attenuateFacingCamera = serializationObject.attenuateFacingCamera;\r\n this.attenuateBackfaceReflection = serializationObject.attenuateBackfaceReflection;\r\n this.inputTextureColorIsInGammaSpace = serializationObject.inputTextureColorIsInGammaSpace;\r\n this.generateOutputInGammaSpace = serializationObject.generateOutputInGammaSpace;\r\n }\r\n}\r\n\r\nRegisterClass(\"BABYLON.NodeRenderGraphSSRPostProcessBlock\", NodeRenderGraphSSRPostProcessBlock);\r\n"]}
1
+ {"version":3,"file":"ssrPostProcessBlock.js","sourceRoot":"","sources":["../../../../../../../dev/core/src/FrameGraph/Node/Blocks/PostProcesses/ssrPostProcessBlock.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\r\n Scene,\r\n FrameGraph,\r\n NodeRenderGraphConnectionPoint,\r\n NodeRenderGraphBuildState,\r\n FrameGraphTextureHandle,\r\n Camera,\r\n NodeRenderGraphGeometryRendererBlock,\r\n} from \"core/index\";\r\nimport { Constants } from \"core/Engines/constants\";\r\nimport { RegisterClass } from \"../../../../Misc/typeStore\";\r\nimport { NodeRenderGraphBlockConnectionPointTypes } from \"../../Types/nodeRenderGraphTypes\";\r\nimport { editableInPropertyPage, PropertyTypeForEdition } from \"../../../../Decorators/nodeDecorator\";\r\nimport { FrameGraphSSRRenderingPipelineTask } from \"../../../Tasks/PostProcesses/ssrRenderingPipelineTask\";\r\nimport { NodeRenderGraphBasePostProcessBlock } from \"./basePostProcessBlock\";\r\n\r\n/**\r\n * Block that implements the SSR post process\r\n */\r\nexport class NodeRenderGraphSSRPostProcessBlock extends NodeRenderGraphBasePostProcessBlock {\r\n protected override _frameGraphTask: FrameGraphSSRRenderingPipelineTask;\r\n\r\n public override _additionalConstructionParameters: [number];\r\n\r\n /**\r\n * Gets the frame graph task associated with this block\r\n */\r\n public override get task() {\r\n return this._frameGraphTask;\r\n }\r\n\r\n /**\r\n * Create a new NodeRenderGraphSSRPostProcessBlock\r\n * @param name defines the block name\r\n * @param frameGraph defines the hosting frame graph\r\n * @param scene defines the hosting scene\r\n * @param textureType The texture type used by the different post processes created by SSR (default: Constants.TEXTURETYPE_UNSIGNED_BYTE)\r\n */\r\n public constructor(name: string, frameGraph: FrameGraph, scene: Scene, textureType = Constants.TEXTURETYPE_UNSIGNED_BYTE) {\r\n super(name, frameGraph, scene);\r\n\r\n this._additionalConstructionParameters = [textureType];\r\n\r\n this.registerInput(\"camera\", NodeRenderGraphBlockConnectionPointTypes.Camera);\r\n this.registerInput(\"geomDepth\", NodeRenderGraphBlockConnectionPointTypes.AutoDetect);\r\n this.registerInput(\"geomNormal\", NodeRenderGraphBlockConnectionPointTypes.AutoDetect);\r\n this.registerInput(\"geomReflectivity\", NodeRenderGraphBlockConnectionPointTypes.TextureReflectivity);\r\n this.registerInput(\"geomBackDepth\", NodeRenderGraphBlockConnectionPointTypes.AutoDetect, true);\r\n\r\n this.geomNormal.addExcludedConnectionPointFromAllowedTypes(\r\n NodeRenderGraphBlockConnectionPointTypes.TextureWorldNormal | NodeRenderGraphBlockConnectionPointTypes.TextureViewNormal\r\n );\r\n this.geomDepth.addExcludedConnectionPointFromAllowedTypes(\r\n NodeRenderGraphBlockConnectionPointTypes.TextureScreenDepth | NodeRenderGraphBlockConnectionPointTypes.TextureViewDepth\r\n );\r\n this.geomBackDepth.addExcludedConnectionPointFromAllowedTypes(\r\n NodeRenderGraphBlockConnectionPointTypes.TextureScreenDepth | NodeRenderGraphBlockConnectionPointTypes.TextureViewDepth\r\n );\r\n\r\n this._finalizeInputOutputRegistering();\r\n\r\n this._frameGraphTask = new FrameGraphSSRRenderingPipelineTask(this.name, frameGraph, textureType);\r\n }\r\n\r\n private _createTask(textureType: number) {\r\n const sourceSamplingMode = this.sourceSamplingMode;\r\n const maxDistance = this.maxDistance;\r\n const step = this.step;\r\n const thickness = this.thickness;\r\n const strength = this.strength;\r\n const reflectionSpecularFalloffExponent = this.reflectionSpecularFalloffExponent;\r\n const maxSteps = this.maxSteps;\r\n const roughnessFactor = this.roughnessFactor;\r\n const selfCollisionNumSkip = this.selfCollisionNumSkip;\r\n const reflectivityThreshold = this.reflectivityThreshold;\r\n const ssrDownsample = this.ssrDownsample;\r\n const blurDispersionStrength = this.blurDispersionStrength;\r\n const blurDownsample = this.blurDownsample;\r\n const enableSmoothReflections = this.enableSmoothReflections;\r\n const attenuateScreenBorders = this.attenuateScreenBorders;\r\n const attenuateIntersectionDistance = this.attenuateIntersectionDistance;\r\n const attenuateIntersectionIterations = this.attenuateIntersectionIterations;\r\n const attenuateFacingCamera = this.attenuateFacingCamera;\r\n const attenuateBackfaceReflection = this.attenuateBackfaceReflection;\r\n const clipToFrustum = this.clipToFrustum;\r\n const enableAutomaticThicknessComputation = this.enableAutomaticThicknessComputation;\r\n const useFresnel = this.useFresnel;\r\n const inputTextureColorIsInGammaSpace = this.inputTextureColorIsInGammaSpace;\r\n const generateOutputInGammaSpace = this.generateOutputInGammaSpace;\r\n const debug = this.debug;\r\n\r\n this._frameGraphTask.dispose();\r\n this._frameGraphTask = new FrameGraphSSRRenderingPipelineTask(this.name, this._frameGraph, textureType);\r\n\r\n this.sourceSamplingMode = sourceSamplingMode;\r\n this.maxDistance = maxDistance;\r\n this.step = step;\r\n this.thickness = thickness;\r\n this.strength = strength;\r\n this.reflectionSpecularFalloffExponent = reflectionSpecularFalloffExponent;\r\n this.maxSteps = maxSteps;\r\n this.roughnessFactor = roughnessFactor;\r\n this.selfCollisionNumSkip = selfCollisionNumSkip;\r\n this.reflectivityThreshold = reflectivityThreshold;\r\n this.ssrDownsample = ssrDownsample;\r\n this.blurDispersionStrength = blurDispersionStrength;\r\n this.blurDownsample = blurDownsample;\r\n this.enableSmoothReflections = enableSmoothReflections;\r\n this.attenuateScreenBorders = attenuateScreenBorders;\r\n this.attenuateIntersectionDistance = attenuateIntersectionDistance;\r\n this.attenuateIntersectionIterations = attenuateIntersectionIterations;\r\n this.attenuateFacingCamera = attenuateFacingCamera;\r\n this.attenuateBackfaceReflection = attenuateBackfaceReflection;\r\n this.clipToFrustum = clipToFrustum;\r\n this.useFresnel = useFresnel;\r\n this.enableAutomaticThicknessComputation = enableAutomaticThicknessComputation;\r\n this.inputTextureColorIsInGammaSpace = inputTextureColorIsInGammaSpace;\r\n this.generateOutputInGammaSpace = generateOutputInGammaSpace;\r\n this.debug = debug;\r\n\r\n this._additionalConstructionParameters = [textureType];\r\n }\r\n\r\n /** The texture type used by the different post processes created by SSR */\r\n @editableInPropertyPage(\"Texture type\", PropertyTypeForEdition.TextureType, \"SSR\")\r\n public get textureType() {\r\n return this._frameGraphTask.textureType;\r\n }\r\n\r\n public set textureType(value: number) {\r\n this._createTask(value);\r\n }\r\n\r\n /** Gets or sets a boolean indicating if the effect should be rendered in debug mode */\r\n @editableInPropertyPage(\"Debug\", PropertyTypeForEdition.Boolean, \"SSR\")\r\n public get debug() {\r\n return this._frameGraphTask.ssr.debug;\r\n }\r\n\r\n public set debug(value: boolean) {\r\n this._frameGraphTask.ssr.debug = value;\r\n }\r\n\r\n /** Gets or sets the current reflection strength. 1.0 is an ideal value but can be increased/decreased for particular results */\r\n @editableInPropertyPage(\"Strength\", PropertyTypeForEdition.Float, \"SSR\", { min: 0, max: 5 })\r\n public get strength() {\r\n return this._frameGraphTask.ssr.strength;\r\n }\r\n\r\n public set strength(value: number) {\r\n this._frameGraphTask.ssr.strength = value;\r\n }\r\n\r\n /** Gets or sets the falloff exponent used to compute the reflection strength. Higher values lead to fainter reflections */\r\n @editableInPropertyPage(\"Reflection exponent\", PropertyTypeForEdition.Float, \"SSR\", { min: 0, max: 5 })\r\n public get reflectionSpecularFalloffExponent() {\r\n return this._frameGraphTask.ssr.reflectionSpecularFalloffExponent;\r\n }\r\n\r\n public set reflectionSpecularFalloffExponent(value: number) {\r\n this._frameGraphTask.ssr.reflectionSpecularFalloffExponent = value;\r\n }\r\n\r\n /** Gets or sets the minimum value for one of the reflectivity component of the material to consider it for SSR */\r\n @editableInPropertyPage(\"Reflectivity threshold\", PropertyTypeForEdition.Float, \"SSR\", { min: 0, max: 1 })\r\n public get reflectivityThreshold() {\r\n return this._frameGraphTask.ssr.reflectivityThreshold;\r\n }\r\n\r\n public set reflectivityThreshold(value: number) {\r\n this._frameGraphTask.ssr.reflectivityThreshold = value;\r\n }\r\n\r\n /** Gets or sets the thickness value used as tolerance when computing the intersection between the reflected ray and the scene */\r\n @editableInPropertyPage(\"Thickness\", PropertyTypeForEdition.Float, \"SSR\", { min: 0, max: 10 })\r\n public get thickness() {\r\n return this._frameGraphTask.ssr.thickness;\r\n }\r\n\r\n public set thickness(value: number) {\r\n this._frameGraphTask.ssr.thickness = value;\r\n }\r\n\r\n /** Gets or sets the step size used to iterate until the effect finds the color of the reflection's pixel */\r\n @editableInPropertyPage(\"Step\", PropertyTypeForEdition.Int, \"SSR\", { min: 1, max: 50 })\r\n public get step() {\r\n return this._frameGraphTask.ssr.step;\r\n }\r\n\r\n public set step(value: number) {\r\n this._frameGraphTask.ssr.step = value;\r\n }\r\n\r\n /** Gets or sets whether or not smoothing reflections is enabled */\r\n @editableInPropertyPage(\"Smooth reflections\", PropertyTypeForEdition.Boolean, \"SSR\")\r\n public get enableSmoothReflections() {\r\n return this._frameGraphTask.ssr.enableSmoothReflections;\r\n }\r\n\r\n public set enableSmoothReflections(value: boolean) {\r\n this._frameGraphTask.ssr.enableSmoothReflections = value;\r\n }\r\n\r\n /** Maximum number of steps during the ray marching process after which we consider an intersection could not be found */\r\n @editableInPropertyPage(\"Max steps\", PropertyTypeForEdition.Int, \"SSR\", { min: 1, max: 3000 })\r\n public get maxSteps() {\r\n return this._frameGraphTask.ssr.maxSteps;\r\n }\r\n\r\n public set maxSteps(value: number) {\r\n this._frameGraphTask.ssr.maxSteps = value;\r\n }\r\n\r\n /** Gets or sets the max distance used to define how far we look for reflection during the ray-marching on the reflected ray */\r\n @editableInPropertyPage(\"Max distance\", PropertyTypeForEdition.Float, \"SSR\", { min: 1, max: 3000 })\r\n public get maxDistance() {\r\n return this._frameGraphTask.ssr.maxDistance;\r\n }\r\n\r\n public set maxDistance(value: number) {\r\n this._frameGraphTask.ssr.maxDistance = value;\r\n }\r\n\r\n /** Gets or sets the factor applied when computing roughness */\r\n @editableInPropertyPage(\"Roughness factor\", PropertyTypeForEdition.Float, \"SSR\", { min: 0, max: 1 })\r\n public get roughnessFactor() {\r\n return this._frameGraphTask.ssr.roughnessFactor;\r\n }\r\n\r\n public set roughnessFactor(value: number) {\r\n this._frameGraphTask.ssr.roughnessFactor = value;\r\n }\r\n\r\n /** Number of steps to skip at start when marching the ray to avoid self collisions */\r\n @editableInPropertyPage(\"Self collision skips\", PropertyTypeForEdition.Int, \"SSR\", { min: 1, max: 10 })\r\n public get selfCollisionNumSkip() {\r\n return this._frameGraphTask.ssr.selfCollisionNumSkip;\r\n }\r\n\r\n public set selfCollisionNumSkip(value: number) {\r\n this._frameGraphTask.ssr.selfCollisionNumSkip = value;\r\n }\r\n\r\n /** Gets or sets the downsample factor used to reduce the size of the texture used to compute the SSR contribution */\r\n @editableInPropertyPage(\"SSR downsample\", PropertyTypeForEdition.Int, \"SSR\", { min: 0, max: 5 })\r\n public get ssrDownsample() {\r\n return this._frameGraphTask.ssr.ssrDownsample;\r\n }\r\n\r\n public set ssrDownsample(value: number) {\r\n this._frameGraphTask.ssr.ssrDownsample = value;\r\n }\r\n\r\n /** Gets or sets a boolean indicating if the ray should be clipped to the frustum */\r\n @editableInPropertyPage(\"Clip to frustum\", PropertyTypeForEdition.Boolean, \"SSR\")\r\n public get clipToFrustum() {\r\n return this._frameGraphTask.ssr.clipToFrustum;\r\n }\r\n\r\n public set clipToFrustum(value: boolean) {\r\n this._frameGraphTask.ssr.clipToFrustum = value;\r\n }\r\n\r\n /** Gets or sets a boolean defining if geometry thickness should be computed automatically */\r\n @editableInPropertyPage(\"Automatic thickness computation\", PropertyTypeForEdition.Boolean, \"SSR\")\r\n public get enableAutomaticThicknessComputation() {\r\n return this._frameGraphTask.ssr.enableAutomaticThicknessComputation;\r\n }\r\n\r\n public set enableAutomaticThicknessComputation(value: boolean) {\r\n this._frameGraphTask.ssr.enableAutomaticThicknessComputation = value;\r\n }\r\n\r\n /** Gets or sets a boolean indicating whether the blending between the current color pixel and the reflection color should be done with a Fresnel coefficient */\r\n @editableInPropertyPage(\"Use Fresnel\", PropertyTypeForEdition.Boolean, \"SSR\")\r\n public get useFresnel() {\r\n return this._frameGraphTask.ssr.useFresnel;\r\n }\r\n\r\n public set useFresnel(value: boolean) {\r\n this._frameGraphTask.ssr.useFresnel = value;\r\n }\r\n\r\n /** Gets or sets the blur dispersion strength. Set this value to 0 to disable blurring */\r\n @editableInPropertyPage(\"Strength\", PropertyTypeForEdition.Float, \"Blur\", { min: 0, max: 0.15 })\r\n public get blurDispersionStrength() {\r\n return this._frameGraphTask.ssr.blurDispersionStrength;\r\n }\r\n\r\n public set blurDispersionStrength(value: number) {\r\n this._frameGraphTask.ssr.blurDispersionStrength = value;\r\n }\r\n\r\n /** Gets or sets the downsample factor used to reduce the size of the textures used to blur the reflection effect */\r\n @editableInPropertyPage(\"Blur downsample\", PropertyTypeForEdition.Int, \"Blur\", { min: 0, max: 5 })\r\n public get blurDownsample() {\r\n return this._frameGraphTask.ssr.blurDownsample;\r\n }\r\n\r\n public set blurDownsample(value: number) {\r\n this._frameGraphTask.ssr.blurDownsample = value;\r\n }\r\n\r\n /** Gets or sets a boolean indicating if the reflections should be attenuated at the screen borders */\r\n @editableInPropertyPage(\"Screen borders\", PropertyTypeForEdition.Boolean, \"Attenuations\")\r\n public get attenuateScreenBorders() {\r\n return this._frameGraphTask.ssr.attenuateScreenBorders;\r\n }\r\n\r\n public set attenuateScreenBorders(value: boolean) {\r\n this._frameGraphTask.ssr.attenuateScreenBorders = value;\r\n }\r\n\r\n /** Gets or sets a boolean indicating if the reflections should be attenuated according to the distance of the intersection */\r\n @editableInPropertyPage(\"Distance\", PropertyTypeForEdition.Boolean, \"Attenuations\")\r\n public get attenuateIntersectionDistance() {\r\n return this._frameGraphTask.ssr.attenuateIntersectionDistance;\r\n }\r\n\r\n public set attenuateIntersectionDistance(value: boolean) {\r\n this._frameGraphTask.ssr.attenuateIntersectionDistance = value;\r\n }\r\n\r\n /** Gets or sets a boolean indicating if the reflections should be attenuated according to the number of iterations performed to find the intersection */\r\n @editableInPropertyPage(\"Step iterations\", PropertyTypeForEdition.Boolean, \"Attenuations\")\r\n public get attenuateIntersectionIterations() {\r\n return this._frameGraphTask.ssr.attenuateIntersectionIterations;\r\n }\r\n\r\n public set attenuateIntersectionIterations(value: boolean) {\r\n this._frameGraphTask.ssr.attenuateIntersectionIterations = value;\r\n }\r\n\r\n /** Gets or sets a boolean indicating if the reflections should be attenuated when the reflection ray is facing the camera (the view direction) */\r\n @editableInPropertyPage(\"Facing camera\", PropertyTypeForEdition.Boolean, \"Attenuations\")\r\n public get attenuateFacingCamera() {\r\n return this._frameGraphTask.ssr.attenuateFacingCamera;\r\n }\r\n\r\n public set attenuateFacingCamera(value: boolean) {\r\n this._frameGraphTask.ssr.attenuateFacingCamera = value;\r\n }\r\n\r\n /** Gets or sets a boolean indicating if the backface reflections should be attenuated */\r\n @editableInPropertyPage(\"Backface reflections\", PropertyTypeForEdition.Boolean, \"Attenuations\")\r\n public get attenuateBackfaceReflection() {\r\n return this._frameGraphTask.ssr.attenuateBackfaceReflection;\r\n }\r\n\r\n public set attenuateBackfaceReflection(value: boolean) {\r\n this._frameGraphTask.ssr.attenuateBackfaceReflection = value;\r\n }\r\n\r\n /** Gets or sets a boolean defining if the input color texture is in gamma space */\r\n @editableInPropertyPage(\"Input is in gamma space\", PropertyTypeForEdition.Boolean, \"Color space\")\r\n public get inputTextureColorIsInGammaSpace() {\r\n return this._frameGraphTask.ssr.inputTextureColorIsInGammaSpace;\r\n }\r\n\r\n public set inputTextureColorIsInGammaSpace(value: boolean) {\r\n this._frameGraphTask.ssr.inputTextureColorIsInGammaSpace = value;\r\n }\r\n\r\n /** Gets or sets a boolean defining if the output color texture generated by the SSR pipeline should be in gamma space */\r\n @editableInPropertyPage(\"Output to gamma space\", PropertyTypeForEdition.Boolean, \"Color space\")\r\n public get generateOutputInGammaSpace() {\r\n return this._frameGraphTask.ssr.generateOutputInGammaSpace;\r\n }\r\n\r\n public set generateOutputInGammaSpace(value: boolean) {\r\n this._frameGraphTask.ssr.generateOutputInGammaSpace = value;\r\n }\r\n\r\n /**\r\n * Gets the current class name\r\n * @returns the class name\r\n */\r\n public override getClassName() {\r\n return \"NodeRenderGraphSSRPostProcessBlock\";\r\n }\r\n\r\n /**\r\n * Gets the camera input component\r\n */\r\n public get camera(): NodeRenderGraphConnectionPoint {\r\n return this._inputs[2];\r\n }\r\n\r\n /**\r\n * Gets the geometry depth input component\r\n */\r\n public get geomDepth(): NodeRenderGraphConnectionPoint {\r\n return this._inputs[3];\r\n }\r\n\r\n /**\r\n * Gets the geometry normal input component\r\n */\r\n public get geomNormal(): NodeRenderGraphConnectionPoint {\r\n return this._inputs[4];\r\n }\r\n\r\n /**\r\n * Gets the geometry reflectivity input component\r\n */\r\n public get geomReflectivity(): NodeRenderGraphConnectionPoint {\r\n return this._inputs[5];\r\n }\r\n\r\n /**\r\n * Gets the geometry back depth input component\r\n */\r\n public get geomBackDepth(): NodeRenderGraphConnectionPoint {\r\n return this._inputs[6];\r\n }\r\n\r\n protected override _buildBlock(state: NodeRenderGraphBuildState) {\r\n super._buildBlock(state);\r\n\r\n this._frameGraphTask.normalTexture = this.geomNormal.connectedPoint?.value as FrameGraphTextureHandle;\r\n this._frameGraphTask.depthTexture = this.geomDepth.connectedPoint?.value as FrameGraphTextureHandle;\r\n this._frameGraphTask.reflectivityTexture = this.geomReflectivity.connectedPoint?.value as FrameGraphTextureHandle;\r\n this._frameGraphTask.backDepthTexture = this.geomBackDepth.connectedPoint?.value as FrameGraphTextureHandle;\r\n this._frameGraphTask.camera = this.camera.connectedPoint?.value as Camera;\r\n\r\n if (this.enableAutomaticThicknessComputation) {\r\n if (!this._frameGraphTask.backDepthTexture) {\r\n throw new Error(`SSR post process \"${this.name}\": Automatic thickness computation requires a back depth texture to be connected!`);\r\n }\r\n\r\n const geomBackDepthOwnerBlock = this.geomBackDepth.connectedPoint!.ownerBlock;\r\n if (geomBackDepthOwnerBlock.getClassName() === \"NodeRenderGraphGeometryRendererBlock\") {\r\n const geometryBackFaceRendererBlock = geomBackDepthOwnerBlock as NodeRenderGraphGeometryRendererBlock;\r\n if (!geometryBackFaceRendererBlock.reverseCulling) {\r\n throw new Error(\r\n `SSR post process \"${this.name}\": Automatic thickness computation requires the geometry renderer block for the back depth texture to have reverse culling enabled!`\r\n );\r\n }\r\n\r\n if (this._frameGraphTask.depthTexture) {\r\n const geomDepthOwnerBlock = this.geomDepth.connectedPoint!.ownerBlock;\r\n if (geomDepthOwnerBlock.getClassName() === \"NodeRenderGraphGeometryRendererBlock\") {\r\n const geomDepthConnectionPointType = this.geomDepth.connectedPoint!.type;\r\n const geomBackDepthConnectionPointType = this.geomBackDepth.connectedPoint!.type;\r\n\r\n if (geomDepthConnectionPointType !== geomBackDepthConnectionPointType) {\r\n throw new Error(\r\n `SSR post process \"${this.name}\": Automatic thickness computation requires that geomDepth and geomBackDepth have the same type (view or screen space depth)!`\r\n );\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (this.geomNormal.connectedPoint) {\r\n if (this.geomNormal.connectedPoint.type === NodeRenderGraphBlockConnectionPointTypes.TextureWorldNormal) {\r\n this._frameGraphTask.ssr.normalsAreInWorldSpace = true;\r\n this._frameGraphTask.ssr.normalsAreUnsigned = true;\r\n }\r\n }\r\n if (this.geomDepth.connectedPoint) {\r\n if (this.geomDepth.connectedPoint.type === NodeRenderGraphBlockConnectionPointTypes.TextureScreenDepth) {\r\n this._frameGraphTask.ssr.useScreenspaceDepth = true;\r\n }\r\n }\r\n }\r\n\r\n protected override _dumpPropertiesCode() {\r\n const codes: string[] = [];\r\n codes.push(`${this._codeVariableName}.debug = ${this.debug};`);\r\n codes.push(`${this._codeVariableName}.strength = ${this.strength};`);\r\n codes.push(`${this._codeVariableName}.reflectionSpecularFalloffExponent = ${this.reflectionSpecularFalloffExponent};`);\r\n codes.push(`${this._codeVariableName}.reflectivityThreshold = ${this.reflectivityThreshold};`);\r\n codes.push(`${this._codeVariableName}.thickness = ${this.thickness};`);\r\n codes.push(`${this._codeVariableName}.step = ${this.step};`);\r\n codes.push(`${this._codeVariableName}.enableSmoothReflections = ${this.enableSmoothReflections};`);\r\n codes.push(`${this._codeVariableName}.maxSteps = ${this.maxSteps};`);\r\n codes.push(`${this._codeVariableName}.maxDistance = ${this.maxDistance};`);\r\n codes.push(`${this._codeVariableName}.roughnessFactor = ${this.roughnessFactor};`);\r\n codes.push(`${this._codeVariableName}.selfCollisionNumSkip = ${this.selfCollisionNumSkip};`);\r\n codes.push(`${this._codeVariableName}.ssrDownsample = ${this.ssrDownsample};`);\r\n codes.push(`${this._codeVariableName}.clipToFrustum = ${this.clipToFrustum};`);\r\n codes.push(`${this._codeVariableName}.useFresnel = ${this.useFresnel};`);\r\n codes.push(`${this._codeVariableName}.enableAutomaticThicknessComputation = ${this.enableAutomaticThicknessComputation};`);\r\n codes.push(`${this._codeVariableName}.blurDispersionStrength = ${this.blurDispersionStrength};`);\r\n codes.push(`${this._codeVariableName}.blurDownsample = ${this.blurDownsample};`);\r\n codes.push(`${this._codeVariableName}.attenuateScreenBorders = ${this.attenuateScreenBorders};`);\r\n codes.push(`${this._codeVariableName}.attenuateIntersectionDistance = ${this.attenuateIntersectionDistance};`);\r\n codes.push(`${this._codeVariableName}.attenuateIntersectionIterations = ${this.attenuateIntersectionIterations};`);\r\n codes.push(`${this._codeVariableName}.attenuateFacingCamera = ${this.attenuateFacingCamera};`);\r\n codes.push(`${this._codeVariableName}.attenuateBackfaceReflection = ${this.attenuateBackfaceReflection};`);\r\n codes.push(`${this._codeVariableName}.inputTextureColorIsInGammaSpace = ${this.inputTextureColorIsInGammaSpace};`);\r\n codes.push(`${this._codeVariableName}.generateOutputInGammaSpace = ${this.generateOutputInGammaSpace};`);\r\n return super._dumpPropertiesCode() + codes.join(\"\\n\");\r\n }\r\n\r\n public override serialize(): any {\r\n const serializationObject = super.serialize();\r\n serializationObject.debug = this.debug;\r\n serializationObject.strength = this.strength;\r\n serializationObject.reflectionSpecularFalloffExponent = this.reflectionSpecularFalloffExponent;\r\n serializationObject.reflectivityThreshold = this.reflectivityThreshold;\r\n serializationObject.thickness = this.thickness;\r\n serializationObject.step = this.step;\r\n serializationObject.enableSmoothReflections = this.enableSmoothReflections;\r\n serializationObject.maxSteps = this.maxSteps;\r\n serializationObject.maxDistance = this.maxDistance;\r\n serializationObject.roughnessFactor = this.roughnessFactor;\r\n serializationObject.selfCollisionNumSkip = this.selfCollisionNumSkip;\r\n serializationObject.ssrDownsample = this.ssrDownsample;\r\n serializationObject.clipToFrustum = this.clipToFrustum;\r\n serializationObject.useFresnel = this.useFresnel;\r\n serializationObject.enableAutomaticThicknessComputation = this.enableAutomaticThicknessComputation;\r\n serializationObject.blurDispersionStrength = this.blurDispersionStrength;\r\n serializationObject.blurDownsample = this.blurDownsample;\r\n serializationObject.attenuateScreenBorders = this.attenuateScreenBorders;\r\n serializationObject.attenuateIntersectionDistance = this.attenuateIntersectionDistance;\r\n serializationObject.attenuateIntersectionIterations = this.attenuateIntersectionIterations;\r\n serializationObject.attenuateFacingCamera = this.attenuateFacingCamera;\r\n serializationObject.attenuateBackfaceReflection = this.attenuateBackfaceReflection;\r\n serializationObject.inputTextureColorIsInGammaSpace = this.inputTextureColorIsInGammaSpace;\r\n serializationObject.generateOutputInGammaSpace = this.generateOutputInGammaSpace;\r\n return serializationObject;\r\n }\r\n\r\n public override _deserialize(serializationObject: any) {\r\n super._deserialize(serializationObject);\r\n this.debug = serializationObject.debug;\r\n this.strength = serializationObject.strength;\r\n this.reflectionSpecularFalloffExponent = serializationObject.reflectionSpecularFalloffExponent;\r\n this.reflectivityThreshold = serializationObject.reflectivityThreshold;\r\n this.thickness = serializationObject.thickness;\r\n this.step = serializationObject.step;\r\n this.enableSmoothReflections = serializationObject.enableSmoothReflections;\r\n this.maxSteps = serializationObject.maxSteps;\r\n this.maxDistance = serializationObject.maxDistance;\r\n this.roughnessFactor = serializationObject.roughnessFactor;\r\n this.selfCollisionNumSkip = serializationObject.selfCollisionNumSkip;\r\n this.ssrDownsample = serializationObject.ssrDownsample;\r\n this.clipToFrustum = serializationObject.clipToFrustum;\r\n this.useFresnel = serializationObject.useFresnel;\r\n this.enableAutomaticThicknessComputation = serializationObject.enableAutomaticThicknessComputation;\r\n this.blurDispersionStrength = serializationObject.blurDispersionStrength;\r\n this.blurDownsample = serializationObject.blurDownsample;\r\n this.attenuateScreenBorders = serializationObject.attenuateScreenBorders;\r\n this.attenuateIntersectionDistance = serializationObject.attenuateIntersectionDistance;\r\n this.attenuateIntersectionIterations = serializationObject.attenuateIntersectionIterations;\r\n this.attenuateFacingCamera = serializationObject.attenuateFacingCamera;\r\n this.attenuateBackfaceReflection = serializationObject.attenuateBackfaceReflection;\r\n this.inputTextureColorIsInGammaSpace = serializationObject.inputTextureColorIsInGammaSpace;\r\n this.generateOutputInGammaSpace = serializationObject.generateOutputInGammaSpace;\r\n }\r\n}\r\n\r\nRegisterClass(\"BABYLON.NodeRenderGraphSSRPostProcessBlock\", NodeRenderGraphSSRPostProcessBlock);\r\n"]}
@@ -7,6 +7,7 @@ import { TonemappingOperator } from "../../../../PostProcesses/thinTonemapPostPr
7
7
  */
8
8
  export declare class NodeRenderGraphTonemapPostProcessBlock extends NodeRenderGraphBasePostProcessBlock {
9
9
  protected _frameGraphTask: FrameGraphTonemapTask;
10
+ _additionalConstructionParameters: [TonemappingOperator];
10
11
  /**
11
12
  * Gets the frame graph task associated with this block
12
13
  */