@aura3d/rendering 4.3.7 → 4.5.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/dist/DepthPass.d.ts.map +1 -1
- package/dist/DepthPass.js +3 -2
- package/dist/DepthPass.js.map +1 -1
- package/dist/ForwardPass.d.ts +13 -0
- package/dist/ForwardPass.d.ts.map +1 -1
- package/dist/ForwardPass.js +64 -11
- package/dist/ForwardPass.js.map +1 -1
- package/dist/MaterialBinding.js +6 -2
- package/dist/MaterialBinding.js.map +1 -1
- package/dist/Renderer.d.ts +8 -0
- package/dist/Renderer.d.ts.map +1 -1
- package/dist/Renderer.js +37 -6
- package/dist/Renderer.js.map +1 -1
- package/dist/ShaderChunks.d.ts.map +1 -1
- package/dist/ShaderChunks.js +3 -1
- package/dist/ShaderChunks.js.map +1 -1
- package/dist/ShaderLibrary.d.ts.map +1 -1
- package/dist/ShaderLibrary.js +17 -5
- package/dist/ShaderLibrary.js.map +1 -1
- package/dist/ShaderLibraryCore.d.ts.map +1 -1
- package/dist/ShaderLibraryCore.js +2 -1
- package/dist/ShaderLibraryCore.js.map +1 -1
- package/dist/WebGL2Device.d.ts +16 -1
- package/dist/WebGL2Device.d.ts.map +1 -1
- package/dist/WebGL2Device.js +94 -37
- package/dist/WebGL2Device.js.map +1 -1
- package/dist/WebGL2StateCache.d.ts +22 -0
- package/dist/WebGL2StateCache.d.ts.map +1 -1
- package/dist/WebGL2StateCache.js +71 -42
- package/dist/WebGL2StateCache.js.map +1 -1
- package/dist/contracts/core.d.ts.map +1 -1
- package/dist/contracts/core.js +22 -2
- package/dist/contracts/core.js.map +1 -1
- package/dist/contracts/program.d.ts.map +1 -1
- package/dist/contracts/program.js +8 -1
- package/dist/contracts/program.js.map +1 -1
- package/dist/contracts/quality.d.ts +21 -0
- package/dist/contracts/quality.d.ts.map +1 -1
- package/dist/contracts/quality.js +5 -0
- package/dist/contracts/quality.js.map +1 -1
- package/dist/contracts/renderItem.d.ts +6 -0
- package/dist/contracts/renderItem.d.ts.map +1 -1
- package/dist/contracts/structuralMemo.d.ts +23 -0
- package/dist/contracts/structuralMemo.d.ts.map +1 -0
- package/dist/contracts/structuralMemo.js +81 -0
- package/dist/contracts/structuralMemo.js.map +1 -0
- package/dist/environment/EnvironmentCache.d.ts.map +1 -1
- package/dist/environment/EnvironmentCache.js +6 -1
- package/dist/environment/EnvironmentCache.js.map +1 -1
- package/dist/environment/FirstFrameGate.d.ts +23 -0
- package/dist/environment/FirstFrameGate.d.ts.map +1 -0
- package/dist/environment/FirstFrameGate.js +58 -0
- package/dist/environment/FirstFrameGate.js.map +1 -0
- package/dist/environment/Rgb9e5Cube.d.ts.map +1 -1
- package/dist/environment/Rgb9e5Cube.js +8 -4
- package/dist/environment/Rgb9e5Cube.js.map +1 -1
- package/dist/environment/probeBuild.d.ts +29 -0
- package/dist/environment/probeBuild.d.ts.map +1 -1
- package/dist/environment/probeBuild.js +124 -45
- package/dist/environment/probeBuild.js.map +1 -1
- package/dist/forward/Lighting.d.ts +11 -3
- package/dist/forward/Lighting.d.ts.map +1 -1
- package/dist/forward/Lighting.js +25 -15
- package/dist/forward/Lighting.js.map +1 -1
- package/dist/forward/contactShadowMaskStore.d.ts +41 -0
- package/dist/forward/contactShadowMaskStore.d.ts.map +1 -0
- package/dist/forward/contactShadowMaskStore.js +85 -0
- package/dist/forward/contactShadowMaskStore.js.map +1 -0
- package/dist/geometry/Shape.d.ts.map +1 -1
- package/dist/geometry/Shape.js +7 -2
- package/dist/geometry/Shape.js.map +1 -1
- package/dist/geometry/Support.d.ts +4 -0
- package/dist/geometry/Support.d.ts.map +1 -1
- package/dist/geometry/Support.js +3 -2
- package/dist/geometry/Support.js.map +1 -1
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -0
- package/dist/index.js.map +1 -1
- package/dist/passes/ContactShadowPass.d.ts +40 -3
- package/dist/passes/ContactShadowPass.d.ts.map +1 -1
- package/dist/passes/ContactShadowPass.js +73 -13
- package/dist/passes/ContactShadowPass.js.map +1 -1
- package/dist/passes/Prd02ContactShadowsContributor.d.ts +19 -0
- package/dist/passes/Prd02ContactShadowsContributor.d.ts.map +1 -1
- package/dist/passes/Prd02ContactShadowsContributor.js +179 -28
- package/dist/passes/Prd02ContactShadowsContributor.js.map +1 -1
- package/dist/program/ProgramFeatures.d.ts +6 -0
- package/dist/program/ProgramFeatures.d.ts.map +1 -1
- package/dist/program/ProgramFeatures.js +11 -5
- package/dist/program/ProgramFeatures.js.map +1 -1
- package/dist/program/ProgramGenerator.d.ts +6 -0
- package/dist/program/ProgramGenerator.d.ts.map +1 -1
- package/dist/program/ProgramGenerator.js +36 -1
- package/dist/program/ProgramGenerator.js.map +1 -1
- package/dist/program/ProgramKey.d.ts.map +1 -1
- package/dist/program/ProgramKey.js +4 -1
- package/dist/program/ProgramKey.js.map +1 -1
- package/dist/program/chunks/shadow_forward.glsl.d.ts +1 -1
- package/dist/program/chunks/shadow_forward.glsl.d.ts.map +1 -1
- package/dist/program/chunks/shadow_forward.glsl.js +4 -1
- package/dist/program/chunks/shadow_forward.glsl.js.map +1 -1
- package/dist/quality/DirectPath.d.ts +43 -0
- package/dist/quality/DirectPath.d.ts.map +1 -0
- package/dist/quality/DirectPath.js +42 -0
- package/dist/quality/DirectPath.js.map +1 -0
- package/dist/renderer/Background.d.ts +0 -5
- package/dist/renderer/Background.d.ts.map +1 -1
- package/dist/renderer/Background.js +25 -2
- package/dist/renderer/Background.js.map +1 -1
- package/dist/renderer/InstanceFrustumCull.d.ts +39 -0
- package/dist/renderer/InstanceFrustumCull.d.ts.map +1 -0
- package/dist/renderer/InstanceFrustumCull.js +127 -0
- package/dist/renderer/InstanceFrustumCull.js.map +1 -0
- package/dist/renderer/ShadowOrchestration.d.ts +2 -0
- package/dist/renderer/ShadowOrchestration.d.ts.map +1 -1
- package/dist/renderer/ShadowOrchestration.js +1 -0
- package/dist/renderer/ShadowOrchestration.js.map +1 -1
- package/dist/renderer/coreOutputPostRoute.d.ts +0 -5
- package/dist/renderer/coreOutputPostRoute.d.ts.map +1 -1
- package/dist/renderer/coreOutputPostRoute.js +12 -2
- package/dist/renderer/coreOutputPostRoute.js.map +1 -1
- package/dist/resources/InstanceBuffer.d.ts +2 -0
- package/dist/resources/InstanceBuffer.d.ts.map +1 -1
- package/dist/resources/InstanceBuffer.js +23 -0
- package/dist/resources/InstanceBuffer.js.map +1 -1
- package/dist/shaders/chunks/contact_shadow.glsl.d.ts +11 -6
- package/dist/shaders/chunks/contact_shadow.glsl.d.ts.map +1 -1
- package/dist/shaders/chunks/contact_shadow.glsl.js +41 -19
- package/dist/shaders/chunks/contact_shadow.glsl.js.map +1 -1
- package/dist/shaders/chunks/contact_shadow_mask.glsl.d.ts +12 -0
- package/dist/shaders/chunks/contact_shadow_mask.glsl.d.ts.map +1 -0
- package/dist/shaders/chunks/contact_shadow_mask.glsl.js +21 -0
- package/dist/shaders/chunks/contact_shadow_mask.glsl.js.map +1 -0
- package/dist/shadows/CascadeUse.d.ts +28 -0
- package/dist/shadows/CascadeUse.d.ts.map +1 -0
- package/dist/shadows/CascadeUse.js +45 -0
- package/dist/shadows/CascadeUse.js.map +1 -0
- package/dist/shadows/Prd02DepthShaderLibrary.d.ts +7 -1
- package/dist/shadows/Prd02DepthShaderLibrary.d.ts.map +1 -1
- package/dist/shadows/Prd02DepthShaderLibrary.js +12 -3
- package/dist/shadows/Prd02DepthShaderLibrary.js.map +1 -1
- package/dist/shadows/Prd02ShadowBridge.d.ts +12 -1
- package/dist/shadows/Prd02ShadowBridge.d.ts.map +1 -1
- package/dist/shadows/Prd02ShadowBridge.js +17 -5
- package/dist/shadows/Prd02ShadowBridge.js.map +1 -1
- package/dist/shadows/ShadowFilterTier.d.ts +51 -0
- package/dist/shadows/ShadowFilterTier.d.ts.map +1 -0
- package/dist/shadows/ShadowFilterTier.js +89 -0
- package/dist/shadows/ShadowFilterTier.js.map +1 -0
- package/dist/shadows/ShadowSystem.d.ts +15 -0
- package/dist/shadows/ShadowSystem.d.ts.map +1 -1
- package/dist/shadows/ShadowSystem.js +12 -2
- package/dist/shadows/ShadowSystem.js.map +1 -1
- package/dist/shadows/shadowLegacy.d.ts +12 -0
- package/dist/shadows/shadowLegacy.d.ts.map +1 -1
- package/dist/shadows/shadowLegacy.js +24 -0
- package/dist/shadows/shadowLegacy.js.map +1 -1
- package/dist/webgl2/BloomFusion.d.ts +31 -0
- package/dist/webgl2/BloomFusion.d.ts.map +1 -0
- package/dist/webgl2/BloomFusion.js +25 -0
- package/dist/webgl2/BloomFusion.js.map +1 -0
- package/dist/webgl2/ContextLifecycle.d.ts +14 -0
- package/dist/webgl2/ContextLifecycle.d.ts.map +1 -1
- package/dist/webgl2/ContextLifecycle.js +30 -3
- package/dist/webgl2/ContextLifecycle.js.map +1 -1
- package/dist/webgl2/LegacyPost.d.ts +30 -0
- package/dist/webgl2/LegacyPost.d.ts.map +1 -1
- package/dist/webgl2/LegacyPost.js +259 -27
- package/dist/webgl2/LegacyPost.js.map +1 -1
- package/dist/webgl2/MultiDraw.d.ts.map +1 -1
- package/dist/webgl2/MultiDraw.js +9 -1
- package/dist/webgl2/MultiDraw.js.map +1 -1
- package/dist/webgl2/Samplers.d.ts +10 -1
- package/dist/webgl2/Samplers.d.ts.map +1 -1
- package/dist/webgl2/Samplers.js +24 -1
- package/dist/webgl2/Samplers.js.map +1 -1
- package/dist/webgl2/TextureFormats.d.ts +12 -0
- package/dist/webgl2/TextureFormats.d.ts.map +1 -1
- package/dist/webgl2/TextureFormats.js +16 -0
- package/dist/webgl2/TextureFormats.js.map +1 -1
- package/package.json +3 -3
package/dist/Renderer.js
CHANGED
|
@@ -36,6 +36,7 @@ import { prd11LiveQualityTier } from "./quality/liveTier.js";
|
|
|
36
36
|
import { MaterialInstance } from "./MaterialInstance.js";
|
|
37
37
|
import { featuresForGeometry, materialRoutesToGeneratedProgram } from "./program/MaterialFeatures.js";
|
|
38
38
|
import { selectShaderFeatureBits } from "./program/FeatureSelect.js";
|
|
39
|
+
import { PROGRAM_OUTPUT_SRGB_FEATURE } from "./program/ProgramFeatures.js";
|
|
39
40
|
import { collectWarmupFeatures, ProgramWarmup } from "./program/ProgramWarmup.js";
|
|
40
41
|
import { PRD03_EXPOSURE, rendererQrFlags, setRendererQrFlags, withRendererQrFlags } from "./renderer/FrameGraph.js";
|
|
41
42
|
import { consumeTaaHistoryWritten } from "./renderer/postSkipped.js";
|
|
@@ -48,6 +49,7 @@ import { ensureSceneDepthCopyTarget, SceneDepthCopyPass } from "./renderer/Scene
|
|
|
48
49
|
import { probeHdrTargetFormat, DEFAULT_TONE_MAPPING } from "./contracts/output.js";
|
|
49
50
|
import { resolveForwardClusteredLighting } from "./forward/Lighting.js";
|
|
50
51
|
import { assertRendererFeatures, createRendererFeatureReport } from "./RendererFeatureGates.js";
|
|
52
|
+
import { armFirstFrameGate, notifyFirstFramePresented } from "./environment/FirstFrameGate.js";
|
|
51
53
|
import { batchStaticRenderItems } from "./SceneOptimization.js";
|
|
52
54
|
import { createStaticMeshConsolidationCache } from "./MeshConsolidation.js";
|
|
53
55
|
/**
|
|
@@ -130,6 +132,10 @@ export class Renderer {
|
|
|
130
132
|
get postSkipped() {
|
|
131
133
|
return this.lastPostSkipped;
|
|
132
134
|
}
|
|
135
|
+
/** False when this renderer's flags pin the HDR-target/OutputPass route off (the direct canvas path). */
|
|
136
|
+
get outputPathActive() {
|
|
137
|
+
return qrCoreOutputOn(rendererQrFlags(this.device));
|
|
138
|
+
}
|
|
133
139
|
resolutionGovernor;
|
|
134
140
|
renderScaleCeiling = 1;
|
|
135
141
|
unsubscribeDprWatch;
|
|
@@ -139,6 +145,7 @@ export class Renderer {
|
|
|
139
145
|
probeGraph;
|
|
140
146
|
constructor(device, options, temporalHistory) {
|
|
141
147
|
this.device = device;
|
|
148
|
+
armFirstFrameGate();
|
|
142
149
|
if (options.qrFlags)
|
|
143
150
|
setRendererQrFlags(options.qrFlags, device);
|
|
144
151
|
this.temporalHistory = temporalHistory;
|
|
@@ -264,6 +271,7 @@ export class Renderer {
|
|
|
264
271
|
const cameraViewProjection = resolvedCamera?.viewProjectionMatrix;
|
|
265
272
|
const collected = collectRenderItemsWithDiagnostics(source, cameraViewProjection, resolvedCamera?.camera);
|
|
266
273
|
const before = this.device.getDiagnostics().programCompileCount ?? 0;
|
|
274
|
+
this.warmOutputSrgb = this.frameOutputsSrgb(source);
|
|
267
275
|
await this.warmGeneratedPrograms(collected.items, collectRenderLights(source), collectEnvironmentLighting(source), collectEnvironmentFog(source), collectForwardShadowMap(source), cameraViewProjection);
|
|
268
276
|
const after = this.device.getDiagnostics().programCompileCount ?? before;
|
|
269
277
|
return {
|
|
@@ -603,7 +611,8 @@ export class Renderer {
|
|
|
603
611
|
const shadowOptions = collectRendererShadowOptions(source);
|
|
604
612
|
// C-02/T0-06: sync-path warm — kick generated-program compiles for the
|
|
605
613
|
// exact draw feature records before the pass runs (bounded per frame).
|
|
606
|
-
this.
|
|
614
|
+
this.warmOutputSrgb = this.frameOutputsSrgb(source);
|
|
615
|
+
// The warm itself runs after the shadow step below: with renderer-owned shadows the program key's shadow axis only exists once the map does.
|
|
607
616
|
const sourceCameraPosition = collectSourceCameraPosition(source);
|
|
608
617
|
const explicitRenderTarget = collectRenderTarget(source);
|
|
609
618
|
validateExplicitRenderTarget(explicitRenderTarget);
|
|
@@ -719,7 +728,8 @@ export class Renderer {
|
|
|
719
728
|
ownedTargets,
|
|
720
729
|
ownedShadowPasses,
|
|
721
730
|
camera: resolvedCamera?.camera,
|
|
722
|
-
frameCamera: shadowFrameCamera(cameraViewProjection, cameraPosition)
|
|
731
|
+
frameCamera: shadowFrameCamera(cameraViewProjection, cameraPosition, resolvedCamera?.viewMatrix),
|
|
732
|
+
receivers: items
|
|
723
733
|
})) ?? explicitShadowMap ?? this.executeRendererShadowMap({
|
|
724
734
|
shadowOptions,
|
|
725
735
|
source,
|
|
@@ -728,9 +738,13 @@ export class Renderer {
|
|
|
728
738
|
ownedTargets,
|
|
729
739
|
ownedShadowPasses,
|
|
730
740
|
camera: resolvedCamera?.camera,
|
|
731
|
-
frameCamera: shadowFrameCamera(cameraViewProjection, cameraPosition)
|
|
741
|
+
frameCamera: shadowFrameCamera(cameraViewProjection, cameraPosition, resolvedCamera?.viewMatrix),
|
|
742
|
+
receivers: items
|
|
732
743
|
});
|
|
733
744
|
frameHooks.addPasses(this.graph, "shadows", items);
|
|
745
|
+
// C-02/T0-06 sync-path warm, keyed on the shadow map this frame actually draws with (warming before it existed compiled no-shadow
|
|
746
|
+
// variants nothing draws: 2 dead programs on a one-material scene, 4 with a skinned model).
|
|
747
|
+
this.warmGeneratedProgramsSync(items, lights, environmentLighting, environmentFog, rendererShadowMap, cameraViewProjection);
|
|
734
748
|
this.lastShadowEvidence = rendererShadowMap ? {
|
|
735
749
|
lightMatrix: Array.from(rendererShadowMap.lightMatrix),
|
|
736
750
|
cascades: rendererShadowMap.cascades?.map(c => ({ index: c.index, near: c.near, far: c.far, lightMatrix: Array.from(c.shadowMap.lightMatrix) })) ?? [],
|
|
@@ -935,6 +949,7 @@ export class Renderer {
|
|
|
935
949
|
}
|
|
936
950
|
}
|
|
937
951
|
this.submittedFrames += 1;
|
|
952
|
+
notifyFirstFramePresented();
|
|
938
953
|
this.submittedShadowFrameId += 1;
|
|
939
954
|
if (this.lastShadowEvidence)
|
|
940
955
|
this.lastShadowEvidence = { ...this.lastShadowEvidence, submissionFrameId: this.submittedShadowFrameId };
|
|
@@ -1002,6 +1017,7 @@ export class Renderer {
|
|
|
1002
1017
|
const shadowOptions = collectRendererShadowOptions(source);
|
|
1003
1018
|
// C-02 (PRD-01 §403): pre-render warm-then-block compile of the generated
|
|
1004
1019
|
// programs this scene needs. Flag-off: nothing (sync path untouched).
|
|
1020
|
+
this.warmOutputSrgb = this.frameOutputsSrgb(source);
|
|
1005
1021
|
await this.warmGeneratedPrograms(items, lights, environmentLighting, environmentFog, explicitShadowMap, cameraViewProjection);
|
|
1006
1022
|
if (this.disposed || this.device.disposed) {
|
|
1007
1023
|
return withRendererFrameDiagnostics(this.device.getDiagnostics(), collectionDiagnostics);
|
|
@@ -1121,7 +1137,8 @@ export class Renderer {
|
|
|
1121
1137
|
ownedTargets,
|
|
1122
1138
|
ownedShadowPasses,
|
|
1123
1139
|
camera: resolvedCamera?.camera,
|
|
1124
|
-
frameCamera: shadowFrameCamera(cameraViewProjection, cameraPosition)
|
|
1140
|
+
frameCamera: shadowFrameCamera(cameraViewProjection, cameraPosition, resolvedCamera?.viewMatrix),
|
|
1141
|
+
receivers: items
|
|
1125
1142
|
})) ?? explicitShadowMap ?? this.executeRendererShadowMap({
|
|
1126
1143
|
shadowOptions,
|
|
1127
1144
|
source,
|
|
@@ -1130,7 +1147,8 @@ export class Renderer {
|
|
|
1130
1147
|
ownedTargets,
|
|
1131
1148
|
ownedShadowPasses,
|
|
1132
1149
|
camera: resolvedCamera?.camera,
|
|
1133
|
-
frameCamera: shadowFrameCamera(cameraViewProjection, cameraPosition)
|
|
1150
|
+
frameCamera: shadowFrameCamera(cameraViewProjection, cameraPosition, resolvedCamera?.viewMatrix),
|
|
1151
|
+
receivers: items
|
|
1134
1152
|
});
|
|
1135
1153
|
frameHooks.addPasses(this.graph, "shadows", items);
|
|
1136
1154
|
this.lastShadowEvidence = rendererShadowMap ? {
|
|
@@ -1345,6 +1363,7 @@ export class Renderer {
|
|
|
1345
1363
|
}
|
|
1346
1364
|
}
|
|
1347
1365
|
this.submittedFrames += 1;
|
|
1366
|
+
notifyFirstFramePresented();
|
|
1348
1367
|
this.submittedShadowFrameId += 1;
|
|
1349
1368
|
if (this.lastShadowEvidence)
|
|
1350
1369
|
this.lastShadowEvidence = { ...this.lastShadowEvidence, submissionFrameId: this.submittedShadowFrameId };
|
|
@@ -1366,6 +1385,14 @@ export class Renderer {
|
|
|
1366
1385
|
* generated-program materials need (lights/shadow/environment axes at the
|
|
1367
1386
|
* current tier). Returns `materials: []` early when nothing generated.
|
|
1368
1387
|
*/
|
|
1388
|
+
/**
|
|
1389
|
+
* Whether the frame being warmed writes straight to the canvas (no postprocess, no OutputPass): its generated programs
|
|
1390
|
+
* carry the sRGB-encode feature bit, so the warmed keys match the draw keys. Set right before each warm call.
|
|
1391
|
+
*/
|
|
1392
|
+
warmOutputSrgb = false;
|
|
1393
|
+
frameOutputsSrgb(source) {
|
|
1394
|
+
return !collectPostprocess(source) && !qrCoreOutputOn(rendererQrFlags(this.device));
|
|
1395
|
+
}
|
|
1369
1396
|
collectWarmupInput(items, lights, environmentLighting, environmentFog, shadowMap, cameraViewProjection, flags, tier) {
|
|
1370
1397
|
const ctx = { flags, tier: QUALITY_TIERS[tier] };
|
|
1371
1398
|
// T0-05: one record per (material revision, selected feature bits) — the
|
|
@@ -1384,6 +1411,8 @@ export class Renderer {
|
|
|
1384
1411
|
if (selected[PRD02_IBL_FEATURE] !== undefined && !prd02IblEnvironmentAvailable(environmentLighting, item)) {
|
|
1385
1412
|
delete selected[PRD02_IBL_FEATURE];
|
|
1386
1413
|
}
|
|
1414
|
+
if (this.warmOutputSrgb)
|
|
1415
|
+
selected[PROGRAM_OUTPUT_SRGB_FEATURE] = true;
|
|
1387
1416
|
// #867 (games): same geometry-driven feature mask ForwardPass applies.
|
|
1388
1417
|
const attrs = item.geometry.vertexBuffer.format.attributes;
|
|
1389
1418
|
const has = (name) => attrs.some((a) => a.semantic === name || a.shaderName === name);
|
|
@@ -1402,7 +1431,9 @@ export class Renderer {
|
|
|
1402
1431
|
materials: [...records.values()],
|
|
1403
1432
|
lights: [axes.lights],
|
|
1404
1433
|
shadows: axes.shadows ? [axes.shadows] : [],
|
|
1405
|
-
environments: [axes.environment]
|
|
1434
|
+
environments: [axes.environment],
|
|
1435
|
+
// Nothing draws a generated `pass: "depth"` program: shadow casters render through the PRD-02 depth shaders.
|
|
1436
|
+
includeDepth: false
|
|
1406
1437
|
};
|
|
1407
1438
|
}
|
|
1408
1439
|
async warmGeneratedPrograms(items, lights, environmentLighting, environmentFog, shadowMap, cameraViewProjection) {
|