babylonjs-editor-tools 5.5.0 → 5.5.1-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (38) hide show
  1. package/build/index.node.js +2330 -1
  2. package/build/src/index.js +4 -0
  3. package/build/src/index.js.map +1 -1
  4. package/build/src/loading/loader.js +7 -2
  5. package/build/src/loading/loader.js.map +1 -1
  6. package/build/src/loading/mesh.js +22 -0
  7. package/build/src/loading/mesh.js.map +1 -0
  8. package/build/src/loading/rendering.js +4 -0
  9. package/build/src/loading/rendering.js.map +1 -1
  10. package/build/src/loading/transform-node.js +4 -1
  11. package/build/src/loading/transform-node.js.map +1 -1
  12. package/build/src/rendering/tools.js +7 -0
  13. package/build/src/rendering/tools.js.map +1 -1
  14. package/build/src/rendering/volumetric/pipeline.js +915 -0
  15. package/build/src/rendering/volumetric/pipeline.js.map +1 -0
  16. package/build/src/rendering/volumetric/selector.js +525 -0
  17. package/build/src/rendering/volumetric/selector.js.map +1 -0
  18. package/build/src/rendering/volumetric/shaders-wgsl.js +1207 -0
  19. package/build/src/rendering/volumetric/shaders-wgsl.js.map +1 -0
  20. package/build/src/rendering/volumetric/shaders.js +1293 -0
  21. package/build/src/rendering/volumetric/shaders.js.map +1 -0
  22. package/build/src/rendering/volumetric/types.js +301 -0
  23. package/build/src/rendering/volumetric/types.js.map +1 -0
  24. package/build/src/rendering/volumetric-lighting.js +72 -0
  25. package/build/src/rendering/volumetric-lighting.js.map +1 -0
  26. package/build/src/tools/guards.js +14 -0
  27. package/build/src/tools/guards.js.map +1 -1
  28. package/declaration/src/index.d.ts +4 -0
  29. package/declaration/src/loading/mesh.d.ts +1 -0
  30. package/declaration/src/rendering/tools.d.ts +1 -0
  31. package/declaration/src/rendering/volumetric/pipeline.d.ts +231 -0
  32. package/declaration/src/rendering/volumetric/selector.d.ts +263 -0
  33. package/declaration/src/rendering/volumetric/shaders-wgsl.d.ts +21 -0
  34. package/declaration/src/rendering/volumetric/shaders.d.ts +60 -0
  35. package/declaration/src/rendering/volumetric/types.d.ts +362 -0
  36. package/declaration/src/rendering/volumetric-lighting.d.ts +28 -0
  37. package/declaration/src/tools/guards.d.ts +12 -0
  38. package/package.json +1 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pipeline.js","sourceRoot":"","sources":["../../../../src/rendering/volumetric/pipeline.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,525 @@
1
+ import { Vector3 } from "@babylonjs/core/Maths/math.vector";
2
+ import { Frustum } from "@babylonjs/core/Maths/math.frustum";
3
+ import { Constants } from "@babylonjs/core/Engines/constants";
4
+ import { ShadowGenerator } from "@babylonjs/core/Lights/Shadows/shadowGenerator";
5
+ import { isCascadedShadowGenerator, isShadowGenerator, isClusteredLightContainer, isDirectionalLight, isHemisphericLight, isPointLight, isSpotLight } from "../../tools/guards";
6
+ import { getVolumetricLightConfiguration, maxVolumetricArrayLights, maxVolumetricDirectionalLights, maxVolumetricShadowSlots, } from "./types";
7
+ /**
8
+ * Defines the type of sampler needed to read the shadow map of a light.
9
+ */
10
+ export var VolumetricShadowKind;
11
+ (function (VolumetricShadowKind) {
12
+ /**
13
+ * Regular 2d texture storing the depth encoded in its color channels.
14
+ */
15
+ VolumetricShadowKind[VolumetricShadowKind["Texture2D"] = 0] = "Texture2D";
16
+ /**
17
+ * Hardware comparison sampler, used by the percentage closer filtering.
18
+ */
19
+ VolumetricShadowKind[VolumetricShadowKind["Sampler2DShadow"] = 1] = "Sampler2DShadow";
20
+ /**
21
+ * Cube texture storing the radial distance to the light, used by point lights.
22
+ */
23
+ VolumetricShadowKind[VolumetricShadowKind["Cube"] = 2] = "Cube";
24
+ })(VolumetricShadowKind || (VolumetricShadowKind = {}));
25
+ /**
26
+ * Defines how the value stored in a shadow map must be interpreted.
27
+ */
28
+ export var VolumetricShadowMode;
29
+ (function (VolumetricShadowMode) {
30
+ /**
31
+ * The shadow map stores the depth, the comparison is a simple "greater than".
32
+ */
33
+ VolumetricShadowMode[VolumetricShadowMode["Standard"] = 0] = "Standard";
34
+ /**
35
+ * The shadow map stores the exponential of the depth.
36
+ */
37
+ VolumetricShadowMode[VolumetricShadowMode["Esm"] = 1] = "Esm";
38
+ /**
39
+ * The shadow map stores the exponential of the depth, compared in the "close" space.
40
+ */
41
+ VolumetricShadowMode[VolumetricShadowMode["CloseEsm"] = 2] = "CloseEsm";
42
+ })(VolumetricShadowMode || (VolumetricShadowMode = {}));
43
+ /**
44
+ * Defines how the transmittance of the medium is evaluated by the raymarching shader.
45
+ */
46
+ export var VolumetricTransmittanceMode;
47
+ (function (VolumetricTransmittanceMode) {
48
+ /**
49
+ * Closed form of the three fog modes, for a medium whose density doesn't depend on the altitude.
50
+ */
51
+ VolumetricTransmittanceMode[VolumetricTransmittanceMode["Analytic"] = 0] = "Analytic";
52
+ /**
53
+ * Closed form of the exponential fog mode combined with the height falloff.
54
+ */
55
+ VolumetricTransmittanceMode[VolumetricTransmittanceMode["AnalyticHeight"] = 1] = "AnalyticHeight";
56
+ /**
57
+ * Optical depth integrated numerically along the view ray, for the other fog modes combined with the
58
+ * height falloff, which have no closed form.
59
+ */
60
+ VolumetricTransmittanceMode[VolumetricTransmittanceMode["Numeric"] = 2] = "Numeric";
61
+ })(VolumetricTransmittanceMode || (VolumetricTransmittanceMode = {}));
62
+ /**
63
+ * Defines how many uniform vectors each kind of light costs in the raymarching shader.
64
+ */
65
+ const shadowedLightVectorCost = 10;
66
+ const arrayLightVectorCost = 4;
67
+ const csmVectorCost = 6 + 4 * 4;
68
+ /**
69
+ * Defines how many uniform vectors are used by the camera, the medium and the fog, plus some headroom for the driver.
70
+ */
71
+ const fixedVectorCost = 32;
72
+ /**
73
+ * Defines the fraction of its own score a light already owning a shadowed slot gets as a bonus, which is
74
+ * how much a challenger has to beat it by to take the slot over.
75
+ */
76
+ const volumetricSlotHysteresis = 0.15;
77
+ /**
78
+ * Computes the number of lights the raymarching shader can be compiled for, from the real capabilities
79
+ * of the engine rather than from a hardcoded guess.
80
+ * @param engine defines the reference to the engine to get its capabilities.
81
+ * @param configuration defines the configuration of the pipeline, used as an upper bound.
82
+ */
83
+ export function computeVolumetricBudget(engine, configuration) {
84
+ const caps = engine.getCaps();
85
+ // WebGPU reports the size of its uniform buffer in floats rather than in vec4, unlike WebGL 2 whose
86
+ // MAX_FRAGMENT_UNIFORM_VECTORS really is a vector count.
87
+ const reportedVectors = caps.maxFragmentUniformVectors || 224;
88
+ const availableVectors = engine.isWebGPU ? Math.floor(reportedVectors / 4) : reportedVectors;
89
+ const vectorBudget = Math.max(224, availableVectors) - fixedVectorCost;
90
+ // Only "textureSampler", which holds the linear depth of the scene, is always bound.
91
+ const samplerBudget = Math.max(8, caps.maxTexturesImageUnits || 16) - 1;
92
+ const allowCsm = samplerBudget >= 2;
93
+ const csmCost = allowCsm ? csmVectorCost : 0;
94
+ const maxShadowSlots = Math.max(0, Math.min(maxVolumetricShadowSlots, configuration.maxShadowedLights, samplerBudget - (allowCsm ? 1 : 0), Math.floor((vectorBudget - csmCost) / shadowedLightVectorCost)));
95
+ const maxArrayLights = Math.max(0, Math.min(maxVolumetricArrayLights, configuration.maxLights, Math.floor((vectorBudget - csmCost - maxShadowSlots * shadowedLightVectorCost) / arrayLightVectorCost)));
96
+ return {
97
+ maxShadowSlots,
98
+ maxArrayLights,
99
+ maxDirectionalLights: Math.min(maxVolumetricDirectionalLights, maxArrayLights),
100
+ allowCsm,
101
+ };
102
+ }
103
+ /**
104
+ * Returns the list of all the lights of the scene, including the ones that live inside a clustered light
105
+ * container. Adding a light to a container removes it from "scene.lights", so walking "scene.lights" alone
106
+ * misses exactly the lights this pipeline is meant to scale to.
107
+ * @param scene defines the reference to the scene to get its lights.
108
+ */
109
+ export function getAllVolumetricCandidateLights(scene) {
110
+ const result = [];
111
+ scene.lights.forEach((light) => {
112
+ if (isClusteredLightContainer(light)) {
113
+ light.lights.forEach((clusteredLight) => {
114
+ result.push({ light: clusteredLight, isClustered: true });
115
+ });
116
+ }
117
+ else {
118
+ result.push({ light, isClustered: false });
119
+ }
120
+ });
121
+ return result;
122
+ }
123
+ /**
124
+ * Returns the shadow generator of the given light classified for the raymarching shader, or null when the
125
+ * light has no shadow map that can be sampled by the volumetric pass.
126
+ * @param light defines the reference to the light to resolve its shadow map.
127
+ * @param scene defines the reference to the scene the light belongs to.
128
+ */
129
+ export function resolveVolumetricShadowSlot(light, scene) {
130
+ // Shadow generators can be scoped to a camera, the lookup without argument doesn't find those.
131
+ const generator = light.getShadowGenerator(scene.activeCamera) ?? light.getShadowGenerator();
132
+ if (!generator || !isShadowGenerator(generator)) {
133
+ return null;
134
+ }
135
+ const shadowMap = generator.getShadowMapForRendering();
136
+ if (!shadowMap?.isReady()) {
137
+ return null;
138
+ }
139
+ const mapSize = generator.getShadowMap()?.getSize().width ?? 1024;
140
+ const packed = shadowMap.textureType === Constants.TEXTURETYPE_UNSIGNED_BYTE;
141
+ const local = !isDirectionalLight(light);
142
+ const isCube = light.needCube?.() === true;
143
+ // The setter of "filter" silently downgrades the value when the engine doesn't support it, read it back.
144
+ switch (generator.filter) {
145
+ case ShadowGenerator.FILTER_PCF:
146
+ case ShadowGenerator.FILTER_PCSS:
147
+ // Percentage closer soft shadows are downgraded to percentage closer filtering: a blocker search
148
+ // per step of the raymarching is not affordable, and the march already averages dozens of samples.
149
+ // A cube shadow map has no hardware comparison sampler, it keeps the regular decoding.
150
+ return {
151
+ generator,
152
+ kind: isCube ? VolumetricShadowKind.Cube : VolumetricShadowKind.Sampler2DShadow,
153
+ mode: VolumetricShadowMode.Standard,
154
+ packed,
155
+ mapSize,
156
+ local,
157
+ };
158
+ case ShadowGenerator.FILTER_EXPONENTIALSHADOWMAP:
159
+ case ShadowGenerator.FILTER_BLUREXPONENTIALSHADOWMAP:
160
+ return { generator, kind: isCube ? VolumetricShadowKind.Cube : VolumetricShadowKind.Texture2D, mode: VolumetricShadowMode.Esm, packed, mapSize, local };
161
+ case ShadowGenerator.FILTER_CLOSEEXPONENTIALSHADOWMAP:
162
+ case ShadowGenerator.FILTER_BLURCLOSEEXPONENTIALSHADOWMAP:
163
+ return { generator, kind: isCube ? VolumetricShadowKind.Cube : VolumetricShadowKind.Texture2D, mode: VolumetricShadowMode.CloseEsm, packed, mapSize, local };
164
+ default:
165
+ return { generator, kind: isCube ? VolumetricShadowKind.Cube : VolumetricShadowKind.Texture2D, mode: VolumetricShadowMode.Standard, packed, mapSize, local };
166
+ }
167
+ }
168
+ /**
169
+ * Returns the world position of the given light, taking its parent into account.
170
+ * @param light defines the reference to the light to get its position.
171
+ * @param result defines the vector the position is written to.
172
+ */
173
+ export function getVolumetricLightWorldPosition(light, result) {
174
+ const anyLight = light;
175
+ if (anyLight.computeTransformedInformation?.() && anyLight.transformedPosition) {
176
+ result.copyFrom(anyLight.transformedPosition);
177
+ }
178
+ else if (anyLight.position) {
179
+ result.copyFrom(anyLight.position);
180
+ }
181
+ else {
182
+ result.copyFromFloats(0, 0, 0);
183
+ }
184
+ return result;
185
+ }
186
+ /**
187
+ * Returns the normalized world direction of the given light, taking its parent into account.
188
+ * @param light defines the reference to the light to get its direction.
189
+ * @param result defines the vector the direction is written to.
190
+ */
191
+ export function getVolumetricLightWorldDirection(light, result) {
192
+ const anyLight = light;
193
+ if (anyLight.computeTransformedInformation?.() && anyLight.transformedDirection) {
194
+ result.copyFrom(anyLight.transformedDirection);
195
+ }
196
+ else if (anyLight.direction) {
197
+ result.copyFrom(anyLight.direction);
198
+ }
199
+ else {
200
+ result.copyFromFloats(0, 0, 1);
201
+ }
202
+ return result.normalize();
203
+ }
204
+ /**
205
+ * Returns the radius of the volume reached by the given light, as used by the raymarching shader.
206
+ * "Light.range" defaults to Number.MAX_VALUE, anything past the reach of the march means no attenuation at all.
207
+ * @param light defines the reference to the light to get its radius.
208
+ * @param config defines the volumetric configuration of the light.
209
+ * @param configuration defines the configuration of the pipeline.
210
+ */
211
+ export function getVolumetricLightRange(light, config, configuration) {
212
+ const range = light.range > 0 && light.range < Number.MAX_VALUE ? light.range : configuration.maxDistance;
213
+ return Math.max(1e-3, Math.min(range * config.rangeMultiplier, 3.4e38));
214
+ }
215
+ const temporaryPosition = new Vector3();
216
+ const temporaryDirection = new Vector3();
217
+ /**
218
+ * Computes the sphere bounding the volume the given light can reach. A spot light only reaches the cone
219
+ * that starts at its position, whose bounding sphere is much smaller than the sphere of its range.
220
+ * @param light defines the reference to the light to bound.
221
+ * @param range defines the radius of the volume reached by the light.
222
+ * @param center defines the vector the center of the sphere is written to.
223
+ * @returns the radius of the sphere.
224
+ */
225
+ function computeVolumetricLightBounds(light, range, center) {
226
+ getVolumetricLightWorldPosition(light, center);
227
+ if (!isSpotLight(light)) {
228
+ return range;
229
+ }
230
+ // The smallest sphere containing the cone of half angle "a" cut by the sphere of the range is centered on
231
+ // the axis, at "range / (2 cos(a))" of the apex, as long as that is closer than the range itself.
232
+ const cosHalfAngle = Math.cos(light.angle * 0.5);
233
+ if (cosHalfAngle <= 0.5) {
234
+ return range;
235
+ }
236
+ const radius = range / (2 * cosHalfAngle);
237
+ getVolumetricLightWorldDirection(light, temporaryDirection);
238
+ center.addInPlace(temporaryDirection.scaleInPlace(radius));
239
+ return radius;
240
+ }
241
+ /**
242
+ * Returns wether or not the sphere of influence of a light intersects the frustum of the camera.
243
+ * @param center defines the center of the sphere, in world space.
244
+ * @param radius defines the radius of the sphere.
245
+ * @param planes defines the six planes of the frustum of the camera.
246
+ */
247
+ function isSphereInFrustum(center, radius, planes) {
248
+ // The normals returned by "Frustum.GetPlanes" point inwards, so a point inside gives a positive
249
+ // distance. This is the same test as "BoundingSphere.isInFrustum".
250
+ for (let i = 0; i < planes.length; ++i) {
251
+ if (planes[i].dotCoordinate(center) <= -radius) {
252
+ return false;
253
+ }
254
+ }
255
+ return true;
256
+ }
257
+ /**
258
+ * Returns a number identifying the code the raymarching shader needs to read the given shadow map.
259
+ */
260
+ function getShadowSlotSignature(shadow) {
261
+ return (shadow.local ? 64 : 0) + shadow.kind * 16 + shadow.mode * 4 + (shadow.packed ? 1 : 0);
262
+ }
263
+ /**
264
+ * Selects the lights of the scene that contribute to the volumetric lighting for the given camera, splits
265
+ * them between the shadowed and the unshadowed tiers of the shader and reports why each one ended where it did.
266
+ * @param scene defines the reference to the scene to select the lights from.
267
+ * @param camera defines the reference to the camera the pipeline is attached to.
268
+ * @param configuration defines the configuration of the pipeline.
269
+ * @param budget defines the number of lights the shader can be compiled for.
270
+ * @param previous defines the result of the previous selection pass, used to keep the slots stable over time.
271
+ */
272
+ export function selectVolumetricLights(scene, camera, configuration, budget, previous) {
273
+ const stats = {
274
+ candidateCount: 0,
275
+ culledCount: 0,
276
+ shadowedCount: 0,
277
+ unshadowedCount: 0,
278
+ droppedCount: 0,
279
+ perLight: new Map(),
280
+ };
281
+ const frustumPlanes = Frustum.GetPlanes(scene.getTransformMatrix());
282
+ const cameraPosition = camera.globalPosition;
283
+ const candidates = [];
284
+ getAllVolumetricCandidateLights(scene).forEach(({ light, isClustered }) => {
285
+ const config = getVolumetricLightConfiguration(light);
286
+ if (!config?.enabled) {
287
+ return;
288
+ }
289
+ stats.candidateCount++;
290
+ if (isHemisphericLight(light) || !light.isEnabled() || light.intensity <= 0 || config.volumeIntensity <= 0) {
291
+ stats.perLight.set(light.uniqueId, {
292
+ state: "disabled",
293
+ slot: -1,
294
+ reason: isHemisphericLight(light)
295
+ ? "Hemispheric lights have no position nor direction and can't produce light shafts."
296
+ : "The light is disabled or its intensity is zero.",
297
+ });
298
+ return;
299
+ }
300
+ const isDirectional = isDirectionalLight(light);
301
+ let score = config.priority * 1e3;
302
+ if (isDirectional) {
303
+ // A directional light lights the whole scene, it is always the most important contributor.
304
+ score += 1e6;
305
+ }
306
+ else {
307
+ const range = Math.min(getVolumetricLightRange(light, config, configuration), configuration.maxDistance);
308
+ const radius = computeVolumetricLightBounds(light, range, temporaryPosition);
309
+ if (!isSphereInFrustum(temporaryPosition, radius, frustumPlanes)) {
310
+ stats.culledCount++;
311
+ stats.perLight.set(light.uniqueId, {
312
+ state: "culled",
313
+ slot: -1,
314
+ reason: "The light is outside of the frustum of the camera and doesn't reach it.",
315
+ });
316
+ return;
317
+ }
318
+ const distance = Math.max(1, Vector3.Distance(temporaryPosition, cameraPosition) - radius);
319
+ score += config.volumeIntensity * light.intensity * Math.min(4, radius / distance);
320
+ }
321
+ candidates.push({
322
+ light,
323
+ config,
324
+ isClustered,
325
+ typeId: light.getTypeID(),
326
+ score,
327
+ });
328
+ });
329
+ candidates.sort((a, b) => b.score - a.score);
330
+ // A light that already owns a shadowed slot keeps it unless a challenger is clearly better. Without this
331
+ // hysteresis, two lights with close scores would swap slots every frame and recompile the shader each time.
332
+ const previousSlots = new Map();
333
+ previous?.shadowed.forEach((entry, index) => {
334
+ previousSlots.set(entry.candidate.light.uniqueId, index);
335
+ });
336
+ const shadowedCandidates = [];
337
+ const unshadowedCandidates = [];
338
+ // Explains why each light of the unshadowed tier doesn't use a shadow map, written as the lights are
339
+ // classified so the shadow map of each light is only resolved once per selection.
340
+ const unshadowedReasons = new Map();
341
+ let csm = null;
342
+ candidates.forEach((candidate) => {
343
+ const { light, config } = candidate;
344
+ if (!config.castVolumetricShadows) {
345
+ unshadowedReasons.set(light.uniqueId, "occlusion is disabled on this light.");
346
+ unshadowedCandidates.push(candidate);
347
+ return;
348
+ }
349
+ if (candidate.isClustered) {
350
+ unshadowedReasons.set(light.uniqueId, "clustered lighting doesn't support shadow maps.");
351
+ unshadowedCandidates.push(candidate);
352
+ return;
353
+ }
354
+ if (!light.shadowEnabled || !scene.shadowsEnabled) {
355
+ unshadowedReasons.set(light.uniqueId, "shadows are disabled on this light or on the scene.");
356
+ unshadowedCandidates.push(candidate);
357
+ return;
358
+ }
359
+ const generator = light.getShadowGenerator(scene.activeCamera) ?? light.getShadowGenerator();
360
+ if (!generator) {
361
+ unshadowedReasons.set(light.uniqueId, "the light has no shadow generator.");
362
+ unshadowedCandidates.push(candidate);
363
+ return;
364
+ }
365
+ if (isCascadedShadowGenerator(generator) && budget.allowCsm) {
366
+ const shadowMap = generator.getShadowMapForRendering();
367
+ if (!csm && shadowMap?.isReady()) {
368
+ csm = {
369
+ candidate,
370
+ generator,
371
+ cascades: generator.numCascades,
372
+ kind: generator.filter === ShadowGenerator.FILTER_PCF || generator.filter === ShadowGenerator.FILTER_PCSS
373
+ ? VolumetricShadowKind.Sampler2DShadow
374
+ : VolumetricShadowKind.Texture2D,
375
+ packed: shadowMap.textureType === Constants.TEXTURETYPE_UNSIGNED_BYTE,
376
+ };
377
+ return;
378
+ }
379
+ unshadowedReasons.set(light.uniqueId, csm ? "another light already uses the single cascaded shadow map slot." : "its cascaded shadow map is not ready yet.");
380
+ unshadowedCandidates.push(candidate);
381
+ return;
382
+ }
383
+ const shadow = resolveVolumetricShadowSlot(light, scene);
384
+ if (!shadow) {
385
+ unshadowedReasons.set(light.uniqueId, "the shadow map of the light is not ready yet.");
386
+ unshadowedCandidates.push(candidate);
387
+ return;
388
+ }
389
+ shadowedCandidates.push({ candidate, shadow });
390
+ });
391
+ // A light that already owns a shadowed slot gets a bonus, so a challenger only takes the slot when it
392
+ // is clearly better. Without it two lights with close scores would swap every frame and the shader
393
+ // would be recompiled every frame.
394
+ function getHysteresisScore(entry) {
395
+ const score = entry.candidate.score;
396
+ if (previousSlots.get(entry.candidate.light.uniqueId) === undefined) {
397
+ return score;
398
+ }
399
+ // Additive so it stays a bonus for the negative scores a negative priority produces.
400
+ return score + Math.abs(score) * volumetricSlotHysteresis;
401
+ }
402
+ function getPreviousSlot(entry) {
403
+ return previousSlots.get(entry.candidate.light.uniqueId) ?? Number.MAX_SAFE_INTEGER;
404
+ }
405
+ shadowedCandidates.sort((a, b) => {
406
+ const difference = getHysteresisScore(b) - getHysteresisScore(a);
407
+ if (difference !== 0) {
408
+ return difference;
409
+ }
410
+ // Equal scores keep their previous slot, which keeps the generated shader identical.
411
+ return getPreviousSlot(a) - getPreviousSlot(b);
412
+ });
413
+ const shadowed = shadowedCandidates.slice(0, budget.maxShadowSlots);
414
+ // The code of each slot of the shader only depends on the kind of shadow map it reads, so ordering the
415
+ // slots by kind makes the shader depend on how many shadow maps of each kind there are rather than on
416
+ // which light uses which slot. Swapping two lights of the same kind then never recompiles anything.
417
+ shadowed.sort((a, b) => getShadowSlotSignature(a.shadow) - getShadowSlotSignature(b.shadow) || getPreviousSlot(a) - getPreviousSlot(b));
418
+ // Lights that don't fit in the shadowed tier fall back to the unshadowed one instead of disappearing.
419
+ shadowedCandidates.slice(budget.maxShadowSlots).forEach((entry) => {
420
+ unshadowedReasons.set(entry.candidate.light.uniqueId, "the shadowed lights budget is full.");
421
+ unshadowedCandidates.push(entry.candidate);
422
+ });
423
+ unshadowedCandidates.sort((a, b) => b.score - a.score);
424
+ // Directional lights light the whole view ray and are marched along it, the point and spot lights are
425
+ // integrated over their own volume only. Both live in the same arrays, the directional ones first.
426
+ const directional = [];
427
+ const local = [];
428
+ const dropped = [];
429
+ unshadowedCandidates.forEach((candidate) => {
430
+ if (isDirectionalLight(candidate.light)) {
431
+ if (directional.length < budget.maxDirectionalLights) {
432
+ directional.push(candidate);
433
+ }
434
+ else {
435
+ dropped.push({
436
+ candidate,
437
+ reason: `Not rendered: at most ${budget.maxDirectionalLights} directional light(s) without a shadow map can take part in the effect.`,
438
+ });
439
+ }
440
+ }
441
+ else {
442
+ local.push(candidate);
443
+ }
444
+ });
445
+ const localCapacity = Math.max(0, budget.maxArrayLights - directional.length);
446
+ local.slice(localCapacity).forEach((candidate) => {
447
+ dropped.push({
448
+ candidate,
449
+ reason: 'Not rendered: the lights budget is full. Raise "Max Lights" or lower the priority of the other lights.',
450
+ });
451
+ });
452
+ const unshadowed = directional.concat(local.slice(0, localCapacity));
453
+ shadowed.forEach((entry, index) => {
454
+ stats.shadowedCount++;
455
+ stats.perLight.set(entry.candidate.light.uniqueId, {
456
+ state: "shadowed",
457
+ slot: index,
458
+ reason: `Casting volumetric shadows using slot ${index + 1} of ${budget.maxShadowSlots}.`,
459
+ });
460
+ });
461
+ if (csm) {
462
+ const csmSelection = csm;
463
+ stats.shadowedCount++;
464
+ stats.perLight.set(csmSelection.candidate.light.uniqueId, {
465
+ state: "shadowed",
466
+ slot: -1,
467
+ reason: `Casting volumetric shadows using its ${csmSelection.cascades} shadow cascades.`,
468
+ });
469
+ }
470
+ unshadowed.forEach((candidate) => {
471
+ stats.unshadowedCount++;
472
+ // Every light of this tier is occluded with the depth buffer instead of a shadow map when it asked
473
+ // for it, so the wording only has to explain why the shadow map isn't the one being used.
474
+ const occluded = candidate.config.castVolumetricShadows ? "Occluded using the depth buffer" : "Not occluded by the geometry";
475
+ const reason = unshadowedReasons.get(candidate.light.uniqueId) ?? "the light has no shadow map.";
476
+ stats.perLight.set(candidate.light.uniqueId, { state: "unshadowed", slot: -1, reason: `${occluded}: ${reason}` });
477
+ });
478
+ dropped.forEach(({ candidate, reason }) => {
479
+ stats.droppedCount++;
480
+ stats.perLight.set(candidate.light.uniqueId, { state: "dropped", slot: -1, reason });
481
+ });
482
+ return { shadowed, unshadowed, directionalCount: directional.length, csm, stats };
483
+ }
484
+ /**
485
+ * Computes a key that changes whenever the raymarching shader must be recompiled.
486
+ * @param selection defines the result of the last selection pass.
487
+ * @param configuration defines the configuration of the pipeline.
488
+ * @param environment defines the state of the engine and of the scene the shader depends on.
489
+ */
490
+ export function computeVolumetricShapeKey(selection, configuration, environment) {
491
+ const slots = selection.shadowed.map((entry) => `${entry.shadow.kind}.${entry.shadow.mode}.${entry.shadow.packed ? 1 : 0}.${entry.shadow.local ? 1 : 0}`).join("|");
492
+ const csm = selection.csm ? `${selection.csm.kind}.${selection.csm.cascades}.${selection.csm.packed ? 1 : 0}` : "-";
493
+ return [
494
+ configuration.steps,
495
+ environment.lightSteps,
496
+ configuration.stepDistribution,
497
+ configuration.ditherMode,
498
+ configuration.temporalJitter ? 1 : 0,
499
+ configuration.heightFogEnabled ? 1 : 0,
500
+ configuration.lightExtinctionEnabled ? 1 : 0,
501
+ configuration.pcfTaps,
502
+ configuration.blurRadius,
503
+ configuration.debugMode,
504
+ configuration.screenSpaceShadows ? configuration.screenSpaceShadowSteps : 0,
505
+ environment.fogMode,
506
+ environment.transmittance,
507
+ environment.depthMode,
508
+ environment.ldrEncode ? 1 : 0,
509
+ environment.reverseDepth ? 1 : 0,
510
+ environment.ndcHalfZ ? 1 : 0,
511
+ environment.linearDepthPacked ? 1 : 0,
512
+ environment.arrayLightCapacity,
513
+ selection.directionalCount,
514
+ slots,
515
+ csm,
516
+ ].join(",");
517
+ }
518
+ /**
519
+ * Returns wether or not the given light can be used by the volumetric lighting rendering pipeline.
520
+ * @param light defines the reference to the light to check.
521
+ */
522
+ export function isVolumetricLightSupported(light) {
523
+ return isPointLight(light) || isSpotLight(light) || isDirectionalLight(light);
524
+ }
525
+ //# sourceMappingURL=selector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"selector.js","sourceRoot":"","sources":["../../../../src/rendering/volumetric/selector.ts"],"names":[],"mappings":"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"}