@onerjs/core 8.48.3 → 8.48.5

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 (118) hide show
  1. package/Cameras/Inputs/geospatialCameraPointersInput.js +10 -8
  2. package/Cameras/Inputs/geospatialCameraPointersInput.js.map +1 -1
  3. package/Cameras/geospatialCameraMovement.js +2 -2
  4. package/Cameras/geospatialCameraMovement.js.map +1 -1
  5. package/FrameGraph/Node/Blocks/Rendering/iblShadowsRendererBlock.d.ts +105 -0
  6. package/FrameGraph/Node/Blocks/Rendering/iblShadowsRendererBlock.js +318 -0
  7. package/FrameGraph/Node/Blocks/Rendering/iblShadowsRendererBlock.js.map +1 -0
  8. package/FrameGraph/Node/Blocks/index.d.ts +1 -0
  9. package/FrameGraph/Node/Blocks/index.js +1 -0
  10. package/FrameGraph/Node/Blocks/index.js.map +1 -1
  11. package/FrameGraph/Tasks/Rendering/iblShadows/iblShadowsAccumulationTask.d.ts +34 -0
  12. package/FrameGraph/Tasks/Rendering/iblShadows/iblShadowsAccumulationTask.js +144 -0
  13. package/FrameGraph/Tasks/Rendering/iblShadows/iblShadowsAccumulationTask.js.map +1 -0
  14. package/FrameGraph/Tasks/Rendering/iblShadows/iblShadowsSpatialBlurTask.d.ts +26 -0
  15. package/FrameGraph/Tasks/Rendering/iblShadows/iblShadowsSpatialBlurTask.js +82 -0
  16. package/FrameGraph/Tasks/Rendering/iblShadows/iblShadowsSpatialBlurTask.js.map +1 -0
  17. package/FrameGraph/Tasks/Rendering/iblShadows/iblShadowsTracingTask.d.ts +61 -0
  18. package/FrameGraph/Tasks/Rendering/iblShadows/iblShadowsTracingTask.js +207 -0
  19. package/FrameGraph/Tasks/Rendering/iblShadows/iblShadowsTracingTask.js.map +1 -0
  20. package/FrameGraph/Tasks/Rendering/iblShadows/iblShadowsVoxelizationTask.d.ts +104 -0
  21. package/FrameGraph/Tasks/Rendering/iblShadows/iblShadowsVoxelizationTask.js +218 -0
  22. package/FrameGraph/Tasks/Rendering/iblShadows/iblShadowsVoxelizationTask.js.map +1 -0
  23. package/FrameGraph/Tasks/Rendering/iblShadowsRendererTask.d.ts +217 -0
  24. package/FrameGraph/Tasks/Rendering/iblShadowsRendererTask.js +640 -0
  25. package/FrameGraph/Tasks/Rendering/iblShadowsRendererTask.js.map +1 -0
  26. package/FrameGraph/frameGraph.js +1 -0
  27. package/FrameGraph/frameGraph.js.map +1 -1
  28. package/FrameGraph/index.d.ts +1 -0
  29. package/FrameGraph/index.js +1 -0
  30. package/FrameGraph/index.js.map +1 -1
  31. package/Materials/PBR/openpbrMaterial.d.ts +13 -2
  32. package/Materials/PBR/openpbrMaterial.js +47 -16
  33. package/Materials/PBR/openpbrMaterial.js.map +1 -1
  34. package/Materials/PBR/pbrBRDFConfiguration.js +1 -1
  35. package/Materials/PBR/pbrBRDFConfiguration.js.map +1 -1
  36. package/Materials/Textures/Filtering/hdrFiltering.js +6 -0
  37. package/Materials/Textures/Filtering/hdrFiltering.js.map +1 -1
  38. package/Materials/Textures/envCubeTexture.js +13 -13
  39. package/Materials/Textures/envCubeTexture.js.map +1 -1
  40. package/Materials/materialHelper.functions.js +1 -1
  41. package/Materials/materialHelper.functions.js.map +1 -1
  42. package/Meshes/instancedMesh.js +44 -42
  43. package/Meshes/instancedMesh.js.map +1 -1
  44. package/Misc/textureTools.d.ts +3 -1
  45. package/Misc/textureTools.js +74 -13
  46. package/Misc/textureTools.js.map +1 -1
  47. package/Particles/baseParticleSystem.d.ts +33 -1
  48. package/Particles/baseParticleSystem.js +65 -0
  49. package/Particles/baseParticleSystem.js.map +1 -1
  50. package/Particles/computeShaderParticleSystem.js +6 -0
  51. package/Particles/computeShaderParticleSystem.js.map +1 -1
  52. package/Particles/gpuParticleSystem.d.ts +24 -6
  53. package/Particles/gpuParticleSystem.js +85 -36
  54. package/Particles/gpuParticleSystem.js.map +1 -1
  55. package/Particles/particleSystem.d.ts +0 -7
  56. package/Particles/particleSystem.js +3 -15
  57. package/Particles/particleSystem.js.map +1 -1
  58. package/Particles/thinParticleSystem.d.ts +1 -3
  59. package/Particles/thinParticleSystem.js +1 -27
  60. package/Particles/thinParticleSystem.js.map +1 -1
  61. package/Particles/webgl2ParticleSystem.js +7 -0
  62. package/Particles/webgl2ParticleSystem.js.map +1 -1
  63. package/Rendering/IBLShadows/iblShadowsAccumulationPass.js +1 -1
  64. package/Rendering/IBLShadows/iblShadowsAccumulationPass.js.map +1 -1
  65. package/Rendering/IBLShadows/iblShadowsPluginMaterial.d.ts +3 -1
  66. package/Rendering/IBLShadows/iblShadowsPluginMaterial.js +11 -1
  67. package/Rendering/IBLShadows/iblShadowsPluginMaterial.js.map +1 -1
  68. package/Rendering/IBLShadows/iblShadowsRenderPipeline.d.ts +0 -19
  69. package/Rendering/IBLShadows/iblShadowsRenderPipeline.js +21 -65
  70. package/Rendering/IBLShadows/iblShadowsRenderPipeline.js.map +1 -1
  71. package/Rendering/IBLShadows/iblShadowsVoxelRenderer.d.ts +15 -52
  72. package/Rendering/IBLShadows/iblShadowsVoxelRenderer.js +129 -220
  73. package/Rendering/IBLShadows/iblShadowsVoxelRenderer.js.map +1 -1
  74. package/Rendering/IBLShadows/iblShadowsVoxelTracingPass.js +3 -0
  75. package/Rendering/IBLShadows/iblShadowsVoxelTracingPass.js.map +1 -1
  76. package/Rendering/geometryBufferRenderer.d.ts +14 -5
  77. package/Rendering/geometryBufferRenderer.js +6 -2
  78. package/Rendering/geometryBufferRenderer.js.map +1 -1
  79. package/Rendering/geometryBufferRendererSceneComponent.d.ts +4 -6
  80. package/Rendering/geometryBufferRendererSceneComponent.js.map +1 -1
  81. package/Rendering/iblCdfGenerator.d.ts +10 -0
  82. package/Rendering/iblCdfGenerator.js +52 -17
  83. package/Rendering/iblCdfGenerator.js.map +1 -1
  84. package/Rendering/index.d.ts +0 -6
  85. package/Rendering/index.js +0 -6
  86. package/Rendering/index.js.map +1 -1
  87. package/Shaders/ShadersInclude/openpbrDirectLighting.js +6 -1
  88. package/Shaders/ShadersInclude/openpbrDirectLighting.js.map +1 -1
  89. package/Shaders/ShadersInclude/openpbrEnvironmentLighting.js +1 -1
  90. package/Shaders/ShadersInclude/openpbrEnvironmentLighting.js.map +1 -1
  91. package/Shaders/gpuUpdateParticles.vertex.js +12 -6
  92. package/Shaders/gpuUpdateParticles.vertex.js.map +1 -1
  93. package/Shaders/iblShadowVoxelTracing.fragment.js +5 -1
  94. package/Shaders/iblShadowVoxelTracing.fragment.js.map +1 -1
  95. package/Shaders/iblVoxelGrid.fragment.d.ts +1 -0
  96. package/Shaders/iblVoxelGrid.fragment.js +33 -5
  97. package/Shaders/iblVoxelGrid.fragment.js.map +1 -1
  98. package/Shaders/lod3D.fragment.d.ts +5 -0
  99. package/Shaders/lod3D.fragment.js +13 -0
  100. package/Shaders/lod3D.fragment.js.map +1 -0
  101. package/Shaders/openpbr.fragment.js +5 -0
  102. package/Shaders/openpbr.fragment.js.map +1 -1
  103. package/ShadersWGSL/ShadersInclude/openpbrDirectLighting.js +6 -1
  104. package/ShadersWGSL/ShadersInclude/openpbrDirectLighting.js.map +1 -1
  105. package/ShadersWGSL/ShadersInclude/openpbrEnvironmentLighting.js +1 -1
  106. package/ShadersWGSL/ShadersInclude/openpbrEnvironmentLighting.js.map +1 -1
  107. package/ShadersWGSL/gpuUpdateParticles.compute.js +14 -7
  108. package/ShadersWGSL/gpuUpdateParticles.compute.js.map +1 -1
  109. package/ShadersWGSL/iblShadowVoxelTracing.fragment.js +5 -1
  110. package/ShadersWGSL/iblShadowVoxelTracing.fragment.js.map +1 -1
  111. package/ShadersWGSL/iblVoxelGrid.fragment.js +1 -1
  112. package/ShadersWGSL/iblVoxelGrid.fragment.js.map +1 -1
  113. package/ShadersWGSL/lod3D.fragment.d.ts +5 -0
  114. package/ShadersWGSL/lod3D.fragment.js +13 -0
  115. package/ShadersWGSL/lod3D.fragment.js.map +1 -0
  116. package/ShadersWGSL/openpbr.fragment.js +5 -0
  117. package/ShadersWGSL/openpbr.fragment.js.map +1 -1
  118. package/package.json +1 -1
@@ -0,0 +1,318 @@
1
+ import { __decorate } from "../../../../tslib.es6.js";
2
+ import { RegisterClass } from "../../../../Misc/typeStore.js";
3
+ import { editableInPropertyPage } from "../../../../Decorators/nodeDecorator.js";
4
+ import { NodeRenderGraphBlock } from "../../nodeRenderGraphBlock.js";
5
+ import { FrameGraphIblShadowsRendererTask } from "../../../Tasks/Rendering/iblShadowsRendererTask.js";
6
+ import { NodeRenderGraphBlockConnectionPointTypes } from "../../Types/nodeRenderGraphTypes.js";
7
+ /**
8
+ * Block that implements IBL (image-based lighting) shadows using voxel tracing.
9
+ */
10
+ export class NodeRenderGraphIblShadowsRendererBlock extends NodeRenderGraphBlock {
11
+ /**
12
+ * Gets the frame graph task associated with this block
13
+ */
14
+ get task() {
15
+ return this._frameGraphTask;
16
+ }
17
+ /**
18
+ * Create a new NodeRenderGraphIblShadowsRendererBlock
19
+ * @param name defines the block name
20
+ * @param frameGraph defines the hosting frame graph
21
+ * @param scene defines the hosting scene
22
+ */
23
+ constructor(name, frameGraph, scene) {
24
+ super(name, frameGraph, scene);
25
+ this.registerInput("depth", NodeRenderGraphBlockConnectionPointTypes.TextureScreenDepth);
26
+ this.registerInput("normal", NodeRenderGraphBlockConnectionPointTypes.TextureWorldNormal);
27
+ this.registerInput("position", NodeRenderGraphBlockConnectionPointTypes.TextureWorldPosition);
28
+ this.registerInput("velocity", NodeRenderGraphBlockConnectionPointTypes.TextureLinearVelocity);
29
+ this.registerInput("camera", NodeRenderGraphBlockConnectionPointTypes.Camera);
30
+ this.registerInput("objects", NodeRenderGraphBlockConnectionPointTypes.ObjectList);
31
+ this._addDependenciesInput();
32
+ this.registerOutput("output", NodeRenderGraphBlockConnectionPointTypes.Texture);
33
+ this._frameGraphTask = new FrameGraphIblShadowsRendererTask(name, frameGraph);
34
+ }
35
+ // ------ Tracing properties ------
36
+ /** Number of tracing sample directions */
37
+ get sampleDirections() {
38
+ return this._frameGraphTask.sampleDirections;
39
+ }
40
+ set sampleDirections(value) {
41
+ this._frameGraphTask.sampleDirections = value;
42
+ }
43
+ /** Whether traced shadows preserve environment color */
44
+ get coloredShadows() {
45
+ return this._frameGraphTask.coloredShadows;
46
+ }
47
+ set coloredShadows(value) {
48
+ this._frameGraphTask.coloredShadows = value;
49
+ }
50
+ /** Opacity of voxel-traced shadows */
51
+ get voxelShadowOpacity() {
52
+ return this._frameGraphTask.voxelShadowOpacity;
53
+ }
54
+ set voxelShadowOpacity(value) {
55
+ this._frameGraphTask.voxelShadowOpacity = value;
56
+ }
57
+ /** Opacity of screen-space shadows */
58
+ get ssShadowOpacity() {
59
+ return this._frameGraphTask.ssShadowOpacity;
60
+ }
61
+ set ssShadowOpacity(value) {
62
+ this._frameGraphTask.ssShadowOpacity = value;
63
+ }
64
+ /** Number of screen-space shadow samples */
65
+ get ssShadowSampleCount() {
66
+ return this._frameGraphTask.ssShadowSampleCount;
67
+ }
68
+ set ssShadowSampleCount(value) {
69
+ this._frameGraphTask.ssShadowSampleCount = value;
70
+ }
71
+ /** Stride used by screen-space shadow sampling */
72
+ get ssShadowStride() {
73
+ return this._frameGraphTask.ssShadowStride;
74
+ }
75
+ set ssShadowStride(value) {
76
+ this._frameGraphTask.ssShadowStride = value;
77
+ }
78
+ /** Distance scale used by screen-space shadow tracing */
79
+ get ssShadowDistanceScale() {
80
+ return this._frameGraphTask.ssShadowDistanceScale;
81
+ }
82
+ set ssShadowDistanceScale(value) {
83
+ this._frameGraphTask.ssShadowDistanceScale = value;
84
+ }
85
+ /** Thickness scale used by screen-space shadow tracing */
86
+ get ssShadowThicknessScale() {
87
+ return this._frameGraphTask.ssShadowThicknessScale;
88
+ }
89
+ set ssShadowThicknessScale(value) {
90
+ this._frameGraphTask.ssShadowThicknessScale = value;
91
+ }
92
+ /** Voxel tracing normal bias */
93
+ get voxelNormalBias() {
94
+ return this._frameGraphTask.voxelNormalBias;
95
+ }
96
+ set voxelNormalBias(value) {
97
+ this._frameGraphTask.voxelNormalBias = value;
98
+ }
99
+ /** Voxel tracing direction bias */
100
+ get voxelDirectionBias() {
101
+ return this._frameGraphTask.voxelDirectionBias;
102
+ }
103
+ set voxelDirectionBias(value) {
104
+ this._frameGraphTask.voxelDirectionBias = value;
105
+ }
106
+ /** Environment rotation in radians */
107
+ get envRotation() {
108
+ return this._frameGraphTask.envRotation;
109
+ }
110
+ set envRotation(value) {
111
+ this._frameGraphTask.envRotation = value;
112
+ }
113
+ // ------ Accumulation properties ------
114
+ /** Temporal shadow remanence while moving */
115
+ get shadowRemanence() {
116
+ return this._frameGraphTask.shadowRemanence;
117
+ }
118
+ set shadowRemanence(value) {
119
+ this._frameGraphTask.shadowRemanence = value;
120
+ }
121
+ /** Final material shadow opacity */
122
+ get shadowOpacity() {
123
+ return this._frameGraphTask.shadowOpacity;
124
+ }
125
+ set shadowOpacity(value) {
126
+ this._frameGraphTask.shadowOpacity = value;
127
+ }
128
+ // ------ Voxelization properties ------
129
+ /** Voxelization resolution exponent (actual resolution is 2^value) */
130
+ get resolutionExp() {
131
+ return this._frameGraphTask.resolutionExp;
132
+ }
133
+ set resolutionExp(value) {
134
+ this._frameGraphTask.resolutionExp = value;
135
+ }
136
+ /** Voxelization refresh rate (-1: manual, 0: every frame, N: skip N frames) */
137
+ get refreshRate() {
138
+ return this._frameGraphTask.refreshRate;
139
+ }
140
+ set refreshRate(value) {
141
+ this._frameGraphTask.refreshRate = value;
142
+ }
143
+ /** Whether tri-planar voxelization is used */
144
+ get triPlanarVoxelization() {
145
+ return this._frameGraphTask.triPlanarVoxelization;
146
+ }
147
+ set triPlanarVoxelization(value) {
148
+ this._frameGraphTask.triPlanarVoxelization = value;
149
+ }
150
+ /**
151
+ * Gets the current class name
152
+ * @returns the class name
153
+ */
154
+ getClassName() {
155
+ return "NodeRenderGraphIblShadowsRendererBlock";
156
+ }
157
+ /**
158
+ * Gets the depth texture input component
159
+ */
160
+ get depth() {
161
+ return this._inputs[0];
162
+ }
163
+ /**
164
+ * Gets the normal texture input component
165
+ */
166
+ get normal() {
167
+ return this._inputs[1];
168
+ }
169
+ /**
170
+ * Gets the position texture input component
171
+ */
172
+ get position() {
173
+ return this._inputs[2];
174
+ }
175
+ /**
176
+ * Gets the velocity texture input component
177
+ */
178
+ get velocity() {
179
+ return this._inputs[3];
180
+ }
181
+ /**
182
+ * Gets the camera input component
183
+ */
184
+ get camera() {
185
+ return this._inputs[4];
186
+ }
187
+ /**
188
+ * Gets the objects input component
189
+ */
190
+ get objects() {
191
+ return this._inputs[5];
192
+ }
193
+ /**
194
+ * Gets the output component
195
+ */
196
+ get output() {
197
+ return this._outputs[0];
198
+ }
199
+ _buildBlock(state) {
200
+ super._buildBlock(state);
201
+ this.output.value = this._frameGraphTask.outputTexture;
202
+ this._frameGraphTask.depthTexture = this.depth.connectedPoint?.value;
203
+ this._frameGraphTask.normalTexture = this.normal.connectedPoint?.value;
204
+ this._frameGraphTask.positionTexture = this.position.connectedPoint?.value;
205
+ this._frameGraphTask.velocityTexture = this.velocity.connectedPoint?.value;
206
+ this._frameGraphTask.camera = this.camera.connectedPoint?.value;
207
+ this._frameGraphTask.objectList = this.objects.connectedPoint?.value;
208
+ }
209
+ _dumpPropertiesCode() {
210
+ const codes = [];
211
+ codes.push(`${this._codeVariableName}.sampleDirections = ${this.sampleDirections};`);
212
+ codes.push(`${this._codeVariableName}.coloredShadows = ${this.coloredShadows};`);
213
+ codes.push(`${this._codeVariableName}.voxelShadowOpacity = ${this.voxelShadowOpacity};`);
214
+ codes.push(`${this._codeVariableName}.ssShadowOpacity = ${this.ssShadowOpacity};`);
215
+ codes.push(`${this._codeVariableName}.ssShadowSampleCount = ${this.ssShadowSampleCount};`);
216
+ codes.push(`${this._codeVariableName}.ssShadowStride = ${this.ssShadowStride};`);
217
+ codes.push(`${this._codeVariableName}.ssShadowDistanceScale = ${this.ssShadowDistanceScale};`);
218
+ codes.push(`${this._codeVariableName}.ssShadowThicknessScale = ${this.ssShadowThicknessScale};`);
219
+ codes.push(`${this._codeVariableName}.voxelNormalBias = ${this.voxelNormalBias};`);
220
+ codes.push(`${this._codeVariableName}.voxelDirectionBias = ${this.voxelDirectionBias};`);
221
+ codes.push(`${this._codeVariableName}.envRotation = ${this.envRotation};`);
222
+ codes.push(`${this._codeVariableName}.shadowRemanence = ${this.shadowRemanence};`);
223
+ codes.push(`${this._codeVariableName}.shadowOpacity = ${this.shadowOpacity};`);
224
+ codes.push(`${this._codeVariableName}.resolutionExp = ${this.resolutionExp};`);
225
+ codes.push(`${this._codeVariableName}.refreshRate = ${this.refreshRate};`);
226
+ codes.push(`${this._codeVariableName}.triPlanarVoxelization = ${this.triPlanarVoxelization};`);
227
+ return super._dumpPropertiesCode() + codes.join("\n");
228
+ }
229
+ serialize() {
230
+ const serializationObject = super.serialize();
231
+ serializationObject.sampleDirections = this.sampleDirections;
232
+ serializationObject.coloredShadows = this.coloredShadows;
233
+ serializationObject.voxelShadowOpacity = this.voxelShadowOpacity;
234
+ serializationObject.ssShadowOpacity = this.ssShadowOpacity;
235
+ serializationObject.ssShadowSampleCount = this.ssShadowSampleCount;
236
+ serializationObject.ssShadowStride = this.ssShadowStride;
237
+ serializationObject.ssShadowDistanceScale = this.ssShadowDistanceScale;
238
+ serializationObject.ssShadowThicknessScale = this.ssShadowThicknessScale;
239
+ serializationObject.voxelNormalBias = this.voxelNormalBias;
240
+ serializationObject.voxelDirectionBias = this.voxelDirectionBias;
241
+ serializationObject.envRotation = this.envRotation;
242
+ serializationObject.shadowRemanence = this.shadowRemanence;
243
+ serializationObject.shadowOpacity = this.shadowOpacity;
244
+ serializationObject.resolutionExp = this.resolutionExp;
245
+ serializationObject.refreshRate = this.refreshRate;
246
+ serializationObject.triPlanarVoxelization = this.triPlanarVoxelization;
247
+ return serializationObject;
248
+ }
249
+ _deserialize(serializationObject) {
250
+ super._deserialize(serializationObject);
251
+ this.sampleDirections = serializationObject.sampleDirections;
252
+ this.coloredShadows = serializationObject.coloredShadows;
253
+ this.voxelShadowOpacity = serializationObject.voxelShadowOpacity;
254
+ this.ssShadowOpacity = serializationObject.ssShadowOpacity;
255
+ this.ssShadowSampleCount = serializationObject.ssShadowSampleCount;
256
+ this.ssShadowStride = serializationObject.ssShadowStride;
257
+ this.ssShadowDistanceScale = serializationObject.ssShadowDistanceScale;
258
+ this.ssShadowThicknessScale = serializationObject.ssShadowThicknessScale;
259
+ this.voxelNormalBias = serializationObject.voxelNormalBias;
260
+ this.voxelDirectionBias = serializationObject.voxelDirectionBias;
261
+ this.envRotation = serializationObject.envRotation;
262
+ this.shadowRemanence = serializationObject.shadowRemanence;
263
+ this.shadowOpacity = serializationObject.shadowOpacity;
264
+ this.resolutionExp = serializationObject.resolutionExp;
265
+ this.refreshRate = serializationObject.refreshRate;
266
+ this.triPlanarVoxelization = serializationObject.triPlanarVoxelization;
267
+ }
268
+ }
269
+ __decorate([
270
+ editableInPropertyPage("Sample directions", 2 /* PropertyTypeForEdition.Int */, "TRACING", { min: 1, max: 16 })
271
+ ], NodeRenderGraphIblShadowsRendererBlock.prototype, "sampleDirections", null);
272
+ __decorate([
273
+ editableInPropertyPage("Colored shadows", 0 /* PropertyTypeForEdition.Boolean */, "TRACING")
274
+ ], NodeRenderGraphIblShadowsRendererBlock.prototype, "coloredShadows", null);
275
+ __decorate([
276
+ editableInPropertyPage("Voxel shadow opacity", 1 /* PropertyTypeForEdition.Float */, "TRACING", { min: 0, max: 1 })
277
+ ], NodeRenderGraphIblShadowsRendererBlock.prototype, "voxelShadowOpacity", null);
278
+ __decorate([
279
+ editableInPropertyPage("SS shadow opacity", 1 /* PropertyTypeForEdition.Float */, "TRACING", { min: 0, max: 1 })
280
+ ], NodeRenderGraphIblShadowsRendererBlock.prototype, "ssShadowOpacity", null);
281
+ __decorate([
282
+ editableInPropertyPage("SS sample count", 2 /* PropertyTypeForEdition.Int */, "TRACING", { min: 1, max: 64 })
283
+ ], NodeRenderGraphIblShadowsRendererBlock.prototype, "ssShadowSampleCount", null);
284
+ __decorate([
285
+ editableInPropertyPage("SS stride", 2 /* PropertyTypeForEdition.Int */, "TRACING", { min: 1, max: 32 })
286
+ ], NodeRenderGraphIblShadowsRendererBlock.prototype, "ssShadowStride", null);
287
+ __decorate([
288
+ editableInPropertyPage("SS distance scale", 1 /* PropertyTypeForEdition.Float */, "TRACING", { min: 0 })
289
+ ], NodeRenderGraphIblShadowsRendererBlock.prototype, "ssShadowDistanceScale", null);
290
+ __decorate([
291
+ editableInPropertyPage("SS thickness scale", 1 /* PropertyTypeForEdition.Float */, "TRACING", { min: 0 })
292
+ ], NodeRenderGraphIblShadowsRendererBlock.prototype, "ssShadowThicknessScale", null);
293
+ __decorate([
294
+ editableInPropertyPage("Normal bias", 1 /* PropertyTypeForEdition.Float */, "TRACING", { min: 0 })
295
+ ], NodeRenderGraphIblShadowsRendererBlock.prototype, "voxelNormalBias", null);
296
+ __decorate([
297
+ editableInPropertyPage("Direction bias", 1 /* PropertyTypeForEdition.Float */, "TRACING", { min: 0 })
298
+ ], NodeRenderGraphIblShadowsRendererBlock.prototype, "voxelDirectionBias", null);
299
+ __decorate([
300
+ editableInPropertyPage("Env rotation", 1 /* PropertyTypeForEdition.Float */, "TRACING")
301
+ ], NodeRenderGraphIblShadowsRendererBlock.prototype, "envRotation", null);
302
+ __decorate([
303
+ editableInPropertyPage("Shadow remanence", 1 /* PropertyTypeForEdition.Float */, "ACCUMULATION", { min: 0, max: 1 })
304
+ ], NodeRenderGraphIblShadowsRendererBlock.prototype, "shadowRemanence", null);
305
+ __decorate([
306
+ editableInPropertyPage("Shadow opacity", 1 /* PropertyTypeForEdition.Float */, "ACCUMULATION", { min: 0, max: 1 })
307
+ ], NodeRenderGraphIblShadowsRendererBlock.prototype, "shadowOpacity", null);
308
+ __decorate([
309
+ editableInPropertyPage("Resolution exp", 2 /* PropertyTypeForEdition.Int */, "VOXELIZATION", { min: 1, max: 8 })
310
+ ], NodeRenderGraphIblShadowsRendererBlock.prototype, "resolutionExp", null);
311
+ __decorate([
312
+ editableInPropertyPage("Refresh rate", 2 /* PropertyTypeForEdition.Int */, "VOXELIZATION", { min: -1 })
313
+ ], NodeRenderGraphIblShadowsRendererBlock.prototype, "refreshRate", null);
314
+ __decorate([
315
+ editableInPropertyPage("Tri-planar", 0 /* PropertyTypeForEdition.Boolean */, "VOXELIZATION")
316
+ ], NodeRenderGraphIblShadowsRendererBlock.prototype, "triPlanarVoxelization", null);
317
+ RegisterClass("BABYLON.NodeRenderGraphIblShadowsRendererBlock", NodeRenderGraphIblShadowsRendererBlock);
318
+ //# sourceMappingURL=iblShadowsRendererBlock.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"iblShadowsRendererBlock.js","sourceRoot":"","sources":["../../../../../../../dev/core/src/FrameGraph/Node/Blocks/Rendering/iblShadowsRendererBlock.ts"],"names":[],"mappings":"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","sourcesContent":["import {\r\n type Camera,\r\n type FrameGraph,\r\n type FrameGraphObjectList,\r\n type FrameGraphTextureHandle,\r\n type NodeRenderGraphBuildState,\r\n type NodeRenderGraphConnectionPoint,\r\n type Scene,\r\n} from \"core/index\";\r\nimport { RegisterClass } from \"../../../../Misc/typeStore\";\r\nimport { editableInPropertyPage, PropertyTypeForEdition } from \"../../../../Decorators/nodeDecorator\";\r\nimport { NodeRenderGraphBlock } from \"../../nodeRenderGraphBlock\";\r\nimport { FrameGraphIblShadowsRendererTask } from \"core/FrameGraph/Tasks/Rendering/iblShadowsRendererTask\";\r\nimport { NodeRenderGraphBlockConnectionPointTypes } from \"../../Types/nodeRenderGraphTypes\";\r\n\r\n/**\r\n * Block that implements IBL (image-based lighting) shadows using voxel tracing.\r\n */\r\nexport class NodeRenderGraphIblShadowsRendererBlock extends NodeRenderGraphBlock {\r\n protected override _frameGraphTask: FrameGraphIblShadowsRendererTask;\r\n\r\n /**\r\n * Gets the frame graph task associated with this block\r\n */\r\n public override get task() {\r\n return this._frameGraphTask;\r\n }\r\n\r\n /**\r\n * Create a new NodeRenderGraphIblShadowsRendererBlock\r\n * @param name defines the block name\r\n * @param frameGraph defines the hosting frame graph\r\n * @param scene defines the hosting scene\r\n */\r\n public constructor(name: string, frameGraph: FrameGraph, scene: Scene) {\r\n super(name, frameGraph, scene);\r\n\r\n this.registerInput(\"depth\", NodeRenderGraphBlockConnectionPointTypes.TextureScreenDepth);\r\n this.registerInput(\"normal\", NodeRenderGraphBlockConnectionPointTypes.TextureWorldNormal);\r\n this.registerInput(\"position\", NodeRenderGraphBlockConnectionPointTypes.TextureWorldPosition);\r\n this.registerInput(\"velocity\", NodeRenderGraphBlockConnectionPointTypes.TextureLinearVelocity);\r\n this.registerInput(\"camera\", NodeRenderGraphBlockConnectionPointTypes.Camera);\r\n this.registerInput(\"objects\", NodeRenderGraphBlockConnectionPointTypes.ObjectList);\r\n\r\n this._addDependenciesInput();\r\n\r\n this.registerOutput(\"output\", NodeRenderGraphBlockConnectionPointTypes.Texture);\r\n\r\n this._frameGraphTask = new FrameGraphIblShadowsRendererTask(name, frameGraph);\r\n }\r\n\r\n // ------ Tracing properties ------\r\n\r\n /** Number of tracing sample directions */\r\n @editableInPropertyPage(\"Sample directions\", PropertyTypeForEdition.Int, \"TRACING\", { min: 1, max: 16 })\r\n public get sampleDirections(): number {\r\n return this._frameGraphTask.sampleDirections;\r\n }\r\n\r\n public set sampleDirections(value: number) {\r\n this._frameGraphTask.sampleDirections = value;\r\n }\r\n\r\n /** Whether traced shadows preserve environment color */\r\n @editableInPropertyPage(\"Colored shadows\", PropertyTypeForEdition.Boolean, \"TRACING\")\r\n public get coloredShadows(): boolean {\r\n return this._frameGraphTask.coloredShadows;\r\n }\r\n\r\n public set coloredShadows(value: boolean) {\r\n this._frameGraphTask.coloredShadows = value;\r\n }\r\n\r\n /** Opacity of voxel-traced shadows */\r\n @editableInPropertyPage(\"Voxel shadow opacity\", PropertyTypeForEdition.Float, \"TRACING\", { min: 0, max: 1 })\r\n public get voxelShadowOpacity(): number {\r\n return this._frameGraphTask.voxelShadowOpacity;\r\n }\r\n\r\n public set voxelShadowOpacity(value: number) {\r\n this._frameGraphTask.voxelShadowOpacity = value;\r\n }\r\n\r\n /** Opacity of screen-space shadows */\r\n @editableInPropertyPage(\"SS shadow opacity\", PropertyTypeForEdition.Float, \"TRACING\", { min: 0, max: 1 })\r\n public get ssShadowOpacity(): number {\r\n return this._frameGraphTask.ssShadowOpacity;\r\n }\r\n\r\n public set ssShadowOpacity(value: number) {\r\n this._frameGraphTask.ssShadowOpacity = value;\r\n }\r\n\r\n /** Number of screen-space shadow samples */\r\n @editableInPropertyPage(\"SS sample count\", PropertyTypeForEdition.Int, \"TRACING\", { min: 1, max: 64 })\r\n public get ssShadowSampleCount(): number {\r\n return this._frameGraphTask.ssShadowSampleCount;\r\n }\r\n\r\n public set ssShadowSampleCount(value: number) {\r\n this._frameGraphTask.ssShadowSampleCount = value;\r\n }\r\n\r\n /** Stride used by screen-space shadow sampling */\r\n @editableInPropertyPage(\"SS stride\", PropertyTypeForEdition.Int, \"TRACING\", { min: 1, max: 32 })\r\n public get ssShadowStride(): number {\r\n return this._frameGraphTask.ssShadowStride;\r\n }\r\n\r\n public set ssShadowStride(value: number) {\r\n this._frameGraphTask.ssShadowStride = value;\r\n }\r\n\r\n /** Distance scale used by screen-space shadow tracing */\r\n @editableInPropertyPage(\"SS distance scale\", PropertyTypeForEdition.Float, \"TRACING\", { min: 0 })\r\n public get ssShadowDistanceScale(): number {\r\n return this._frameGraphTask.ssShadowDistanceScale;\r\n }\r\n\r\n public set ssShadowDistanceScale(value: number) {\r\n this._frameGraphTask.ssShadowDistanceScale = value;\r\n }\r\n\r\n /** Thickness scale used by screen-space shadow tracing */\r\n @editableInPropertyPage(\"SS thickness scale\", PropertyTypeForEdition.Float, \"TRACING\", { min: 0 })\r\n public get ssShadowThicknessScale(): number {\r\n return this._frameGraphTask.ssShadowThicknessScale;\r\n }\r\n\r\n public set ssShadowThicknessScale(value: number) {\r\n this._frameGraphTask.ssShadowThicknessScale = value;\r\n }\r\n\r\n /** Voxel tracing normal bias */\r\n @editableInPropertyPage(\"Normal bias\", PropertyTypeForEdition.Float, \"TRACING\", { min: 0 })\r\n public get voxelNormalBias(): number {\r\n return this._frameGraphTask.voxelNormalBias;\r\n }\r\n\r\n public set voxelNormalBias(value: number) {\r\n this._frameGraphTask.voxelNormalBias = value;\r\n }\r\n\r\n /** Voxel tracing direction bias */\r\n @editableInPropertyPage(\"Direction bias\", PropertyTypeForEdition.Float, \"TRACING\", { min: 0 })\r\n public get voxelDirectionBias(): number {\r\n return this._frameGraphTask.voxelDirectionBias;\r\n }\r\n\r\n public set voxelDirectionBias(value: number) {\r\n this._frameGraphTask.voxelDirectionBias = value;\r\n }\r\n\r\n /** Environment rotation in radians */\r\n @editableInPropertyPage(\"Env rotation\", PropertyTypeForEdition.Float, \"TRACING\")\r\n public get envRotation(): number {\r\n return this._frameGraphTask.envRotation;\r\n }\r\n\r\n public set envRotation(value: number) {\r\n this._frameGraphTask.envRotation = value;\r\n }\r\n\r\n // ------ Accumulation properties ------\r\n\r\n /** Temporal shadow remanence while moving */\r\n @editableInPropertyPage(\"Shadow remanence\", PropertyTypeForEdition.Float, \"ACCUMULATION\", { min: 0, max: 1 })\r\n public get shadowRemanence(): number {\r\n return this._frameGraphTask.shadowRemanence;\r\n }\r\n\r\n public set shadowRemanence(value: number) {\r\n this._frameGraphTask.shadowRemanence = value;\r\n }\r\n\r\n /** Final material shadow opacity */\r\n @editableInPropertyPage(\"Shadow opacity\", PropertyTypeForEdition.Float, \"ACCUMULATION\", { min: 0, max: 1 })\r\n public get shadowOpacity(): number {\r\n return this._frameGraphTask.shadowOpacity;\r\n }\r\n\r\n public set shadowOpacity(value: number) {\r\n this._frameGraphTask.shadowOpacity = value;\r\n }\r\n\r\n // ------ Voxelization properties ------\r\n\r\n /** Voxelization resolution exponent (actual resolution is 2^value) */\r\n @editableInPropertyPage(\"Resolution exp\", PropertyTypeForEdition.Int, \"VOXELIZATION\", { min: 1, max: 8 })\r\n public get resolutionExp(): number {\r\n return this._frameGraphTask.resolutionExp;\r\n }\r\n\r\n public set resolutionExp(value: number) {\r\n this._frameGraphTask.resolutionExp = value;\r\n }\r\n\r\n /** Voxelization refresh rate (-1: manual, 0: every frame, N: skip N frames) */\r\n @editableInPropertyPage(\"Refresh rate\", PropertyTypeForEdition.Int, \"VOXELIZATION\", { min: -1 })\r\n public get refreshRate(): number {\r\n return this._frameGraphTask.refreshRate;\r\n }\r\n\r\n public set refreshRate(value: number) {\r\n this._frameGraphTask.refreshRate = value;\r\n }\r\n\r\n /** Whether tri-planar voxelization is used */\r\n @editableInPropertyPage(\"Tri-planar\", PropertyTypeForEdition.Boolean, \"VOXELIZATION\")\r\n public get triPlanarVoxelization(): boolean {\r\n return this._frameGraphTask.triPlanarVoxelization;\r\n }\r\n\r\n public set triPlanarVoxelization(value: boolean) {\r\n this._frameGraphTask.triPlanarVoxelization = value;\r\n }\r\n\r\n /**\r\n * Gets the current class name\r\n * @returns the class name\r\n */\r\n public override getClassName() {\r\n return \"NodeRenderGraphIblShadowsRendererBlock\";\r\n }\r\n\r\n /**\r\n * Gets the depth texture input component\r\n */\r\n public get depth(): NodeRenderGraphConnectionPoint {\r\n return this._inputs[0];\r\n }\r\n\r\n /**\r\n * Gets the normal texture input component\r\n */\r\n public get normal(): NodeRenderGraphConnectionPoint {\r\n return this._inputs[1];\r\n }\r\n\r\n /**\r\n * Gets the position texture input component\r\n */\r\n public get position(): NodeRenderGraphConnectionPoint {\r\n return this._inputs[2];\r\n }\r\n\r\n /**\r\n * Gets the velocity texture input component\r\n */\r\n public get velocity(): NodeRenderGraphConnectionPoint {\r\n return this._inputs[3];\r\n }\r\n\r\n /**\r\n * Gets the camera input component\r\n */\r\n public get camera(): NodeRenderGraphConnectionPoint {\r\n return this._inputs[4];\r\n }\r\n\r\n /**\r\n * Gets the objects input component\r\n */\r\n public get objects(): NodeRenderGraphConnectionPoint {\r\n return this._inputs[5];\r\n }\r\n\r\n /**\r\n * Gets the output component\r\n */\r\n public get output(): NodeRenderGraphConnectionPoint {\r\n return this._outputs[0];\r\n }\r\n\r\n protected override _buildBlock(state: NodeRenderGraphBuildState) {\r\n super._buildBlock(state);\r\n\r\n this.output.value = this._frameGraphTask.outputTexture;\r\n\r\n this._frameGraphTask.depthTexture = this.depth.connectedPoint?.value as FrameGraphTextureHandle;\r\n this._frameGraphTask.normalTexture = this.normal.connectedPoint?.value as FrameGraphTextureHandle;\r\n this._frameGraphTask.positionTexture = this.position.connectedPoint?.value as FrameGraphTextureHandle;\r\n this._frameGraphTask.velocityTexture = this.velocity.connectedPoint?.value as FrameGraphTextureHandle;\r\n this._frameGraphTask.camera = this.camera.connectedPoint?.value as Camera;\r\n this._frameGraphTask.objectList = this.objects.connectedPoint?.value as FrameGraphObjectList;\r\n }\r\n\r\n protected override _dumpPropertiesCode() {\r\n const codes: string[] = [];\r\n codes.push(`${this._codeVariableName}.sampleDirections = ${this.sampleDirections};`);\r\n codes.push(`${this._codeVariableName}.coloredShadows = ${this.coloredShadows};`);\r\n codes.push(`${this._codeVariableName}.voxelShadowOpacity = ${this.voxelShadowOpacity};`);\r\n codes.push(`${this._codeVariableName}.ssShadowOpacity = ${this.ssShadowOpacity};`);\r\n codes.push(`${this._codeVariableName}.ssShadowSampleCount = ${this.ssShadowSampleCount};`);\r\n codes.push(`${this._codeVariableName}.ssShadowStride = ${this.ssShadowStride};`);\r\n codes.push(`${this._codeVariableName}.ssShadowDistanceScale = ${this.ssShadowDistanceScale};`);\r\n codes.push(`${this._codeVariableName}.ssShadowThicknessScale = ${this.ssShadowThicknessScale};`);\r\n codes.push(`${this._codeVariableName}.voxelNormalBias = ${this.voxelNormalBias};`);\r\n codes.push(`${this._codeVariableName}.voxelDirectionBias = ${this.voxelDirectionBias};`);\r\n codes.push(`${this._codeVariableName}.envRotation = ${this.envRotation};`);\r\n codes.push(`${this._codeVariableName}.shadowRemanence = ${this.shadowRemanence};`);\r\n codes.push(`${this._codeVariableName}.shadowOpacity = ${this.shadowOpacity};`);\r\n codes.push(`${this._codeVariableName}.resolutionExp = ${this.resolutionExp};`);\r\n codes.push(`${this._codeVariableName}.refreshRate = ${this.refreshRate};`);\r\n codes.push(`${this._codeVariableName}.triPlanarVoxelization = ${this.triPlanarVoxelization};`);\r\n return super._dumpPropertiesCode() + codes.join(\"\\n\");\r\n }\r\n\r\n public override serialize(): any {\r\n const serializationObject = super.serialize();\r\n serializationObject.sampleDirections = this.sampleDirections;\r\n serializationObject.coloredShadows = this.coloredShadows;\r\n serializationObject.voxelShadowOpacity = this.voxelShadowOpacity;\r\n serializationObject.ssShadowOpacity = this.ssShadowOpacity;\r\n serializationObject.ssShadowSampleCount = this.ssShadowSampleCount;\r\n serializationObject.ssShadowStride = this.ssShadowStride;\r\n serializationObject.ssShadowDistanceScale = this.ssShadowDistanceScale;\r\n serializationObject.ssShadowThicknessScale = this.ssShadowThicknessScale;\r\n serializationObject.voxelNormalBias = this.voxelNormalBias;\r\n serializationObject.voxelDirectionBias = this.voxelDirectionBias;\r\n serializationObject.envRotation = this.envRotation;\r\n serializationObject.shadowRemanence = this.shadowRemanence;\r\n serializationObject.shadowOpacity = this.shadowOpacity;\r\n serializationObject.resolutionExp = this.resolutionExp;\r\n serializationObject.refreshRate = this.refreshRate;\r\n serializationObject.triPlanarVoxelization = this.triPlanarVoxelization;\r\n return serializationObject;\r\n }\r\n\r\n public override _deserialize(serializationObject: any) {\r\n super._deserialize(serializationObject);\r\n this.sampleDirections = serializationObject.sampleDirections;\r\n this.coloredShadows = serializationObject.coloredShadows;\r\n this.voxelShadowOpacity = serializationObject.voxelShadowOpacity;\r\n this.ssShadowOpacity = serializationObject.ssShadowOpacity;\r\n this.ssShadowSampleCount = serializationObject.ssShadowSampleCount;\r\n this.ssShadowStride = serializationObject.ssShadowStride;\r\n this.ssShadowDistanceScale = serializationObject.ssShadowDistanceScale;\r\n this.ssShadowThicknessScale = serializationObject.ssShadowThicknessScale;\r\n this.voxelNormalBias = serializationObject.voxelNormalBias;\r\n this.voxelDirectionBias = serializationObject.voxelDirectionBias;\r\n this.envRotation = serializationObject.envRotation;\r\n this.shadowRemanence = serializationObject.shadowRemanence;\r\n this.shadowOpacity = serializationObject.shadowOpacity;\r\n this.resolutionExp = serializationObject.resolutionExp;\r\n this.refreshRate = serializationObject.refreshRate;\r\n this.triPlanarVoxelization = serializationObject.triPlanarVoxelization;\r\n }\r\n}\r\n\r\nRegisterClass(\"BABYLON.NodeRenderGraphIblShadowsRendererBlock\", NodeRenderGraphIblShadowsRendererBlock);\r\n"]}
@@ -36,6 +36,7 @@ export * from "./PostProcesses/tonemapPostProcessBlock.js";
36
36
  export * from "./PostProcesses/volumetricLightingBlock.js";
37
37
  export * from "./Rendering/csmShadowGeneratorBlock.js";
38
38
  export * from "./Rendering/geometryRendererBlock.js";
39
+ export * from "./Rendering/iblShadowsRendererBlock.js";
39
40
  export * from "./Rendering/objectRendererBlock.js";
40
41
  export * from "./Rendering/shadowGeneratorBlock.js";
41
42
  export * from "./Rendering/utilityLayerRendererBlock.js";
@@ -36,6 +36,7 @@ export * from "./PostProcesses/tonemapPostProcessBlock.js";
36
36
  export * from "./PostProcesses/volumetricLightingBlock.js";
37
37
  export * from "./Rendering/csmShadowGeneratorBlock.js";
38
38
  export * from "./Rendering/geometryRendererBlock.js";
39
+ export * from "./Rendering/iblShadowsRendererBlock.js";
39
40
  export * from "./Rendering/objectRendererBlock.js";
40
41
  export * from "./Rendering/shadowGeneratorBlock.js";
41
42
  export * from "./Rendering/utilityLayerRendererBlock.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../dev/core/src/FrameGraph/Node/Blocks/index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC;AACnC,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,uBAAuB,CAAC;AACtC,cAAc,eAAe,CAAC;AAC9B,cAAc,0BAA0B,CAAC;AAEzC,cAAc,yBAAyB,CAAC;AACxC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,qCAAqC,CAAC;AAEpD,cAAc,0CAA0C,CAAC;AACzD,cAAc,sCAAsC,CAAC;AACrD,cAAc,oDAAoD,CAAC;AACnE,cAAc,+CAA+C,CAAC;AAC9D,cAAc,uCAAuC,CAAC;AACtD,cAAc,sCAAsC,CAAC;AACrD,cAAc,qDAAqD,CAAC;AACpE,cAAc,mDAAmD,CAAC;AAClE,cAAc,iDAAiD,CAAC;AAChE,cAAc,6CAA6C,CAAC;AAC5D,cAAc,8CAA8C,CAAC;AAC7D,cAAc,mDAAmD,CAAC;AAClE,cAAc,wCAAwC,CAAC;AACvD,cAAc,sCAAsC,CAAC;AACrD,cAAc,uCAAuC,CAAC;AACtD,cAAc,iDAAiD,CAAC;AAChE,cAAc,4CAA4C,CAAC;AAC3D,cAAc,sCAAsC,CAAC;AACrD,cAAc,yCAAyC,CAAC;AACxD,cAAc,sDAAsD,CAAC;AACrE,cAAc,uCAAuC,CAAC;AACtD,cAAc,qCAAqC,CAAC;AACpD,cAAc,qCAAqC,CAAC;AACpD,cAAc,yCAAyC,CAAC;AACxD,cAAc,yCAAyC,CAAC;AAExD,cAAc,qCAAqC,CAAC;AACpD,cAAc,mCAAmC,CAAC;AAClD,cAAc,iCAAiC,CAAC;AAChD,cAAc,kCAAkC,CAAC;AACjD,cAAc,uCAAuC,CAAC;AAEtD,cAAc,4BAA4B,CAAC;AAC3C,cAAc,6BAA6B,CAAC;AAE5C,cAAc,uBAAuB,CAAC;AACtC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,iCAAiC,CAAC","sourcesContent":["export * from \"./computeShaderBlock\";\r\nexport * from \"./cullObjectsBlock\";\r\nexport * from \"./elbowBlock\";\r\nexport * from \"./executeBlock\";\r\nexport * from \"./inputBlock\";\r\nexport * from \"./lightingVolumeBlock\";\r\nexport * from \"./outputBlock\";\r\nexport * from \"./resourceContainerBlock\";\r\n\r\nexport * from \"./Layers/glowLayerBlock\";\r\nexport * from \"./Layers/highlightLayerBlock\";\r\nexport * from \"./Layers/selectionOutlineLayerBlock\";\r\n\r\nexport * from \"./PostProcesses/anaglyphPostProcessBlock\";\r\nexport * from \"./PostProcesses/basePostProcessBlock\";\r\nexport * from \"./PostProcesses/baseWithPropertiesPostProcessBlock\";\r\nexport * from \"./PostProcesses/blackAndWhitePostProcessBlock\";\r\nexport * from \"./PostProcesses/bloomPostProcessBlock\";\r\nexport * from \"./PostProcesses/blurPostProcessBlock\";\r\nexport * from \"./PostProcesses/chromaticAberrationPostProcessBlock\";\r\nexport * from \"./PostProcesses/circleOfConfusionPostProcessBlock\";\r\nexport * from \"./PostProcesses/colorCorrectionPostProcessBlock\";\r\nexport * from \"./PostProcesses/convolutionPostProcessBlock\";\r\nexport * from \"./PostProcesses/depthOfFieldPostProcessBlock\";\r\nexport * from \"./PostProcesses/extractHighlightsPostProcessBlock\";\r\nexport * from \"./PostProcesses/filterPostProcessBlock\";\r\nexport * from \"./PostProcesses/fxaaPostProcessBlock\";\r\nexport * from \"./PostProcesses/grainPostProcessBlock\";\r\nexport * from \"./PostProcesses/imageProcessingPostProcessBlock\";\r\nexport * from \"./PostProcesses/motionBlurPostProcessBlock\";\r\nexport * from \"./PostProcesses/passPostProcessBlock\";\r\nexport * from \"./PostProcesses/sharpenPostProcessBlock\";\r\nexport * from \"./PostProcesses/screenSpaceCurvaturePostProcessBlock\";\r\nexport * from \"./PostProcesses/ssao2PostProcessBlock\";\r\nexport * from \"./PostProcesses/ssrPostProcessBlock\";\r\nexport * from \"./PostProcesses/taaPostProcessBlock\";\r\nexport * from \"./PostProcesses/tonemapPostProcessBlock\";\r\nexport * from \"./PostProcesses/volumetricLightingBlock\";\r\n\r\nexport * from \"./Rendering/csmShadowGeneratorBlock\";\r\nexport * from \"./Rendering/geometryRendererBlock\";\r\nexport * from \"./Rendering/objectRendererBlock\";\r\nexport * from \"./Rendering/shadowGeneratorBlock\";\r\nexport * from \"./Rendering/utilityLayerRendererBlock\";\r\n\r\nexport * from \"./Teleport/teleportInBlock\";\r\nexport * from \"./Teleport/teleportOutBlock\";\r\n\r\nexport * from \"./Textures/clearBlock\";\r\nexport * from \"./Textures/copyTextureBlock\";\r\nexport * from \"./Textures/generateMipmapsBlock\";\r\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../dev/core/src/FrameGraph/Node/Blocks/index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC;AACnC,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,uBAAuB,CAAC;AACtC,cAAc,eAAe,CAAC;AAC9B,cAAc,0BAA0B,CAAC;AAEzC,cAAc,yBAAyB,CAAC;AACxC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,qCAAqC,CAAC;AAEpD,cAAc,0CAA0C,CAAC;AACzD,cAAc,sCAAsC,CAAC;AACrD,cAAc,oDAAoD,CAAC;AACnE,cAAc,+CAA+C,CAAC;AAC9D,cAAc,uCAAuC,CAAC;AACtD,cAAc,sCAAsC,CAAC;AACrD,cAAc,qDAAqD,CAAC;AACpE,cAAc,mDAAmD,CAAC;AAClE,cAAc,iDAAiD,CAAC;AAChE,cAAc,6CAA6C,CAAC;AAC5D,cAAc,8CAA8C,CAAC;AAC7D,cAAc,mDAAmD,CAAC;AAClE,cAAc,wCAAwC,CAAC;AACvD,cAAc,sCAAsC,CAAC;AACrD,cAAc,uCAAuC,CAAC;AACtD,cAAc,iDAAiD,CAAC;AAChE,cAAc,4CAA4C,CAAC;AAC3D,cAAc,sCAAsC,CAAC;AACrD,cAAc,yCAAyC,CAAC;AACxD,cAAc,sDAAsD,CAAC;AACrE,cAAc,uCAAuC,CAAC;AACtD,cAAc,qCAAqC,CAAC;AACpD,cAAc,qCAAqC,CAAC;AACpD,cAAc,yCAAyC,CAAC;AACxD,cAAc,yCAAyC,CAAC;AAExD,cAAc,qCAAqC,CAAC;AACpD,cAAc,mCAAmC,CAAC;AAClD,cAAc,qCAAqC,CAAC;AACpD,cAAc,iCAAiC,CAAC;AAChD,cAAc,kCAAkC,CAAC;AACjD,cAAc,uCAAuC,CAAC;AAEtD,cAAc,4BAA4B,CAAC;AAC3C,cAAc,6BAA6B,CAAC;AAE5C,cAAc,uBAAuB,CAAC;AACtC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,iCAAiC,CAAC","sourcesContent":["export * from \"./computeShaderBlock\";\r\nexport * from \"./cullObjectsBlock\";\r\nexport * from \"./elbowBlock\";\r\nexport * from \"./executeBlock\";\r\nexport * from \"./inputBlock\";\r\nexport * from \"./lightingVolumeBlock\";\r\nexport * from \"./outputBlock\";\r\nexport * from \"./resourceContainerBlock\";\r\n\r\nexport * from \"./Layers/glowLayerBlock\";\r\nexport * from \"./Layers/highlightLayerBlock\";\r\nexport * from \"./Layers/selectionOutlineLayerBlock\";\r\n\r\nexport * from \"./PostProcesses/anaglyphPostProcessBlock\";\r\nexport * from \"./PostProcesses/basePostProcessBlock\";\r\nexport * from \"./PostProcesses/baseWithPropertiesPostProcessBlock\";\r\nexport * from \"./PostProcesses/blackAndWhitePostProcessBlock\";\r\nexport * from \"./PostProcesses/bloomPostProcessBlock\";\r\nexport * from \"./PostProcesses/blurPostProcessBlock\";\r\nexport * from \"./PostProcesses/chromaticAberrationPostProcessBlock\";\r\nexport * from \"./PostProcesses/circleOfConfusionPostProcessBlock\";\r\nexport * from \"./PostProcesses/colorCorrectionPostProcessBlock\";\r\nexport * from \"./PostProcesses/convolutionPostProcessBlock\";\r\nexport * from \"./PostProcesses/depthOfFieldPostProcessBlock\";\r\nexport * from \"./PostProcesses/extractHighlightsPostProcessBlock\";\r\nexport * from \"./PostProcesses/filterPostProcessBlock\";\r\nexport * from \"./PostProcesses/fxaaPostProcessBlock\";\r\nexport * from \"./PostProcesses/grainPostProcessBlock\";\r\nexport * from \"./PostProcesses/imageProcessingPostProcessBlock\";\r\nexport * from \"./PostProcesses/motionBlurPostProcessBlock\";\r\nexport * from \"./PostProcesses/passPostProcessBlock\";\r\nexport * from \"./PostProcesses/sharpenPostProcessBlock\";\r\nexport * from \"./PostProcesses/screenSpaceCurvaturePostProcessBlock\";\r\nexport * from \"./PostProcesses/ssao2PostProcessBlock\";\r\nexport * from \"./PostProcesses/ssrPostProcessBlock\";\r\nexport * from \"./PostProcesses/taaPostProcessBlock\";\r\nexport * from \"./PostProcesses/tonemapPostProcessBlock\";\r\nexport * from \"./PostProcesses/volumetricLightingBlock\";\r\n\r\nexport * from \"./Rendering/csmShadowGeneratorBlock\";\r\nexport * from \"./Rendering/geometryRendererBlock\";\r\nexport * from \"./Rendering/iblShadowsRendererBlock\";\r\nexport * from \"./Rendering/objectRendererBlock\";\r\nexport * from \"./Rendering/shadowGeneratorBlock\";\r\nexport * from \"./Rendering/utilityLayerRendererBlock\";\r\n\r\nexport * from \"./Teleport/teleportInBlock\";\r\nexport * from \"./Teleport/teleportOutBlock\";\r\n\r\nexport * from \"./Textures/clearBlock\";\r\nexport * from \"./Textures/copyTextureBlock\";\r\nexport * from \"./Textures/generateMipmapsBlock\";\r\n"]}
@@ -0,0 +1,34 @@
1
+ import { type DrawWrapper, type FrameGraph, type FrameGraphTextureHandle } from "../../../../index.js";
2
+ import { type FrameGraphIblShadowsVoxelizationTask } from "./iblShadowsVoxelizationTask.js";
3
+ import { Vector4 } from "../../../../Maths/math.vector.js";
4
+ import { ThinCustomPostProcess } from "../../../../PostProcesses/thinCustomPostProcess.js";
5
+ import { FrameGraphTask } from "../../../frameGraphTask.js";
6
+ /**
7
+ * Task used to temporally accumulate IBL shadows.
8
+ * @internal
9
+ */
10
+ export declare class FrameGraphIblShadowsAccumulationTask extends FrameGraphTask {
11
+ sourceTexture?: FrameGraphTextureHandle;
12
+ velocityTexture?: FrameGraphTextureHandle;
13
+ positionTexture?: FrameGraphTextureHandle;
14
+ private _remanence;
15
+ get remanence(): number;
16
+ set remanence(value: number);
17
+ reset: boolean;
18
+ isMoving: boolean;
19
+ voxelGridSize: number;
20
+ /** Voxelization task providing the runtime voxelGridSize used by the accumulation shader. */
21
+ voxelizationTask?: FrameGraphIblShadowsVoxelizationTask;
22
+ protected _accumulationHistoryTexture?: FrameGraphTextureHandle;
23
+ protected _positionHistoryTexture?: FrameGraphTextureHandle;
24
+ readonly outputTexture: FrameGraphTextureHandle;
25
+ readonly postProcess: ThinCustomPostProcess;
26
+ protected readonly _postProcessDrawWrapper: DrawWrapper;
27
+ protected readonly _accumulationParams: Vector4;
28
+ constructor(name: string, frameGraph: FrameGraph);
29
+ getClassName(): string;
30
+ initAsync(): Promise<unknown>;
31
+ isReady(): boolean;
32
+ record(): void;
33
+ dispose(): void;
34
+ }
@@ -0,0 +1,144 @@
1
+
2
+ import { Vector4 } from "../../../../Maths/math.vector.js";
3
+ import { ThinCustomPostProcess } from "../../../../PostProcesses/thinCustomPostProcess.js";
4
+ import { FrameGraphTask } from "../../../frameGraphTask.js";
5
+ /**
6
+ * Task used to temporally accumulate IBL shadows.
7
+ * @internal
8
+ */
9
+ export class FrameGraphIblShadowsAccumulationTask extends FrameGraphTask {
10
+ get remanence() {
11
+ return this._remanence;
12
+ }
13
+ set remanence(value) {
14
+ this._remanence = Math.max(0, Math.min(value, 1));
15
+ }
16
+ constructor(name, frameGraph) {
17
+ super(name, frameGraph);
18
+ this._remanence = 0.75;
19
+ this.reset = true;
20
+ this.isMoving = false;
21
+ this.voxelGridSize = 1;
22
+ this._accumulationParams = new Vector4(0, 0, 0, 0);
23
+ this.postProcess = new ThinCustomPostProcess(name, frameGraph.engine, {
24
+ fragmentShader: "iblShadowAccumulation",
25
+ uniforms: ["accumulationParameters"],
26
+ samplers: ["spatialBlurSampler", "oldAccumulationSampler", "prevPositionSampler", "motionSampler", "positionSampler"],
27
+ shaderLanguage: frameGraph.engine.isWebGPU ? 1 /* ShaderLanguage.WGSL */ : 0 /* ShaderLanguage.GLSL */,
28
+ });
29
+ this._postProcessDrawWrapper = this.postProcess.drawWrapper;
30
+ this.outputTexture = this._frameGraph.textureManager.createDanglingHandle();
31
+ }
32
+ getClassName() {
33
+ return "FrameGraphIblShadowsAccumulationTask";
34
+ }
35
+ // eslint-disable-next-line @typescript-eslint/promise-function-async, no-restricted-syntax
36
+ initAsync() {
37
+ if (this._frameGraph.engine.isWebGPU) {
38
+ return import("../../../../ShadersWGSL/iblShadowAccumulation.fragment.js");
39
+ }
40
+ return import("../../../../Shaders/iblShadowAccumulation.fragment.js");
41
+ }
42
+ isReady() {
43
+ return this.postProcess.isReady();
44
+ }
45
+ record() {
46
+ if (this.sourceTexture === undefined || this.velocityTexture === undefined || this.positionTexture === undefined) {
47
+ throw new Error(`FrameGraphIblShadowsAccumulationTask ${this.name}: sourceTexture, velocityTexture and positionTexture are required`);
48
+ }
49
+ const textureManager = this._frameGraph.textureManager;
50
+ const outputSize = textureManager.getTextureAbsoluteDimensions(this.sourceTexture);
51
+ const positionSize = textureManager.getTextureAbsoluteDimensions(this.positionTexture);
52
+ const outputCreationOptions = {
53
+ size: outputSize,
54
+ sizeIsPercentage: false,
55
+ isHistoryTexture: false,
56
+ options: {
57
+ createMipMaps: false,
58
+ samples: 1,
59
+ types: [2],
60
+ formats: [5],
61
+ useSRGBBuffers: [false],
62
+ creationFlags: [0],
63
+ labels: [`${this.name} Output`],
64
+ },
65
+ };
66
+ textureManager.resolveDanglingHandle(this.outputTexture, undefined, `${this.name} Output`, outputCreationOptions);
67
+ const accumulationHistoryCreationOptions = {
68
+ size: outputSize,
69
+ sizeIsPercentage: false,
70
+ isHistoryTexture: true,
71
+ options: {
72
+ createMipMaps: false,
73
+ samples: 1,
74
+ types: [2],
75
+ formats: [5],
76
+ useSRGBBuffers: [false],
77
+ creationFlags: [0],
78
+ labels: [`${this.name} History`],
79
+ },
80
+ };
81
+ const positionHistoryCreationOptions = {
82
+ size: positionSize,
83
+ sizeIsPercentage: false,
84
+ isHistoryTexture: true,
85
+ options: {
86
+ createMipMaps: false,
87
+ samples: 1,
88
+ types: [2],
89
+ formats: [5],
90
+ useSRGBBuffers: [false],
91
+ creationFlags: [0],
92
+ labels: [`${this.name} Position History`],
93
+ },
94
+ };
95
+ this._accumulationHistoryTexture = textureManager.createRenderTargetTexture(`${this.name} Accumulation History`, accumulationHistoryCreationOptions, this._accumulationHistoryTexture);
96
+ this._positionHistoryTexture = textureManager.createRenderTargetTexture(`${this.name} Position History`, positionHistoryCreationOptions, this._positionHistoryTexture);
97
+ const pass = this._frameGraph.addRenderPass(this.name);
98
+ pass.addDependencies(this.sourceTexture);
99
+ pass.addDependencies(this.velocityTexture);
100
+ pass.addDependencies(this.positionTexture);
101
+ pass.addDependencies(this._accumulationHistoryTexture);
102
+ pass.addDependencies(this._positionHistoryTexture);
103
+ // Accumulation writes directly to the history handle (current frame write side)
104
+ // so oldAccumulationSampler reads previous-frame data automatically.
105
+ // A dedicated copy pass then exposes a stable current-frame outputTexture.
106
+ pass.setRenderTarget(this._accumulationHistoryTexture);
107
+ pass.setExecuteFunc((context) => {
108
+ context.setTextureSamplingMode(this.sourceTexture, 1);
109
+ context.setTextureSamplingMode(this.velocityTexture, 1);
110
+ context.setTextureSamplingMode(this.positionTexture, 1);
111
+ const remanence = this.isMoving ? this.remanence : 0.99;
112
+ this._accumulationParams.set(remanence, this.reset ? 1.0 : 0.0, this.voxelizationTask?.voxelGridSize ?? this.voxelGridSize, 0.0);
113
+ context.applyFullScreenEffect(this._postProcessDrawWrapper, () => {
114
+ const effect = this._postProcessDrawWrapper.effect;
115
+ context.bindTextureHandle(effect, "spatialBlurSampler", this.sourceTexture);
116
+ context.bindTextureHandle(effect, "oldAccumulationSampler", this._accumulationHistoryTexture);
117
+ context.bindTextureHandle(effect, "prevPositionSampler", this._positionHistoryTexture);
118
+ context.bindTextureHandle(effect, "motionSampler", this.velocityTexture);
119
+ context.bindTextureHandle(effect, "positionSampler", this.positionTexture);
120
+ effect.setVector4("accumulationParameters", this._accumulationParams);
121
+ this.postProcess.bind();
122
+ }, undefined, false, false, true);
123
+ this.reset = false;
124
+ this.isMoving = false;
125
+ });
126
+ const copyPositionToHistoryPass = this._frameGraph.addRenderPass(`${this.name} CopyPositionToHistory`);
127
+ copyPositionToHistoryPass.addDependencies(this.positionTexture);
128
+ copyPositionToHistoryPass.setRenderTarget(this._positionHistoryTexture);
129
+ copyPositionToHistoryPass.setExecuteFunc((context) => {
130
+ context.copyTexture(this.positionTexture);
131
+ });
132
+ const copyAccumulationToOutputPass = this._frameGraph.addRenderPass(`${this.name} CopyAccumulationToOutput`);
133
+ copyAccumulationToOutputPass.addDependencies(this._accumulationHistoryTexture);
134
+ copyAccumulationToOutputPass.setRenderTarget(this.outputTexture);
135
+ copyAccumulationToOutputPass.setExecuteFunc((context) => {
136
+ context.copyTexture(this._accumulationHistoryTexture);
137
+ });
138
+ }
139
+ dispose() {
140
+ this.postProcess.dispose();
141
+ super.dispose();
142
+ }
143
+ }
144
+ //# sourceMappingURL=iblShadowsAccumulationTask.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"iblShadowsAccumulationTask.js","sourceRoot":"","sources":["../../../../../../../dev/core/src/FrameGraph/Tasks/Rendering/iblShadows/iblShadowsAccumulationTask.ts"],"names":[],"mappings":"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","sourcesContent":["import { type DrawWrapper, type FrameGraph, type FrameGraphTextureCreationOptions, type FrameGraphTextureHandle } from \"core/index\";\r\nimport { Constants } from \"core/Engines/constants\";\r\nimport { type FrameGraphIblShadowsVoxelizationTask } from \"./iblShadowsVoxelizationTask\";\r\nimport { Vector4 } from \"core/Maths/math.vector\";\r\nimport { ThinCustomPostProcess } from \"core/PostProcesses/thinCustomPostProcess\";\r\nimport { ShaderLanguage } from \"core/Materials/shaderLanguage\";\r\nimport { FrameGraphTask } from \"../../../frameGraphTask\";\r\n\r\n/**\r\n * Task used to temporally accumulate IBL shadows.\r\n * @internal\r\n */\r\nexport class FrameGraphIblShadowsAccumulationTask extends FrameGraphTask {\r\n public sourceTexture?: FrameGraphTextureHandle;\r\n public velocityTexture?: FrameGraphTextureHandle;\r\n public positionTexture?: FrameGraphTextureHandle;\r\n\r\n private _remanence = 0.75;\r\n\r\n public get remanence(): number {\r\n return this._remanence;\r\n }\r\n\r\n public set remanence(value: number) {\r\n this._remanence = Math.max(0, Math.min(value, 1));\r\n }\r\n public reset = true;\r\n public isMoving = false;\r\n public voxelGridSize = 1;\r\n /** Voxelization task providing the runtime voxelGridSize used by the accumulation shader. */\r\n public voxelizationTask?: FrameGraphIblShadowsVoxelizationTask;\r\n\r\n protected _accumulationHistoryTexture?: FrameGraphTextureHandle;\r\n protected _positionHistoryTexture?: FrameGraphTextureHandle;\r\n\r\n public readonly outputTexture: FrameGraphTextureHandle;\r\n\r\n public readonly postProcess: ThinCustomPostProcess;\r\n protected readonly _postProcessDrawWrapper: DrawWrapper;\r\n protected readonly _accumulationParams = new Vector4(0, 0, 0, 0);\r\n\r\n constructor(name: string, frameGraph: FrameGraph) {\r\n super(name, frameGraph);\r\n\r\n this.postProcess = new ThinCustomPostProcess(name, frameGraph.engine, {\r\n fragmentShader: \"iblShadowAccumulation\",\r\n uniforms: [\"accumulationParameters\"],\r\n samplers: [\"spatialBlurSampler\", \"oldAccumulationSampler\", \"prevPositionSampler\", \"motionSampler\", \"positionSampler\"],\r\n shaderLanguage: frameGraph.engine.isWebGPU ? ShaderLanguage.WGSL : ShaderLanguage.GLSL,\r\n });\r\n this._postProcessDrawWrapper = this.postProcess.drawWrapper;\r\n\r\n this.outputTexture = this._frameGraph.textureManager.createDanglingHandle();\r\n }\r\n\r\n public override getClassName(): string {\r\n return \"FrameGraphIblShadowsAccumulationTask\";\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/promise-function-async, no-restricted-syntax\r\n public override initAsync(): Promise<unknown> {\r\n if (this._frameGraph.engine.isWebGPU) {\r\n return import(\"../../../../ShadersWGSL/iblShadowAccumulation.fragment\");\r\n }\r\n\r\n return import(\"../../../../Shaders/iblShadowAccumulation.fragment\");\r\n }\r\n\r\n public override isReady(): boolean {\r\n return this.postProcess.isReady();\r\n }\r\n\r\n public override record() {\r\n if (this.sourceTexture === undefined || this.velocityTexture === undefined || this.positionTexture === undefined) {\r\n throw new Error(`FrameGraphIblShadowsAccumulationTask ${this.name}: sourceTexture, velocityTexture and positionTexture are required`);\r\n }\r\n\r\n const textureManager = this._frameGraph.textureManager;\r\n const outputSize = textureManager.getTextureAbsoluteDimensions(this.sourceTexture);\r\n const positionSize = textureManager.getTextureAbsoluteDimensions(this.positionTexture);\r\n\r\n const outputCreationOptions: FrameGraphTextureCreationOptions = {\r\n size: outputSize,\r\n sizeIsPercentage: false,\r\n isHistoryTexture: false,\r\n options: {\r\n createMipMaps: false,\r\n samples: 1,\r\n types: [Constants.TEXTURETYPE_HALF_FLOAT],\r\n formats: [Constants.TEXTUREFORMAT_RGBA],\r\n useSRGBBuffers: [false],\r\n creationFlags: [0],\r\n labels: [`${this.name} Output`],\r\n },\r\n };\r\n\r\n textureManager.resolveDanglingHandle(this.outputTexture, undefined, `${this.name} Output`, outputCreationOptions);\r\n\r\n const accumulationHistoryCreationOptions: FrameGraphTextureCreationOptions = {\r\n size: outputSize,\r\n sizeIsPercentage: false,\r\n isHistoryTexture: true,\r\n options: {\r\n createMipMaps: false,\r\n samples: 1,\r\n types: [Constants.TEXTURETYPE_HALF_FLOAT],\r\n formats: [Constants.TEXTUREFORMAT_RGBA],\r\n useSRGBBuffers: [false],\r\n creationFlags: [0],\r\n labels: [`${this.name} History`],\r\n },\r\n };\r\n\r\n const positionHistoryCreationOptions: FrameGraphTextureCreationOptions = {\r\n size: positionSize,\r\n sizeIsPercentage: false,\r\n isHistoryTexture: true,\r\n options: {\r\n createMipMaps: false,\r\n samples: 1,\r\n types: [Constants.TEXTURETYPE_HALF_FLOAT],\r\n formats: [Constants.TEXTUREFORMAT_RGBA],\r\n useSRGBBuffers: [false],\r\n creationFlags: [0],\r\n labels: [`${this.name} Position History`],\r\n },\r\n };\r\n\r\n this._accumulationHistoryTexture = textureManager.createRenderTargetTexture(\r\n `${this.name} Accumulation History`,\r\n accumulationHistoryCreationOptions,\r\n this._accumulationHistoryTexture\r\n );\r\n this._positionHistoryTexture = textureManager.createRenderTargetTexture(`${this.name} Position History`, positionHistoryCreationOptions, this._positionHistoryTexture);\r\n\r\n const pass = this._frameGraph.addRenderPass(this.name);\r\n\r\n pass.addDependencies(this.sourceTexture);\r\n pass.addDependencies(this.velocityTexture);\r\n pass.addDependencies(this.positionTexture);\r\n pass.addDependencies(this._accumulationHistoryTexture);\r\n pass.addDependencies(this._positionHistoryTexture);\r\n // Accumulation writes directly to the history handle (current frame write side)\r\n // so oldAccumulationSampler reads previous-frame data automatically.\r\n // A dedicated copy pass then exposes a stable current-frame outputTexture.\r\n pass.setRenderTarget(this._accumulationHistoryTexture);\r\n pass.setExecuteFunc((context) => {\r\n context.setTextureSamplingMode(this.sourceTexture!, Constants.TEXTURE_NEAREST_SAMPLINGMODE);\r\n context.setTextureSamplingMode(this.velocityTexture!, Constants.TEXTURE_NEAREST_SAMPLINGMODE);\r\n context.setTextureSamplingMode(this.positionTexture!, Constants.TEXTURE_NEAREST_SAMPLINGMODE);\r\n\r\n const remanence = this.isMoving ? this.remanence : 0.99;\r\n this._accumulationParams.set(remanence, this.reset ? 1.0 : 0.0, this.voxelizationTask?.voxelGridSize ?? this.voxelGridSize, 0.0);\r\n\r\n context.applyFullScreenEffect(\r\n this._postProcessDrawWrapper,\r\n () => {\r\n const effect = this._postProcessDrawWrapper.effect!;\r\n\r\n context.bindTextureHandle(effect, \"spatialBlurSampler\", this.sourceTexture!);\r\n context.bindTextureHandle(effect, \"oldAccumulationSampler\", this._accumulationHistoryTexture!);\r\n context.bindTextureHandle(effect, \"prevPositionSampler\", this._positionHistoryTexture!);\r\n context.bindTextureHandle(effect, \"motionSampler\", this.velocityTexture!);\r\n context.bindTextureHandle(effect, \"positionSampler\", this.positionTexture!);\r\n\r\n effect.setVector4(\"accumulationParameters\", this._accumulationParams);\r\n this.postProcess.bind();\r\n },\r\n undefined,\r\n false,\r\n false,\r\n true\r\n );\r\n\r\n this.reset = false;\r\n this.isMoving = false;\r\n });\r\n\r\n const copyPositionToHistoryPass = this._frameGraph.addRenderPass(`${this.name} CopyPositionToHistory`);\r\n\r\n copyPositionToHistoryPass.addDependencies(this.positionTexture);\r\n copyPositionToHistoryPass.setRenderTarget(this._positionHistoryTexture);\r\n copyPositionToHistoryPass.setExecuteFunc((context) => {\r\n context.copyTexture(this.positionTexture!);\r\n });\r\n\r\n const copyAccumulationToOutputPass = this._frameGraph.addRenderPass(`${this.name} CopyAccumulationToOutput`);\r\n\r\n copyAccumulationToOutputPass.addDependencies(this._accumulationHistoryTexture);\r\n copyAccumulationToOutputPass.setRenderTarget(this.outputTexture);\r\n copyAccumulationToOutputPass.setExecuteFunc((context) => {\r\n context.copyTexture(this._accumulationHistoryTexture!);\r\n });\r\n }\r\n\r\n public override dispose(): void {\r\n this.postProcess.dispose();\r\n super.dispose();\r\n }\r\n}\r\n"]}