@babylonjs/core 5.50.1 → 5.52.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Animations/animatable.d.ts +5 -3
- package/Animations/animatable.js +10 -7
- package/Animations/animatable.js.map +1 -1
- package/Animations/animationGroup.js +3 -1
- package/Animations/animationGroup.js.map +1 -1
- package/Animations/runtimeAnimation.d.ts +1 -0
- package/Animations/runtimeAnimation.js +1 -0
- package/Animations/runtimeAnimation.js.map +1 -1
- package/Cameras/Inputs/freeCameraKeyboardMoveInput.d.ts +8 -0
- package/Cameras/Inputs/freeCameraKeyboardMoveInput.js +28 -2
- package/Cameras/Inputs/freeCameraKeyboardMoveInput.js.map +1 -1
- package/Cameras/freeCamera.d.ts +10 -0
- package/Cameras/freeCamera.js +32 -0
- package/Cameras/freeCamera.js.map +1 -1
- package/Cameras/targetCamera.js +4 -1
- package/Cameras/targetCamera.js.map +1 -1
- package/Engines/engineCapabilities.d.ts +2 -0
- package/Engines/engineCapabilities.js.map +1 -1
- package/Engines/nativeEngine.js +1 -0
- package/Engines/nativeEngine.js.map +1 -1
- package/Engines/nullEngine.js +1 -0
- package/Engines/nullEngine.js.map +1 -1
- package/Engines/thinEngine.js +3 -2
- package/Engines/thinEngine.js.map +1 -1
- package/Engines/webgpuEngine.js +1 -0
- package/Engines/webgpuEngine.js.map +1 -1
- package/Inputs/scene.inputManager.d.ts +6 -3
- package/Inputs/scene.inputManager.js +67 -12
- package/Inputs/scene.inputManager.js.map +1 -1
- package/Materials/Node/Blocks/Dual/sceneDepthBlock.d.ts +4 -0
- package/Materials/Node/Blocks/Dual/sceneDepthBlock.js +37 -2
- package/Materials/Node/Blocks/Dual/sceneDepthBlock.js.map +1 -1
- package/Materials/Node/nodeMaterialDecorator.d.ts +1 -1
- package/Materials/Node/nodeMaterialDecorator.js.map +1 -1
- package/Materials/PBR/pbrMaterial.js +1 -0
- package/Materials/PBR/pbrMaterial.js.map +1 -1
- package/Materials/Textures/cubeTexture.js +7 -1
- package/Materials/Textures/cubeTexture.js.map +1 -1
- package/Meshes/mesh.js +2 -2
- package/Meshes/mesh.js.map +1 -1
- package/Meshes/mesh.vertexData.d.ts +4 -1
- package/Meshes/mesh.vertexData.js +21 -17
- package/Meshes/mesh.vertexData.js.map +1 -1
- package/Misc/decorators.d.ts +8 -0
- package/Misc/decorators.js +22 -12
- package/Misc/decorators.js.map +1 -1
- package/Misc/environmentTextureTools.js +7 -0
- package/Misc/environmentTextureTools.js.map +1 -1
- package/Misc/khronosTextureContainer.js +4 -0
- package/Misc/khronosTextureContainer.js.map +1 -1
- package/Misc/observable.js +3 -0
- package/Misc/observable.js.map +1 -1
- package/Misc/sceneRecorder.js +3 -0
- package/Misc/sceneRecorder.js.map +1 -1
- package/Misc/virtualJoystick.js +2 -2
- package/Misc/virtualJoystick.js.map +1 -1
- package/Morph/morphTargetManager.js +7 -1
- package/Morph/morphTargetManager.js.map +1 -1
- package/Particles/gpuParticleSystem.js +18 -14
- package/Particles/gpuParticleSystem.js.map +1 -1
- package/Physics/v2/IPhysicsEnginePlugin.d.ts +126 -19
- package/Physics/v2/IPhysicsEnginePlugin.js +6 -0
- package/Physics/v2/IPhysicsEnginePlugin.js.map +1 -1
- package/Physics/v2/physicsAggregate.d.ts +7 -1
- package/Physics/v2/physicsAggregate.js +21 -7
- package/Physics/v2/physicsAggregate.js.map +1 -1
- package/Physics/v2/physicsBody.d.ts +24 -15
- package/Physics/v2/physicsBody.js +46 -20
- package/Physics/v2/physicsBody.js.map +1 -1
- package/Physics/v2/physicsEngineComponent.d.ts +10 -0
- package/Physics/v2/physicsEngineComponent.js +27 -0
- package/Physics/v2/physicsEngineComponent.js.map +1 -1
- package/Physics/v2/physicsMaterial.d.ts +52 -46
- package/Physics/v2/physicsMaterial.js +23 -80
- package/Physics/v2/physicsMaterial.js.map +1 -1
- package/Physics/v2/physicsShape.d.ts +27 -2
- package/Physics/v2/physicsShape.js +52 -1
- package/Physics/v2/physicsShape.js.map +1 -1
- package/PostProcesses/RenderPipeline/Pipelines/ssao2RenderingPipeline.d.ts +59 -13
- package/PostProcesses/RenderPipeline/Pipelines/ssao2RenderingPipeline.js +131 -56
- package/PostProcesses/RenderPipeline/Pipelines/ssao2RenderingPipeline.js.map +1 -1
- package/PostProcesses/RenderPipeline/Pipelines/ssrRenderingPipeline.d.ts +65 -13
- package/PostProcesses/RenderPipeline/Pipelines/ssrRenderingPipeline.js +218 -80
- package/PostProcesses/RenderPipeline/Pipelines/ssrRenderingPipeline.js.map +1 -1
- package/Rendering/depthRenderer.js +1 -1
- package/Rendering/depthRenderer.js.map +1 -1
- package/Rendering/depthRendererSceneComponent.d.ts +2 -1
- package/Rendering/depthRendererSceneComponent.js +2 -2
- package/Rendering/depthRendererSceneComponent.js.map +1 -1
- package/Rendering/geometryBufferRenderer.d.ts +8 -2
- package/Rendering/geometryBufferRenderer.js +32 -10
- package/Rendering/geometryBufferRenderer.js.map +1 -1
- package/Rendering/prePassRenderer.d.ts +18 -2
- package/Rendering/prePassRenderer.js +72 -26
- package/Rendering/prePassRenderer.js.map +1 -1
- package/Shaders/ShadersInclude/screenSpaceRayTrace.js +3 -3
- package/Shaders/ShadersInclude/screenSpaceRayTrace.js.map +1 -1
- package/Shaders/geometry.fragment.js +2 -2
- package/Shaders/geometry.fragment.js.map +1 -1
- package/Shaders/screenSpaceReflection2.fragment.js +20 -10
- package/Shaders/screenSpaceReflection2.fragment.js.map +1 -1
- package/Shaders/screenSpaceReflection2Blur.fragment.js +1 -1
- package/Shaders/screenSpaceReflection2Blur.fragment.js.map +1 -1
- package/Shaders/screenSpaceReflection2BlurCombiner.fragment.js +9 -2
- package/Shaders/screenSpaceReflection2BlurCombiner.fragment.js.map +1 -1
- package/Shaders/sprites.fragment.js +6 -1
- package/Shaders/sprites.fragment.js.map +1 -1
- package/Shaders/ssao2.fragment.js +0 -2
- package/Shaders/ssao2.fragment.js.map +1 -1
- package/Sprites/spriteManager.d.ts +7 -0
- package/Sprites/spriteManager.js +27 -0
- package/Sprites/spriteManager.js.map +1 -1
- package/Sprites/spriteRenderer.d.ts +8 -0
- package/Sprites/spriteRenderer.js +42 -19
- package/Sprites/spriteRenderer.js.map +1 -1
- package/assetContainer.js +5 -1
- package/assetContainer.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { __decorate } from "../../../tslib.es6.js";
|
|
2
2
|
/* eslint-disable @typescript-eslint/naming-convention */
|
|
3
|
-
import { Logger } from "../../../Misc/logger.js";
|
|
4
3
|
import { serialize, SerializationHelper } from "../../../Misc/decorators.js";
|
|
5
4
|
import { Vector3, Matrix, Quaternion, TmpVectors } from "../../../Maths/math.vector.js";
|
|
6
5
|
import { PostProcess } from "../../postProcess.js";
|
|
@@ -44,9 +43,24 @@ export class SSRRenderingPipeline extends PostProcessRenderPipeline {
|
|
|
44
43
|
get samples() {
|
|
45
44
|
return this._samples;
|
|
46
45
|
}
|
|
46
|
+
/**
|
|
47
|
+
* Gets or sets the downsample factor used to reduce the size of the texture used to compute the SSR contribution (default: 0).
|
|
48
|
+
* Use 0 to render the SSR contribution at full resolution, 1 to render at half resolution, 2 to render at 1/3 resolution, etc.
|
|
49
|
+
* Note that it is used only when blurring is enabled (blurDispersionStrength \> 0), because in that mode the SSR contribution is generated in a separate texture.
|
|
50
|
+
*/
|
|
51
|
+
get ssrDownsample() {
|
|
52
|
+
return this._ssrDownsample;
|
|
53
|
+
}
|
|
54
|
+
set ssrDownsample(downsample) {
|
|
55
|
+
if (downsample === this._ssrDownsample) {
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
this._ssrDownsample = downsample;
|
|
59
|
+
this._buildPipeline();
|
|
60
|
+
}
|
|
47
61
|
/**
|
|
48
62
|
* Gets or sets the blur dispersion strength. Set this value to 0 to disable blurring (default: 0.05)
|
|
49
|
-
* The reflections are blurred based on the distance between the pixel shaded and the reflected pixel: the higher the distance the more blurry the reflection is.
|
|
63
|
+
* The reflections are blurred based on the roughness of the surface and the distance between the pixel shaded and the reflected pixel: the higher the distance the more blurry the reflection is.
|
|
50
64
|
* blurDispersionStrength allows to increase or decrease this effect.
|
|
51
65
|
*/
|
|
52
66
|
get blurDispersionStrength() {
|
|
@@ -62,9 +76,26 @@ export class SSRRenderingPipeline extends PostProcessRenderPipeline {
|
|
|
62
76
|
this._buildPipeline();
|
|
63
77
|
}
|
|
64
78
|
}
|
|
79
|
+
_useBlur() {
|
|
80
|
+
return this._blurDispersionStrength > 0;
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Gets or sets the downsample factor used to reduce the size of the textures used to blur the reflection effect (default: 0).
|
|
84
|
+
* Use 0 to blur at full resolution, 1 to render at half resolution, 2 to render at 1/3 resolution, etc.
|
|
85
|
+
*/
|
|
86
|
+
get blurDownsample() {
|
|
87
|
+
return this._blurDownsample;
|
|
88
|
+
}
|
|
89
|
+
set blurDownsample(downsample) {
|
|
90
|
+
if (downsample === this._blurDownsample) {
|
|
91
|
+
return;
|
|
92
|
+
}
|
|
93
|
+
this._blurDownsample = downsample;
|
|
94
|
+
this._buildPipeline();
|
|
95
|
+
}
|
|
65
96
|
/**
|
|
66
|
-
* Gets or sets whether or not smoothing reflections is enabled
|
|
67
|
-
* Enabling smoothing will require more GPU power
|
|
97
|
+
* Gets or sets whether or not smoothing reflections is enabled (default: false)
|
|
98
|
+
* Enabling smoothing will require more GPU power.
|
|
68
99
|
* Note that this setting has no effect if step = 1: it's only used if step \> 1.
|
|
69
100
|
*/
|
|
70
101
|
get enableSmoothReflections() {
|
|
@@ -124,6 +155,19 @@ export class SSRRenderingPipeline extends PostProcessRenderPipeline {
|
|
|
124
155
|
this._attenuateIntersectionDistance = attenuate;
|
|
125
156
|
this._updateEffectDefines();
|
|
126
157
|
}
|
|
158
|
+
/**
|
|
159
|
+
* Gets or sets a boolean indicating if the reflections should be attenuated according to the number of iterations performed to find the intersection (default: true).
|
|
160
|
+
*/
|
|
161
|
+
get attenuateIntersectionIterations() {
|
|
162
|
+
return this._attenuateIntersectionIterations;
|
|
163
|
+
}
|
|
164
|
+
set attenuateIntersectionIterations(attenuate) {
|
|
165
|
+
if (this._attenuateIntersectionIterations === attenuate) {
|
|
166
|
+
return;
|
|
167
|
+
}
|
|
168
|
+
this._attenuateIntersectionIterations = attenuate;
|
|
169
|
+
this._updateEffectDefines();
|
|
170
|
+
}
|
|
127
171
|
/**
|
|
128
172
|
* Gets or sets a boolean indicating if the reflections should be attenuated when the reflection ray is facing the camera (the view direction) (default: false).
|
|
129
173
|
*/
|
|
@@ -188,20 +232,35 @@ export class SSRRenderingPipeline extends PostProcessRenderPipeline {
|
|
|
188
232
|
return this._depthRenderer;
|
|
189
233
|
}
|
|
190
234
|
/**
|
|
191
|
-
* Gets or sets the
|
|
192
|
-
*
|
|
193
|
-
* Note that you will get rendering artefacts when using a value different from
|
|
235
|
+
* Gets or sets the downsample factor (default: 0) used to create the backface depth texture - used only if enableAutomaticThicknessComputation = true.
|
|
236
|
+
* Use 0 to render the depth at full resolution, 1 to render at half resolution, 2 to render at 1/4 resolution, etc.
|
|
237
|
+
* Note that you will get rendering artefacts when using a value different from 0: it's a tradeoff between image quality and performances.
|
|
194
238
|
*/
|
|
195
|
-
get
|
|
196
|
-
return this.
|
|
239
|
+
get backfaceDepthTextureDownsample() {
|
|
240
|
+
return this._backfaceDepthTextureDownsample;
|
|
197
241
|
}
|
|
198
|
-
set
|
|
199
|
-
if (this.
|
|
242
|
+
set backfaceDepthTextureDownsample(factor) {
|
|
243
|
+
if (this._backfaceDepthTextureDownsample === factor) {
|
|
200
244
|
return;
|
|
201
245
|
}
|
|
202
|
-
this.
|
|
246
|
+
this._backfaceDepthTextureDownsample = factor;
|
|
203
247
|
this._resizeDepthRenderer();
|
|
204
248
|
}
|
|
249
|
+
/**
|
|
250
|
+
* Gets or sets a boolean (default: true) indicating if the depth of transparent meshes should be written to the backface depth texture (when automatic thickness computation is enabled).
|
|
251
|
+
*/
|
|
252
|
+
get backfaceForceDepthWriteTransparentMeshes() {
|
|
253
|
+
return this._backfaceForceDepthWriteTransparentMeshes;
|
|
254
|
+
}
|
|
255
|
+
set backfaceForceDepthWriteTransparentMeshes(force) {
|
|
256
|
+
if (this._backfaceForceDepthWriteTransparentMeshes === force) {
|
|
257
|
+
return;
|
|
258
|
+
}
|
|
259
|
+
this._backfaceForceDepthWriteTransparentMeshes = force;
|
|
260
|
+
if (this._depthRenderer) {
|
|
261
|
+
this._depthRenderer.forceDepthWriteTransparentMeshes = force;
|
|
262
|
+
}
|
|
263
|
+
}
|
|
205
264
|
/**
|
|
206
265
|
* Gets or sets a boolean indicating if the effect is enabled (default: true).
|
|
207
266
|
*/
|
|
@@ -230,6 +289,34 @@ export class SSRRenderingPipeline extends PostProcessRenderPipeline {
|
|
|
230
289
|
}
|
|
231
290
|
}
|
|
232
291
|
}
|
|
292
|
+
/**
|
|
293
|
+
* Gets or sets a boolean defining if the input color texture is in gamma space (default: true)
|
|
294
|
+
* The SSR effect works in linear space, so if the input texture is in gamma space, we must convert the texture to linear space before applying the effect
|
|
295
|
+
*/
|
|
296
|
+
get inputTextureColorIsInGammaSpace() {
|
|
297
|
+
return this._inputTextureColorIsInGammaSpace;
|
|
298
|
+
}
|
|
299
|
+
set inputTextureColorIsInGammaSpace(gammaSpace) {
|
|
300
|
+
if (this._inputTextureColorIsInGammaSpace === gammaSpace) {
|
|
301
|
+
return;
|
|
302
|
+
}
|
|
303
|
+
this._inputTextureColorIsInGammaSpace = gammaSpace;
|
|
304
|
+
this._buildPipeline();
|
|
305
|
+
}
|
|
306
|
+
/**
|
|
307
|
+
* Gets or sets a boolean defining if the output color texture generated by the SSR pipeline should be in gamma space (default: true)
|
|
308
|
+
* If you have a post-process that comes after the SSR and that post-process needs the input to be in a linear space, you must disable generateOutputInGammaSpace
|
|
309
|
+
*/
|
|
310
|
+
get generateOutputInGammaSpace() {
|
|
311
|
+
return this._generateOutputInGammaSpace;
|
|
312
|
+
}
|
|
313
|
+
set generateOutputInGammaSpace(gammaSpace) {
|
|
314
|
+
if (this._generateOutputInGammaSpace === gammaSpace) {
|
|
315
|
+
return;
|
|
316
|
+
}
|
|
317
|
+
this._generateOutputInGammaSpace = gammaSpace;
|
|
318
|
+
this._buildPipeline();
|
|
319
|
+
}
|
|
233
320
|
/**
|
|
234
321
|
* Gets or sets a boolean indicating if the effect should be rendered in debug mode (default: false).
|
|
235
322
|
* In this mode, colors have this meaning:
|
|
@@ -250,6 +337,13 @@ export class SSRRenderingPipeline extends PostProcessRenderPipeline {
|
|
|
250
337
|
this._debug = value;
|
|
251
338
|
this._buildPipeline();
|
|
252
339
|
}
|
|
340
|
+
/**
|
|
341
|
+
* Gets the scene the effect belongs to.
|
|
342
|
+
* @returns the scene the effect belongs to.
|
|
343
|
+
*/
|
|
344
|
+
getScene() {
|
|
345
|
+
return this._scene;
|
|
346
|
+
}
|
|
253
347
|
get _geometryBufferRenderer() {
|
|
254
348
|
if (!this._forceGeometryBuffer) {
|
|
255
349
|
return null;
|
|
@@ -268,6 +362,13 @@ export class SSRRenderingPipeline extends PostProcessRenderPipeline {
|
|
|
268
362
|
get scene() {
|
|
269
363
|
return this._scene;
|
|
270
364
|
}
|
|
365
|
+
/**
|
|
366
|
+
* Returns true if SSR is supported by the running hardware
|
|
367
|
+
*/
|
|
368
|
+
get isSupported() {
|
|
369
|
+
const caps = this._scene.getEngine().getCaps();
|
|
370
|
+
return caps.drawBuffersExtension && caps.texelFetch;
|
|
371
|
+
}
|
|
271
372
|
/**
|
|
272
373
|
* Constructor of the SSR rendering pipeline
|
|
273
374
|
* @param name The rendering pipeline name
|
|
@@ -316,7 +417,8 @@ export class SSRRenderingPipeline extends PostProcessRenderPipeline {
|
|
|
316
417
|
*/
|
|
317
418
|
this.reflectionSpecularFalloffExponent = 1;
|
|
318
419
|
/**
|
|
319
|
-
* Maximum number of steps during the ray marching process after which we consider an intersection could not be found (default: 1000)
|
|
420
|
+
* Maximum number of steps during the ray marching process after which we consider an intersection could not be found (default: 1000).
|
|
421
|
+
* Should be an integer value.
|
|
320
422
|
*/
|
|
321
423
|
this.maxSteps = 1000.0;
|
|
322
424
|
/**
|
|
@@ -330,22 +432,28 @@ export class SSRRenderingPipeline extends PostProcessRenderPipeline {
|
|
|
330
432
|
* 1 should normally be a good value, depending on the scene you may need to use a higher value (2 or 3)
|
|
331
433
|
*/
|
|
332
434
|
this.selfCollisionNumSkip = 1;
|
|
333
|
-
this._blurDispersionStrength = 1 / 20;
|
|
334
435
|
/**
|
|
335
|
-
*
|
|
336
|
-
*
|
|
436
|
+
* Gets or sets the minimum value for one of the reflectivity component of the material to consider it for SSR (default: 0.04).
|
|
437
|
+
* If all r/g/b components of the reflectivity is below or equal this value, the pixel will not be considered reflective and SSR won't be applied.
|
|
337
438
|
*/
|
|
338
|
-
this.
|
|
439
|
+
this.reflectivityThreshold = 0.04;
|
|
440
|
+
this._ssrDownsample = 0;
|
|
441
|
+
this._blurDispersionStrength = 0.03;
|
|
442
|
+
this._blurDownsample = 0;
|
|
339
443
|
this._enableSmoothReflections = false;
|
|
340
444
|
this._environmentTextureIsProbe = false;
|
|
341
445
|
this._attenuateScreenBorders = true;
|
|
342
446
|
this._attenuateIntersectionDistance = true;
|
|
447
|
+
this._attenuateIntersectionIterations = true;
|
|
343
448
|
this._attenuateFacingCamera = false;
|
|
344
449
|
this._attenuateBackfaceReflection = false;
|
|
345
450
|
this._clipToFrustum = true;
|
|
346
451
|
this._enableAutomaticThicknessComputation = false;
|
|
347
|
-
this.
|
|
452
|
+
this._backfaceDepthTextureDownsample = 0;
|
|
453
|
+
this._backfaceForceDepthWriteTransparentMeshes = true;
|
|
348
454
|
this._isEnabled = true;
|
|
455
|
+
this._inputTextureColorIsInGammaSpace = true;
|
|
456
|
+
this._generateOutputInGammaSpace = true;
|
|
349
457
|
this._debug = false;
|
|
350
458
|
this._forceGeometryBuffer = false;
|
|
351
459
|
this._isDirty = false;
|
|
@@ -356,22 +464,24 @@ export class SSRRenderingPipeline extends PostProcessRenderPipeline {
|
|
|
356
464
|
this._scene = scene;
|
|
357
465
|
this._textureType = textureType;
|
|
358
466
|
this._forceGeometryBuffer = forceGeometryBuffer;
|
|
359
|
-
if (
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
geometryBufferRenderer.enableReflectivity = true;
|
|
467
|
+
if (this.isSupported) {
|
|
468
|
+
scene.postProcessRenderPipelineManager.addPipeline(this);
|
|
469
|
+
if (this._forceGeometryBuffer) {
|
|
470
|
+
const geometryBufferRenderer = scene.enableGeometryBufferRenderer();
|
|
471
|
+
if (geometryBufferRenderer) {
|
|
472
|
+
geometryBufferRenderer.enableReflectivity = true;
|
|
473
|
+
geometryBufferRenderer.useSpecificClearForDepthTexture = true;
|
|
474
|
+
}
|
|
368
475
|
}
|
|
476
|
+
else {
|
|
477
|
+
const prePassRenderer = scene.enablePrePassRenderer();
|
|
478
|
+
if (prePassRenderer) {
|
|
479
|
+
prePassRenderer.useSpecificClearForDepthTexture = true;
|
|
480
|
+
prePassRenderer.markAsDirty();
|
|
481
|
+
}
|
|
482
|
+
}
|
|
483
|
+
this._buildPipeline();
|
|
369
484
|
}
|
|
370
|
-
else {
|
|
371
|
-
const prePassRenderer = scene.enablePrePassRenderer();
|
|
372
|
-
prePassRenderer === null || prePassRenderer === void 0 ? void 0 : prePassRenderer.markAsDirty();
|
|
373
|
-
}
|
|
374
|
-
this._buildPipeline();
|
|
375
485
|
}
|
|
376
486
|
/**
|
|
377
487
|
* Get the class name
|
|
@@ -411,20 +521,20 @@ export class SSRRenderingPipeline extends PostProcessRenderPipeline {
|
|
|
411
521
|
super.dispose();
|
|
412
522
|
}
|
|
413
523
|
_getTextureSize() {
|
|
524
|
+
var _a, _b;
|
|
414
525
|
const engine = this._scene.getEngine();
|
|
415
|
-
const geometryBufferRenderer = this._geometryBufferRenderer;
|
|
416
526
|
const prePassRenderer = this._prePassRenderer;
|
|
417
527
|
let textureSize = { width: engine.getRenderWidth(), height: engine.getRenderHeight() };
|
|
418
|
-
if (
|
|
419
|
-
textureSize = geometryBufferRenderer.getGBuffer().textures[0].getSize();
|
|
420
|
-
}
|
|
421
|
-
else if (prePassRenderer) {
|
|
422
|
-
const depthIndex = prePassRenderer.getIndex(5);
|
|
528
|
+
if (prePassRenderer && ((_a = this._scene.activeCamera) === null || _a === void 0 ? void 0 : _a._getFirstPostProcess()) === this._ssrPostProcess) {
|
|
423
529
|
const renderTarget = prePassRenderer.getRenderTarget();
|
|
424
530
|
if (renderTarget && renderTarget.textures) {
|
|
425
|
-
textureSize = renderTarget.textures[
|
|
531
|
+
textureSize = renderTarget.textures[prePassRenderer.getIndex(4)].getSize();
|
|
426
532
|
}
|
|
427
533
|
}
|
|
534
|
+
else if ((_b = this._ssrPostProcess) === null || _b === void 0 ? void 0 : _b.inputTexture) {
|
|
535
|
+
textureSize.width = this._ssrPostProcess.inputTexture.width;
|
|
536
|
+
textureSize.height = this._ssrPostProcess.inputTexture.height;
|
|
537
|
+
}
|
|
428
538
|
return textureSize;
|
|
429
539
|
}
|
|
430
540
|
_updateEffectDefines() {
|
|
@@ -444,6 +554,9 @@ export class SSRRenderingPipeline extends PostProcessRenderPipeline {
|
|
|
444
554
|
if (this._environmentTexture.boundingBoxSize) {
|
|
445
555
|
defines.push("#define SSR_USE_LOCAL_REFLECTIONMAP_CUBIC");
|
|
446
556
|
}
|
|
557
|
+
if (this._environmentTexture.gammaSpace) {
|
|
558
|
+
defines.push("#define SSR_ENVIRONMENT_CUBE_IS_GAMMASPACE");
|
|
559
|
+
}
|
|
447
560
|
}
|
|
448
561
|
if (this._environmentTextureIsProbe) {
|
|
449
562
|
defines.push("#define SSR_INVERTCUBICMAP");
|
|
@@ -457,6 +570,9 @@ export class SSRRenderingPipeline extends PostProcessRenderPipeline {
|
|
|
457
570
|
if (this._attenuateIntersectionDistance) {
|
|
458
571
|
defines.push("#define SSR_ATTENUATE_INTERSECTION_DISTANCE");
|
|
459
572
|
}
|
|
573
|
+
if (this._attenuateIntersectionIterations) {
|
|
574
|
+
defines.push("#define SSR_ATTENUATE_INTERSECTION_NUMITERATIONS");
|
|
575
|
+
}
|
|
460
576
|
if (this._attenuateFacingCamera) {
|
|
461
577
|
defines.push("#define SSR_ATTENUATE_FACING_CAMERA");
|
|
462
578
|
}
|
|
@@ -466,16 +582,25 @@ export class SSRRenderingPipeline extends PostProcessRenderPipeline {
|
|
|
466
582
|
if (this._clipToFrustum) {
|
|
467
583
|
defines.push("#define SSRAYTRACE_CLIP_TO_FRUSTUM");
|
|
468
584
|
}
|
|
469
|
-
if (this.
|
|
585
|
+
if (this._useBlur()) {
|
|
470
586
|
defines.push("#define SSR_USE_BLUR");
|
|
471
587
|
}
|
|
472
588
|
if (this._debug) {
|
|
473
589
|
defines.push("#define SSRAYTRACE_DEBUG");
|
|
474
590
|
}
|
|
591
|
+
if (this._inputTextureColorIsInGammaSpace) {
|
|
592
|
+
defines.push("#define SSR_INPUT_IS_GAMMA_SPACE");
|
|
593
|
+
}
|
|
594
|
+
if (this._generateOutputInGammaSpace) {
|
|
595
|
+
defines.push("#define SSR_OUTPUT_IS_GAMMA_SPACE");
|
|
596
|
+
}
|
|
475
597
|
(_a = this._ssrPostProcess) === null || _a === void 0 ? void 0 : _a.updateEffect(defines.join("\n"));
|
|
476
598
|
}
|
|
477
599
|
_buildPipeline() {
|
|
478
600
|
var _a;
|
|
601
|
+
if (!this.isSupported) {
|
|
602
|
+
return;
|
|
603
|
+
}
|
|
479
604
|
if (!this._isEnabled) {
|
|
480
605
|
this._isDirty = true;
|
|
481
606
|
return;
|
|
@@ -495,9 +620,10 @@ export class SSRRenderingPipeline extends PostProcessRenderPipeline {
|
|
|
495
620
|
if (camera) {
|
|
496
621
|
this._depthRendererCamera = camera;
|
|
497
622
|
this._depthRenderer = new DepthRenderer(this._scene, undefined, undefined, undefined, 1, true, "SSRBackDepth");
|
|
498
|
-
this._depthRenderer.clearColor.r = 1e8; // put a big value because we use the storeCameraSpaceZ mode
|
|
623
|
+
this._depthRenderer.clearColor.r = 1e8; // "infinity": put a big value because we use the storeCameraSpaceZ mode
|
|
499
624
|
this._depthRenderer.reverseCulling = true; // we generate depth for the back faces
|
|
500
625
|
this._depthRenderer.getDepthMap().noPrePassRenderer = true; // we don't want the prepass renderer to attach to our depth buffer!
|
|
626
|
+
this._depthRenderer.forceDepthWriteTransparentMeshes = this._backfaceForceDepthWriteTransparentMeshes;
|
|
501
627
|
this._resizeDepthRenderer();
|
|
502
628
|
camera.customRenderTargets.push(this._depthRenderer.getDepthMap());
|
|
503
629
|
}
|
|
@@ -506,7 +632,7 @@ export class SSRRenderingPipeline extends PostProcessRenderPipeline {
|
|
|
506
632
|
this.addEffect(new PostProcessRenderEffect(engine, this.SSRRenderEffect, () => {
|
|
507
633
|
return this._ssrPostProcess;
|
|
508
634
|
}, true));
|
|
509
|
-
if (this.
|
|
635
|
+
if (this._useBlur()) {
|
|
510
636
|
this._createBlurAndCombinerPostProcesses();
|
|
511
637
|
this.addEffect(new PostProcessRenderEffect(engine, this.SSRBlurRenderEffect, () => {
|
|
512
638
|
return [this._blurPostProcessX, this._blurPostProcessY];
|
|
@@ -525,8 +651,8 @@ export class SSRRenderingPipeline extends PostProcessRenderPipeline {
|
|
|
525
651
|
}
|
|
526
652
|
const textureSize = this._getTextureSize();
|
|
527
653
|
const depthRendererSize = this._depthRenderer.getDepthMap().getSize();
|
|
528
|
-
const width = Math.floor(textureSize.width / this.
|
|
529
|
-
const height = Math.floor(textureSize.height / this.
|
|
654
|
+
const width = Math.floor(textureSize.width / (this._backfaceDepthTextureDownsample + 1));
|
|
655
|
+
const height = Math.floor(textureSize.height / (this._backfaceDepthTextureDownsample + 1));
|
|
530
656
|
if (depthRendererSize.width !== width || depthRendererSize.height !== height) {
|
|
531
657
|
this._depthRenderer.getDepthMap().resize({ width, height });
|
|
532
658
|
}
|
|
@@ -578,6 +704,7 @@ export class SSRRenderingPipeline extends PostProcessRenderPipeline {
|
|
|
578
704
|
"vReflectionPosition",
|
|
579
705
|
"vReflectionSize",
|
|
580
706
|
"backSizeFactor",
|
|
707
|
+
"reflectivityThreshold",
|
|
581
708
|
], ["textureSampler", "normalSampler", "reflectivitySampler", "depthSampler", "envCubeSampler", "backDepthSampler"], 1.0, null, this._textureType, this._scene.getEngine(), false, "", this._textureType);
|
|
582
709
|
this._updateEffectDefines();
|
|
583
710
|
this._ssrPostProcess.onApply = (effect) => {
|
|
@@ -603,7 +730,7 @@ export class SSRRenderingPipeline extends PostProcessRenderPipeline {
|
|
|
603
730
|
}
|
|
604
731
|
if (this._enableAutomaticThicknessComputation && this._depthRenderer) {
|
|
605
732
|
effect.setTexture("backDepthSampler", this._depthRenderer.getDepthMap());
|
|
606
|
-
effect.setFloat("backSizeFactor", this.
|
|
733
|
+
effect.setFloat("backSizeFactor", this._backfaceDepthTextureDownsample + 1);
|
|
607
734
|
}
|
|
608
735
|
const camera = this._scene.activeCamera;
|
|
609
736
|
if (!camera) {
|
|
@@ -626,6 +753,7 @@ export class SSRRenderingPipeline extends PostProcessRenderPipeline {
|
|
|
626
753
|
effect.setFloat("nearPlaneZ", camera.minZ);
|
|
627
754
|
effect.setFloat("maxDistance", this.maxDistance);
|
|
628
755
|
effect.setFloat("selfCollisionNumSkip", this.selfCollisionNumSkip);
|
|
756
|
+
effect.setFloat("reflectivityThreshold", this.reflectivityThreshold);
|
|
629
757
|
const textureSize = this._getTextureSize();
|
|
630
758
|
Matrix.ScalingToRef(textureSize.width, textureSize.height, 1, TmpVectors.Matrix[2]);
|
|
631
759
|
projectionMatrix.multiplyToRef(this._scene.getEngine().isWebGPU ? trsWebGPU : trs, TmpVectors.Matrix[3]);
|
|
@@ -646,59 +774,47 @@ export class SSRRenderingPipeline extends PostProcessRenderPipeline {
|
|
|
646
774
|
}
|
|
647
775
|
_createBlurAndCombinerPostProcesses() {
|
|
648
776
|
const engine = this._scene.getEngine();
|
|
649
|
-
this._blurPostProcessX = new PostProcess("SSRblurX", "screenSpaceReflection2Blur", ["
|
|
777
|
+
this._blurPostProcessX = new PostProcess("SSRblurX", "screenSpaceReflection2Blur", ["texelOffsetScale"], ["textureSampler"], this._useBlur() ? 1 / (this._ssrDownsample + 1) : 1, null, 2, engine, false, "", this._textureType);
|
|
650
778
|
this._blurPostProcessX.autoClear = false;
|
|
651
779
|
this._blurPostProcessX.onApplyObservable.add((effect) => {
|
|
652
780
|
var _a, _b;
|
|
653
|
-
|
|
654
|
-
if (this._prePassRenderer) {
|
|
655
|
-
const colorIndex = this._prePassRenderer.getIndex(4);
|
|
656
|
-
const renderTarget = this._prePassRenderer.getRenderTarget();
|
|
657
|
-
if (renderTarget && renderTarget.textures) {
|
|
658
|
-
width = renderTarget.textures[colorIndex].getSize().width;
|
|
659
|
-
}
|
|
660
|
-
}
|
|
661
|
-
else {
|
|
662
|
-
width = (_b = (_a = this._ssrPostProcess) === null || _a === void 0 ? void 0 : _a.inputTexture.width) !== null && _b !== void 0 ? _b : width;
|
|
663
|
-
}
|
|
664
|
-
effect.setFloat("blurQuality", this.blurQuality);
|
|
781
|
+
const width = (_b = (_a = this._blurPostProcessX) === null || _a === void 0 ? void 0 : _a.inputTexture.width) !== null && _b !== void 0 ? _b : this._scene.getEngine().getRenderWidth();
|
|
665
782
|
effect.setFloat2("texelOffsetScale", this._blurDispersionStrength / width, 0);
|
|
666
783
|
});
|
|
667
|
-
this._blurPostProcessY = new PostProcess("SSRblurY", "screenSpaceReflection2Blur", ["
|
|
784
|
+
this._blurPostProcessY = new PostProcess("SSRblurY", "screenSpaceReflection2Blur", ["texelOffsetScale"], ["textureSampler"], this._useBlur() ? 1 / (this._blurDownsample + 1) : 1, null, 2, engine, false, "", this._textureType);
|
|
668
785
|
this._blurPostProcessY.autoClear = false;
|
|
669
786
|
this._blurPostProcessY.onApplyObservable.add((effect) => {
|
|
670
787
|
var _a, _b;
|
|
671
|
-
|
|
672
|
-
if (this._prePassRenderer) {
|
|
673
|
-
const colorIndex = this._prePassRenderer.getIndex(4);
|
|
674
|
-
const renderTarget = this._prePassRenderer.getRenderTarget();
|
|
675
|
-
if (renderTarget && renderTarget.textures) {
|
|
676
|
-
height = renderTarget.textures[colorIndex].getSize().height;
|
|
677
|
-
}
|
|
678
|
-
}
|
|
679
|
-
else {
|
|
680
|
-
height = (_b = (_a = this._ssrPostProcess) === null || _a === void 0 ? void 0 : _a.inputTexture.height) !== null && _b !== void 0 ? _b : height;
|
|
681
|
-
}
|
|
682
|
-
effect.setFloat("blurQuality", this.blurQuality);
|
|
788
|
+
const height = (_b = (_a = this._blurPostProcessY) === null || _a === void 0 ? void 0 : _a.inputTexture.height) !== null && _b !== void 0 ? _b : this._scene.getEngine().getRenderHeight();
|
|
683
789
|
effect.setFloat2("texelOffsetScale", 0, this._blurDispersionStrength / height);
|
|
684
790
|
});
|
|
685
|
-
|
|
791
|
+
let defines = "";
|
|
792
|
+
if (this._debug) {
|
|
793
|
+
defines += "#define SSRAYTRACE_DEBUG\n";
|
|
794
|
+
}
|
|
795
|
+
if (this._inputTextureColorIsInGammaSpace) {
|
|
796
|
+
defines += "#define SSR_INPUT_IS_GAMMA_SPACE\n";
|
|
797
|
+
}
|
|
798
|
+
if (this._generateOutputInGammaSpace) {
|
|
799
|
+
defines += "#define SSR_OUTPUT_IS_GAMMA_SPACE\n";
|
|
800
|
+
}
|
|
801
|
+
this._blurCombinerPostProcess = new PostProcess("SSRblurCombiner", "screenSpaceReflection2BlurCombiner", ["strength", "reflectionSpecularFalloffExponent", "reflectivityThreshold"], ["textureSampler", "mainSampler", "reflectivitySampler"], this._useBlur() ? 1 / (this._blurDownsample + 1) : 1, null, 1, engine, false, defines, this._textureType);
|
|
686
802
|
this._blurCombinerPostProcess.autoClear = false;
|
|
687
803
|
this._blurCombinerPostProcess.onApplyObservable.add((effect) => {
|
|
804
|
+
var _a;
|
|
688
805
|
const geometryBufferRenderer = this._geometryBufferRenderer;
|
|
689
806
|
const prePassRenderer = this._prePassRenderer;
|
|
690
807
|
if (!prePassRenderer && !geometryBufferRenderer) {
|
|
691
808
|
return;
|
|
692
809
|
}
|
|
693
|
-
if (prePassRenderer) {
|
|
694
|
-
const colorIndex = prePassRenderer.getIndex(4);
|
|
810
|
+
if (prePassRenderer && ((_a = this._scene.activeCamera) === null || _a === void 0 ? void 0 : _a._getFirstPostProcess()) === this._ssrPostProcess) {
|
|
695
811
|
const renderTarget = prePassRenderer.getRenderTarget();
|
|
696
812
|
if (renderTarget && renderTarget.textures) {
|
|
697
|
-
effect.setTexture("mainSampler", renderTarget.textures[
|
|
813
|
+
effect.setTexture("mainSampler", renderTarget.textures[prePassRenderer.getIndex(4)]);
|
|
698
814
|
}
|
|
699
815
|
}
|
|
700
816
|
else {
|
|
701
|
-
effect.
|
|
817
|
+
effect.setTextureFromPostProcess("mainSampler", this._ssrPostProcess);
|
|
702
818
|
}
|
|
703
819
|
if (geometryBufferRenderer) {
|
|
704
820
|
const roughnessIndex = geometryBufferRenderer.getTextureIndex(GeometryBufferRenderer.REFLECTIVITY_TEXTURE_TYPE);
|
|
@@ -710,6 +826,7 @@ export class SSRRenderingPipeline extends PostProcessRenderPipeline {
|
|
|
710
826
|
}
|
|
711
827
|
effect.setFloat("strength", this.strength);
|
|
712
828
|
effect.setFloat("reflectionSpecularFalloffExponent", this.reflectionSpecularFalloffExponent);
|
|
829
|
+
effect.setFloat("reflectivityThreshold", this.reflectivityThreshold);
|
|
713
830
|
});
|
|
714
831
|
}
|
|
715
832
|
/**
|
|
@@ -759,12 +876,21 @@ __decorate([
|
|
|
759
876
|
__decorate([
|
|
760
877
|
serialize()
|
|
761
878
|
], SSRRenderingPipeline.prototype, "selfCollisionNumSkip", void 0);
|
|
879
|
+
__decorate([
|
|
880
|
+
serialize()
|
|
881
|
+
], SSRRenderingPipeline.prototype, "reflectivityThreshold", void 0);
|
|
882
|
+
__decorate([
|
|
883
|
+
serialize("_ssrDownsample")
|
|
884
|
+
], SSRRenderingPipeline.prototype, "_ssrDownsample", void 0);
|
|
885
|
+
__decorate([
|
|
886
|
+
serialize()
|
|
887
|
+
], SSRRenderingPipeline.prototype, "ssrDownsample", null);
|
|
762
888
|
__decorate([
|
|
763
889
|
serialize("blurDispersionStrength")
|
|
764
890
|
], SSRRenderingPipeline.prototype, "_blurDispersionStrength", void 0);
|
|
765
891
|
__decorate([
|
|
766
|
-
serialize()
|
|
767
|
-
], SSRRenderingPipeline.prototype, "
|
|
892
|
+
serialize("blurDownsample")
|
|
893
|
+
], SSRRenderingPipeline.prototype, "_blurDownsample", void 0);
|
|
768
894
|
__decorate([
|
|
769
895
|
serialize("enableSmoothReflections")
|
|
770
896
|
], SSRRenderingPipeline.prototype, "_enableSmoothReflections", void 0);
|
|
@@ -780,6 +906,9 @@ __decorate([
|
|
|
780
906
|
__decorate([
|
|
781
907
|
serialize("attenuateIntersectionDistance")
|
|
782
908
|
], SSRRenderingPipeline.prototype, "_attenuateIntersectionDistance", void 0);
|
|
909
|
+
__decorate([
|
|
910
|
+
serialize("attenuateIntersectionIterations")
|
|
911
|
+
], SSRRenderingPipeline.prototype, "_attenuateIntersectionIterations", void 0);
|
|
783
912
|
__decorate([
|
|
784
913
|
serialize("attenuateFacingCamera")
|
|
785
914
|
], SSRRenderingPipeline.prototype, "_attenuateFacingCamera", void 0);
|
|
@@ -793,11 +922,20 @@ __decorate([
|
|
|
793
922
|
serialize("enableAutomaticThicknessComputation")
|
|
794
923
|
], SSRRenderingPipeline.prototype, "_enableAutomaticThicknessComputation", void 0);
|
|
795
924
|
__decorate([
|
|
796
|
-
serialize("
|
|
797
|
-
], SSRRenderingPipeline.prototype, "
|
|
925
|
+
serialize("backfaceDepthTextureDownsample")
|
|
926
|
+
], SSRRenderingPipeline.prototype, "_backfaceDepthTextureDownsample", void 0);
|
|
927
|
+
__decorate([
|
|
928
|
+
serialize("backfaceForceDepthWriteTransparentMeshes")
|
|
929
|
+
], SSRRenderingPipeline.prototype, "_backfaceForceDepthWriteTransparentMeshes", void 0);
|
|
798
930
|
__decorate([
|
|
799
931
|
serialize("isEnabled")
|
|
800
932
|
], SSRRenderingPipeline.prototype, "_isEnabled", void 0);
|
|
933
|
+
__decorate([
|
|
934
|
+
serialize("inputTextureColorIsInGammaSpace")
|
|
935
|
+
], SSRRenderingPipeline.prototype, "_inputTextureColorIsInGammaSpace", void 0);
|
|
936
|
+
__decorate([
|
|
937
|
+
serialize("generateOutputInGammaSpace")
|
|
938
|
+
], SSRRenderingPipeline.prototype, "_generateOutputInGammaSpace", void 0);
|
|
801
939
|
__decorate([
|
|
802
940
|
serialize("debug")
|
|
803
941
|
], SSRRenderingPipeline.prototype, "_debug", void 0);
|