@plasius/gpu-shared 0.1.13 → 0.1.15

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. package/CHANGELOG.md +26 -0
  2. package/README.md +70 -3
  3. package/dist/{chunk-NCPJWLX3.js → chunk-2GM64LB6.js} +1 -9
  4. package/dist/{chunk-NCPJWLX3.js.map → chunk-2GM64LB6.js.map} +1 -1
  5. package/dist/chunk-6SOHFUOE.js +403 -0
  6. package/dist/chunk-6SOHFUOE.js.map +1 -0
  7. package/dist/{chunk-DABW627O.js → chunk-CH3ZS5TQ.js} +7 -1
  8. package/dist/chunk-CH3ZS5TQ.js.map +1 -0
  9. package/dist/chunk-DGUM43GV.js +11 -0
  10. package/dist/{chunk-DQX4DXBR.js → chunk-QVNRTWHB.js} +82 -6
  11. package/dist/chunk-QVNRTWHB.js.map +1 -0
  12. package/dist/dist-B5R2GZQR.js +1433 -0
  13. package/dist/dist-B5R2GZQR.js.map +1 -0
  14. package/dist/gltf-loader-B6VOWGBV.js +9 -0
  15. package/dist/index.cjs +2408 -5913
  16. package/dist/index.cjs.map +1 -1
  17. package/dist/index.js +55 -5
  18. package/dist/index.js.map +1 -1
  19. package/dist/product-studio-runtime-BYVBUWIN.js +12 -0
  20. package/dist/product-studio-runtime-BYVBUWIN.js.map +1 -0
  21. package/dist/showcase-inline-assets-QRQKXGVX.js +8 -0
  22. package/dist/showcase-inline-assets-QRQKXGVX.js.map +1 -0
  23. package/dist/showcase-runtime-M6TEUYOG.js +3786 -0
  24. package/dist/showcase-runtime-M6TEUYOG.js.map +1 -0
  25. package/package.json +7 -10
  26. package/src/feature-flags.js +1 -0
  27. package/src/gltf-loader.js +14 -2
  28. package/src/index.d.ts +73 -1
  29. package/src/index.js +67 -0
  30. package/src/product-studio-runtime.js +466 -0
  31. package/src/showcase-runtime.js +875 -72
  32. package/dist/chunk-2FIFSBB4.js +0 -74
  33. package/dist/chunk-2FIFSBB4.js.map +0 -1
  34. package/dist/chunk-DABW627O.js.map +0 -1
  35. package/dist/chunk-DQX4DXBR.js.map +0 -1
  36. package/dist/gltf-loader-WAM23F37.js +0 -9
  37. package/dist/showcase-inline-assets-B7U7VX5H.js +0 -7
  38. package/dist/showcase-runtime-PN7N3FZY.js +0 -9164
  39. package/dist/showcase-runtime-PN7N3FZY.js.map +0 -1
  40. /package/dist/{gltf-loader-WAM23F37.js.map → chunk-DGUM43GV.js.map} +0 -0
  41. /package/dist/{showcase-inline-assets-B7U7VX5H.js.map → gltf-loader-B6VOWGBV.js.map} +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/showcase-runtime.js"],"sourcesContent":["import { resolveShowcaseAssetUrl } from \"./asset-url.js\";\nimport { loadGltfModel } from \"./gltf-loader.js\";\nimport { GPU_SHOWCASE_REALISTIC_MODELS_FEATURE } from \"./feature-flags.js\";\nimport {\n createGpuSharedTranslator,\n gpuSharedTranslationKeys,\n} from \"./i18n.js\";\n\nconst STYLE_ID = \"plasius-shared-3d-showcase-style\";\nconst ROOT_CLASS = \"plasius-showcase-root\";\nconst CAPTURE_CLASS = \"plasius-showcase-root--capture\";\nconst DEFAULT_CANVAS_WIDTH = 1280;\nconst DEFAULT_CANVAS_HEIGHT = 720;\nconst CAPTURE_CANVAS_PIXEL_BUDGET = 1920 * 1080;\nconst SHIP_SCALE = 1.1;\nconst HARBOR_BOUNDS = Object.freeze({\n minX: -11.2,\n maxX: 11.2,\n minZ: 1.8,\n maxZ: 17.2,\n});\nconst CAMERA_PRESETS = Object.freeze({\n integrated: Object.freeze({ yaw: -0.55, pitch: 0.34, distance: 27, target: [0, 2.2, 0] }),\n lighting: Object.freeze({ yaw: -0.28, pitch: 0.28, distance: 23, target: [0, 2.8, 0] }),\n cloth: Object.freeze({ yaw: -1.1, pitch: 0.25, distance: 15, target: [-8.4, 5.3, -1.5] }),\n fluid: Object.freeze({ yaw: -0.4, pitch: 0.18, distance: 18, target: [0, 1.2, 6] }),\n physics: Object.freeze({ yaw: -0.12, pitch: 0.27, distance: 16, target: [0, 1.8, 6.8] }),\n performance: Object.freeze({ yaw: -0.65, pitch: 0.36, distance: 24, target: [0, 2.2, 0] }),\n debug: Object.freeze({ yaw: -0.7, pitch: 0.32, distance: 24, target: [0, 2.2, 0] }),\n});\n\nconst FALLBACK_LIGHTING_DISTANCE_BANDS = Object.freeze([\n Object.freeze({\n band: \"near\",\n primaryShadowSource: \"ray-traced-primary\",\n rtParticipation: Object.freeze({\n reflections: \"full\",\n globalIllumination: \"high\",\n directShadows: \"premium\",\n }),\n updateCadenceDivisor: 1,\n }),\n Object.freeze({\n band: \"mid\",\n primaryShadowSource: \"ray-traced-secondary\",\n rtParticipation: Object.freeze({\n reflections: \"medium\",\n globalIllumination: \"medium\",\n directShadows: \"selective\",\n }),\n updateCadenceDivisor: 2,\n }),\n Object.freeze({\n band: \"far\",\n primaryShadowSource: \"baked\",\n rtParticipation: Object.freeze({\n reflections: \"low\",\n globalIllumination: \"low\",\n directShadows: \"none\",\n }),\n updateCadenceDivisor: 4,\n }),\n Object.freeze({\n band: \"horizon\",\n primaryShadowSource: \"impression\",\n rtParticipation: Object.freeze({\n reflections: \"off\",\n globalIllumination: \"off\",\n directShadows: \"none\",\n }),\n updateCadenceDivisor: 8,\n }),\n]);\nconst FALLBACK_LIGHTING_PROFILE = \"cinematic\";\nconst FALLBACK_PHYSICS_PROFILE = \"cinematic\";\nconst FALLBACK_PERFORMANCE_LEVELS = Object.freeze({\n fluid: Object.freeze([\n Object.freeze({\n id: \"low\",\n config: Object.freeze({ nearResolution: 10, midResolution: 6, splashCount: 10 }),\n estimatedCostMs: 0.8,\n }),\n Object.freeze({\n id: \"medium\",\n config: Object.freeze({ nearResolution: 16, midResolution: 8, splashCount: 18 }),\n estimatedCostMs: 1.4,\n }),\n Object.freeze({\n id: \"high\",\n config: Object.freeze({ nearResolution: 24, midResolution: 12, splashCount: 28 }),\n estimatedCostMs: 2.4,\n }),\n ]),\n cloth: Object.freeze([\n Object.freeze({\n id: \"low\",\n config: Object.freeze({ cols: 10, rows: 7 }),\n estimatedCostMs: 0.7,\n }),\n Object.freeze({\n id: \"medium\",\n config: Object.freeze({ cols: 16, rows: 11 }),\n estimatedCostMs: 1.3,\n }),\n Object.freeze({\n id: \"high\",\n config: Object.freeze({ cols: 24, rows: 16 }),\n estimatedCostMs: 2.1,\n }),\n ]),\n lighting: Object.freeze([\n Object.freeze({\n id: \"low\",\n config: Object.freeze({ shadowStrength: 0.18, reflectionStrength: 0.08 }),\n estimatedCostMs: 0.5,\n }),\n Object.freeze({\n id: \"medium\",\n config: Object.freeze({ shadowStrength: 0.34, reflectionStrength: 0.16 }),\n estimatedCostMs: 1.0,\n }),\n Object.freeze({\n id: \"high\",\n config: Object.freeze({ shadowStrength: 0.5, reflectionStrength: 0.24 }),\n estimatedCostMs: 1.8,\n }),\n ]),\n});\n\nfunction createFallbackClothFeatureModule() {\n const fallback = createFallbackClothFeatureAdapters();\n return {\n clothGarmentKinds: fallback.garmentKinds,\n clothProfileNames: fallback.profileNames,\n createClothRepresentationPlan: fallback.createPlan,\n selectClothRepresentationBand: fallback.selectBand,\n };\n}\n\nfunction createFallbackFluidFeatureModule() {\n const fallback = createFallbackFluidFeatureAdapters();\n return {\n fluidBodyKinds: fallback.bodyKinds,\n fluidProfileNames: fallback.profileNames,\n createFluidContinuityEnvelope: fallback.createContinuityEnvelope,\n createFluidRepresentationPlan: fallback.createPlan,\n selectFluidRepresentationBand: fallback.selectBand,\n };\n}\n\nfunction createFallbackLightingFeatureModule() {\n return {\n createLightingBandPlan({ profile = FALLBACK_LIGHTING_PROFILE, importance = \"high\" } = {}) {\n const defaultPlan = {\n profile,\n importance,\n bands: FALLBACK_LIGHTING_DISTANCE_BANDS,\n };\n return defaultPlan;\n },\n defaultLightingProfile: FALLBACK_LIGHTING_PROFILE,\n getLightingProfile(profile = FALLBACK_LIGHTING_PROFILE) {\n return {\n name: profile,\n bands: FALLBACK_LIGHTING_DISTANCE_BANDS,\n };\n },\n lightingDistanceBands: FALLBACK_LIGHTING_DISTANCE_BANDS,\n };\n}\n\nfunction createFallbackPerformanceQualityState(levels = [], initialLevel = \"high\", profile = \"\") {\n const fallbackLevels = levels.length ? levels : FALLBACK_PERFORMANCE_LEVELS[profile] ?? [];\n const resolvedLevels = fallbackLevels.map((entry) => ({\n id: String(entry?.id ?? \"high\"),\n config: entry?.config ?? {},\n estimatedCostMs: Number.isFinite(Number(entry?.estimatedCostMs))\n ? Number(entry.estimatedCostMs)\n : 1.0,\n }));\n if (resolvedLevels.length === 0) {\n return {\n module: {\n id: \"high\",\n config: Object.freeze({}),\n estimatedCostMs: 1.0,\n },\n getSnapshot() {\n return {\n currentLevel: {\n id: \"high\",\n config: Object.freeze({}),\n estimatedCostMs: 1.0,\n },\n };\n },\n id: \"high\",\n };\n }\n const initial = resolvedLevels.find((entry) => entry.id === initialLevel) ?? resolvedLevels[0];\n return {\n id: initial.id,\n getSnapshot() {\n return {\n currentLevel: {\n id: initial.id,\n config: initial.config,\n estimatedCostMs: initial.estimatedCostMs,\n },\n };\n },\n };\n}\n\nfunction createFallbackPerformanceFeatureModule() {\n const moduleIds = new Set([\"fluid-detail\", \"cloth-detail\", \"lighting-detail\"]);\n\n return {\n createDeviceProfile(profile = {}) {\n return {\n deviceClass: \"desktop\",\n mode: \"flat\",\n refreshRateHz: Number.isFinite(profile?.refreshRateHz)\n ? Number(profile.refreshRateHz)\n : 60,\n supportedFrameRates: Array.isArray(profile?.supportedFrameRates)\n ? profile.supportedFrameRates\n : [60, 90],\n supportsWebGpu: true,\n };\n },\n createQualityLadderAdapter({ id, domain, levels, initialLevel }) {\n return {\n id: String(id ?? \"\"),\n domain,\n ...createFallbackPerformanceQualityState(\n domain === \"fluid\" ? FALLBACK_PERFORMANCE_LEVELS.fluid : domain === \"cloth\" ? FALLBACK_PERFORMANCE_LEVELS.cloth : FALLBACK_PERFORMANCE_LEVELS.lighting,\n initialLevel,\n domain\n ),\n };\n },\n createGpuPerformanceGovernor({ device, modules = [], adaptation = {} } = {}) {\n let pressureLevel = \"stable\";\n let frameSamples = 0;\n let averageMs = 16.67;\n\n const clamp = (next = 16.67) => (Number.isFinite(next) ? Math.max(1, next) : 16.67);\n const target = Object.freeze({\n targetFrameTimeMs: 16.67,\n downgradeFrameTimeMs: clamp(adaptation?.degradeThresholdMs ?? 20),\n upgradeFrameTimeMs: clamp(adaptation?.upgradeThresholdMs ?? 14),\n });\n\n return {\n recordFrame({ frameTimeMs = averageMs } = {}) {\n const sample = Number.isFinite(Number(frameTimeMs)) ? Number(frameTimeMs) : averageMs;\n frameSamples += 1;\n averageMs = clamp((averageMs * (frameSamples - 1) + sample) / frameSamples);\n const fps = 1000 / averageMs;\n\n pressureLevel =\n sample > target.downgradeFrameTimeMs\n ? \"degrade\"\n : pressureLevel === \"degrade\" && sample <= target.upgradeFrameTimeMs\n ? \"stable\"\n : pressureLevel;\n\n return {\n pressureLevel,\n metrics: {\n fps,\n averageFrameTimeMs: averageMs,\n },\n adjustments: pressureLevel === \"degrade\" ? [{ type: \"capability-step-down\" }] : [],\n };\n },\n getTarget() {\n return target;\n },\n getState() {\n return {\n modules: modules\n .filter((entry) => entry != null && typeof entry.id === \"string\" && moduleIds.has(entry.id))\n .map((entry) => ({\n isAtMaximum: pressureLevel === \"stable\",\n })),\n };\n },\n };\n },\n };\n}\n\nfunction createFallbackDebugFeatureModule() {\n let queueSamples = 0;\n let queuePeakDepth = 0;\n let readyLaneSamples = 0;\n let readyLanePeakDepth = 0;\n let dispatchSamples = 0;\n let dispatchDurationTotal = 0;\n let dependencyUnlockSamples = 0;\n let dependencyUnlockCount = 0;\n let pipelineSamples = 0;\n let pipelineAgeTotal = 0;\n let frameSamples = 0;\n let frameTimeTotal = 0;\n let gpuBusyTotal = 0;\n let frameDroppedSamples = 0;\n let memoryTotalBytes = 0;\n\n function ensureNumber(value, fallback = 0) {\n const asNumber = Number(value);\n return Number.isFinite(asNumber) ? asNumber : fallback;\n }\n\n function createDebugSession({ adapter } = {}) {\n const memoryHint = Number.isFinite(Number(adapter?.memoryCapacityHintBytes))\n ? Number(adapter.memoryCapacityHintBytes)\n : 0;\n\n memoryTotalBytes = Math.max(0, memoryHint);\n\n return {\n trackAllocation({ sizeBytes = 0 } = {}) {\n memoryTotalBytes += ensureNumber(sizeBytes);\n },\n recordQueue({ depth = 0 } = {}) {\n queueSamples += 1;\n queuePeakDepth = Math.max(queuePeakDepth, ensureNumber(depth, 0));\n },\n recordReadyLane({ depth = 0 } = {}) {\n readyLaneSamples += 1;\n readyLanePeakDepth = Math.max(readyLanePeakDepth, ensureNumber(depth, 0));\n },\n recordDispatch({ durationMs = 0 } = {}) {\n dispatchSamples += 1;\n dispatchDurationTotal += ensureNumber(durationMs);\n },\n recordDependencyUnlock({ unlockCount = 0 } = {}) {\n dependencyUnlockSamples += 1;\n dependencyUnlockCount += ensureNumber(unlockCount);\n },\n recordPipelinePhase({ snapshotAgeMs = 0 } = {}) {\n pipelineSamples += 1;\n pipelineAgeTotal += ensureNumber(snapshotAgeMs);\n },\n recordFrame({\n frameTimeMs = 16.67,\n targetFrameTimeMs = 16.67,\n gpuBusyMs = 0,\n dropped = false,\n } = {}) {\n frameSamples += 1;\n frameTimeTotal += ensureNumber(frameTimeMs);\n gpuBusyTotal += ensureNumber(gpuBusyMs);\n frameDroppedSamples += dropped === true ? 1 : 0;\n targetFrameTimeMs;\n },\n getSnapshot() {\n const queueAverageDepth = queueSamples > 0 ? queuePeakDepth / queueSamples : 0;\n return {\n frames: {\n sampleCount: frameSamples,\n averageFrameTimeMs: frameSamples > 0 ? frameTimeTotal / frameSamples : 0,\n averageGpuBusyMs: frameSamples > 0 ? gpuBusyTotal / frameSamples : 0,\n droppedCount: frameDroppedSamples,\n },\n queues: {\n sampleCount: queueSamples,\n peakDepth: queuePeakDepth,\n averageDepth: queueAverageDepth,\n },\n dispatch: {\n sampleCount: dispatchSamples,\n averageDurationMs: dispatchSamples > 0 ? dispatchDurationTotal / dispatchSamples : 0,\n },\n dag: {\n peakReadyLaneDepth: readyLanePeakDepth,\n totalUnlockCount: dependencyUnlockCount,\n unlockSamples: dependencyUnlockSamples,\n },\n pipeline: {\n sampleCount: pipelineSamples,\n averageSnapshotAgeMs: pipelineSamples > 0 ? pipelineAgeTotal / pipelineSamples : 0,\n },\n memory: {\n totalTrackedBytes: memoryTotalBytes,\n },\n };\n },\n };\n }\n\n return {\n createGpuDebugSession({ adapter } = {}) {\n return createDebugSession({ adapter });\n },\n createSession({ adapter } = {}) {\n return createDebugSession({ adapter });\n },\n };\n}\n\nfunction createFallbackPhysicsFeatureModule() {\n const fallbackPlan = Object.freeze({\n snapshotStageId: \"baseline\",\n stageOrder: Object.freeze([\"authoritative\"]),\n secondarySimulationStageIds: Object.freeze([\"visual\"]),\n });\n return {\n createPhysicsSimulationPlan() {\n return {\n snapshotStageId: \"baseline\",\n stageOrder: fallbackPlan.stageOrder,\n secondarySimulationStageIds: fallbackPlan.secondarySimulationStageIds,\n };\n },\n createPhysicsWorldSnapshot(input = {}) {\n return {\n stage: \"baseline\",\n stability: \"stable\",\n stageId: fallbackPlan.snapshotStageId,\n metadata: input.metadata ?? {},\n bodyCount: input.bodyCount ?? 0,\n dynamicBodyCount: input.dynamicBodyCount ?? 0,\n contactCount: input.contactCount ?? 0,\n snapshotStageId: fallbackPlan.snapshotStageId,\n };\n },\n defaultPhysicsWorkerProfile: FALLBACK_PHYSICS_PROFILE,\n getPhysicsWorkerManifest() {\n return {\n jobs: [\n Object.freeze({\n worker: Object.freeze({ authority: \"authoritative\", jobType: \"simulate\" }),\n }),\n ],\n suggestedAllocationIds: Object.freeze([\"physics-workspace\"]),\n };\n },\n };\n}\n\nconst SHOWCASE_FEATURE_LOADERS = Object.freeze({\n cloth: () => Promise.resolve(createFallbackClothFeatureModule()),\n fluid: () => Promise.resolve(createFallbackFluidFeatureModule()),\n lighting: () => Promise.resolve(createFallbackLightingFeatureModule()),\n performance: () => Promise.resolve(createFallbackPerformanceFeatureModule()),\n debug: () => Promise.resolve(createFallbackDebugFeatureModule()),\n physics: () => Promise.resolve(createFallbackPhysicsFeatureModule()),\n});\n\nconst DEFAULT_FLUID_BAND_THRESHOLDS = Object.freeze({\n near: Object.freeze({ minDistance: 0, maxDistance: 22 }),\n mid: Object.freeze({ minDistance: 22, maxDistance: 90 }),\n far: Object.freeze({ minDistance: 90, maxDistance: 260 }),\n horizon: Object.freeze({ minDistance: 260, maxDistance: Number.POSITIVE_INFINITY }),\n});\n\nconst DEFAULT_CLOTH_BAND_THRESHOLDS = Object.freeze({\n near: Object.freeze({ minDistance: 0, maxDistance: 24 }),\n mid: Object.freeze({ minDistance: 24, maxDistance: 86 }),\n far: Object.freeze({ minDistance: 86, maxDistance: 190 }),\n horizon: Object.freeze({ minDistance: 190, maxDistance: Number.POSITIVE_INFINITY }),\n});\n\nfunction resolveFluidBandSelection(distance, thresholds = DEFAULT_FLUID_BAND_THRESHOLDS) {\n if (!Number.isFinite(distance)) {\n return \"horizon\";\n }\n if (distance <= (thresholds.near?.maxDistance ?? DEFAULT_FLUID_BAND_THRESHOLDS.near.maxDistance)) {\n return \"near\";\n }\n if (distance <= (thresholds.mid?.maxDistance ?? DEFAULT_FLUID_BAND_THRESHOLDS.mid.maxDistance)) {\n return \"mid\";\n }\n if (distance <= (thresholds.far?.maxDistance ?? DEFAULT_FLUID_BAND_THRESHOLDS.far.maxDistance)) {\n return \"far\";\n }\n return \"horizon\";\n}\n\nfunction createFallbackFluidFeatureAdapters() {\n const defaultContinuityBand = Object.freeze({\n amplitudeFloor: 0.22,\n frequencyFloor: 0.05,\n blendWindowMeters: 14,\n retainFoamHistory: true,\n retainDirectionality: true,\n });\n return {\n bodyKinds: Object.freeze([\"ocean\"]),\n profileNames: Object.freeze([\"cinematic\"]),\n createContinuityEnvelope() {\n return Object.freeze({\n bands: Object.freeze({\n near: defaultContinuityBand,\n mid: Object.freeze({\n ...defaultContinuityBand,\n blendWindowMeters: 22,\n amplitudeFloor: 0.17,\n }),\n far: Object.freeze({\n ...defaultContinuityBand,\n blendWindowMeters: 34,\n amplitudeFloor: 0.12,\n }),\n horizon: Object.freeze({\n ...defaultContinuityBand,\n blendWindowMeters: 42,\n amplitudeFloor: 0.09,\n }),\n }),\n });\n },\n createPlan({ fluidBodyId = \"harbor\", kind = \"ocean\", profile = \"cinematic\" }) {\n return Object.freeze({\n fluidBodyId,\n kind,\n profile,\n thresholds: DEFAULT_FLUID_BAND_THRESHOLDS,\n representations: Object.freeze([\n Object.freeze({\n band: \"near\",\n output: \"raster\",\n rtParticipation: \"full\",\n shading: Object.freeze({ refraction: 0.14, reflectionMode: \"full\", caustics: true }),\n }),\n Object.freeze({\n band: \"mid\",\n output: \"raster\",\n rtParticipation: \"reduced\",\n shading: Object.freeze({ reflectionMode: \"partial\" }),\n }),\n Object.freeze({\n band: \"far\",\n output: \"raster\",\n rtParticipation: \"low\",\n shading: Object.freeze({ reflectionMode: \"partial\" }),\n }),\n Object.freeze({\n band: \"horizon\",\n output: \"coarse\",\n rtParticipation: \"off\",\n shading: Object.freeze({ reflectionMode: \"reduced\" }),\n }),\n ]),\n });\n },\n selectBand(distance, thresholds = DEFAULT_FLUID_BAND_THRESHOLDS) {\n return resolveFluidBandSelection(distance, thresholds);\n },\n };\n}\n\nfunction createFallbackClothFeatureAdapters() {\n const defaultContinuity = Object.freeze({\n amplitudeFloor: 0.22,\n wrinkleFloor: 0.32,\n damping: 0.58,\n creaseBias: 0.14,\n });\n return {\n garmentKinds: Object.freeze([\"flag\"]),\n profileNames: Object.freeze([\"cinematic\"]),\n createPlan() {\n return Object.freeze({\n thresholds: DEFAULT_CLOTH_BAND_THRESHOLDS,\n representations: Object.freeze([\n Object.freeze({\n band: \"near\",\n continuity: defaultContinuity,\n }),\n Object.freeze({\n band: \"mid\",\n continuity: defaultContinuity,\n }),\n Object.freeze({\n band: \"far\",\n continuity: defaultContinuity,\n }),\n Object.freeze({\n band: \"horizon\",\n continuity: defaultContinuity,\n }),\n ]),\n });\n },\n selectBand(distance, thresholds = DEFAULT_CLOTH_BAND_THRESHOLDS) {\n if (!Number.isFinite(distance)) {\n return \"horizon\";\n }\n if (distance <= (thresholds.near?.maxDistance ?? DEFAULT_CLOTH_BAND_THRESHOLDS.near.maxDistance)) {\n return \"near\";\n }\n if (distance <= (thresholds.mid?.maxDistance ?? DEFAULT_CLOTH_BAND_THRESHOLDS.mid.maxDistance)) {\n return \"mid\";\n }\n if (distance <= (thresholds.far?.maxDistance ?? DEFAULT_CLOTH_BAND_THRESHOLDS.far.maxDistance)) {\n return \"far\";\n }\n return \"horizon\";\n },\n };\n}\n\nfunction normalizeClothFeatureAdapters(clothFeatures) {\n const fallback = createFallbackClothFeatureAdapters();\n if (clothFeatures == null || typeof clothFeatures !== \"object\") {\n return fallback;\n }\n\n return {\n garmentKinds:\n Array.isArray(clothFeatures.garmentKinds) && clothFeatures.garmentKinds.length > 0\n ? clothFeatures.garmentKinds\n : fallback.garmentKinds,\n profileNames:\n Array.isArray(clothFeatures.profileNames) && clothFeatures.profileNames.length > 0\n ? clothFeatures.profileNames\n : fallback.profileNames,\n createPlan: assertRequiredFunction(clothFeatures, \"cloth\", \"createPlan\"),\n selectBand: assertRequiredFunction(clothFeatures, \"cloth\", \"selectBand\"),\n };\n}\n\nfunction normalizeFluidFeatureAdapters(fluidFeatures) {\n const fallback = createFallbackFluidFeatureAdapters();\n if (fluidFeatures == null || typeof fluidFeatures !== \"object\") {\n return fallback;\n }\n\n return {\n bodyKinds:\n Array.isArray(fluidFeatures.bodyKinds) && fluidFeatures.bodyKinds.length > 0\n ? fluidFeatures.bodyKinds\n : fallback.bodyKinds,\n profileNames:\n Array.isArray(fluidFeatures.profileNames) && fluidFeatures.profileNames.length > 0\n ? fluidFeatures.profileNames\n : fallback.profileNames,\n createContinuityEnvelope: assertRequiredFunction(\n fluidFeatures,\n \"fluid\",\n \"createContinuityEnvelope\"\n ),\n createPlan: assertRequiredFunction(fluidFeatures, \"fluid\", \"createPlan\"),\n selectBand: assertRequiredFunction(fluidFeatures, \"fluid\", \"selectBand\"),\n };\n}\n\nfunction assertRequiredFunction(module, featureLabel, exportName) {\n const value = module?.[exportName];\n if (typeof value !== \"function\") {\n throw new Error(\n `Showcase ${featureLabel} feature package must export \"${exportName}\" as a function.`\n );\n }\n return value;\n}\n\nfunction assertRequiredArray(module, featureLabel, exportName) {\n const value = module?.[exportName];\n if (!Array.isArray(value)) {\n throw new Error(\n `Showcase ${featureLabel} feature package must export \"${exportName}\" as an array.`\n );\n }\n return value;\n}\n\nasync function loadShowcaseFeatureModule(featureLabel, loader) {\n try {\n const module = await loader();\n if (module == null || typeof module !== \"object\") {\n throw new Error(\"module is missing or not an object.\");\n }\n return module;\n } catch (error) {\n const message = error?.message ?? String(error);\n throw new Error(`Unable to load showcase ${featureLabel} feature package: ${message}`, {\n cause: error,\n });\n }\n}\n\nfunction resolveShowcaseFeatureLoaders(options = {}) {\n const overrides = options.__showcaseFeatureLoaders;\n return {\n cloth:\n typeof overrides?.cloth === \"function\"\n ? overrides.cloth\n : SHOWCASE_FEATURE_LOADERS.cloth,\n fluid:\n typeof overrides?.fluid === \"function\"\n ? overrides.fluid\n : SHOWCASE_FEATURE_LOADERS.fluid,\n lighting:\n typeof overrides?.lighting === \"function\"\n ? overrides.lighting\n : SHOWCASE_FEATURE_LOADERS.lighting,\n performance:\n typeof overrides?.performance === \"function\"\n ? overrides.performance\n : SHOWCASE_FEATURE_LOADERS.performance,\n debug:\n typeof overrides?.debug === \"function\"\n ? overrides.debug\n : SHOWCASE_FEATURE_LOADERS.debug,\n physics:\n typeof overrides?.physics === \"function\"\n ? overrides.physics\n : SHOWCASE_FEATURE_LOADERS.physics,\n };\n}\n\nasync function resolveShowcaseFeatureAdapters(options = {}) {\n const loaders = resolveShowcaseFeatureLoaders(options);\n const [\n clothModule,\n fluidModule,\n lightingModule,\n performanceModule,\n debugModule,\n physicsModule,\n ] = await Promise.all([\n loadShowcaseFeatureModule(\"cloth\", loaders.cloth),\n loadShowcaseFeatureModule(\"fluid\", loaders.fluid),\n loadShowcaseFeatureModule(\"lighting\", loaders.lighting),\n loadShowcaseFeatureModule(\"performance\", loaders.performance),\n loadShowcaseFeatureModule(\"debug\", loaders.debug),\n loadShowcaseFeatureModule(\"physics\", loaders.physics),\n ]);\n\n return {\n cloth: {\n garmentKinds: assertRequiredArray(clothModule, \"cloth\", \"clothGarmentKinds\"),\n profileNames: assertRequiredArray(clothModule, \"cloth\", \"clothProfileNames\"),\n createPlan: assertRequiredFunction(clothModule, \"cloth\", \"createClothRepresentationPlan\"),\n selectBand: assertRequiredFunction(clothModule, \"cloth\", \"selectClothRepresentationBand\"),\n },\n fluid: {\n bodyKinds: assertRequiredArray(fluidModule, \"fluid\", \"fluidBodyKinds\"),\n profileNames: assertRequiredArray(fluidModule, \"fluid\", \"fluidProfileNames\"),\n createContinuityEnvelope: assertRequiredFunction(\n fluidModule,\n \"fluid\",\n \"createFluidContinuityEnvelope\"\n ),\n createPlan: assertRequiredFunction(fluidModule, \"fluid\", \"createFluidRepresentationPlan\"),\n selectBand: assertRequiredFunction(fluidModule, \"fluid\", \"selectFluidRepresentationBand\"),\n },\n lighting: {\n createBandPlan: assertRequiredFunction(lightingModule, \"lighting\", \"createLightingBandPlan\"),\n defaultProfile: lightingModule.defaultLightingProfile,\n getProfile: assertRequiredFunction(lightingModule, \"lighting\", \"getLightingProfile\"),\n distanceBands: assertRequiredArray(lightingModule, \"lighting\", \"lightingDistanceBands\"),\n },\n performance: {\n createDeviceProfile: assertRequiredFunction(\n performanceModule,\n \"performance\",\n \"createDeviceProfile\"\n ),\n createGovernor: assertRequiredFunction(\n performanceModule,\n \"performance\",\n \"createGpuPerformanceGovernor\"\n ),\n createQualityAdapter: assertRequiredFunction(\n performanceModule,\n \"performance\",\n \"createQualityLadderAdapter\"\n ),\n },\n debug: {\n createSession: assertRequiredFunction(debugModule, \"debug\", \"createGpuDebugSession\"),\n },\n physics: {\n createSimulationPlan: assertRequiredFunction(\n physicsModule,\n \"physics\",\n \"createPhysicsSimulationPlan\"\n ),\n createWorldSnapshot: assertRequiredFunction(\n physicsModule,\n \"physics\",\n \"createPhysicsWorldSnapshot\"\n ),\n defaultProfile: physicsModule.defaultPhysicsWorkerProfile,\n getManifest: assertRequiredFunction(physicsModule, \"physics\", \"getPhysicsWorkerManifest\"),\n },\n };\n}\n\nexport const showcaseFocusModes = Object.freeze(Object.keys(CAMERA_PRESETS));\n\nconst FOCUS_MODE_TRANSLATION_KEYS = Object.freeze({\n integrated: gpuSharedTranslationKeys.focusIntegrated,\n lighting: gpuSharedTranslationKeys.focusLighting,\n cloth: gpuSharedTranslationKeys.focusCloth,\n fluid: gpuSharedTranslationKeys.focusFluid,\n physics: gpuSharedTranslationKeys.focusPhysics,\n performance: gpuSharedTranslationKeys.focusPerformance,\n debug: gpuSharedTranslationKeys.focusDebug,\n});\n\nconst SCENE_NOTE_KEYS = Object.freeze([\n gpuSharedTranslationKeys.noteAssetLoading,\n gpuSharedTranslationKeys.noteMoonlight,\n gpuSharedTranslationKeys.noteContinuity,\n gpuSharedTranslationKeys.notePerformance,\n]);\n\nconst PHYSICS_SCENE_NOTE_KEYS = Object.freeze([\n gpuSharedTranslationKeys.notePhysicsSnapshots,\n gpuSharedTranslationKeys.notePhysicsCollisions,\n gpuSharedTranslationKeys.notePhysicsLighting,\n]);\n\nconst LEGACY_HARBOR_LAYOUT = Object.freeze([\n Object.freeze({\n position: Object.freeze({ x: -8.2, y: 1.1, z: -0.9 }),\n rotationY: -0.16,\n scale: 5.4,\n color: { r: 0.32, g: 0.27, b: 0.23, a: 1 },\n accent: 0.06,\n }),\n Object.freeze({\n position: Object.freeze({ x: -5.7, y: 0.45, z: 1.4 }),\n rotationY: -0.08,\n scale: { x: 6.8, y: 0.3, z: 2.1 },\n color: { r: 0.31, g: 0.31, b: 0.34, a: 1 },\n accent: 0.04,\n }),\n Object.freeze({\n position: Object.freeze({ x: -10.4, y: 0.28, z: 0.8 }),\n rotationY: 0.22,\n scale: { x: 1.2, y: 0.9, z: 1.2 },\n color: { r: 0.31, g: 0.35, b: 0.39, a: 1 },\n accent: 0.02,\n }),\n]);\n\nconst SHOWCASE_ENVIRONMENT_LAYOUT = Object.freeze([\n Object.freeze({\n assetKey: \"harbor-dock\",\n position: Object.freeze({ x: -4.6, y: 0.16, z: 0.7 }),\n rotationY: -0.08,\n scale: 0.84,\n accent: 0.04,\n }),\n Object.freeze({\n assetKey: \"lighthouse\",\n position: Object.freeze({ x: -9.8, y: 0, z: -0.58 }),\n rotationY: 0.12,\n scale: 0.56,\n accent: 0.08,\n }),\n]);\n\nconst SHIP_LANTERNS = Object.freeze([\n Object.freeze({ x: 0.94, y: 1.54, z: 2.52, glow: 1 }),\n Object.freeze({ x: -0.9, y: 1.58, z: 2.44, glow: 0.92 }),\n Object.freeze({ x: 0.62, y: 1.42, z: -2.18, glow: 0.88 }),\n Object.freeze({ x: -0.58, y: 1.46, z: -2.04, glow: 0.84 }),\n]);\nconst CUTTER_LANTERNS = Object.freeze([\n Object.freeze({ x: 0.42, y: 1.04, z: 1.18, glow: 0.94 }),\n Object.freeze({ x: -0.42, y: 1.04, z: 1.12, glow: 0.88 }),\n]);\n\nconst HARBOR_TORCHES = Object.freeze([\n Object.freeze({ x: -5.2, y: 1.25, z: 1.36, glow: 1.1 }),\n Object.freeze({ x: -8.6, y: 2.48, z: -0.72, glow: 1 }),\n Object.freeze({ x: -10.4, y: 1.28, z: 0.82, glow: 0.92 }),\n]);\nconst FLAG_LAYOUT = Object.freeze({\n origin: Object.freeze({ x: -3.5, y: 5.9, z: 2.4 }),\n width: 4.8,\n height: 2.7,\n mastOffsetX: 1.8,\n});\nfunction injectStyles() {\n if (document.getElementById(STYLE_ID)) {\n return;\n }\n\n const style = document.createElement(\"style\");\n style.id = STYLE_ID;\n style.textContent = `\n .${ROOT_CLASS} {\n color-scheme: dark;\n --plasius-paper: #081321;\n --plasius-ink: #edf4ff;\n --plasius-muted: #b6c5dd;\n --plasius-accent: #f3b16a;\n --plasius-panel: rgba(8, 19, 33, 0.72);\n --plasius-border: rgba(159, 185, 223, 0.18);\n --plasius-shadow: 0 24px 56px rgba(1, 6, 14, 0.44);\n margin: 0;\n min-height: 100%;\n font-family: \"Fraunces\", \"Iowan Old Style\", serif;\n color: var(--plasius-ink);\n background:\n radial-gradient(circle at 18% 12%, rgba(73, 101, 170, 0.28), transparent 30%),\n radial-gradient(circle at 82% 18%, rgba(240, 188, 103, 0.08), transparent 18%),\n linear-gradient(180deg, #04101d 0%, #0b1930 42%, #081321 100%);\n }\n .${ROOT_CLASS}.${CAPTURE_CLASS} {\n min-height: 100vh;\n overflow: hidden;\n background: #030710;\n }\n .${ROOT_CLASS},\n .${ROOT_CLASS} * {\n box-sizing: border-box;\n }\n .plasius-demo {\n width: min(1560px, calc(100vw - 32px));\n margin: 0 auto;\n padding: 28px 0 40px;\n display: grid;\n gap: 20px;\n }\n .plasius-demo__hero,\n .plasius-demo__layout {\n display: grid;\n gap: 20px;\n }\n .plasius-demo__hero {\n grid-template-columns: minmax(0, 1.5fr) minmax(320px, 0.85fr);\n align-items: start;\n }\n .plasius-panel {\n border: 1px solid var(--plasius-border);\n border-radius: 24px;\n background: var(--plasius-panel);\n box-shadow: var(--plasius-shadow);\n backdrop-filter: blur(12px);\n }\n .plasius-demo__hero-card,\n .plasius-demo__status {\n padding: 20px 22px;\n }\n .plasius-demo__eyebrow {\n margin: 0 0 8px;\n text-transform: uppercase;\n letter-spacing: 0.18em;\n font-size: 12px;\n color: rgba(226, 236, 255, 0.58);\n }\n .plasius-demo h1,\n .plasius-demo h2,\n .plasius-demo h3 {\n margin: 0;\n }\n .plasius-demo__lead {\n margin: 12px 0 0;\n color: var(--plasius-muted);\n line-height: 1.6;\n max-width: 760px;\n }\n .plasius-demo__status-badge {\n width: fit-content;\n margin: 0;\n padding: 8px 12px;\n border-radius: 999px;\n background: rgba(243, 177, 106, 0.14);\n color: var(--plasius-accent);\n font-weight: 700;\n }\n .plasius-demo__status-text {\n margin: 10px 0 0;\n color: var(--plasius-muted);\n line-height: 1.6;\n }\n .plasius-demo__layout {\n grid-template-columns: minmax(0, 1.45fr) minmax(320px, 0.68fr);\n align-items: start;\n }\n .plasius-demo__canvas-panel {\n padding: 18px;\n position: relative;\n }\n .plasius-demo__canvas {\n width: 100%;\n aspect-ratio: 16 / 9;\n display: block;\n border-radius: 20px;\n border: 1px solid rgba(159, 185, 223, 0.12);\n background: linear-gradient(180deg, #071220 0%, #132440 42%, #10344b 42%, #05111d 100%);\n }\n .${CAPTURE_CLASS} .plasius-demo {\n width: 100vw;\n height: 100vh;\n padding: 0;\n display: block;\n }\n .${CAPTURE_CLASS} .plasius-demo__hero,\n .${CAPTURE_CLASS} .plasius-demo__toolbar,\n .${CAPTURE_CLASS} .plasius-demo__legend,\n .${CAPTURE_CLASS} .plasius-demo__sidebar,\n .${CAPTURE_CLASS} .plasius-demo__footer {\n display: none;\n }\n .${CAPTURE_CLASS} .plasius-demo__layout {\n display: block;\n height: 100%;\n }\n .${CAPTURE_CLASS} .plasius-demo__canvas-panel {\n height: 100%;\n padding: 0;\n border: 0;\n border-radius: 0;\n background: transparent;\n box-shadow: none;\n backdrop-filter: none;\n }\n .${CAPTURE_CLASS} .plasius-demo__canvas {\n width: 100%;\n height: 100%;\n aspect-ratio: auto;\n border: 0;\n border-radius: 0;\n background: #030710;\n }\n .plasius-demo__toolbar {\n position: absolute;\n top: 26px;\n left: 26px;\n display: flex;\n gap: 12px;\n flex-wrap: wrap;\n align-items: center;\n }\n .plasius-demo button,\n .plasius-demo label,\n .plasius-demo select {\n font-family: \"JetBrains Mono\", monospace;\n font-size: 13px;\n }\n .plasius-demo button,\n .plasius-demo .plasius-toggle,\n .plasius-demo select {\n border: 1px solid rgba(159, 185, 223, 0.18);\n border-radius: 999px;\n background: rgba(9, 20, 34, 0.84);\n color: var(--plasius-ink);\n padding: 10px 14px;\n }\n .plasius-toggle {\n display: inline-flex;\n align-items: center;\n gap: 8px;\n }\n .plasius-demo__sidebar {\n display: grid;\n gap: 18px;\n }\n .plasius-demo__card {\n padding: 18px;\n }\n .plasius-demo__metrics,\n .plasius-demo__metrics li {\n margin: 0;\n padding: 0;\n list-style: none;\n }\n .plasius-demo__metrics {\n margin-top: 12px;\n display: grid;\n gap: 8px;\n color: var(--plasius-muted);\n line-height: 1.55;\n }\n .plasius-demo__metrics li {\n border-top: 1px solid rgba(21, 32, 40, 0.08);\n padding-top: 8px;\n }\n .plasius-demo__legend {\n position: absolute;\n right: 24px;\n bottom: 24px;\n padding: 10px 14px;\n border-radius: 16px;\n background: rgba(9, 20, 34, 0.82);\n border: 1px solid rgba(159, 185, 223, 0.16);\n color: var(--plasius-muted);\n font-size: 12px;\n line-height: 1.45;\n }\n .plasius-demo__legend strong {\n display: block;\n color: var(--plasius-ink);\n margin-bottom: 4px;\n }\n .plasius-demo__footer {\n margin-top: 4px;\n color: rgba(226, 236, 255, 0.68);\n font-size: 13px;\n line-height: 1.6;\n }\n @media (max-width: 1200px) {\n .plasius-demo__hero,\n .plasius-demo__layout {\n grid-template-columns: 1fr;\n }\n }\n `;\n document.head.appendChild(style);\n}\n\nfunction clamp(value, min, max) {\n return Math.max(min, Math.min(max, value));\n}\n\nfunction mix(a, b, t) {\n return a + (b - a) * t;\n}\n\nfunction smoothstep(min, max, value) {\n const t = clamp((value - min) / Math.max(0.0001, max - min), 0, 1);\n return t * t * (3 - 2 * t);\n}\n\nfunction pseudoRandom(seed) {\n const value = Math.sin(seed * 12.9898 + seed * seed * 0.0017) * 43758.5453;\n return value - Math.floor(value);\n}\n\nfunction vec3(x = 0, y = 0, z = 0) {\n return { x, y, z };\n}\n\nfunction addVec3(a, b) {\n return vec3(a.x + b.x, a.y + b.y, a.z + b.z);\n}\n\nfunction subVec3(a, b) {\n return vec3(a.x - b.x, a.y - b.y, a.z - b.z);\n}\n\nfunction scaleVec3(a, s) {\n return vec3(a.x * s, a.y * s, a.z * s);\n}\n\nfunction dotVec3(a, b) {\n return a.x * b.x + a.y * b.y + a.z * b.z;\n}\n\nfunction crossVec3(a, b) {\n return vec3(\n a.y * b.z - a.z * b.y,\n a.z * b.x - a.x * b.z,\n a.x * b.y - a.y * b.x\n );\n}\n\nfunction lengthVec3(a) {\n return Math.hypot(a.x, a.y, a.z);\n}\n\nfunction normalizeVec3(a) {\n const length = lengthVec3(a) || 1;\n return vec3(a.x / length, a.y / length, a.z / length);\n}\n\nfunction reflectVec3(vector, normal) {\n const unitNormal = normalizeVec3(normal);\n return subVec3(vector, scaleVec3(unitNormal, 2 * dotVec3(vector, unitNormal)));\n}\n\nfunction directionFromYaw(yaw) {\n return normalizeVec3(vec3(Math.sin(yaw), 0, Math.cos(yaw)));\n}\n\nfunction perpendicularOnWater(direction) {\n return vec3(-direction.z, 0, direction.x);\n}\n\nfunction rotateY(point, angle) {\n const cosine = Math.cos(angle);\n const sine = Math.sin(angle);\n return vec3(\n point.x * cosine - point.z * sine,\n point.y,\n point.x * sine + point.z * cosine\n );\n}\n\nfunction transformPoint(point, transform) {\n const scale =\n typeof transform.scale === \"number\"\n ? { x: transform.scale, y: transform.scale, z: transform.scale }\n : transform.scale;\n const scaled = vec3(point.x * scale.x, point.y * scale.y, point.z * scale.z);\n const rotated = rotateY(scaled, transform.rotationY);\n return addVec3(rotated, transform.position);\n}\n\nfunction transformDirection(direction, transform) {\n const scale =\n typeof transform.scale === \"number\"\n ? { x: transform.scale, y: transform.scale, z: transform.scale }\n : transform.scale;\n const scaled = vec3(direction.x * scale.x, direction.y * scale.y, direction.z * scale.z);\n return normalizeVec3(rotateY(scaled, transform.rotationY));\n}\n\nfunction projectPoint(point, camera, viewport) {\n const relative = subVec3(point, camera.eye);\n const viewX = dotVec3(relative, camera.right);\n const viewY = dotVec3(relative, camera.up);\n const viewZ = dotVec3(relative, camera.forward);\n if (viewZ <= 0.1) {\n return null;\n }\n const focal = 1 / Math.tan((camera.fov * Math.PI) / 360);\n const ndcX = (viewX * focal) / (viewZ * camera.aspect);\n const ndcY = (viewY * focal) / viewZ;\n return {\n x: (ndcX * 0.5 + 0.5) * viewport.width,\n y: (-ndcY * 0.5 + 0.5) * viewport.height,\n depth: viewZ,\n };\n}\n\nfunction colorToRgba(color, alpha = 1) {\n const r = Math.round(clamp(color.r, 0, 1) * 255);\n const g = Math.round(clamp(color.g, 0, 1) * 255);\n const b = Math.round(clamp(color.b, 0, 1) * 255);\n return `rgba(${r}, ${g}, ${b}, ${clamp(alpha, 0, 1)})`;\n}\n\nfunction mixColor(a, b, t) {\n return {\n r: mix(a.r, b.r, t),\n g: mix(a.g, b.g, t),\n b: mix(a.b, b.b, t),\n a: mix(a.a ?? 1, b.a ?? 1, t),\n };\n}\n\nfunction multiplyColor(a, b) {\n return {\n r: a.r * b.r,\n g: a.g * b.g,\n b: a.b * b.b,\n a: (a.a ?? 1) * (b.a ?? 1),\n };\n}\n\nfunction createLegacyMeshPrimitive(mesh) {\n return Object.freeze({\n name: mesh.name ?? \"legacy-mesh\",\n positions: mesh.positions,\n indices: mesh.indices,\n normals: null,\n colors: null,\n material: Object.freeze({\n name: \"legacy-material\",\n color: mesh.color ?? { r: 0.56, g: 0.33, b: 0.22, a: 1 },\n roughness: 0.88,\n metallic: 0.08,\n emissive: Object.freeze({ r: 0, g: 0, b: 0 }),\n }),\n });\n}\n\nfunction isFeatureEnabled(featureFlags, featureName, fallback = true) {\n const directValue =\n typeof featureFlags?.[featureName] === \"boolean\"\n ? featureFlags[featureName]\n : featureFlags?.flags?.[featureName];\n if (typeof directValue === \"boolean\") {\n return directValue;\n }\n\n const enabledValue =\n typeof featureFlags?.enabled?.[featureName] === \"boolean\"\n ? featureFlags.enabled[featureName]\n : undefined;\n if (typeof enabledValue === \"boolean\") {\n return enabledValue;\n }\n\n return fallback;\n}\n\nfunction getMeshPrimitives(mesh) {\n return Array.isArray(mesh?.primitives) && mesh.primitives.length > 0\n ? mesh.primitives\n : [createLegacyMeshPrimitive(mesh)];\n}\n\nfunction tintPrimitiveColor(material, colorOverride) {\n if (!colorOverride) {\n return material.color;\n }\n\n const name = String(material.name ?? \"\").toLowerCase();\n if (name.includes(\"sail\") || name.includes(\"glass\") || name.includes(\"roof\")) {\n return material.color;\n }\n\n const tintAmount = name.includes(\"hull\")\n ? 0.54\n : name.includes(\"trim\")\n ? 0.22\n : name.includes(\"deck\")\n ? 0.12\n : 0;\n\n if (tintAmount <= 0) {\n return material.color;\n }\n\n return mixColor(material.color, multiplyColor(material.color, colorOverride), tintAmount);\n}\n\nfunction projectShadowPoint(point, lightDir, planeY) {\n const shadowDir = scaleVec3(lightDir, -1);\n if (Math.abs(shadowDir.y) < 0.0001) {\n return null;\n }\n\n const distance = (planeY - point.y) / shadowDir.y;\n if (!Number.isFinite(distance) || distance < 0) {\n return null;\n }\n\n return addVec3(point, scaleVec3(shadowDir, distance));\n}\n\nfunction shadeColor(base, normal, lightDir, heightBias = 0, accent = 0) {\n const diffuse = clamp(dotVec3(normalizeVec3(normal), lightDir), 0, 1);\n const brightness = 0.24 + diffuse * 0.72 + heightBias * 0.08 + accent;\n return {\n r: clamp(base.r * brightness, 0, 1),\n g: clamp(base.g * brightness, 0, 1),\n b: clamp(base.b * (brightness + 0.03), 0, 1),\n };\n}\n\nfunction getMaterialSeed(materialName) {\n let seed = 0;\n for (let index = 0; index < materialName.length; index += 1) {\n seed += materialName.charCodeAt(index) * (index + 1);\n }\n return seed;\n}\n\nfunction getMaterialDetailStrength(material, surfaceType) {\n const name = String(material?.name ?? \"\").toLowerCase();\n if (surfaceType === \"water\" || name.includes(\"glass\")) {\n return 0.018;\n }\n if (name.includes(\"wood\") || name.includes(\"timber\") || name.includes(\"plank\")) {\n return 0.13;\n }\n if (name.includes(\"stone\") || name.includes(\"concrete\") || name.includes(\"plaster\")) {\n return 0.1;\n }\n if (name.includes(\"roof\") || name.includes(\"crate\")) {\n return 0.09;\n }\n if (name.includes(\"paint\")) {\n return 0.045;\n }\n if (name.includes(\"metal\")) {\n return 0.035;\n }\n return 0.04;\n}\n\nfunction applyMaterialDetail(color, material, worldCenter, normal, surfaceType) {\n const materialName = String(material?.name ?? surfaceType ?? \"material\");\n const detailStrength = getMaterialDetailStrength(material, surfaceType);\n const sample =\n worldCenter.x * 3.17 +\n worldCenter.y * 5.29 +\n worldCenter.z * 7.83 +\n getMaterialSeed(materialName) * 0.013;\n const grain = (pseudoRandom(sample) - 0.5) * detailStrength;\n const lowerSurface = smoothstep(7.5, -0.8, worldCenter.y);\n const verticalSurface = 1 - clamp(Math.abs(normal.y), 0, 1);\n const materialLowerWear =\n /stone|concrete|plaster|paint|wood|timber|plank|crate/.test(materialName.toLowerCase())\n ? lowerSurface * verticalSurface * 0.055\n : 0;\n const wetlineWear =\n surfaceType === \"ship\" && worldCenter.y < 0.72\n ? smoothstep(0.72, -0.1, worldCenter.y) * 0.05\n : 0;\n\n return {\n r: clamp(color.r * (1 + grain) - materialLowerWear - wetlineWear, 0, 1),\n g: clamp(color.g * (1 + grain * 0.82) - materialLowerWear * 0.9 - wetlineWear, 0, 1),\n b: clamp(color.b * (1 + grain * 0.62) - materialLowerWear * 0.68 - wetlineWear * 0.75, 0, 1),\n };\n}\n\nfunction buildCamera(state, canvas) {\n const preset = CAMERA_PRESETS[state.focus] ?? CAMERA_PRESETS.integrated;\n const yaw = state.camera.yaw ?? preset.yaw;\n const pitch = state.camera.pitch ?? preset.pitch;\n const distance = state.camera.distance ?? preset.distance;\n const target = state.camera.target ?? vec3(...preset.target);\n const eye = vec3(\n target.x + Math.sin(yaw) * Math.cos(pitch) * distance,\n target.y + Math.sin(pitch) * distance,\n target.z + Math.cos(yaw) * Math.cos(pitch) * distance\n );\n const forward = normalizeVec3(subVec3(target, eye));\n const right = normalizeVec3(crossVec3(forward, vec3(0, 1, 0)));\n const up = normalizeVec3(crossVec3(right, forward));\n return {\n eye,\n target,\n forward,\n right,\n up,\n fov: 54,\n aspect: canvas.width / canvas.height,\n };\n}\n\nfunction buildTrianglesFromMesh(\n mesh,\n transform,\n colorOverride,\n camera,\n viewport,\n triangles,\n options = {}\n) {\n const primitives = getMeshPrimitives(mesh);\n for (const primitive of primitives) {\n const resolvedColor = tintPrimitiveColor(primitive.material, colorOverride);\n for (let index = 0; index < primitive.indices.length; index += 3) {\n const aIndex = primitive.indices[index] * 3;\n const bIndex = primitive.indices[index + 1] * 3;\n const cIndex = primitive.indices[index + 2] * 3;\n\n const a = transformPoint(\n vec3(\n primitive.positions[aIndex],\n primitive.positions[aIndex + 1],\n primitive.positions[aIndex + 2]\n ),\n transform\n );\n const b = transformPoint(\n vec3(\n primitive.positions[bIndex],\n primitive.positions[bIndex + 1],\n primitive.positions[bIndex + 2]\n ),\n transform\n );\n const c = transformPoint(\n vec3(\n primitive.positions[cIndex],\n primitive.positions[cIndex + 1],\n primitive.positions[cIndex + 2]\n ),\n transform\n );\n\n const ab = subVec3(b, a);\n const ac = subVec3(c, a);\n const faceNormal = normalizeVec3(crossVec3(ab, ac));\n let normal = faceNormal;\n if (Array.isArray(primitive.normals)) {\n const aNormal = transformDirection(\n vec3(\n primitive.normals[aIndex],\n primitive.normals[aIndex + 1],\n primitive.normals[aIndex + 2]\n ),\n transform\n );\n const bNormal = transformDirection(\n vec3(\n primitive.normals[bIndex],\n primitive.normals[bIndex + 1],\n primitive.normals[bIndex + 2]\n ),\n transform\n );\n const cNormal = transformDirection(\n vec3(\n primitive.normals[cIndex],\n primitive.normals[cIndex + 1],\n primitive.normals[cIndex + 2]\n ),\n transform\n );\n normal = normalizeVec3(\n scaleVec3(addVec3(addVec3(aNormal, bNormal), cNormal), 1 / 3)\n );\n }\n\n const viewDir = normalizeVec3(subVec3(camera.eye, a));\n if (dotVec3(faceNormal, viewDir) <= 0) {\n continue;\n }\n\n const projected = [\n projectPoint(a, camera, viewport),\n projectPoint(b, camera, viewport),\n projectPoint(c, camera, viewport),\n ];\n if (projected.some((value) => value === null)) {\n continue;\n }\n\n triangles.push({\n points: projected,\n depth: (projected[0].depth + projected[1].depth + projected[2].depth) / 3,\n worldCenter: scaleVec3(addVec3(addVec3(a, b), c), 1 / 3),\n normal,\n baseColor: resolvedColor,\n accent: options.accent ?? 0,\n material: primitive.material,\n reflection: options.reflection ?? 0,\n surfaceType: options.surfaceType ?? \"solid\",\n });\n }\n }\n}\n\nasync function loadShowcaseAssetCatalog() {\n const [brigantine, cutter, lighthouse, harborDock] = await Promise.all([\n loadGltfModel(resolveShowcaseAssetUrl(\"brigantine\")),\n loadGltfModel(resolveShowcaseAssetUrl(\"cutter\")),\n loadGltfModel(resolveShowcaseAssetUrl(\"lighthouse\")),\n loadGltfModel(resolveShowcaseAssetUrl(\"harbor-dock\")),\n ]);\n\n return Object.freeze({\n primaryShipKey: \"brigantine\",\n ships: Object.freeze({\n brigantine,\n cutter,\n }),\n environment: Object.freeze({\n lighthouse,\n \"harbor-dock\": harborDock,\n }),\n });\n}\n\nfunction createLegacyShowcaseAssetCatalog() {\n const brigantine = loadGltfModel(resolveShowcaseAssetUrl(\"brigantine\"));\n return Promise.resolve(brigantine).then((primary) =>\n Object.freeze({\n primaryShipKey: \"brigantine\",\n ships: Object.freeze({\n brigantine: primary,\n }),\n environment: Object.freeze({}),\n })\n );\n}\n\nfunction resolveShipModel(state, ship, fallbackModel = null) {\n return (\n state.assetCatalog?.ships?.[ship.modelKey ?? state.assetCatalog?.primaryShipKey ?? \"brigantine\"] ??\n fallbackModel ??\n state.shipModel\n );\n}\n\nfunction createPerformanceGovernor(performanceFeatures) {\n const createQualityLadderAdapter = assertRequiredFunction(\n performanceFeatures,\n \"performance\",\n \"createQualityAdapter\"\n );\n const createDeviceProfile = assertRequiredFunction(\n performanceFeatures,\n \"performance\",\n \"createDeviceProfile\"\n );\n const createGpuPerformanceGovernor = assertRequiredFunction(\n performanceFeatures,\n \"performance\",\n \"createGovernor\"\n );\n\n const fluidDetail = createQualityLadderAdapter({\n id: \"fluid-detail\",\n domain: \"geometry\",\n levels: [\n { id: \"low\", config: { nearResolution: 10, midResolution: 6, splashCount: 10 }, estimatedCostMs: 0.8 },\n { id: \"medium\", config: { nearResolution: 16, midResolution: 8, splashCount: 18 }, estimatedCostMs: 1.4 },\n { id: \"high\", config: { nearResolution: 24, midResolution: 12, splashCount: 28 }, estimatedCostMs: 2.4 },\n ],\n initialLevel: \"high\",\n });\n\n const clothDetail = createQualityLadderAdapter({\n id: \"cloth-detail\",\n domain: \"cloth\",\n levels: [\n { id: \"low\", config: { cols: 10, rows: 7 }, estimatedCostMs: 0.7 },\n { id: \"medium\", config: { cols: 16, rows: 11 }, estimatedCostMs: 1.3 },\n { id: \"high\", config: { cols: 24, rows: 16 }, estimatedCostMs: 2.1 },\n ],\n initialLevel: \"high\",\n });\n\n const lightingDetail = createQualityLadderAdapter({\n id: \"lighting-detail\",\n domain: \"lighting\",\n levels: [\n { id: \"low\", config: { shadowStrength: 0.18, reflectionStrength: 0.08 }, estimatedCostMs: 0.5 },\n { id: \"medium\", config: { shadowStrength: 0.34, reflectionStrength: 0.16 }, estimatedCostMs: 1.0 },\n { id: \"high\", config: { shadowStrength: 0.5, reflectionStrength: 0.24 }, estimatedCostMs: 1.8 },\n ],\n initialLevel: \"high\",\n });\n\n const governor = createGpuPerformanceGovernor({\n device: createDeviceProfile({\n deviceClass: \"desktop\",\n mode: \"flat\",\n refreshRateHz: 60,\n supportedFrameRates: [60, 90],\n supportsWebGpu: true,\n }),\n modules: [fluidDetail, clothDetail, lightingDetail],\n adaptation: {\n sampleWindowSize: 10,\n minimumSamplesBeforeAdjustment: 4,\n degradeCooldownFrames: 1,\n upgradeCooldownFrames: 4,\n minStableFramesForRecovery: 3,\n },\n });\n\n return { governor, fluidDetail, clothDetail, lightingDetail };\n}\n\nfunction buildDemoDom(root, options) {\n const t = options.translate;\n root.innerHTML = `\n <main class=\"plasius-demo\">\n <section class=\"plasius-demo__hero\">\n <section class=\"plasius-panel plasius-demo__hero-card\">\n <p class=\"plasius-demo__eyebrow\">${options.packageName}</p>\n <h1>${options.title}</h1>\n <p class=\"plasius-demo__lead\">${options.subtitle}</p>\n </section>\n <section class=\"plasius-panel plasius-demo__status\">\n <p id=\"demoStatus\" class=\"plasius-demo__status-badge\">${t(gpuSharedTranslationKeys.statusBooting)}</p>\n <p id=\"demoDetails\" class=\"plasius-demo__status-text\">\n ${t(gpuSharedTranslationKeys.detailsBooting)}\n </p>\n </section>\n </section>\n <section class=\"plasius-demo__layout\">\n <section class=\"plasius-panel plasius-demo__canvas-panel\">\n <canvas id=\"demoCanvas\" class=\"plasius-demo__canvas\" width=\"${DEFAULT_CANVAS_WIDTH}\" height=\"${DEFAULT_CANVAS_HEIGHT}\"></canvas>\n <div class=\"plasius-demo__toolbar\">\n <button id=\"pauseButton\" type=\"button\">${t(gpuSharedTranslationKeys.pause)}</button>\n <label class=\"plasius-toggle\">\n <input id=\"stressToggle\" type=\"checkbox\" />\n ${t(gpuSharedTranslationKeys.stressMode)}\n </label>\n <label class=\"plasius-toggle\">\n ${t(gpuSharedTranslationKeys.focus)}\n <select id=\"focusMode\">\n ${showcaseFocusModes\n .map(\n (mode) =>\n `<option value=\"${mode}\">${t(FOCUS_MODE_TRANSLATION_KEYS[mode])}</option>`\n )\n .join(\"\")}\n </select>\n </label>\n </div>\n <div class=\"plasius-demo__legend\">\n <strong>${t(gpuSharedTranslationKeys.legendTitle)}</strong>\n ${t(gpuSharedTranslationKeys.legendShipMetadata)}<br />\n ${t(gpuSharedTranslationKeys.legendLighting)}<br />\n ${t(gpuSharedTranslationKeys.legendCollisions)}\n </div>\n </section>\n <aside class=\"plasius-demo__sidebar\">\n <section class=\"plasius-panel plasius-demo__card\">\n <h2>${t(gpuSharedTranslationKeys.sceneState)}</h2>\n <ul id=\"sceneMetrics\" class=\"plasius-demo__metrics\"></ul>\n </section>\n <section class=\"plasius-panel plasius-demo__card\">\n <h2>${t(gpuSharedTranslationKeys.qualityBudgets)}</h2>\n <ul id=\"qualityMetrics\" class=\"plasius-demo__metrics\"></ul>\n </section>\n <section class=\"plasius-panel plasius-demo__card\">\n <h2>${t(gpuSharedTranslationKeys.debugTelemetry)}</h2>\n <ul id=\"debugMetrics\" class=\"plasius-demo__metrics\"></ul>\n </section>\n <section class=\"plasius-panel plasius-demo__card\">\n <h2>${t(gpuSharedTranslationKeys.notes)}</h2>\n <ul id=\"sceneNotes\" class=\"plasius-demo__metrics\"></ul>\n </section>\n </aside>\n </section>\n <p class=\"plasius-demo__footer\">\n This visual example is shared across the GPU packages to keep manual validation fast and consistent.\n </p>\n </main>\n `;\n\n return {\n status: root.querySelector(\"#demoStatus\"),\n details: root.querySelector(\"#demoDetails\"),\n canvas: root.querySelector(\"#demoCanvas\"),\n pauseButton: root.querySelector(\"#pauseButton\"),\n stressToggle: root.querySelector(\"#stressToggle\"),\n focusMode: root.querySelector(\"#focusMode\"),\n sceneMetrics: root.querySelector(\"#sceneMetrics\"),\n qualityMetrics: root.querySelector(\"#qualityMetrics\"),\n debugMetrics: root.querySelector(\"#debugMetrics\"),\n sceneNotes: root.querySelector(\"#sceneNotes\"),\n };\n}\n\nfunction buildSceneSnapshot(state, shipModel) {\n const shipPhysics = Object.freeze(\n Object.fromEntries(\n state.ships.map((ship) => [ship.id, resolveShipModel(state, ship, shipModel)?.physics ?? null])\n )\n );\n\n return Object.freeze({\n focus: state.focus,\n frame: state.frame,\n time: state.time,\n stress: state.stress,\n collisions: state.contactCount,\n collisionCount: state.collisionCount,\n collisionFlash: state.collisionFlash,\n sprays: Object.freeze(\n state.sprays.map((spray) =>\n Object.freeze({\n life: spray.life,\n position: Object.freeze({ ...spray.position }),\n velocity: Object.freeze({ ...spray.velocity }),\n })\n )\n ),\n ships: Object.freeze(\n state.ships.map((ship) =>\n Object.freeze({\n id: ship.id,\n modelKey: ship.modelKey ?? \"brigantine\",\n position: Object.freeze({ ...ship.position }),\n velocity: Object.freeze({ ...ship.velocity }),\n rotationY: ship.rotationY,\n angularVelocity: ship.angularVelocity,\n tint: Object.freeze({ ...ship.tint }),\n })\n )\n ),\n waveImpulses: Object.freeze(\n state.waveImpulses.map((impulse) =>\n Object.freeze({\n x: impulse.x,\n z: impulse.z,\n strength: impulse.strength,\n radius: impulse.radius,\n life: impulse.life,\n })\n )\n ),\n shipPhysics: shipModel?.physics ?? null,\n shipModels: shipPhysics,\n physics: Object.freeze({\n profile: state.physics.profile,\n plan: state.physics.plan,\n manifest: state.physics.manifest,\n snapshot: state.physics.snapshot,\n shipPhysics,\n }),\n });\n}\n\nfunction resolveSceneDescription(state, options, shipModel) {\n const scene = buildSceneSnapshot(state, shipModel);\n if (typeof options.describeState !== \"function\") {\n return { scene, description: null };\n }\n\n const description = options.describeState(state.packageState, scene) ?? null;\n return { scene, description };\n}\n\nfunction updatePackageState(state, options, shipModel, dt) {\n if (typeof options.updateState !== \"function\") {\n return;\n }\n\n const scene = buildSceneSnapshot(state, shipModel);\n const nextState = options.updateState(state.packageState, scene, dt);\n if (typeof nextState !== \"undefined\") {\n state.packageState = nextState;\n }\n}\n\nfunction normalizeColorOverride(color, fallback) {\n if (!color || typeof color !== \"object\") {\n return fallback;\n }\n\n return {\n r: typeof color.r === \"number\" ? color.r : fallback.r,\n g: typeof color.g === \"number\" ? color.g : fallback.g,\n b: typeof color.b === \"number\" ? color.b : fallback.b,\n };\n}\n\nfunction readVisualNumber(value, fallback) {\n return typeof value === \"number\" && Number.isFinite(value) ? value : fallback;\n}\n\nfunction readPositiveNumber(value, fallback) {\n return typeof value === \"number\" && Number.isFinite(value) && value > 0\n ? value\n : fallback;\n}\n\nfunction isTruthyCaptureValue(value) {\n return value === \"1\" || value === \"true\" || value === \"scene\" || value === \"video\";\n}\n\nfunction resolveCaptureSettings(options) {\n const explicitCaptureMode =\n typeof options.captureMode === \"boolean\" ? options.captureMode : undefined;\n let captureMode = explicitCaptureMode ?? false;\n let renderScale = readPositiveNumber(options.renderScale, undefined);\n\n try {\n const params = new URLSearchParams(window.location.search);\n if (explicitCaptureMode === undefined) {\n captureMode =\n isTruthyCaptureValue(params.get(\"capture\")) ||\n params.get(\"presentation\") === \"capture\";\n }\n renderScale = readPositiveNumber(Number(params.get(\"renderScale\")), renderScale);\n } catch {\n // Query-string capture controls are optional and only available in browsers.\n }\n\n return {\n captureMode,\n renderScale,\n };\n}\n\nfunction getCanvasDisplaySize(canvas) {\n const rect =\n typeof canvas.getBoundingClientRect === \"function\"\n ? canvas.getBoundingClientRect()\n : null;\n const width = Math.round(\n readPositiveNumber(rect?.width, readPositiveNumber(canvas.clientWidth, canvas.width))\n );\n const height = Math.round(\n readPositiveNumber(rect?.height, readPositiveNumber(canvas.clientHeight, canvas.height))\n );\n\n return {\n width: Math.max(1, width || DEFAULT_CANVAS_WIDTH),\n height: Math.max(1, height || DEFAULT_CANVAS_HEIGHT),\n };\n}\n\nfunction resizeCanvasToDisplaySize(canvas, state) {\n const { width, height } = getCanvasDisplaySize(canvas);\n const deviceScale = readPositiveNumber(globalThis.devicePixelRatio, 1);\n const requestedScale = readPositiveNumber(state.renderScale, deviceScale);\n const maxScale = state.captureMode ? 2 : 1.5;\n let scale = clamp(requestedScale, 1, maxScale);\n const pixelBudget = state.captureMode\n ? CAPTURE_CANVAS_PIXEL_BUDGET\n : DEFAULT_CANVAS_WIDTH * DEFAULT_CANVAS_HEIGHT * 1.5;\n const projectedPixels = width * height * scale * scale;\n\n if (projectedPixels > pixelBudget) {\n scale = Math.sqrt(pixelBudget / Math.max(1, width * height));\n }\n\n const targetWidth = Math.max(1, Math.round(width * scale));\n const targetHeight = Math.max(1, Math.round(height * scale));\n if (canvas.width !== targetWidth || canvas.height !== targetHeight) {\n canvas.width = targetWidth;\n canvas.height = targetHeight;\n }\n\n state.renderScale = scale;\n}\n\nfunction resolveClothPresentation(state, meshDetail, clothFeatures) {\n const clothPlan = clothFeatures.createPlan({\n garmentId: \"shore-flag\",\n kind: state.focus === \"cloth\" ? \"flag\" : clothFeatures.garmentKinds[0],\n profile: state.focus === \"cloth\" ? \"cinematic\" : clothFeatures.profileNames[0],\n supportsRayTracing: true,\n nearFieldMaxMeters: 18,\n midFieldMaxMeters: 55,\n farFieldMaxMeters: 180,\n });\n const preset = CAMERA_PRESETS[state.focus] ?? CAMERA_PRESETS.integrated;\n const fallbackEye = state.camera.eye\n ? state.camera.eye\n : addVec3(\n state.camera.target,\n vec3(\n Math.sin(state.camera.yaw ?? preset.yaw) * Math.cos(state.camera.pitch ?? preset.pitch) * (state.camera.distance ?? preset.distance),\n Math.sin(state.camera.pitch ?? preset.pitch) * (state.camera.distance ?? preset.distance),\n Math.cos(state.camera.yaw ?? preset.yaw) * Math.cos(state.camera.pitch ?? preset.pitch) * (state.camera.distance ?? preset.distance)\n )\n );\n const cameraDistance = lengthVec3(subVec3(state.camera.target, fallbackEye));\n const band = clothFeatures.selectBand(cameraDistance, clothPlan.thresholds);\n const representation =\n clothPlan.representations.find((entry) => entry.band === band) ?? clothPlan.representations[0];\n return {\n clothPlan,\n band,\n continuity: representation.continuity,\n representation,\n };\n}\n\nfunction getFlagRestPosition(rows, cols, row, column) {\n const u = cols <= 1 ? 0 : column / (cols - 1);\n const v = rows <= 1 ? 0 : row / (rows - 1);\n return vec3(\n FLAG_LAYOUT.origin.x + u * FLAG_LAYOUT.mastOffsetX,\n FLAG_LAYOUT.origin.y - FLAG_LAYOUT.height * v - u * u * 0.08,\n FLAG_LAYOUT.origin.z + FLAG_LAYOUT.width * u\n );\n}\n\nfunction buildClothConstraints(rows, cols, restPositions) {\n const constraints = [];\n const indexFor = (row, column) => row * cols + column;\n const pushConstraint = (a, b, stiffness) => {\n constraints.push(\n Object.freeze({\n a,\n b,\n restLength: lengthVec3(subVec3(restPositions[a], restPositions[b])),\n stiffness,\n })\n );\n };\n\n for (let row = 0; row < rows; row += 1) {\n for (let column = 0; column < cols; column += 1) {\n const index = indexFor(row, column);\n if (column + 1 < cols) {\n pushConstraint(index, indexFor(row, column + 1), 0.92);\n }\n if (row + 1 < rows) {\n pushConstraint(index, indexFor(row + 1, column), 0.9);\n }\n if (column + 1 < cols && row + 1 < rows) {\n pushConstraint(index, indexFor(row + 1, column + 1), 0.66);\n }\n if (column - 1 >= 0 && row + 1 < rows) {\n pushConstraint(index, indexFor(row + 1, column - 1), 0.66);\n }\n if (column + 2 < cols) {\n pushConstraint(index, indexFor(row, column + 2), 0.22);\n }\n if (row + 2 < rows) {\n pushConstraint(index, indexFor(row + 2, column), 0.18);\n }\n }\n }\n\n return Object.freeze(constraints);\n}\n\nfunction createShowcaseClothSimulationState(options = {}) {\n const rows = Math.max(4, options.rows ?? 11);\n const cols = Math.max(4, options.cols ?? 16);\n const continuity = options.continuity ?? {\n broadMotionFloor: 0.72,\n wrinkleFloor: 0.56,\n };\n const representation = options.representation ?? {\n mesh: {\n solverIterations: 6,\n wrinkleLayers: 2,\n },\n };\n const restPositions = [];\n const positions = [];\n const previousPositions = [];\n const uvs = [];\n const phaseOffsets = [];\n const pinned = [];\n\n for (let row = 0; row < rows; row += 1) {\n for (let column = 0; column < cols; column += 1) {\n const index = row * cols + column;\n const u = cols <= 1 ? 0 : column / (cols - 1);\n const v = rows <= 1 ? 0 : row / (rows - 1);\n const rest = getFlagRestPosition(rows, cols, row, column);\n const preload = vec3(\n u * 0.04,\n Math.sin(v * Math.PI) * 0.02 * continuity.wrinkleFloor,\n -u * 0.12\n );\n const pinnedPoint = column === 0;\n restPositions.push(rest);\n positions.push(pinnedPoint ? vec3(rest.x, rest.y, rest.z) : addVec3(rest, preload));\n previousPositions.push(\n pinnedPoint\n ? vec3(rest.x, rest.y, rest.z)\n : addVec3(rest, scaleVec3(preload, 0.35))\n );\n uvs.push(Object.freeze({ u, v }));\n phaseOffsets.push(pseudoRandom(index + 17) * Math.PI * 2);\n pinned.push(pinnedPoint);\n }\n }\n\n return {\n rows,\n cols,\n continuity,\n representation,\n restPositions,\n positions,\n previousPositions,\n constraints: buildClothConstraints(rows, cols, restPositions),\n indices: Object.freeze(\n Array.from({ length: (rows - 1) * (cols - 1) * 6 }, (_, listIndex) => listIndex)\n .map((_, listIndex, source) => {\n if (listIndex >= source.length) {\n return 0;\n }\n const quadIndex = Math.floor(listIndex / 6);\n const quadColumn = quadIndex % (cols - 1);\n const quadRow = Math.floor(quadIndex / (cols - 1));\n const base = quadRow * cols + quadColumn;\n return [base, base + 1, base + cols + 1, base, base + cols + 1, base + cols][listIndex % 6];\n })\n ),\n uvs,\n phaseOffsets,\n pinned,\n };\n}\n\nfunction resetPinnedClothPoints(clothState) {\n for (let index = 0; index < clothState.positions.length; index += 1) {\n if (!clothState.pinned[index]) {\n continue;\n }\n const anchor = clothState.restPositions[index];\n clothState.positions[index] = vec3(anchor.x, anchor.y, anchor.z);\n clothState.previousPositions[index] = vec3(anchor.x, anchor.y, anchor.z);\n }\n}\n\nfunction satisfyClothConstraint(clothState, constraint) {\n const a = clothState.positions[constraint.a];\n const b = clothState.positions[constraint.b];\n const delta = subVec3(b, a);\n const distance = lengthVec3(delta);\n if (distance <= 0.0001) {\n return;\n }\n\n const correctionScale =\n ((distance - constraint.restLength) / distance) * 0.5 * constraint.stiffness;\n const correction = scaleVec3(delta, correctionScale);\n if (!clothState.pinned[constraint.a]) {\n clothState.positions[constraint.a] = addVec3(a, correction);\n }\n if (!clothState.pinned[constraint.b]) {\n clothState.positions[constraint.b] = subVec3(b, correction);\n }\n}\n\nfunction advanceShowcaseClothSimulationState(clothState, options = {}) {\n const dt = clamp(options.dt ?? 1 / 60, 1 / 240, 1 / 18);\n const time = readVisualNumber(options.time, 0);\n const flagMotion = readVisualNumber(options.flagMotion, 0.92);\n const waveInfluence = readVisualNumber(options.waveInfluence, 0);\n const wrinkleLayers = Math.max(1, clothState.representation.mesh?.wrinkleLayers ?? 2);\n const solverIterations = clamp(\n Math.round(clothState.representation.mesh?.solverIterations ?? 6),\n 2,\n 10\n );\n\n for (let index = 0; index < clothState.positions.length; index += 1) {\n if (clothState.pinned[index]) {\n continue;\n }\n\n const current = clothState.positions[index];\n const previous = clothState.previousPositions[index];\n const { u, v } = clothState.uvs[index];\n const phase = clothState.phaseOffsets[index];\n const broadMotion = clothState.continuity.broadMotionFloor;\n const wrinkleMotion = clothState.continuity.wrinkleFloor;\n const gustPhase = time * 2.1 + phase + u * 4.4 + v * 2.3;\n const wrinklePhase = time * 5.3 + phase * 0.72 + u * 9.6 + v * 7.1;\n const windDirection = normalizeVec3(\n vec3(\n 0.18 + Math.sin(gustPhase) * (0.12 + broadMotion * 0.09),\n Math.cos(time * 1.4 + phase + v * 4.8) * 0.06 * wrinkleMotion,\n 1 + Math.sin(gustPhase * 0.74) * 0.18\n )\n );\n const windStrength =\n (1.6 + broadMotion * 1.25 + wrinkleLayers * 0.12) *\n flagMotion *\n (0.44 + u * 1.14);\n const wrinkleForce = vec3(\n Math.sin(wrinklePhase) * 0.22 * wrinkleMotion * flagMotion,\n Math.cos(wrinklePhase * 0.7) * 0.08 * wrinkleMotion,\n Math.cos(wrinklePhase) * 0.14 * broadMotion * flagMotion\n );\n const acceleration = addVec3(\n vec3(0, -0.48 - u * 0.08, 0),\n addVec3(\n scaleVec3(windDirection, windStrength),\n addVec3(\n wrinkleForce,\n vec3(waveInfluence * (0.04 + u * 0.08), 0, waveInfluence * 0.16)\n )\n )\n );\n const inertia = scaleVec3(subVec3(current, previous), 0.987);\n const next = addVec3(addVec3(current, inertia), scaleVec3(acceleration, dt * dt));\n clothState.previousPositions[index] = vec3(current.x, current.y, current.z);\n clothState.positions[index] = next;\n }\n\n resetPinnedClothPoints(clothState);\n for (let iteration = 0; iteration < solverIterations; iteration += 1) {\n for (const constraint of clothState.constraints) {\n satisfyClothConstraint(clothState, constraint);\n }\n resetPinnedClothPoints(clothState);\n }\n\n return clothState;\n}\n\nfunction ensureShowcaseClothState(state, meshDetail, clothPresentation) {\n if (\n !state.clothState ||\n state.clothState.rows !== meshDetail.rows ||\n state.clothState.cols !== meshDetail.cols\n ) {\n state.clothState = createShowcaseClothSimulationState({\n rows: meshDetail.rows,\n cols: meshDetail.cols,\n continuity: clothPresentation.continuity,\n representation: clothPresentation.representation,\n });\n } else {\n state.clothState.continuity = clothPresentation.continuity;\n state.clothState.representation = clothPresentation.representation;\n }\n\n return state.clothState;\n}\n\nfunction resolveVisualConfig(nearLighting, lightingSnapshot, customVisuals = {}) {\n const premiumShadows = nearLighting.primaryShadowSource === \"ray-traced-primary\";\n const defaults = {\n skyTop: premiumShadows ? \"#040c1a\" : \"#06101f\",\n skyMid: premiumShadows ? \"#11203b\" : \"#152643\",\n skyBottom: premiumShadows ? \"#2f4468\" : \"#364d73\",\n duskGlow: premiumShadows ? \"rgba(116, 142, 201, 0.26)\" : \"rgba(104, 128, 188, 0.22)\",\n seaTop: premiumShadows ? \"#102946\" : \"#153050\",\n seaMid: premiumShadows ? \"#0a1d33\" : \"#0d2138\",\n seaBottom: \"#04101d\",\n moonCore: \"rgba(241, 246, 255, 0.98)\",\n moonHalo: \"rgba(167, 191, 255, 0.24)\",\n moonReflection: \"rgba(192, 214, 255, 0.22)\",\n starColor: \"rgba(232, 239, 255, 0.82)\",\n ambientMist: \"rgba(41, 63, 97, 0.16)\",\n reflectionStrength: lightingSnapshot.currentLevel.config.reflectionStrength,\n shadowAccent: lightingSnapshot.currentLevel.config.shadowStrength,\n waveAmplitude: 0.94,\n waveDirection: { x: 0.88, z: 0.28 },\n wavePhaseSpeed: 0.88,\n wakeStrength: 0.31,\n wakeLength: 18,\n collisionRippleStrength: 0.42,\n waterNear: { r: 0.08, g: 0.23, b: 0.33 },\n waterFar: { r: 0.18, g: 0.35, b: 0.49 },\n harborWall: { r: 0.26, g: 0.24, b: 0.28 },\n harborDeck: { r: 0.33, g: 0.22, b: 0.16 },\n harborTower: { r: 0.23, g: 0.24, b: 0.29 },\n flagColor: { r: 0.66, g: 0.16, b: 0.13 },\n flagMotion: 0.92,\n lanternCore: { r: 0.98, g: 0.8, b: 0.48 },\n lanternGlow: { r: 1, g: 0.56, b: 0.2 },\n lanternReflectionStrength: 0.42,\n torchCore: { r: 0.99, g: 0.72, b: 0.36 },\n torchGlow: { r: 0.98, g: 0.38, b: 0.15 },\n collisionFlash: \"rgba(255, 212, 168, 0.16)\",\n };\n\n return {\n skyTop: typeof customVisuals.skyTop === \"string\" ? customVisuals.skyTop : defaults.skyTop,\n skyMid: typeof customVisuals.skyMid === \"string\" ? customVisuals.skyMid : defaults.skyMid,\n skyBottom:\n typeof customVisuals.skyBottom === \"string\" ? customVisuals.skyBottom : defaults.skyBottom,\n seaTop: typeof customVisuals.seaTop === \"string\" ? customVisuals.seaTop : defaults.seaTop,\n seaMid: typeof customVisuals.seaMid === \"string\" ? customVisuals.seaMid : defaults.seaMid,\n seaBottom:\n typeof customVisuals.seaBottom === \"string\" ? customVisuals.seaBottom : defaults.seaBottom,\n duskGlow:\n typeof customVisuals.duskGlow === \"string\" ? customVisuals.duskGlow : defaults.duskGlow,\n moonCore:\n typeof customVisuals.moonCore === \"string\"\n ? customVisuals.moonCore\n : typeof customVisuals.sunCore === \"string\"\n ? customVisuals.sunCore\n : defaults.moonCore,\n moonHalo:\n typeof customVisuals.moonHalo === \"string\" ? customVisuals.moonHalo : defaults.moonHalo,\n moonReflection:\n typeof customVisuals.moonReflection === \"string\"\n ? customVisuals.moonReflection\n : defaults.moonReflection,\n starColor:\n typeof customVisuals.starColor === \"string\" ? customVisuals.starColor : defaults.starColor,\n ambientMist:\n typeof customVisuals.ambientMist === \"string\"\n ? customVisuals.ambientMist\n : defaults.ambientMist,\n reflectionStrength: readVisualNumber(\n customVisuals.reflectionStrength,\n defaults.reflectionStrength\n ),\n shadowAccent: readVisualNumber(customVisuals.shadowAccent, defaults.shadowAccent),\n waveAmplitude: readVisualNumber(customVisuals.waveAmplitude, defaults.waveAmplitude),\n waveDirection:\n customVisuals.waveDirection &&\n typeof customVisuals.waveDirection.x === \"number\" &&\n typeof customVisuals.waveDirection.z === \"number\"\n ? { x: customVisuals.waveDirection.x, z: customVisuals.waveDirection.z }\n : defaults.waveDirection,\n wavePhaseSpeed: readVisualNumber(customVisuals.wavePhaseSpeed, defaults.wavePhaseSpeed),\n wakeStrength: readVisualNumber(customVisuals.wakeStrength, defaults.wakeStrength),\n wakeLength: readVisualNumber(customVisuals.wakeLength, defaults.wakeLength),\n collisionRippleStrength: readVisualNumber(\n customVisuals.collisionRippleStrength,\n defaults.collisionRippleStrength\n ),\n waterNear: normalizeColorOverride(customVisuals.waterNear, defaults.waterNear),\n waterFar: normalizeColorOverride(customVisuals.waterFar, defaults.waterFar),\n harborWall: normalizeColorOverride(customVisuals.harborWall, defaults.harborWall),\n harborDeck: normalizeColorOverride(customVisuals.harborDeck, defaults.harborDeck),\n harborTower: normalizeColorOverride(customVisuals.harborTower, defaults.harborTower),\n flagColor: normalizeColorOverride(customVisuals.flagColor, defaults.flagColor),\n flagMotion: readVisualNumber(customVisuals.flagMotion, defaults.flagMotion),\n lanternCore: normalizeColorOverride(customVisuals.lanternCore, defaults.lanternCore),\n lanternGlow: normalizeColorOverride(customVisuals.lanternGlow, defaults.lanternGlow),\n lanternReflectionStrength: readVisualNumber(\n customVisuals.lanternReflectionStrength,\n defaults.lanternReflectionStrength\n ),\n torchCore: normalizeColorOverride(customVisuals.torchCore, defaults.torchCore),\n torchGlow: normalizeColorOverride(customVisuals.torchGlow, defaults.torchGlow),\n collisionFlash:\n typeof customVisuals.collisionFlash === \"string\"\n ? customVisuals.collisionFlash\n : defaults.collisionFlash,\n };\n}\n\nfunction buildClothSurface(model, state, meshDetail, visuals, clothFeatures) {\n const resolvedClothFeatures = normalizeClothFeatureAdapters(clothFeatures);\n const clothPresentation = resolveClothPresentation(state, meshDetail, resolvedClothFeatures);\n const clothState = ensureShowcaseClothState(state, meshDetail, clothPresentation);\n\n return {\n clothPlan: clothPresentation.clothPlan,\n band: clothPresentation.band,\n representation: clothPresentation.representation,\n continuity: clothPresentation.continuity,\n color: visuals.flagColor,\n positions: clothState.positions.map((point) => vec3(point.x, point.y, point.z)),\n indices: clothState.indices,\n grid: { rows: clothState.rows, cols: clothState.cols },\n };\n}\n\nfunction resolveWaveDirection(state) {\n const direction = state.demoVisuals?.waveDirection;\n if (\n direction &&\n typeof direction === \"object\" &&\n typeof direction.x === \"number\" &&\n typeof direction.z === \"number\"\n ) {\n return normalizeVec3(vec3(direction.x, 0, direction.z));\n }\n\n return normalizeVec3(vec3(0.86, 0, 0.34));\n}\n\nfunction sampleShipWake(state, x, z, time) {\n const wakeStrength = readVisualNumber(state.demoVisuals?.wakeStrength, 0.24);\n const wakeLength = readVisualNumber(state.demoVisuals?.wakeLength, 15);\n let total = 0;\n\n for (const ship of state.ships) {\n const speed = Math.hypot(ship.velocity.x, ship.velocity.z);\n if (speed <= 0.05) {\n continue;\n }\n\n const direction = normalizeVec3(vec3(ship.velocity.x, 0, ship.velocity.z));\n const behind = scaleVec3(direction, -1);\n const lateral = vec3(-direction.z, 0, direction.x);\n const delta = vec3(x - ship.position.x, 0, z - ship.position.z);\n const along = dotVec3(delta, behind);\n if (along < 0 || along > wakeLength) {\n continue;\n }\n\n const cross = Math.abs(dotVec3(delta, lateral));\n const width = 0.9 + along * 0.2;\n if (cross > width * 3.2) {\n continue;\n }\n\n const envelope =\n Math.exp(-along * 0.14) * Math.exp(-((cross * cross) / Math.max(0.4, width * width * 2.4)));\n total += Math.sin(along * 1.6 - time * 4.2) * speed * wakeStrength * envelope;\n }\n\n return total;\n}\n\nfunction sampleWaveImpulses(state, x, z, time) {\n const rippleStrength = readVisualNumber(state.demoVisuals?.collisionRippleStrength, 0.34);\n let total = 0;\n\n for (const impulse of state.waveImpulses) {\n const dx = x - impulse.x;\n const dz = z - impulse.z;\n const distance = Math.hypot(dx, dz);\n const radius = impulse.radius + (1 - impulse.life) * 4.8;\n if (distance > radius * 2.8) {\n continue;\n }\n\n const phase = distance * 1.8 - (1 - impulse.life) * 10 - time * 0.4;\n const envelope = Math.exp(-distance / Math.max(0.1, radius)) * impulse.life;\n total += Math.sin(phase) * impulse.strength * rippleStrength * envelope * 0.18;\n }\n\n return total;\n}\n\nfunction sampleWave(state, x, z, time) {\n const direction = resolveWaveDirection(state);\n const lateral = vec3(-direction.z, 0, direction.x);\n const along = x * direction.x + z * direction.z;\n const cross = x * lateral.x + z * lateral.z;\n const phaseSpeed = readVisualNumber(state.demoVisuals?.wavePhaseSpeed, 1);\n const amplitude = readVisualNumber(state.demoVisuals?.waveAmplitude, 1);\n const base =\n Math.sin(along * 0.22 - time * 1.12 * phaseSpeed) * 0.42 +\n Math.cos(along * 0.11 + cross * 0.07 - time * 0.78 * phaseSpeed) * 0.26 +\n Math.sin(cross * 0.19 - time * 1.34 * phaseSpeed) * 0.16;\n\n return (\n base * amplitude +\n sampleShipWake(state, x, z, time) +\n sampleWaveImpulses(state, x, z, time)\n );\n}\n\nfunction resolveFluidBandContinuity(continuity, band) {\n if (continuity?.bands && continuity.bands[band]) {\n return continuity.bands[band];\n }\n\n return continuity ?? { amplitudeFloor: 1, frequencyFloor: 1 };\n}\n\nfunction buildWaterMotionEffects(state) {\n const wakeTrails = [];\n const rippleRings = state.waveImpulses.map((impulse) => {\n const radius = impulse.radius + (1 - impulse.life) * 4.8;\n return Object.freeze({\n center: vec3(\n impulse.x,\n sampleWave(state, impulse.x, impulse.z, state.time) * 0.24 + 0.06,\n impulse.z\n ),\n radius,\n opacity: clamp(impulse.life * 0.28, 0.08, 0.3),\n });\n });\n\n for (const ship of state.ships) {\n const speed = Math.hypot(ship.velocity.x, ship.velocity.z);\n if (speed <= 0.18) {\n continue;\n }\n\n const direction = normalizeVec3(vec3(ship.velocity.x, 0, ship.velocity.z));\n const behind = scaleVec3(direction, -1);\n const lateral = vec3(-direction.z, 0, direction.x);\n const points = [];\n for (let sampleIndex = 0; sampleIndex < 6; sampleIndex += 1) {\n const along = 1 + sampleIndex * 1.45;\n const lateralOffset =\n Math.sin(state.time * 1.2 + sampleIndex * 0.8 + readVisualNumber(ship.wanderPhase, 0)) * 0.12;\n const worldPoint = addVec3(\n ship.position,\n addVec3(scaleVec3(behind, along), scaleVec3(lateral, lateralOffset))\n );\n points.push(\n Object.freeze({\n center: vec3(\n worldPoint.x,\n sampleWave(state, worldPoint.x, worldPoint.z, state.time) * 0.24 + 0.04,\n worldPoint.z\n ),\n width: 0.34 + sampleIndex * 0.13,\n })\n );\n }\n wakeTrails.push(\n Object.freeze({\n opacity: clamp(0.18 + speed * 0.09, 0.22, 0.46),\n points: Object.freeze(points),\n })\n );\n }\n\n return Object.freeze({\n wakeTrails: Object.freeze(wakeTrails),\n rippleRings: Object.freeze(rippleRings),\n });\n}\n\nfunction buildWaterBands(state, fluidDetail, visuals, fluidFeatures) {\n const resolvedFluidFeatures = normalizeFluidFeatureAdapters(fluidFeatures);\n const fluidPlan = resolvedFluidFeatures.createPlan({\n fluidBodyId: \"harbor\",\n kind: state.focus === \"fluid\" ? \"ocean\" : resolvedFluidFeatures.bodyKinds[0],\n profile: state.focus === \"fluid\" ? \"cinematic\" : resolvedFluidFeatures.profileNames[0],\n supportsRayTracing: true,\n nearFieldMaxMeters: 40,\n midFieldMaxMeters: 150,\n farFieldMaxMeters: 600,\n });\n\n const bandMeshes = [];\n const bandExtents = Object.freeze([\n { band: \"near\", width: 20, depth: 18, step: 1, y: 0.2 },\n { band: \"mid\", width: 34, depth: 28, step: 2, y: 0.05 },\n { band: \"far\", width: 54, depth: 42, step: 3.5, y: -0.05 },\n { band: \"horizon\", width: 80, depth: 76, step: 7, y: -0.14 },\n ]);\n\n for (const bandSpec of bandExtents) {\n const representation =\n fluidPlan.representations.find((entry) => entry.band === bandSpec.band) ??\n fluidPlan.representations[0];\n const continuity = resolvedFluidFeatures.createContinuityEnvelope({ fluidBodyId: \"harbor\" });\n const bandContinuity = resolveFluidBandContinuity(continuity, bandSpec.band);\n const bandResolution =\n bandSpec.band === \"near\"\n ? fluidDetail.nearResolution\n : bandSpec.band === \"mid\"\n ? fluidDetail.midResolution\n : bandSpec.band === \"far\"\n ? 5\n : 3;\n const cols = Math.max(4, bandResolution * 2);\n const rows = Math.max(4, bandResolution + 2);\n const positions = [];\n const indices = [];\n const originX = -bandSpec.width * 0.5;\n const originZ = -6;\n for (let row = 0; row < rows; row += 1) {\n for (let column = 0; column < cols; column += 1) {\n const u = column / (cols - 1);\n const v = row / (rows - 1);\n const x = originX + bandSpec.width * u;\n const z = originZ + bandSpec.depth * v;\n const y =\n bandSpec.y +\n sampleWave(state, x, z, state.time) *\n bandContinuity.amplitudeFloor *\n (bandSpec.band === \"near\" ? 0.9 : bandSpec.band === \"mid\" ? 0.55 : 0.3);\n positions.push(vec3(x, y, z));\n }\n }\n for (let row = 0; row < rows - 1; row += 1) {\n for (let column = 0; column < cols - 1; column += 1) {\n const a = row * cols + column;\n const b = a + 1;\n const c = a + cols + 1;\n const d = a + cols;\n indices.push(a, b, c, a, c, d);\n }\n }\n\n bandMeshes.push({\n band: bandSpec.band,\n representation,\n continuity: bandContinuity,\n rows,\n cols,\n positions,\n indices,\n color:\n bandSpec.band === \"near\"\n ? visuals.waterNear\n : bandSpec.band === \"mid\"\n ? {\n r: mix(visuals.waterNear.r, visuals.waterFar.r, 0.4),\n g: mix(visuals.waterNear.g, visuals.waterFar.g, 0.4),\n b: mix(visuals.waterNear.b, visuals.waterFar.b, 0.4),\n }\n : bandSpec.band === \"far\"\n ? visuals.waterFar\n : {\n r: mix(visuals.waterFar.r, 0.76, 0.2),\n g: mix(visuals.waterFar.g, 0.78, 0.2),\n b: mix(visuals.waterFar.b, 0.82, 0.2),\n },\n });\n }\n\n return { fluidPlan, bandMeshes };\n}\n\nfunction createSceneState(options, featureAdapters) {\n const translate = options.translate;\n const { governor, fluidDetail, clothDetail, lightingDetail } = createPerformanceGovernor(\n featureAdapters.performance\n );\n const physicsProfile = featureAdapters.physics.defaultProfile;\n const createPhysicsSimulationPlan = assertRequiredFunction(\n featureAdapters.physics,\n \"physics\",\n \"createSimulationPlan\"\n );\n const getPhysicsWorkerManifest = assertRequiredFunction(\n featureAdapters.physics,\n \"physics\",\n \"getManifest\"\n );\n const createGpuDebugSession = assertRequiredFunction(\n featureAdapters.debug,\n \"debug\",\n \"createSession\"\n );\n\n const physicsPlan = createPhysicsSimulationPlan(physicsProfile);\n const physicsManifest = getPhysicsWorkerManifest(physicsProfile);\n const debugSession = createGpuDebugSession({\n enabled: true,\n adapter: {\n label: translate(gpuSharedTranslationKeys.debugAdapterShowcase),\n memoryCapacityHintBytes: 6 * 1024 * 1024 * 1024,\n coreCountHint: 12,\n },\n });\n debugSession.trackAllocation({\n id: \"showcase.color\",\n owner: \"renderer\",\n category: \"texture\",\n sizeBytes: 1280 * 720 * 4,\n label: translate(gpuSharedTranslationKeys.debugMainColorBuffer),\n });\n debugSession.trackAllocation({\n id: \"showcase.shadow-impression\",\n owner: \"lighting\",\n category: \"texture\",\n sizeBytes: 12 * 1024 * 1024,\n label: translate(gpuSharedTranslationKeys.debugShadowImpressionAtlas),\n });\n\n return {\n translate,\n focus: options.focus,\n governor,\n fluidDetail,\n clothDetail,\n lightingDetail,\n debugSession,\n showcaseRealisticModelsEnabled: options.realisticModelsEnabled !== false,\n captureMode: options.captureMode === true,\n renderScale: readPositiveNumber(options.renderScale, undefined),\n packageState: undefined,\n demoDescription: null,\n demoVisuals: null,\n time: 0,\n lastTimeMs: null,\n paused: false,\n stress: false,\n camera: {\n ...CAMERA_PRESETS[options.focus],\n target: vec3(...CAMERA_PRESETS[options.focus].target),\n },\n ships: [\n {\n id: \"northwind\",\n modelKey: \"brigantine\",\n position: vec3(-5.2, 0, 7.2),\n velocity: vec3(2.35, 0, -1.08),\n rotationY: 0.58,\n angularVelocity: 0.09,\n tint: { r: 0.62, g: 0.39, b: 0.23 },\n massScale: 1.42,\n cruiseSpeed: 2.25,\n throttleResponse: 0.46,\n rudderResponse: 0.54,\n wanderPhase: 0.35,\n lanterns: CUTTER_LANTERNS,\n lanternStrength: 1.06,\n collisionRadiusScale: 1.04,\n },\n {\n id: \"tidecaller\",\n modelKey: \"cutter\",\n position: vec3(4.8, 0, 4.4),\n velocity: vec3(-2.15, 0, 1.74),\n rotationY: -2.48,\n angularVelocity: -0.2,\n tint: { r: 0.58, g: 0.24, b: 0.16 },\n massScale: 0.84,\n cruiseSpeed: 2.68,\n throttleResponse: 0.7,\n rudderResponse: 0.78,\n wanderPhase: 1.6,\n lanterns: SHIP_LANTERNS,\n lanternStrength: 1.18,\n collisionRadiusScale: 0.94,\n },\n ],\n sprays: [],\n waveImpulses: [],\n frame: 0,\n contactCount: 0,\n collisionCount: 0,\n collisionFlash: 0,\n clothState: null,\n physics: {\n profile: physicsProfile,\n plan: physicsPlan,\n manifest: physicsManifest,\n snapshot: null,\n },\n assetCatalog: null,\n shipModel: null,\n };\n}\n\nfunction setListContent(element, values) {\n element.innerHTML = values.map((value) => `<li>${value}</li>`).join(\"\");\n}\n\nfunction drawSkyAndShore(ctx, canvas, state, nearLighting, reflectionStrength, shadowStrength, visuals) {\n const sky = ctx.createLinearGradient(0, 0, 0, canvas.height * 0.5);\n sky.addColorStop(0, visuals.skyTop);\n sky.addColorStop(0.54, visuals.skyMid);\n sky.addColorStop(1, visuals.skyBottom);\n ctx.fillStyle = sky;\n ctx.fillRect(0, 0, canvas.width, canvas.height);\n\n for (let index = 0; index < 70; index += 1) {\n const x = pseudoRandom(index + 13) * canvas.width;\n const y = pseudoRandom(index * 7 + 5) * canvas.height * 0.42;\n const twinkle = 0.45 + Math.sin(state.time * 1.4 + index * 0.73) * 0.25;\n const radius = 0.6 + pseudoRandom(index * 11 + 2) * 1.9;\n ctx.fillStyle = visuals.starColor.replace(/[\\d.]+\\)$/u, `${clamp(twinkle, 0.16, 0.92)})`);\n ctx.beginPath();\n ctx.arc(x, y, radius, 0, Math.PI * 2);\n ctx.fill();\n }\n\n const horizonGlow = ctx.createLinearGradient(0, canvas.height * 0.22, 0, canvas.height * 0.62);\n horizonGlow.addColorStop(0, \"rgba(0, 0, 0, 0)\");\n horizonGlow.addColorStop(1, visuals.duskGlow);\n ctx.fillStyle = horizonGlow;\n ctx.fillRect(0, canvas.height * 0.2, canvas.width, canvas.height * 0.45);\n\n const shoreline = ctx.createLinearGradient(0, canvas.height * 0.45, 0, canvas.height);\n shoreline.addColorStop(0, visuals.seaTop);\n shoreline.addColorStop(0.52, visuals.seaMid);\n shoreline.addColorStop(1, visuals.seaBottom);\n ctx.fillStyle = shoreline;\n ctx.fillRect(0, canvas.height * 0.45, canvas.width, canvas.height * 0.55);\n\n const moonX = canvas.width * 0.76 + Math.sin(state.time * 0.045) * 18;\n const moonY = canvas.height * 0.17 + Math.cos(state.time * 0.05) * 10;\n const moon = ctx.createRadialGradient(moonX, moonY, 14, moonX, moonY, 126);\n moon.addColorStop(0, visuals.moonCore);\n moon.addColorStop(0.46, visuals.moonHalo);\n moon.addColorStop(1, \"rgba(167, 191, 255, 0)\");\n ctx.fillStyle = moon;\n ctx.beginPath();\n ctx.arc(moonX, moonY, 94, 0, Math.PI * 2);\n ctx.fill();\n\n const moonCore = ctx.createRadialGradient(moonX, moonY, 4, moonX, moonY, 28);\n moonCore.addColorStop(0, \"rgba(255, 255, 255, 0.98)\");\n moonCore.addColorStop(1, visuals.moonCore);\n ctx.fillStyle = moonCore;\n ctx.beginPath();\n ctx.arc(moonX, moonY, 24, 0, Math.PI * 2);\n ctx.fill();\n\n const track = ctx.createLinearGradient(moonX, canvas.height * 0.44, moonX, canvas.height * 0.98);\n track.addColorStop(0, visuals.moonReflection.replace(/[\\d.]+\\)$/u, `${0.08 + reflectionStrength * 0.12})`));\n track.addColorStop(0.42, visuals.moonReflection.replace(/[\\d.]+\\)$/u, `${0.04 + reflectionStrength * 0.18})`));\n track.addColorStop(1, \"rgba(192, 214, 255, 0)\");\n ctx.save();\n ctx.globalCompositeOperation = \"screen\";\n ctx.fillStyle = track;\n ctx.beginPath();\n ctx.ellipse(moonX, canvas.height * 0.75, 38 + shadowStrength * 42, canvas.height * 0.24, 0, 0, Math.PI * 2);\n ctx.fill();\n ctx.restore();\n\n const mist = ctx.createLinearGradient(0, canvas.height * 0.5, 0, canvas.height);\n mist.addColorStop(0, \"rgba(0, 0, 0, 0)\");\n mist.addColorStop(1, visuals.ambientMist);\n ctx.fillStyle = mist;\n ctx.fillRect(0, canvas.height * 0.45, canvas.width, canvas.height * 0.55);\n\n if (state.collisionFlash > 0.01) {\n ctx.fillStyle = visuals.collisionFlash.replace(\n /[\\d.]+\\)$/u,\n `${clamp(state.collisionFlash * 0.22, 0, 0.26)})`\n );\n ctx.fillRect(0, 0, canvas.width, canvas.height);\n }\n}\n\nfunction resolveLocalLightContribution(triangle, lightSources) {\n const contribution = { r: 0, g: 0, b: 0 };\n if (!Array.isArray(lightSources) || triangle.surfaceType === \"water\") {\n return contribution;\n }\n\n const normal = normalizeVec3(triangle.normal);\n for (const source of lightSources.slice(0, 8)) {\n const delta = subVec3(source.point, triangle.worldCenter);\n const distance = lengthVec3(delta);\n const attenuation =\n (source.glowScale ?? 1) / Math.max(1, 0.68 + distance * distance * 0.2);\n if (attenuation < 0.012) {\n continue;\n }\n\n const lightDir = normalizeVec3(delta);\n const facing = clamp(dotVec3(normal, lightDir), 0, 1);\n const response = attenuation * (0.18 + facing * 0.82);\n const glowColor = source.glowColor ?? source.coreColor ?? { r: 1, g: 0.72, b: 0.4 };\n contribution.r += glowColor.r * response * 0.32;\n contribution.g += glowColor.g * response * 0.26;\n contribution.b += glowColor.b * response * 0.18;\n }\n\n return contribution;\n}\n\nfunction drawTriangles(\n ctx,\n triangles,\n lightDir,\n reflectionStrength,\n camera,\n shadowStrength,\n localLights = []\n) {\n triangles.sort((left, right) => right.depth - left.depth);\n for (const triangle of triangles) {\n const surfaceNormal = normalizeVec3(triangle.normal);\n const material = triangle.material ?? {\n roughness: 0.88,\n metallic: 0.08,\n emissive: { r: 0, g: 0, b: 0 },\n };\n const shaded = shadeColor(\n triangle.baseColor,\n surfaceNormal,\n lightDir,\n clamp((triangle.worldCenter.y + 3) / 10, 0, 1),\n triangle.accent\n );\n const reflection = reflectionStrength * (triangle.reflection ?? 0);\n const viewDir = normalizeVec3(subVec3(camera.eye, triangle.worldCenter));\n const reflectedLight = reflectVec3(scaleVec3(lightDir, -1), surfaceNormal);\n const gloss = mix(0.78, 0.14, clamp(material.roughness ?? 0.88, 0, 1)) + (material.metallic ?? 0) * 0.18;\n const specularPower = mix(26, 7, clamp(material.roughness ?? 0.88, 0, 1));\n const specular =\n Math.pow(clamp(dotVec3(reflectedLight, viewDir), 0, 1), specularPower) * gloss;\n const emissive = material.emissive ?? { r: 0, g: 0, b: 0 };\n const localLight = resolveLocalLightContribution(triangle, localLights);\n const occlusion = triangle.surfaceType === \"water\" ? shadowStrength * 0.018 : shadowStrength * 0.04;\n const detailed = applyMaterialDetail(\n {\n r: clamp(\n shaded.r + reflection * 0.08 + specular * 0.16 + emissive.r * 0.42 + localLight.r - occlusion,\n 0,\n 1\n ),\n g: clamp(\n shaded.g + reflection * 0.08 + specular * 0.16 + emissive.g * 0.42 + localLight.g - occlusion,\n 0,\n 1\n ),\n b: clamp(\n shaded.b + reflection * 0.16 + specular * 0.22 + emissive.b * 0.46 + localLight.b - occlusion * 0.5,\n 0,\n 1\n ),\n },\n material,\n triangle.worldCenter,\n surfaceNormal,\n triangle.surfaceType\n );\n const fill = colorToRgba(\n detailed,\n triangle.baseColor.a ?? 0.98\n );\n ctx.fillStyle = fill;\n ctx.beginPath();\n ctx.moveTo(triangle.points[0].x, triangle.points[0].y);\n ctx.lineTo(triangle.points[1].x, triangle.points[1].y);\n ctx.lineTo(triangle.points[2].x, triangle.points[2].y);\n ctx.closePath();\n ctx.fill();\n }\n}\n\nfunction renderProjectedShadow(ctx, worldPoints, camera, viewport, lightDir, options = {}) {\n const planeY = options.planeY ?? 0;\n const projected = worldPoints\n .map((point) => projectShadowPoint(point, lightDir, planeY))\n .filter(Boolean)\n .map((point) => projectPoint(point, camera, viewport))\n .filter(Boolean);\n\n if (projected.length < 3) {\n return;\n }\n\n ctx.save();\n ctx.globalCompositeOperation = \"multiply\";\n ctx.fillStyle = options.color ?? `rgba(12, 24, 36, ${clamp(options.alpha ?? 0.16, 0, 0.5)})`;\n ctx.shadowColor = options.color ?? \"rgba(12, 24, 36, 0.22)\";\n ctx.shadowBlur = options.blur ?? 18;\n ctx.beginPath();\n ctx.moveTo(projected[0].x, projected[0].y);\n for (let index = 1; index < projected.length; index += 1) {\n ctx.lineTo(projected[index].x, projected[index].y);\n }\n ctx.closePath();\n ctx.fill();\n ctx.restore();\n}\n\nfunction pushHarborGeometry(camera, viewport, triangles, state) {\n if (!state.showcaseRealisticModelsEnabled) {\n for (const object of LEGACY_HARBOR_LAYOUT) {\n buildTrianglesFromMesh(\n { positions: [object], indices: [0], normals: null, colors: null, material: createLegacyMeshPrimitive({})?.material, bounds: null, name: \"legacy-structure\" },\n {\n position: object.position,\n rotationY: object.rotationY,\n scale: object.scale,\n },\n object.color,\n camera,\n viewport,\n triangles,\n {\n accent: object.accent,\n reflection: 0,\n surfaceType: \"structure\",\n }\n );\n }\n\n return;\n }\n\n for (const placement of SHOWCASE_ENVIRONMENT_LAYOUT) {\n const mesh = state.assetCatalog?.environment?.[placement.assetKey] ?? null;\n if (!mesh) {\n continue;\n }\n\n buildTrianglesFromMesh(\n mesh,\n {\n position: vec3(placement.position.x, placement.position.y, placement.position.z),\n rotationY: placement.rotationY,\n scale: placement.scale,\n },\n null,\n camera,\n viewport,\n triangles,\n {\n accent: placement.accent,\n reflection: 0,\n surfaceType: \"structure\",\n }\n );\n }\n}\n\nfunction renderShipRigging(ctx, ship, camera, viewport) {\n const transform = { position: ship.position, rotationY: ship.rotationY, scale: SHIP_SCALE };\n const layout =\n ship.modelKey === \"cutter\"\n ? {\n lineColor: \"rgba(85, 89, 97, 0.92)\",\n sailColor: \"rgba(218, 232, 244, 0.28)\",\n points: [\n vec3(0, 0.88, -0.32),\n vec3(0, 2.4, -0.28),\n vec3(0.1, 1.92, -0.3),\n vec3(1.18, 1.72, -0.18),\n vec3(1.04, 1.08, -0.12),\n ],\n mastPairs: [[0, 1], [2, 3]],\n sailTriangle: [2, 3, 4],\n }\n : {\n lineColor: \"rgba(73, 54, 45, 0.94)\",\n sailColor: \"rgba(238, 232, 214, 0.88)\",\n points: [\n vec3(0, 0.38, -0.4),\n vec3(0, 3.8, -0.2),\n vec3(-0.25, 0.32, -1.9),\n vec3(-0.15, 2.7, -1.75),\n vec3(0.08, 3.2, -0.2),\n vec3(0.12, 1.2, -0.5),\n vec3(2.25, 2.25, 0.15),\n ],\n mastPairs: [[0, 1], [2, 3]],\n sailTriangle: [4, 5, 6],\n };\n const projected = layout.points\n .map((point) => transformPoint(point, transform))\n .map((point) => projectPoint(point, camera, viewport));\n if (projected.some((value) => value === null)) {\n return;\n }\n\n ctx.strokeStyle = layout.lineColor;\n ctx.lineWidth = ship.modelKey === \"cutter\" ? 2.2 : 3.5;\n ctx.beginPath();\n for (const [from, to] of layout.mastPairs) {\n ctx.moveTo(projected[from].x, projected[from].y);\n ctx.lineTo(projected[to].x, projected[to].y);\n }\n ctx.stroke();\n\n const [a, b, c] = layout.sailTriangle;\n ctx.fillStyle = layout.sailColor;\n ctx.beginPath();\n ctx.moveTo(projected[a].x, projected[a].y);\n ctx.lineTo(projected[b].x, projected[b].y);\n ctx.lineTo(projected[c].x, projected[c].y);\n ctx.closePath();\n ctx.fill();\n}\n\nfunction renderClothAccent(ctx, cloth, camera, viewport) {\n const projected = cloth.positions.map((point) => projectPoint(point, camera, viewport));\n ctx.strokeStyle = \"rgba(255, 241, 226, 0.92)\";\n ctx.lineWidth = 1.7;\n\n for (\n let row = 0;\n row < cloth.grid.rows;\n row += Math.max(1, Math.floor(cloth.grid.rows / 5))\n ) {\n ctx.beginPath();\n let started = false;\n for (let column = 0; column < cloth.grid.cols; column += 1) {\n const point = projected[row * cloth.grid.cols + column];\n if (!point) {\n continue;\n }\n if (!started) {\n ctx.moveTo(point.x, point.y);\n started = true;\n } else {\n ctx.lineTo(point.x, point.y);\n }\n }\n if (started) {\n ctx.stroke();\n }\n }\n\n const borderIndices = [\n 0,\n cloth.grid.cols - 1,\n cloth.grid.rows * cloth.grid.cols - 1,\n (cloth.grid.rows - 1) * cloth.grid.cols,\n ];\n ctx.fillStyle = colorToRgba(cloth.color, 0.95);\n for (const index of borderIndices) {\n const point = projected[index];\n if (!point) {\n continue;\n }\n ctx.beginPath();\n ctx.arc(point.x, point.y, 2.8, 0, Math.PI * 2);\n ctx.fill();\n }\n}\n\nfunction renderWaterHighlights(ctx, waterBands, camera, viewport) {\n for (const band of waterBands) {\n if (band.band === \"horizon\") {\n continue;\n }\n const interval = band.band === \"near\" ? 2 : 3;\n const alpha = band.band === \"near\" ? 0.22 : 0.14;\n ctx.strokeStyle = `rgba(232, 247, 255, ${alpha})`;\n ctx.lineWidth = band.band === \"near\" ? 1.3 : 0.9;\n for (let row = interval; row < band.rows - 1; row += interval) {\n ctx.beginPath();\n let started = false;\n for (let column = 0; column < band.cols; column += 1) {\n const point = projectPoint(\n band.positions[row * band.cols + column],\n camera,\n viewport\n );\n if (!point) {\n continue;\n }\n if (!started) {\n ctx.moveTo(point.x, point.y);\n started = true;\n } else {\n ctx.lineTo(point.x, point.y);\n }\n }\n if (started) {\n ctx.stroke();\n }\n }\n }\n}\n\nfunction readPhysicsNumber(physics, key, fallback) {\n const value = physics?.[key];\n return typeof value === \"number\" && Number.isFinite(value) ? value : fallback;\n}\n\nfunction getShipMass(ship, shipModel) {\n const baseMass = readPhysicsNumber(shipModel.physics, \"mass\", 3200);\n return baseMass * readVisualNumber(ship.massScale, 1);\n}\n\nfunction getShipHalfExtents(ship, shipModel) {\n const physicsHalfExtents = Array.isArray(shipModel.physics.halfExtents)\n ? shipModel.physics.halfExtents\n : [1.35, 0.95, 3.9];\n const scale = SHIP_SCALE * readVisualNumber(ship.collisionRadiusScale, 1);\n return {\n x: physicsHalfExtents[0] * scale,\n y: physicsHalfExtents[1] * scale,\n z: physicsHalfExtents[2] * scale,\n };\n}\n\nfunction getShipCollisionRadius(ship, shipModel) {\n const halfExtents = getShipHalfExtents(ship, shipModel);\n return Math.max(halfExtents.x * 1.08, halfExtents.z * 0.62);\n}\n\nfunction getShipInverseMass(ship, shipModel) {\n return 1 / Math.max(1, getShipMass(ship, shipModel));\n}\n\nfunction getShipInverseInertia(ship, shipModel) {\n const radius = getShipCollisionRadius(ship, shipModel);\n const inertia = getShipMass(ship, shipModel) * radius * radius * 0.72;\n return 1 / Math.max(1, inertia);\n}\n\nfunction spawnSpray(state, point, intensity) {\n const count = state.fluidDetail.getSnapshot().currentLevel.config.splashCount;\n for (let index = 0; index < count; index += 1) {\n const angle = (index / count) * Math.PI * 2;\n const speed = 0.9 + Math.random() * intensity * 0.45;\n state.sprays.push({\n position: vec3(point.x, point.y, point.z),\n velocity: vec3(Math.cos(angle) * speed * 0.35, 1.1 + Math.random() * 0.8, Math.sin(angle) * speed * 0.25),\n life: 1.2 + Math.random() * 0.4,\n });\n }\n}\n\nfunction resolveShipRoute(ship, state, radius) {\n if (typeof ship.routeDirection !== \"number\") {\n ship.routeDirection = ship.velocity.x >= 0 ? 1 : -1;\n }\n\n if (ship.position.x > HARBOR_BOUNDS.maxX - radius * 1.1) {\n ship.routeDirection = -1;\n } else if (ship.position.x < HARBOR_BOUNDS.minX + radius * 1.1) {\n ship.routeDirection = 1;\n }\n\n const wander = Math.sin(state.time * 0.22 + readVisualNumber(ship.wanderPhase, 0));\n const crossCurrent = Math.cos(state.time * 0.31 + readVisualNumber(ship.wanderPhase, 0));\n const laneCenter =\n ship.id === \"northwind\"\n ? 10.2 + wander * 2.1 + crossCurrent * 0.6\n : 7 + wander * 3.3 - crossCurrent * 1.1;\n const targetX =\n ship.routeDirection > 0\n ? HARBOR_BOUNDS.maxX - radius * 1.7\n : HARBOR_BOUNDS.minX + radius * 1.7;\n return vec3(targetX, 0, clamp(laneCenter, HARBOR_BOUNDS.minZ + 1.8, HARBOR_BOUNDS.maxZ - 1.8));\n}\n\nfunction updateShipMotion(state, ship, dt, shipModel) {\n const physics = shipModel.physics;\n const massScale = Math.max(0.55, readVisualNumber(ship.massScale, 1));\n const radius = getShipCollisionRadius(ship, shipModel);\n const waterline = readPhysicsNumber(physics, \"waterline\", 0.42);\n const linearDamping = readPhysicsNumber(physics, \"linearDamping\", 0.04);\n const angularDamping = readPhysicsNumber(physics, \"angularDamping\", 0.08);\n const throttleResponse = readVisualNumber(ship.throttleResponse, 0.58);\n const rudderResponse = readVisualNumber(ship.rudderResponse, 0.62);\n const cruiseSpeed = readVisualNumber(ship.cruiseSpeed, 2.4);\n\n ship.collisionCooldown = Math.max(0, readVisualNumber(ship.collisionCooldown, 0) - dt);\n\n const forward = directionFromYaw(ship.rotationY);\n const lateral = perpendicularOnWater(forward);\n const routeTarget = resolveShipRoute(ship, state, radius);\n const desiredHeading = Math.atan2(routeTarget.x - ship.position.x, routeTarget.z - ship.position.z);\n const headingError = Math.atan2(\n Math.sin(desiredHeading - ship.rotationY),\n Math.cos(desiredHeading - ship.rotationY)\n );\n ship.angularVelocity +=\n headingError * rudderResponse * dt * (1.18 / Math.sqrt(massScale)) +\n Math.sin(state.time * 0.9 + readVisualNumber(ship.wanderPhase, 0)) * dt * 0.04;\n\n const waveDirection = resolveWaveDirection(state);\n const forwardSpeed = dotVec3(ship.velocity, forward);\n const lateralSpeed = dotVec3(ship.velocity, lateral);\n const thrust = (cruiseSpeed - forwardSpeed) * throttleResponse;\n const currentDrift = sampleWave(state, ship.position.x, ship.position.z, state.time) * 0.016;\n const acceleration = addVec3(\n scaleVec3(forward, thrust),\n addVec3(\n scaleVec3(lateral, -lateralSpeed * (1.28 + rudderResponse * 0.4)),\n scaleVec3(waveDirection, currentDrift / Math.sqrt(massScale))\n )\n );\n\n ship.velocity = addVec3(ship.velocity, scaleVec3(acceleration, dt));\n ship.velocity = scaleVec3(\n ship.velocity,\n Math.max(0, 1 - (linearDamping / Math.pow(massScale, 0.22)) * dt)\n );\n ship.angularVelocity *= Math.max(\n 0,\n 1 - (angularDamping / Math.pow(massScale, 0.15)) * dt\n );\n ship.rotationY += ship.angularVelocity * dt;\n ship.position = addVec3(ship.position, scaleVec3(ship.velocity, dt));\n ship.position.y =\n sampleWave(state, ship.position.x, ship.position.z, state.time) * 0.24 + waterline;\n}\n\nfunction resolveBoundaryCollision(ship, state, shipModel) {\n const restitution = readPhysicsNumber(shipModel.physics, \"restitution\", 0.22) * 0.56;\n const radius = getShipCollisionRadius(ship, shipModel);\n const boundaries = [\n { axis: \"x\", min: HARBOR_BOUNDS.minX + radius, max: HARBOR_BOUNDS.maxX - radius, normalMin: vec3(1, 0, 0), normalMax: vec3(-1, 0, 0) },\n { axis: \"z\", min: HARBOR_BOUNDS.minZ + radius, max: HARBOR_BOUNDS.maxZ - radius, normalMin: vec3(0, 0, 1), normalMax: vec3(0, 0, -1) },\n ];\n\n for (const boundary of boundaries) {\n if (ship.position[boundary.axis] < boundary.min) {\n ship.position[boundary.axis] = boundary.min;\n const normal = boundary.normalMin;\n const speedIntoWall = dotVec3(ship.velocity, normal);\n if (speedIntoWall < 0) {\n ship.velocity = subVec3(\n ship.velocity,\n scaleVec3(normal, (1 + restitution) * speedIntoWall)\n );\n const tangent = vec3(-normal.z, 0, normal.x);\n const tangentSpeed = dotVec3(ship.velocity, tangent);\n ship.velocity = subVec3(ship.velocity, scaleVec3(tangent, tangentSpeed * 0.12));\n ship.angularVelocity += tangentSpeed * 0.004;\n }\n } else if (ship.position[boundary.axis] > boundary.max) {\n ship.position[boundary.axis] = boundary.max;\n const normal = boundary.normalMax;\n const speedIntoWall = dotVec3(ship.velocity, normal);\n if (speedIntoWall < 0) {\n ship.velocity = subVec3(\n ship.velocity,\n scaleVec3(normal, (1 + restitution) * speedIntoWall)\n );\n const tangent = vec3(-normal.z, 0, normal.x);\n const tangentSpeed = dotVec3(ship.velocity, tangent);\n ship.velocity = subVec3(ship.velocity, scaleVec3(tangent, tangentSpeed * 0.12));\n ship.angularVelocity += tangentSpeed * 0.004;\n }\n }\n }\n}\n\nfunction resolveShipCollision(state, a, b, shipModelA, shipModelB) {\n const delta = subVec3(b.position, a.position);\n const radiusA = getShipCollisionRadius(a, shipModelA);\n const radiusB = getShipCollisionRadius(b, shipModelB);\n const distance = Math.hypot(delta.x, delta.z);\n const minDistance = radiusA + radiusB;\n if (distance >= minDistance) {\n return false;\n }\n\n const normal =\n distance > 0.0001\n ? normalizeVec3(vec3(delta.x / distance, 0, delta.z / distance))\n : normalizeVec3(vec3(Math.cos(state.time * 5.2), 0, Math.sin(state.time * 4.8)));\n const tangent = vec3(-normal.z, 0, normal.x);\n const penetration = minDistance - distance;\n const invMassA = getShipInverseMass(a, shipModelA);\n const invMassB = getShipInverseMass(b, shipModelB);\n const invMassSum = invMassA + invMassB;\n const correction = scaleVec3(normal, (penetration / Math.max(0.0001, invMassSum)) * 0.72);\n a.position = subVec3(a.position, scaleVec3(correction, invMassA));\n b.position = addVec3(b.position, scaleVec3(correction, invMassB));\n\n const relativeVelocity = subVec3(b.velocity, a.velocity);\n const velocityAlongNormal = dotVec3(relativeVelocity, normal);\n const restitution =\n ((readPhysicsNumber(shipModelA.physics, \"restitution\", 0.22) +\n readPhysicsNumber(shipModelB.physics, \"restitution\", 0.22)) /\n 2) *\n 0.88;\n if (velocityAlongNormal < 0) {\n const impulseMagnitude =\n (-(1 + restitution) * velocityAlongNormal) / Math.max(0.0001, invMassSum);\n const impulse = scaleVec3(normal, impulseMagnitude);\n a.velocity = subVec3(a.velocity, scaleVec3(impulse, invMassA));\n b.velocity = addVec3(b.velocity, scaleVec3(impulse, invMassB));\n\n const tangentSpeed = dotVec3(relativeVelocity, tangent);\n const frictionMagnitude = clamp(\n (-tangentSpeed / Math.max(0.0001, invMassSum)),\n -impulseMagnitude * 0.16,\n impulseMagnitude * 0.16\n );\n const frictionImpulse = scaleVec3(tangent, frictionMagnitude);\n a.velocity = subVec3(a.velocity, scaleVec3(frictionImpulse, invMassA));\n b.velocity = addVec3(b.velocity, scaleVec3(frictionImpulse, invMassB));\n\n a.angularVelocity -=\n tangentSpeed * radiusA * getShipInverseInertia(a, shipModelA) * 0.2 +\n impulseMagnitude * 0.00024;\n b.angularVelocity +=\n tangentSpeed * radiusB * getShipInverseInertia(b, shipModelB) * 0.2 +\n impulseMagnitude * 0.00024;\n\n const impactSpeed = Math.abs(velocityAlongNormal);\n if (\n impactSpeed > 0.18 &&\n Math.max(readVisualNumber(a.collisionCooldown, 0), readVisualNumber(b.collisionCooldown, 0)) <= 0\n ) {\n const contactPoint = vec3(\n (a.position.x + b.position.x) * 0.5,\n (a.position.y + b.position.y) * 0.5 + 0.14,\n (a.position.z + b.position.z) * 0.5\n );\n spawnSpray(state, contactPoint, impactSpeed * 2.4 + penetration * 8);\n state.waveImpulses.push({\n x: contactPoint.x,\n z: contactPoint.z,\n strength: clamp(0.24 + impactSpeed * 0.46 + penetration * 0.9, 0.2, 1.7),\n radius: 0.9 + penetration * 1.4,\n life: 1,\n });\n state.collisionCount += 1;\n state.collisionFlash = Math.max(\n state.collisionFlash,\n clamp(impactSpeed * 0.55 + penetration * 1.8, 0.16, 1)\n );\n a.collisionCooldown = 0.2;\n b.collisionCooldown = 0.2;\n }\n }\n\n state.contactCount += 1;\n return true;\n}\n\nfunction updateShips(state, dt, shipModel) {\n let collided = false;\n state.contactCount = 0;\n\n for (const ship of state.ships) {\n const activeShipModel = resolveShipModel(state, ship, shipModel);\n updateShipMotion(state, ship, dt, activeShipModel);\n resolveBoundaryCollision(ship, state, activeShipModel);\n }\n\n for (let index = 0; index < state.ships.length; index += 1) {\n for (let otherIndex = index + 1; otherIndex < state.ships.length; otherIndex += 1) {\n const shipA = state.ships[index];\n const shipB = state.ships[otherIndex];\n const shipModelA = resolveShipModel(state, shipA, shipModel);\n const shipModelB = resolveShipModel(state, shipB, shipModel);\n collided =\n resolveShipCollision(state, shipA, shipB, shipModelA, shipModelB) ||\n collided;\n }\n }\n\n state.collisionFlash = collided\n ? Math.max(0.12, state.collisionFlash)\n : Math.max(0, state.collisionFlash - dt * 1.3);\n}\n\nfunction updateWaveImpulses(state, dt) {\n state.waveImpulses = state.waveImpulses\n .map((impulse) => ({\n ...impulse,\n life: impulse.life - dt * 0.55,\n }))\n .filter((impulse) => impulse.life > 0);\n}\n\nfunction updateSpray(state, dt) {\n state.sprays = state.sprays\n .map((particle) => {\n const nextVelocity = vec3(particle.velocity.x, particle.velocity.y - 4.2 * dt, particle.velocity.z);\n const nextPosition = addVec3(particle.position, scaleVec3(nextVelocity, dt));\n return {\n position: nextPosition,\n velocity: nextVelocity,\n life: particle.life - dt,\n };\n })\n .filter((particle) => particle.life > 0 && particle.position.y > -0.2);\n}\n\nfunction recordTelemetry(state, frameTimeMs) {\n const frameId = `showcase-${state.frame}`;\n const quality = {\n fluid: state.fluidDetail.getSnapshot(),\n cloth: state.clothDetail.getSnapshot(),\n lighting: state.lightingDetail.getSnapshot(),\n };\n const synthetic = frameTimeMs + state.sprays.length * 0.1 + (state.stress ? 6.5 : 0);\n const decision = state.governor.recordFrame({ frameTimeMs: synthetic });\n const queueDepth = Math.min(32, Math.round(6 + state.sprays.length / 2 + (state.stress ? 10 : 0)));\n const readyLaneDepth = Math.min(\n 16,\n 4 + Math.round(Math.max(0, Math.sin(state.time * 1.7 + 0.8)) * 9)\n );\n state.debugSession.recordQueue({\n owner: \"renderer\",\n queueClass: \"render\",\n depth: queueDepth,\n capacity: 32,\n frameId,\n });\n state.debugSession.recordReadyLane({\n owner: \"lighting\",\n queueClass: \"lighting\",\n laneId: \"critical\",\n priority: 920,\n depth: readyLaneDepth,\n capacity: 16,\n frameId,\n });\n state.debugSession.recordDispatch({\n owner: \"lighting\",\n queueClass: \"lighting\",\n jobType: \"lighting.integration\",\n frameId,\n durationMs: quality.lighting.currentLevel.estimatedCostMs ?? 1.2,\n workgroups: { x: quality.fluid.currentLevel.config.nearResolution, y: 1, z: 1 },\n workgroupSize: { x: 8, y: 8, z: 1 },\n });\n state.debugSession.recordDependencyUnlock({\n owner: \"scene\",\n queueClass: \"render\",\n sourceJobType: \"physics.resolve\",\n unlockedJobType: \"lighting.integration\",\n priority: 920,\n unlockCount: 2 + Math.round(Math.max(0, Math.sin(state.time * 1.1)) * 4),\n frameId,\n });\n state.debugSession.recordPipelinePhase({\n owner: \"scene\",\n pipeline: \"scene-preparation\",\n stage: \"stable-visual-snapshot\",\n frameId,\n durationMs: synthetic * 0.38,\n snapshotAgeMs: Math.max(0, synthetic - 8),\n });\n state.debugSession.recordFrame({\n frameId,\n frameTimeMs: synthetic,\n targetFrameTimeMs: 16.67,\n gpuBusyMs: synthetic * 0.56,\n dropped: synthetic > 18,\n });\n return decision;\n}\n\nfunction renderSprays(ctx, sprays, camera, viewport) {\n for (const spray of sprays) {\n const projected = projectPoint(spray.position, camera, viewport);\n if (!projected) {\n continue;\n }\n const radius = clamp((1 / projected.depth) * 260, 1.5, 7.5);\n ctx.fillStyle = `rgba(225, 243, 250, ${clamp(spray.life / 1.6, 0, 0.9)})`;\n ctx.beginPath();\n ctx.arc(projected.x, projected.y, radius, 0, Math.PI * 2);\n ctx.fill();\n }\n}\n\nfunction renderFlagPole(ctx, camera, viewport) {\n const base = projectPoint(vec3(-3.5, 0.7, 2.4), camera, viewport);\n const top = projectPoint(vec3(-3.5, 6.3, 2.4), camera, viewport);\n if (!base || !top) {\n return;\n }\n ctx.strokeStyle = \"rgba(77, 52, 41, 0.95)\";\n ctx.lineWidth = 6;\n ctx.beginPath();\n ctx.moveTo(base.x, base.y);\n ctx.lineTo(top.x, top.y);\n ctx.stroke();\n}\n\nfunction renderShipShadow(ctx, shipModel, ship, state, camera, viewport, lightDir, shadowStrength) {\n const bounds = shipModel.bounds;\n const keelY = (shipModel.physics.waterline ?? 0.42) - 0.28;\n const transform = { position: ship.position, rotationY: ship.rotationY, scale: SHIP_SCALE };\n const hullCorners = [\n vec3(bounds.min[0], keelY, bounds.min[2]),\n vec3(bounds.max[0], keelY, bounds.min[2]),\n vec3(bounds.max[0], keelY, bounds.max[2]),\n vec3(bounds.min[0], keelY, bounds.max[2]),\n ].map((point) => transformPoint(point, transform));\n\n renderProjectedShadow(ctx, hullCorners, camera, viewport, lightDir, {\n planeY: sampleWave(state, ship.position.x, ship.position.z, state.time) * 0.24 - 0.03,\n alpha: 0.08 + shadowStrength * 0.2,\n blur: 14 + shadowStrength * 24,\n });\n}\n\nfunction renderFlagShadow(ctx, cloth, camera, viewport, lightDir, shadowStrength) {\n const clothPoints = [\n cloth.positions[0],\n cloth.positions[cloth.grid.cols - 1],\n cloth.positions[cloth.positions.length - 1],\n cloth.positions[cloth.positions.length - cloth.grid.cols],\n ];\n\n renderProjectedShadow(ctx, clothPoints, camera, viewport, lightDir, {\n planeY: 0.56,\n alpha: 0.05 + shadowStrength * 0.16,\n blur: 12 + shadowStrength * 20,\n });\n}\n\nfunction collectSceneLightSources(state, visuals) {\n const directLights = [];\n const reflectionLights = [];\n const pushLight = (point, glowScale, reflectionStrength, coreColor, glowColor) => {\n directLights.push(\n Object.freeze({\n pass: \"direct-glow\",\n point,\n coreColor,\n glowColor,\n glowScale,\n })\n );\n if (reflectionStrength > 0) {\n reflectionLights.push(\n Object.freeze({\n pass: \"water-reflection\",\n point,\n coreColor,\n glowColor,\n glowScale,\n reflectionStrength,\n })\n );\n }\n };\n\n for (const torch of HARBOR_TORCHES) {\n pushLight(\n vec3(torch.x, torch.y, torch.z),\n torch.glow,\n visuals.lanternReflectionStrength * 0.55,\n visuals.torchCore,\n visuals.torchGlow\n );\n }\n\n for (const ship of state.ships) {\n const lanterns = Array.isArray(ship.lanterns) ? ship.lanterns : SHIP_LANTERNS;\n const strength = readVisualNumber(ship.lanternStrength, 1);\n for (const lantern of lanterns) {\n const point = transformPoint(\n vec3(lantern.x, lantern.y, lantern.z),\n { position: ship.position, rotationY: ship.rotationY, scale: SHIP_SCALE }\n );\n pushLight(\n point,\n lantern.glow * strength,\n visuals.lanternReflectionStrength,\n visuals.lanternCore,\n visuals.lanternGlow\n );\n }\n }\n\n return Object.freeze({\n directLights: Object.freeze(directLights),\n reflectionLights: Object.freeze(reflectionLights),\n });\n}\n\nfunction renderDirectLightGlow(ctx, source, camera, viewport) {\n const projected = projectPoint(source.point, camera, viewport);\n if (!projected) {\n return;\n }\n\n const radius = clamp((1 / projected.depth) * 420 * source.glowScale, 4, 34);\n const halo = ctx.createRadialGradient(projected.x, projected.y, radius * 0.12, projected.x, projected.y, radius);\n halo.addColorStop(0, colorToRgba(source.coreColor, 0.98));\n halo.addColorStop(0.5, colorToRgba(source.glowColor, 0.42));\n halo.addColorStop(1, colorToRgba(source.glowColor, 0));\n ctx.save();\n ctx.globalCompositeOperation = \"screen\";\n ctx.fillStyle = halo;\n ctx.beginPath();\n ctx.arc(projected.x, projected.y, radius, 0, Math.PI * 2);\n ctx.fill();\n ctx.restore();\n\n ctx.fillStyle = colorToRgba(source.coreColor, 0.98);\n ctx.beginPath();\n ctx.arc(projected.x, projected.y, Math.max(1.2, radius * 0.16), 0, Math.PI * 2);\n ctx.fill();\n}\n\nfunction renderWaterLightReflection(ctx, source, state, camera, viewport) {\n const projected = projectPoint(source.point, camera, viewport);\n if (!projected) {\n return;\n }\n\n const radius = clamp((1 / projected.depth) * 420 * source.glowScale, 4, 34);\n const waterline = sampleWave(state, source.point.x, source.point.z, state.time) * 0.22;\n const reflectedPoint = vec3(\n source.point.x,\n waterline - (source.point.y - waterline) * 0.58,\n source.point.z + 0.08\n );\n const reflected = projectPoint(reflectedPoint, camera, viewport);\n if (!reflected) {\n return;\n }\n\n const reflectionRadius = radius * 0.72;\n const glow = ctx.createRadialGradient(\n reflected.x,\n reflected.y,\n reflectionRadius * 0.1,\n reflected.x,\n reflected.y,\n reflectionRadius\n );\n glow.addColorStop(0, colorToRgba(source.coreColor, source.reflectionStrength * 0.34));\n glow.addColorStop(1, colorToRgba(source.glowColor, 0));\n ctx.save();\n ctx.globalCompositeOperation = \"screen\";\n ctx.fillStyle = glow;\n ctx.beginPath();\n ctx.ellipse(\n reflected.x,\n reflected.y,\n reflectionRadius * 0.34,\n reflectionRadius,\n 0,\n 0,\n Math.PI * 2\n );\n ctx.fill();\n ctx.restore();\n}\n\nfunction renderLighthouseBeam(ctx, state, camera, viewport, visuals) {\n const lighthousePlacement = SHOWCASE_ENVIRONMENT_LAYOUT.find(\n (placement) => placement.assetKey === \"lighthouse\"\n );\n if (!lighthousePlacement || !state.showcaseRealisticModelsEnabled) {\n return;\n }\n\n const source = transformPoint(\n vec3(0, 11.34, 0),\n {\n position: vec3(\n lighthousePlacement.position.x,\n lighthousePlacement.position.y,\n lighthousePlacement.position.z\n ),\n rotationY: lighthousePlacement.rotationY,\n scale: lighthousePlacement.scale,\n }\n );\n const sweep = state.time * 0.22 + 0.8;\n const direction = normalizeVec3(vec3(Math.sin(sweep), -0.07, Math.cos(sweep)));\n const spread = perpendicularOnWater(direction);\n const farCenter = addVec3(source, scaleVec3(direction, 34));\n const left = addVec3(farCenter, scaleVec3(spread, 7.4));\n const right = addVec3(farCenter, scaleVec3(spread, -7.4));\n const projectedSource = projectPoint(source, camera, viewport);\n const projectedLeft = projectPoint(left, camera, viewport);\n const projectedRight = projectPoint(right, camera, viewport);\n if (!projectedSource || !projectedLeft || !projectedRight) {\n return;\n }\n\n const pulse = 0.72 + Math.sin(state.time * 1.7) * 0.08;\n ctx.save();\n ctx.globalCompositeOperation = \"screen\";\n ctx.fillStyle = colorToRgba(visuals.torchCore, 0.055 * pulse);\n ctx.beginPath();\n ctx.moveTo(projectedSource.x, projectedSource.y);\n ctx.lineTo(projectedLeft.x, projectedLeft.y);\n ctx.lineTo(projectedRight.x, projectedRight.y);\n ctx.closePath();\n ctx.fill();\n\n const beamLength = Math.hypot(\n projectedLeft.x - projectedSource.x,\n projectedLeft.y - projectedSource.y\n );\n const core = ctx.createRadialGradient(\n projectedSource.x,\n projectedSource.y,\n 2,\n projectedSource.x,\n projectedSource.y,\n clamp(beamLength * 0.22, 18, 80)\n );\n core.addColorStop(0, colorToRgba(visuals.torchCore, 0.58));\n core.addColorStop(0.5, colorToRgba(visuals.torchGlow, 0.18));\n core.addColorStop(1, colorToRgba(visuals.torchGlow, 0));\n ctx.fillStyle = core;\n ctx.beginPath();\n ctx.arc(projectedSource.x, projectedSource.y, clamp(beamLength * 0.18, 14, 64), 0, Math.PI * 2);\n ctx.fill();\n ctx.restore();\n}\n\nfunction renderAtmosphericGrade(ctx, canvas, state, visuals) {\n const vignette = ctx.createRadialGradient(\n canvas.width * 0.5,\n canvas.height * 0.48,\n canvas.width * 0.2,\n canvas.width * 0.5,\n canvas.height * 0.5,\n canvas.width * 0.72\n );\n vignette.addColorStop(0, \"rgba(0, 0, 0, 0)\");\n vignette.addColorStop(0.68, \"rgba(0, 0, 0, 0.08)\");\n vignette.addColorStop(1, \"rgba(0, 0, 0, 0.32)\");\n ctx.fillStyle = vignette;\n ctx.fillRect(0, 0, canvas.width, canvas.height);\n\n const seaHaze = ctx.createLinearGradient(0, canvas.height * 0.34, 0, canvas.height);\n seaHaze.addColorStop(0, \"rgba(0, 0, 0, 0)\");\n seaHaze.addColorStop(0.5, visuals.ambientMist);\n seaHaze.addColorStop(1, \"rgba(3, 8, 16, 0.18)\");\n ctx.fillStyle = seaHaze;\n ctx.fillRect(0, canvas.height * 0.34, canvas.width, canvas.height * 0.66);\n\n if (state.captureMode) {\n ctx.save();\n ctx.globalCompositeOperation = \"screen\";\n for (let index = 0; index < 70; index += 1) {\n const x = pseudoRandom(index * 19 + 3) * canvas.width;\n const y = pseudoRandom(index * 23 + 7) * canvas.height;\n const alpha = 0.008 + pseudoRandom(index * 31 + 11) * 0.012;\n ctx.fillStyle = `rgba(255, 255, 255, ${alpha})`;\n ctx.fillRect(x, y, 1.1, 1.1);\n }\n ctx.restore();\n }\n}\n\nfunction renderWaterMotionEffects(ctx, effects, camera, viewport) {\n ctx.save();\n ctx.globalCompositeOperation = \"screen\";\n\n for (const wake of effects.wakeTrails) {\n const projected = wake.points\n .map((point) => ({\n projected: projectPoint(point.center, camera, viewport),\n width: point.width,\n }))\n .filter((entry) => entry.projected);\n if (projected.length < 2) {\n continue;\n }\n\n const averageDepth =\n projected.reduce((total, entry) => total + entry.projected.depth, 0) / projected.length;\n const averageWidth =\n projected.reduce((total, entry) => total + entry.width, 0) / projected.length;\n const baseWidth = clamp((averageWidth / Math.max(0.25, averageDepth)) * 180, 1.6, 5.4);\n ctx.strokeStyle = `rgba(146, 194, 236, ${wake.opacity * 0.52})`;\n ctx.lineWidth = baseWidth * 1.9;\n ctx.lineCap = \"round\";\n ctx.lineJoin = \"round\";\n ctx.beginPath();\n ctx.moveTo(projected[0].projected.x, projected[0].projected.y);\n for (let index = 1; index < projected.length; index += 1) {\n ctx.lineTo(projected[index].projected.x, projected[index].projected.y);\n }\n ctx.stroke();\n\n ctx.strokeStyle = `rgba(234, 247, 255, ${wake.opacity})`;\n ctx.lineWidth = baseWidth;\n ctx.lineCap = \"round\";\n ctx.lineJoin = \"round\";\n ctx.beginPath();\n ctx.moveTo(projected[0].projected.x, projected[0].projected.y);\n for (let index = 1; index < projected.length; index += 1) {\n ctx.lineTo(projected[index].projected.x, projected[index].projected.y);\n }\n ctx.stroke();\n\n for (const entry of projected.slice(1, 5)) {\n ctx.fillStyle = `rgba(239, 248, 255, ${wake.opacity * 0.76})`;\n ctx.beginPath();\n ctx.ellipse(\n entry.projected.x,\n entry.projected.y,\n baseWidth * 0.72,\n baseWidth * 0.44,\n 0,\n 0,\n Math.PI * 2\n );\n ctx.fill();\n }\n }\n\n for (const ring of effects.rippleRings) {\n const center = projectPoint(ring.center, camera, viewport);\n const xAxis = projectPoint(addVec3(ring.center, vec3(ring.radius, 0, 0)), camera, viewport);\n const zAxis = projectPoint(addVec3(ring.center, vec3(0, 0, ring.radius)), camera, viewport);\n if (!center || !xAxis || !zAxis) {\n continue;\n }\n\n const radiusX = Math.hypot(xAxis.x - center.x, xAxis.y - center.y);\n const radiusY = Math.hypot(zAxis.x - center.x, zAxis.y - center.y);\n ctx.strokeStyle = `rgba(216, 235, 255, ${ring.opacity})`;\n ctx.lineWidth = clamp((radiusX + radiusY) * 0.02, 1, 3.1);\n ctx.beginPath();\n ctx.ellipse(center.x, center.y, radiusX, radiusY, 0, 0, Math.PI * 2);\n ctx.stroke();\n }\n\n ctx.restore();\n}\n\nfunction renderScene(\n ctx,\n canvas,\n state,\n shipModel,\n dom,\n lightingFeatures,\n fluidFeatures,\n clothFeatures\n) {\n const viewport = { width: canvas.width, height: canvas.height };\n const camera = buildCamera(state, canvas);\n state.camera.eye = camera.eye;\n const lightingPlan = lightingFeatures.createBandPlan({\n profile:\n state.focus === \"lighting\"\n ? lightingFeatures.defaultProfile\n : lightingFeatures.getProfile(lightingFeatures.defaultProfile).name,\n importance: state.focus === \"lighting\" ? \"critical\" : \"high\",\n });\n const nearLighting = lightingPlan.bands.find((entry) => entry.band === \"near\") ?? lightingPlan.bands[0];\n const lightDir = normalizeVec3(vec3(-0.22, 0.94, -0.31));\n const lightingSnapshot = state.lightingDetail.getSnapshot();\n const visuals = resolveVisualConfig(\n nearLighting,\n lightingSnapshot,\n state.demoDescription?.visuals\n );\n state.demoVisuals = visuals;\n const reflectionStrength = visuals.reflectionStrength;\n const shadowStrength = visuals.shadowAccent;\n drawSkyAndShore(\n ctx,\n canvas,\n state,\n nearLighting,\n reflectionStrength,\n shadowStrength,\n visuals\n );\n\n const waterTriangles = [];\n const sceneTriangles = [];\n const water = buildWaterBands(\n state,\n state.fluidDetail.getSnapshot().currentLevel.config,\n visuals,\n fluidFeatures\n );\n for (const bandMesh of water.bandMeshes) {\n const bandAccent = bandMesh.band === \"near\" ? 0.06 : bandMesh.band === \"mid\" ? 0.04 : 0;\n for (let index = 0; index < bandMesh.indices.length; index += 3) {\n const a = bandMesh.positions[bandMesh.indices[index]];\n const b = bandMesh.positions[bandMesh.indices[index + 1]];\n const c = bandMesh.positions[bandMesh.indices[index + 2]];\n const normal = normalizeVec3(crossVec3(subVec3(b, a), subVec3(c, a)));\n const projected = [projectPoint(a, camera, viewport), projectPoint(b, camera, viewport), projectPoint(c, camera, viewport)];\n if (projected.some((value) => value === null)) {\n continue;\n }\n waterTriangles.push({\n points: projected,\n depth: (projected[0].depth + projected[1].depth + projected[2].depth) / 3,\n worldCenter: scaleVec3(addVec3(addVec3(a, b), c), 1 / 3),\n normal,\n baseColor: bandMesh.color,\n accent: bandAccent,\n material: {\n name: \"water-surface\",\n color: bandMesh.color,\n roughness: 0.2,\n metallic: 0,\n emissive: { r: 0, g: 0, b: 0 },\n },\n reflection: 1,\n surfaceType: \"water\",\n });\n }\n }\n\n const waterMotionEffects = buildWaterMotionEffects(state);\n const lightSources = collectSceneLightSources(state, visuals);\n\n pushHarborGeometry(camera, viewport, sceneTriangles, state);\n const cloth = buildClothSurface(\n state,\n state,\n state.clothDetail.getSnapshot().currentLevel.config,\n visuals,\n clothFeatures\n );\n for (let index = 0; index < cloth.indices.length; index += 3) {\n const a = cloth.positions[cloth.indices[index]];\n const b = cloth.positions[cloth.indices[index + 1]];\n const c = cloth.positions[cloth.indices[index + 2]];\n const normal = normalizeVec3(crossVec3(subVec3(b, a), subVec3(c, a)));\n const projected = [projectPoint(a, camera, viewport), projectPoint(b, camera, viewport), projectPoint(c, camera, viewport)];\n if (projected.some((value) => value === null)) {\n continue;\n }\n sceneTriangles.push({\n points: projected,\n depth: (projected[0].depth + projected[1].depth + projected[2].depth) / 3,\n worldCenter: scaleVec3(addVec3(addVec3(a, b), c), 1 / 3),\n normal,\n baseColor: cloth.color,\n accent: cloth.band === \"near\" ? 0.1 : 0.04,\n material: {\n name: \"flag-cloth\",\n color: cloth.color,\n roughness: 0.94,\n metallic: 0,\n emissive: { r: 0, g: 0, b: 0 },\n },\n reflection: 0,\n surfaceType: \"cloth\",\n });\n }\n\n for (const ship of state.ships) {\n const activeShipModel = resolveShipModel(state, ship, shipModel);\n buildTrianglesFromMesh(\n activeShipModel,\n { position: ship.position, rotationY: ship.rotationY, scale: SHIP_SCALE },\n ship.tint,\n camera,\n viewport,\n sceneTriangles,\n {\n accent: nearLighting.rtParticipation.directShadows === \"premium\" ? 0.08 : 0.02,\n reflection: 0,\n surfaceType: \"ship\",\n }\n );\n }\n\n drawTriangles(ctx, waterTriangles, lightDir, reflectionStrength, camera, shadowStrength);\n for (const ship of state.ships) {\n renderShipShadow(\n ctx,\n resolveShipModel(state, ship, shipModel),\n ship,\n state,\n camera,\n viewport,\n lightDir,\n shadowStrength\n );\n }\n renderFlagShadow(ctx, cloth, camera, viewport, lightDir, shadowStrength);\n for (const source of lightSources.reflectionLights) {\n renderWaterLightReflection(ctx, source, state, camera, viewport);\n }\n renderWaterMotionEffects(ctx, waterMotionEffects, camera, viewport);\n renderWaterHighlights(ctx, water.bandMeshes, camera, viewport);\n drawTriangles(\n ctx,\n sceneTriangles,\n lightDir,\n reflectionStrength,\n camera,\n shadowStrength,\n lightSources.directLights\n );\n renderFlagPole(ctx, camera, viewport);\n renderClothAccent(ctx, cloth, camera, viewport);\n renderLighthouseBeam(ctx, state, camera, viewport, visuals);\n for (const source of lightSources.directLights) {\n renderDirectLightGlow(ctx, source, camera, viewport);\n }\n for (const ship of state.ships) {\n renderShipRigging(ctx, ship, camera, viewport);\n }\n renderSprays(ctx, state.sprays, camera, viewport);\n renderAtmosphericGrade(ctx, canvas, state, visuals);\n\n const debugSnapshot = state.debugSession.getSnapshot();\n const quality = {\n fluid: state.fluidDetail.getSnapshot(),\n cloth: state.clothDetail.getSnapshot(),\n lighting: lightingSnapshot,\n };\n\n const sceneMetrics = [\n `focus: ${state.focus}`,\n `ships: ${state.ships.length} active GLTF hulls across ${new Set(state.ships.map((ship) => ship.modelKey)).size} model families`,\n `moonlight: cold overhead key + ${HARBOR_TORCHES.length + state.ships.reduce((total, ship) => total + (Array.isArray(ship.lanterns) ? ship.lanterns.length : 0), 0)} warm deck and harbor lights`,\n `physics snapshot: ${state.physics.snapshot.stage} (${state.physics.snapshot.stability})`,\n `physics contacts: ${state.contactCount}`,\n `mass split: ${state.ships.map((ship) => `${ship.id} ${(getShipMass(ship, resolveShipModel(state, ship, shipModel)) / 1000).toFixed(1)}t`).join(\" · \")}`,\n `cloth band: ${cloth.band} -> ${cloth.representation.output}`,\n `fluid near band: ${water.bandMeshes[0].representation.output}`,\n `lighting profile: ${lightingPlan.profile} (${lightingFeatures.distanceBands.length} bands)`,\n ];\n const qualityMetrics = [\n `fluid detail: ${quality.fluid.currentLevel.id} (${quality.fluid.currentLevel.config.nearResolution} near cells)`,\n `cloth detail: ${quality.cloth.currentLevel.id} (${quality.cloth.currentLevel.config.cols}x${quality.cloth.currentLevel.config.rows})`,\n `lighting detail: ${quality.lighting.currentLevel.id}`,\n `near shadows: ${nearLighting.primaryShadowSource}`,\n `near reflections: ${nearLighting.rtParticipation.reflections}`,\n `governor pressure: ${state.lastDecision.pressureLevel}`,\n `frame avg: ${state.lastDecision.metrics.averageFrameTimeMs.toFixed(2)} ms`,\n ];\n const debugMetrics = [\n `queue samples: ${debugSnapshot.queues.sampleCount}`,\n `dispatch avg: ${(debugSnapshot.dispatch.averageDurationMs ?? 0).toFixed(2)} ms`,\n `ready lane peak: ${debugSnapshot.dag.peakReadyLaneDepth.toFixed(1)}`,\n `pipeline samples: ${debugSnapshot.pipeline.sampleCount}`,\n `tracked memory: ${(debugSnapshot.memory.totalTrackedBytes / (1024 * 1024)).toFixed(1)} MB`,\n ];\n const sceneNotes =\n state.focus === \"physics\"\n ? PHYSICS_SCENE_NOTE_KEYS.map((key) => state.translate(key))\n : SCENE_NOTE_KEYS.map((key) => state.translate(key));\n const custom = state.demoDescription ?? null;\n\n setListContent(\n dom.sceneMetrics,\n Array.isArray(custom?.sceneMetrics) ? custom.sceneMetrics : sceneMetrics\n );\n setListContent(\n dom.qualityMetrics,\n Array.isArray(custom?.qualityMetrics) ? custom.qualityMetrics : qualityMetrics\n );\n setListContent(\n dom.debugMetrics,\n Array.isArray(custom?.debugMetrics) ? custom.debugMetrics : debugMetrics\n );\n setListContent(dom.sceneNotes, Array.isArray(custom?.notes) ? custom.notes : sceneNotes);\n\n dom.status.textContent =\n typeof custom?.status === \"string\"\n ? custom.status\n : state.translate(gpuSharedTranslationKeys.statusLive, {\n fps: state.lastDecision.metrics.fps.toFixed(1),\n });\n dom.details.textContent =\n typeof custom?.details === \"string\"\n ? custom.details\n : state.focus === \"physics\"\n ? state.translate(gpuSharedTranslationKeys.detailsPhysics, {\n snapshotStageId: state.physics.plan.snapshotStageId,\n })\n : state.showcaseRealisticModelsEnabled\n ? state.translate(gpuSharedTranslationKeys.detailsRealistic, {\n pressureLevel: state.lastDecision.pressureLevel,\n })\n : state.translate(gpuSharedTranslationKeys.detailsLegacy, {\n pressureLevel: state.lastDecision.pressureLevel,\n });\n}\n\nfunction updateSceneState(state, dt, shipModel, featureAdapters) {\n updateShips(state, dt, shipModel);\n updateWaveImpulses(state, dt);\n updateSpray(state, dt);\n const clothPresentation = resolveClothPresentation(\n state,\n state.clothDetail.getSnapshot().currentLevel.config,\n featureAdapters.cloth\n );\n const clothState = ensureShowcaseClothState(\n state,\n state.clothDetail.getSnapshot().currentLevel.config,\n clothPresentation\n );\n advanceShowcaseClothSimulationState(clothState, {\n dt,\n time: state.time,\n flagMotion: readVisualNumber(state.demoVisuals?.flagMotion, 0.92),\n waveInfluence: sampleWave(state, FLAG_LAYOUT.origin.x + FLAG_LAYOUT.width * 0.55, FLAG_LAYOUT.origin.z + FLAG_LAYOUT.width * 0.48, state.time),\n });\n updatePhysicsSnapshot(state, shipModel, featureAdapters.physics);\n}\n\nfunction syncTextState(state, shipModel, featureAdapters) {\n const snapshot = {\n coordinateSystem: \"right-handed world; +x right, +y up, +z forward from the shore\",\n focus: state.focus,\n stress: state.stress,\n ships: state.ships.map((ship) => ({\n id: ship.id,\n modelKey: ship.modelKey ?? \"brigantine\",\n x: Number(ship.position.x.toFixed(2)),\n y: Number(ship.position.y.toFixed(2)),\n z: Number(ship.position.z.toFixed(2)),\n vx: Number(ship.velocity.x.toFixed(2)),\n vz: Number(ship.velocity.z.toFixed(2)),\n massKg: Math.round(getShipMass(ship, resolveShipModel(state, ship, shipModel))),\n lanterns: Array.isArray(ship.lanterns) ? ship.lanterns.length : 0,\n })),\n shipPhysics: Object.fromEntries(\n state.ships.map((ship) => [ship.id, resolveShipModel(state, ship, shipModel)?.physics ?? null])\n ),\n sprays: state.sprays.length,\n waveImpulses: state.waveImpulses.length,\n pressure: state.lastDecision?.pressureLevel ?? \"stable\",\n physics: {\n profile: state.physics.profile,\n snapshotStageId: state.physics.plan.snapshotStageId,\n workerJobCount: state.physics.manifest.jobs.length,\n snapshot: state.physics.snapshot,\n },\n package: state.demoDescription?.textState ?? null,\n };\n window.render_game_to_text = () => JSON.stringify(snapshot);\n window.advanceTime = (ms) => {\n const step = Math.max(1, Math.round(ms / (1000 / 60)));\n for (let index = 0; index < step; index += 1) {\n state.frame += 1;\n state.time += 1 / 60;\n updateSceneState(state, 1 / 60, shipModel, featureAdapters);\n state.lastDecision = recordTelemetry(state, 16.67 + (state.stress ? 6.5 : 0));\n }\n };\n}\n\nexport async function mountGpuShowcase(options = {}, featureFlags = null) {\n const featureAdapters = await resolveShowcaseFeatureAdapters(options);\n injectStyles();\n const root = options.root ?? document.body;\n root.classList?.add?.(ROOT_CLASS);\n const captureSettings = resolveCaptureSettings(options);\n if (captureSettings.captureMode) {\n root.classList?.add?.(CAPTURE_CLASS);\n }\n const previousMarkup = root.innerHTML;\n const previousRenderGameToText = window.render_game_to_text;\n const previousAdvanceTime = window.advanceTime;\n const focus = options.focus ?? new URLSearchParams(window.location.search).get(\"focus\") ?? \"integrated\";\n const translate = createGpuSharedTranslator(options.translate);\n const dom = buildDemoDom(root, {\n packageName: options.packageName ?? \"@plasius/gpu-demo-viewer\",\n title: options.title ?? translate(gpuSharedTranslationKeys.showcaseTitle),\n subtitle: options.subtitle ?? translate(gpuSharedTranslationKeys.showcaseSubtitle),\n translate,\n });\n dom.focusMode.value = focus;\n const state = createSceneState(\n {\n focus,\n translate,\n realisticModelsEnabled: isFeatureEnabled(featureFlags, GPU_SHOWCASE_REALISTIC_MODELS_FEATURE, true),\n captureMode: captureSettings.captureMode,\n renderScale: captureSettings.renderScale,\n },\n featureAdapters\n );\n const assetCatalog = await (state.showcaseRealisticModelsEnabled\n ? loadShowcaseAssetCatalog()\n : createLegacyShowcaseAssetCatalog());\n const shipModel = assetCatalog.ships[assetCatalog.primaryShipKey];\n\n state.assetCatalog = assetCatalog;\n state.shipModel = shipModel;\n state.packageState =\n typeof options.createState === \"function\" ? options.createState() : undefined;\n updatePhysicsSnapshot(state, shipModel, featureAdapters.physics);\n state.lastDecision = recordTelemetry(state, 16.4);\n state.demoDescription = resolveSceneDescription(state, options, shipModel).description;\n syncTextState(state, shipModel, featureAdapters);\n\n const ctx = dom.canvas.getContext(\"2d\");\n if (!ctx) {\n throw new Error(\"2D canvas context is required for the shared showcase.\");\n }\n ctx.imageSmoothingEnabled = true;\n ctx.imageSmoothingQuality = \"high\";\n let animationFrameId = 0;\n let destroyed = false;\n const renderFrame = (nowMs) => {\n if (destroyed) {\n return;\n }\n if (!state.paused) {\n if (state.lastTimeMs == null) {\n state.lastTimeMs = nowMs;\n }\n const dt = Math.min(0.033, (nowMs - state.lastTimeMs) / 1000);\n state.lastTimeMs = nowMs;\n state.time += dt;\n state.frame += 1;\n updateSceneState(state, dt, shipModel, featureAdapters);\n updatePackageState(state, options, shipModel, dt);\n const syntheticFrame = 14.2 + state.sprays.length * 0.1 + (state.stress ? 6.4 : 0);\n state.lastDecision = recordTelemetry(state, syntheticFrame);\n }\n\n state.demoDescription = resolveSceneDescription(state, options, shipModel).description;\n resizeCanvasToDisplaySize(dom.canvas, state);\n renderScene(\n ctx,\n dom.canvas,\n state,\n shipModel,\n dom,\n featureAdapters.lighting,\n featureAdapters.fluid,\n featureAdapters.cloth\n );\n syncTextState(state, shipModel, featureAdapters);\n animationFrameId = requestAnimationFrame(renderFrame);\n };\n\n const handlePauseClick = () => {\n state.paused = !state.paused;\n dom.pauseButton.textContent = state.paused\n ? state.translate(gpuSharedTranslationKeys.resume)\n : state.translate(gpuSharedTranslationKeys.pause);\n };\n const handleStressChange = () => {\n state.stress = dom.stressToggle.checked;\n };\n const handleFocusChange = () => {\n state.focus = dom.focusMode.value;\n Object.assign(state.camera, {\n ...CAMERA_PRESETS[state.focus],\n target: vec3(...CAMERA_PRESETS[state.focus].target),\n });\n };\n\n dom.pauseButton.addEventListener(\"click\", handlePauseClick);\n dom.stressToggle.addEventListener(\"change\", handleStressChange);\n dom.focusMode.addEventListener(\"change\", handleFocusChange);\n\n animationFrameId = requestAnimationFrame(renderFrame);\n const destroy = () => {\n if (destroyed) {\n return;\n }\n destroyed = true;\n if (animationFrameId) {\n cancelAnimationFrame(animationFrameId);\n }\n dom.pauseButton.removeEventListener(\"click\", handlePauseClick);\n dom.stressToggle.removeEventListener(\"change\", handleStressChange);\n dom.focusMode.removeEventListener(\"change\", handleFocusChange);\n try {\n if (typeof options.destroyState === \"function\") {\n options.destroyState(state.packageState);\n }\n } finally {\n state.packageState = undefined;\n }\n root.classList?.remove?.(ROOT_CLASS);\n root.classList?.remove?.(CAPTURE_CLASS);\n root.innerHTML = previousMarkup;\n if (typeof previousRenderGameToText === \"function\") {\n window.render_game_to_text = previousRenderGameToText;\n } else {\n delete window.render_game_to_text;\n }\n if (typeof previousAdvanceTime === \"function\") {\n window.advanceTime = previousAdvanceTime;\n } else {\n delete window.advanceTime;\n }\n };\n return {\n state,\n shipModel,\n canvas: dom.canvas,\n destroy,\n };\n}\n\nfunction updatePhysicsSnapshot(state, shipModel, physicsFeatures) {\n const createPhysicsWorldSnapshot = assertRequiredFunction(\n physicsFeatures,\n \"physics\",\n \"createWorldSnapshot\"\n );\n const rigidBodyShapes = Object.fromEntries(\n state.ships.map((ship) => [\n ship.id,\n resolveShipModel(state, ship, shipModel)?.physics?.shape ?? \"box\",\n ])\n );\n\n state.physics.snapshot = createPhysicsWorldSnapshot({\n frameId: `showcase-${state.frame}`,\n tick: state.frame,\n simulationTimeMs: Number((state.time * 1000).toFixed(2)),\n profile: state.physics.profile,\n authoritativeTransformRevision: state.frame,\n secondarySimulationRevision: state.frame,\n animationInputRevision: state.frame,\n bodyCount: state.ships.length + 2,\n dynamicBodyCount: state.ships.length,\n contactCount: state.contactCount,\n metadata: {\n collisionCount: state.collisionCount,\n contactCount: state.contactCount,\n snapshotStageId: state.physics.plan.snapshotStageId,\n rigidBodyShape: shipModel.physics.shape ?? \"box\",\n rigidBodyShapes,\n },\n });\n}\n\nexport {\n advanceShowcaseClothSimulationState as __testOnlyAdvanceShowcaseClothSimulationState,\n buildWaterBands as __testOnlyBuildWaterBands,\n buildWaterMotionEffects as __testOnlyBuildWaterMotionEffects,\n collectSceneLightSources as __testOnlyCollectSceneLightSources,\n createShowcaseClothSimulationState as __testOnlyCreateShowcaseClothSimulationState,\n};\n"],"mappings":"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","names":["clamp"]}