@plasius/gpu-lighting 0.2.5 → 0.2.7

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.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.js"],"sourcesContent":["function createModuleBaseUrl(metaUrl) {\n return Reflect.construct(URL, [String(metaUrl)]);\n}\n\nconst baseUrl = (() => {\n if (typeof __IMPORT_META_URL__ !== \"undefined\") {\n return createModuleBaseUrl(__IMPORT_META_URL__);\n }\n if (typeof __filename !== \"undefined\" && typeof require !== \"undefined\") {\n const { pathToFileURL } = require(\"node:url\");\n return pathToFileURL(__filename);\n }\n const base =\n typeof process !== \"undefined\" && process.cwd\n ? `file://${process.cwd()}/`\n : \"file:///\";\n return new URL(\"./index.js\", base);\n})();\n\nconst techniqueSpecs = {\n hybrid: {\n description:\n \"Lumen-inspired hybrid realtime GI and reflections with radiance cache final gather.\",\n prelude: \"prelude.wgsl\",\n jobs: {\n directLighting: \"direct-lighting.job.wgsl\",\n screenTrace: \"screen-trace.job.wgsl\",\n radianceCache: \"radiance-cache.job.wgsl\",\n finalGather: \"final-gather.job.wgsl\",\n reflectionResolve: \"reflection-resolve.job.wgsl\",\n },\n },\n pathtracer: {\n description:\n \"Monte Carlo path-traced reference mode with progressive accumulation and denoise stage.\",\n prelude: \"prelude.wgsl\",\n jobs: {\n pathTrace: \"pathtrace.job.wgsl\",\n accumulate: \"accumulate.job.wgsl\",\n denoise: \"denoise.job.wgsl\",\n },\n },\n volumetrics: {\n description:\n \"Froxel volumetric lighting for fog, shafts, and participating media shadows.\",\n prelude: \"prelude.wgsl\",\n jobs: {\n froxelIntegrate: \"froxel-integrate.job.wgsl\",\n volumetricShadow: \"volumetric-shadow.job.wgsl\",\n },\n },\n hdri: {\n description:\n \"HDRI and IBL precompute passes including irradiance, specular prefilter, and BRDF LUT.\",\n prelude: \"prelude.wgsl\",\n jobs: {\n irradianceConvolution: \"irradiance-convolution.job.wgsl\",\n specularPrefilter: \"specular-prefilter.job.wgsl\",\n brdfLut: \"brdf-lut.job.wgsl\",\n },\n },\n};\n\nfunction buildTechnique(name, spec) {\n const preludeUrl = new URL(`./techniques/${name}/${spec.prelude}`, baseUrl);\n const jobs = Object.entries(spec.jobs).map(([key, file]) => {\n const label = `lighting.${name}.${key}`;\n return {\n key,\n label,\n url: new URL(`./techniques/${name}/${file}`, baseUrl),\n sourceName: label,\n };\n });\n return {\n name,\n description: spec.description,\n preludeUrl,\n jobs,\n };\n}\n\nexport const lightingTechniques = Object.freeze(\n Object.fromEntries(\n Object.entries(techniqueSpecs).map(([name, spec]) => [\n name,\n buildTechnique(name, spec),\n ])\n )\n);\n\nexport const lightingTechniqueNames = Object.freeze(Object.keys(lightingTechniques));\n\nexport const defaultLightingTechnique = \"hybrid\";\n\nconst profileSpecs = {\n realtime: {\n description:\n \"Primary runtime profile: hybrid GI/reflections with volumetrics and HDRI/IBL.\",\n techniques: [\"hybrid\", \"volumetrics\", \"hdri\"],\n },\n hybrid: {\n description:\n \"Hybrid-focused profile for direct tuning of Lumen-inspired realtime passes.\",\n techniques: [\"hybrid\", \"hdri\"],\n },\n reference: {\n description:\n \"Reference quality profile: path tracing plus volumetrics and HDRI/IBL validation.\",\n techniques: [\"pathtracer\", \"volumetrics\", \"hdri\"],\n },\n};\n\nfunction buildProfile(name, spec) {\n return {\n name,\n description: spec.description,\n techniques: [...spec.techniques],\n };\n}\n\nexport const lightingProfiles = Object.freeze(\n Object.fromEntries(\n Object.entries(profileSpecs).map(([name, spec]) => [\n name,\n buildProfile(name, spec),\n ])\n )\n);\n\nexport const lightingProfileNames = Object.freeze(Object.keys(lightingProfiles));\n\nexport const defaultLightingProfile = \"realtime\";\nexport const lightingProfileModeOrder = Object.freeze([\n \"realtime\",\n \"hybrid\",\n \"reference\",\n]);\nexport const lightingEnvironmentTimeOfDayNames = Object.freeze([\n \"dawn\",\n \"midday\",\n \"dusk\",\n \"night\",\n]);\nexport const lightingEnvironmentSceneNames = Object.freeze([\n \"studio\",\n \"harbor\",\n \"grass-field\",\n \"forest\",\n \"warehouse\",\n \"cavern\",\n]);\nexport const lightingEnvironmentLightSourceKinds = Object.freeze([\n \"sky\",\n \"sun\",\n \"moon\",\n \"stars\",\n \"horizon-glow\",\n \"ground-bounce\",\n \"studio-softbox\",\n \"canopy-transmission\",\n \"window-portal\",\n \"fluorescent-strip\",\n \"sodium-door\",\n \"emergency-beacon\",\n \"cave-mouth\",\n \"torch\",\n \"bioluminescence\",\n \"lava-fissure\",\n \"crystal\",\n \"custom\",\n]);\nexport const lightingEnvironmentPortalShapes = Object.freeze([\"rectangle\"]);\nexport const lightingEnvironmentPortalModes = Object.freeze([\n \"disabled\",\n \"guide\",\n \"guide-and-gate\",\n]);\nexport const defaultAdaptiveLightingProfilePolicy = Object.freeze({\n preferredProfile: \"reference\",\n minimumFrameRate: 30,\n sampleWindowSize: 4,\n});\nexport const lightingDistanceBands = Object.freeze([\n \"near\",\n \"mid\",\n \"far\",\n \"horizon\",\n]);\n\nexport const lightingWorkerQueueClass = \"lighting\";\nexport const lightingDebugOwner = \"lighting\";\n\nconst environmentPresetAmbientScales = Object.freeze({\n \"grass-field\": 0.78,\n forest: 0.78,\n warehouse: 0.82,\n cavern: 0.78,\n});\n\nconst environmentSunlitBaselineByTimeOfDay = Object.freeze({\n dawn: 0.18,\n midday: 0.28,\n dusk: 0.14,\n night: 0.035,\n});\n\nconst environmentSunlitBaselineSceneScales = Object.freeze({\n \"grass-field\": 1,\n forest: 0.78,\n warehouse: 0.62,\n cavern: 0.42,\n harbor: 0.85,\n studio: 0.58,\n});\n\nfunction freezeVec4(value) {\n return Object.freeze([value[0], value[1], value[2], value[3] ?? 1]);\n}\n\nfunction scaleVec4(value, scale) {\n return [\n value[0] * scale,\n value[1] * scale,\n value[2] * scale,\n value[3] ?? 1,\n ];\n}\n\nfunction normalizeVector3(value, fallback) {\n if (!Array.isArray(value) || value.length < 3) {\n return [...fallback];\n }\n const vector = [\n Number.isFinite(value[0]) ? value[0] : fallback[0],\n Number.isFinite(value[1]) ? value[1] : fallback[1],\n Number.isFinite(value[2]) ? value[2] : fallback[2],\n ];\n const length = Math.hypot(vector[0], vector[1], vector[2]);\n if (!Number.isFinite(length) || length <= 0.000001) {\n return [...fallback];\n }\n return vector.map((component) => component / length);\n}\n\nfunction readColor(value, fallback) {\n if (!Array.isArray(value) || value.length < 3) {\n return freezeVec4(fallback);\n }\n return freezeVec4([\n Number.isFinite(value[0]) ? Math.max(0, value[0]) : fallback[0],\n Number.isFinite(value[1]) ? Math.max(0, value[1]) : fallback[1],\n Number.isFinite(value[2]) ? Math.max(0, value[2]) : fallback[2],\n Number.isFinite(value[3]) ? Math.max(0, Math.min(1, value[3])) : fallback[3] ?? 1,\n ]);\n}\n\nfunction colorLuminance(value) {\n return value[0] * 0.2126 + value[1] * 0.7152 + value[2] * 0.0722;\n}\n\nfunction readPositiveColor(value, fallback) {\n const color = readColor(value, fallback);\n const fallbackColor = readColor(fallback, [1, 1, 1, 1]);\n return freezeVec4([\n color[0] > 0 ? color[0] : Math.max(fallbackColor[0], 0.0001),\n color[1] > 0 ? color[1] : Math.max(fallbackColor[1], 0.0001),\n color[2] > 0 ? color[2] : Math.max(fallbackColor[2], 0.0001),\n color[3],\n ]);\n}\n\nfunction ensureNonNullColor(value, fallback = [1, 1, 1, 1]) {\n const color = readColor(value, fallback);\n if (colorLuminance(color) > 0.000001) {\n return color;\n }\n return readPositiveColor(fallback, [1, 1, 1, 1]);\n}\n\nfunction readFinite(value, fallback) {\n return Number.isFinite(value) ? value : fallback;\n}\n\nfunction readVector3(value, fallback) {\n if (!Array.isArray(value) || value.length < 3) {\n return [...fallback];\n }\n return [\n Number.isFinite(value[0]) ? value[0] : fallback[0],\n Number.isFinite(value[1]) ? value[1] : fallback[1],\n Number.isFinite(value[2]) ? value[2] : fallback[2],\n ];\n}\n\nfunction dot3(a, b) {\n return a[0] * b[0] + a[1] * b[1] + a[2] * b[2];\n}\n\nfunction cross3(a, b) {\n return [\n a[1] * b[2] - a[2] * b[1],\n a[2] * b[0] - a[0] * b[2],\n a[0] * b[1] - a[1] * b[0],\n ];\n}\n\nfunction normalizeRawVector3(value, fallback) {\n const length = Math.hypot(value[0], value[1], value[2]);\n if (!Number.isFinite(length) || length <= 0.000001) {\n return [...fallback];\n }\n return value.map((component) => component / length);\n}\n\nfunction orthogonalFallback(normal) {\n if (Math.abs(normal[1]) < 0.92) {\n return normalizeRawVector3(cross3([0, 1, 0], normal), [1, 0, 0]);\n }\n return normalizeRawVector3(cross3([1, 0, 0], normal), [0, 0, 1]);\n}\n\nfunction normalizePortalTangent(value, normal) {\n const raw = normalizeVector3(value, orthogonalFallback(normal));\n const projected = [\n raw[0] - normal[0] * dot3(raw, normal),\n raw[1] - normal[1] * dot3(raw, normal),\n raw[2] - normal[2] * dot3(raw, normal),\n ];\n return normalizeRawVector3(projected, orthogonalFallback(normal));\n}\n\nfunction readPositiveFinite(value, fallback) {\n const number = Number(value ?? fallback);\n if (!Number.isFinite(number)) {\n return fallback;\n }\n return Math.max(number, 0.0001);\n}\n\nfunction normalizeEnvironmentPortalMode(value, hasPortals) {\n if (value == null) {\n return hasPortals ? \"guide-and-gate\" : \"disabled\";\n }\n if (value === \"gate\") {\n return \"guide-and-gate\";\n }\n if (lightingEnvironmentPortalModes.includes(value)) {\n return value;\n }\n throw new Error(\n `environmentPortalMode must be one of: ${lightingEnvironmentPortalModes.join(\", \")}.`\n );\n}\n\nfunction normalizeEnvironmentPortal(portal, index) {\n if (!portal || typeof portal !== \"object\") {\n throw new Error(`environmentPortals[${index}] must be an object.`);\n }\n const shape = portal.shape ?? portal.kind ?? \"rectangle\";\n if (!lightingEnvironmentPortalShapes.includes(shape)) {\n throw new Error(\n `environmentPortals[${index}].shape must be one of: ${lightingEnvironmentPortalShapes.join(\", \")}.`\n );\n }\n const normal = Object.freeze(\n normalizeVector3(portal.normal, [0, 0, 1])\n );\n const tangent = Object.freeze(normalizePortalTangent(portal.tangent, normal));\n const bitangent = Object.freeze(\n normalizeRawVector3(cross3(normal, tangent), [0, 1, 0])\n );\n const width = readPositiveFinite(\n portal.width,\n readPositiveFinite(portal.halfWidth, 0.5) * 2\n );\n const height = readPositiveFinite(\n portal.height,\n readPositiveFinite(portal.halfHeight, 0.5) * 2\n );\n const radianceScale = Math.max(\n 0,\n readFinite(portal.radianceScale ?? portal.intensity, 1)\n );\n return Object.freeze({\n id: typeof portal.id === \"string\" && portal.id.length > 0\n ? portal.id\n : `environment-portal-${index}`,\n shape,\n position: Object.freeze(readVector3(portal.position ?? portal.center, [0, 0, 0])),\n normal,\n tangent,\n bitangent,\n width,\n height,\n radianceScale,\n color: readColor(portal.color, [1, 1, 1, 1]),\n twoSided: portal.twoSided !== false,\n });\n}\n\nfunction normalizeEnvironmentPortals(value) {\n if (value == null) {\n return Object.freeze([]);\n }\n if (!Array.isArray(value)) {\n throw new Error(\"environmentPortals must be an array when provided.\");\n }\n return Object.freeze(value.map(normalizeEnvironmentPortal));\n}\n\nfunction normalizeEnvironmentMap(value) {\n if (value == null) {\n return null;\n }\n if (!value || typeof value !== \"object\") {\n throw new Error(\"environmentMap must be an object when provided.\");\n }\n return Object.freeze({\n ...value,\n id: typeof value.id === \"string\" && value.id.length > 0\n ? value.id\n : \"environment-map\",\n projection: typeof value.projection === \"string\" && value.projection.length > 0\n ? value.projection\n : \"equirectangular\",\n intensity: readPositiveFinite(value.intensity ?? value.radianceScale, 1),\n rotationRadians: readFinite(value.rotationRadians ?? value.rotation, 0),\n ambientStrength: Math.max(0, readFinite(value.ambientStrength, 0.32)),\n });\n}\n\nfunction freezeLightSourceSpec(source) {\n return Object.freeze({\n ...source,\n color: source.color ? freezeVec4(source.color) : undefined,\n direction: source.direction\n ? Object.freeze(normalizeVector3(source.direction, [0, 1, 0]))\n : undefined,\n position: source.position\n ? Object.freeze(readVector3(source.position, [0, 0, 0]))\n : undefined,\n });\n}\n\nfunction defineEnvironmentPreset(spec) {\n const scene = spec.scene ?? \"studio\";\n const timeOfDay = spec.timeOfDay ?? \"midday\";\n const ambientScale = Math.max(\n 0,\n readFinite(spec.ambientScale, environmentPresetAmbientScales[scene] ?? 1)\n );\n const defaultSunlitBaseline =\n (environmentSunlitBaselineByTimeOfDay[timeOfDay] ??\n environmentSunlitBaselineByTimeOfDay.midday) *\n (environmentSunlitBaselineSceneScales[scene] ?? 0.58);\n const sunlitBaseline = Math.max(\n 0,\n readFinite(spec.sunlitBaseline, defaultSunlitBaseline)\n );\n return Object.freeze({\n ...spec,\n scene,\n timeOfDay,\n horizonColor: freezeVec4(spec.horizonColor),\n zenithColor: freezeVec4(spec.zenithColor),\n sunDirection: Object.freeze(normalizeVector3(spec.sunDirection, [0, 1, 0])),\n sunColor: freezeVec4(spec.sunColor),\n ambientColor: freezeVec4(scaleVec4(spec.ambientColor, ambientScale)),\n sunlitBaseline,\n environmentLightSources: Object.freeze(\n (spec.environmentLightSources ?? []).map(freezeLightSourceSpec)\n ),\n });\n}\n\nfunction buildEnvironmentLightSourceFallback(config, preset) {\n const firstPresetSource = preset.environmentLightSources[0] ?? {};\n return {\n kind: firstPresetSource.kind ?? \"sky\",\n role: firstPresetSource.role ?? \"fill\",\n color: firstPresetSource.color ?? config.sunColor,\n intensity:\n firstPresetSource.intensity ??\n Math.max(config.environmentIntensity, 0.0001),\n direction: firstPresetSource.direction ?? config.sunDirection,\n angularRadiusRadians: firstPresetSource.angularRadiusRadians ?? 0.25,\n reach: firstPresetSource.reach ?? 1000,\n };\n}\n\nfunction normalizeEnvironmentLightSource(source, index, fallback) {\n if (!source || typeof source !== \"object\") {\n throw new Error(`environmentLightSources[${index}] must be an object.`);\n }\n const requestedKind = source.kind ?? source.type ?? fallback.kind ?? \"custom\";\n const kind = lightingEnvironmentLightSourceKinds.includes(requestedKind)\n ? requestedKind\n : \"custom\";\n const color = readPositiveColor(source.color, fallback.color ?? [1, 1, 1, 1]);\n const intensity = readPositiveFinite(\n source.intensity ?? source.radianceScale,\n fallback.intensity ?? 1\n );\n const radiance = freezeVec4([\n color[0] * intensity,\n color[1] * intensity,\n color[2] * intensity,\n color[3],\n ]);\n return Object.freeze({\n id:\n typeof source.id === \"string\" && source.id.length > 0\n ? source.id\n : `environment-light-source-${index}`,\n kind,\n type: kind,\n role:\n typeof source.role === \"string\" && source.role.length > 0\n ? source.role\n : fallback.role ?? \"fill\",\n direction: Object.freeze(\n normalizeVector3(source.direction, fallback.direction ?? [0, 1, 0])\n ),\n position: Object.freeze(\n readVector3(source.position ?? source.origin, fallback.position ?? [0, 0, 0])\n ),\n color,\n intensity,\n radiance,\n luminance: colorLuminance(radiance),\n angularRadiusRadians: readPositiveFinite(\n source.angularRadiusRadians ?? source.angularRadius,\n fallback.angularRadiusRadians ?? 0.25\n ),\n reach: readPositiveFinite(\n source.reach ?? source.distance,\n fallback.reach ?? 1000\n ),\n castsShadows: source.castsShadows !== false,\n contributesToEnvironment: source.contributesToEnvironment !== false,\n });\n}\n\nfunction normalizeEnvironmentLightSources(value, preset, config) {\n const baseSources = value ?? preset.environmentLightSources;\n const fallback = buildEnvironmentLightSourceFallback(config, preset);\n if (!Array.isArray(baseSources)) {\n throw new Error(\"environmentLightSources must be an array when provided.\");\n }\n const normalizedSources = baseSources.length > 0\n ? baseSources.map((source, index) =>\n normalizeEnvironmentLightSource(source, index, fallback)\n )\n : [normalizeEnvironmentLightSource(fallback, 0, fallback)];\n return Object.freeze(normalizedSources);\n}\n\nfunction findDominantEnvironmentLightSource(sources) {\n return sources.reduce((dominant, source) =>\n source.luminance > dominant.luminance ? source : dominant\n );\n}\n\nfunction createEnvironmentMissLighting(source, environmentColor) {\n const fallbackRadiance = readPositiveColor(environmentColor, source.radiance);\n const radiance = ensureNonNullColor(source.radiance, fallbackRadiance);\n const color = readPositiveColor(source.color, environmentColor);\n return Object.freeze({\n sourceId: source.id,\n kind: source.kind,\n role: source.role,\n contribution: \"inferred-environment\",\n startingPoint: \"environment-miss\",\n direction: source.direction,\n position: source.position,\n color,\n intensity: Math.max(source.intensity, 0.0001),\n radiance,\n luminance: Math.max(colorLuminance(radiance), 0.0001),\n });\n}\n\nconst environmentLightingPresets = Object.freeze({\n \"moonlit-harbor\": defineEnvironmentPreset({\n preset: \"moonlit-harbor\",\n scene: \"harbor\",\n timeOfDay: \"night\",\n environmentMode: 0,\n environmentIntensity: 0.86,\n exposure: 1,\n horizonColor: freezeVec4([0.33, 0.43, 0.53, 1]),\n zenithColor: freezeVec4([0.035, 0.07, 0.14, 1]),\n sunDirection: Object.freeze(normalizeVector3([0.22, 0.88, 0.42], [0, 1, 0])),\n sunColor: freezeVec4([2.1, 2.25, 2.65, 1]),\n ambientColor: freezeVec4([0.018, 0.023, 0.03, 1]),\n environmentLightSources: [\n {\n id: \"harbor-moon\",\n kind: \"moon\",\n role: \"key\",\n direction: [0.22, 0.88, 0.42],\n color: [0.7, 0.76, 0.9, 1],\n intensity: 2.2,\n angularRadiusRadians: 0.018,\n },\n {\n id: \"harbor-sky\",\n kind: \"sky\",\n role: \"fill\",\n direction: [0, 1, 0],\n color: [0.22, 0.31, 0.48, 1],\n intensity: 0.35,\n },\n ],\n }),\n \"product-studio\": defineEnvironmentPreset({\n preset: \"product-studio\",\n scene: \"studio\",\n timeOfDay: \"midday\",\n environmentMode: 1,\n environmentIntensity: 1.05,\n exposure: 1,\n horizonColor: freezeVec4([0.52, 0.61, 0.65, 1]),\n zenithColor: freezeVec4([0.18, 0.22, 0.26, 1]),\n sunDirection: Object.freeze(normalizeVector3([0.18, 0.93, 0.24], [0, 1, 0])),\n sunColor: freezeVec4([3.8, 3.55, 2.85, 1]),\n ambientColor: freezeVec4([0.024, 0.027, 0.03, 1]),\n environmentLightSources: [\n {\n id: \"studio-key-softbox\",\n kind: \"studio-softbox\",\n role: \"key\",\n direction: [0.18, 0.93, 0.24],\n color: [1, 0.94, 0.82, 1],\n intensity: 4.1,\n angularRadiusRadians: 0.42,\n },\n {\n id: \"studio-fill-panel\",\n kind: \"studio-softbox\",\n role: \"fill\",\n direction: [-0.56, 0.62, -0.2],\n color: [0.75, 0.84, 1, 1],\n intensity: 1.3,\n angularRadiusRadians: 0.55,\n },\n ],\n }),\n \"neutral-studio\": defineEnvironmentPreset({\n preset: \"neutral-studio\",\n scene: \"studio\",\n timeOfDay: \"midday\",\n environmentMode: 2,\n environmentIntensity: 0.95,\n exposure: 1,\n horizonColor: freezeVec4([0.48, 0.53, 0.55, 1]),\n zenithColor: freezeVec4([0.24, 0.26, 0.29, 1]),\n sunDirection: Object.freeze(normalizeVector3([-0.24, 0.86, 0.36], [0, 1, 0])),\n sunColor: freezeVec4([2.4, 2.35, 2.2, 1]),\n ambientColor: freezeVec4([0.028, 0.029, 0.03, 1]),\n environmentLightSources: [\n {\n id: \"neutral-studio-overhead\",\n kind: \"studio-softbox\",\n role: \"key\",\n direction: [-0.24, 0.86, 0.36],\n color: [0.96, 0.97, 1, 1],\n intensity: 2.5,\n angularRadiusRadians: 0.5,\n },\n {\n id: \"neutral-studio-wall-bounce\",\n kind: \"ground-bounce\",\n role: \"fill\",\n direction: [0.2, 0.3, -0.9],\n color: [0.55, 0.58, 0.62, 1],\n intensity: 0.8,\n },\n ],\n }),\n \"grass-field-dawn\": defineEnvironmentPreset({\n preset: \"grass-field-dawn\",\n scene: \"grass-field\",\n timeOfDay: \"dawn\",\n environmentMode: 3,\n environmentIntensity: 0.92,\n exposure: 1.06,\n horizonColor: [0.92, 0.54, 0.32, 1],\n zenithColor: [0.16, 0.28, 0.5, 1],\n sunDirection: [0.64, 0.32, 0.18],\n sunColor: [5.6, 3.15, 1.55, 1],\n ambientColor: [0.034, 0.047, 0.032, 1],\n environmentLightSources: [\n { id: \"field-dawn-sun\", kind: \"sun\", role: \"key\", direction: [0.64, 0.32, 0.18], color: [1, 0.58, 0.28, 1], intensity: 5.6, angularRadiusRadians: 0.012 },\n { id: \"field-dawn-sky\", kind: \"sky\", role: \"fill\", direction: [0, 1, 0], color: [0.36, 0.52, 0.82, 1], intensity: 0.9 },\n { id: \"field-dawn-grass-bounce\", kind: \"ground-bounce\", role: \"bounce\", direction: [0, 0.25, 0.1], color: [0.22, 0.44, 0.12, 1], intensity: 0.45 },\n ],\n }),\n \"grass-field-midday\": defineEnvironmentPreset({\n preset: \"grass-field-midday\",\n scene: \"grass-field\",\n timeOfDay: \"midday\",\n environmentMode: 4,\n environmentIntensity: 1.18,\n exposure: 0.96,\n horizonColor: [0.58, 0.78, 0.96, 1],\n zenithColor: [0.1, 0.34, 0.82, 1],\n sunDirection: [0.18, 0.98, 0.08],\n sunColor: [9.8, 9.4, 8.55, 1],\n ambientColor: [0.048, 0.062, 0.04, 1],\n environmentLightSources: [\n { id: \"field-midday-sun\", kind: \"sun\", role: \"key\", direction: [0.18, 0.98, 0.08], color: [1, 0.96, 0.86, 1], intensity: 9.8, angularRadiusRadians: 0.0093 },\n { id: \"field-midday-sky\", kind: \"sky\", role: \"fill\", direction: [0, 1, 0], color: [0.48, 0.7, 1, 1], intensity: 1.8 },\n { id: \"field-midday-ground\", kind: \"ground-bounce\", role: \"bounce\", direction: [0, 0.35, -0.15], color: [0.28, 0.56, 0.16, 1], intensity: 0.65 },\n ],\n }),\n \"grass-field-dusk\": defineEnvironmentPreset({\n preset: \"grass-field-dusk\",\n scene: \"grass-field\",\n timeOfDay: \"dusk\",\n environmentMode: 5,\n environmentIntensity: 0.82,\n exposure: 1.12,\n horizonColor: [1.08, 0.42, 0.24, 1],\n zenithColor: [0.09, 0.1, 0.32, 1],\n sunDirection: [-0.76, 0.24, 0.22],\n sunColor: [4.8, 1.65, 0.72, 1],\n ambientColor: [0.026, 0.026, 0.034, 1],\n environmentLightSources: [\n { id: \"field-dusk-sun\", kind: \"sun\", role: \"key\", direction: [-0.76, 0.24, 0.22], color: [1, 0.34, 0.16, 1], intensity: 4.8, angularRadiusRadians: 0.014 },\n { id: \"field-dusk-horizon\", kind: \"horizon-glow\", role: \"fill\", direction: [-0.9, 0.08, 0.1], color: [0.92, 0.28, 0.16, 1], intensity: 1.2 },\n { id: \"field-dusk-grass\", kind: \"ground-bounce\", role: \"bounce\", direction: [0, 0.22, 0.2], color: [0.12, 0.28, 0.11, 1], intensity: 0.35 },\n ],\n }),\n \"grass-field-night\": defineEnvironmentPreset({\n preset: \"grass-field-night\",\n scene: \"grass-field\",\n timeOfDay: \"night\",\n environmentMode: 6,\n environmentIntensity: 0.48,\n exposure: 1.35,\n horizonColor: [0.08, 0.13, 0.2, 1],\n zenithColor: [0.018, 0.035, 0.09, 1],\n sunDirection: [-0.22, 0.86, -0.34],\n sunColor: [0.72, 0.82, 1.35, 1],\n ambientColor: [0.012, 0.017, 0.026, 1],\n environmentLightSources: [\n { id: \"field-night-moon\", kind: \"moon\", role: \"key\", direction: [-0.22, 0.86, -0.34], color: [0.52, 0.62, 1, 1], intensity: 1.25, angularRadiusRadians: 0.018 },\n { id: \"field-night-stars\", kind: \"stars\", role: \"fill\", direction: [0, 1, 0], color: [0.32, 0.38, 0.6, 1], intensity: 0.24 },\n { id: \"field-night-horizon\", kind: \"horizon-glow\", role: \"rim\", direction: [0.8, 0.08, -0.15], color: [0.08, 0.14, 0.26, 1], intensity: 0.28 },\n ],\n }),\n \"forest-dawn\": defineEnvironmentPreset({\n preset: \"forest-dawn\",\n scene: \"forest\",\n timeOfDay: \"dawn\",\n environmentMode: 7,\n environmentIntensity: 0.78,\n exposure: 1.14,\n horizonColor: [0.72, 0.48, 0.28, 1],\n zenithColor: [0.08, 0.18, 0.18, 1],\n sunDirection: [0.58, 0.42, -0.24],\n sunColor: [4.4, 2.65, 1.32, 1],\n ambientColor: [0.024, 0.04, 0.026, 1],\n environmentLightSources: [\n { id: \"forest-dawn-sun-shaft\", kind: \"sun\", role: \"key\", direction: [0.58, 0.42, -0.24], color: [1, 0.62, 0.32, 1], intensity: 4.4, angularRadiusRadians: 0.018 },\n { id: \"forest-dawn-canopy\", kind: \"canopy-transmission\", role: \"filter\", direction: [0.12, 0.78, 0.2], color: [0.34, 0.68, 0.24, 1], intensity: 0.86 },\n { id: \"forest-dawn-sky-gap\", kind: \"sky\", role: \"fill\", direction: [-0.18, 0.92, 0.12], color: [0.28, 0.46, 0.62, 1], intensity: 0.48 },\n ],\n }),\n \"forest-midday\": defineEnvironmentPreset({\n preset: \"forest-midday\",\n scene: \"forest\",\n timeOfDay: \"midday\",\n environmentMode: 8,\n environmentIntensity: 0.96,\n exposure: 1.02,\n horizonColor: [0.38, 0.62, 0.42, 1],\n zenithColor: [0.08, 0.28, 0.32, 1],\n sunDirection: [0.08, 0.96, -0.18],\n sunColor: [7.2, 6.9, 5.25, 1],\n ambientColor: [0.034, 0.055, 0.032, 1],\n environmentLightSources: [\n { id: \"forest-midday-sun-gap\", kind: \"sun\", role: \"key\", direction: [0.08, 0.96, -0.18], color: [1, 0.96, 0.74, 1], intensity: 7.2, angularRadiusRadians: 0.013 },\n { id: \"forest-midday-leaves\", kind: \"canopy-transmission\", role: \"filter\", direction: [0.32, 0.75, 0.12], color: [0.24, 0.72, 0.28, 1], intensity: 1.35 },\n { id: \"forest-midday-floor\", kind: \"ground-bounce\", role: \"bounce\", direction: [-0.1, 0.25, 0.18], color: [0.18, 0.35, 0.13, 1], intensity: 0.42 },\n ],\n }),\n \"forest-dusk\": defineEnvironmentPreset({\n preset: \"forest-dusk\",\n scene: \"forest\",\n timeOfDay: \"dusk\",\n environmentMode: 9,\n environmentIntensity: 0.68,\n exposure: 1.2,\n horizonColor: [0.72, 0.28, 0.2, 1],\n zenithColor: [0.04, 0.07, 0.18, 1],\n sunDirection: [-0.7, 0.28, -0.18],\n sunColor: [3.2, 1.18, 0.56, 1],\n ambientColor: [0.018, 0.026, 0.024, 1],\n environmentLightSources: [\n { id: \"forest-dusk-horizon\", kind: \"horizon-glow\", role: \"key\", direction: [-0.7, 0.18, -0.18], color: [1, 0.34, 0.2, 1], intensity: 2.2, angularRadiusRadians: 0.1 },\n { id: \"forest-dusk-canopy\", kind: \"canopy-transmission\", role: \"filter\", direction: [0.18, 0.7, 0.26], color: [0.18, 0.38, 0.2, 1], intensity: 0.52 },\n { id: \"forest-dusk-sky-gap\", kind: \"sky\", role: \"fill\", direction: [0, 1, 0], color: [0.12, 0.16, 0.34, 1], intensity: 0.42 },\n ],\n }),\n \"forest-night\": defineEnvironmentPreset({\n preset: \"forest-night\",\n scene: \"forest\",\n timeOfDay: \"night\",\n environmentMode: 10,\n environmentIntensity: 0.42,\n exposure: 1.42,\n horizonColor: [0.035, 0.08, 0.1, 1],\n zenithColor: [0.012, 0.025, 0.06, 1],\n sunDirection: [0.2, 0.82, -0.46],\n sunColor: [0.42, 0.56, 1.1, 1],\n ambientColor: [0.01, 0.016, 0.02, 1],\n environmentLightSources: [\n { id: \"forest-night-moon-gap\", kind: \"moon\", role: \"key\", direction: [0.2, 0.82, -0.46], color: [0.42, 0.56, 1, 1], intensity: 0.95, angularRadiusRadians: 0.025 },\n { id: \"forest-night-canopy\", kind: \"canopy-transmission\", role: \"filter\", direction: [-0.16, 0.66, 0.1], color: [0.08, 0.18, 0.12, 1], intensity: 0.28 },\n { id: \"forest-night-stars\", kind: \"stars\", role: \"fill\", direction: [0, 1, 0], color: [0.22, 0.28, 0.5, 1], intensity: 0.18 },\n ],\n }),\n \"warehouse-dawn\": defineEnvironmentPreset({\n preset: \"warehouse-dawn\",\n scene: \"warehouse\",\n timeOfDay: \"dawn\",\n environmentMode: 11,\n environmentIntensity: 0.74,\n exposure: 1.08,\n horizonColor: [0.58, 0.44, 0.34, 1],\n zenithColor: [0.16, 0.19, 0.24, 1],\n sunDirection: [0.82, 0.28, 0.18],\n sunColor: [2.8, 1.7, 0.92, 1],\n ambientColor: [0.028, 0.03, 0.032, 1],\n environmentLightSources: [\n { id: \"warehouse-dawn-loading-door\", kind: \"window-portal\", role: \"key\", direction: [0.82, 0.28, 0.18], color: [1, 0.62, 0.34, 1], intensity: 2.8, angularRadiusRadians: 0.22 },\n { id: \"warehouse-dawn-fluorescent\", kind: \"fluorescent-strip\", role: \"fill\", direction: [0, 1, 0], color: [0.78, 0.9, 1, 1], intensity: 1.1, angularRadiusRadians: 0.35 },\n { id: \"warehouse-dawn-concrete-bounce\", kind: \"ground-bounce\", role: \"bounce\", direction: [0, 0.28, -0.2], color: [0.34, 0.36, 0.38, 1], intensity: 0.42 },\n ],\n }),\n \"warehouse-midday\": defineEnvironmentPreset({\n preset: \"warehouse-midday\",\n scene: \"warehouse\",\n timeOfDay: \"midday\",\n environmentMode: 12,\n environmentIntensity: 0.92,\n exposure: 0.98,\n horizonColor: [0.64, 0.7, 0.74, 1],\n zenithColor: [0.28, 0.34, 0.42, 1],\n sunDirection: [0.35, 0.86, 0.16],\n sunColor: [4.2, 4, 3.45, 1],\n ambientColor: [0.034, 0.036, 0.038, 1],\n environmentLightSources: [\n { id: \"warehouse-midday-skylights\", kind: \"window-portal\", role: \"key\", direction: [0.35, 0.86, 0.16], color: [0.92, 0.96, 1, 1], intensity: 4.2, angularRadiusRadians: 0.18 },\n { id: \"warehouse-midday-fluorescent\", kind: \"fluorescent-strip\", role: \"fill\", direction: [-0.2, 0.92, 0.1], color: [0.78, 0.92, 1, 1], intensity: 1.6, angularRadiusRadians: 0.45 },\n { id: \"warehouse-midday-door-spill\", kind: \"sodium-door\", role: \"rim\", direction: [-0.82, 0.18, -0.12], color: [1, 0.58, 0.24, 1], intensity: 0.68 },\n ],\n }),\n \"warehouse-dusk\": defineEnvironmentPreset({\n preset: \"warehouse-dusk\",\n scene: \"warehouse\",\n timeOfDay: \"dusk\",\n environmentMode: 13,\n environmentIntensity: 0.7,\n exposure: 1.16,\n horizonColor: [0.7, 0.32, 0.24, 1],\n zenithColor: [0.08, 0.1, 0.18, 1],\n sunDirection: [-0.78, 0.18, 0.16],\n sunColor: [2.4, 0.94, 0.48, 1],\n ambientColor: [0.022, 0.024, 0.03, 1],\n environmentLightSources: [\n { id: \"warehouse-dusk-door-glow\", kind: \"sodium-door\", role: \"key\", direction: [-0.78, 0.18, 0.16], color: [1, 0.42, 0.2, 1], intensity: 2.4, angularRadiusRadians: 0.18 },\n { id: \"warehouse-dusk-fluorescent\", kind: \"fluorescent-strip\", role: \"fill\", direction: [0, 0.95, -0.08], color: [0.72, 0.88, 1, 1], intensity: 1.35, angularRadiusRadians: 0.4 },\n { id: \"warehouse-dusk-emergency\", kind: \"emergency-beacon\", role: \"accent\", direction: [0.2, 0.35, -0.8], color: [1, 0.08, 0.04, 1], intensity: 0.32 },\n ],\n }),\n \"warehouse-night\": defineEnvironmentPreset({\n preset: \"warehouse-night\",\n scene: \"warehouse\",\n timeOfDay: \"night\",\n environmentMode: 14,\n environmentIntensity: 0.58,\n exposure: 1.28,\n horizonColor: [0.06, 0.08, 0.12, 1],\n zenithColor: [0.02, 0.03, 0.055, 1],\n sunDirection: [0.1, 0.94, -0.12],\n sunColor: [1.2, 1.65, 2.25, 1],\n ambientColor: [0.014, 0.018, 0.024, 1],\n environmentLightSources: [\n { id: \"warehouse-night-fluorescent\", kind: \"fluorescent-strip\", role: \"key\", direction: [0.1, 0.94, -0.12], color: [0.68, 0.88, 1, 1], intensity: 2.25, angularRadiusRadians: 0.5 },\n { id: \"warehouse-night-emergency\", kind: \"emergency-beacon\", role: \"accent\", direction: [-0.4, 0.3, 0.7], color: [1, 0.05, 0.025, 1], intensity: 0.4 },\n { id: \"warehouse-night-door-leak\", kind: \"window-portal\", role: \"rim\", direction: [0.82, 0.08, -0.2], color: [0.12, 0.22, 0.42, 1], intensity: 0.34 },\n ],\n }),\n \"cavern-dawn\": defineEnvironmentPreset({\n preset: \"cavern-dawn\",\n scene: \"cavern\",\n timeOfDay: \"dawn\",\n environmentMode: 15,\n environmentIntensity: 0.62,\n exposure: 1.24,\n horizonColor: [0.5, 0.3, 0.2, 1],\n zenithColor: [0.04, 0.07, 0.09, 1],\n sunDirection: [0.72, 0.32, 0.26],\n sunColor: [2.1, 1.22, 0.64, 1],\n ambientColor: [0.018, 0.018, 0.016, 1],\n environmentLightSources: [\n { id: \"cavern-dawn-mouth\", kind: \"cave-mouth\", role: \"key\", direction: [0.72, 0.32, 0.26], color: [1, 0.58, 0.3, 1], intensity: 2.1, angularRadiusRadians: 0.24 },\n { id: \"cavern-dawn-torch\", kind: \"torch\", role: \"emissive\", direction: [-0.35, 0.28, -0.6], color: [1, 0.42, 0.16, 1], intensity: 1.35, reach: 18 },\n { id: \"cavern-dawn-crystal\", kind: \"crystal\", role: \"accent\", direction: [0.08, 0.22, 0.9], color: [0.22, 0.72, 1, 1], intensity: 0.28, reach: 10 },\n ],\n }),\n \"cavern-midday\": defineEnvironmentPreset({\n preset: \"cavern-midday\",\n scene: \"cavern\",\n timeOfDay: \"midday\",\n environmentMode: 16,\n environmentIntensity: 0.72,\n exposure: 1.16,\n horizonColor: [0.6, 0.56, 0.48, 1],\n zenithColor: [0.08, 0.12, 0.14, 1],\n sunDirection: [0.36, 0.82, 0.14],\n sunColor: [3.4, 3.05, 2.2, 1],\n ambientColor: [0.02, 0.022, 0.02, 1],\n environmentLightSources: [\n { id: \"cavern-midday-mouth\", kind: \"cave-mouth\", role: \"key\", direction: [0.36, 0.82, 0.14], color: [1, 0.9, 0.66, 1], intensity: 3.4, angularRadiusRadians: 0.18 },\n { id: \"cavern-midday-biolume\", kind: \"bioluminescence\", role: \"fill\", direction: [-0.25, 0.25, 0.7], color: [0.1, 0.82, 0.64, 1], intensity: 0.46, reach: 14 },\n { id: \"cavern-midday-wet-rock\", kind: \"ground-bounce\", role: \"bounce\", direction: [0.1, 0.2, -0.3], color: [0.18, 0.2, 0.18, 1], intensity: 0.22 },\n ],\n }),\n \"cavern-dusk\": defineEnvironmentPreset({\n preset: \"cavern-dusk\",\n scene: \"cavern\",\n timeOfDay: \"dusk\",\n environmentMode: 17,\n environmentIntensity: 0.56,\n exposure: 1.32,\n horizonColor: [0.46, 0.18, 0.14, 1],\n zenithColor: [0.035, 0.045, 0.08, 1],\n sunDirection: [-0.62, 0.22, 0.22],\n sunColor: [1.55, 0.56, 0.28, 1],\n ambientColor: [0.014, 0.014, 0.018, 1],\n environmentLightSources: [\n { id: \"cavern-dusk-mouth\", kind: \"cave-mouth\", role: \"rim\", direction: [-0.62, 0.22, 0.22], color: [1, 0.36, 0.18, 1], intensity: 1.55, angularRadiusRadians: 0.22 },\n { id: \"cavern-dusk-torch\", kind: \"torch\", role: \"key\", direction: [0.32, 0.34, -0.54], color: [1, 0.38, 0.12, 1], intensity: 1.85, reach: 20 },\n { id: \"cavern-dusk-biolume\", kind: \"bioluminescence\", role: \"fill\", direction: [-0.18, 0.18, 0.74], color: [0.08, 0.58, 0.72, 1], intensity: 0.34, reach: 12 },\n ],\n }),\n \"cavern-night\": defineEnvironmentPreset({\n preset: \"cavern-night\",\n scene: \"cavern\",\n timeOfDay: \"night\",\n environmentMode: 18,\n environmentIntensity: 0.5,\n exposure: 1.45,\n horizonColor: [0.025, 0.035, 0.06, 1],\n zenithColor: [0.008, 0.014, 0.03, 1],\n sunDirection: [0.18, 0.28, -0.68],\n sunColor: [1.9, 0.72, 0.24, 1],\n ambientColor: [0.01, 0.012, 0.018, 1],\n environmentLightSources: [\n { id: \"cavern-night-torch\", kind: \"torch\", role: \"key\", direction: [0.18, 0.28, -0.68], color: [1, 0.36, 0.12, 1], intensity: 1.9, reach: 18 },\n { id: \"cavern-night-biolume\", kind: \"bioluminescence\", role: \"fill\", direction: [-0.32, 0.16, 0.72], color: [0.06, 0.62, 0.76, 1], intensity: 0.52, reach: 16 },\n { id: \"cavern-night-lava\", kind: \"lava-fissure\", role: \"emissive\", direction: [0.42, 0.12, 0.28], color: [1, 0.18, 0.04, 1], intensity: 0.8, reach: 12 },\n ],\n }),\n});\n\nexport const lightingEnvironmentPresetNames = Object.freeze(\n Object.keys(environmentLightingPresets)\n);\n\nfunction resolveEnvironmentPreset(name, timeOfDay) {\n const presetName = typeof name === \"string\" && name.length > 0 ? name : \"product-studio\";\n const preset = environmentLightingPresets[presetName];\n if (!preset) {\n if (lightingEnvironmentSceneNames.includes(presetName)) {\n if (\n timeOfDay != null &&\n !lightingEnvironmentTimeOfDayNames.includes(timeOfDay)\n ) {\n throw new Error(\n `timeOfDay must be one of: ${lightingEnvironmentTimeOfDayNames.join(\", \")}.`\n );\n }\n const scenePresetName = `${presetName}-${timeOfDay ?? \"midday\"}`;\n const scenePreset = environmentLightingPresets[scenePresetName];\n if (scenePreset) {\n return scenePreset;\n }\n }\n throw new Error(\n `Unknown lighting environment preset \"${presetName}\". Expected one of: ${lightingEnvironmentPresetNames.join(\", \")}.`\n );\n }\n return preset;\n}\n\nfunction estimateEnvironmentColor(config) {\n const horizonWeight = 0.58;\n const zenithWeight = 1 - horizonWeight;\n const glowWeight = 0.055;\n const intensity = Math.max(config.environmentIntensity, 0.0001);\n return ensureNonNullColor([\n (config.horizonColor[0] * horizonWeight + config.zenithColor[0] * zenithWeight + config.sunColor[0] * glowWeight) * intensity,\n (config.horizonColor[1] * horizonWeight + config.zenithColor[1] * zenithWeight + config.sunColor[1] * glowWeight) * intensity,\n (config.horizonColor[2] * horizonWeight + config.zenithColor[2] * zenithWeight + config.sunColor[2] * glowWeight) * intensity,\n 1,\n ], config.dominantLightSource?.radiance ?? config.sunColor);\n}\n\nexport function createEnvironmentLightingConfig(options = {}) {\n const preset = resolveEnvironmentPreset(\n options.preset ?? options.name ?? options.scene,\n options.timeOfDay\n );\n const environmentPortals = normalizeEnvironmentPortals(\n options.environmentPortals ?? options.portals\n );\n const environmentMap = normalizeEnvironmentMap(\n options.environmentMap ?? options.hdri ?? preset.environmentMap\n );\n const environmentPortalMode = normalizeEnvironmentPortalMode(\n options.environmentPortalMode ?? options.portalMode,\n environmentPortals.length > 0\n );\n const environmentIntensity = Math.max(\n readFinite(options.environmentIntensity ?? options.intensity, preset.environmentIntensity),\n 0.0001\n );\n const baseConfig = {\n preset: preset.preset,\n scene: preset.scene,\n timeOfDay: preset.timeOfDay,\n profile: typeof options.profile === \"string\" ? options.profile : defaultLightingProfile,\n environmentMode: Math.max(0, Math.trunc(readFinite(options.environmentMode, preset.environmentMode))),\n environmentIntensity,\n exposure: Math.max(0.0001, readFinite(options.exposure, preset.exposure)),\n horizonColor: readColor(options.horizonColor, preset.horizonColor),\n zenithColor: readColor(options.zenithColor, preset.zenithColor),\n sunDirection: Object.freeze(\n normalizeVector3(options.sunDirection, preset.sunDirection)\n ),\n sunColor: readColor(options.sunColor, preset.sunColor),\n ambientColor: readColor(options.ambientColor, preset.ambientColor),\n sunlitBaseline: Math.max(\n 0,\n readFinite(options.sunlitBaseline ?? options.daylightBaseline, preset.sunlitBaseline)\n ),\n environmentPortalMode,\n environmentPortals,\n environmentMap,\n };\n const environmentLightSources = normalizeEnvironmentLightSources(\n options.environmentLightSources ?? options.lightSources,\n preset,\n baseConfig\n );\n const dominantLightSource = findDominantEnvironmentLightSource(\n environmentLightSources\n );\n const config = {\n ...baseConfig,\n environmentLightSources,\n lightSources: environmentLightSources,\n dominantLightSource,\n };\n const environmentColor = estimateEnvironmentColor(config);\n const environmentMissLighting = createEnvironmentMissLighting(\n dominantLightSource,\n environmentColor\n );\n\n return Object.freeze({\n ...config,\n environmentColor,\n environmentMissLighting,\n wavefront: Object.freeze({\n environmentColor,\n ambientColor: config.ambientColor,\n sunlitBaseline: config.sunlitBaseline,\n environmentPortalMode: config.environmentPortalMode,\n environmentPortals: config.environmentPortals,\n environmentMap: config.environmentMap,\n environmentLightSources: config.environmentLightSources,\n lightSources: config.environmentLightSources,\n dominantLightSource,\n environmentMissLighting,\n environmentLighting: Object.freeze({\n horizonColor: config.horizonColor,\n zenithColor: config.zenithColor,\n sunDirection: Object.freeze([...config.sunDirection]),\n sunColor: config.sunColor,\n intensity: config.environmentIntensity,\n mode: config.environmentMode,\n exposure: config.exposure,\n sunlitBaseline: config.sunlitBaseline,\n environmentPortalMode: config.environmentPortalMode,\n environmentPortalCount: config.environmentPortals.length,\n environmentMap: config.environmentMap,\n environmentLightSources: config.environmentLightSources,\n environmentLightSourceCount: config.environmentLightSources.length,\n dominantLightSource,\n environmentMissLighting,\n }),\n }),\n });\n}\n\nexport function createWavefrontEnvironmentLightingOptions(options = {}) {\n const config = createEnvironmentLightingConfig(options);\n return Object.freeze({\n environmentColor: config.wavefront.environmentColor,\n ambientColor: config.wavefront.ambientColor,\n sunlitBaseline: config.wavefront.sunlitBaseline,\n environmentPortalMode: config.wavefront.environmentPortalMode,\n environmentPortals: config.wavefront.environmentPortals,\n environmentMap: config.wavefront.environmentMap,\n environmentLightSources: config.wavefront.environmentLightSources,\n lightSources: config.wavefront.environmentLightSources,\n dominantLightSource: config.wavefront.dominantLightSource,\n environmentMissLighting: config.wavefront.environmentMissLighting,\n environmentLighting: config.wavefront.environmentLighting,\n lightingEnvironment: config,\n });\n}\n\nconst lightingImportanceLevels = Object.freeze([\n \"low\",\n \"medium\",\n \"high\",\n \"critical\",\n]);\n\nconst lightingBandPolicySpecs = Object.freeze({\n near: Object.freeze({\n primaryShadowSource: \"ray-traced-primary\",\n assistShadowSources: Object.freeze([\"visibility-raster\", \"shadow-map-assist\"]),\n temporalReuse: \"balanced\",\n updateCadenceDivisor: 1,\n liveObjectShadows: true,\n impressionOnly: false,\n }),\n mid: Object.freeze({\n primaryShadowSource: \"selective-raster-and-proxy\",\n assistShadowSources: Object.freeze([\n \"regional-shadow-map\",\n \"proxy-caster\",\n \"temporal-history\",\n ]),\n temporalReuse: \"aggressive\",\n updateCadenceDivisor: 2,\n liveObjectShadows: true,\n impressionOnly: false,\n }),\n far: Object.freeze({\n primaryShadowSource: \"merged-proxy-casters\",\n assistShadowSources: Object.freeze([\n \"coarse-directional\",\n \"semi-static-occlusion\",\n ]),\n temporalReuse: \"high\",\n updateCadenceDivisor: 8,\n liveObjectShadows: false,\n impressionOnly: false,\n }),\n horizon: Object.freeze({\n primaryShadowSource: \"baked-impression\",\n assistShadowSources: Object.freeze([\"atmospheric-gradient\", \"skyline-darkening\"]),\n temporalReuse: \"baked\",\n updateCadenceDivisor: 60,\n liveObjectShadows: false,\n impressionOnly: true,\n }),\n});\n\nfunction assertLightingImportance(name, value) {\n if (!lightingImportanceLevels.includes(value)) {\n throw new Error(\n `${name} must be one of: ${lightingImportanceLevels.join(\", \")}.`\n );\n }\n return value;\n}\n\nfunction readPositiveIntegerOption(name, value, fallback) {\n if (value === undefined) {\n return fallback;\n }\n\n if (\n typeof value !== \"number\" ||\n !Number.isFinite(value) ||\n value <= 0 ||\n Math.round(value) !== value\n ) {\n throw new Error(`${name} must be a positive integer.`);\n }\n\n return value;\n}\n\nfunction resolveBandParticipation(profileName, band, importance) {\n const referenceProfile = profileName === \"reference\";\n const premiumImportance =\n importance === \"critical\" || importance === \"high\";\n\n if (band === \"near\") {\n return Object.freeze({\n directShadows: premiumImportance ? \"premium\" : \"selective\",\n reflections: premiumImportance ? \"premium\" : \"selective\",\n globalIllumination:\n referenceProfile || importance === \"critical\" ? \"premium\" : \"selective\",\n });\n }\n\n if (band === \"mid\") {\n return Object.freeze({\n directShadows: premiumImportance ? \"selective\" : \"proxy\",\n reflections:\n referenceProfile && premiumImportance ? \"selective\" : \"proxy\",\n globalIllumination:\n referenceProfile && importance === \"critical\" ? \"selective\" : \"disabled\",\n });\n }\n\n if (band === \"far\") {\n return Object.freeze({\n directShadows: \"proxy\",\n reflections:\n referenceProfile && importance === \"critical\" ? \"proxy\" : \"disabled\",\n globalIllumination: \"disabled\",\n });\n }\n\n return Object.freeze({\n directShadows: \"disabled\",\n reflections: \"disabled\",\n globalIllumination: \"disabled\",\n });\n}\n\nexport function createLightingBandPlan(options = {}) {\n const profileName = options.profile ?? defaultLightingProfile;\n const profile = getLightingProfile(profileName);\n const importance = assertLightingImportance(\n \"importance\",\n options.importance ?? \"high\"\n );\n\n const bands = Object.freeze(\n lightingDistanceBands.map((band) =>\n Object.freeze({\n band,\n profile: profile.name,\n importance,\n primaryShadowSource: lightingBandPolicySpecs[band].primaryShadowSource,\n assistShadowSources: Object.freeze([\n ...lightingBandPolicySpecs[band].assistShadowSources,\n ]),\n rtParticipation: resolveBandParticipation(profile.name, band, importance),\n temporalReuse: lightingBandPolicySpecs[band].temporalReuse,\n updateCadenceDivisor: lightingBandPolicySpecs[band].updateCadenceDivisor,\n liveObjectShadows: lightingBandPolicySpecs[band].liveObjectShadows,\n impressionOnly: lightingBandPolicySpecs[band].impressionOnly,\n })\n )\n );\n\n return Object.freeze({\n schemaVersion: 1,\n owner: lightingDebugOwner,\n profile: profile.name,\n importance,\n techniques: Object.freeze([...profile.techniques]),\n bands,\n });\n}\n\nconst lightingProfileModeEstimatedCostMs = Object.freeze({\n realtime: 4.5,\n hybrid: 7.5,\n reference: 12.5,\n});\n\nexport function createLightingProfileModeLadder(options = {}) {\n const moduleId =\n typeof options.id === \"string\" && options.id.trim().length > 0\n ? options.id.trim()\n : \"lighting-profile-mode\";\n const preferredProfile = getLightingProfile(\n options.preferredProfile ?? defaultAdaptiveLightingProfilePolicy.preferredProfile\n ).name;\n const initialProfile = getLightingProfile(\n options.initialProfile ?? preferredProfile\n ).name;\n const minimumFrameRate = readPositiveIntegerOption(\n \"minimumFrameRate\",\n options.minimumFrameRate,\n defaultAdaptiveLightingProfilePolicy.minimumFrameRate\n );\n const sampleWindowSize = readPositiveIntegerOption(\n \"sampleWindowSize\",\n options.sampleWindowSize,\n defaultAdaptiveLightingProfilePolicy.sampleWindowSize\n );\n const importance = assertLightingImportance(\n \"importance\",\n options.importance ?? \"high\"\n );\n const moduleImportance = assertLightingImportance(\n \"moduleImportance\",\n options.moduleImportance ?? \"critical\"\n );\n\n const levels = Object.freeze(\n lightingProfileModeOrder.map((profileName) => {\n const profile = getLightingProfile(profileName);\n return Object.freeze({\n id: profile.name,\n estimatedCostMs: lightingProfileModeEstimatedCostMs[profile.name],\n config: Object.freeze({\n profile: profile.name,\n description: profile.description,\n techniques: Object.freeze([...profile.techniques]),\n lightingBandPlan: createLightingBandPlan({\n profile: profile.name,\n importance,\n }),\n policy: Object.freeze({\n preferredProfile,\n minimumFrameRate,\n sampleWindowSize,\n }),\n }),\n });\n })\n );\n\n return Object.freeze({\n id: moduleId,\n domain: \"lighting\",\n authority: \"visual\",\n importance: moduleImportance,\n initialLevel: initialProfile,\n levels,\n target: Object.freeze({\n minimumFrameRate,\n maximumFrameRate: minimumFrameRate,\n preferredFrameRates: Object.freeze([minimumFrameRate]),\n }),\n adaptation: Object.freeze({\n sampleWindowSize,\n minimumSamplesBeforeAdjustment: sampleWindowSize,\n degradeCooldownFrames: 1,\n upgradeCooldownFrames: sampleWindowSize,\n minStableFramesForRecovery: sampleWindowSize,\n }),\n policy: Object.freeze({\n preferredProfile,\n minimumFrameRate,\n sampleWindowSize,\n }),\n });\n}\n\nfunction buildWorkerBudgetLevels(jobType, queueClass, presets) {\n return Object.freeze([\n Object.freeze({\n id: \"low\",\n estimatedCostMs: presets.low.estimatedCostMs,\n config: Object.freeze({\n maxDispatchesPerFrame: presets.low.maxDispatchesPerFrame,\n maxJobsPerDispatch: presets.low.maxJobsPerDispatch,\n cadenceDivisor: presets.low.cadenceDivisor,\n workgroupScale: presets.low.workgroupScale,\n maxQueueDepth: presets.low.maxQueueDepth,\n metadata: Object.freeze({\n owner: lightingDebugOwner,\n queueClass,\n jobType,\n quality: \"low\",\n }),\n }),\n }),\n Object.freeze({\n id: \"medium\",\n estimatedCostMs: presets.medium.estimatedCostMs,\n config: Object.freeze({\n maxDispatchesPerFrame: presets.medium.maxDispatchesPerFrame,\n maxJobsPerDispatch: presets.medium.maxJobsPerDispatch,\n cadenceDivisor: presets.medium.cadenceDivisor,\n workgroupScale: presets.medium.workgroupScale,\n maxQueueDepth: presets.medium.maxQueueDepth,\n metadata: Object.freeze({\n owner: lightingDebugOwner,\n queueClass,\n jobType,\n quality: \"medium\",\n }),\n }),\n }),\n Object.freeze({\n id: \"high\",\n estimatedCostMs: presets.high.estimatedCostMs,\n config: Object.freeze({\n maxDispatchesPerFrame: presets.high.maxDispatchesPerFrame,\n maxJobsPerDispatch: presets.high.maxJobsPerDispatch,\n cadenceDivisor: presets.high.cadenceDivisor,\n workgroupScale: presets.high.workgroupScale,\n maxQueueDepth: presets.high.maxQueueDepth,\n metadata: Object.freeze({\n owner: lightingDebugOwner,\n queueClass,\n jobType,\n quality: \"high\",\n }),\n }),\n }),\n ]);\n}\n\nconst lightingWorkerSpecPresets = {\n hybrid: {\n suggestedAllocationIds: [\n \"lighting.hybrid.radiance-cache\",\n \"lighting.hybrid.reflection-history\",\n \"lighting.hybrid.shadow-atlas\",\n ],\n jobs: {\n directLighting: {\n domain: \"lighting\",\n importance: \"high\",\n levels: buildWorkerBudgetLevels(\n \"lighting.hybrid.directLighting\",\n lightingWorkerQueueClass,\n {\n low: {\n estimatedCostMs: 0.5,\n maxDispatchesPerFrame: 1,\n maxJobsPerDispatch: 64,\n cadenceDivisor: 2,\n workgroupScale: 0.5,\n maxQueueDepth: 128,\n },\n medium: {\n estimatedCostMs: 0.9,\n maxDispatchesPerFrame: 1,\n maxJobsPerDispatch: 128,\n cadenceDivisor: 1,\n workgroupScale: 0.75,\n maxQueueDepth: 256,\n },\n high: {\n estimatedCostMs: 1.2,\n maxDispatchesPerFrame: 2,\n maxJobsPerDispatch: 256,\n cadenceDivisor: 1,\n workgroupScale: 1,\n maxQueueDepth: 512,\n },\n }\n ),\n suggestedAllocationIds: [\"lighting.hybrid.shadow-atlas\"],\n },\n screenTrace: {\n domain: \"reflections\",\n importance: \"high\",\n levels: buildWorkerBudgetLevels(\n \"lighting.hybrid.screenTrace\",\n lightingWorkerQueueClass,\n {\n low: {\n estimatedCostMs: 0.8,\n maxDispatchesPerFrame: 1,\n maxJobsPerDispatch: 32,\n cadenceDivisor: 3,\n workgroupScale: 0.4,\n maxQueueDepth: 96,\n },\n medium: {\n estimatedCostMs: 1.5,\n maxDispatchesPerFrame: 1,\n maxJobsPerDispatch: 96,\n cadenceDivisor: 2,\n workgroupScale: 0.7,\n maxQueueDepth: 192,\n },\n high: {\n estimatedCostMs: 2.2,\n maxDispatchesPerFrame: 2,\n maxJobsPerDispatch: 192,\n cadenceDivisor: 1,\n workgroupScale: 1,\n maxQueueDepth: 384,\n },\n }\n ),\n suggestedAllocationIds: [\"lighting.hybrid.reflection-history\"],\n },\n radianceCache: {\n domain: \"lighting\",\n importance: \"high\",\n levels: buildWorkerBudgetLevels(\n \"lighting.hybrid.radianceCache\",\n lightingWorkerQueueClass,\n {\n low: {\n estimatedCostMs: 0.7,\n maxDispatchesPerFrame: 1,\n maxJobsPerDispatch: 32,\n cadenceDivisor: 2,\n workgroupScale: 0.5,\n maxQueueDepth: 96,\n },\n medium: {\n estimatedCostMs: 1.2,\n maxDispatchesPerFrame: 1,\n maxJobsPerDispatch: 64,\n cadenceDivisor: 1,\n workgroupScale: 0.75,\n maxQueueDepth: 192,\n },\n high: {\n estimatedCostMs: 1.8,\n maxDispatchesPerFrame: 2,\n maxJobsPerDispatch: 128,\n cadenceDivisor: 1,\n workgroupScale: 1,\n maxQueueDepth: 256,\n },\n }\n ),\n suggestedAllocationIds: [\"lighting.hybrid.radiance-cache\"],\n },\n finalGather: {\n domain: \"lighting\",\n importance: \"critical\",\n levels: buildWorkerBudgetLevels(\n \"lighting.hybrid.finalGather\",\n lightingWorkerQueueClass,\n {\n low: {\n estimatedCostMs: 1,\n maxDispatchesPerFrame: 1,\n maxJobsPerDispatch: 48,\n cadenceDivisor: 2,\n workgroupScale: 0.5,\n maxQueueDepth: 128,\n },\n medium: {\n estimatedCostMs: 1.8,\n maxDispatchesPerFrame: 1,\n maxJobsPerDispatch: 96,\n cadenceDivisor: 1,\n workgroupScale: 0.75,\n maxQueueDepth: 256,\n },\n high: {\n estimatedCostMs: 2.6,\n maxDispatchesPerFrame: 2,\n maxJobsPerDispatch: 192,\n cadenceDivisor: 1,\n workgroupScale: 1,\n maxQueueDepth: 384,\n },\n }\n ),\n suggestedAllocationIds: [\n \"lighting.hybrid.radiance-cache\",\n \"lighting.hybrid.reflection-history\",\n ],\n },\n reflectionResolve: {\n domain: \"reflections\",\n importance: \"high\",\n levels: buildWorkerBudgetLevels(\n \"lighting.hybrid.reflectionResolve\",\n lightingWorkerQueueClass,\n {\n low: {\n estimatedCostMs: 0.4,\n maxDispatchesPerFrame: 1,\n maxJobsPerDispatch: 32,\n cadenceDivisor: 2,\n workgroupScale: 0.5,\n maxQueueDepth: 96,\n },\n medium: {\n estimatedCostMs: 0.8,\n maxDispatchesPerFrame: 1,\n maxJobsPerDispatch: 64,\n cadenceDivisor: 1,\n workgroupScale: 0.75,\n maxQueueDepth: 192,\n },\n high: {\n estimatedCostMs: 1.2,\n maxDispatchesPerFrame: 1,\n maxJobsPerDispatch: 128,\n cadenceDivisor: 1,\n workgroupScale: 1,\n maxQueueDepth: 256,\n },\n }\n ),\n suggestedAllocationIds: [\"lighting.hybrid.reflection-history\"],\n },\n },\n },\n pathtracer: {\n suggestedAllocationIds: [\n \"lighting.pathtracer.path-state\",\n \"lighting.pathtracer.accumulation\",\n \"lighting.pathtracer.denoise-history\",\n ],\n jobs: {\n pathTrace: {\n domain: \"lighting\",\n importance: \"critical\",\n levels: buildWorkerBudgetLevels(\n \"lighting.pathtracer.pathTrace\",\n lightingWorkerQueueClass,\n {\n low: {\n estimatedCostMs: 1.2,\n maxDispatchesPerFrame: 1,\n maxJobsPerDispatch: 16,\n cadenceDivisor: 3,\n workgroupScale: 0.45,\n maxQueueDepth: 48,\n },\n medium: {\n estimatedCostMs: 2.3,\n maxDispatchesPerFrame: 1,\n maxJobsPerDispatch: 32,\n cadenceDivisor: 2,\n workgroupScale: 0.7,\n maxQueueDepth: 96,\n },\n high: {\n estimatedCostMs: 3.8,\n maxDispatchesPerFrame: 2,\n maxJobsPerDispatch: 64,\n cadenceDivisor: 1,\n workgroupScale: 1,\n maxQueueDepth: 128,\n },\n }\n ),\n suggestedAllocationIds: [\"lighting.pathtracer.path-state\"],\n },\n accumulate: {\n domain: \"lighting\",\n importance: \"medium\",\n levels: buildWorkerBudgetLevels(\n \"lighting.pathtracer.accumulate\",\n lightingWorkerQueueClass,\n {\n low: {\n estimatedCostMs: 0.4,\n maxDispatchesPerFrame: 1,\n maxJobsPerDispatch: 16,\n cadenceDivisor: 2,\n workgroupScale: 0.5,\n maxQueueDepth: 32,\n },\n medium: {\n estimatedCostMs: 0.8,\n maxDispatchesPerFrame: 1,\n maxJobsPerDispatch: 32,\n cadenceDivisor: 1,\n workgroupScale: 0.75,\n maxQueueDepth: 64,\n },\n high: {\n estimatedCostMs: 1.1,\n maxDispatchesPerFrame: 1,\n maxJobsPerDispatch: 64,\n cadenceDivisor: 1,\n workgroupScale: 1,\n maxQueueDepth: 96,\n },\n }\n ),\n suggestedAllocationIds: [\"lighting.pathtracer.accumulation\"],\n },\n denoise: {\n domain: \"post-processing\",\n importance: \"high\",\n levels: buildWorkerBudgetLevels(\n \"lighting.pathtracer.denoise\",\n lightingWorkerQueueClass,\n {\n low: {\n estimatedCostMs: 0.4,\n maxDispatchesPerFrame: 1,\n maxJobsPerDispatch: 16,\n cadenceDivisor: 2,\n workgroupScale: 0.5,\n maxQueueDepth: 32,\n },\n medium: {\n estimatedCostMs: 0.9,\n maxDispatchesPerFrame: 1,\n maxJobsPerDispatch: 32,\n cadenceDivisor: 1,\n workgroupScale: 0.75,\n maxQueueDepth: 64,\n },\n high: {\n estimatedCostMs: 1.4,\n maxDispatchesPerFrame: 1,\n maxJobsPerDispatch: 64,\n cadenceDivisor: 1,\n workgroupScale: 1,\n maxQueueDepth: 96,\n },\n }\n ),\n suggestedAllocationIds: [\"lighting.pathtracer.denoise-history\"],\n },\n },\n },\n volumetrics: {\n suggestedAllocationIds: [\n \"lighting.volumetrics.froxel-grid\",\n \"lighting.volumetrics.shadow-history\",\n ],\n jobs: {\n froxelIntegrate: {\n domain: \"volumetrics\",\n importance: \"high\",\n levels: buildWorkerBudgetLevels(\n \"lighting.volumetrics.froxelIntegrate\",\n lightingWorkerQueueClass,\n {\n low: {\n estimatedCostMs: 0.6,\n maxDispatchesPerFrame: 1,\n maxJobsPerDispatch: 32,\n cadenceDivisor: 2,\n workgroupScale: 0.5,\n maxQueueDepth: 96,\n },\n medium: {\n estimatedCostMs: 1.1,\n maxDispatchesPerFrame: 1,\n maxJobsPerDispatch: 64,\n cadenceDivisor: 1,\n workgroupScale: 0.75,\n maxQueueDepth: 192,\n },\n high: {\n estimatedCostMs: 1.7,\n maxDispatchesPerFrame: 2,\n maxJobsPerDispatch: 128,\n cadenceDivisor: 1,\n workgroupScale: 1,\n maxQueueDepth: 256,\n },\n }\n ),\n suggestedAllocationIds: [\"lighting.volumetrics.froxel-grid\"],\n },\n volumetricShadow: {\n domain: \"volumetrics\",\n importance: \"high\",\n levels: buildWorkerBudgetLevels(\n \"lighting.volumetrics.volumetricShadow\",\n lightingWorkerQueueClass,\n {\n low: {\n estimatedCostMs: 0.5,\n maxDispatchesPerFrame: 1,\n maxJobsPerDispatch: 24,\n cadenceDivisor: 2,\n workgroupScale: 0.5,\n maxQueueDepth: 64,\n },\n medium: {\n estimatedCostMs: 0.9,\n maxDispatchesPerFrame: 1,\n maxJobsPerDispatch: 48,\n cadenceDivisor: 1,\n workgroupScale: 0.75,\n maxQueueDepth: 128,\n },\n high: {\n estimatedCostMs: 1.3,\n maxDispatchesPerFrame: 1,\n maxJobsPerDispatch: 96,\n cadenceDivisor: 1,\n workgroupScale: 1,\n maxQueueDepth: 192,\n },\n }\n ),\n suggestedAllocationIds: [\"lighting.volumetrics.shadow-history\"],\n },\n },\n },\n hdri: {\n suggestedAllocationIds: [\n \"lighting.hdri.cubemap\",\n \"lighting.hdri.prefilter\",\n \"lighting.hdri.brdf-lut\",\n ],\n jobs: {\n irradianceConvolution: {\n domain: \"lighting\",\n importance: \"medium\",\n levels: buildWorkerBudgetLevels(\n \"lighting.hdri.irradianceConvolution\",\n lightingWorkerQueueClass,\n {\n low: {\n estimatedCostMs: 0.3,\n maxDispatchesPerFrame: 1,\n maxJobsPerDispatch: 8,\n cadenceDivisor: 3,\n workgroupScale: 0.5,\n maxQueueDepth: 16,\n },\n medium: {\n estimatedCostMs: 0.5,\n maxDispatchesPerFrame: 1,\n maxJobsPerDispatch: 16,\n cadenceDivisor: 2,\n workgroupScale: 0.75,\n maxQueueDepth: 32,\n },\n high: {\n estimatedCostMs: 0.8,\n maxDispatchesPerFrame: 1,\n maxJobsPerDispatch: 32,\n cadenceDivisor: 1,\n workgroupScale: 1,\n maxQueueDepth: 48,\n },\n }\n ),\n suggestedAllocationIds: [\"lighting.hdri.cubemap\"],\n },\n specularPrefilter: {\n domain: \"lighting\",\n importance: \"medium\",\n levels: buildWorkerBudgetLevels(\n \"lighting.hdri.specularPrefilter\",\n lightingWorkerQueueClass,\n {\n low: {\n estimatedCostMs: 0.4,\n maxDispatchesPerFrame: 1,\n maxJobsPerDispatch: 8,\n cadenceDivisor: 3,\n workgroupScale: 0.5,\n maxQueueDepth: 16,\n },\n medium: {\n estimatedCostMs: 0.7,\n maxDispatchesPerFrame: 1,\n maxJobsPerDispatch: 16,\n cadenceDivisor: 2,\n workgroupScale: 0.75,\n maxQueueDepth: 32,\n },\n high: {\n estimatedCostMs: 1,\n maxDispatchesPerFrame: 1,\n maxJobsPerDispatch: 32,\n cadenceDivisor: 1,\n workgroupScale: 1,\n maxQueueDepth: 48,\n },\n }\n ),\n suggestedAllocationIds: [\"lighting.hdri.prefilter\"],\n },\n brdfLut: {\n domain: \"lighting\",\n importance: \"low\",\n levels: buildWorkerBudgetLevels(\n \"lighting.hdri.brdfLut\",\n lightingWorkerQueueClass,\n {\n low: {\n estimatedCostMs: 0.2,\n maxDispatchesPerFrame: 1,\n maxJobsPerDispatch: 4,\n cadenceDivisor: 3,\n workgroupScale: 0.5,\n maxQueueDepth: 8,\n },\n medium: {\n estimatedCostMs: 0.4,\n maxDispatchesPerFrame: 1,\n maxJobsPerDispatch: 8,\n cadenceDivisor: 2,\n workgroupScale: 0.75,\n maxQueueDepth: 16,\n },\n high: {\n estimatedCostMs: 0.6,\n maxDispatchesPerFrame: 1,\n maxJobsPerDispatch: 16,\n cadenceDivisor: 1,\n workgroupScale: 1,\n maxQueueDepth: 24,\n },\n }\n ),\n suggestedAllocationIds: [\"lighting.hdri.brdf-lut\"],\n },\n },\n },\n};\n\nconst lightingWorkerDagSpecs = {\n hybrid: {\n directLighting: { priority: 4, dependencies: [] },\n screenTrace: { priority: 3, dependencies: [] },\n radianceCache: { priority: 4, dependencies: [\"directLighting\"] },\n finalGather: { priority: 2, dependencies: [\"radianceCache\", \"screenTrace\"] },\n reflectionResolve: {\n priority: 1,\n dependencies: [\"screenTrace\", \"finalGather\"],\n },\n },\n pathtracer: {\n pathTrace: { priority: 4, dependencies: [] },\n accumulate: { priority: 3, dependencies: [\"pathTrace\"] },\n denoise: { priority: 2, dependencies: [\"accumulate\"] },\n },\n volumetrics: {\n volumetricShadow: { priority: 3, dependencies: [] },\n froxelIntegrate: { priority: 2, dependencies: [\"volumetricShadow\"] },\n },\n hdri: {\n irradianceConvolution: { priority: 3, dependencies: [] },\n specularPrefilter: { priority: 3, dependencies: [] },\n brdfLut: {\n priority: 2,\n dependencies: [\"irradianceConvolution\", \"specularPrefilter\"],\n },\n },\n};\n\nfunction resolveLightingQualityDimensions(techniqueName, jobKey) {\n const key = `${techniqueName}.${jobKey}`;\n return Object.freeze(\n {\n \"hybrid.directLighting\": { shadows: 1, lightingSamples: 0.7 },\n \"hybrid.screenTrace\": { rayTracing: 1, temporalReuse: 0.4 },\n \"hybrid.radianceCache\": {\n lightingSamples: 0.8,\n updateCadence: 0.7,\n temporalReuse: 1,\n },\n \"hybrid.finalGather\": { lightingSamples: 1, rayTracing: 0.6 },\n \"hybrid.reflectionResolve\": {\n rayTracing: 0.5,\n temporalReuse: 1,\n shading: 0.3,\n },\n \"pathtracer.pathTrace\": { rayTracing: 1, lightingSamples: 1 },\n \"pathtracer.accumulate\": { temporalReuse: 1, updateCadence: 0.4 },\n \"pathtracer.denoise\": { temporalReuse: 1, shading: 0.4 },\n \"volumetrics.froxelIntegrate\": {\n lightingSamples: 0.6,\n shading: 0.4,\n updateCadence: 0.3,\n },\n \"volumetrics.volumetricShadow\": { shadows: 0.8, updateCadence: 0.5 },\n \"hdri.irradianceConvolution\": {\n lightingSamples: 0.4,\n temporalReuse: 1,\n updateCadence: 1,\n },\n \"hdri.specularPrefilter\": {\n lightingSamples: 0.5,\n temporalReuse: 1,\n updateCadence: 1,\n },\n \"hdri.brdfLut\": {\n shading: 0.4,\n temporalReuse: 1,\n updateCadence: 1,\n },\n }[key] ?? {}\n );\n}\n\nfunction resolveLightingImportanceSignals(techniqueName, jobKey) {\n const key = `${techniqueName}.${jobKey}`;\n return Object.freeze(\n {\n \"hybrid.directLighting\": { visible: true, shadowSignificance: \"high\" },\n \"hybrid.screenTrace\": { visible: true, reflectionSignificance: \"high\" },\n \"hybrid.radianceCache\": { visible: true },\n \"hybrid.finalGather\": {\n visible: true,\n shadowSignificance: \"critical\",\n reflectionSignificance: \"high\",\n },\n \"hybrid.reflectionResolve\": { visible: true, reflectionSignificance: \"high\" },\n \"pathtracer.pathTrace\": {\n visible: true,\n shadowSignificance: \"high\",\n reflectionSignificance: \"high\",\n },\n \"pathtracer.accumulate\": { visible: true },\n \"pathtracer.denoise\": { visible: true },\n \"volumetrics.froxelIntegrate\": { visible: true },\n \"volumetrics.volumetricShadow\": { visible: true, shadowSignificance: \"high\" },\n \"hdri.irradianceConvolution\": { visible: false },\n \"hdri.specularPrefilter\": { visible: false, reflectionSignificance: \"medium\" },\n \"hdri.brdfLut\": { visible: false },\n }[key] ?? {}\n );\n}\n\nfunction buildWorkerManifestJob(techniqueName, job) {\n const spec = lightingWorkerSpecPresets[techniqueName].jobs[job.key];\n const dag = lightingWorkerDagSpecs[techniqueName][job.key];\n const dependencies = dag.dependencies.map(\n (dependency) => `lighting.${techniqueName}.${dependency}`\n );\n\n return Object.freeze({\n key: job.key,\n label: job.label,\n worker: Object.freeze({\n jobType: job.label,\n queueClass: lightingWorkerQueueClass,\n priority: dag.priority,\n dependencies: Object.freeze(dependencies),\n schedulerMode: \"dag\",\n }),\n performance: Object.freeze({\n id: job.label,\n jobType: job.label,\n queueClass: lightingWorkerQueueClass,\n domain: spec.domain,\n authority: \"visual\",\n importance: spec.importance,\n qualityDimensions: resolveLightingQualityDimensions(techniqueName, job.key),\n importanceSignals: resolveLightingImportanceSignals(techniqueName, job.key),\n levels: spec.levels,\n }),\n debug: Object.freeze({\n owner: lightingDebugOwner,\n queueClass: lightingWorkerQueueClass,\n jobType: job.label,\n tags: Object.freeze([\n \"lighting\",\n techniqueName,\n job.key,\n spec.domain,\n ]),\n suggestedAllocationIds: Object.freeze([...spec.suggestedAllocationIds]),\n }),\n });\n}\n\nfunction buildLightingWorkerManifest(name, technique) {\n const spec = lightingWorkerSpecPresets[name];\n\n return Object.freeze({\n schemaVersion: 1,\n owner: lightingDebugOwner,\n technique: name,\n description: technique.description,\n queueClass: lightingWorkerQueueClass,\n schedulerMode: \"dag\",\n suggestedAllocationIds: Object.freeze([...spec.suggestedAllocationIds]),\n jobs: Object.freeze(\n technique.jobs.map((job) => buildWorkerManifestJob(name, job))\n ),\n });\n}\n\nexport const lightingWorkerManifests = Object.freeze(\n Object.fromEntries(\n Object.entries(lightingTechniques).map(([name, technique]) => [\n name,\n buildLightingWorkerManifest(name, technique),\n ])\n )\n);\n\nfunction getTechniqueJob(technique, key) {\n const job = technique.jobs.find((entry) => entry.key === key);\n if (!job) {\n const available = technique.jobs.map((entry) => entry.key).join(\", \");\n throw new Error(\n `Unknown job \"${key}\" for technique \"${technique.name}\". ` +\n `Available: ${available}.`\n );\n }\n return job;\n}\n\nexport function getLightingTechnique(name = defaultLightingTechnique) {\n const technique = lightingTechniques[name];\n if (!technique) {\n const available = lightingTechniqueNames.join(\", \");\n throw new Error(`Unknown lighting technique \"${name}\". Available: ${available}.`);\n }\n return technique;\n}\n\nexport function getLightingProfile(name = defaultLightingProfile) {\n const profile = lightingProfiles[name];\n if (!profile) {\n const available = lightingProfileNames.join(\", \");\n throw new Error(`Unknown lighting profile \"${name}\". Available: ${available}.`);\n }\n return profile;\n}\n\nexport function getLightingTechniqueWorkerManifest(\n name = defaultLightingTechnique\n) {\n const manifest = lightingWorkerManifests[name];\n if (!manifest) {\n const available = lightingTechniqueNames.join(\", \");\n throw new Error(\n `Unknown lighting technique \"${name}\". Available: ${available}.`\n );\n }\n return manifest;\n}\n\nexport function getLightingProfileWorkerManifest(\n name = defaultLightingProfile\n) {\n const profile = getLightingProfile(name);\n const techniques = profile.techniques.map((techniqueName) =>\n getLightingTechniqueWorkerManifest(techniqueName)\n );\n const lightingBandPlan = createLightingBandPlan({ profile: profile.name });\n\n return Object.freeze({\n schemaVersion: 1,\n owner: lightingDebugOwner,\n profile: profile.name,\n description: profile.description,\n schedulerMode: \"dag\",\n techniques: Object.freeze(techniques),\n lightingBands: lightingBandPlan.bands,\n jobs: Object.freeze(techniques.flatMap((technique) => technique.jobs)),\n });\n}\n\nconst defaultTechnique = getLightingTechnique(defaultLightingTechnique);\n\nexport const lightingPreludeWgslUrl = defaultTechnique.preludeUrl;\n\nexport const lightingJobLabels = Object.freeze(\n Object.fromEntries(defaultTechnique.jobs.map((job) => [job.key, job.label]))\n);\n\nexport const lightingJobs = defaultTechnique.jobs.map((job) => ({\n label: job.label,\n url: job.url,\n sourceName: job.sourceName,\n}));\n\nfunction assertNotHtmlWgsl(source, context) {\n const sample = source.slice(0, 200).toLowerCase();\n if (\n sample.includes(\"<!doctype\") ||\n sample.includes(\"<html\") ||\n sample.includes(\"<meta\")\n ) {\n const label = context ? ` for ${context}` : \"\";\n throw new Error(\n `Expected WGSL${label} but received HTML. Check the URL or server root.`\n );\n }\n}\n\nasync function loadWgslSource(options = {}) {\n const { wgsl, url, fetcher = globalThis.fetch, base } = options ?? {};\n if (typeof wgsl === \"string\") {\n assertNotHtmlWgsl(wgsl, \"inline WGSL\");\n return wgsl;\n }\n if (!url) {\n return null;\n }\n const resolved = url instanceof URL ? url : new URL(url, base ?? baseUrl);\n if (!fetcher || resolved.protocol === \"file:\") {\n const { readFile } = await import(\"node:fs/promises\");\n const { fileURLToPath } = await import(\"node:url\");\n const source = await readFile(fileURLToPath(resolved), \"utf8\");\n assertNotHtmlWgsl(source, resolved.href);\n return source;\n }\n const response = await fetcher(resolved);\n if (!response.ok) {\n const status = \"status\" in response ? response.status : \"unknown\";\n const statusText = \"statusText\" in response ? response.statusText : \"\";\n const detail = statusText ? `${status} ${statusText}` : `${status}`;\n throw new Error(`Failed to load WGSL (${detail})`);\n }\n const source = await response.text();\n assertNotHtmlWgsl(source, resolved.href);\n return source;\n}\n\nasync function loadTechniquePrelude(technique, fetcher) {\n const source = await loadWgslSource({ url: technique.preludeUrl, fetcher });\n if (typeof source !== \"string\") {\n throw new Error(`Failed to load ${technique.name} prelude WGSL source.`);\n }\n return source;\n}\n\nasync function loadTechniqueJob(technique, job, fetcher) {\n const source = await loadWgslSource({ url: job.url, fetcher });\n if (typeof source !== \"string\") {\n throw new Error(\n `Failed to load ${technique.name} job \"${job.key}\" WGSL source.`\n );\n }\n return source;\n}\n\nexport async function loadLightingTechniquePreludeWgsl(\n techniqueName,\n options = {}\n) {\n const { fetcher } = options ?? {};\n const technique = getLightingTechnique(techniqueName);\n return loadTechniquePrelude(technique, fetcher);\n}\n\nexport async function loadLightingTechniqueJobWgsl(\n techniqueName,\n jobKey,\n options = {}\n) {\n const { fetcher } = options ?? {};\n const technique = getLightingTechnique(techniqueName);\n const job = getTechniqueJob(technique, jobKey);\n return loadTechniqueJob(technique, job, fetcher);\n}\n\nexport async function loadLightingTechniqueJobs(techniqueName, options = {}) {\n const { fetcher } = options ?? {};\n const technique = getLightingTechnique(techniqueName);\n const preludeWgsl = await loadTechniquePrelude(technique, fetcher);\n const jobSources = await Promise.all(\n technique.jobs.map((job) => loadTechniqueJob(technique, job, fetcher))\n );\n const jobs = technique.jobs.map((job, index) => ({\n wgsl: jobSources[index],\n label: job.label,\n sourceName: job.sourceName,\n }));\n return { preludeWgsl, jobs };\n}\n\nexport async function loadLightingTechniqueWorkerBundle(\n techniqueName = defaultLightingTechnique,\n options = {}\n) {\n const technique = getLightingTechnique(techniqueName);\n const { preludeWgsl, jobs } = await loadLightingTechniqueJobs(\n technique.name,\n options\n );\n\n return {\n technique: technique.name,\n preludeWgsl,\n jobs,\n workerManifest: getLightingTechniqueWorkerManifest(technique.name),\n };\n}\n\nexport async function loadLightingPreludeWgsl(options = {}) {\n const { fetcher } = options ?? {};\n return loadTechniquePrelude(defaultTechnique, fetcher);\n}\n\nexport async function loadLightingJobs(options = {}) {\n return loadLightingTechniqueJobs(defaultLightingTechnique, options);\n}\n\nexport async function loadLightingProfile(profileName, options = {}) {\n const profile = getLightingProfile(profileName);\n const techniques = await Promise.all(\n profile.techniques.map(async (techniqueName) => {\n const { preludeWgsl, jobs } = await loadLightingTechniqueJobs(\n techniqueName,\n options\n );\n return {\n technique: techniqueName,\n preludeWgsl,\n jobs,\n };\n })\n );\n return { profile, techniques };\n}\n\nexport async function loadLightingProfileWorkerPlan(\n profileName = defaultLightingProfile,\n options = {}\n) {\n const profile = getLightingProfile(profileName);\n const techniques = await Promise.all(\n profile.techniques.map((techniqueName) =>\n loadLightingTechniqueWorkerBundle(techniqueName, options)\n )\n );\n\n return {\n profile,\n techniques,\n lightingBandPlan: createLightingBandPlan({ profile: profile.name }),\n workerManifest: getLightingProfileWorkerManifest(profile.name),\n };\n}\n"],"mappings":"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","names":["source"]}
1
+ {"version":3,"sources":["../src/index.js"],"sourcesContent":["function createModuleBaseUrl(metaUrl) {\n return Reflect.construct(URL, [String(metaUrl)]);\n}\n\nconst baseUrl = (() => {\n if (typeof __IMPORT_META_URL__ !== \"undefined\") {\n return createModuleBaseUrl(__IMPORT_META_URL__);\n }\n if (typeof __filename !== \"undefined\" && typeof require !== \"undefined\") {\n const { pathToFileURL } = require(\"node:url\");\n return pathToFileURL(__filename);\n }\n const base =\n typeof process !== \"undefined\" && process.cwd\n ? `file://${process.cwd()}/`\n : \"file:///\";\n return new URL(\"./index.js\", base);\n})();\n\nconst techniqueSpecs = {\n hybrid: {\n description:\n \"Lumen-inspired hybrid realtime GI and reflections with radiance cache final gather.\",\n prelude: \"prelude.wgsl\",\n jobs: {\n directLighting: \"direct-lighting.job.wgsl\",\n screenTrace: \"screen-trace.job.wgsl\",\n radianceCache: \"radiance-cache.job.wgsl\",\n finalGather: \"final-gather.job.wgsl\",\n reflectionResolve: \"reflection-resolve.job.wgsl\",\n },\n },\n pathtracer: {\n description:\n \"Monte Carlo path-traced reference mode with progressive accumulation and denoise stage.\",\n prelude: \"prelude.wgsl\",\n jobs: {\n pathTrace: \"pathtrace.job.wgsl\",\n accumulate: \"accumulate.job.wgsl\",\n denoise: \"denoise.job.wgsl\",\n },\n },\n wavefront: {\n description:\n \"Renderer-aligned wavefront lighting jobs for terminal radiance and continuation scattering.\",\n prelude: \"prelude.wgsl\",\n jobs: {\n accumulateTerminalRadiance: \"accumulate-terminal-radiance.job.wgsl\",\n scatterContinuations: \"scatter-continuations.job.wgsl\",\n },\n },\n volumetrics: {\n description:\n \"Froxel volumetric lighting for fog, shafts, and participating media shadows.\",\n prelude: \"prelude.wgsl\",\n jobs: {\n froxelIntegrate: \"froxel-integrate.job.wgsl\",\n volumetricShadow: \"volumetric-shadow.job.wgsl\",\n },\n },\n hdri: {\n description:\n \"HDRI and IBL precompute passes including irradiance, specular prefilter, and BRDF LUT.\",\n prelude: \"prelude.wgsl\",\n jobs: {\n irradianceConvolution: \"irradiance-convolution.job.wgsl\",\n specularPrefilter: \"specular-prefilter.job.wgsl\",\n brdfLut: \"brdf-lut.job.wgsl\",\n },\n },\n};\n\nfunction buildTechnique(name, spec) {\n const preludeUrl = new URL(`./techniques/${name}/${spec.prelude}`, baseUrl);\n const jobs = Object.entries(spec.jobs).map(([key, file]) => {\n const label = `lighting.${name}.${key}`;\n return {\n key,\n label,\n url: new URL(`./techniques/${name}/${file}`, baseUrl),\n sourceName: label,\n };\n });\n return {\n name,\n description: spec.description,\n preludeUrl,\n jobs,\n };\n}\n\nexport const lightingTechniques = Object.freeze(\n Object.fromEntries(\n Object.entries(techniqueSpecs).map(([name, spec]) => [\n name,\n buildTechnique(name, spec),\n ])\n )\n);\n\nexport const lightingTechniqueNames = Object.freeze(Object.keys(lightingTechniques));\n\nexport const defaultLightingTechnique = \"hybrid\";\n\nconst profileSpecs = {\n realtime: {\n description:\n \"Primary runtime profile: hybrid GI/reflections with volumetrics and HDRI/IBL.\",\n techniques: [\"hybrid\", \"volumetrics\", \"hdri\"],\n },\n hybrid: {\n description:\n \"Hybrid-focused profile for direct tuning of Lumen-inspired realtime passes.\",\n techniques: [\"hybrid\", \"hdri\"],\n },\n reference: {\n description:\n \"Reference quality profile: path tracing plus volumetrics and HDRI/IBL validation.\",\n techniques: [\"pathtracer\", \"volumetrics\", \"hdri\"],\n },\n};\n\nfunction buildProfile(name, spec) {\n return {\n name,\n description: spec.description,\n techniques: [...spec.techniques],\n };\n}\n\nexport const lightingProfiles = Object.freeze(\n Object.fromEntries(\n Object.entries(profileSpecs).map(([name, spec]) => [\n name,\n buildProfile(name, spec),\n ])\n )\n);\n\nexport const lightingProfileNames = Object.freeze(Object.keys(lightingProfiles));\n\nexport const defaultLightingProfile = \"realtime\";\nexport const lightingProfileModeOrder = Object.freeze([\n \"realtime\",\n \"hybrid\",\n \"reference\",\n]);\nexport const lightingEnvironmentTimeOfDayNames = Object.freeze([\n \"dawn\",\n \"midday\",\n \"dusk\",\n \"night\",\n]);\nexport const lightingEnvironmentSceneNames = Object.freeze([\n \"studio\",\n \"harbor\",\n \"grass-field\",\n \"forest\",\n \"warehouse\",\n \"cavern\",\n]);\nexport const lightingEnvironmentLightSourceKinds = Object.freeze([\n \"sky\",\n \"sun\",\n \"moon\",\n \"stars\",\n \"horizon-glow\",\n \"ground-bounce\",\n \"studio-softbox\",\n \"canopy-transmission\",\n \"window-portal\",\n \"fluorescent-strip\",\n \"sodium-door\",\n \"emergency-beacon\",\n \"cave-mouth\",\n \"torch\",\n \"bioluminescence\",\n \"lava-fissure\",\n \"crystal\",\n \"custom\",\n]);\nexport const lightingEnvironmentPortalShapes = Object.freeze([\"rectangle\"]);\nexport const lightingEnvironmentPortalModes = Object.freeze([\n \"disabled\",\n \"guide\",\n \"guide-and-gate\",\n]);\nexport const defaultAdaptiveLightingProfilePolicy = Object.freeze({\n preferredProfile: \"reference\",\n minimumFrameRate: 30,\n sampleWindowSize: 4,\n});\nexport const lightingDistanceBands = Object.freeze([\n \"near\",\n \"mid\",\n \"far\",\n \"horizon\",\n]);\n\nexport const lightingWorkerQueueClass = \"lighting\";\nexport const lightingDebugOwner = \"lighting\";\n\nconst environmentPresetAmbientScales = Object.freeze({\n \"grass-field\": 0.78,\n forest: 0.78,\n warehouse: 0.82,\n cavern: 0.78,\n});\n\nconst environmentSunlitBaselineByTimeOfDay = Object.freeze({\n dawn: 0.18,\n midday: 0.28,\n dusk: 0.14,\n night: 0.035,\n});\n\nconst environmentSunlitBaselineSceneScales = Object.freeze({\n \"grass-field\": 1,\n forest: 0.78,\n warehouse: 0.62,\n cavern: 0.42,\n harbor: 0.85,\n studio: 0.58,\n});\n\nfunction freezeVec4(value) {\n return Object.freeze([value[0], value[1], value[2], value[3] ?? 1]);\n}\n\nfunction scaleVec4(value, scale) {\n return [\n value[0] * scale,\n value[1] * scale,\n value[2] * scale,\n value[3] ?? 1,\n ];\n}\n\nfunction normalizeVector3(value, fallback) {\n if (!Array.isArray(value) || value.length < 3) {\n return [...fallback];\n }\n const vector = [\n Number.isFinite(value[0]) ? value[0] : fallback[0],\n Number.isFinite(value[1]) ? value[1] : fallback[1],\n Number.isFinite(value[2]) ? value[2] : fallback[2],\n ];\n const length = Math.hypot(vector[0], vector[1], vector[2]);\n if (!Number.isFinite(length) || length <= 0.000001) {\n return [...fallback];\n }\n return vector.map((component) => component / length);\n}\n\nfunction readColor(value, fallback) {\n if (!Array.isArray(value) || value.length < 3) {\n return freezeVec4(fallback);\n }\n return freezeVec4([\n Number.isFinite(value[0]) ? Math.max(0, value[0]) : fallback[0],\n Number.isFinite(value[1]) ? Math.max(0, value[1]) : fallback[1],\n Number.isFinite(value[2]) ? Math.max(0, value[2]) : fallback[2],\n Number.isFinite(value[3]) ? Math.max(0, Math.min(1, value[3])) : fallback[3] ?? 1,\n ]);\n}\n\nfunction colorLuminance(value) {\n return value[0] * 0.2126 + value[1] * 0.7152 + value[2] * 0.0722;\n}\n\nfunction readPositiveColor(value, fallback) {\n const color = readColor(value, fallback);\n const fallbackColor = readColor(fallback, [1, 1, 1, 1]);\n return freezeVec4([\n color[0] > 0 ? color[0] : Math.max(fallbackColor[0], 0.0001),\n color[1] > 0 ? color[1] : Math.max(fallbackColor[1], 0.0001),\n color[2] > 0 ? color[2] : Math.max(fallbackColor[2], 0.0001),\n color[3],\n ]);\n}\n\nfunction ensureNonNullColor(value, fallback = [1, 1, 1, 1]) {\n const color = readColor(value, fallback);\n if (colorLuminance(color) > 0.000001) {\n return color;\n }\n return readPositiveColor(fallback, [1, 1, 1, 1]);\n}\n\nfunction readFinite(value, fallback) {\n return Number.isFinite(value) ? value : fallback;\n}\n\nfunction readVector3(value, fallback) {\n if (!Array.isArray(value) || value.length < 3) {\n return [...fallback];\n }\n return [\n Number.isFinite(value[0]) ? value[0] : fallback[0],\n Number.isFinite(value[1]) ? value[1] : fallback[1],\n Number.isFinite(value[2]) ? value[2] : fallback[2],\n ];\n}\n\nfunction dot3(a, b) {\n return a[0] * b[0] + a[1] * b[1] + a[2] * b[2];\n}\n\nfunction cross3(a, b) {\n return [\n a[1] * b[2] - a[2] * b[1],\n a[2] * b[0] - a[0] * b[2],\n a[0] * b[1] - a[1] * b[0],\n ];\n}\n\nfunction normalizeRawVector3(value, fallback) {\n const length = Math.hypot(value[0], value[1], value[2]);\n if (!Number.isFinite(length) || length <= 0.000001) {\n return [...fallback];\n }\n return value.map((component) => component / length);\n}\n\nfunction orthogonalFallback(normal) {\n if (Math.abs(normal[1]) < 0.92) {\n return normalizeRawVector3(cross3([0, 1, 0], normal), [1, 0, 0]);\n }\n return normalizeRawVector3(cross3([1, 0, 0], normal), [0, 0, 1]);\n}\n\nfunction normalizePortalTangent(value, normal) {\n const raw = normalizeVector3(value, orthogonalFallback(normal));\n const projected = [\n raw[0] - normal[0] * dot3(raw, normal),\n raw[1] - normal[1] * dot3(raw, normal),\n raw[2] - normal[2] * dot3(raw, normal),\n ];\n return normalizeRawVector3(projected, orthogonalFallback(normal));\n}\n\nfunction readPositiveFinite(value, fallback) {\n const number = Number(value ?? fallback);\n if (!Number.isFinite(number)) {\n return fallback;\n }\n return Math.max(number, 0.0001);\n}\n\nfunction normalizeEnvironmentPortalMode(value, hasPortals) {\n if (value == null) {\n return hasPortals ? \"guide-and-gate\" : \"disabled\";\n }\n if (value === \"gate\") {\n return \"guide-and-gate\";\n }\n if (lightingEnvironmentPortalModes.includes(value)) {\n return value;\n }\n throw new Error(\n `environmentPortalMode must be one of: ${lightingEnvironmentPortalModes.join(\", \")}.`\n );\n}\n\nfunction normalizeEnvironmentPortal(portal, index) {\n if (!portal || typeof portal !== \"object\") {\n throw new Error(`environmentPortals[${index}] must be an object.`);\n }\n const shape = portal.shape ?? portal.kind ?? \"rectangle\";\n if (!lightingEnvironmentPortalShapes.includes(shape)) {\n throw new Error(\n `environmentPortals[${index}].shape must be one of: ${lightingEnvironmentPortalShapes.join(\", \")}.`\n );\n }\n const normal = Object.freeze(\n normalizeVector3(portal.normal, [0, 0, 1])\n );\n const tangent = Object.freeze(normalizePortalTangent(portal.tangent, normal));\n const bitangent = Object.freeze(\n normalizeRawVector3(cross3(normal, tangent), [0, 1, 0])\n );\n const width = readPositiveFinite(\n portal.width,\n readPositiveFinite(portal.halfWidth, 0.5) * 2\n );\n const height = readPositiveFinite(\n portal.height,\n readPositiveFinite(portal.halfHeight, 0.5) * 2\n );\n const radianceScale = Math.max(\n 0,\n readFinite(portal.radianceScale ?? portal.intensity, 1)\n );\n return Object.freeze({\n id: typeof portal.id === \"string\" && portal.id.length > 0\n ? portal.id\n : `environment-portal-${index}`,\n shape,\n position: Object.freeze(readVector3(portal.position ?? portal.center, [0, 0, 0])),\n normal,\n tangent,\n bitangent,\n width,\n height,\n radianceScale,\n color: readColor(portal.color, [1, 1, 1, 1]),\n twoSided: portal.twoSided !== false,\n });\n}\n\nfunction normalizeEnvironmentPortals(value) {\n if (value == null) {\n return Object.freeze([]);\n }\n if (!Array.isArray(value)) {\n throw new Error(\"environmentPortals must be an array when provided.\");\n }\n return Object.freeze(value.map(normalizeEnvironmentPortal));\n}\n\nfunction normalizeEnvironmentMap(value) {\n if (value == null) {\n return null;\n }\n if (!value || typeof value !== \"object\") {\n throw new Error(\"environmentMap must be an object when provided.\");\n }\n return Object.freeze({\n ...value,\n id: typeof value.id === \"string\" && value.id.length > 0\n ? value.id\n : \"environment-map\",\n projection: typeof value.projection === \"string\" && value.projection.length > 0\n ? value.projection\n : \"equirectangular\",\n intensity: readPositiveFinite(value.intensity ?? value.radianceScale, 1),\n rotationRadians: readFinite(value.rotationRadians ?? value.rotation, 0),\n ambientStrength: Math.max(0, readFinite(value.ambientStrength, 0.32)),\n });\n}\n\nfunction freezeLightSourceSpec(source) {\n return Object.freeze({\n ...source,\n color: source.color ? freezeVec4(source.color) : undefined,\n direction: source.direction\n ? Object.freeze(normalizeVector3(source.direction, [0, 1, 0]))\n : undefined,\n position: source.position\n ? Object.freeze(readVector3(source.position, [0, 0, 0]))\n : undefined,\n });\n}\n\nfunction defineEnvironmentPreset(spec) {\n const scene = spec.scene ?? \"studio\";\n const timeOfDay = spec.timeOfDay ?? \"midday\";\n const ambientScale = Math.max(\n 0,\n readFinite(spec.ambientScale, environmentPresetAmbientScales[scene] ?? 1)\n );\n const defaultSunlitBaseline =\n (environmentSunlitBaselineByTimeOfDay[timeOfDay] ??\n environmentSunlitBaselineByTimeOfDay.midday) *\n (environmentSunlitBaselineSceneScales[scene] ?? 0.58);\n const sunlitBaseline = Math.max(\n 0,\n readFinite(spec.sunlitBaseline, defaultSunlitBaseline)\n );\n return Object.freeze({\n ...spec,\n scene,\n timeOfDay,\n horizonColor: freezeVec4(spec.horizonColor),\n zenithColor: freezeVec4(spec.zenithColor),\n sunDirection: Object.freeze(normalizeVector3(spec.sunDirection, [0, 1, 0])),\n sunColor: freezeVec4(spec.sunColor),\n ambientColor: freezeVec4(scaleVec4(spec.ambientColor, ambientScale)),\n sunlitBaseline,\n environmentLightSources: Object.freeze(\n (spec.environmentLightSources ?? []).map(freezeLightSourceSpec)\n ),\n });\n}\n\nfunction buildEnvironmentLightSourceFallback(config, preset) {\n const firstPresetSource = preset.environmentLightSources[0] ?? {};\n return {\n kind: firstPresetSource.kind ?? \"sky\",\n role: firstPresetSource.role ?? \"fill\",\n color: firstPresetSource.color ?? config.sunColor,\n intensity:\n firstPresetSource.intensity ??\n Math.max(config.environmentIntensity, 0.0001),\n direction: firstPresetSource.direction ?? config.sunDirection,\n angularRadiusRadians: firstPresetSource.angularRadiusRadians ?? 0.25,\n reach: firstPresetSource.reach ?? 1000,\n };\n}\n\nfunction normalizeEnvironmentLightSource(source, index, fallback) {\n if (!source || typeof source !== \"object\") {\n throw new Error(`environmentLightSources[${index}] must be an object.`);\n }\n const requestedKind = source.kind ?? source.type ?? fallback.kind ?? \"custom\";\n const kind = lightingEnvironmentLightSourceKinds.includes(requestedKind)\n ? requestedKind\n : \"custom\";\n const color = readPositiveColor(source.color, fallback.color ?? [1, 1, 1, 1]);\n const intensity = readPositiveFinite(\n source.intensity ?? source.radianceScale,\n fallback.intensity ?? 1\n );\n const radiance = freezeVec4([\n color[0] * intensity,\n color[1] * intensity,\n color[2] * intensity,\n color[3],\n ]);\n return Object.freeze({\n id:\n typeof source.id === \"string\" && source.id.length > 0\n ? source.id\n : `environment-light-source-${index}`,\n kind,\n type: kind,\n role:\n typeof source.role === \"string\" && source.role.length > 0\n ? source.role\n : fallback.role ?? \"fill\",\n direction: Object.freeze(\n normalizeVector3(source.direction, fallback.direction ?? [0, 1, 0])\n ),\n position: Object.freeze(\n readVector3(source.position ?? source.origin, fallback.position ?? [0, 0, 0])\n ),\n color,\n intensity,\n radiance,\n luminance: colorLuminance(radiance),\n angularRadiusRadians: readPositiveFinite(\n source.angularRadiusRadians ?? source.angularRadius,\n fallback.angularRadiusRadians ?? 0.25\n ),\n reach: readPositiveFinite(\n source.reach ?? source.distance,\n fallback.reach ?? 1000\n ),\n castsShadows: source.castsShadows !== false,\n contributesToEnvironment: source.contributesToEnvironment !== false,\n });\n}\n\nfunction normalizeEnvironmentLightSources(value, preset, config) {\n const baseSources = value ?? preset.environmentLightSources;\n const fallback = buildEnvironmentLightSourceFallback(config, preset);\n if (!Array.isArray(baseSources)) {\n throw new Error(\"environmentLightSources must be an array when provided.\");\n }\n const normalizedSources = baseSources.length > 0\n ? baseSources.map((source, index) =>\n normalizeEnvironmentLightSource(source, index, fallback)\n )\n : [normalizeEnvironmentLightSource(fallback, 0, fallback)];\n return Object.freeze(normalizedSources);\n}\n\nfunction findDominantEnvironmentLightSource(sources) {\n return sources.reduce((dominant, source) =>\n source.luminance > dominant.luminance ? source : dominant\n );\n}\n\nfunction createEnvironmentMissLighting(source, environmentColor) {\n const fallbackRadiance = readPositiveColor(environmentColor, source.radiance);\n const radiance = ensureNonNullColor(source.radiance, fallbackRadiance);\n const color = readPositiveColor(source.color, environmentColor);\n return Object.freeze({\n sourceId: source.id,\n kind: source.kind,\n role: source.role,\n contribution: \"inferred-environment\",\n startingPoint: \"environment-miss\",\n direction: source.direction,\n position: source.position,\n color,\n intensity: Math.max(source.intensity, 0.0001),\n radiance,\n luminance: Math.max(colorLuminance(radiance), 0.0001),\n });\n}\n\nconst environmentLightingPresets = Object.freeze({\n \"moonlit-harbor\": defineEnvironmentPreset({\n preset: \"moonlit-harbor\",\n scene: \"harbor\",\n timeOfDay: \"night\",\n environmentMode: 0,\n environmentIntensity: 0.86,\n exposure: 1,\n horizonColor: freezeVec4([0.33, 0.43, 0.53, 1]),\n zenithColor: freezeVec4([0.035, 0.07, 0.14, 1]),\n sunDirection: Object.freeze(normalizeVector3([0.22, 0.88, 0.42], [0, 1, 0])),\n sunColor: freezeVec4([2.1, 2.25, 2.65, 1]),\n ambientColor: freezeVec4([0.018, 0.023, 0.03, 1]),\n environmentLightSources: [\n {\n id: \"harbor-moon\",\n kind: \"moon\",\n role: \"key\",\n direction: [0.22, 0.88, 0.42],\n color: [0.7, 0.76, 0.9, 1],\n intensity: 2.2,\n angularRadiusRadians: 0.018,\n },\n {\n id: \"harbor-sky\",\n kind: \"sky\",\n role: \"fill\",\n direction: [0, 1, 0],\n color: [0.22, 0.31, 0.48, 1],\n intensity: 0.35,\n },\n ],\n }),\n \"product-studio\": defineEnvironmentPreset({\n preset: \"product-studio\",\n scene: \"studio\",\n timeOfDay: \"midday\",\n environmentMode: 1,\n environmentIntensity: 1.05,\n exposure: 1,\n horizonColor: freezeVec4([0.52, 0.61, 0.65, 1]),\n zenithColor: freezeVec4([0.18, 0.22, 0.26, 1]),\n sunDirection: Object.freeze(normalizeVector3([0.18, 0.93, 0.24], [0, 1, 0])),\n sunColor: freezeVec4([3.8, 3.55, 2.85, 1]),\n ambientColor: freezeVec4([0.024, 0.027, 0.03, 1]),\n environmentLightSources: [\n {\n id: \"studio-key-softbox\",\n kind: \"studio-softbox\",\n role: \"key\",\n direction: [0.18, 0.93, 0.24],\n color: [1, 0.94, 0.82, 1],\n intensity: 4.1,\n angularRadiusRadians: 0.42,\n },\n {\n id: \"studio-fill-panel\",\n kind: \"studio-softbox\",\n role: \"fill\",\n direction: [-0.56, 0.62, -0.2],\n color: [0.75, 0.84, 1, 1],\n intensity: 1.3,\n angularRadiusRadians: 0.55,\n },\n ],\n }),\n \"neutral-studio\": defineEnvironmentPreset({\n preset: \"neutral-studio\",\n scene: \"studio\",\n timeOfDay: \"midday\",\n environmentMode: 2,\n environmentIntensity: 0.95,\n exposure: 1,\n horizonColor: freezeVec4([0.48, 0.53, 0.55, 1]),\n zenithColor: freezeVec4([0.24, 0.26, 0.29, 1]),\n sunDirection: Object.freeze(normalizeVector3([-0.24, 0.86, 0.36], [0, 1, 0])),\n sunColor: freezeVec4([2.4, 2.35, 2.2, 1]),\n ambientColor: freezeVec4([0.028, 0.029, 0.03, 1]),\n environmentLightSources: [\n {\n id: \"neutral-studio-overhead\",\n kind: \"studio-softbox\",\n role: \"key\",\n direction: [-0.24, 0.86, 0.36],\n color: [0.96, 0.97, 1, 1],\n intensity: 2.5,\n angularRadiusRadians: 0.5,\n },\n {\n id: \"neutral-studio-wall-bounce\",\n kind: \"ground-bounce\",\n role: \"fill\",\n direction: [0.2, 0.3, -0.9],\n color: [0.55, 0.58, 0.62, 1],\n intensity: 0.8,\n },\n ],\n }),\n \"grass-field-dawn\": defineEnvironmentPreset({\n preset: \"grass-field-dawn\",\n scene: \"grass-field\",\n timeOfDay: \"dawn\",\n environmentMode: 3,\n environmentIntensity: 0.92,\n exposure: 1.06,\n horizonColor: [0.92, 0.54, 0.32, 1],\n zenithColor: [0.16, 0.28, 0.5, 1],\n sunDirection: [0.64, 0.32, 0.18],\n sunColor: [5.6, 3.15, 1.55, 1],\n ambientColor: [0.034, 0.047, 0.032, 1],\n environmentLightSources: [\n { id: \"field-dawn-sun\", kind: \"sun\", role: \"key\", direction: [0.64, 0.32, 0.18], color: [1, 0.58, 0.28, 1], intensity: 5.6, angularRadiusRadians: 0.012 },\n { id: \"field-dawn-sky\", kind: \"sky\", role: \"fill\", direction: [0, 1, 0], color: [0.36, 0.52, 0.82, 1], intensity: 0.9 },\n { id: \"field-dawn-grass-bounce\", kind: \"ground-bounce\", role: \"bounce\", direction: [0, 0.25, 0.1], color: [0.22, 0.44, 0.12, 1], intensity: 0.45 },\n ],\n }),\n \"grass-field-midday\": defineEnvironmentPreset({\n preset: \"grass-field-midday\",\n scene: \"grass-field\",\n timeOfDay: \"midday\",\n environmentMode: 4,\n environmentIntensity: 1.18,\n exposure: 0.96,\n horizonColor: [0.58, 0.78, 0.96, 1],\n zenithColor: [0.1, 0.34, 0.82, 1],\n sunDirection: [0.18, 0.98, 0.08],\n sunColor: [9.8, 9.4, 8.55, 1],\n ambientColor: [0.048, 0.062, 0.04, 1],\n environmentLightSources: [\n { id: \"field-midday-sun\", kind: \"sun\", role: \"key\", direction: [0.18, 0.98, 0.08], color: [1, 0.96, 0.86, 1], intensity: 9.8, angularRadiusRadians: 0.0093 },\n { id: \"field-midday-sky\", kind: \"sky\", role: \"fill\", direction: [0, 1, 0], color: [0.48, 0.7, 1, 1], intensity: 1.8 },\n { id: \"field-midday-ground\", kind: \"ground-bounce\", role: \"bounce\", direction: [0, 0.35, -0.15], color: [0.28, 0.56, 0.16, 1], intensity: 0.65 },\n ],\n }),\n \"grass-field-dusk\": defineEnvironmentPreset({\n preset: \"grass-field-dusk\",\n scene: \"grass-field\",\n timeOfDay: \"dusk\",\n environmentMode: 5,\n environmentIntensity: 0.82,\n exposure: 1.12,\n horizonColor: [1.08, 0.42, 0.24, 1],\n zenithColor: [0.09, 0.1, 0.32, 1],\n sunDirection: [-0.76, 0.24, 0.22],\n sunColor: [4.8, 1.65, 0.72, 1],\n ambientColor: [0.026, 0.026, 0.034, 1],\n environmentLightSources: [\n { id: \"field-dusk-sun\", kind: \"sun\", role: \"key\", direction: [-0.76, 0.24, 0.22], color: [1, 0.34, 0.16, 1], intensity: 4.8, angularRadiusRadians: 0.014 },\n { id: \"field-dusk-horizon\", kind: \"horizon-glow\", role: \"fill\", direction: [-0.9, 0.08, 0.1], color: [0.92, 0.28, 0.16, 1], intensity: 1.2 },\n { id: \"field-dusk-grass\", kind: \"ground-bounce\", role: \"bounce\", direction: [0, 0.22, 0.2], color: [0.12, 0.28, 0.11, 1], intensity: 0.35 },\n ],\n }),\n \"grass-field-night\": defineEnvironmentPreset({\n preset: \"grass-field-night\",\n scene: \"grass-field\",\n timeOfDay: \"night\",\n environmentMode: 6,\n environmentIntensity: 0.48,\n exposure: 1.35,\n horizonColor: [0.08, 0.13, 0.2, 1],\n zenithColor: [0.018, 0.035, 0.09, 1],\n sunDirection: [-0.22, 0.86, -0.34],\n sunColor: [0.72, 0.82, 1.35, 1],\n ambientColor: [0.012, 0.017, 0.026, 1],\n environmentLightSources: [\n { id: \"field-night-moon\", kind: \"moon\", role: \"key\", direction: [-0.22, 0.86, -0.34], color: [0.52, 0.62, 1, 1], intensity: 1.25, angularRadiusRadians: 0.018 },\n { id: \"field-night-stars\", kind: \"stars\", role: \"fill\", direction: [0, 1, 0], color: [0.32, 0.38, 0.6, 1], intensity: 0.24 },\n { id: \"field-night-horizon\", kind: \"horizon-glow\", role: \"rim\", direction: [0.8, 0.08, -0.15], color: [0.08, 0.14, 0.26, 1], intensity: 0.28 },\n ],\n }),\n \"forest-dawn\": defineEnvironmentPreset({\n preset: \"forest-dawn\",\n scene: \"forest\",\n timeOfDay: \"dawn\",\n environmentMode: 7,\n environmentIntensity: 0.78,\n exposure: 1.14,\n horizonColor: [0.72, 0.48, 0.28, 1],\n zenithColor: [0.08, 0.18, 0.18, 1],\n sunDirection: [0.58, 0.42, -0.24],\n sunColor: [4.4, 2.65, 1.32, 1],\n ambientColor: [0.024, 0.04, 0.026, 1],\n environmentLightSources: [\n { id: \"forest-dawn-sun-shaft\", kind: \"sun\", role: \"key\", direction: [0.58, 0.42, -0.24], color: [1, 0.62, 0.32, 1], intensity: 4.4, angularRadiusRadians: 0.018 },\n { id: \"forest-dawn-canopy\", kind: \"canopy-transmission\", role: \"filter\", direction: [0.12, 0.78, 0.2], color: [0.34, 0.68, 0.24, 1], intensity: 0.86 },\n { id: \"forest-dawn-sky-gap\", kind: \"sky\", role: \"fill\", direction: [-0.18, 0.92, 0.12], color: [0.28, 0.46, 0.62, 1], intensity: 0.48 },\n ],\n }),\n \"forest-midday\": defineEnvironmentPreset({\n preset: \"forest-midday\",\n scene: \"forest\",\n timeOfDay: \"midday\",\n environmentMode: 8,\n environmentIntensity: 0.96,\n exposure: 1.02,\n horizonColor: [0.38, 0.62, 0.42, 1],\n zenithColor: [0.08, 0.28, 0.32, 1],\n sunDirection: [0.08, 0.96, -0.18],\n sunColor: [7.2, 6.9, 5.25, 1],\n ambientColor: [0.034, 0.055, 0.032, 1],\n environmentLightSources: [\n { id: \"forest-midday-sun-gap\", kind: \"sun\", role: \"key\", direction: [0.08, 0.96, -0.18], color: [1, 0.96, 0.74, 1], intensity: 7.2, angularRadiusRadians: 0.013 },\n { id: \"forest-midday-leaves\", kind: \"canopy-transmission\", role: \"filter\", direction: [0.32, 0.75, 0.12], color: [0.24, 0.72, 0.28, 1], intensity: 1.35 },\n { id: \"forest-midday-floor\", kind: \"ground-bounce\", role: \"bounce\", direction: [-0.1, 0.25, 0.18], color: [0.18, 0.35, 0.13, 1], intensity: 0.42 },\n ],\n }),\n \"forest-dusk\": defineEnvironmentPreset({\n preset: \"forest-dusk\",\n scene: \"forest\",\n timeOfDay: \"dusk\",\n environmentMode: 9,\n environmentIntensity: 0.68,\n exposure: 1.2,\n horizonColor: [0.72, 0.28, 0.2, 1],\n zenithColor: [0.04, 0.07, 0.18, 1],\n sunDirection: [-0.7, 0.28, -0.18],\n sunColor: [3.2, 1.18, 0.56, 1],\n ambientColor: [0.018, 0.026, 0.024, 1],\n environmentLightSources: [\n { id: \"forest-dusk-horizon\", kind: \"horizon-glow\", role: \"key\", direction: [-0.7, 0.18, -0.18], color: [1, 0.34, 0.2, 1], intensity: 2.2, angularRadiusRadians: 0.1 },\n { id: \"forest-dusk-canopy\", kind: \"canopy-transmission\", role: \"filter\", direction: [0.18, 0.7, 0.26], color: [0.18, 0.38, 0.2, 1], intensity: 0.52 },\n { id: \"forest-dusk-sky-gap\", kind: \"sky\", role: \"fill\", direction: [0, 1, 0], color: [0.12, 0.16, 0.34, 1], intensity: 0.42 },\n ],\n }),\n \"forest-night\": defineEnvironmentPreset({\n preset: \"forest-night\",\n scene: \"forest\",\n timeOfDay: \"night\",\n environmentMode: 10,\n environmentIntensity: 0.42,\n exposure: 1.42,\n horizonColor: [0.035, 0.08, 0.1, 1],\n zenithColor: [0.012, 0.025, 0.06, 1],\n sunDirection: [0.2, 0.82, -0.46],\n sunColor: [0.42, 0.56, 1.1, 1],\n ambientColor: [0.01, 0.016, 0.02, 1],\n environmentLightSources: [\n { id: \"forest-night-moon-gap\", kind: \"moon\", role: \"key\", direction: [0.2, 0.82, -0.46], color: [0.42, 0.56, 1, 1], intensity: 0.95, angularRadiusRadians: 0.025 },\n { id: \"forest-night-canopy\", kind: \"canopy-transmission\", role: \"filter\", direction: [-0.16, 0.66, 0.1], color: [0.08, 0.18, 0.12, 1], intensity: 0.28 },\n { id: \"forest-night-stars\", kind: \"stars\", role: \"fill\", direction: [0, 1, 0], color: [0.22, 0.28, 0.5, 1], intensity: 0.18 },\n ],\n }),\n \"warehouse-dawn\": defineEnvironmentPreset({\n preset: \"warehouse-dawn\",\n scene: \"warehouse\",\n timeOfDay: \"dawn\",\n environmentMode: 11,\n environmentIntensity: 0.74,\n exposure: 1.08,\n horizonColor: [0.58, 0.44, 0.34, 1],\n zenithColor: [0.16, 0.19, 0.24, 1],\n sunDirection: [0.82, 0.28, 0.18],\n sunColor: [2.8, 1.7, 0.92, 1],\n ambientColor: [0.028, 0.03, 0.032, 1],\n environmentLightSources: [\n { id: \"warehouse-dawn-loading-door\", kind: \"window-portal\", role: \"key\", direction: [0.82, 0.28, 0.18], color: [1, 0.62, 0.34, 1], intensity: 2.8, angularRadiusRadians: 0.22 },\n { id: \"warehouse-dawn-fluorescent\", kind: \"fluorescent-strip\", role: \"fill\", direction: [0, 1, 0], color: [0.78, 0.9, 1, 1], intensity: 1.1, angularRadiusRadians: 0.35 },\n { id: \"warehouse-dawn-concrete-bounce\", kind: \"ground-bounce\", role: \"bounce\", direction: [0, 0.28, -0.2], color: [0.34, 0.36, 0.38, 1], intensity: 0.42 },\n ],\n }),\n \"warehouse-midday\": defineEnvironmentPreset({\n preset: \"warehouse-midday\",\n scene: \"warehouse\",\n timeOfDay: \"midday\",\n environmentMode: 12,\n environmentIntensity: 0.92,\n exposure: 0.98,\n horizonColor: [0.64, 0.7, 0.74, 1],\n zenithColor: [0.28, 0.34, 0.42, 1],\n sunDirection: [0.35, 0.86, 0.16],\n sunColor: [4.2, 4, 3.45, 1],\n ambientColor: [0.034, 0.036, 0.038, 1],\n environmentLightSources: [\n { id: \"warehouse-midday-skylights\", kind: \"window-portal\", role: \"key\", direction: [0.35, 0.86, 0.16], color: [0.92, 0.96, 1, 1], intensity: 4.2, angularRadiusRadians: 0.18 },\n { id: \"warehouse-midday-fluorescent\", kind: \"fluorescent-strip\", role: \"fill\", direction: [-0.2, 0.92, 0.1], color: [0.78, 0.92, 1, 1], intensity: 1.6, angularRadiusRadians: 0.45 },\n { id: \"warehouse-midday-door-spill\", kind: \"sodium-door\", role: \"rim\", direction: [-0.82, 0.18, -0.12], color: [1, 0.58, 0.24, 1], intensity: 0.68 },\n ],\n }),\n \"warehouse-dusk\": defineEnvironmentPreset({\n preset: \"warehouse-dusk\",\n scene: \"warehouse\",\n timeOfDay: \"dusk\",\n environmentMode: 13,\n environmentIntensity: 0.7,\n exposure: 1.16,\n horizonColor: [0.7, 0.32, 0.24, 1],\n zenithColor: [0.08, 0.1, 0.18, 1],\n sunDirection: [-0.78, 0.18, 0.16],\n sunColor: [2.4, 0.94, 0.48, 1],\n ambientColor: [0.022, 0.024, 0.03, 1],\n environmentLightSources: [\n { id: \"warehouse-dusk-door-glow\", kind: \"sodium-door\", role: \"key\", direction: [-0.78, 0.18, 0.16], color: [1, 0.42, 0.2, 1], intensity: 2.4, angularRadiusRadians: 0.18 },\n { id: \"warehouse-dusk-fluorescent\", kind: \"fluorescent-strip\", role: \"fill\", direction: [0, 0.95, -0.08], color: [0.72, 0.88, 1, 1], intensity: 1.35, angularRadiusRadians: 0.4 },\n { id: \"warehouse-dusk-emergency\", kind: \"emergency-beacon\", role: \"accent\", direction: [0.2, 0.35, -0.8], color: [1, 0.08, 0.04, 1], intensity: 0.32 },\n ],\n }),\n \"warehouse-night\": defineEnvironmentPreset({\n preset: \"warehouse-night\",\n scene: \"warehouse\",\n timeOfDay: \"night\",\n environmentMode: 14,\n environmentIntensity: 0.58,\n exposure: 1.28,\n horizonColor: [0.06, 0.08, 0.12, 1],\n zenithColor: [0.02, 0.03, 0.055, 1],\n sunDirection: [0.1, 0.94, -0.12],\n sunColor: [1.2, 1.65, 2.25, 1],\n ambientColor: [0.014, 0.018, 0.024, 1],\n environmentLightSources: [\n { id: \"warehouse-night-fluorescent\", kind: \"fluorescent-strip\", role: \"key\", direction: [0.1, 0.94, -0.12], color: [0.68, 0.88, 1, 1], intensity: 2.25, angularRadiusRadians: 0.5 },\n { id: \"warehouse-night-emergency\", kind: \"emergency-beacon\", role: \"accent\", direction: [-0.4, 0.3, 0.7], color: [1, 0.05, 0.025, 1], intensity: 0.4 },\n { id: \"warehouse-night-door-leak\", kind: \"window-portal\", role: \"rim\", direction: [0.82, 0.08, -0.2], color: [0.12, 0.22, 0.42, 1], intensity: 0.34 },\n ],\n }),\n \"cavern-dawn\": defineEnvironmentPreset({\n preset: \"cavern-dawn\",\n scene: \"cavern\",\n timeOfDay: \"dawn\",\n environmentMode: 15,\n environmentIntensity: 0.62,\n exposure: 1.24,\n horizonColor: [0.5, 0.3, 0.2, 1],\n zenithColor: [0.04, 0.07, 0.09, 1],\n sunDirection: [0.72, 0.32, 0.26],\n sunColor: [2.1, 1.22, 0.64, 1],\n ambientColor: [0.018, 0.018, 0.016, 1],\n environmentLightSources: [\n { id: \"cavern-dawn-mouth\", kind: \"cave-mouth\", role: \"key\", direction: [0.72, 0.32, 0.26], color: [1, 0.58, 0.3, 1], intensity: 2.1, angularRadiusRadians: 0.24 },\n { id: \"cavern-dawn-torch\", kind: \"torch\", role: \"emissive\", direction: [-0.35, 0.28, -0.6], color: [1, 0.42, 0.16, 1], intensity: 1.35, reach: 18 },\n { id: \"cavern-dawn-crystal\", kind: \"crystal\", role: \"accent\", direction: [0.08, 0.22, 0.9], color: [0.22, 0.72, 1, 1], intensity: 0.28, reach: 10 },\n ],\n }),\n \"cavern-midday\": defineEnvironmentPreset({\n preset: \"cavern-midday\",\n scene: \"cavern\",\n timeOfDay: \"midday\",\n environmentMode: 16,\n environmentIntensity: 0.72,\n exposure: 1.16,\n horizonColor: [0.6, 0.56, 0.48, 1],\n zenithColor: [0.08, 0.12, 0.14, 1],\n sunDirection: [0.36, 0.82, 0.14],\n sunColor: [3.4, 3.05, 2.2, 1],\n ambientColor: [0.02, 0.022, 0.02, 1],\n environmentLightSources: [\n { id: \"cavern-midday-mouth\", kind: \"cave-mouth\", role: \"key\", direction: [0.36, 0.82, 0.14], color: [1, 0.9, 0.66, 1], intensity: 3.4, angularRadiusRadians: 0.18 },\n { id: \"cavern-midday-biolume\", kind: \"bioluminescence\", role: \"fill\", direction: [-0.25, 0.25, 0.7], color: [0.1, 0.82, 0.64, 1], intensity: 0.46, reach: 14 },\n { id: \"cavern-midday-wet-rock\", kind: \"ground-bounce\", role: \"bounce\", direction: [0.1, 0.2, -0.3], color: [0.18, 0.2, 0.18, 1], intensity: 0.22 },\n ],\n }),\n \"cavern-dusk\": defineEnvironmentPreset({\n preset: \"cavern-dusk\",\n scene: \"cavern\",\n timeOfDay: \"dusk\",\n environmentMode: 17,\n environmentIntensity: 0.56,\n exposure: 1.32,\n horizonColor: [0.46, 0.18, 0.14, 1],\n zenithColor: [0.035, 0.045, 0.08, 1],\n sunDirection: [-0.62, 0.22, 0.22],\n sunColor: [1.55, 0.56, 0.28, 1],\n ambientColor: [0.014, 0.014, 0.018, 1],\n environmentLightSources: [\n { id: \"cavern-dusk-mouth\", kind: \"cave-mouth\", role: \"rim\", direction: [-0.62, 0.22, 0.22], color: [1, 0.36, 0.18, 1], intensity: 1.55, angularRadiusRadians: 0.22 },\n { id: \"cavern-dusk-torch\", kind: \"torch\", role: \"key\", direction: [0.32, 0.34, -0.54], color: [1, 0.38, 0.12, 1], intensity: 1.85, reach: 20 },\n { id: \"cavern-dusk-biolume\", kind: \"bioluminescence\", role: \"fill\", direction: [-0.18, 0.18, 0.74], color: [0.08, 0.58, 0.72, 1], intensity: 0.34, reach: 12 },\n ],\n }),\n \"cavern-night\": defineEnvironmentPreset({\n preset: \"cavern-night\",\n scene: \"cavern\",\n timeOfDay: \"night\",\n environmentMode: 18,\n environmentIntensity: 0.5,\n exposure: 1.45,\n horizonColor: [0.025, 0.035, 0.06, 1],\n zenithColor: [0.008, 0.014, 0.03, 1],\n sunDirection: [0.18, 0.28, -0.68],\n sunColor: [1.9, 0.72, 0.24, 1],\n ambientColor: [0.01, 0.012, 0.018, 1],\n environmentLightSources: [\n { id: \"cavern-night-torch\", kind: \"torch\", role: \"key\", direction: [0.18, 0.28, -0.68], color: [1, 0.36, 0.12, 1], intensity: 1.9, reach: 18 },\n { id: \"cavern-night-biolume\", kind: \"bioluminescence\", role: \"fill\", direction: [-0.32, 0.16, 0.72], color: [0.06, 0.62, 0.76, 1], intensity: 0.52, reach: 16 },\n { id: \"cavern-night-lava\", kind: \"lava-fissure\", role: \"emissive\", direction: [0.42, 0.12, 0.28], color: [1, 0.18, 0.04, 1], intensity: 0.8, reach: 12 },\n ],\n }),\n});\n\nexport const lightingEnvironmentPresetNames = Object.freeze(\n Object.keys(environmentLightingPresets)\n);\n\nfunction resolveEnvironmentPreset(name, timeOfDay) {\n const presetName = typeof name === \"string\" && name.length > 0 ? name : \"product-studio\";\n const preset = environmentLightingPresets[presetName];\n if (!preset) {\n if (lightingEnvironmentSceneNames.includes(presetName)) {\n if (\n timeOfDay != null &&\n !lightingEnvironmentTimeOfDayNames.includes(timeOfDay)\n ) {\n throw new Error(\n `timeOfDay must be one of: ${lightingEnvironmentTimeOfDayNames.join(\", \")}.`\n );\n }\n const scenePresetName = `${presetName}-${timeOfDay ?? \"midday\"}`;\n const scenePreset = environmentLightingPresets[scenePresetName];\n if (scenePreset) {\n return scenePreset;\n }\n }\n throw new Error(\n `Unknown lighting environment preset \"${presetName}\". Expected one of: ${lightingEnvironmentPresetNames.join(\", \")}.`\n );\n }\n return preset;\n}\n\nfunction estimateEnvironmentColor(config) {\n const horizonWeight = 0.58;\n const zenithWeight = 1 - horizonWeight;\n const glowWeight = 0.055;\n const intensity = Math.max(config.environmentIntensity, 0.0001);\n return ensureNonNullColor([\n (config.horizonColor[0] * horizonWeight + config.zenithColor[0] * zenithWeight + config.sunColor[0] * glowWeight) * intensity,\n (config.horizonColor[1] * horizonWeight + config.zenithColor[1] * zenithWeight + config.sunColor[1] * glowWeight) * intensity,\n (config.horizonColor[2] * horizonWeight + config.zenithColor[2] * zenithWeight + config.sunColor[2] * glowWeight) * intensity,\n 1,\n ], config.dominantLightSource?.radiance ?? config.sunColor);\n}\n\nexport function createEnvironmentLightingConfig(options = {}) {\n const preset = resolveEnvironmentPreset(\n options.preset ?? options.name ?? options.scene,\n options.timeOfDay\n );\n const environmentPortals = normalizeEnvironmentPortals(\n options.environmentPortals ?? options.portals\n );\n const environmentMap = normalizeEnvironmentMap(\n options.environmentMap ?? options.hdri ?? preset.environmentMap\n );\n const environmentPortalMode = normalizeEnvironmentPortalMode(\n options.environmentPortalMode ?? options.portalMode,\n environmentPortals.length > 0\n );\n const environmentIntensity = Math.max(\n readFinite(options.environmentIntensity ?? options.intensity, preset.environmentIntensity),\n 0.0001\n );\n const baseConfig = {\n preset: preset.preset,\n scene: preset.scene,\n timeOfDay: preset.timeOfDay,\n profile: typeof options.profile === \"string\" ? options.profile : defaultLightingProfile,\n environmentMode: Math.max(0, Math.trunc(readFinite(options.environmentMode, preset.environmentMode))),\n environmentIntensity,\n exposure: Math.max(0.0001, readFinite(options.exposure, preset.exposure)),\n horizonColor: readColor(options.horizonColor, preset.horizonColor),\n zenithColor: readColor(options.zenithColor, preset.zenithColor),\n sunDirection: Object.freeze(\n normalizeVector3(options.sunDirection, preset.sunDirection)\n ),\n sunColor: readColor(options.sunColor, preset.sunColor),\n ambientColor: readColor(options.ambientColor, preset.ambientColor),\n sunlitBaseline: Math.max(\n 0,\n readFinite(options.sunlitBaseline ?? options.daylightBaseline, preset.sunlitBaseline)\n ),\n environmentPortalMode,\n environmentPortals,\n environmentMap,\n };\n const environmentLightSources = normalizeEnvironmentLightSources(\n options.environmentLightSources ?? options.lightSources,\n preset,\n baseConfig\n );\n const dominantLightSource = findDominantEnvironmentLightSource(\n environmentLightSources\n );\n const config = {\n ...baseConfig,\n environmentLightSources,\n lightSources: environmentLightSources,\n dominantLightSource,\n };\n const environmentColor = estimateEnvironmentColor(config);\n const environmentMissLighting = createEnvironmentMissLighting(\n dominantLightSource,\n environmentColor\n );\n\n return Object.freeze({\n ...config,\n environmentColor,\n environmentMissLighting,\n wavefront: Object.freeze({\n environmentColor,\n ambientColor: config.ambientColor,\n sunlitBaseline: config.sunlitBaseline,\n environmentPortalMode: config.environmentPortalMode,\n environmentPortals: config.environmentPortals,\n environmentMap: config.environmentMap,\n environmentLightSources: config.environmentLightSources,\n lightSources: config.environmentLightSources,\n dominantLightSource,\n environmentMissLighting,\n environmentLighting: Object.freeze({\n horizonColor: config.horizonColor,\n zenithColor: config.zenithColor,\n sunDirection: Object.freeze([...config.sunDirection]),\n sunColor: config.sunColor,\n intensity: config.environmentIntensity,\n mode: config.environmentMode,\n exposure: config.exposure,\n sunlitBaseline: config.sunlitBaseline,\n environmentPortalMode: config.environmentPortalMode,\n environmentPortalCount: config.environmentPortals.length,\n environmentMap: config.environmentMap,\n environmentLightSources: config.environmentLightSources,\n environmentLightSourceCount: config.environmentLightSources.length,\n dominantLightSource,\n environmentMissLighting,\n }),\n }),\n });\n}\n\nexport function createWavefrontEnvironmentLightingOptions(options = {}) {\n const config = createEnvironmentLightingConfig(options);\n return Object.freeze({\n environmentColor: config.wavefront.environmentColor,\n ambientColor: config.wavefront.ambientColor,\n sunlitBaseline: config.wavefront.sunlitBaseline,\n environmentPortalMode: config.wavefront.environmentPortalMode,\n environmentPortals: config.wavefront.environmentPortals,\n environmentMap: config.wavefront.environmentMap,\n environmentLightSources: config.wavefront.environmentLightSources,\n lightSources: config.wavefront.environmentLightSources,\n dominantLightSource: config.wavefront.dominantLightSource,\n environmentMissLighting: config.wavefront.environmentMissLighting,\n environmentLighting: config.wavefront.environmentLighting,\n lightingEnvironment: config,\n });\n}\n\nexport const lightingWavefrontSchemaVersion = 1;\nexport const lightingWavefrontQueuePairStrategy = \"ping-pong-active-next\";\nexport const lightingWavefrontHitTypes = Object.freeze([\n \"surface\",\n \"emissive\",\n \"environment\",\n \"transparent\",\n \"miss\",\n]);\nexport const lightingWavefrontRayKinds = Object.freeze([\n \"path\",\n \"visibility-probe\",\n]);\nexport const lightingWavefrontVisibilityProbeModes = Object.freeze([\n \"disabled\",\n \"mis-balanced\",\n \"exclusive-emissive\",\n]);\nexport const lightingWavefrontTerminalHitTypes = Object.freeze([\n \"emissive\",\n \"environment\",\n \"miss\",\n]);\nexport const lightingWavefrontContinuationHitTypes = Object.freeze([\n \"surface\",\n \"transparent\",\n]);\nexport const lightingWavefrontPassOrder = Object.freeze([\n \"accumulateTerminalRadiance\",\n \"scatterContinuations\",\n]);\nexport const lightingRequiredRendererWavefrontPassOrder = Object.freeze([\n \"generatePrimaryRays\",\n \"intersectActiveQueue\",\n \"resolveSurfaceRecords\",\n \"accumulateTerminalRadiance\",\n \"scatterContinuations\",\n \"compactAndSwapQueues\",\n]);\n\nfunction createLightingWavefrontField(name, type, description) {\n return Object.freeze({\n name,\n type,\n description,\n });\n}\n\nfunction createLightingWavefrontRecordContract(recordName, fields) {\n return Object.freeze({\n schemaVersion: lightingWavefrontSchemaVersion,\n recordName,\n fields: Object.freeze(fields),\n });\n}\n\nexport const lightingWavefrontBufferContracts = Object.freeze({\n ray: createLightingWavefrontRecordContract(\n \"RayRecord\",\n [\n createLightingWavefrontField(\"rayId\", \"u32\", \"Stable ray identifier.\"),\n createLightingWavefrontField(\"parentRayId\", \"u32\", \"Parent ray identifier.\"),\n createLightingWavefrontField(\"sourcePixelId\", \"u32\", \"Source pixel/sample owner.\"),\n createLightingWavefrontField(\"sampleId\", \"u32\", \"Per-pixel sample slot.\"),\n createLightingWavefrontField(\"bounce\", \"u32\", \"Current bounce depth.\"),\n createLightingWavefrontField(\"mediumRefId\", \"u32\", \"Current medium reference.\"),\n createLightingWavefrontField(\n \"mediumStackDepth\",\n \"u32\",\n \"Depth of the bounded nested medium stack.\"\n ),\n createLightingWavefrontField(\n \"flags\",\n \"u32\",\n \"Renderer-owned ray flags. Low bits may encode ray kind metadata.\"\n ),\n createLightingWavefrontField(\n \"mediumStack0\",\n \"vec4<u32>\",\n \"Lower half of the bounded nested medium stack.\"\n ),\n createLightingWavefrontField(\n \"mediumStack1\",\n \"vec4<u32>\",\n \"Upper half of the bounded nested medium stack.\"\n ),\n createLightingWavefrontField(\n \"spectralState\",\n \"vec4<f32>\",\n \"Spectral transport payload for wavelength-driven reference validation.\"\n ),\n createLightingWavefrontField(\"origin\", \"vec3<f32>\", \"Ray origin.\"),\n createLightingWavefrontField(\"direction\", \"vec3<f32>\", \"Normalized ray direction.\"),\n createLightingWavefrontField(\"throughput\", \"vec3<f32>\", \"Accumulated path throughput.\"),\n ]\n ),\n hit: createLightingWavefrontRecordContract(\n \"HitRecord\",\n [\n createLightingWavefrontField(\"rayId\", \"u32\", \"Stable ray identifier.\"),\n createLightingWavefrontField(\"sourcePixelId\", \"u32\", \"Source pixel/sample owner.\"),\n createLightingWavefrontField(\"hitType\", \"u32\", \"Surface, emissive, environment, transparent, or miss.\"),\n createLightingWavefrontField(\"distance\", \"f32\", \"Nearest-hit distance.\"),\n createLightingWavefrontField(\"entityId\", \"u32\", \"Owning entity identifier.\"),\n createLightingWavefrontField(\"instanceId\", \"u32\", \"Owning instance identifier.\"),\n createLightingWavefrontField(\"primitiveId\", \"u32\", \"Primitive identifier.\"),\n createLightingWavefrontField(\"materialId\", \"u32\", \"Resolved material identifier.\"),\n createLightingWavefrontField(\"barycentrics\", \"vec3<f32>\", \"Triangle barycentrics.\"),\n createLightingWavefrontField(\"uv\", \"vec2<f32>\", \"Resolved UV coordinates.\"),\n createLightingWavefrontField(\"geometricNormal\", \"vec3<f32>\", \"Geometric surface normal.\"),\n createLightingWavefrontField(\"shadingNormal\", \"vec3<f32>\", \"Interpolated shading normal.\"),\n createLightingWavefrontField(\"frontFace\", \"u32\", \"Front-face classification.\"),\n ]\n ),\n surface: createLightingWavefrontRecordContract(\n \"SurfaceRecord\",\n [\n createLightingWavefrontField(\"rayId\", \"u32\", \"Stable ray identifier.\"),\n createLightingWavefrontField(\"entityId\", \"u32\", \"Owning entity identifier.\"),\n createLightingWavefrontField(\"materialRefId\", \"u32\", \"Renderer material reference id.\"),\n createLightingWavefrontField(\"mediumRefId\", \"u32\", \"Renderer medium reference id.\"),\n createLightingWavefrontField(\"geometricNormal\", \"vec3<f32>\", \"Geometric surface normal.\"),\n createLightingWavefrontField(\"shadingNormal\", \"vec3<f32>\", \"Interpolated shading normal.\"),\n createLightingWavefrontField(\"uv\", \"vec2<f32>\", \"Resolved UV coordinates.\"),\n createLightingWavefrontField(\"tangentFrame\", \"mat3x3<f32>\", \"Resolved tangent frame.\"),\n ]\n ),\n materialReference: createLightingWavefrontRecordContract(\n \"MaterialReferenceRecord\",\n [\n createLightingWavefrontField(\"materialRefId\", \"u32\", \"Lighting-visible material reference id.\"),\n createLightingWavefrontField(\"materialId\", \"u32\", \"Source material identifier.\"),\n createLightingWavefrontField(\"shadingModel\", \"u32\", \"Renderer shading-model discriminator.\"),\n createLightingWavefrontField(\"textureSetId\", \"u32\", \"Resolved texture-set identifier.\"),\n createLightingWavefrontField(\"flags\", \"u32\", \"Renderer material flags.\"),\n ]\n ),\n mediumReference: createLightingWavefrontRecordContract(\n \"MediumReferenceRecord\",\n [\n createLightingWavefrontField(\"mediumRefId\", \"u32\", \"Lighting-visible medium reference id.\"),\n createLightingWavefrontField(\"mediumId\", \"u32\", \"Source medium identifier.\"),\n createLightingWavefrontField(\"phaseModel\", \"u32\", \"Phase-function discriminator.\"),\n createLightingWavefrontField(\"absorption\", \"vec3<f32>\", \"Medium absorption coefficients.\"),\n createLightingWavefrontField(\"scattering\", \"vec3<f32>\", \"Medium scattering coefficients.\"),\n ]\n ),\n accumulation: createLightingWavefrontRecordContract(\n \"AccumulationRecord\",\n [\n createLightingWavefrontField(\"sourcePixelId\", \"u32\", \"Source pixel/sample owner.\"),\n createLightingWavefrontField(\"sampleCount\", \"u32\", \"Accumulated sample count.\"),\n createLightingWavefrontField(\"radiance\", \"vec3<f32>\", \"Accumulated radiance.\"),\n createLightingWavefrontField(\"throughput\", \"vec3<f32>\", \"Last surviving throughput.\"),\n createLightingWavefrontField(\"resetEpoch\", \"u32\", \"Renderer accumulation reset epoch.\"),\n ]\n ),\n});\n\nexport const lightingWavefrontTerminationPolicy = Object.freeze({\n terminalHitTypes: lightingWavefrontTerminalHitTypes,\n continuationHitTypes: lightingWavefrontContinuationHitTypes,\n emissive: Object.freeze({\n action: \"accumulate-and-stop\",\n contributesRadiance: true,\n }),\n environment: Object.freeze({\n action: \"accumulate-and-stop\",\n contributesRadiance: true,\n }),\n miss: Object.freeze({\n action: \"accumulate-environment-or-dark-stop\",\n contributesRadiance: true,\n }),\n});\n\nconst defaultWavefrontDarkRadiance = Object.freeze([0.0001, 0.0001, 0.0001]);\nconst wavefrontEventKinds = Object.freeze([\n \"diffuse\",\n \"reflection\",\n \"refraction\",\n \"transparency\",\n \"terminate\",\n]);\nconst wavefrontRayKindFlagMask = 0x3;\nconst wavefrontRayKindFlagValues = Object.freeze({\n path: 0,\n \"visibility-probe\": 1,\n});\n\nfunction normalizeWavefrontRayKind(value) {\n return lightingWavefrontRayKinds.includes(value) ? value : \"path\";\n}\n\nfunction normalizeWavefrontVisibilityProbeMode(value) {\n return lightingWavefrontVisibilityProbeModes.includes(value)\n ? value\n : \"disabled\";\n}\n\nfunction normalizeWavefrontHitType(value) {\n return lightingWavefrontHitTypes.includes(value) ? value : \"surface\";\n}\n\nfunction normalizeWavefrontEventKind(value) {\n return wavefrontEventKinds.includes(value) ? value : null;\n}\n\nfunction normalizeVec3(value, fallback = [0, 0, 0]) {\n if (!Array.isArray(value) || value.length < 3) {\n return [...fallback];\n }\n return [\n Number.isFinite(value[0]) ? value[0] : fallback[0],\n Number.isFinite(value[1]) ? value[1] : fallback[1],\n Number.isFinite(value[2]) ? value[2] : fallback[2],\n ];\n}\n\nfunction clampUnit(value, fallback = 0) {\n return Math.max(0, Math.min(1, readFinite(value, fallback)));\n}\n\nfunction saturateVec3(value) {\n return value.map((component) => Math.max(0, component));\n}\n\nfunction scaleVec3(value, scalar) {\n return value.map((component) => component * scalar);\n}\n\nfunction addVec3(left, right) {\n return left.map((component, index) => component + right[index]);\n}\n\nfunction multiplyVec3(left, right) {\n return left.map((component, index) => component * right[index]);\n}\n\nfunction dotVec3(left, right) {\n return left[0] * right[0] + left[1] * right[1] + left[2] * right[2];\n}\n\nfunction lengthVec3(value) {\n return Math.hypot(value[0], value[1], value[2]);\n}\n\nfunction normalizeDirection(value, fallback = [0, 1, 0]) {\n const vector = normalizeVec3(value, fallback);\n const length = lengthVec3(vector);\n if (!Number.isFinite(length) || length <= 0.000001) {\n return [...fallback];\n }\n return vector.map((component) => component / length);\n}\n\nfunction mixVec3(left, right, factor) {\n return left.map((component, index) =>\n component * (1 - factor) + right[index] * factor\n );\n}\n\nfunction reflectDirection(direction, normal) {\n const scale = 2 * dotVec3(direction, normal);\n return normalizeDirection(\n [\n direction[0] - scale * normal[0],\n direction[1] - scale * normal[1],\n direction[2] - scale * normal[2],\n ],\n normal\n );\n}\n\nfunction refractDirection(direction, normal, etaRatio) {\n const cosTheta = Math.min(-dotVec3(direction, normal), 1);\n const rOutPerp = scaleVec3(addVec3(direction, scaleVec3(normal, cosTheta)), etaRatio);\n const rOutPerpLengthSquared = dotVec3(rOutPerp, rOutPerp);\n const parallelFactor = 1 - rOutPerpLengthSquared;\n if (parallelFactor <= 0) {\n return null;\n }\n const rOutParallel = scaleVec3(normal, -Math.sqrt(parallelFactor));\n return normalizeDirection(addVec3(rOutPerp, rOutParallel), direction);\n}\n\nfunction normalizeMediumRefId(value) {\n const mediumRefId = Math.max(0, Math.trunc(readFinite(value, 0)));\n return Number.isFinite(mediumRefId) ? mediumRefId : 0;\n}\n\nfunction normalizeMediumStack(value) {\n if (!Array.isArray(value)) {\n return [];\n }\n\n return value\n .map((entry) => normalizeMediumRefId(entry))\n .filter((entry, index, stack) => entry > 0 && stack.indexOf(entry) === index)\n .slice(0, 4);\n}\n\nfunction createWavefrontMediumStatePayload(currentMediumRefId, stack) {\n const normalizedStack = normalizeMediumStack(stack);\n const stackSlots = [0, 0, 0, 0];\n normalizedStack.forEach((entry, index) => {\n stackSlots[index] = entry;\n });\n return Object.freeze({\n currentMediumRefId,\n stackDepth: normalizedStack.length,\n stack: Object.freeze(normalizedStack),\n stackSlots: Object.freeze(stackSlots),\n });\n}\n\nexport function evaluateWavefrontMediumState(options = {}) {\n const currentMediumRefId = normalizeMediumRefId(\n options.currentMediumRefId ?? options.mediumRefId\n );\n const surfaceMediumRefId = normalizeMediumRefId(options.surfaceMediumRefId);\n const stack = normalizeMediumStack(options.mediumStack);\n const frontFace = options.frontFace !== false;\n const eventKind =\n normalizeWavefrontEventKind(options.eventKind) ?? \"transparency\";\n\n if (\n surfaceMediumRefId === 0 ||\n (eventKind !== \"refraction\" && eventKind !== \"transparency\")\n ) {\n return Object.freeze({\n ...createWavefrontMediumStatePayload(currentMediumRefId, stack),\n enteredMediumRefId: 0,\n exitedMediumRefId: 0,\n });\n }\n\n let nextStack = [...stack];\n let nextMediumRefId = currentMediumRefId;\n let enteredMediumRefId = 0;\n let exitedMediumRefId = 0;\n const stackTop = nextStack.at(-1) ?? 0;\n\n if (frontFace) {\n if (stackTop !== surfaceMediumRefId) {\n nextStack.push(surfaceMediumRefId);\n nextStack = nextStack.slice(-4);\n }\n nextMediumRefId = surfaceMediumRefId;\n enteredMediumRefId = surfaceMediumRefId;\n } else if (stackTop === surfaceMediumRefId) {\n nextStack.pop();\n nextMediumRefId = nextStack.at(-1) ?? 0;\n exitedMediumRefId = surfaceMediumRefId;\n }\n\n return Object.freeze({\n ...createWavefrontMediumStatePayload(nextMediumRefId, nextStack),\n enteredMediumRefId,\n exitedMediumRefId,\n });\n}\n\nfunction encodeWavefrontRayFlags(flags, rayKind) {\n const normalizedFlags = Math.max(0, Math.trunc(readFinite(flags, 0)));\n const rayKindValue = wavefrontRayKindFlagValues[rayKind];\n return (normalizedFlags & ~wavefrontRayKindFlagMask) | rayKindValue;\n}\n\nexport function createWavefrontRayPayload(options = {}) {\n const rayKind = normalizeWavefrontRayKind(options.rayKind);\n const mediumState = evaluateWavefrontMediumState({\n currentMediumRefId: options.mediumRefId,\n mediumStack: options.mediumStack,\n });\n const spectralState = Object.freeze(\n normalizeVec3(options.spectralState, [550, 1, 0]).concat(\n readFinite(options.spectralWeight, 0)\n )\n );\n const mediumStack0 = Object.freeze([\n mediumState.stackSlots[0],\n mediumState.stackSlots[1],\n mediumState.stackSlots[2],\n mediumState.stackSlots[3],\n ]);\n const mediumStack1 = Object.freeze([0, 0, 0, 0]);\n return Object.freeze({\n rayId: Math.max(0, Math.trunc(readFinite(options.rayId, 0))),\n parentRayId: Math.max(0, Math.trunc(readFinite(options.parentRayId, 0))),\n sourcePixelId: Math.max(0, Math.trunc(readFinite(options.sourcePixelId, 0))),\n sampleId: Math.max(0, Math.trunc(readFinite(options.sampleId, 0))),\n bounce: Math.max(0, Math.trunc(readFinite(options.bounce, 0))),\n origin: Object.freeze(normalizeVec3(options.origin, [0, 0, 0])),\n direction: Object.freeze(normalizeDirection(options.direction, [0, 0, -1])),\n throughput: Object.freeze(\n saturateVec3(normalizeVec3(options.throughput, [1, 1, 1]))\n ),\n mediumRefId: mediumState.currentMediumRefId,\n mediumStackDepth: mediumState.stackDepth,\n mediumStack: mediumState.stack,\n mediumStackSlots: mediumState.stackSlots,\n mediumStack0,\n mediumStack1,\n spectralState,\n rayKind,\n flags: encodeWavefrontRayFlags(options.flags, rayKind),\n });\n}\n\nexport function createWavefrontVisibilityProbeRay(options = {}) {\n return createWavefrontRayPayload({\n ...options,\n rayKind: \"visibility-probe\",\n });\n}\n\nexport function createWavefrontLightingPlan(options = {}) {\n const maxDepth = Math.max(1, Math.trunc(readFinite(options.maxDepth, 4)));\n const queueCapacity = Math.max(\n 1,\n Math.trunc(readFinite(options.queueCapacity, 4096))\n );\n const explicitLightSampling = Boolean(options.explicitLightSampling);\n const visibilityProbeMode = normalizeWavefrontVisibilityProbeMode(\n options.visibilityProbeMode ??\n (explicitLightSampling ? \"mis-balanced\" : \"disabled\")\n );\n const accumulationResetEpoch = Math.max(\n 0,\n Math.trunc(readFinite(options.accumulationResetEpoch, 0))\n );\n\n return Object.freeze({\n schemaVersion: lightingWavefrontSchemaVersion,\n maxDepth,\n queueCapacity,\n explicitLightSampling,\n visibilityProbeMode,\n rayKinds: lightingWavefrontRayKinds,\n accumulationResetEpoch,\n queueLayout: Object.freeze({\n strategy: lightingWavefrontQueuePairStrategy,\n compactAfterScatter: true,\n queues: Object.freeze([\n Object.freeze({ name: \"active\", role: \"current-bounce\" }),\n Object.freeze({ name: \"next\", role: \"next-bounce\" }),\n ]),\n }),\n bufferContracts: lightingWavefrontBufferContracts,\n terminationPolicy: lightingWavefrontTerminationPolicy,\n requiredRendererPassOrder: lightingRequiredRendererWavefrontPassOrder,\n lightingPasses: Object.freeze([\n Object.freeze({\n key: \"accumulateTerminalRadiance\",\n stage: \"accumulateTerminalRadiance\",\n reads: Object.freeze([\n \"ray\",\n \"hit\",\n \"surface\",\n \"materialReference\",\n \"mediumReference\",\n ]),\n writes: Object.freeze([\"accumulation\"]),\n terminalHitTypes: lightingWavefrontTerminalHitTypes,\n }),\n Object.freeze({\n key: \"scatterContinuations\",\n stage: \"scatterContinuations\",\n reads: Object.freeze([\n \"ray\",\n \"hit\",\n \"surface\",\n \"materialReference\",\n \"mediumReference\",\n ]),\n writes: Object.freeze([\"ray\"]),\n continuationHitTypes: lightingWavefrontContinuationHitTypes,\n explicitLightSampling,\n visibilityProbeMode,\n }),\n ]),\n });\n}\n\nexport function evaluateWavefrontTerminalRadiance(options = {}) {\n const hitType = normalizeWavefrontHitType(options.hitType);\n const throughput = saturateVec3(normalizeVec3(options.throughput, [1, 1, 1]));\n const emission = saturateVec3(normalizeVec3(options.emission, [0, 0, 0]));\n const environmentRadiance = saturateVec3(\n normalizeVec3(options.environmentRadiance, [0, 0, 0])\n );\n const missRadiance = saturateVec3(\n normalizeVec3(options.missRadiance, defaultWavefrontDarkRadiance)\n );\n const environmentLuminance = colorLuminance(environmentRadiance);\n let source = \"none\";\n let rawRadiance = [0, 0, 0];\n\n if (hitType === \"emissive\") {\n source = \"emissive\";\n rawRadiance = emission;\n } else if (hitType === \"environment\") {\n source = \"environment\";\n rawRadiance = environmentRadiance;\n } else if (hitType === \"miss\") {\n source = environmentLuminance > 0.000001 ? \"environment\" : \"dark\";\n rawRadiance = environmentLuminance > 0.000001 ? environmentRadiance : missRadiance;\n }\n\n const radiance = multiplyVec3(throughput, rawRadiance);\n const terminated = lightingWavefrontTerminalHitTypes.includes(hitType);\n\n return Object.freeze({\n hitType,\n source,\n terminated,\n radiance: Object.freeze(radiance),\n nearDarkSample:\n source === \"dark\" && colorLuminance(radiance) <= colorLuminance(defaultWavefrontDarkRadiance),\n });\n}\n\nexport function evaluateWavefrontContinuationEvent(options = {}) {\n const hitType = normalizeWavefrontHitType(options.hitType);\n const bounceIndex = Math.max(0, Math.trunc(readFinite(options.bounceIndex, 0)));\n const maxDepth = Math.max(1, Math.trunc(readFinite(options.maxDepth, 4)));\n const throughput = saturateVec3(normalizeVec3(options.throughput, [1, 1, 1]));\n const albedo = saturateVec3(normalizeVec3(options.albedo, [0.8, 0.8, 0.8]));\n const transmission = saturateVec3(\n normalizeVec3(options.transmission, [0, 0, 0])\n );\n const shadingNormal = normalizeDirection(options.shadingNormal, [0, 1, 0]);\n const viewDirection = normalizeDirection(options.viewDirection, [0, 0, 1]);\n const incomingDirection = normalizeDirection(\n scaleVec3(viewDirection, -1),\n [0, 0, -1]\n );\n const frontFace = options.frontFace !== false;\n const orientedNormal = frontFace\n ? shadingNormal\n : scaleVec3(shadingNormal, -1);\n const metalness = clampUnit(options.metalness, 0);\n const roughness = clampUnit(options.roughness, 0.5);\n const opacity = clampUnit(options.opacity, 1);\n const refractiveIndex = Math.max(1, readFinite(options.refractiveIndex ?? options.ior, 1.45));\n const transmissionStrength = Math.max(...transmission);\n const requestedEventKind =\n normalizeWavefrontEventKind(options.eventKind) ??\n (hitType === \"transparent\" || opacity < 0.999\n ? \"transparency\"\n : transmissionStrength > 0.001\n ? \"refraction\"\n : metalness >= 0.5 || roughness <= 0.2\n ? \"reflection\"\n : \"diffuse\");\n let eventKind = requestedEventKind;\n let totalInternalReflection = false;\n\n let nextDirection = incomingDirection;\n let attenuation;\n\n if (!lightingWavefrontContinuationHitTypes.includes(hitType) || bounceIndex >= maxDepth - 1) {\n eventKind = \"terminate\";\n attenuation = [0, 0, 0];\n } else if (eventKind === \"reflection\") {\n nextDirection = reflectDirection(incomingDirection, orientedNormal);\n attenuation = mixVec3([0.04, 0.04, 0.04], albedo, metalness);\n } else if (eventKind === \"refraction\") {\n const etaRatio = frontFace ? 1 / refractiveIndex : refractiveIndex;\n const refractedDirection = refractDirection(\n incomingDirection,\n orientedNormal,\n etaRatio\n );\n if (refractedDirection) {\n nextDirection = refractedDirection;\n attenuation = transmissionStrength > 0.001 ? transmission : [1, 1, 1];\n } else {\n totalInternalReflection = true;\n eventKind = \"reflection\";\n nextDirection = reflectDirection(incomingDirection, orientedNormal);\n attenuation = mixVec3([0.04, 0.04, 0.04], albedo, metalness);\n }\n } else if (eventKind === \"transparency\") {\n nextDirection = incomingDirection;\n const transparencyWeight = Math.max(1 - opacity, transmissionStrength, 0.05);\n attenuation = transmissionStrength > 0.001\n ? transmission\n : [transparencyWeight, transparencyWeight, transparencyWeight];\n } else {\n nextDirection = normalizeDirection(\n addVec3(orientedNormal, albedo.map((component) => component - 0.5)),\n orientedNormal\n );\n attenuation = scaleVec3(albedo, Math.max(0.05, 1 - metalness));\n }\n\n const nextThroughput = multiplyVec3(throughput, saturateVec3(attenuation));\n const continueTracing =\n eventKind !== \"terminate\" && colorLuminance(nextThroughput) > 0.0001;\n const mediumState = evaluateWavefrontMediumState({\n currentMediumRefId: options.currentMediumRefId ?? options.mediumRefId,\n surfaceMediumRefId: options.surfaceMediumRefId,\n mediumStack: options.mediumStack,\n frontFace,\n eventKind,\n });\n\n return Object.freeze({\n hitType,\n requestedEventKind,\n eventKind,\n continueTracing,\n totalInternalReflection,\n nextDirection: Object.freeze(nextDirection),\n attenuation: Object.freeze(saturateVec3(attenuation)),\n nextThroughput: Object.freeze(nextThroughput),\n mediumState,\n explicitLightSamplingEnabled: Boolean(options.explicitLightSampling),\n });\n}\n\nexport function evaluateWavefrontVisibilityProbe(options = {}) {\n const probeMode = normalizeWavefrontVisibilityProbeMode(\n options.probeMode ??\n (options.explicitLightSampling ? \"mis-balanced\" : \"disabled\")\n );\n const probeRay = createWavefrontVisibilityProbeRay({\n ...options.probeRay,\n throughput: options.throughput ?? options.probeRay?.throughput,\n direction: options.direction ?? options.probeRay?.direction,\n mediumRefId: options.currentMediumRefId ?? options.probeRay?.mediumRefId,\n mediumStack: options.mediumStack ?? options.probeRay?.mediumStack,\n });\n const transparentSegments = Array.isArray(options.transparentSegments)\n ? options.transparentSegments\n : [];\n const transmittance = transparentSegments.reduce(\n (current, segment) =>\n multiplyVec3(current, saturateVec3(normalizeVec3(segment, [1, 1, 1]))),\n [1, 1, 1]\n );\n const emissiveRadiance = saturateVec3(\n normalizeVec3(options.emissiveRadiance, [0, 0, 0])\n );\n const environmentRadiance = saturateVec3(\n normalizeVec3(options.environmentRadiance, [0, 0, 0])\n );\n const activeEmissiveRadiance = saturateVec3(\n normalizeVec3(options.activeEmissiveRadiance, [0, 0, 0])\n );\n const prefersEnvironment = Boolean(options.prefersEnvironment);\n const sourceRadiance =\n prefersEnvironment || colorLuminance(emissiveRadiance) <= 0.000001\n ? environmentRadiance\n : emissiveRadiance;\n const rawContribution = multiplyVec3(\n probeRay.throughput,\n multiplyVec3(sourceRadiance, transmittance)\n );\n const activeEmissiveVisible =\n colorLuminance(activeEmissiveRadiance) > 0.000001;\n const misWeight =\n probeMode === \"mis-balanced\" && activeEmissiveVisible ? 0.5 : 1;\n const contribution =\n probeMode === \"exclusive-emissive\" && activeEmissiveVisible\n ? [0, 0, 0]\n : scaleVec3(rawContribution, misWeight);\n\n return Object.freeze({\n probeMode,\n probeRay,\n transmittance: Object.freeze(transmittance),\n misWeight,\n doubleCountPrevented:\n activeEmissiveVisible && probeMode !== \"disabled\",\n contribution: Object.freeze(contribution),\n });\n}\n\nexport function evaluateWavefrontMaterialReference(options = {}) {\n const material = Object.freeze({\n albedo: Object.freeze(\n saturateVec3(normalizeVec3(options.albedo, [0.8, 0.8, 0.8]))\n ),\n emission: Object.freeze(\n saturateVec3(normalizeVec3(options.emission, [0, 0, 0]))\n ),\n roughness: clampUnit(options.roughness, 0.5),\n metalness: clampUnit(options.metalness, 0),\n opacity: clampUnit(options.opacity, 1),\n transmission: Object.freeze(\n saturateVec3(normalizeVec3(options.transmission, [0, 0, 0]))\n ),\n refractiveIndex: Math.max(\n 1,\n readFinite(options.refractiveIndex ?? options.ior, 1.45)\n ),\n });\n const continuation = evaluateWavefrontContinuationEvent({\n ...options,\n albedo: material.albedo,\n roughness: material.roughness,\n metalness: material.metalness,\n opacity: material.opacity,\n transmission: material.transmission,\n refractiveIndex: material.refractiveIndex,\n });\n const terminal = evaluateWavefrontTerminalRadiance({\n ...options,\n emission: material.emission,\n });\n\n return Object.freeze({\n material,\n terminal,\n continuation,\n throughputUpdate: continuation.nextThroughput,\n });\n}\n\nexport function createWavefrontReferenceFixture(options = {}) {\n const tolerance = Math.max(0.0001, readFinite(options.tolerance, 0.0005));\n const ray = createWavefrontRayPayload({\n rayId: options.rayId,\n parentRayId: options.parentRayId,\n sourcePixelId: options.sourcePixelId,\n sampleId: options.sampleId,\n bounce: options.bounceIndex ?? options.bounce,\n origin: options.origin,\n direction: options.direction ?? scaleVec3(options.viewDirection ?? [0, 0, 1], -1),\n throughput: options.throughput,\n mediumRefId: options.currentMediumRefId ?? options.mediumRefId,\n mediumStack: options.mediumStack,\n });\n const reference = evaluateWavefrontMaterialReference(options);\n const visibilityProbe =\n options.visibilityProbe === undefined\n ? null\n : evaluateWavefrontVisibilityProbe({\n ...options.visibilityProbe,\n throughput: options.visibilityProbe.throughput ?? ray.throughput,\n });\n const accumulationRadiance = addVec3(\n reference.terminal.radiance,\n visibilityProbe?.contribution ?? [0, 0, 0]\n );\n\n return Object.freeze({\n tolerance,\n ray,\n material: reference.material,\n continuation: reference.continuation,\n terminal: reference.terminal,\n visibilityProbe,\n accumulation: Object.freeze({\n sourcePixelId: ray.sourcePixelId,\n sampleCount: reference.terminal.terminated ? 1 : 0,\n radiance: Object.freeze(accumulationRadiance),\n throughput: reference.continuation.nextThroughput,\n resetEpoch: Math.max(\n 0,\n Math.trunc(readFinite(options.accumulationResetEpoch, 0))\n ),\n }),\n });\n}\n\nconst lightingImportanceLevels = Object.freeze([\n \"low\",\n \"medium\",\n \"high\",\n \"critical\",\n]);\n\nconst lightingBandPolicySpecs = Object.freeze({\n near: Object.freeze({\n primaryShadowSource: \"ray-traced-primary\",\n assistShadowSources: Object.freeze([\"visibility-raster\", \"shadow-map-assist\"]),\n temporalReuse: \"balanced\",\n updateCadenceDivisor: 1,\n liveObjectShadows: true,\n impressionOnly: false,\n }),\n mid: Object.freeze({\n primaryShadowSource: \"selective-raster-and-proxy\",\n assistShadowSources: Object.freeze([\n \"regional-shadow-map\",\n \"proxy-caster\",\n \"temporal-history\",\n ]),\n temporalReuse: \"aggressive\",\n updateCadenceDivisor: 2,\n liveObjectShadows: true,\n impressionOnly: false,\n }),\n far: Object.freeze({\n primaryShadowSource: \"merged-proxy-casters\",\n assistShadowSources: Object.freeze([\n \"coarse-directional\",\n \"semi-static-occlusion\",\n ]),\n temporalReuse: \"high\",\n updateCadenceDivisor: 8,\n liveObjectShadows: false,\n impressionOnly: false,\n }),\n horizon: Object.freeze({\n primaryShadowSource: \"baked-impression\",\n assistShadowSources: Object.freeze([\"atmospheric-gradient\", \"skyline-darkening\"]),\n temporalReuse: \"baked\",\n updateCadenceDivisor: 60,\n liveObjectShadows: false,\n impressionOnly: true,\n }),\n});\n\nfunction assertLightingImportance(name, value) {\n if (!lightingImportanceLevels.includes(value)) {\n throw new Error(\n `${name} must be one of: ${lightingImportanceLevels.join(\", \")}.`\n );\n }\n return value;\n}\n\nfunction readPositiveIntegerOption(name, value, fallback) {\n if (value === undefined) {\n return fallback;\n }\n\n if (\n typeof value !== \"number\" ||\n !Number.isFinite(value) ||\n value <= 0 ||\n Math.round(value) !== value\n ) {\n throw new Error(`${name} must be a positive integer.`);\n }\n\n return value;\n}\n\nfunction resolveBandParticipation(profileName, band, importance) {\n const referenceProfile = profileName === \"reference\";\n const premiumImportance =\n importance === \"critical\" || importance === \"high\";\n\n if (band === \"near\") {\n return Object.freeze({\n directShadows: premiumImportance ? \"premium\" : \"selective\",\n reflections: premiumImportance ? \"premium\" : \"selective\",\n globalIllumination:\n referenceProfile || importance === \"critical\" ? \"premium\" : \"selective\",\n });\n }\n\n if (band === \"mid\") {\n return Object.freeze({\n directShadows: premiumImportance ? \"selective\" : \"proxy\",\n reflections:\n referenceProfile && premiumImportance ? \"selective\" : \"proxy\",\n globalIllumination:\n referenceProfile && importance === \"critical\" ? \"selective\" : \"disabled\",\n });\n }\n\n if (band === \"far\") {\n return Object.freeze({\n directShadows: \"proxy\",\n reflections:\n referenceProfile && importance === \"critical\" ? \"proxy\" : \"disabled\",\n globalIllumination: \"disabled\",\n });\n }\n\n return Object.freeze({\n directShadows: \"disabled\",\n reflections: \"disabled\",\n globalIllumination: \"disabled\",\n });\n}\n\nexport function createLightingBandPlan(options = {}) {\n const profileName = options.profile ?? defaultLightingProfile;\n const profile = getLightingProfile(profileName);\n const importance = assertLightingImportance(\n \"importance\",\n options.importance ?? \"high\"\n );\n\n const bands = Object.freeze(\n lightingDistanceBands.map((band) =>\n Object.freeze({\n band,\n profile: profile.name,\n importance,\n primaryShadowSource: lightingBandPolicySpecs[band].primaryShadowSource,\n assistShadowSources: Object.freeze([\n ...lightingBandPolicySpecs[band].assistShadowSources,\n ]),\n rtParticipation: resolveBandParticipation(profile.name, band, importance),\n temporalReuse: lightingBandPolicySpecs[band].temporalReuse,\n updateCadenceDivisor: lightingBandPolicySpecs[band].updateCadenceDivisor,\n liveObjectShadows: lightingBandPolicySpecs[band].liveObjectShadows,\n impressionOnly: lightingBandPolicySpecs[band].impressionOnly,\n })\n )\n );\n\n return Object.freeze({\n schemaVersion: 1,\n owner: lightingDebugOwner,\n profile: profile.name,\n importance,\n techniques: Object.freeze([...profile.techniques]),\n bands,\n });\n}\n\nconst lightingProfileModeEstimatedCostMs = Object.freeze({\n realtime: 4.5,\n hybrid: 7.5,\n reference: 12.5,\n});\n\nexport function createLightingProfileModeLadder(options = {}) {\n const moduleId =\n typeof options.id === \"string\" && options.id.trim().length > 0\n ? options.id.trim()\n : \"lighting-profile-mode\";\n const preferredProfile = getLightingProfile(\n options.preferredProfile ?? defaultAdaptiveLightingProfilePolicy.preferredProfile\n ).name;\n const initialProfile = getLightingProfile(\n options.initialProfile ?? preferredProfile\n ).name;\n const minimumFrameRate = readPositiveIntegerOption(\n \"minimumFrameRate\",\n options.minimumFrameRate,\n defaultAdaptiveLightingProfilePolicy.minimumFrameRate\n );\n const sampleWindowSize = readPositiveIntegerOption(\n \"sampleWindowSize\",\n options.sampleWindowSize,\n defaultAdaptiveLightingProfilePolicy.sampleWindowSize\n );\n const importance = assertLightingImportance(\n \"importance\",\n options.importance ?? \"high\"\n );\n const moduleImportance = assertLightingImportance(\n \"moduleImportance\",\n options.moduleImportance ?? \"critical\"\n );\n\n const levels = Object.freeze(\n lightingProfileModeOrder.map((profileName) => {\n const profile = getLightingProfile(profileName);\n return Object.freeze({\n id: profile.name,\n estimatedCostMs: lightingProfileModeEstimatedCostMs[profile.name],\n config: Object.freeze({\n profile: profile.name,\n description: profile.description,\n techniques: Object.freeze([...profile.techniques]),\n lightingBandPlan: createLightingBandPlan({\n profile: profile.name,\n importance,\n }),\n policy: Object.freeze({\n preferredProfile,\n minimumFrameRate,\n sampleWindowSize,\n }),\n }),\n });\n })\n );\n\n return Object.freeze({\n id: moduleId,\n domain: \"lighting\",\n authority: \"visual\",\n importance: moduleImportance,\n initialLevel: initialProfile,\n levels,\n target: Object.freeze({\n minimumFrameRate,\n maximumFrameRate: minimumFrameRate,\n preferredFrameRates: Object.freeze([minimumFrameRate]),\n }),\n adaptation: Object.freeze({\n sampleWindowSize,\n minimumSamplesBeforeAdjustment: sampleWindowSize,\n degradeCooldownFrames: 1,\n upgradeCooldownFrames: sampleWindowSize,\n minStableFramesForRecovery: sampleWindowSize,\n }),\n policy: Object.freeze({\n preferredProfile,\n minimumFrameRate,\n sampleWindowSize,\n }),\n });\n}\n\nfunction buildWorkerBudgetLevels(jobType, queueClass, presets) {\n return Object.freeze([\n Object.freeze({\n id: \"low\",\n estimatedCostMs: presets.low.estimatedCostMs,\n config: Object.freeze({\n maxDispatchesPerFrame: presets.low.maxDispatchesPerFrame,\n maxJobsPerDispatch: presets.low.maxJobsPerDispatch,\n cadenceDivisor: presets.low.cadenceDivisor,\n workgroupScale: presets.low.workgroupScale,\n maxQueueDepth: presets.low.maxQueueDepth,\n metadata: Object.freeze({\n owner: lightingDebugOwner,\n queueClass,\n jobType,\n quality: \"low\",\n }),\n }),\n }),\n Object.freeze({\n id: \"medium\",\n estimatedCostMs: presets.medium.estimatedCostMs,\n config: Object.freeze({\n maxDispatchesPerFrame: presets.medium.maxDispatchesPerFrame,\n maxJobsPerDispatch: presets.medium.maxJobsPerDispatch,\n cadenceDivisor: presets.medium.cadenceDivisor,\n workgroupScale: presets.medium.workgroupScale,\n maxQueueDepth: presets.medium.maxQueueDepth,\n metadata: Object.freeze({\n owner: lightingDebugOwner,\n queueClass,\n jobType,\n quality: \"medium\",\n }),\n }),\n }),\n Object.freeze({\n id: \"high\",\n estimatedCostMs: presets.high.estimatedCostMs,\n config: Object.freeze({\n maxDispatchesPerFrame: presets.high.maxDispatchesPerFrame,\n maxJobsPerDispatch: presets.high.maxJobsPerDispatch,\n cadenceDivisor: presets.high.cadenceDivisor,\n workgroupScale: presets.high.workgroupScale,\n maxQueueDepth: presets.high.maxQueueDepth,\n metadata: Object.freeze({\n owner: lightingDebugOwner,\n queueClass,\n jobType,\n quality: \"high\",\n }),\n }),\n }),\n ]);\n}\n\nconst lightingWorkerSpecPresets = {\n hybrid: {\n suggestedAllocationIds: [\n \"lighting.hybrid.radiance-cache\",\n \"lighting.hybrid.reflection-history\",\n \"lighting.hybrid.shadow-atlas\",\n ],\n jobs: {\n directLighting: {\n domain: \"lighting\",\n importance: \"high\",\n levels: buildWorkerBudgetLevels(\n \"lighting.hybrid.directLighting\",\n lightingWorkerQueueClass,\n {\n low: {\n estimatedCostMs: 0.5,\n maxDispatchesPerFrame: 1,\n maxJobsPerDispatch: 64,\n cadenceDivisor: 2,\n workgroupScale: 0.5,\n maxQueueDepth: 128,\n },\n medium: {\n estimatedCostMs: 0.9,\n maxDispatchesPerFrame: 1,\n maxJobsPerDispatch: 128,\n cadenceDivisor: 1,\n workgroupScale: 0.75,\n maxQueueDepth: 256,\n },\n high: {\n estimatedCostMs: 1.2,\n maxDispatchesPerFrame: 2,\n maxJobsPerDispatch: 256,\n cadenceDivisor: 1,\n workgroupScale: 1,\n maxQueueDepth: 512,\n },\n }\n ),\n suggestedAllocationIds: [\"lighting.hybrid.shadow-atlas\"],\n },\n screenTrace: {\n domain: \"reflections\",\n importance: \"high\",\n levels: buildWorkerBudgetLevels(\n \"lighting.hybrid.screenTrace\",\n lightingWorkerQueueClass,\n {\n low: {\n estimatedCostMs: 0.8,\n maxDispatchesPerFrame: 1,\n maxJobsPerDispatch: 32,\n cadenceDivisor: 3,\n workgroupScale: 0.4,\n maxQueueDepth: 96,\n },\n medium: {\n estimatedCostMs: 1.5,\n maxDispatchesPerFrame: 1,\n maxJobsPerDispatch: 96,\n cadenceDivisor: 2,\n workgroupScale: 0.7,\n maxQueueDepth: 192,\n },\n high: {\n estimatedCostMs: 2.2,\n maxDispatchesPerFrame: 2,\n maxJobsPerDispatch: 192,\n cadenceDivisor: 1,\n workgroupScale: 1,\n maxQueueDepth: 384,\n },\n }\n ),\n suggestedAllocationIds: [\"lighting.hybrid.reflection-history\"],\n },\n radianceCache: {\n domain: \"lighting\",\n importance: \"high\",\n levels: buildWorkerBudgetLevels(\n \"lighting.hybrid.radianceCache\",\n lightingWorkerQueueClass,\n {\n low: {\n estimatedCostMs: 0.7,\n maxDispatchesPerFrame: 1,\n maxJobsPerDispatch: 32,\n cadenceDivisor: 2,\n workgroupScale: 0.5,\n maxQueueDepth: 96,\n },\n medium: {\n estimatedCostMs: 1.2,\n maxDispatchesPerFrame: 1,\n maxJobsPerDispatch: 64,\n cadenceDivisor: 1,\n workgroupScale: 0.75,\n maxQueueDepth: 192,\n },\n high: {\n estimatedCostMs: 1.8,\n maxDispatchesPerFrame: 2,\n maxJobsPerDispatch: 128,\n cadenceDivisor: 1,\n workgroupScale: 1,\n maxQueueDepth: 256,\n },\n }\n ),\n suggestedAllocationIds: [\"lighting.hybrid.radiance-cache\"],\n },\n finalGather: {\n domain: \"lighting\",\n importance: \"critical\",\n levels: buildWorkerBudgetLevels(\n \"lighting.hybrid.finalGather\",\n lightingWorkerQueueClass,\n {\n low: {\n estimatedCostMs: 1,\n maxDispatchesPerFrame: 1,\n maxJobsPerDispatch: 48,\n cadenceDivisor: 2,\n workgroupScale: 0.5,\n maxQueueDepth: 128,\n },\n medium: {\n estimatedCostMs: 1.8,\n maxDispatchesPerFrame: 1,\n maxJobsPerDispatch: 96,\n cadenceDivisor: 1,\n workgroupScale: 0.75,\n maxQueueDepth: 256,\n },\n high: {\n estimatedCostMs: 2.6,\n maxDispatchesPerFrame: 2,\n maxJobsPerDispatch: 192,\n cadenceDivisor: 1,\n workgroupScale: 1,\n maxQueueDepth: 384,\n },\n }\n ),\n suggestedAllocationIds: [\n \"lighting.hybrid.radiance-cache\",\n \"lighting.hybrid.reflection-history\",\n ],\n },\n reflectionResolve: {\n domain: \"reflections\",\n importance: \"high\",\n levels: buildWorkerBudgetLevels(\n \"lighting.hybrid.reflectionResolve\",\n lightingWorkerQueueClass,\n {\n low: {\n estimatedCostMs: 0.4,\n maxDispatchesPerFrame: 1,\n maxJobsPerDispatch: 32,\n cadenceDivisor: 2,\n workgroupScale: 0.5,\n maxQueueDepth: 96,\n },\n medium: {\n estimatedCostMs: 0.8,\n maxDispatchesPerFrame: 1,\n maxJobsPerDispatch: 64,\n cadenceDivisor: 1,\n workgroupScale: 0.75,\n maxQueueDepth: 192,\n },\n high: {\n estimatedCostMs: 1.2,\n maxDispatchesPerFrame: 1,\n maxJobsPerDispatch: 128,\n cadenceDivisor: 1,\n workgroupScale: 1,\n maxQueueDepth: 256,\n },\n }\n ),\n suggestedAllocationIds: [\"lighting.hybrid.reflection-history\"],\n },\n },\n },\n pathtracer: {\n suggestedAllocationIds: [\n \"lighting.pathtracer.path-state\",\n \"lighting.pathtracer.accumulation\",\n \"lighting.pathtracer.denoise-history\",\n ],\n jobs: {\n pathTrace: {\n domain: \"lighting\",\n importance: \"critical\",\n levels: buildWorkerBudgetLevels(\n \"lighting.pathtracer.pathTrace\",\n lightingWorkerQueueClass,\n {\n low: {\n estimatedCostMs: 1.2,\n maxDispatchesPerFrame: 1,\n maxJobsPerDispatch: 16,\n cadenceDivisor: 3,\n workgroupScale: 0.45,\n maxQueueDepth: 48,\n },\n medium: {\n estimatedCostMs: 2.3,\n maxDispatchesPerFrame: 1,\n maxJobsPerDispatch: 32,\n cadenceDivisor: 2,\n workgroupScale: 0.7,\n maxQueueDepth: 96,\n },\n high: {\n estimatedCostMs: 3.8,\n maxDispatchesPerFrame: 2,\n maxJobsPerDispatch: 64,\n cadenceDivisor: 1,\n workgroupScale: 1,\n maxQueueDepth: 128,\n },\n }\n ),\n suggestedAllocationIds: [\"lighting.pathtracer.path-state\"],\n },\n accumulate: {\n domain: \"lighting\",\n importance: \"medium\",\n levels: buildWorkerBudgetLevels(\n \"lighting.pathtracer.accumulate\",\n lightingWorkerQueueClass,\n {\n low: {\n estimatedCostMs: 0.4,\n maxDispatchesPerFrame: 1,\n maxJobsPerDispatch: 16,\n cadenceDivisor: 2,\n workgroupScale: 0.5,\n maxQueueDepth: 32,\n },\n medium: {\n estimatedCostMs: 0.8,\n maxDispatchesPerFrame: 1,\n maxJobsPerDispatch: 32,\n cadenceDivisor: 1,\n workgroupScale: 0.75,\n maxQueueDepth: 64,\n },\n high: {\n estimatedCostMs: 1.1,\n maxDispatchesPerFrame: 1,\n maxJobsPerDispatch: 64,\n cadenceDivisor: 1,\n workgroupScale: 1,\n maxQueueDepth: 96,\n },\n }\n ),\n suggestedAllocationIds: [\"lighting.pathtracer.accumulation\"],\n },\n denoise: {\n domain: \"post-processing\",\n importance: \"high\",\n levels: buildWorkerBudgetLevels(\n \"lighting.pathtracer.denoise\",\n lightingWorkerQueueClass,\n {\n low: {\n estimatedCostMs: 0.4,\n maxDispatchesPerFrame: 1,\n maxJobsPerDispatch: 16,\n cadenceDivisor: 2,\n workgroupScale: 0.5,\n maxQueueDepth: 32,\n },\n medium: {\n estimatedCostMs: 0.9,\n maxDispatchesPerFrame: 1,\n maxJobsPerDispatch: 32,\n cadenceDivisor: 1,\n workgroupScale: 0.75,\n maxQueueDepth: 64,\n },\n high: {\n estimatedCostMs: 1.4,\n maxDispatchesPerFrame: 1,\n maxJobsPerDispatch: 64,\n cadenceDivisor: 1,\n workgroupScale: 1,\n maxQueueDepth: 96,\n },\n }\n ),\n suggestedAllocationIds: [\"lighting.pathtracer.denoise-history\"],\n },\n },\n },\n wavefront: {\n suggestedAllocationIds: [\n \"lighting.wavefront.active-queue\",\n \"lighting.wavefront.next-queue\",\n \"lighting.wavefront.accumulation\",\n ],\n jobs: {\n accumulateTerminalRadiance: {\n domain: \"lighting\",\n importance: \"critical\",\n levels: buildWorkerBudgetLevels(\n \"lighting.wavefront.accumulateTerminalRadiance\",\n lightingWorkerQueueClass,\n {\n low: {\n estimatedCostMs: 0.7,\n maxDispatchesPerFrame: 1,\n maxJobsPerDispatch: 32,\n cadenceDivisor: 2,\n workgroupScale: 0.5,\n maxQueueDepth: 96,\n },\n medium: {\n estimatedCostMs: 1.2,\n maxDispatchesPerFrame: 1,\n maxJobsPerDispatch: 64,\n cadenceDivisor: 1,\n workgroupScale: 0.75,\n maxQueueDepth: 192,\n },\n high: {\n estimatedCostMs: 1.8,\n maxDispatchesPerFrame: 2,\n maxJobsPerDispatch: 128,\n cadenceDivisor: 1,\n workgroupScale: 1,\n maxQueueDepth: 256,\n },\n }\n ),\n suggestedAllocationIds: [\n \"lighting.wavefront.accumulation\",\n \"lighting.wavefront.active-queue\",\n ],\n },\n scatterContinuations: {\n domain: \"lighting\",\n importance: \"critical\",\n levels: buildWorkerBudgetLevels(\n \"lighting.wavefront.scatterContinuations\",\n lightingWorkerQueueClass,\n {\n low: {\n estimatedCostMs: 0.8,\n maxDispatchesPerFrame: 1,\n maxJobsPerDispatch: 32,\n cadenceDivisor: 2,\n workgroupScale: 0.5,\n maxQueueDepth: 96,\n },\n medium: {\n estimatedCostMs: 1.4,\n maxDispatchesPerFrame: 1,\n maxJobsPerDispatch: 64,\n cadenceDivisor: 1,\n workgroupScale: 0.75,\n maxQueueDepth: 192,\n },\n high: {\n estimatedCostMs: 2.1,\n maxDispatchesPerFrame: 2,\n maxJobsPerDispatch: 128,\n cadenceDivisor: 1,\n workgroupScale: 1,\n maxQueueDepth: 256,\n },\n }\n ),\n suggestedAllocationIds: [\n \"lighting.wavefront.active-queue\",\n \"lighting.wavefront.next-queue\",\n ],\n },\n },\n },\n volumetrics: {\n suggestedAllocationIds: [\n \"lighting.volumetrics.froxel-grid\",\n \"lighting.volumetrics.shadow-history\",\n ],\n jobs: {\n froxelIntegrate: {\n domain: \"volumetrics\",\n importance: \"high\",\n levels: buildWorkerBudgetLevels(\n \"lighting.volumetrics.froxelIntegrate\",\n lightingWorkerQueueClass,\n {\n low: {\n estimatedCostMs: 0.6,\n maxDispatchesPerFrame: 1,\n maxJobsPerDispatch: 32,\n cadenceDivisor: 2,\n workgroupScale: 0.5,\n maxQueueDepth: 96,\n },\n medium: {\n estimatedCostMs: 1.1,\n maxDispatchesPerFrame: 1,\n maxJobsPerDispatch: 64,\n cadenceDivisor: 1,\n workgroupScale: 0.75,\n maxQueueDepth: 192,\n },\n high: {\n estimatedCostMs: 1.7,\n maxDispatchesPerFrame: 2,\n maxJobsPerDispatch: 128,\n cadenceDivisor: 1,\n workgroupScale: 1,\n maxQueueDepth: 256,\n },\n }\n ),\n suggestedAllocationIds: [\"lighting.volumetrics.froxel-grid\"],\n },\n volumetricShadow: {\n domain: \"volumetrics\",\n importance: \"high\",\n levels: buildWorkerBudgetLevels(\n \"lighting.volumetrics.volumetricShadow\",\n lightingWorkerQueueClass,\n {\n low: {\n estimatedCostMs: 0.5,\n maxDispatchesPerFrame: 1,\n maxJobsPerDispatch: 24,\n cadenceDivisor: 2,\n workgroupScale: 0.5,\n maxQueueDepth: 64,\n },\n medium: {\n estimatedCostMs: 0.9,\n maxDispatchesPerFrame: 1,\n maxJobsPerDispatch: 48,\n cadenceDivisor: 1,\n workgroupScale: 0.75,\n maxQueueDepth: 128,\n },\n high: {\n estimatedCostMs: 1.3,\n maxDispatchesPerFrame: 1,\n maxJobsPerDispatch: 96,\n cadenceDivisor: 1,\n workgroupScale: 1,\n maxQueueDepth: 192,\n },\n }\n ),\n suggestedAllocationIds: [\"lighting.volumetrics.shadow-history\"],\n },\n },\n },\n hdri: {\n suggestedAllocationIds: [\n \"lighting.hdri.cubemap\",\n \"lighting.hdri.prefilter\",\n \"lighting.hdri.brdf-lut\",\n ],\n jobs: {\n irradianceConvolution: {\n domain: \"lighting\",\n importance: \"medium\",\n levels: buildWorkerBudgetLevels(\n \"lighting.hdri.irradianceConvolution\",\n lightingWorkerQueueClass,\n {\n low: {\n estimatedCostMs: 0.3,\n maxDispatchesPerFrame: 1,\n maxJobsPerDispatch: 8,\n cadenceDivisor: 3,\n workgroupScale: 0.5,\n maxQueueDepth: 16,\n },\n medium: {\n estimatedCostMs: 0.5,\n maxDispatchesPerFrame: 1,\n maxJobsPerDispatch: 16,\n cadenceDivisor: 2,\n workgroupScale: 0.75,\n maxQueueDepth: 32,\n },\n high: {\n estimatedCostMs: 0.8,\n maxDispatchesPerFrame: 1,\n maxJobsPerDispatch: 32,\n cadenceDivisor: 1,\n workgroupScale: 1,\n maxQueueDepth: 48,\n },\n }\n ),\n suggestedAllocationIds: [\"lighting.hdri.cubemap\"],\n },\n specularPrefilter: {\n domain: \"lighting\",\n importance: \"medium\",\n levels: buildWorkerBudgetLevels(\n \"lighting.hdri.specularPrefilter\",\n lightingWorkerQueueClass,\n {\n low: {\n estimatedCostMs: 0.4,\n maxDispatchesPerFrame: 1,\n maxJobsPerDispatch: 8,\n cadenceDivisor: 3,\n workgroupScale: 0.5,\n maxQueueDepth: 16,\n },\n medium: {\n estimatedCostMs: 0.7,\n maxDispatchesPerFrame: 1,\n maxJobsPerDispatch: 16,\n cadenceDivisor: 2,\n workgroupScale: 0.75,\n maxQueueDepth: 32,\n },\n high: {\n estimatedCostMs: 1,\n maxDispatchesPerFrame: 1,\n maxJobsPerDispatch: 32,\n cadenceDivisor: 1,\n workgroupScale: 1,\n maxQueueDepth: 48,\n },\n }\n ),\n suggestedAllocationIds: [\"lighting.hdri.prefilter\"],\n },\n brdfLut: {\n domain: \"lighting\",\n importance: \"low\",\n levels: buildWorkerBudgetLevels(\n \"lighting.hdri.brdfLut\",\n lightingWorkerQueueClass,\n {\n low: {\n estimatedCostMs: 0.2,\n maxDispatchesPerFrame: 1,\n maxJobsPerDispatch: 4,\n cadenceDivisor: 3,\n workgroupScale: 0.5,\n maxQueueDepth: 8,\n },\n medium: {\n estimatedCostMs: 0.4,\n maxDispatchesPerFrame: 1,\n maxJobsPerDispatch: 8,\n cadenceDivisor: 2,\n workgroupScale: 0.75,\n maxQueueDepth: 16,\n },\n high: {\n estimatedCostMs: 0.6,\n maxDispatchesPerFrame: 1,\n maxJobsPerDispatch: 16,\n cadenceDivisor: 1,\n workgroupScale: 1,\n maxQueueDepth: 24,\n },\n }\n ),\n suggestedAllocationIds: [\"lighting.hdri.brdf-lut\"],\n },\n },\n },\n};\n\nconst lightingWorkerDagSpecs = {\n hybrid: {\n directLighting: { priority: 4, dependencies: [] },\n screenTrace: { priority: 3, dependencies: [] },\n radianceCache: { priority: 4, dependencies: [\"directLighting\"] },\n finalGather: { priority: 2, dependencies: [\"radianceCache\", \"screenTrace\"] },\n reflectionResolve: {\n priority: 1,\n dependencies: [\"screenTrace\", \"finalGather\"],\n },\n },\n pathtracer: {\n pathTrace: { priority: 4, dependencies: [] },\n accumulate: { priority: 3, dependencies: [\"pathTrace\"] },\n denoise: { priority: 2, dependencies: [\"accumulate\"] },\n },\n wavefront: {\n accumulateTerminalRadiance: { priority: 3, dependencies: [] },\n scatterContinuations: {\n priority: 2,\n dependencies: [\"accumulateTerminalRadiance\"],\n },\n },\n volumetrics: {\n volumetricShadow: { priority: 3, dependencies: [] },\n froxelIntegrate: { priority: 2, dependencies: [\"volumetricShadow\"] },\n },\n hdri: {\n irradianceConvolution: { priority: 3, dependencies: [] },\n specularPrefilter: { priority: 3, dependencies: [] },\n brdfLut: {\n priority: 2,\n dependencies: [\"irradianceConvolution\", \"specularPrefilter\"],\n },\n },\n};\n\nfunction resolveLightingQualityDimensions(techniqueName, jobKey) {\n const key = `${techniqueName}.${jobKey}`;\n return Object.freeze(\n {\n \"hybrid.directLighting\": { shadows: 1, lightingSamples: 0.7 },\n \"hybrid.screenTrace\": { rayTracing: 1, temporalReuse: 0.4 },\n \"hybrid.radianceCache\": {\n lightingSamples: 0.8,\n updateCadence: 0.7,\n temporalReuse: 1,\n },\n \"hybrid.finalGather\": { lightingSamples: 1, rayTracing: 0.6 },\n \"hybrid.reflectionResolve\": {\n rayTracing: 0.5,\n temporalReuse: 1,\n shading: 0.3,\n },\n \"pathtracer.pathTrace\": { rayTracing: 1, lightingSamples: 1 },\n \"pathtracer.accumulate\": { temporalReuse: 1, updateCadence: 0.4 },\n \"pathtracer.denoise\": { temporalReuse: 1, shading: 0.4 },\n \"wavefront.accumulateTerminalRadiance\": {\n rayTracing: 1,\n lightingSamples: 1,\n temporalReuse: 0.4,\n },\n \"wavefront.scatterContinuations\": {\n rayTracing: 1,\n shading: 0.7,\n updateCadence: 0.5,\n },\n \"volumetrics.froxelIntegrate\": {\n lightingSamples: 0.6,\n shading: 0.4,\n updateCadence: 0.3,\n },\n \"volumetrics.volumetricShadow\": { shadows: 0.8, updateCadence: 0.5 },\n \"hdri.irradianceConvolution\": {\n lightingSamples: 0.4,\n temporalReuse: 1,\n updateCadence: 1,\n },\n \"hdri.specularPrefilter\": {\n lightingSamples: 0.5,\n temporalReuse: 1,\n updateCadence: 1,\n },\n \"hdri.brdfLut\": {\n shading: 0.4,\n temporalReuse: 1,\n updateCadence: 1,\n },\n }[key] ?? {}\n );\n}\n\nfunction resolveLightingImportanceSignals(techniqueName, jobKey) {\n const key = `${techniqueName}.${jobKey}`;\n return Object.freeze(\n {\n \"hybrid.directLighting\": { visible: true, shadowSignificance: \"high\" },\n \"hybrid.screenTrace\": { visible: true, reflectionSignificance: \"high\" },\n \"hybrid.radianceCache\": { visible: true },\n \"hybrid.finalGather\": {\n visible: true,\n shadowSignificance: \"critical\",\n reflectionSignificance: \"high\",\n },\n \"hybrid.reflectionResolve\": { visible: true, reflectionSignificance: \"high\" },\n \"pathtracer.pathTrace\": {\n visible: true,\n shadowSignificance: \"high\",\n reflectionSignificance: \"high\",\n },\n \"pathtracer.accumulate\": { visible: true },\n \"pathtracer.denoise\": { visible: true },\n \"wavefront.accumulateTerminalRadiance\": {\n visible: true,\n shadowSignificance: \"high\",\n reflectionSignificance: \"high\",\n },\n \"wavefront.scatterContinuations\": {\n visible: true,\n reflectionSignificance: \"high\",\n },\n \"volumetrics.froxelIntegrate\": { visible: true },\n \"volumetrics.volumetricShadow\": { visible: true, shadowSignificance: \"high\" },\n \"hdri.irradianceConvolution\": { visible: false },\n \"hdri.specularPrefilter\": { visible: false, reflectionSignificance: \"medium\" },\n \"hdri.brdfLut\": { visible: false },\n }[key] ?? {}\n );\n}\n\nfunction buildWorkerManifestJob(techniqueName, job) {\n const spec = lightingWorkerSpecPresets[techniqueName].jobs[job.key];\n const dag = lightingWorkerDagSpecs[techniqueName][job.key];\n const dependencies = dag.dependencies.map(\n (dependency) => `lighting.${techniqueName}.${dependency}`\n );\n\n return Object.freeze({\n key: job.key,\n label: job.label,\n worker: Object.freeze({\n jobType: job.label,\n queueClass: lightingWorkerQueueClass,\n priority: dag.priority,\n dependencies: Object.freeze(dependencies),\n schedulerMode: \"dag\",\n }),\n performance: Object.freeze({\n id: job.label,\n jobType: job.label,\n queueClass: lightingWorkerQueueClass,\n domain: spec.domain,\n authority: \"visual\",\n importance: spec.importance,\n qualityDimensions: resolveLightingQualityDimensions(techniqueName, job.key),\n importanceSignals: resolveLightingImportanceSignals(techniqueName, job.key),\n levels: spec.levels,\n }),\n debug: Object.freeze({\n owner: lightingDebugOwner,\n queueClass: lightingWorkerQueueClass,\n jobType: job.label,\n tags: Object.freeze([\n \"lighting\",\n techniqueName,\n job.key,\n spec.domain,\n ]),\n suggestedAllocationIds: Object.freeze([...spec.suggestedAllocationIds]),\n }),\n });\n}\n\nfunction buildLightingWorkerManifest(name, technique) {\n const spec = lightingWorkerSpecPresets[name];\n\n return Object.freeze({\n schemaVersion: 1,\n owner: lightingDebugOwner,\n technique: name,\n description: technique.description,\n queueClass: lightingWorkerQueueClass,\n schedulerMode: \"dag\",\n suggestedAllocationIds: Object.freeze([...spec.suggestedAllocationIds]),\n jobs: Object.freeze(\n technique.jobs.map((job) => buildWorkerManifestJob(name, job))\n ),\n });\n}\n\nexport const lightingWorkerManifests = Object.freeze(\n Object.fromEntries(\n Object.entries(lightingTechniques).map(([name, technique]) => [\n name,\n buildLightingWorkerManifest(name, technique),\n ])\n )\n);\n\nfunction getTechniqueJob(technique, key) {\n const job = technique.jobs.find((entry) => entry.key === key);\n if (!job) {\n const available = technique.jobs.map((entry) => entry.key).join(\", \");\n throw new Error(\n `Unknown job \"${key}\" for technique \"${technique.name}\". ` +\n `Available: ${available}.`\n );\n }\n return job;\n}\n\nexport function getLightingTechnique(name = defaultLightingTechnique) {\n const technique = lightingTechniques[name];\n if (!technique) {\n const available = lightingTechniqueNames.join(\", \");\n throw new Error(`Unknown lighting technique \"${name}\". Available: ${available}.`);\n }\n return technique;\n}\n\nexport function getLightingProfile(name = defaultLightingProfile) {\n const profile = lightingProfiles[name];\n if (!profile) {\n const available = lightingProfileNames.join(\", \");\n throw new Error(`Unknown lighting profile \"${name}\". Available: ${available}.`);\n }\n return profile;\n}\n\nexport function getLightingTechniqueWorkerManifest(\n name = defaultLightingTechnique\n) {\n const manifest = lightingWorkerManifests[name];\n if (!manifest) {\n const available = lightingTechniqueNames.join(\", \");\n throw new Error(\n `Unknown lighting technique \"${name}\". Available: ${available}.`\n );\n }\n return manifest;\n}\n\nexport function getLightingProfileWorkerManifest(\n name = defaultLightingProfile\n) {\n const profile = getLightingProfile(name);\n const techniques = profile.techniques.map((techniqueName) =>\n getLightingTechniqueWorkerManifest(techniqueName)\n );\n const lightingBandPlan = createLightingBandPlan({ profile: profile.name });\n\n return Object.freeze({\n schemaVersion: 1,\n owner: lightingDebugOwner,\n profile: profile.name,\n description: profile.description,\n schedulerMode: \"dag\",\n techniques: Object.freeze(techniques),\n lightingBands: lightingBandPlan.bands,\n jobs: Object.freeze(techniques.flatMap((technique) => technique.jobs)),\n });\n}\n\nconst defaultTechnique = getLightingTechnique(defaultLightingTechnique);\n\nexport const lightingPreludeWgslUrl = defaultTechnique.preludeUrl;\n\nexport const lightingJobLabels = Object.freeze(\n Object.fromEntries(defaultTechnique.jobs.map((job) => [job.key, job.label]))\n);\n\nexport const lightingJobs = defaultTechnique.jobs.map((job) => ({\n label: job.label,\n url: job.url,\n sourceName: job.sourceName,\n}));\n\nfunction assertNotHtmlWgsl(source, context) {\n const sample = source.slice(0, 200).toLowerCase();\n if (\n sample.includes(\"<!doctype\") ||\n sample.includes(\"<html\") ||\n sample.includes(\"<meta\")\n ) {\n const label = context ? ` for ${context}` : \"\";\n throw new Error(\n `Expected WGSL${label} but received HTML. Check the URL or server root.`\n );\n }\n}\n\nasync function loadWgslSource(options = {}) {\n const { wgsl, url, fetcher = globalThis.fetch, base } = options ?? {};\n if (typeof wgsl === \"string\") {\n assertNotHtmlWgsl(wgsl, \"inline WGSL\");\n return wgsl;\n }\n if (!url) {\n return null;\n }\n const resolved = url instanceof URL ? url : new URL(url, base ?? baseUrl);\n if (!fetcher || resolved.protocol === \"file:\") {\n const { readFile } = await import(\"node:fs/promises\");\n const { fileURLToPath } = await import(\"node:url\");\n const source = await readFile(fileURLToPath(resolved), \"utf8\");\n assertNotHtmlWgsl(source, resolved.href);\n return source;\n }\n const response = await fetcher(resolved);\n if (!response.ok) {\n const status = \"status\" in response ? response.status : \"unknown\";\n const statusText = \"statusText\" in response ? response.statusText : \"\";\n const detail = statusText ? `${status} ${statusText}` : `${status}`;\n throw new Error(`Failed to load WGSL (${detail})`);\n }\n const source = await response.text();\n assertNotHtmlWgsl(source, resolved.href);\n return source;\n}\n\nasync function loadTechniquePrelude(technique, fetcher) {\n const source = await loadWgslSource({ url: technique.preludeUrl, fetcher });\n if (typeof source !== \"string\") {\n throw new Error(`Failed to load ${technique.name} prelude WGSL source.`);\n }\n return source;\n}\n\nasync function loadTechniqueJob(technique, job, fetcher) {\n const source = await loadWgslSource({ url: job.url, fetcher });\n if (typeof source !== \"string\") {\n throw new Error(\n `Failed to load ${technique.name} job \"${job.key}\" WGSL source.`\n );\n }\n return source;\n}\n\nexport async function loadLightingTechniquePreludeWgsl(\n techniqueName,\n options = {}\n) {\n const { fetcher } = options ?? {};\n const technique = getLightingTechnique(techniqueName);\n return loadTechniquePrelude(technique, fetcher);\n}\n\nexport async function loadLightingTechniqueJobWgsl(\n techniqueName,\n jobKey,\n options = {}\n) {\n const { fetcher } = options ?? {};\n const technique = getLightingTechnique(techniqueName);\n const job = getTechniqueJob(technique, jobKey);\n return loadTechniqueJob(technique, job, fetcher);\n}\n\nexport async function loadLightingTechniqueJobs(techniqueName, options = {}) {\n const { fetcher } = options ?? {};\n const technique = getLightingTechnique(techniqueName);\n const preludeWgsl = await loadTechniquePrelude(technique, fetcher);\n const jobSources = await Promise.all(\n technique.jobs.map((job) => loadTechniqueJob(technique, job, fetcher))\n );\n const jobs = technique.jobs.map((job, index) => ({\n wgsl: jobSources[index],\n label: job.label,\n sourceName: job.sourceName,\n }));\n return { preludeWgsl, jobs };\n}\n\nexport async function loadLightingTechniqueWorkerBundle(\n techniqueName = defaultLightingTechnique,\n options = {}\n) {\n const technique = getLightingTechnique(techniqueName);\n const { preludeWgsl, jobs } = await loadLightingTechniqueJobs(\n technique.name,\n options\n );\n\n return {\n technique: technique.name,\n preludeWgsl,\n jobs,\n workerManifest: getLightingTechniqueWorkerManifest(technique.name),\n };\n}\n\nexport async function loadLightingPreludeWgsl(options = {}) {\n const { fetcher } = options ?? {};\n return loadTechniquePrelude(defaultTechnique, fetcher);\n}\n\nexport async function loadLightingJobs(options = {}) {\n return loadLightingTechniqueJobs(defaultLightingTechnique, options);\n}\n\nexport async function loadLightingProfile(profileName, options = {}) {\n const profile = getLightingProfile(profileName);\n const techniques = await Promise.all(\n profile.techniques.map(async (techniqueName) => {\n const { preludeWgsl, jobs } = await loadLightingTechniqueJobs(\n techniqueName,\n options\n );\n return {\n technique: techniqueName,\n preludeWgsl,\n jobs,\n };\n })\n );\n return { profile, techniques };\n}\n\nexport async function loadLightingProfileWorkerPlan(\n profileName = defaultLightingProfile,\n options = {}\n) {\n const profile = getLightingProfile(profileName);\n const techniques = await Promise.all(\n profile.techniques.map((techniqueName) =>\n loadLightingTechniqueWorkerBundle(techniqueName, options)\n )\n );\n\n return {\n profile,\n techniques,\n lightingBandPlan: createLightingBandPlan({ profile: profile.name }),\n workerManifest: getLightingProfileWorkerManifest(profile.name),\n };\n}\n"],"mappings":"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","names":["source"]}