@fps-games/engine 0.0.1-beta.1 → 0.0.1-beta.10
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/asset-resource.d.ts +39 -0
- package/dist/asset-resource.d.ts.map +1 -0
- package/dist/asset-resource.js +121 -0
- package/dist/asset-resource.js.map +1 -0
- package/dist/babylon/camera.d.ts +25 -0
- package/dist/babylon/camera.d.ts.map +1 -0
- package/dist/babylon/camera.js +149 -0
- package/dist/babylon/camera.js.map +1 -0
- package/dist/babylon/frame-pump.d.ts +27 -0
- package/dist/babylon/frame-pump.d.ts.map +1 -0
- package/dist/babylon/frame-pump.js +90 -0
- package/dist/babylon/frame-pump.js.map +1 -0
- package/dist/babylon/game-world-plugin-lifecycle.d.ts +26 -0
- package/dist/babylon/game-world-plugin-lifecycle.d.ts.map +1 -0
- package/dist/babylon/game-world-plugin-lifecycle.js +257 -0
- package/dist/babylon/game-world-plugin-lifecycle.js.map +1 -0
- package/dist/babylon/lighting-controller.d.ts +27 -0
- package/dist/babylon/lighting-controller.d.ts.map +1 -0
- package/dist/babylon/lighting-controller.js +272 -0
- package/dist/babylon/lighting-controller.js.map +1 -0
- package/dist/babylon/plugin-contract.d.ts +15 -0
- package/dist/babylon/plugin-contract.d.ts.map +1 -0
- package/dist/babylon/plugin-contract.js +9 -0
- package/dist/babylon/plugin-contract.js.map +1 -0
- package/dist/babylon/renderer/brdf-texture-settlement.d.ts +7 -0
- package/dist/babylon/renderer/brdf-texture-settlement.d.ts.map +1 -0
- package/dist/babylon/renderer/brdf-texture-settlement.js +29 -0
- package/dist/babylon/renderer/brdf-texture-settlement.js.map +1 -0
- package/dist/babylon/renderer/environment/environment-texture-controller.d.ts +7 -0
- package/dist/babylon/renderer/environment/environment-texture-controller.d.ts.map +1 -0
- package/dist/babylon/renderer/environment/environment-texture-controller.js +357 -0
- package/dist/babylon/renderer/environment/environment-texture-controller.js.map +1 -0
- package/dist/babylon/renderer/environment/index.d.ts +4 -0
- package/dist/babylon/renderer/environment/index.d.ts.map +1 -0
- package/dist/babylon/renderer/environment/index.js +4 -0
- package/dist/babylon/renderer/environment/index.js.map +1 -0
- package/dist/babylon/renderer/environment/profile.d.ts +3 -0
- package/dist/babylon/renderer/environment/profile.d.ts.map +1 -0
- package/dist/babylon/renderer/environment/profile.js +27 -0
- package/dist/babylon/renderer/environment/profile.js.map +1 -0
- package/dist/babylon/renderer/environment/types.d.ts +24 -0
- package/dist/babylon/renderer/environment/types.d.ts.map +1 -0
- package/dist/babylon/renderer/environment/types.js +6 -0
- package/dist/babylon/renderer/environment/types.js.map +1 -0
- package/dist/babylon/renderer/index.d.ts +25 -0
- package/dist/babylon/renderer/index.d.ts.map +1 -0
- package/dist/babylon/renderer/index.js +25 -0
- package/dist/babylon/renderer/index.js.map +1 -0
- package/dist/babylon/renderer/lighting/directional-light-angles.d.ts +17 -0
- package/dist/babylon/renderer/lighting/directional-light-angles.d.ts.map +1 -0
- package/dist/babylon/renderer/lighting/directional-light-angles.js +67 -0
- package/dist/babylon/renderer/lighting/directional-light-angles.js.map +1 -0
- package/dist/babylon/renderer/material-owner-candidates.d.ts +19 -0
- package/dist/babylon/renderer/material-owner-candidates.d.ts.map +1 -0
- package/dist/babylon/renderer/material-owner-candidates.js +212 -0
- package/dist/babylon/renderer/material-owner-candidates.js.map +1 -0
- package/dist/babylon/renderer/materials/index.d.ts +3 -0
- package/dist/babylon/renderer/materials/index.d.ts.map +1 -0
- package/dist/babylon/renderer/materials/index.js +3 -0
- package/dist/babylon/renderer/materials/index.js.map +1 -0
- package/dist/babylon/renderer/materials/material-runtime.d.ts +29 -0
- package/dist/babylon/renderer/materials/material-runtime.d.ts.map +1 -0
- package/dist/babylon/renderer/materials/material-runtime.js +660 -0
- package/dist/babylon/renderer/materials/material-runtime.js.map +1 -0
- package/dist/babylon/renderer/materials/material-slot-owner.d.ts +42 -0
- package/dist/babylon/renderer/materials/material-slot-owner.d.ts.map +1 -0
- package/dist/babylon/renderer/materials/material-slot-owner.js +318 -0
- package/dist/babylon/renderer/materials/material-slot-owner.js.map +1 -0
- package/dist/babylon/renderer/outlines/babylon-default/apply.d.ts +4 -0
- package/dist/babylon/renderer/outlines/babylon-default/apply.d.ts.map +1 -0
- package/dist/babylon/renderer/outlines/babylon-default/apply.js +45 -0
- package/dist/babylon/renderer/outlines/babylon-default/apply.js.map +1 -0
- package/dist/babylon/renderer/outlines/babylon-default/index.d.ts +3 -0
- package/dist/babylon/renderer/outlines/babylon-default/index.d.ts.map +1 -0
- package/dist/babylon/renderer/outlines/babylon-default/index.js +2 -0
- package/dist/babylon/renderer/outlines/babylon-default/index.js.map +1 -0
- package/dist/babylon/renderer/outlines/babylon-default/types.d.ts +7 -0
- package/dist/babylon/renderer/outlines/babylon-default/types.d.ts.map +1 -0
- package/dist/babylon/renderer/outlines/babylon-default/types.js +2 -0
- package/dist/babylon/renderer/outlines/babylon-default/types.js.map +1 -0
- package/dist/babylon/renderer/outlines/index.d.ts +4 -0
- package/dist/babylon/renderer/outlines/index.d.ts.map +1 -0
- package/dist/babylon/renderer/outlines/index.js +3 -0
- package/dist/babylon/renderer/outlines/index.js.map +1 -0
- package/dist/babylon/renderer/outlines/runtime-override.d.ts +36 -0
- package/dist/babylon/renderer/outlines/runtime-override.d.ts.map +1 -0
- package/dist/babylon/renderer/outlines/runtime-override.js +131 -0
- package/dist/babylon/renderer/outlines/runtime-override.js.map +1 -0
- package/dist/babylon/renderer/outlines/types.d.ts +7 -0
- package/dist/babylon/renderer/outlines/types.d.ts.map +1 -0
- package/dist/babylon/renderer/outlines/types.js +2 -0
- package/dist/babylon/renderer/outlines/types.js.map +1 -0
- package/dist/babylon/renderer/placement/index.d.ts +2 -0
- package/dist/babylon/renderer/placement/index.d.ts.map +1 -0
- package/dist/babylon/renderer/placement/index.js +2 -0
- package/dist/babylon/renderer/placement/index.js.map +1 -0
- package/dist/babylon/renderer/placement/runtime-drop-position.d.ts +24 -0
- package/dist/babylon/renderer/placement/runtime-drop-position.d.ts.map +1 -0
- package/dist/babylon/renderer/placement/runtime-drop-position.js +63 -0
- package/dist/babylon/renderer/placement/runtime-drop-position.js.map +1 -0
- package/dist/babylon/renderer/post-process/babylon-default-pipeline.d.ts +7 -0
- package/dist/babylon/renderer/post-process/babylon-default-pipeline.d.ts.map +1 -0
- package/dist/babylon/renderer/post-process/babylon-default-pipeline.js +301 -0
- package/dist/babylon/renderer/post-process/babylon-default-pipeline.js.map +1 -0
- package/dist/babylon/renderer/post-process/index.d.ts +5 -0
- package/dist/babylon/renderer/post-process/index.d.ts.map +1 -0
- package/dist/babylon/renderer/post-process/index.js +5 -0
- package/dist/babylon/renderer/post-process/index.js.map +1 -0
- package/dist/babylon/renderer/post-process/profile.d.ts +5 -0
- package/dist/babylon/renderer/post-process/profile.d.ts.map +1 -0
- package/dist/babylon/renderer/post-process/profile.js +155 -0
- package/dist/babylon/renderer/post-process/profile.js.map +1 -0
- package/dist/babylon/renderer/post-process/types.d.ts +81 -0
- package/dist/babylon/renderer/post-process/types.d.ts.map +1 -0
- package/dist/babylon/renderer/post-process/types.js +24 -0
- package/dist/babylon/renderer/post-process/types.js.map +1 -0
- package/dist/babylon/renderer/post-process/volume-stack.d.ts +4 -0
- package/dist/babylon/renderer/post-process/volume-stack.d.ts.map +1 -0
- package/dist/babylon/renderer/post-process/volume-stack.js +105 -0
- package/dist/babylon/renderer/post-process/volume-stack.js.map +1 -0
- package/dist/babylon/renderer/rendering/image-node.d.ts +35 -0
- package/dist/babylon/renderer/rendering/image-node.d.ts.map +1 -0
- package/dist/babylon/renderer/rendering/image-node.js +39 -0
- package/dist/babylon/renderer/rendering/image-node.js.map +1 -0
- package/dist/babylon/renderer/rendering/index.d.ts +3 -0
- package/dist/babylon/renderer/rendering/index.d.ts.map +1 -0
- package/dist/babylon/renderer/rendering/index.js +3 -0
- package/dist/babylon/renderer/rendering/index.js.map +1 -0
- package/dist/babylon/renderer/rendering/node-rendering.d.ts +19 -0
- package/dist/babylon/renderer/rendering/node-rendering.d.ts.map +1 -0
- package/dist/babylon/renderer/rendering/node-rendering.js +66 -0
- package/dist/babylon/renderer/rendering/node-rendering.js.map +1 -0
- package/dist/babylon/renderer/shadows/blob-shadow-shaders.d.ts +5 -0
- package/dist/babylon/renderer/shadows/blob-shadow-shaders.d.ts.map +1 -0
- package/dist/babylon/renderer/shadows/blob-shadow-shaders.js +46 -0
- package/dist/babylon/renderer/shadows/blob-shadow-shaders.js.map +1 -0
- package/dist/babylon/renderer/shadows/blob-shadow-system.d.ts +5 -0
- package/dist/babylon/renderer/shadows/blob-shadow-system.d.ts.map +1 -0
- package/dist/babylon/renderer/shadows/blob-shadow-system.js +402 -0
- package/dist/babylon/renderer/shadows/blob-shadow-system.js.map +1 -0
- package/dist/babylon/renderer/shadows/dynamic-shadow-system.d.ts +84 -0
- package/dist/babylon/renderer/shadows/dynamic-shadow-system.d.ts.map +1 -0
- package/dist/babylon/renderer/shadows/dynamic-shadow-system.js +566 -0
- package/dist/babylon/renderer/shadows/dynamic-shadow-system.js.map +1 -0
- package/dist/babylon/renderer/shadows/planar-shadow-shaders.d.ts +7 -0
- package/dist/babylon/renderer/shadows/planar-shadow-shaders.d.ts.map +1 -0
- package/dist/babylon/renderer/shadows/planar-shadow-shaders.js +316 -0
- package/dist/babylon/renderer/shadows/planar-shadow-shaders.js.map +1 -0
- package/dist/babylon/renderer/shadows/planar-shadow-system.d.ts +5 -0
- package/dist/babylon/renderer/shadows/planar-shadow-system.d.ts.map +1 -0
- package/dist/babylon/renderer/shadows/planar-shadow-system.js +1562 -0
- package/dist/babylon/renderer/shadows/planar-shadow-system.js.map +1 -0
- package/dist/babylon/renderer/shadows/shadow-generator-shaders.d.ts +14 -0
- package/dist/babylon/renderer/shadows/shadow-generator-shaders.d.ts.map +1 -0
- package/dist/babylon/renderer/shadows/shadow-generator-shaders.js +14 -0
- package/dist/babylon/renderer/shadows/shadow-generator-shaders.js.map +1 -0
- package/dist/babylon/renderer/shadows/shadow-map-experiment-depth-backend.d.ts +68 -0
- package/dist/babylon/renderer/shadows/shadow-map-experiment-depth-backend.d.ts.map +1 -0
- package/dist/babylon/renderer/shadows/shadow-map-experiment-depth-backend.js +829 -0
- package/dist/babylon/renderer/shadows/shadow-map-experiment-depth-backend.js.map +1 -0
- package/dist/babylon/renderer/shadows/shadow-map-experiment-system.d.ts +148 -0
- package/dist/babylon/renderer/shadows/shadow-map-experiment-system.d.ts.map +1 -0
- package/dist/babylon/renderer/shadows/shadow-map-experiment-system.js +4529 -0
- package/dist/babylon/renderer/shadows/shadow-map-experiment-system.js.map +1 -0
- package/dist/babylon/renderer/shadows/static-projected-shadow-artifact-system.d.ts +4 -0
- package/dist/babylon/renderer/shadows/static-projected-shadow-artifact-system.d.ts.map +1 -0
- package/dist/babylon/renderer/shadows/static-projected-shadow-artifact-system.js +645 -0
- package/dist/babylon/renderer/shadows/static-projected-shadow-artifact-system.js.map +1 -0
- package/dist/babylon/renderer/shadows/static-projected-shadow-atlas.d.ts +61 -0
- package/dist/babylon/renderer/shadows/static-projected-shadow-atlas.d.ts.map +1 -0
- package/dist/babylon/renderer/shadows/static-projected-shadow-atlas.js +382 -0
- package/dist/babylon/renderer/shadows/static-projected-shadow-atlas.js.map +1 -0
- package/dist/babylon/renderer/shadows/static-projected-shadow-bake.d.ts +47 -0
- package/dist/babylon/renderer/shadows/static-projected-shadow-bake.d.ts.map +1 -0
- package/dist/babylon/renderer/shadows/static-projected-shadow-bake.js +285 -0
- package/dist/babylon/renderer/shadows/static-projected-shadow-bake.js.map +1 -0
- package/dist/babylon/renderer/shadows/static-projected-shadow-baker.d.ts +88 -0
- package/dist/babylon/renderer/shadows/static-projected-shadow-baker.d.ts.map +1 -0
- package/dist/babylon/renderer/shadows/static-projected-shadow-baker.js +830 -0
- package/dist/babylon/renderer/shadows/static-projected-shadow-baker.js.map +1 -0
- package/dist/babylon/renderer/shadows/static-projected-shadow-options.d.ts +3 -0
- package/dist/babylon/renderer/shadows/static-projected-shadow-options.d.ts.map +1 -0
- package/dist/babylon/renderer/shadows/static-projected-shadow-options.js +60 -0
- package/dist/babylon/renderer/shadows/static-projected-shadow-options.js.map +1 -0
- package/dist/babylon/renderer/shadows/static-projected-shadow-rendering.d.ts +27 -0
- package/dist/babylon/renderer/shadows/static-projected-shadow-rendering.d.ts.map +1 -0
- package/dist/babylon/renderer/shadows/static-projected-shadow-rendering.js +220 -0
- package/dist/babylon/renderer/shadows/static-projected-shadow-rendering.js.map +1 -0
- package/dist/babylon/renderer/shadows/types.d.ts +421 -0
- package/dist/babylon/renderer/shadows/types.d.ts.map +1 -0
- package/dist/babylon/renderer/shadows/types.js +127 -0
- package/dist/babylon/renderer/shadows/types.js.map +1 -0
- package/dist/babylon/renderer/world-rendering-controller.d.ts +29 -0
- package/dist/babylon/renderer/world-rendering-controller.d.ts.map +1 -0
- package/dist/babylon/renderer/world-rendering-controller.js +160 -0
- package/dist/babylon/renderer/world-rendering-controller.js.map +1 -0
- package/dist/babylon/renderer-controller.d.ts +93 -0
- package/dist/babylon/renderer-controller.d.ts.map +1 -0
- package/dist/babylon/renderer-controller.js +706 -0
- package/dist/babylon/renderer-controller.js.map +1 -0
- package/dist/babylon/scene-renderer.d.ts +20 -0
- package/dist/babylon/scene-renderer.d.ts.map +1 -0
- package/dist/babylon/scene-renderer.js +60 -0
- package/dist/babylon/scene-renderer.js.map +1 -0
- package/dist/babylon.d.ts +8 -0
- package/dist/babylon.d.ts.map +1 -1
- package/dist/babylon.js +8 -0
- package/dist/babylon.js.map +1 -1
- package/dist/build-info.json +4 -4
- package/dist/camera.d.ts +25 -0
- package/dist/camera.d.ts.map +1 -0
- package/dist/camera.js +68 -0
- package/dist/camera.js.map +1 -0
- package/dist/compiled-scene-data.d.ts +23 -0
- package/dist/compiled-scene-data.d.ts.map +1 -0
- package/dist/compiled-scene-data.js +100 -0
- package/dist/compiled-scene-data.js.map +1 -0
- package/dist/frame.d.ts +32 -0
- package/dist/frame.d.ts.map +1 -0
- package/dist/frame.js +54 -0
- package/dist/frame.js.map +1 -0
- package/dist/ground-decal.d.ts +22 -0
- package/dist/ground-decal.d.ts.map +1 -0
- package/dist/ground-decal.js +48 -0
- package/dist/ground-decal.js.map +1 -0
- package/dist/index.d.ts +17 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +17 -1
- package/dist/index.js.map +1 -1
- package/dist/lighting.d.ts +66 -0
- package/dist/lighting.d.ts.map +1 -0
- package/dist/lighting.js +197 -0
- package/dist/lighting.js.map +1 -0
- package/dist/material-owner.d.ts +128 -0
- package/dist/material-owner.d.ts.map +1 -0
- package/dist/material-owner.js +434 -0
- package/dist/material-owner.js.map +1 -0
- package/dist/material-profile.d.ts +62 -0
- package/dist/material-profile.d.ts.map +1 -0
- package/dist/material-profile.js +132 -0
- package/dist/material-profile.js.map +1 -0
- package/dist/rendering/index.d.ts +14 -0
- package/dist/rendering/index.d.ts.map +1 -0
- package/dist/rendering/index.js +12 -0
- package/dist/rendering/index.js.map +1 -0
- package/dist/rendering/rendering-profile-types.d.ts +322 -0
- package/dist/rendering/rendering-profile-types.d.ts.map +1 -0
- package/dist/rendering/rendering-profile-types.js +2 -0
- package/dist/rendering/rendering-profile-types.js.map +1 -0
- package/dist/rendering/rendering-profile-validation.d.ts +2 -0
- package/dist/rendering/rendering-profile-validation.d.ts.map +1 -0
- package/dist/rendering/rendering-profile-validation.js +364 -0
- package/dist/rendering/rendering-profile-validation.js.map +1 -0
- package/dist/rendering/rendering-profile-values.d.ts +19 -0
- package/dist/rendering/rendering-profile-values.d.ts.map +1 -0
- package/dist/rendering/rendering-profile-values.js +79 -0
- package/dist/rendering/rendering-profile-values.js.map +1 -0
- package/dist/rendering/rendering-profile.d.ts +15 -0
- package/dist/rendering/rendering-profile.d.ts.map +1 -0
- package/dist/rendering/rendering-profile.js +442 -0
- package/dist/rendering/rendering-profile.js.map +1 -0
- package/dist/rendering/shadow-map-experiment-depth.d.ts +63 -0
- package/dist/rendering/shadow-map-experiment-depth.d.ts.map +1 -0
- package/dist/rendering/shadow-map-experiment-depth.js +186 -0
- package/dist/rendering/shadow-map-experiment-depth.js.map +1 -0
- package/dist/rendering/shadow-map-experiment-lifecycle.d.ts +94 -0
- package/dist/rendering/shadow-map-experiment-lifecycle.d.ts.map +1 -0
- package/dist/rendering/shadow-map-experiment-lifecycle.js +407 -0
- package/dist/rendering/shadow-map-experiment-lifecycle.js.map +1 -0
- package/dist/rendering/shadow-map-experiment.d.ts +189 -0
- package/dist/rendering/shadow-map-experiment.d.ts.map +1 -0
- package/dist/rendering/shadow-map-experiment.js +549 -0
- package/dist/rendering/shadow-map-experiment.js.map +1 -0
- package/dist/rendering/shadow-quality.d.ts +5 -0
- package/dist/rendering/shadow-quality.d.ts.map +1 -0
- package/dist/rendering/shadow-quality.js +83 -0
- package/dist/rendering/shadow-quality.js.map +1 -0
- package/dist/rendering/shadow-runtime.d.ts +59 -0
- package/dist/rendering/shadow-runtime.d.ts.map +1 -0
- package/dist/rendering/shadow-runtime.js +378 -0
- package/dist/rendering/shadow-runtime.js.map +1 -0
- package/dist/rendering/shadow-settings.d.ts +15 -0
- package/dist/rendering/shadow-settings.d.ts.map +1 -0
- package/dist/rendering/shadow-settings.js +129 -0
- package/dist/rendering/shadow-settings.js.map +1 -0
- package/dist/rendering/shadow-types.d.ts +99 -0
- package/dist/rendering/shadow-types.d.ts.map +1 -0
- package/dist/rendering/shadow-types.js +5 -0
- package/dist/rendering/shadow-types.js.map +1 -0
- package/dist/rendering/shadow-validation.d.ts +3 -0
- package/dist/rendering/shadow-validation.d.ts.map +1 -0
- package/dist/rendering/shadow-validation.js +166 -0
- package/dist/rendering/shadow-validation.js.map +1 -0
- package/dist/rendering/value.d.ts +2 -0
- package/dist/rendering/value.d.ts.map +1 -0
- package/dist/rendering/value.js +6 -0
- package/dist/rendering/value.js.map +1 -0
- package/dist/runtime-data-token.d.ts +4 -0
- package/dist/runtime-data-token.d.ts.map +1 -0
- package/dist/runtime-data-token.js +4 -0
- package/dist/runtime-data-token.js.map +1 -0
- package/dist/runtime-data-types.d.ts +83 -0
- package/dist/runtime-data-types.d.ts.map +1 -0
- package/dist/runtime-data-types.js +2 -0
- package/dist/runtime-data-types.js.map +1 -0
- package/dist/runtime-data.d.ts +18 -0
- package/dist/runtime-data.d.ts.map +1 -0
- package/dist/runtime-data.js +301 -0
- package/dist/runtime-data.js.map +1 -0
- package/dist/runtime-scene-resolvers.d.ts +37 -0
- package/dist/runtime-scene-resolvers.d.ts.map +1 -0
- package/dist/runtime-scene-resolvers.js +40 -0
- package/dist/runtime-scene-resolvers.js.map +1 -0
- package/dist/scene-artifact-types.d.ts +383 -0
- package/dist/scene-artifact-types.d.ts.map +1 -0
- package/dist/scene-artifact-types.js +2 -0
- package/dist/scene-artifact-types.js.map +1 -0
- package/dist/scene-artifact-validation.d.ts +19 -0
- package/dist/scene-artifact-validation.d.ts.map +1 -0
- package/dist/scene-artifact-validation.js +1352 -0
- package/dist/scene-artifact-validation.js.map +1 -0
- package/dist/static-shadow-artifact.d.ts +131 -0
- package/dist/static-shadow-artifact.d.ts.map +1 -0
- package/dist/static-shadow-artifact.js +327 -0
- package/dist/static-shadow-artifact.js.map +1 -0
- package/package.json +11 -2
|
@@ -0,0 +1,549 @@
|
|
|
1
|
+
export const FPS_SHADOW_MAP_EXPERIMENT_PLUGIN_ID = 'fps.shadow-map-experiment';
|
|
2
|
+
export const FPS_SHADOW_MAP_EXPERIMENT_CONFIG_SCHEMA_VERSION = 1;
|
|
3
|
+
export const FPS_SHADOW_MAP_EXPERIMENT_PLAN_SCHEMA_VERSION_V2 = 2;
|
|
4
|
+
export const FPS_SHADOW_MAP_EXPERIMENT_PLAN_SCHEMA_VERSION = 3;
|
|
5
|
+
export const FPS_SHADOW_MAP_EXPERIMENT_SCHEMA_VERSION = FPS_SHADOW_MAP_EXPERIMENT_CONFIG_SCHEMA_VERSION;
|
|
6
|
+
export const DEFAULT_SHADOW_MAP_EXPERIMENT_SOFTNESS = 0.125;
|
|
7
|
+
export function shadowMapExperimentDarknessFromStrength(strength) {
|
|
8
|
+
return 1 - finiteInRange(strength, '$.strength', 0, 1);
|
|
9
|
+
}
|
|
10
|
+
export function shadowMapExperimentStrengthFromDarkness(darkness) {
|
|
11
|
+
return 1 - finiteInRange(darkness, '$.darkness', 0, 1);
|
|
12
|
+
}
|
|
13
|
+
export function resolveShadowMapExperimentAppearance(value) {
|
|
14
|
+
const darkness = finiteInRange(value.darkness, '$.darkness', 0, 1);
|
|
15
|
+
const softness = value.softness === undefined
|
|
16
|
+
? DEFAULT_SHADOW_MAP_EXPERIMENT_SOFTNESS
|
|
17
|
+
: finiteInRange(value.softness, '$.softness', 0, 1);
|
|
18
|
+
return Object.freeze({
|
|
19
|
+
strength: 1 - darkness,
|
|
20
|
+
darkness,
|
|
21
|
+
softness,
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
export function createShadowMapExperimentQualityProfileAppearanceSnapshot(configValue, qualityProfileId, input) {
|
|
25
|
+
const config = createShadowMapExperimentConfigSnapshot(configValue);
|
|
26
|
+
const profileId = nonEmptyString(qualityProfileId, '$.qualityProfileId');
|
|
27
|
+
const profile = requireProfile(config.qualityProfiles, profileId, '$.qualityProfileId', 'quality');
|
|
28
|
+
const darkness = shadowMapExperimentDarknessFromStrength(input.strength);
|
|
29
|
+
const softness = finiteInRange(input.softness, '$.softness', 0, 1);
|
|
30
|
+
return createShadowMapExperimentConfigSnapshot({
|
|
31
|
+
...config,
|
|
32
|
+
qualityProfiles: {
|
|
33
|
+
...config.qualityProfiles,
|
|
34
|
+
[profileId]: {
|
|
35
|
+
...profile,
|
|
36
|
+
darkness,
|
|
37
|
+
softness,
|
|
38
|
+
},
|
|
39
|
+
},
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
export function assertEditorShadowMapExperimentSettings(value, path = '$.scene.shadowMapExperiment') {
|
|
43
|
+
const settings = record(value, path);
|
|
44
|
+
knownFields(settings, ['qualityProfile', 'behaviorProfile'], path);
|
|
45
|
+
if (settings.qualityProfile !== undefined)
|
|
46
|
+
nonEmptyString(settings.qualityProfile, `${path}.qualityProfile`);
|
|
47
|
+
if (settings.behaviorProfile !== undefined)
|
|
48
|
+
nonEmptyString(settings.behaviorProfile, `${path}.behaviorProfile`);
|
|
49
|
+
}
|
|
50
|
+
export function assertEditorShadowMapExperimentObjectOverride(value, path = '$.shadowMapExperiment') {
|
|
51
|
+
const override = record(value, path);
|
|
52
|
+
knownFields(override, ['behaviorProfile'], path);
|
|
53
|
+
nonEmptyString(override.behaviorProfile, `${path}.behaviorProfile`);
|
|
54
|
+
}
|
|
55
|
+
export function assertShadowMapExperimentConfig(value, path = '$') {
|
|
56
|
+
const config = record(value, path);
|
|
57
|
+
knownFields(config, [
|
|
58
|
+
'schemaVersion',
|
|
59
|
+
'enabled',
|
|
60
|
+
'lightRef',
|
|
61
|
+
'defaultQualityProfile',
|
|
62
|
+
'defaultBehaviorProfile',
|
|
63
|
+
'qualityProfiles',
|
|
64
|
+
'behaviorProfiles',
|
|
65
|
+
], path);
|
|
66
|
+
if (config.schemaVersion !== 1)
|
|
67
|
+
invalid(`${path}.schemaVersion`, 'expected 1');
|
|
68
|
+
if (typeof config.enabled !== 'boolean')
|
|
69
|
+
invalid(`${path}.enabled`, 'expected boolean');
|
|
70
|
+
nonEmptyString(config.lightRef, `${path}.lightRef`);
|
|
71
|
+
const defaultQualityProfile = nonEmptyString(config.defaultQualityProfile, `${path}.defaultQualityProfile`);
|
|
72
|
+
const defaultBehaviorProfile = nonEmptyString(config.defaultBehaviorProfile, `${path}.defaultBehaviorProfile`);
|
|
73
|
+
const qualityProfiles = profileRecord(config.qualityProfiles, `${path}.qualityProfiles`);
|
|
74
|
+
const behaviorProfiles = profileRecord(config.behaviorProfiles, `${path}.behaviorProfiles`);
|
|
75
|
+
for (const [id, profile] of Object.entries(qualityProfiles))
|
|
76
|
+
assertQualityProfile(profile, `${path}.qualityProfiles.${id}`);
|
|
77
|
+
for (const [id, profile] of Object.entries(behaviorProfiles))
|
|
78
|
+
assertBehaviorProfile(profile, `${path}.behaviorProfiles.${id}`);
|
|
79
|
+
if (!Object.prototype.hasOwnProperty.call(qualityProfiles, defaultQualityProfile)) {
|
|
80
|
+
invalid(`${path}.defaultQualityProfile`, `unknown quality profile: ${defaultQualityProfile}`);
|
|
81
|
+
}
|
|
82
|
+
if (!Object.prototype.hasOwnProperty.call(behaviorProfiles, defaultBehaviorProfile)) {
|
|
83
|
+
invalid(`${path}.defaultBehaviorProfile`, `unknown behavior profile: ${defaultBehaviorProfile}`);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
export function createShadowMapExperimentConfigSnapshot(value) {
|
|
87
|
+
const config = cloneJson(value, '$');
|
|
88
|
+
assertShadowMapExperimentConfig(config);
|
|
89
|
+
return deepFreeze(config);
|
|
90
|
+
}
|
|
91
|
+
export function resolveShadowMapExperimentPlan(input) {
|
|
92
|
+
assertShadowMapExperimentConfig(input.config);
|
|
93
|
+
if (input.settings !== undefined)
|
|
94
|
+
assertEditorShadowMapExperimentSettings(input.settings);
|
|
95
|
+
if (!Number.isInteger(input.revision) || input.revision < 0)
|
|
96
|
+
invalid('$.revision', 'expected a non-negative integer');
|
|
97
|
+
const qualityProfileId = input.settings?.qualityProfile ?? input.config.defaultQualityProfile;
|
|
98
|
+
const sceneBehaviorProfileId = input.settings?.behaviorProfile ?? input.config.defaultBehaviorProfile;
|
|
99
|
+
const qualityProfile = requireProfile(input.config.qualityProfiles, qualityProfileId, '$.settings.qualityProfile', 'quality');
|
|
100
|
+
requireProfile(input.config.behaviorProfiles, sceneBehaviorProfileId, '$.settings.behaviorProfile', 'behavior');
|
|
101
|
+
const resolvedObjects = input.objects.map((object, index) => {
|
|
102
|
+
const path = `$.objects[${index}]`;
|
|
103
|
+
if (object.override !== undefined)
|
|
104
|
+
assertEditorShadowMapExperimentObjectOverride(object.override, `${path}.override`);
|
|
105
|
+
const behaviorProfileId = object.override?.behaviorProfile ?? sceneBehaviorProfileId;
|
|
106
|
+
const behaviorProfile = requireProfile(input.config.behaviorProfiles, behaviorProfileId, `${path}.override.behaviorProfile`, 'behavior');
|
|
107
|
+
return Object.freeze({
|
|
108
|
+
entityId: nonEmptyString(object.entityId, `${path}.entityId`),
|
|
109
|
+
renderableIds: Object.freeze(uniqueStrings(object.renderableIds, `${path}.renderableIds`)),
|
|
110
|
+
cast: optionalBoolean(object.cast, `${path}.cast`) ?? behaviorProfile.cast === 'enabled',
|
|
111
|
+
receive: optionalBoolean(object.receive, `${path}.receive`) ?? behaviorProfile.receive === 'enabled',
|
|
112
|
+
updateClass: behaviorProfile.updateClass !== 'auto'
|
|
113
|
+
? behaviorProfile.updateClass
|
|
114
|
+
: object.inferredUpdateClass ?? 'static',
|
|
115
|
+
behaviorProfileId,
|
|
116
|
+
});
|
|
117
|
+
}).sort((left, right) => left.entityId.localeCompare(right.entityId));
|
|
118
|
+
const objects = input.config.enabled ? resolvedObjects : [];
|
|
119
|
+
assertUniquePlanObjects(objects);
|
|
120
|
+
const behaviorProfiles = Object.fromEntries(Object.entries(input.config.behaviorProfiles)
|
|
121
|
+
.sort(([left], [right]) => left.localeCompare(right))
|
|
122
|
+
.map(([id, profile]) => [id, Object.freeze({
|
|
123
|
+
cast: profile.cast === 'enabled',
|
|
124
|
+
receive: profile.receive === 'enabled',
|
|
125
|
+
updateClass: profile.updateClass,
|
|
126
|
+
})]));
|
|
127
|
+
return deepFreeze({
|
|
128
|
+
schemaVersion: FPS_SHADOW_MAP_EXPERIMENT_PLAN_SCHEMA_VERSION,
|
|
129
|
+
revision: input.revision,
|
|
130
|
+
enabled: input.config.enabled,
|
|
131
|
+
scopeId: nonEmptyString(input.scopeId, '$.scopeId'),
|
|
132
|
+
light: {
|
|
133
|
+
entityId: input.config.lightRef,
|
|
134
|
+
direction: tuple3(input.lightDirection, '$.lightDirection'),
|
|
135
|
+
},
|
|
136
|
+
qualityProfileId,
|
|
137
|
+
generator: {
|
|
138
|
+
maps: { ...qualityProfile.maps },
|
|
139
|
+
...(qualityProfile.cascadeCount === undefined
|
|
140
|
+
? {}
|
|
141
|
+
: { cascadeCount: qualityProfile.cascadeCount }),
|
|
142
|
+
filter: qualityProfile.receiverFilter,
|
|
143
|
+
bias: qualityProfile.bias,
|
|
144
|
+
normalBias: qualityProfile.normalBias,
|
|
145
|
+
darkness: qualityProfile.darkness,
|
|
146
|
+
...(qualityProfile.softness === undefined ? {} : { softness: qualityProfile.softness }),
|
|
147
|
+
bounds: cloneBounds(qualityProfile.bounds),
|
|
148
|
+
backend: { ...qualityProfile.backend },
|
|
149
|
+
},
|
|
150
|
+
culling: { ...qualityProfile.culling },
|
|
151
|
+
diagnosticThresholds: { ...qualityProfile.diagnostics },
|
|
152
|
+
behaviorProfiles,
|
|
153
|
+
objects,
|
|
154
|
+
diagnostics: [],
|
|
155
|
+
});
|
|
156
|
+
}
|
|
157
|
+
function optionalBoolean(value, path) {
|
|
158
|
+
if (value === undefined)
|
|
159
|
+
return undefined;
|
|
160
|
+
if (typeof value !== 'boolean')
|
|
161
|
+
invalid(path, 'expected a boolean');
|
|
162
|
+
return value;
|
|
163
|
+
}
|
|
164
|
+
export function createShadowMapExperimentPlanSnapshot(value) {
|
|
165
|
+
const plan = record(cloneJson(value, '$'), '$');
|
|
166
|
+
const schemaVersion = plan.schemaVersion;
|
|
167
|
+
if (schemaVersion !== FPS_SHADOW_MAP_EXPERIMENT_PLAN_SCHEMA_VERSION_V2
|
|
168
|
+
&& schemaVersion !== FPS_SHADOW_MAP_EXPERIMENT_PLAN_SCHEMA_VERSION) {
|
|
169
|
+
invalid('$.schemaVersion', `expected ${FPS_SHADOW_MAP_EXPERIMENT_PLAN_SCHEMA_VERSION_V2} or ${FPS_SHADOW_MAP_EXPERIMENT_PLAN_SCHEMA_VERSION}`);
|
|
170
|
+
}
|
|
171
|
+
knownFields(plan, [
|
|
172
|
+
'schemaVersion',
|
|
173
|
+
'revision',
|
|
174
|
+
'enabled',
|
|
175
|
+
'scopeId',
|
|
176
|
+
'light',
|
|
177
|
+
'qualityProfileId',
|
|
178
|
+
'generator',
|
|
179
|
+
'culling',
|
|
180
|
+
'diagnosticThresholds',
|
|
181
|
+
...(schemaVersion === FPS_SHADOW_MAP_EXPERIMENT_PLAN_SCHEMA_VERSION ? ['behaviorProfiles'] : []),
|
|
182
|
+
'objects',
|
|
183
|
+
'diagnostics',
|
|
184
|
+
], '$');
|
|
185
|
+
if (schemaVersion === FPS_SHADOW_MAP_EXPERIMENT_PLAN_SCHEMA_VERSION) {
|
|
186
|
+
const behaviorProfiles = profileRecord(plan.behaviorProfiles, '$.behaviorProfiles');
|
|
187
|
+
for (const [id, value] of Object.entries(behaviorProfiles)) {
|
|
188
|
+
const path = `$.behaviorProfiles.${id}`;
|
|
189
|
+
const profile = record(value, path);
|
|
190
|
+
knownFields(profile, ['cast', 'receive', 'updateClass'], path);
|
|
191
|
+
if (typeof profile.cast !== 'boolean')
|
|
192
|
+
invalid(`${path}.cast`, 'expected boolean');
|
|
193
|
+
if (typeof profile.receive !== 'boolean')
|
|
194
|
+
invalid(`${path}.receive`, 'expected boolean');
|
|
195
|
+
if (!['auto', 'static', 'dynamic', 'skinned'].includes(String(profile.updateClass))) {
|
|
196
|
+
invalid(`${path}.updateClass`, 'expected auto, static, dynamic, or skinned');
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
if (!Number.isInteger(plan.revision) || plan.revision < 0)
|
|
201
|
+
invalid('$.revision', 'expected a non-negative integer');
|
|
202
|
+
if (typeof plan.enabled !== 'boolean')
|
|
203
|
+
invalid('$.enabled', 'expected boolean');
|
|
204
|
+
nonEmptyString(plan.scopeId, '$.scopeId');
|
|
205
|
+
const light = record(plan.light, '$.light');
|
|
206
|
+
knownFields(light, ['entityId', 'direction'], '$.light');
|
|
207
|
+
nonEmptyString(light.entityId, '$.light.entityId');
|
|
208
|
+
tuple3(light.direction, '$.light.direction');
|
|
209
|
+
nonEmptyString(plan.qualityProfileId, '$.qualityProfileId');
|
|
210
|
+
const generator = record(plan.generator, '$.generator');
|
|
211
|
+
knownFields(generator, ['maps', 'cascadeCount', 'filter', 'bias', 'normalBias', 'darkness', 'softness', 'bounds', 'backend'], '$.generator');
|
|
212
|
+
assertMapSettings(generator.maps, '$.generator.maps');
|
|
213
|
+
if (generator.cascadeCount !== undefined)
|
|
214
|
+
assertCascadeCount(generator.cascadeCount, '$.generator.cascadeCount');
|
|
215
|
+
if (generator.filter !== 'hard' && generator.filter !== 'low-pcf')
|
|
216
|
+
invalid('$.generator.filter', 'expected hard or low-pcf');
|
|
217
|
+
finiteInRange(generator.bias, '$.generator.bias', 0, 0.1);
|
|
218
|
+
finiteInRange(generator.normalBias, '$.generator.normalBias', 0, 1);
|
|
219
|
+
finiteInRange(generator.darkness, '$.generator.darkness', 0, 1);
|
|
220
|
+
if (generator.softness !== undefined)
|
|
221
|
+
finiteInRange(generator.softness, '$.generator.softness', 0, 1);
|
|
222
|
+
assertBounds(generator.bounds, '$.generator.bounds');
|
|
223
|
+
assertBackendSettings(generator.backend, '$.generator.backend');
|
|
224
|
+
assertCullingSettings(plan.culling, '$.culling');
|
|
225
|
+
assertDiagnosticThresholds(plan.diagnosticThresholds, '$.diagnosticThresholds');
|
|
226
|
+
const objects = array(plan.objects, '$.objects').map((value, index) => {
|
|
227
|
+
const path = `$.objects[${index}]`;
|
|
228
|
+
const object = record(value, path);
|
|
229
|
+
knownFields(object, ['entityId', 'renderableIds', 'cast', 'receive', 'updateClass', 'behaviorProfileId'], path);
|
|
230
|
+
const result = {
|
|
231
|
+
entityId: nonEmptyString(object.entityId, `${path}.entityId`),
|
|
232
|
+
renderableIds: uniqueStrings(array(object.renderableIds, `${path}.renderableIds`), `${path}.renderableIds`),
|
|
233
|
+
cast: object.cast,
|
|
234
|
+
receive: object.receive,
|
|
235
|
+
updateClass: object.updateClass,
|
|
236
|
+
behaviorProfileId: nonEmptyString(object.behaviorProfileId, `${path}.behaviorProfileId`),
|
|
237
|
+
};
|
|
238
|
+
if (typeof result.cast !== 'boolean')
|
|
239
|
+
invalid(`${path}.cast`, 'expected boolean');
|
|
240
|
+
if (typeof result.receive !== 'boolean')
|
|
241
|
+
invalid(`${path}.receive`, 'expected boolean');
|
|
242
|
+
if (!['static', 'dynamic', 'skinned'].includes(String(result.updateClass)))
|
|
243
|
+
invalid(`${path}.updateClass`, 'expected static, dynamic, or skinned');
|
|
244
|
+
return result;
|
|
245
|
+
});
|
|
246
|
+
assertUniquePlanObjects(objects);
|
|
247
|
+
array(plan.diagnostics, '$.diagnostics').forEach((entry, index) => assertDiagnostic(entry, `$.diagnostics[${index}]`));
|
|
248
|
+
return plan;
|
|
249
|
+
}
|
|
250
|
+
export function createShadowMapExperimentPlanFingerprint(value) {
|
|
251
|
+
const serialized = JSON.stringify(createShadowMapExperimentPlanSnapshot(value));
|
|
252
|
+
let hash = 0x811c9dc5;
|
|
253
|
+
for (let index = 0; index < serialized.length; index += 1) {
|
|
254
|
+
hash ^= serialized.charCodeAt(index);
|
|
255
|
+
hash = Math.imul(hash, 0x01000193) >>> 0;
|
|
256
|
+
}
|
|
257
|
+
return `fnv1a:${hash.toString(16).padStart(8, '0')}`;
|
|
258
|
+
}
|
|
259
|
+
export function diffShadowMapExperimentPlans(previous, next) {
|
|
260
|
+
const before = new Map(previous.objects.map(object => [object.entityId, object]));
|
|
261
|
+
const after = new Map(next.objects.map(object => [object.entityId, object]));
|
|
262
|
+
const addedCasters = [];
|
|
263
|
+
const removedCasters = [];
|
|
264
|
+
const changedCasters = [];
|
|
265
|
+
const changedReceivers = [];
|
|
266
|
+
for (const [entityId, object] of after) {
|
|
267
|
+
const old = before.get(entityId);
|
|
268
|
+
if (!old) {
|
|
269
|
+
if (object.cast)
|
|
270
|
+
addedCasters.push(entityId);
|
|
271
|
+
if (object.receive)
|
|
272
|
+
changedReceivers.push(entityId);
|
|
273
|
+
continue;
|
|
274
|
+
}
|
|
275
|
+
if (!old.cast && object.cast)
|
|
276
|
+
addedCasters.push(entityId);
|
|
277
|
+
else if (old.cast && !object.cast)
|
|
278
|
+
removedCasters.push(entityId);
|
|
279
|
+
else if (old.cast && (old.updateClass !== object.updateClass || !sameStrings(old.renderableIds, object.renderableIds)))
|
|
280
|
+
changedCasters.push(entityId);
|
|
281
|
+
if (old.receive !== object.receive || !sameStrings(old.renderableIds, object.renderableIds))
|
|
282
|
+
changedReceivers.push(entityId);
|
|
283
|
+
}
|
|
284
|
+
for (const [entityId, object] of before) {
|
|
285
|
+
if (after.has(entityId))
|
|
286
|
+
continue;
|
|
287
|
+
if (object.cast)
|
|
288
|
+
removedCasters.push(entityId);
|
|
289
|
+
if (object.receive)
|
|
290
|
+
changedReceivers.push(entityId);
|
|
291
|
+
}
|
|
292
|
+
const lightDirectionChanged = !sameNumbers(previous.light.direction, next.light.direction);
|
|
293
|
+
const previousAppearance = resolveShadowMapExperimentAppearance(previous.generator);
|
|
294
|
+
const nextAppearance = resolveShadowMapExperimentAppearance(next.generator);
|
|
295
|
+
const appearanceChanged = previousAppearance.darkness !== nextAppearance.darkness
|
|
296
|
+
|| previousAppearance.softness !== nextAppearance.softness;
|
|
297
|
+
const appearanceOnly = appearanceChanged
|
|
298
|
+
&& sameShadowMapExperimentPlanOutsideAppearance(previous, next);
|
|
299
|
+
const softnessChanged = previousAppearance.softness !== nextAppearance.softness;
|
|
300
|
+
const { darkness: _previousDarkness, softness: _previousSoftness, ...previousGeneratorResources } = previous.generator;
|
|
301
|
+
const { darkness: _nextDarkness, softness: _nextSoftness, ...nextGeneratorResources } = next.generator;
|
|
302
|
+
const generatorResourcesChanged = previous.enabled !== next.enabled
|
|
303
|
+
|| previous.light.entityId !== next.light.entityId
|
|
304
|
+
|| JSON.stringify(previousGeneratorResources) !== JSON.stringify(nextGeneratorResources)
|
|
305
|
+
|| JSON.stringify(previous.culling) !== JSON.stringify(next.culling);
|
|
306
|
+
const generatorChanged = generatorResourcesChanged || appearanceChanged;
|
|
307
|
+
const dirty = new Set();
|
|
308
|
+
if (generatorResourcesChanged || softnessChanged)
|
|
309
|
+
dirty.add('quality-changed');
|
|
310
|
+
if (lightDirectionChanged)
|
|
311
|
+
dirty.add('light-direction-changed');
|
|
312
|
+
if (addedCasters.length)
|
|
313
|
+
dirty.add('caster-added');
|
|
314
|
+
if (removedCasters.length)
|
|
315
|
+
dirty.add('caster-removed');
|
|
316
|
+
if (changedCasters.length)
|
|
317
|
+
dirty.add('static-geometry-changed');
|
|
318
|
+
return Object.freeze({
|
|
319
|
+
fromRevision: previous.revision,
|
|
320
|
+
toRevision: next.revision,
|
|
321
|
+
generatorChanged,
|
|
322
|
+
generatorResourcesChanged,
|
|
323
|
+
appearanceChanged,
|
|
324
|
+
appearanceOnly,
|
|
325
|
+
lightDirectionChanged,
|
|
326
|
+
addedCasters: Object.freeze(addedCasters.sort()),
|
|
327
|
+
removedCasters: Object.freeze(removedCasters.sort()),
|
|
328
|
+
changedCasters: Object.freeze(changedCasters.sort()),
|
|
329
|
+
changedReceivers: Object.freeze(changedReceivers.sort()),
|
|
330
|
+
requiresRefresh: generatorResourcesChanged || softnessChanged || lightDirectionChanged || addedCasters.length > 0 || removedCasters.length > 0 || changedCasters.length > 0,
|
|
331
|
+
dirtyReasons: Object.freeze([...dirty]),
|
|
332
|
+
});
|
|
333
|
+
}
|
|
334
|
+
function sameShadowMapExperimentPlanOutsideAppearance(previous, next) {
|
|
335
|
+
const { revision: _previousRevision, generator: previousGenerator, ...previousPlan } = previous;
|
|
336
|
+
const { revision: _nextRevision, generator: nextGenerator, ...nextPlan } = next;
|
|
337
|
+
const { darkness: _previousDarkness, softness: _previousSoftness, ...previousGeneratorRest } = previousGenerator;
|
|
338
|
+
const { darkness: _nextDarkness, softness: _nextSoftness, ...nextGeneratorRest } = nextGenerator;
|
|
339
|
+
return JSON.stringify({ ...previousPlan, generator: previousGeneratorRest })
|
|
340
|
+
=== JSON.stringify({ ...nextPlan, generator: nextGeneratorRest });
|
|
341
|
+
}
|
|
342
|
+
function assertBounds(value, path) {
|
|
343
|
+
const bounds = record(value, path);
|
|
344
|
+
knownFields(bounds, ['mode', 'center', 'extent', 'near', 'far'], path);
|
|
345
|
+
if (bounds.mode !== 'fixed')
|
|
346
|
+
invalid(`${path}.mode`, 'expected fixed');
|
|
347
|
+
tuple3(bounds.center, `${path}.center`);
|
|
348
|
+
const extent = tuple3(bounds.extent, `${path}.extent`);
|
|
349
|
+
if (extent.some(entry => entry <= 0))
|
|
350
|
+
invalid(`${path}.extent`, 'expected positive values');
|
|
351
|
+
const near = finite(bounds.near, `${path}.near`);
|
|
352
|
+
const far = finite(bounds.far, `${path}.far`);
|
|
353
|
+
if (near < 0 || far <= near)
|
|
354
|
+
invalid(path, 'expected 0 <= near < far');
|
|
355
|
+
}
|
|
356
|
+
function assertQualityProfile(value, path) {
|
|
357
|
+
const profile = record(value, path);
|
|
358
|
+
knownFields(profile, ['maps', 'cascadeCount', 'receiverFilter', 'bias', 'normalBias', 'darkness', 'softness', 'bounds', 'backend', 'culling', 'diagnostics'], path);
|
|
359
|
+
assertMapSettings(profile.maps, `${path}.maps`);
|
|
360
|
+
if (profile.cascadeCount !== undefined)
|
|
361
|
+
assertCascadeCount(profile.cascadeCount, `${path}.cascadeCount`);
|
|
362
|
+
if (profile.receiverFilter !== 'hard' && profile.receiverFilter !== 'low-pcf')
|
|
363
|
+
invalid(`${path}.receiverFilter`, 'expected hard or low-pcf');
|
|
364
|
+
finiteInRange(profile.bias, `${path}.bias`, 0, 0.1);
|
|
365
|
+
finiteInRange(profile.normalBias, `${path}.normalBias`, 0, 1);
|
|
366
|
+
finiteInRange(profile.darkness, `${path}.darkness`, 0, 1);
|
|
367
|
+
if (profile.softness !== undefined)
|
|
368
|
+
finiteInRange(profile.softness, `${path}.softness`, 0, 1);
|
|
369
|
+
assertBounds(profile.bounds, `${path}.bounds`);
|
|
370
|
+
assertBackendSettings(profile.backend, `${path}.backend`);
|
|
371
|
+
assertCullingSettings(profile.culling, `${path}.culling`);
|
|
372
|
+
assertDiagnosticThresholds(profile.diagnostics, `${path}.diagnostics`);
|
|
373
|
+
}
|
|
374
|
+
function assertBehaviorProfile(value, path) {
|
|
375
|
+
const profile = record(value, path);
|
|
376
|
+
knownFields(profile, ['cast', 'receive', 'updateClass'], path);
|
|
377
|
+
if (profile.cast !== 'enabled' && profile.cast !== 'disabled')
|
|
378
|
+
invalid(`${path}.cast`, 'expected enabled or disabled');
|
|
379
|
+
if (profile.receive !== 'enabled' && profile.receive !== 'disabled')
|
|
380
|
+
invalid(`${path}.receive`, 'expected enabled or disabled');
|
|
381
|
+
if (!['auto', 'static', 'dynamic', 'skinned'].includes(String(profile.updateClass))) {
|
|
382
|
+
invalid(`${path}.updateClass`, 'expected auto, static, dynamic, or skinned');
|
|
383
|
+
}
|
|
384
|
+
}
|
|
385
|
+
function assertMapSettings(value, path) {
|
|
386
|
+
const maps = record(value, path);
|
|
387
|
+
knownFields(maps, ['staticResolution', 'dynamicResolution', 'compositeResolution'], path);
|
|
388
|
+
assertResolution(maps.staticResolution, `${path}.staticResolution`);
|
|
389
|
+
assertResolution(maps.dynamicResolution, `${path}.dynamicResolution`);
|
|
390
|
+
assertResolution(maps.compositeResolution, `${path}.compositeResolution`);
|
|
391
|
+
}
|
|
392
|
+
function assertResolution(value, path) {
|
|
393
|
+
if (value !== 512 && value !== 1024 && value !== 2048 && value !== 4096) {
|
|
394
|
+
invalid(path, 'expected 512, 1024, 2048, or 4096');
|
|
395
|
+
}
|
|
396
|
+
}
|
|
397
|
+
function assertCascadeCount(value, path) {
|
|
398
|
+
if (value !== 1 && value !== 2 && value !== 4)
|
|
399
|
+
invalid(path, 'expected 1, 2, or 4');
|
|
400
|
+
}
|
|
401
|
+
function assertBackendSettings(value, path) {
|
|
402
|
+
const backend = record(value, path);
|
|
403
|
+
knownFields(backend, ['mode', 'fallback'], path);
|
|
404
|
+
if (!['auto', 'split', 'single'].includes(String(backend.mode)))
|
|
405
|
+
invalid(`${path}.mode`, 'expected auto, split, or single');
|
|
406
|
+
if (backend.fallback !== 'single-map' && backend.fallback !== 'disable')
|
|
407
|
+
invalid(`${path}.fallback`, 'expected single-map or disable');
|
|
408
|
+
}
|
|
409
|
+
function assertCullingSettings(value, path) {
|
|
410
|
+
const culling = record(value, path);
|
|
411
|
+
knownFields(culling, ['enabled', 'guardBandRatio'], path);
|
|
412
|
+
if (typeof culling.enabled !== 'boolean')
|
|
413
|
+
invalid(`${path}.enabled`, 'expected boolean');
|
|
414
|
+
finiteInRange(culling.guardBandRatio, `${path}.guardBandRatio`, 0, 4);
|
|
415
|
+
}
|
|
416
|
+
function assertDiagnosticThresholds(value, path) {
|
|
417
|
+
const thresholds = record(value, path);
|
|
418
|
+
knownFields(thresholds, ['staticCasterCountWarning', 'dynamicCasterCountWarning', 'renderableCountWarning'], path);
|
|
419
|
+
nonNegativeInteger(thresholds.staticCasterCountWarning, `${path}.staticCasterCountWarning`);
|
|
420
|
+
nonNegativeInteger(thresholds.dynamicCasterCountWarning, `${path}.dynamicCasterCountWarning`);
|
|
421
|
+
nonNegativeInteger(thresholds.renderableCountWarning, `${path}.renderableCountWarning`);
|
|
422
|
+
}
|
|
423
|
+
function assertDiagnostic(value, path) {
|
|
424
|
+
const diagnostic = record(value, path);
|
|
425
|
+
knownFields(diagnostic, ['code', 'severity', 'message', 'entityId', 'renderableId', 'details'], path);
|
|
426
|
+
nonEmptyString(diagnostic.code, `${path}.code`);
|
|
427
|
+
if (!['info', 'warning', 'error'].includes(String(diagnostic.severity)))
|
|
428
|
+
invalid(`${path}.severity`, 'expected info, warning, or error');
|
|
429
|
+
nonEmptyString(diagnostic.message, `${path}.message`);
|
|
430
|
+
if (diagnostic.entityId !== undefined)
|
|
431
|
+
nonEmptyString(diagnostic.entityId, `${path}.entityId`);
|
|
432
|
+
if (diagnostic.renderableId !== undefined)
|
|
433
|
+
nonEmptyString(diagnostic.renderableId, `${path}.renderableId`);
|
|
434
|
+
if (diagnostic.details !== undefined)
|
|
435
|
+
record(diagnostic.details, `${path}.details`);
|
|
436
|
+
}
|
|
437
|
+
function assertUniquePlanObjects(objects) {
|
|
438
|
+
const entities = new Set();
|
|
439
|
+
const renderables = new Set();
|
|
440
|
+
for (const object of objects) {
|
|
441
|
+
if (entities.has(object.entityId))
|
|
442
|
+
invalid('$.objects', `duplicate entity id: ${object.entityId}`);
|
|
443
|
+
entities.add(object.entityId);
|
|
444
|
+
for (const id of object.renderableIds) {
|
|
445
|
+
if (renderables.has(id))
|
|
446
|
+
invalid('$.objects', `duplicate renderable id: ${id}`);
|
|
447
|
+
renderables.add(id);
|
|
448
|
+
}
|
|
449
|
+
}
|
|
450
|
+
}
|
|
451
|
+
function profileRecord(value, path) {
|
|
452
|
+
const profiles = record(value, path);
|
|
453
|
+
if (Object.keys(profiles).length === 0)
|
|
454
|
+
invalid(path, 'expected at least one profile');
|
|
455
|
+
for (const id of Object.keys(profiles))
|
|
456
|
+
nonEmptyString(id, `${path} key`);
|
|
457
|
+
return profiles;
|
|
458
|
+
}
|
|
459
|
+
function requireProfile(profiles, profileId, path, kind) {
|
|
460
|
+
if (!Object.prototype.hasOwnProperty.call(profiles, profileId)) {
|
|
461
|
+
invalid(path, `unknown ${kind} profile: ${profileId}`);
|
|
462
|
+
}
|
|
463
|
+
return profiles[profileId];
|
|
464
|
+
}
|
|
465
|
+
function cloneBounds(value) {
|
|
466
|
+
return Object.freeze({ mode: 'fixed', center: tuple3(value.center, '$.bounds.center'), extent: tuple3(value.extent, '$.bounds.extent'), near: value.near, far: value.far });
|
|
467
|
+
}
|
|
468
|
+
function tuple3(value, path) {
|
|
469
|
+
const entries = array(value, path);
|
|
470
|
+
if (entries.length !== 3)
|
|
471
|
+
invalid(path, 'expected exactly three numbers');
|
|
472
|
+
return Object.freeze(entries.map((entry, index) => finite(entry, `${path}[${index}]`)));
|
|
473
|
+
}
|
|
474
|
+
function uniqueStrings(value, path) {
|
|
475
|
+
const result = value.map((entry, index) => nonEmptyString(entry, `${path}[${index}]`));
|
|
476
|
+
if (new Set(result).size !== result.length)
|
|
477
|
+
invalid(path, 'expected unique strings');
|
|
478
|
+
return result;
|
|
479
|
+
}
|
|
480
|
+
function finite(value, path) {
|
|
481
|
+
if (typeof value !== 'number' || !Number.isFinite(value))
|
|
482
|
+
invalid(path, 'expected a finite number');
|
|
483
|
+
return value;
|
|
484
|
+
}
|
|
485
|
+
function finiteInRange(value, path, min, max) {
|
|
486
|
+
const result = finite(value, path);
|
|
487
|
+
if (result < min || result > max)
|
|
488
|
+
invalid(path, `expected ${min}..${max}`);
|
|
489
|
+
return result;
|
|
490
|
+
}
|
|
491
|
+
function nonNegativeInteger(value, path) {
|
|
492
|
+
if (!Number.isInteger(value) || value < 0)
|
|
493
|
+
invalid(path, 'expected a non-negative integer');
|
|
494
|
+
return value;
|
|
495
|
+
}
|
|
496
|
+
function nonEmptyString(value, path) {
|
|
497
|
+
if (typeof value !== 'string' || !value.trim() || value !== value.trim())
|
|
498
|
+
invalid(path, 'expected a trimmed non-empty string');
|
|
499
|
+
return value;
|
|
500
|
+
}
|
|
501
|
+
function record(value, path) {
|
|
502
|
+
if (!value || typeof value !== 'object' || Array.isArray(value))
|
|
503
|
+
invalid(path, 'expected an object');
|
|
504
|
+
const prototype = Object.getPrototypeOf(value);
|
|
505
|
+
if (prototype !== Object.prototype && prototype !== null)
|
|
506
|
+
invalid(path, 'expected a plain object');
|
|
507
|
+
return value;
|
|
508
|
+
}
|
|
509
|
+
function array(value, path) {
|
|
510
|
+
if (!Array.isArray(value))
|
|
511
|
+
invalid(path, 'expected an array');
|
|
512
|
+
return value;
|
|
513
|
+
}
|
|
514
|
+
function knownFields(value, fields, path) {
|
|
515
|
+
const allowed = new Set(fields);
|
|
516
|
+
for (const key of Object.keys(value))
|
|
517
|
+
if (!allowed.has(key))
|
|
518
|
+
invalid(`${path}.${key}`, 'unknown field');
|
|
519
|
+
}
|
|
520
|
+
function cloneJson(value, path) {
|
|
521
|
+
if (value === null || typeof value === 'string' || typeof value === 'boolean')
|
|
522
|
+
return value;
|
|
523
|
+
if (typeof value === 'number')
|
|
524
|
+
return finite(value, path);
|
|
525
|
+
if (Array.isArray(value))
|
|
526
|
+
return Object.freeze(value.map((entry, index) => cloneJson(entry, `${path}[${index}]`)));
|
|
527
|
+
const source = record(value, path);
|
|
528
|
+
const result = Object.create(null);
|
|
529
|
+
for (const [key, entry] of Object.entries(source))
|
|
530
|
+
result[key] = cloneJson(entry, `${path}.${key}`);
|
|
531
|
+
return Object.freeze(result);
|
|
532
|
+
}
|
|
533
|
+
function deepFreeze(value) {
|
|
534
|
+
if (!value || typeof value !== 'object' || Object.isFrozen(value))
|
|
535
|
+
return value;
|
|
536
|
+
for (const child of Object.values(value))
|
|
537
|
+
deepFreeze(child);
|
|
538
|
+
return Object.freeze(value);
|
|
539
|
+
}
|
|
540
|
+
function sameStrings(left, right) {
|
|
541
|
+
return left.length === right.length && left.every((entry, index) => entry === right[index]);
|
|
542
|
+
}
|
|
543
|
+
function sameNumbers(left, right) {
|
|
544
|
+
return left.length === right.length && left.every((entry, index) => entry === right[index]);
|
|
545
|
+
}
|
|
546
|
+
function invalid(path, reason) {
|
|
547
|
+
throw new Error(`shadow_map_experiment_invalid:${path}:${reason}`);
|
|
548
|
+
}
|
|
549
|
+
//# sourceMappingURL=shadow-map-experiment.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shadow-map-experiment.js","sourceRoot":"","sources":["../../src/rendering/shadow-map-experiment.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { EditorShadowParams, EditorShadowResolvedParams, EditorShadowResolvedQuality } from './shadow-types.js';
|
|
2
|
+
export declare const EDITOR_SHADOW_DEFAULT_QUALITY: EditorShadowResolvedQuality;
|
|
3
|
+
export declare const EDITOR_SHADOW_QUALITY_PRESETS: Record<EditorShadowResolvedQuality, EditorShadowResolvedParams>;
|
|
4
|
+
export declare function resolveEditorShadowParams(quality?: EditorShadowResolvedQuality, params?: EditorShadowParams): EditorShadowResolvedParams;
|
|
5
|
+
//# sourceMappingURL=shadow-quality.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shadow-quality.d.ts","sourceRoot":"","sources":["../../src/rendering/shadow-quality.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,kBAAkB,EAClB,0BAA0B,EAC1B,2BAA2B,EAC5B,MAAM,mBAAmB,CAAC;AAE3B,eAAO,MAAM,6BAA6B,EAAE,2BAAsC,CAAC;AAEnF,eAAO,MAAM,6BAA6B,EAAE,MAAM,CAAC,2BAA2B,EAAE,0BAA0B,CA6CzG,CAAC;AAEF,wBAAgB,yBAAyB,CACvC,OAAO,GAAE,2BAA2D,EACpE,MAAM,GAAE,kBAAuB,GAC9B,0BAA0B,CAa5B"}
|