pixi-effects 0.48.2 → 0.49.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (88) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/README.md +51 -7
  3. package/ai/chat-template.html +8 -4
  4. package/ai/tools/check.mjs +6 -6
  5. package/dist/3d.cjs +963 -0
  6. package/dist/3d.cjs.map +1 -0
  7. package/dist/3d.d.cts +303 -0
  8. package/dist/3d.d.ts +303 -0
  9. package/dist/3d.js +956 -0
  10. package/dist/3d.js.map +1 -0
  11. package/dist/Canvas-BfZkAFJm.d.cts +12 -0
  12. package/dist/Canvas-BfZkAFJm.d.ts +12 -0
  13. package/dist/Composition-464AWDV6.cjs +16 -0
  14. package/dist/{Composition-TJ5D7Z63.cjs.map → Composition-464AWDV6.cjs.map} +1 -1
  15. package/dist/Composition-5U63LMPX.js +7 -0
  16. package/dist/{Composition-5FKV2IBP.js.map → Composition-5U63LMPX.js.map} +1 -1
  17. package/dist/Controller.d.cts +2 -2
  18. package/dist/Controller.d.ts +2 -2
  19. package/dist/{Movie--qSYKgAQ.d.ts → Movie-6EWOz6Yw.d.ts} +21 -5
  20. package/dist/{Movie-svZQF-9Z.d.cts → Movie-BxB7bauG.d.cts} +21 -5
  21. package/dist/{Spans-5ENZ3XGS.cjs → Spans-DUR2W5EH.cjs} +11 -11
  22. package/dist/{Spans-5ENZ3XGS.cjs.map → Spans-DUR2W5EH.cjs.map} +1 -1
  23. package/dist/{Spans-6A3VLHRH.js → Spans-W5VJRMGC.js} +6 -6
  24. package/dist/{Spans-6A3VLHRH.js.map → Spans-W5VJRMGC.js.map} +1 -1
  25. package/dist/{blendModes-V5XHC7U4.cjs → blendModes-NC76DNVX.cjs} +5 -5
  26. package/dist/{blendModes-V5XHC7U4.cjs.map → blendModes-NC76DNVX.cjs.map} +1 -1
  27. package/dist/{blendModes-535EMYGK.js → blendModes-ZOBLPSR3.js} +4 -4
  28. package/dist/{blendModes-535EMYGK.js.map → blendModes-ZOBLPSR3.js.map} +1 -1
  29. package/dist/{chunk-Z3DM4ETD.cjs → chunk-33USHRV5.cjs} +43 -32
  30. package/dist/chunk-33USHRV5.cjs.map +1 -0
  31. package/dist/{chunk-WYR2AU4W.cjs → chunk-5YNME6AH.cjs} +5 -5
  32. package/dist/{chunk-WYR2AU4W.cjs.map → chunk-5YNME6AH.cjs.map} +1 -1
  33. package/dist/{chunk-NGJXVJB7.cjs → chunk-ABWRISRK.cjs} +3 -2
  34. package/dist/chunk-ABWRISRK.cjs.map +1 -0
  35. package/dist/{chunk-CCPJD76D.cjs → chunk-BSFWVTSR.cjs} +93 -93
  36. package/dist/chunk-BSFWVTSR.cjs.map +1 -0
  37. package/dist/{chunk-IVKI6CPH.js → chunk-DOGY3EAW.js} +19 -9
  38. package/dist/chunk-DOGY3EAW.js.map +1 -0
  39. package/dist/{chunk-45ALIMAF.cjs → chunk-GUDLIAIG.cjs} +58 -55
  40. package/dist/chunk-GUDLIAIG.cjs.map +1 -0
  41. package/dist/{chunk-BFRWSV3R.js → chunk-H363KMJR.js} +3 -3
  42. package/dist/chunk-H363KMJR.js.map +1 -0
  43. package/dist/{chunk-JBDBICS2.js → chunk-MXACRKAN.js} +4 -4
  44. package/dist/{chunk-JBDBICS2.js.map → chunk-MXACRKAN.js.map} +1 -1
  45. package/dist/{chunk-RCKLUCB7.js → chunk-PBMDZT2T.js} +15 -12
  46. package/dist/chunk-PBMDZT2T.js.map +1 -0
  47. package/dist/{chunk-6D4W2KZQ.js → chunk-USUUAYTE.js} +6 -6
  48. package/dist/chunk-USUUAYTE.js.map +1 -0
  49. package/dist/index.cjs +35 -35
  50. package/dist/index.d.cts +3 -3
  51. package/dist/index.d.ts +3 -3
  52. package/dist/index.js +5 -5
  53. package/dist/loader.css +1 -1
  54. package/dist/{music-P4JRT73P.js → music-ATX22VAT.js} +3 -3
  55. package/dist/{music-P4JRT73P.js.map → music-ATX22VAT.js.map} +1 -1
  56. package/dist/{music-XQEPBIDT.cjs → music-OFVM3PYH.cjs} +3 -3
  57. package/dist/{music-XQEPBIDT.cjs.map → music-OFVM3PYH.cjs.map} +1 -1
  58. package/dist/present.cjs +5 -5
  59. package/dist/present.d.cts +2 -2
  60. package/dist/present.d.ts +2 -2
  61. package/dist/present.js +5 -5
  62. package/dist/three.cjs +7 -8
  63. package/dist/three.cjs.map +1 -1
  64. package/dist/three.d.cts +2 -12
  65. package/dist/three.d.ts +2 -12
  66. package/dist/three.js +2 -3
  67. package/dist/three.js.map +1 -1
  68. package/dist/{types-CTSrPvY3.d.cts → types-kt7DQKfO.d.cts} +1 -1
  69. package/dist/{types-CTSrPvY3.d.ts → types-kt7DQKfO.d.ts} +1 -1
  70. package/docs/api.md +41 -1
  71. package/docs/dsl.md +81 -1
  72. package/llms-full.txt +218 -5
  73. package/package.json +19 -3
  74. package/skills/pixi-effects/SKILL.md +3 -2
  75. package/skills/pixi-effects/reference/cheatsheet.md +2 -0
  76. package/skills/pixi-effects/reference/pitfalls.md +14 -0
  77. package/skills/pixi-effects/reference/recipes.md +77 -1
  78. package/skills/pixi-effects/template.html +13 -8
  79. package/dist/Composition-5FKV2IBP.js +0 -7
  80. package/dist/Composition-TJ5D7Z63.cjs +0 -16
  81. package/dist/chunk-45ALIMAF.cjs.map +0 -1
  82. package/dist/chunk-6D4W2KZQ.js.map +0 -1
  83. package/dist/chunk-BFRWSV3R.js.map +0 -1
  84. package/dist/chunk-CCPJD76D.cjs.map +0 -1
  85. package/dist/chunk-IVKI6CPH.js.map +0 -1
  86. package/dist/chunk-NGJXVJB7.cjs.map +0 -1
  87. package/dist/chunk-RCKLUCB7.js.map +0 -1
  88. package/dist/chunk-Z3DM4ETD.cjs.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/space/lightChecks.ts","../src/space/camera.ts","../src/space/depth.ts","../src/filters/DiscBlur.ts","../src/space/LitMaterial.ts","../src/space/Layer3D.ts","../src/space/lint.ts","../src/core/matte.ts","../src/filters/Matte.ts","../src/core/MatteSet.ts","../src/sequences/Composition.ts"],"names":["LIGHT_KINDS","suggestName","FALLOFFS","LIGHT_PROPS","collectPropKeys","MAX_LIGHTS","MAX_CASTERS","i","Filter","GlProgram","GpuProgram","UniformGroup","SHADOW_TAPS","GL_VERTEX","GL_FRAGMENT","compileHighShaderGpuProgram","Shader","Texture","Matrix","DEG","frameOf","PerspectiveMesh","projectLayer","layerToWorld","NEAR","describeLayer","MIN_BLUR","MAX_BLUR","isAdvancedBlend","blendFilterFor","RenderTexture","focusProblems","WGSL","Container","Sprite","Sequence","Rectangle","timeRemapOf","contentLength","remapOf","lintTiming","lintText","lintKeys","summarizeWarnings","maxConcurrentAdvanced","MANY_ADVANCED","buildSequenceTree","CameraSequence","LightSequence","layerInitialZ","applyBlendMode","createTimeline","bindClock","clockTable","NullSequence","lightLevel","cam","homeCamera","cameraBasis","packLights","projectPoint","blurRadius","MANY_BLURRED"],"mappings":"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","file":"chunk-CCPJD76D.cjs","sourcesContent":["/**\n * What is wrong with the way a composition writes its lights and fog, as sentences (the caller puts `pixi-effects: <where>: ` in front).\n * Pure: no Pixi. Every sentence says what to write instead; nothing here throws.\n */\nimport { suggestName } from '../core/options';\nimport { collectPropKeys } from './specKeys';\nimport { FALLOFFS, LIGHT_KINDS, LIGHT_PROPS, MAX_CASTERS, MAX_LIGHTS } from './lighting';\nimport type { SequenceSpec } from '../types';\n\n/** This many lights with soft shadows warn (measured: 3 soft lights over 20 layers cost about 20 ms a frame at 1080p). */\nconst SOFT_LIGHTS = 3;\n\ntype Bag = Record<string, unknown>;\nconst bagsOf = (spec: SequenceSpec): Bag[] => {\n const s = spec as unknown as { initial?: Bag; keyframes?: Array<{ set?: Bag; to?: Bag; from?: Bag }> };\n const out: Bag[] = [];\n if (s.initial) out.push(s.initial);\n for (const k of s.keyframes ?? []) for (const b of [k.set, k.to, k.from]) if (b) out.push(b);\n return out;\n};\nconst numbersOf = (spec: SequenceSpec, key: string): number[] => bagsOf(spec).map(b => b[key]).filter((v): v is number => typeof v === 'number' && Number.isFinite(v));\nconst nameOf = (s: SequenceSpec, i: number) => ((s as { name?: string }).name ? `\"${(s as { name?: string }).name}\"` : `#${i + 1}`);\n\nconst KIND_ALIASES: Record<string, string> = {\n directional: 'parallel', sun: 'parallel', sunlight: 'parallel', distant: 'parallel',\n omni: 'point', lamp: 'point', bulb: 'point', pointlight: 'point',\n spotlight: 'spot', cone: 'spot',\n ambience: 'ambient', global: 'ambient', fill: 'ambient',\n};\n\n/** Why `kind` is not a light kind, with the likely name and the choices; null when it is one (or left out: the default is `point`). */\nexport function lightKindProblem(kind: unknown): string | null {\n if (kind === undefined || (typeof kind === 'string' && (LIGHT_KINDS as readonly string[]).includes(kind))) return null;\n const guess = typeof kind === 'string' ? (KIND_ALIASES[kind.toLowerCase()] ?? suggestName(kind, LIGHT_KINDS)) : null;\n const shown = typeof kind === 'string' ? `\"${kind}\"` : String(kind);\n return `kind ${shown} is not a light kind${guess ? `; did you mean \"${guess}\"?` : ''} (use ${LIGHT_KINDS.join(', ')}); point is used`;\n}\n\nconst LIGHT_ALIASES: Record<string, string> = {\n pointOfInterest: 'did you mean \"lookAtX / lookAtY / lookAtZ\"?', target: 'did you mean \"lookAtX / lookAtY / lookAtZ\"?', lookAt: 'did you mean \"lookAtX / lookAtY / lookAtZ\"?',\n angle: 'did you mean \"coneAngle\"?', cone: 'did you mean \"coneAngle\"?', spread: 'did you mean \"coneAngle\"?',\n feather: 'did you mean \"coneFeather\"?', penumbra: 'did you mean \"coneFeather\" (the cone edge) or \"shadowDiffusion\" (the shadow edge)?',\n castShadows: 'did you mean \"castsShadows\"?', castShadow: 'did you mean \"castsShadows\"?', shadows: 'did you mean \"castsShadows\"?', shadow: 'did you mean \"castsShadows\"?',\n brightness: 'did you mean \"intensity\"?', strength: 'did you mean \"intensity\"?',\n distance: 'did you mean \"radius\" (where the falloff starts) or \"falloffDistance\"?', range: 'did you mean \"radius\" or \"falloffDistance\"?',\n};\n\n/** What is wrong with one `light` layer written on its own (misplaced keys, aliases, ranges, a threeD light). */\nexport function lightLayerProblems(spec: SequenceSpec): string[] {\n const out: string[] = [];\n const raw = spec as unknown as Bag;\n const kind = lightKindProblem(raw.kind);\n if (kind) out.push(kind);\n if (raw.falloff !== undefined && !(FALLOFFS as readonly string[]).includes(raw.falloff as string)) {\n const guess = typeof raw.falloff === 'string' ? suggestName(raw.falloff, FALLOFFS) : null;\n out.push(`falloff ${JSON.stringify(raw.falloff)} is not supported${guess ? `; did you mean \"${guess}\"?` : ''} (use ${FALLOFFS.join(', ')}); none is used`);\n }\n for (const k of Object.keys(raw)) {\n if ((LIGHT_PROPS as readonly string[]).includes(k) || k === 'intensity' || k === 'shadowDarkness' || k === 'shadowDiffusion') {\n out.push(`\"${k}\" must go inside initial / keyframes, not on the light itself`);\n } else if (LIGHT_ALIASES[k]) out.push(`\"${k}\" is not a property — ${LIGHT_ALIASES[k]}`);\n }\n const explained = new Set(Object.keys(LIGHT_ALIASES));\n for (const k of collectPropKeys(spec as never)) {\n if (LIGHT_ALIASES[k]) out.push(`\"${k}\" is not a property — ${LIGHT_ALIASES[k]}`);\n else if (!explained.has(k) && !(LIGHT_PROPS as readonly string[]).includes(k)) out.push(`\"${k}\" has no effect on a light (use ${LIGHT_PROPS.join(', ')})`);\n }\n if (numbersOf(spec, 'coneFeather').some(v => v > 1 || v < 0)) out.push('coneFeather is 0..1 (the soft part of the cone edge, as a fraction of the half angle); it is clamped');\n const big = numbersOf(spec, 'intensity').find(v => v > 10);\n if (big !== undefined) out.push(`intensity ${big} looks like a percentage: it is a multiplier (1 = full, 0.25 = a quarter); did you mean ${big / 100}?`);\n const kindNow = typeof raw.kind === 'string' && (LIGHT_KINDS as readonly string[]).includes(raw.kind) ? raw.kind : 'point';\n const has = (...keys: string[]) => keys.filter(k => bagsOf(spec).some(b => b[k] !== undefined));\n const falloffOn = raw.falloff === 'smooth' || raw.falloff === 'inverseSquare';\n if (kindNow === 'ambient' && raw.castsShadows) out.push('an ambient light has no direction, so it makes no shadow: castsShadows is ignored (put it on a point, spot or parallel light)');\n const dist = has('radius', 'falloffDistance');\n if (dist.length && !falloffOn && kindNow !== 'ambient' && kindNow !== 'parallel') out.push(`${dist.join(' / ')} only matter with falloff: 'smooth' or 'inverseSquare' (the default 'none' does not fade with distance): write falloff on the layer`);\n const shadowNums = has('shadowDarkness', 'shadowDiffusion');\n if (shadowNums.length && !raw.castsShadows) out.push(`${shadowNums.join(' / ')} only matter with castsShadows: true on the light (and on the layers that cast)`);\n const cone = has('coneAngle', 'coneFeather');\n if (cone.length && kindNow !== 'spot') out.push(`${cone.join(' / ')} only matter for kind: 'spot' (this light is ${kindNow})`);\n if (kindNow === 'parallel' && raw.falloff !== undefined && raw.falloff !== 'none') out.push('a parallel light has no distance, so falloff has no effect on it');\n const init = (spec as { initial?: Bag }).initial ?? {};\n const pos = ['x', 'y', 'z'].map(k => init[k]), look = ['lookAtX', 'lookAtY', 'lookAtZ'].map(k => init[k]);\n if ((kindNow === 'spot' || kindNow === 'parallel') && pos.every(v => typeof v === 'number') && pos.every((v, i) => v === look[i])) {\n out.push('lookAt equals the position, so the light has no direction and lights nothing: move lookAtX / lookAtY / lookAtZ to where it should point');\n }\n if ((spec as { threeD?: boolean }).threeD) out.push('a light has no picture, so threeD has no effect on it (write it without threeD)');\n return out;\n}\n\n/** What is wrong with the lights of a composition taken together; empty when there is no light (a composition without light is not touched). */\nexport function lightSetProblems(layers: readonly SequenceSpec[]): string[] {\n const lights = layers.filter(l => l.type === 'light');\n if (lights.length === 0) return [];\n const out: string[] = [];\n const kindOf = (l: SequenceSpec) => ((l as { kind?: string }).kind ?? 'point');\n if (!lights.some(l => kindOf(l) === 'ambient')) {\n out.push('there is no ambient light, so what no light reaches is black; add { type: \\'light\\', kind: \\'ambient\\', initial: { intensity: 0.25 } }');\n }\n const direct = lights.filter(l => kindOf(l) !== 'ambient');\n if (direct.length > MAX_LIGHTS) {\n const dropped = direct.slice(MAX_LIGHTS).map(l => nameOf(l, layers.indexOf(l)));\n out.push(`${direct.length} lights, but at most ${MAX_LIGHTS} are used (the first ${MAX_LIGHTS}, in layer order); ${dropped.join(', ')} and later are dropped. Use fewer lights`);\n }\n const lightsCast = lights.some(l => kindOf(l) !== 'ambient' && (l as { castsShadows?: boolean }).castsShadows);\n const casters = layers.filter(l => l.type !== 'light' && (l as { castsShadows?: boolean }).castsShadows && (l as { threeD?: boolean }).threeD);\n if (casters.length > 0 && !lightsCast) out.push(`${casters.length} layer${casters.length > 1 ? 's have' : ' has'} castsShadows but no light has castsShadows: add castsShadows: true to the light that should make the shadows`);\n const hostsThree = layers.some(l => (l as { type?: string }).type === 'three' && (l as { followLights?: boolean }).followLights); // its own meshes cast, in three\n if (lightsCast && casters.length === 0 && !hostsThree) out.push('a light has castsShadows but no layer has castsShadows: add castsShadows: true to the threeD layers that should cast a shadow');\n if (lightsCast && casters.length > MAX_CASTERS) {\n const dropped = casters.slice(MAX_CASTERS).map(c => nameOf(c, layers.indexOf(c)));\n out.push(`${casters.length} layers cast shadows, but a layer receives shadows from at most ${MAX_CASTERS} (the first ${MAX_CASTERS}, in layer order); ${dropped.join(', ')} and later cast none`);\n }\n const softLights = lights.filter(l => (l as { castsShadows?: boolean }).castsShadows && numbersOf(l, 'shadowDiffusion').some(v => v > 0));\n if (softLights.length >= SOFT_LIGHTS) {\n out.push(`${softLights.length} lights make soft shadows (shadowDiffusion above 0): each is a 16-sample search per pixel and per caster, costly (about 20 ms more a frame at 1080p with 20 lit layers in our measurement). Give shadowDiffusion to one or two lights; the others keep hard shadows`);\n }\n layers.forEach((l, i) => {\n if (l.type === 'light' || (l as { threeD?: boolean }).threeD) return;\n const bad = (['castsShadows', 'lit'] as const).filter(k => (l as unknown as Bag)[k] !== undefined);\n if (bad.length) out.push(`layer ${nameOf(l, i)}: ${bad.map(k => `\"${k}\"`).join(' and ')} only work${bad.length > 1 ? '' : 's'} on threeD layers (add threeD: true; a 2D layer is not lit and casts no shadow)`);\n });\n return out;\n}\n\n/** What is wrong with the fog a camera writes (`fogFar` not beyond `fogNear`, an amount outside 0..1). */\nexport function fogProblems(camera: SequenceSpec): string[] {\n const out: string[] = [];\n const near = numbersOf(camera, 'fogNear')[0], far = numbersOf(camera, 'fogFar')[0];\n if (near !== undefined && far !== undefined && far <= near) out.push(`fogFar (${far}) is not beyond fogNear (${near}): the fog is a hard step at fogNear. Make fogFar larger (the distance where the fog is complete)`);\n if (numbersOf(camera, 'fogAmount').some(v => v < 0 || v > 1)) out.push('fogAmount is 0..1 (how much of the fog colour the farthest things get); it is clamped');\n return out;\n}\n","/** A camera layer's lifespan on the global timeline, seconds. */\nexport interface CameraWindow { start: number; end: number }\n\n/**\n * The active camera at time `t`: the last-listed (top-most) camera whose\n * lifespan covers `t`. Windows are [start, end), except that a camera running\n * to the end of its composition also covers the final instant `t === compEnd`.\n */\nexport function pickActiveCamera<T extends CameraWindow>(\n cams: readonly T[],\n t: number,\n compEnd: number,\n): T | null {\n for (let i = cams.length - 1; i >= 0; i--) {\n const c = cams[i]!;\n const inside = t >= c.start && (t < c.end || (c.end >= compEnd && t <= compEnd));\n if (inside) return c;\n }\n return null;\n}\n\n/** First pair of camera indices whose lifespans strictly overlap, or null. */\nexport function findOverlap(cams: readonly CameraWindow[]): [number, number] | null {\n for (let i = 0; i < cams.length; i++) {\n for (let j = i + 1; j < cams.length; j++) {\n const a = cams[i]!;\n const b = cams[j]!;\n if (a.start < b.end && b.start < a.end) return [i, j];\n }\n }\n return null;\n}\n","export interface DepthItem {\n /** Position in the composition's stack (monotonic; gaps allowed). */\n stackIndex: number;\n threeD: boolean;\n /** Camera-space depth (larger = farther). Only read for threeD items. */\n depth: number;\n}\n\nconst finite = (n: number): number => (Number.isFinite(n) ? n : 0);\n\n/**\n * zIndex per item. Non-3D items keep their stack index. Each run of\n * consecutive threeD items is redistributed over the same index slots,\n * farthest first (drawn first), ties in stack order.\n */\nexport function assignDepthOrder(items: readonly DepthItem[]): number[] {\n const out = items.map(i => i.stackIndex);\n let i = 0;\n while (i < items.length) {\n if (!items[i]!.threeD) { i++; continue; }\n let j = i;\n while (j + 1 < items.length && items[j + 1]!.threeD) j++;\n const run = items.slice(i, j + 1).map((it, k) => ({ it, pos: i + k }));\n const slots = run.map(r => r.it.stackIndex);\n const farthestFirst = [...run].sort((a, b) => finite(b.it.depth) - finite(a.it.depth));\n farthestFirst.forEach((r, k) => { out[r.pos] = slots[k]!; });\n i = j + 1;\n }\n return out;\n}\n","import { Filter, GlProgram, GpuProgram, UniformGroup } from 'pixi.js';\n\n/**\n * One-pass disc (\"bokeh\") blur for depth of field: the taps sit on a golden-angle spiral, so the result is a pure function of the\n * pixels (no noise, no time) and the same frame is the same picture whichever way it was reached. The radius is in pixels.\n */\nexport const DISC_TAPS = 48;\n\n// pixi compiles GLSL as WebGL1-compatible by default; a shader that starts with `#version 300 es` is kept as ES 3.00,\n// and then the vertex shader must be ES 3.00 too.\nconst GL_VERTEX = `#version 300 es\nin vec2 aPosition;\nout vec2 vTextureCoord;\nuniform vec4 uInputSize;\nuniform vec4 uOutputFrame;\nuniform vec4 uOutputTexture;\nvoid main(void) {\n vec2 position = aPosition * uOutputFrame.zw + uOutputFrame.xy;\n position.x = position.x * (2.0 / uOutputTexture.x) - 1.0;\n position.y = position.y * (2.0 * uOutputTexture.z / uOutputTexture.y) - uOutputTexture.z;\n gl_Position = vec4(position, 0.0, 1.0);\n vTextureCoord = aPosition * (uOutputFrame.zw * uInputSize.zw);\n}`;\n\nconst GL_FRAGMENT = `#version 300 es\nprecision highp float;\nin vec2 vTextureCoord;\nuniform sampler2D uTexture;\nuniform vec4 uInputSize;\nuniform float uRadius;\nout vec4 finalColor;\nvoid main(void) {\n vec4 acc = vec4(0.0);\n for (int i = 0; i < ${DISC_TAPS}; i++) {\n float r = sqrt((float(i) + 0.5) / ${DISC_TAPS}.0) * uRadius;\n float a = float(i) * 2.39996323;\n acc += texture(uTexture, vTextureCoord + vec2(cos(a), sin(a)) * r * uInputSize.zw);\n }\n finalColor = acc / ${DISC_TAPS}.0;\n}`;\n\nconst WGSL = `\nstruct GlobalFilterUniforms {\n uInputSize: vec4<f32>, uInputPixel: vec4<f32>, uInputClamp: vec4<f32>,\n uOutputFrame: vec4<f32>, uGlobalFrame: vec4<f32>, uOutputTexture: vec4<f32>,\n};\nstruct DiscUniforms { uRadius: f32 };\n@group(0) @binding(0) var<uniform> gfu: GlobalFilterUniforms;\n@group(0) @binding(1) var uTexture: texture_2d<f32>;\n@group(0) @binding(2) var uSampler : sampler;\n@group(1) @binding(0) var<uniform> disc : DiscUniforms;\nstruct VSOutput { @builtin(position) position: vec4<f32>, @location(0) uv : vec2<f32> };\nfn filterVertexPosition(aPosition : vec2<f32>) -> vec4<f32> {\n var position = aPosition * gfu.uOutputFrame.zw + gfu.uOutputFrame.xy;\n position.x = position.x * (2.0 / gfu.uOutputTexture.x) - 1.0;\n position.y = position.y * (2.0 * gfu.uOutputTexture.z / gfu.uOutputTexture.y) - gfu.uOutputTexture.z;\n return vec4<f32>(position, 0.0, 1.0);\n}\nfn filterTextureCoord(aPosition : vec2<f32>) -> vec2<f32> {\n return aPosition * (gfu.uOutputFrame.zw * gfu.uInputSize.zw);\n}\n@vertex\nfn mainVertex(@location(0) aPosition : vec2<f32>) -> VSOutput {\n return VSOutput(filterVertexPosition(aPosition), filterTextureCoord(aPosition));\n}\n@fragment\nfn mainFragment(@location(0) uv : vec2<f32>) -> @location(0) vec4<f32> {\n var acc = vec4<f32>(0.0);\n for (var i = 0; i < ${DISC_TAPS}; i++) {\n let r = sqrt((f32(i) + 0.5) / ${DISC_TAPS}.0) * disc.uRadius;\n let a = f32(i) * 2.39996323;\n acc += textureSampleLevel(uTexture, uSampler, uv + vec2<f32>(cos(a), sin(a)) * r * gfu.uInputSize.zw, 0.0);\n }\n return acc / ${DISC_TAPS}.0;\n}`;\n\nexport class DiscBlurFilter extends Filter {\n constructor(radius = 8) {\n super({\n glProgram: GlProgram.from({ vertex: GL_VERTEX, fragment: GL_FRAGMENT, name: 'disc-blur' }),\n gpuProgram: GpuProgram.from({ vertex: { source: WGSL, entryPoint: 'mainVertex' }, fragment: { source: WGSL, entryPoint: 'mainFragment' } }),\n resources: { disc: new UniformGroup({ uRadius: { value: radius, type: 'f32' } }) },\n });\n this.radius = radius;\n }\n\n /** Blur radius in pixels. The padding follows it, so the blurred edge is not cut off. */\n get radius(): number { return (this.resources.disc as UniformGroup).uniforms.uRadius as number; }\n set radius(v: number) {\n const r = Math.max(0, v);\n (this.resources.disc as UniformGroup).uniforms.uRadius = r;\n this.padding = Math.ceil(r) + 2;\n }\n}\n","/**\n * The shader a lit threeD layer's PerspectiveMesh draws with. It is Pixi's own mesh shader (the same high-shader\n * bits: local uniforms, texture, round pixels) plus one more bit that runs after the texel is read: it rebuilds the fragment's world\n * position from its uv (the plane is flat, so world = origin + u·U + v·V exactly), shades it (ambient + point / spot / parallel,\n * Lambert, falloff, cone, planar shadows of up to MAX_CASTERS other layers) and adds depth fog. No extra pass, no extra texture:\n * the layer's own RenderTexture is sampled once, the casters' RenderTextures (already drawn this frame) are sampled for shadows.\n */\nimport {\n Shader, UniformGroup, Matrix, Texture, GlProgram, compileHighShaderGpuProgram,\n type GpuProgram, type TextureSource,\n} from 'pixi.js';\nimport { MAX_CASTERS, MAX_LIGHTS, SHADOW_TAPS, type PackedLights, type PlaneFrame } from './lighting';\n\n// Pixi does not export the bits from the package root in every build; they are small, so they are restated (same text as Pixi 8.22).\nconst localUniformBit = {\n name: 'local-uniform-bit',\n vertex: {\n header: /* wgsl */`\n struct LocalUniforms { uTransformMatrix:mat3x3<f32>, uColor:vec4<f32>, uRound:f32, }\n @group(1) @binding(0) var<uniform> localUniforms : LocalUniforms;`,\n main: /* wgsl */`\n vColor *= localUniforms.uColor;\n modelMatrix *= localUniforms.uTransformMatrix;`,\n end: /* wgsl */`\n if(localUniforms.uRound == 1) { vPosition = vec4(roundPixels(vPosition.xy, globalUniforms.uResolution), vPosition.zw); }`,\n },\n};\nconst textureBit = {\n name: 'texture-bit',\n vertex: {\n header: `struct TextureUniforms { uTextureMatrix:mat3x3<f32>, }\n @group(2) @binding(2) var<uniform> textureUniforms : TextureUniforms;`,\n main: `uv = (textureUniforms.uTextureMatrix * vec3(uv, 1.0)).xy;`,\n },\n fragment: {\n header: `@group(2) @binding(0) var uTexture: texture_2d<f32>;\n @group(2) @binding(1) var uSampler: sampler;`,\n main: `outColor = textureSample(uTexture, uSampler, vUV);`,\n },\n};\nconst roundPixelsBit = {\n name: 'round-pixels-bit',\n vertex: { header: `fn roundPixels(position: vec2<f32>, targetSize: vec2<f32>) -> vec2<f32> { return (floor(((position * 0.5 + 0.5) * targetSize) + 0.5) / targetSize) * 2.0 - 1.0; }` },\n};\n\nconst ML = MAX_LIGHTS, MC = MAX_CASTERS, TAPS = SHADOW_TAPS;\nconst SHADOW_KEYS = Array.from({ length: MC }, (_, j) => `uShadow${j}`);\n// the caster textures: one binding each (the first of them is binding 4), and a chain that picks the one a caster index names\nconst WGSL_SHADOW_DECLS = SHADOW_KEYS.map((k, j) => ` @group(2) @binding(${4 + j}) var ${k}: texture_2d<f32>;`).join('\\n');\nconst WGSL_SHADOW_PICK = SHADOW_KEYS.map((k, j) => (j === 0 ? '' : 'else ') + `if (j == ${j}) { a = textureSampleLevel(${k}, uSampler, uv, 0.0).a; }`).join(' ');\nconst GLSL_SHADOW_DECLS = SHADOW_KEYS.map(k => `uniform sampler2D ${k};`).join(' ');\nconst GLSL_SHADOW_PICK = SHADOW_KEYS.map((k, j) => (j === MC - 1 ? '' : `j == ${j} ? textureLod(${k}, uv, 0.0).a : `) + (j === MC - 1 ? `textureLod(${k}, uv, 0.0).a` : '')).join('');\n\nconst STRUCT_WGSL = /* wgsl */`\n struct LightUniforms {\n uOrigin: vec4<f32>, uAxisU: vec4<f32>, uAxisV: vec4<f32>, uCam: vec4<f32>, uCamFwd: vec4<f32>,\n uAmbient: vec4<f32>, uFogColor: vec4<f32>, uFogRange: vec4<f32>,\n uLPos: array<vec4<f32>, ${ML}>, uLDir: array<vec4<f32>, ${ML}>, uLCol: array<vec4<f32>, ${ML}>, uLFall: array<vec4<f32>, ${ML}>, uLShadow: array<vec4<f32>, ${ML}>,\n uCO: array<vec4<f32>, ${MC}>, uCU: array<vec4<f32>, ${MC}>, uCV: array<vec4<f32>, ${MC}>,\n };\n @group(2) @binding(3) var<uniform> lightUniforms : LightUniforms;\n`;\n\nconst lightBit = {\n name: 'light-bit',\n vertex: {\n header: /* wgsl */`${STRUCT_WGSL}\n @out vPW: vec4<f32>;`,\n // world position over camera depth, and 1 / depth: interpolated per fragment and divided, they give the exact (perspective-correct) point\n end: /* wgsl */`\n {\n let Pv = lightUniforms.uOrigin.xyz + vUV.x * lightUniforms.uAxisU.xyz + vUV.y * lightUniforms.uAxisV.xyz;\n let zc = max(dot(Pv - lightUniforms.uCam.xyz, lightUniforms.uCamFwd.xyz), 1e-3);\n vPW = vec4<f32>(Pv / zc, 1.0 / zc);\n }`,\n },\n fragment: {\n header: /* wgsl */`\n${STRUCT_WGSL}\n @in vPW: vec4<f32>;\n${WGSL_SHADOW_DECLS}\n\n fn casterAlpha(j: i32, uv: vec2<f32>) -> f32 {\n let inside = step(0.0, uv.x) * step(uv.x, 1.0) * step(0.0, uv.y) * step(uv.y, 1.0);\n var a = 0.0;\n ${WGSL_SHADOW_PICK}\n return a * inside;\n }\n\n fn shadowAt(P: vec3<f32>, i: i32) -> f32 {\n let lp = lightUniforms.uLPos[i]; let ld = lightUniforms.uLDir[i];\n let parallel = lp.w > 2.5;\n var occl = 0.0;\n for (var j = 0; j < ${MC}; j++) {\n if (f32(j) >= lightUniforms.uAxisU.w) { break; }\n let Co = lightUniforms.uCO[j].xyz; let Cu = lightUniforms.uCU[j].xyz; let Cv = lightUniforms.uCV[j].xyz;\n let Nc = cross(Cu, Cv);\n var D = lp.xyz - P;\n if (parallel) { D = -ld.xyz * 100000.0; }\n let denom = dot(D, Nc);\n if (abs(denom) < 1e-9) { continue; }\n let t = dot(Co - P, Nc) / denom;\n if (t <= 1e-4 || t >= 1.0) { continue; }\n let H = P + t * D;\n let uv = vec2<f32>(dot(H - Co, Cu) / dot(Cu, Cu), dot(H - Co, Cv) / dot(Cv, Cv));\n let lenD = length(D);\n let far = select((1.0 - t) * lenD, 1000.0, parallel);\n let w = lightUniforms.uLShadow[i].y * (t * lenD) / max(far, 1.0);\n let r = vec2<f32>(w / length(Cu), w / length(Cv));\n var a = 0.0;\n if (w * w > 0.0) {\n for (var k = 0; k < ${TAPS}; k++) {\n let rr = sqrt((f32(k) + 0.5) / ${TAPS}.0);\n let an = f32(k) * 2.39996323;\n a += casterAlpha(j, uv + vec2<f32>(cos(an), sin(an)) * rr * r);\n }\n a = a / ${TAPS}.0;\n } else { a = casterAlpha(j, uv); }\n occl = max(occl, a);\n }\n return 1.0 - occl * lightUniforms.uLShadow[i].x;\n }\n `,\n end: /* wgsl */`\n {\n let P = vPW.xyz / vPW.w;\n if (lightUniforms.uCam.w > 0.5) {\n var N = normalize(cross(lightUniforms.uAxisU.xyz, lightUniforms.uAxisV.xyz));\n if (dot(N, lightUniforms.uCam.xyz - P) < 0.0) { N = -N; }\n var light = lightUniforms.uAmbient.rgb;\n for (var i = 0; i < ${ML}; i++) {\n if (f32(i) >= lightUniforms.uOrigin.w) { break; }\n let lp = lightUniforms.uLPos[i]; let ld = lightUniforms.uLDir[i]; let lc = lightUniforms.uLCol[i]; let lf = lightUniforms.uLFall[i];\n var L = -ld.xyz;\n var dist = 0.0;\n if (lp.w < 2.5) { let d = lp.xyz - P; dist = length(d); L = d / max(dist, 1e-4); }\n let ndl = max(dot(N, L), 0.0);\n var att = 1.0;\n if (lp.w < 2.5) {\n if (lf.x > 0.5 && lf.x < 1.5) { att = 1.0 - smoothstep(lf.y, lf.y + max(lf.z, 1e-3), dist); }\n else if (lf.x > 1.5) { att = min(1.0, (lf.y * lf.y) / max(dist * dist, 1e-6)); }\n }\n var cone = 1.0;\n if (lp.w > 1.5 && lp.w < 2.5) { cone = smoothstep(ld.w, lc.w, dot(-L, ld.xyz)); }\n var sh = 1.0;\n if (lf.w > 0.5 && ndl * att * cone > 0.0) { sh = shadowAt(P, i); }\n light += lc.rgb * (ndl * att * cone * sh);\n }\n finalColor = vec4<f32>(min(finalColor.rgb * light, vec3<f32>(finalColor.a)), finalColor.a);\n }\n if (lightUniforms.uFogRange.w > 0.5) {\n let depth = dot(P - lightUniforms.uCam.xyz, lightUniforms.uCamFwd.xyz);\n let f = clamp((depth - lightUniforms.uFogRange.x) / max(lightUniforms.uFogRange.y - lightUniforms.uFogRange.x, 1e-3), 0.0, 1.0) * lightUniforms.uFogColor.a;\n finalColor = vec4<f32>(mix(finalColor.rgb, lightUniforms.uFogColor.rgb * finalColor.a, f), finalColor.a);\n }\n }\n `,\n },\n};\n\nconst lightBitGl = {\n name: 'light-bit',\n fragment: {\n header: /* glsl */`\n uniform vec4 uOrigin; uniform vec4 uAxisU; uniform vec4 uAxisV; uniform vec4 uCam; uniform vec4 uCamFwd;\n uniform vec4 uAmbient; uniform vec4 uFogColor; uniform vec4 uFogRange;\n uniform vec4 uLPos[${ML}]; uniform vec4 uLDir[${ML}]; uniform vec4 uLCol[${ML}]; uniform vec4 uLFall[${ML}]; uniform vec4 uLShadow[${ML}];\n uniform vec4 uCO[${MC}]; uniform vec4 uCU[${MC}]; uniform vec4 uCV[${MC}];\n ${GLSL_SHADOW_DECLS}\n\n float casterAlpha(int j, vec2 uv) {\n float inside = step(0.0, uv.x) * step(uv.x, 1.0) * step(0.0, uv.y) * step(uv.y, 1.0);\n float a = ${GLSL_SHADOW_PICK};\n return a * inside;\n }\n\n float shadowAt(vec3 P, int i) {\n vec4 lp = uLPos[i]; vec4 ld = uLDir[i];\n bool parallel = lp.w > 2.5;\n float occl = 0.0;\n for (int j = 0; j < ${MC}; j++) {\n if (float(j) >= uAxisU.w) break;\n vec3 Co = uCO[j].xyz; vec3 Cu = uCU[j].xyz; vec3 Cv = uCV[j].xyz;\n vec3 Nc = cross(Cu, Cv);\n vec3 D = parallel ? -ld.xyz * 100000.0 : lp.xyz - P;\n float denom = dot(D, Nc);\n if (abs(denom) < 1e-9) continue;\n float t = dot(Co - P, Nc) / denom;\n if (t <= 1e-4 || t >= 1.0) continue;\n vec3 H = P + t * D;\n vec2 uv = vec2(dot(H - Co, Cu) / dot(Cu, Cu), dot(H - Co, Cv) / dot(Cv, Cv));\n float lenD = length(D);\n float far = parallel ? 1000.0 : (1.0 - t) * lenD;\n float w = uLShadow[i].y * (t * lenD) / max(far, 1.0);\n vec2 r = vec2(w / length(Cu), w / length(Cv));\n float a = 0.0;\n if (w * w > 0.0) {\n for (int k = 0; k < ${TAPS}; k++) {\n float rr = sqrt((float(k) + 0.5) / ${TAPS}.0);\n float an = float(k) * 2.39996323;\n a += casterAlpha(j, uv + vec2(cos(an), sin(an)) * rr * r);\n }\n a /= ${TAPS}.0;\n } else { a = casterAlpha(j, uv); }\n occl = max(occl, a);\n }\n return 1.0 - occl * uLShadow[i].x;\n }\n `,\n end: /* glsl */`\n {\n vec3 P = vPW.xyz / vPW.w;\n if (uCam.w > 0.5) {\n vec3 N = normalize(cross(uAxisU.xyz, uAxisV.xyz));\n if (dot(N, uCam.xyz - P) < 0.0) N = -N;\n vec3 light = uAmbient.rgb;\n for (int i = 0; i < ${ML}; i++) {\n if (float(i) >= uOrigin.w) break;\n vec4 lp = uLPos[i]; vec4 ld = uLDir[i]; vec4 lc = uLCol[i]; vec4 lf = uLFall[i];\n vec3 L = -ld.xyz;\n float dist = 0.0;\n if (lp.w < 2.5) { vec3 d = lp.xyz - P; dist = length(d); L = d / max(dist, 1e-4); }\n float ndl = max(dot(N, L), 0.0);\n float att = 1.0;\n if (lp.w < 2.5) {\n if (lf.x > 0.5 && lf.x < 1.5) att = 1.0 - smoothstep(lf.y, lf.y + max(lf.z, 1e-3), dist);\n else if (lf.x > 1.5) att = min(1.0, (lf.y * lf.y) / max(dist * dist, 1e-6));\n }\n float cone = 1.0;\n if (lp.w > 1.5 && lp.w < 2.5) cone = smoothstep(ld.w, lc.w, dot(-L, ld.xyz));\n float sh = 1.0;\n if (lf.w > 0.5 && ndl * att * cone > 0.0) sh = shadowAt(P, i);\n light += lc.rgb * (ndl * att * cone * sh);\n }\n finalColor.rgb = min(finalColor.rgb * light, vec3(finalColor.a));\n }\n if (uFogRange.w > 0.5) {\n float depth = dot(P - uCam.xyz, uCamFwd.xyz);\n float f = clamp((depth - uFogRange.x) / max(uFogRange.y - uFogRange.x, 1e-3), 0.0, 1.0) * uFogColor.a;\n finalColor.rgb = mix(finalColor.rgb, uFogColor.rgb * finalColor.a, f);\n }\n }\n `,\n },\n};\n\nconst GL_VERTEX = `#version 300 es\nin vec2 aPosition;\nin vec2 aUV;\nout vec4 vColor;\nout vec2 vUV;\nout vec4 vPW;\nuniform vec4 uOrigin; uniform vec4 uAxisU; uniform vec4 uAxisV; uniform vec4 uCam; uniform vec4 uCamFwd;\nuniform mat3 uProjectionMatrix; uniform mat3 uWorldTransformMatrix; uniform vec4 uWorldColorAlpha; uniform vec2 uResolution;\nuniform mat3 uTransformMatrix; uniform vec4 uColor; uniform float uRound;\nuniform mat3 uTextureMatrix;\nvec2 roundPixels(vec2 position, vec2 targetSize) { return (floor(((position * 0.5 + 0.5) * targetSize) + 0.5) / targetSize) * 2.0 - 1.0; }\nvoid main(void) {\n mat3 modelMatrix = uTransformMatrix;\n vColor = uColor;\n vUV = (uTextureMatrix * vec3(aUV, 1.0)).xy;\n mat3 mvp = uProjectionMatrix * uWorldTransformMatrix * modelMatrix;\n gl_Position = vec4((mvp * vec3(aPosition, 1.0)).xy, 0.0, 1.0);\n vColor *= uWorldColorAlpha;\n if (uRound == 1.) gl_Position.xy = roundPixels(gl_Position.xy, uResolution);\n vec3 Pv = uOrigin.xyz + vUV.x * uAxisU.xyz + vUV.y * uAxisV.xyz;\n float zc = max(dot(Pv - uCam.xyz, uCamFwd.xyz), 1e-3);\n vPW = vec4(Pv / zc, 1.0 / zc);\n}`;\n\nconst GL_FRAGMENT = `#version 300 es\nprecision highp float;\nin vec4 vColor;\nin vec2 vUV;\nin vec4 vPW;\nout vec4 finalColor;\nuniform sampler2D uTexture;\n${lightBitGl.fragment.header}\nvoid main(void) {\n vec4 outColor = texture(uTexture, vUV);\n finalColor = outColor * vColor;\n ${lightBitGl.fragment.end}\n}`;\n\nlet programs: { gl: GlProgram; gpu: GpuProgram } | null = null;\nfunction getPrograms() {\n programs ??= {\n // pixi compiles high-shader GLSL as WebGL1-compatible (no textureLod, no dynamic uniform-array index): the GL program is written as ES 3.00\n gl: GlProgram.from({ name: 'lit-mesh', vertex: GL_VERTEX, fragment: GL_FRAGMENT }),\n gpu: compileHighShaderGpuProgram({ name: 'lit-mesh', bits: [localUniformBit, textureBit, roundPixelsBit, lightBit] as never }),\n };\n return programs;\n}\n\nexport interface FogState { r: number; g: number; b: number; near: number; far: number; amount: number }\nexport interface CasterInput { frame: PlaneFrame; source: TextureSource }\n\n/** One per lit layer: its own uniforms and its own shadow textures. */\nexport class LitMaterial {\n readonly shader: Shader;\n private readonly u: UniformGroup;\n\n constructor() {\n const { gl, gpu } = getPrograms();\n const v4 = () => ({ value: new Float32Array(4), type: 'vec4<f32>' as const });\n const arr = (n: number) => ({ value: new Float32Array(4 * n), type: 'vec4<f32>' as const, size: n });\n this.u = new UniformGroup({\n uOrigin: v4(), uAxisU: v4(), uAxisV: v4(), uCam: v4(), uCamFwd: v4(), uAmbient: v4(), uFogColor: v4(), uFogRange: v4(),\n uLPos: arr(ML), uLDir: arr(ML), uLCol: arr(ML), uLFall: arr(ML), uLShadow: arr(ML),\n uCO: arr(MC), uCU: arr(MC), uCV: arr(MC),\n });\n this.shader = new Shader({\n glProgram: gl, gpuProgram: gpu,\n resources: {\n uTexture: Texture.EMPTY.source,\n uSampler: Texture.EMPTY.source.style,\n textureUniforms: { uTextureMatrix: { type: 'mat3x3<f32>', value: new Matrix() } },\n lightUniforms: this.u,\n ...Object.fromEntries(SHADOW_KEYS.map(k => [k, Texture.EMPTY.source])),\n },\n });\n }\n\n setTexture(src: TextureSource): void {\n if (this.shader.resources.uTexture !== src) {\n this.shader.resources.uTexture = src;\n this.shader.resources.uSampler = src.style;\n }\n }\n\n update(frame: PlaneFrame, cam: { x: number; y: number; z: number; fx: number; fy: number; fz: number }, lights: PackedLights | null, fog: FogState | null, casters: readonly CasterInput[]): void {\n const U = this.u.uniforms as Record<string, Float32Array>;\n const nc = Math.min(casters.length, MC);\n U.uOrigin!.set([frame.o.x, frame.o.y, frame.o.z, lights ? lights.count : 0]);\n U.uAxisU!.set([frame.u.x, frame.u.y, frame.u.z, nc]);\n U.uAxisV!.set([frame.v.x, frame.v.y, frame.v.z, 0]);\n U.uCam!.set([cam.x, cam.y, cam.z, lights ? 1 : 0]);\n U.uCamFwd!.set([cam.fx, cam.fy, cam.fz, 0]);\n if (lights) {\n U.uAmbient!.set([lights.ambient[0], lights.ambient[1], lights.ambient[2], 0]);\n U.uLPos!.set(lights.pos); U.uLDir!.set(lights.dir); U.uLCol!.set(lights.col); U.uLFall!.set(lights.fall); U.uLShadow!.set(lights.shadow);\n }\n if (fog) { U.uFogColor!.set([fog.r, fog.g, fog.b, fog.amount]); U.uFogRange!.set([fog.near, fog.far, 0, 1]); }\n else U.uFogRange!.set([0, 0, 0, 0]);\n const keys = SHADOW_KEYS;\n for (let j = 0; j < MC; j++) {\n const c = casters[j];\n if (c && j < nc) {\n U.uCO!.set([c.frame.o.x, c.frame.o.y, c.frame.o.z, 0], 4 * j);\n U.uCU!.set([c.frame.u.x, c.frame.u.y, c.frame.u.z, 0], 4 * j);\n U.uCV!.set([c.frame.v.x, c.frame.v.y, c.frame.v.z, 0], 4 * j);\n if (this.shader.resources[keys[j]] !== c.source) this.shader.resources[keys[j]] = c.source;\n } else if (this.shader.resources[keys[j]] !== Texture.EMPTY.source) this.shader.resources[keys[j]] = Texture.EMPTY.source;\n }\n this.u.update();\n }\n\n destroy(): void { this.shader.destroy(); }\n}\n","import { Container, Matrix, PerspectiveMesh, RenderTexture, Texture } from 'pixi.js';\nimport type { Sequence } from '../sequences/Base';\nimport { DiscBlurFilter } from '../filters/DiscBlur';\nimport { MAX_BLUR, MIN_BLUR } from './focus';\nimport { blendFilterFor, isAdvancedBlend, type BlendFilterLike } from '../core/blend';\nimport { describeLayer } from '../core/lint';\nimport { DEG, NEAR, layerToWorld, projectLayer, type CameraBasis, type LayerTransform, type Rect } from './math';\nimport { LitMaterial } from './LitMaterial';\nimport type { PlaneFrame } from './lighting';\n\n/** Render textures are capped at this many pixels on the long side; larger layers are downscaled. */\nexport const MAX_TEXTURE_SIZE = 4096;\n/**\n * Render textures are drawn at this multiple of the layer size (until the caps),\n * so a layer enlarged by perspective (z > 0) stays sharp instead of showing\n * jagged edges and soft text.\n */\nexport const SUPERSAMPLE = 2;\n/** Total texture pixels per layer are capped here (≈ one 2048² target); resolution drops to fit. */\nexport const MAX_TEXTURE_PIXELS = 2048 * 2048;\n/** MSAA multiplies target memory ~4x, so only small textures get it (supersampling covers the rest). */\nexport const ANTIALIAS_MAX_PIXELS = 1024 * 1024;\n/** Mesh grid per side. 20 keeps steeply tilted planes free of visible affine warping. */\nexport const MESH_GRID = 20;\n\n/** The slice of a Pixi renderer Layer3D needs (also what tests fake). */\nexport interface SpaceHost {\n render(options: {\n container: Container;\n target: RenderTexture;\n transform: Matrix;\n clear: boolean;\n clearColor: number[];\n }): void;\n}\n\ntype Carrier = Container & { z?: number; rotationX?: number; rotationY?: number };\n\ninterface TextureSize { w: number; h: number; resolution: number; antialias: boolean }\n\n/** Sum of the target's filter paddings: the texture must be this much larger on every side or filter output is clipped. */\nfunction filterPadding(target: Container): number {\n const filters = (target as unknown as { filters?: ReadonlyArray<{ padding?: number }> | null }).filters;\n if (!Array.isArray(filters)) return 0;\n let pad = 0;\n for (const f of filters) pad += f?.padding ?? 0;\n return Number.isFinite(pad) && pad > 0 ? Math.ceil(pad) : 0;\n}\n\nexport function readLayerTransform(target: Container): LayerTransform {\n const c = target as Carrier;\n return {\n x: c.x, y: c.y, z: c.z ?? 0,\n rotationX: (c.rotationX ?? 0) * DEG,\n rotationY: (c.rotationY ?? 0) * DEG,\n rotationZ: c.rotation,\n scaleX: c.scale.x, scaleY: c.scale.y,\n pivotX: c.pivot.x, pivotY: c.pivot.y,\n };\n}\n\n/**\n * Draws one `threeD` sequence: its display object is rendered into a\n * RenderTexture (with its own 2D transform replaced, so layer-local content\n * lands at the texture origin) and shown on a PerspectiveMesh whose four\n * corners come from projecting the layer through the active camera.\n *\n * The sequence's `target` is never in the scene graph; the composition adds\n * `display` instead. `z`, `rotationX`, `rotationY` live on `target` as plain\n * numeric props so the timeline tweens them like any other prop.\n */\nexport class Layer3D {\n readonly display: PerspectiveMesh;\n /** Camera-space depth from the last update (larger = farther). */\n depth = 0;\n private rt: RenderTexture | null = null;\n /**\n * Textures replaced by a bigger / smaller one. Destroying one right away warns \"destroyed while still\n * bound\": the mesh's bind group still points at it until the next render. They go at the next update,\n * by which time a frame has been drawn with the new texture.\n */\n private retired: RenderTexture[] = [];\n private size: TextureSize | null = null;\n private warnedBehind = false;\n /** Depth-of-field blur radius (px) from the last `setBlur`; 0 = no filter. */\n blur = 0;\n private blurFilter: DiscBlurFilter | null = null;\n private blendWas = 'normal';\n private blendFilter: BlendFilterLike | null = null;\n /** The projected corners of the card (TL, TR, BR, BL as x0, y0 … x3, y3, in the space of the composition that holds it), or null while it is not drawn: what a hit test reads. */\n corners: number[] | null = null;\n /** The plane in world space from the last update (a texture uv of 0..1 maps to `o + u·U + v·V`): what shading and shadows need. */\n world: PlaneFrame | null = null;\n /** The lit shader: made only when the composition has a light or fog (a composition with neither makes nothing). */\n material: LitMaterial | null = null;\n /** This layer's own texture (what a shadow reads), or null before the first draw. */\n get source() { return this.rt?.source ?? null; }\n private warnedLit = false;\n /** The spec of the layer this draws (for `lit`, `castsShadows`). */\n get spec() { return this.seq.spec; }\n\n constructor(\n private readonly seq: Sequence,\n private readonly frameOf: () => Rect,\n ) {\n const target = seq.target as Carrier;\n target.z ??= 0;\n target.rotationX ??= 0;\n target.rotationY ??= 0;\n this.display = new PerspectiveMesh({ texture: Texture.WHITE, verticesX: MESH_GRID, verticesY: MESH_GRID });\n if (seq.spec.name) this.display.label = seq.spec.name;\n this.display.visible = false;\n }\n\n update(host: SpaceHost, basis: CameraBasis): void {\n this.flushRetired();\n const target = this.seq.target as Carrier | null;\n // Pixi skips rendering (and clearing) a container that is not `visible`\n // (e.g. PixiPlugin autoAlpha at alpha 0), which would leave a stale texture.\n if (!target || !target.renderable || !target.visible) return this.hide();\n\n const bounds = this.frameOf();\n const pad = filterPadding(target);\n const needW = Math.ceil(bounds.width + 2 * pad);\n const needH = Math.ceil(bounds.height + 2 * pad);\n if (!(needW >= 1 && needH >= 1) || !Number.isFinite(bounds.x) || !Number.isFinite(bounds.y)) return this.hide();\n\n const size = this.sizeFor(needW, needH);\n // The quad covers exactly the texture's pixel rect in layer space.\n const frame: Rect = { x: bounds.x - pad, y: bounds.y - pad, width: size.w, height: size.h };\n const projected = projectLayer(readLayerTransform(target), frame, basis);\n this.depth = projected.depth;\n {\n const lt = readLayerTransform(target);\n const o = layerToWorld(lt, frame.x, frame.y);\n const pu = layerToWorld(lt, frame.x + frame.width, frame.y);\n const pv = layerToWorld(lt, frame.x, frame.y + frame.height);\n this.world = { o, u: { x: pu.x - o.x, y: pu.y - o.y, z: pu.z - o.z }, v: { x: pv.x - o.x, y: pv.y - o.y, z: pv.z - o.z } };\n }\n if (!projected.visible) {\n if (!this.warnedBehind) {\n this.warnedBehind = true;\n if ((this.seq.spec as { hideBehindCamera?: boolean }).hideBehindCamera) return this.hide(); // on purpose: say nothing\n if (projected.depth > NEAR) {\n // the layer's own origin is in front of the camera: a tilt or a large size swings a CORNER past the camera plane\n console.warn(\n `pixi-effects: ${describeLayer(this.seq.spec)}: part of it (a corner) reaches the camera plane (z = ${(target.z ?? 0).toFixed(0)}, rotationX ${(target.rotationX ?? 0).toFixed(0)}°, rotationY ${(target.rotationY ?? 0).toFixed(0)}°), ` +\n `and a layer is hidden whole when any corner is at or behind it. Tilt it less (rotationX / rotationY), make it smaller, or keep the camera further away from it ` +\n `(the default camera sits at z = (height/2)/tan(fov/2), about 989 for 720p at fov 40).`,\n );\n } else {\n console.warn(\n `pixi-effects: ${describeLayer(this.seq.spec)} is at or behind the camera plane (z = ${(target.z ?? 0).toFixed(0)}) and is hidden. ` +\n `If that is unintended, lower its z or move the camera back (the default camera sits at z = (height/2)/tan(fov/2), about 989 for 720p at fov 40).`,\n );\n }\n }\n return this.hide();\n }\n\n this.ensureTexture(size);\n // `transform` replaces the container's own local transform for this render\n // (Pixi RenderGroupSystem), while `container.alpha` still applies — so the\n // texture carries the layer's alpha and the mesh alpha stays at 1.\n host.render({\n container: target,\n target: this.rt!,\n transform: new Matrix().translate(-frame.x, -frame.y),\n clear: true,\n clearColor: [0, 0, 0, 0],\n });\n this.display.geometry.setCorners(...projected.corners);\n this.corners = projected.corners;\n this.material?.setTexture(this.rt!.source);\n this.display.visible = true;\n }\n\n /**\n * Depth-of-field blur on the projected mesh (screen space), so a tilted or scaled layer blurs by the size it is drawn at.\n * A radius under MIN_BLUR removes the filter: a sharp layer costs nothing. A blend mode moves to the filter while it is on\n * (a filtered object blends as a whole), and comes back when it goes.\n */\n setBlur(radius: number): void {\n const d = this.display as unknown as { filters: unknown; blendMode: string };\n // No hysteresis on purpose: whether a layer has the filter must depend only on this frame's radius, never on the frame before it\n // (a frame is a pure function of the camera and the layers, whichever order frames are visited in). A layer hovering at the\n // threshold creates and destroys a cheap filter object each frame; that is the price of determinism.\n const r = radius > MIN_BLUR ? Math.min(radius, MAX_BLUR) : 0;\n this.blur = r;\n if (r === 0) {\n if (this.blurFilter) {\n d.filters = null;\n d.blendMode = this.blendWas;\n this.blurFilter.destroy();\n this.blurFilter = null;\n this.blendFilter?.destroy();\n this.blendFilter = null;\n }\n return;\n }\n if (!this.blurFilter) {\n this.blurFilter = new DiscBlurFilter(r);\n this.blendWas = d.blendMode ?? 'normal';\n const chain: unknown[] = [this.blurFilter];\n if (isAdvancedBlend(this.blendWas)) {\n // an advanced mode is a filter of its own: blur first, then blend what is blurred onto the backdrop\n this.blendFilter = blendFilterFor(this.blendWas);\n if (this.blendFilter) { chain.push(this.blendFilter); d.blendMode = 'normal'; }\n } else if (this.blendWas !== 'normal' && this.blendWas !== 'inherit') {\n // only an explicit basic mode moves ('inherit' is Pixi's default for a container and 'normal' is the filter's own: nothing to move)\n this.blurFilter.blendMode = this.blendWas as never;\n d.blendMode = 'normal';\n }\n d.filters = chain;\n }\n this.blurFilter.radius = r;\n }\n\n /**\n * Turn the lit shader on (made once) or off. Returns it, or null when it is off or cannot be made on this renderer (said once: the layer\n * then draws unlit, as it did before there were lights).\n */\n setLit(on: boolean): LitMaterial | null {\n if (on && !this.material) {\n try {\n this.material = new LitMaterial();\n } catch (err) {\n if (!this.warnedLit) {\n this.warnedLit = true;\n console.warn(`pixi-effects: ${describeLayer(this.seq.spec)}: the lighting shader could not be made on this renderer (${(err as Error)?.message ?? err}); the layer is drawn unlit`);\n }\n return null;\n }\n if (this.rt) this.material.setTexture(this.rt.source);\n (this.display as unknown as { shader: unknown }).shader = this.material.shader;\n } else if (!on && this.material) {\n (this.display as unknown as { shader: unknown }).shader = null;\n this.material.destroy();\n this.material = null;\n }\n return this.material;\n }\n\n destroy(): void {\n this.setLit(false);\n this.setBlur(0);\n this.display.destroy();\n this.rt?.destroy(true);\n this.rt = null;\n this.flushRetired();\n }\n\n private flushRetired(): void {\n for (const t of this.retired) t.destroy(true);\n this.retired = [];\n }\n\n private hide(): void {\n this.display.visible = false;\n }\n\n /**\n * Texture size for content of w×h. An existing texture is kept while it is at\n * least that big and at most 2x too big, so content whose bounds change every\n * frame (typewriter text, growing shapes) does not reallocate each frame.\n */\n private sizeFor(w: number, h: number): TextureSize {\n const cur = this.size;\n if (cur && cur.w >= w && cur.h >= h && cur.w <= 2 * w && cur.h <= 2 * h) return cur;\n const resolution = Math.min(\n SUPERSAMPLE,\n MAX_TEXTURE_SIZE / Math.max(w, h),\n Math.sqrt(MAX_TEXTURE_PIXELS / (w * h)),\n );\n const antialias = w * h * resolution * resolution <= ANTIALIAS_MAX_PIXELS;\n return { w, h, resolution, antialias };\n }\n\n private ensureTexture(size: TextureSize): void {\n if (this.rt && this.size === size) return;\n // Same sampling: resize the texture where it is. Replacing it makes Pixi warn that the old one was\n // destroyed while still bound, because the mesh keeps pointing at it until the next render.\n if (this.rt && this.size && this.size.antialias === size.antialias) {\n this.rt.resize(size.w, size.h, size.resolution);\n this.size = size;\n return;\n }\n const next = RenderTexture.create({\n width: size.w, height: size.h, resolution: size.resolution, antialias: size.antialias,\n });\n this.display.texture = next;\n if (this.rt) this.retired.push(this.rt);\n this.rt = next;\n this.size = size;\n }\n}\n","import { collectPropKeys } from './specKeys';\nimport { describeLayer } from '../core/lint';\nimport { focusProblems } from './focus';\nimport { fogProblems, lightLayerProblems } from './lightChecks';\nimport type { SequenceSpec } from '../types';\n\ntype Warn = (message: string) => void;\nconst defaultWarn: Warn = m => console.warn(m);\n\nconst FOV_HINT = 'perspective is the camera\\'s \"fov\" — add a { type: \"camera\" } layer and set fov in its initial / keyframes';\n\nconst DOF_HINT = 'depth of field is the camera\\'s \"focus\" (the plane that is sharp: a layer name or a z) and \"aperture\" (how shallow: 0 = off, 30 = default) — put them in the camera\\'s initial / keyframes';\n\n/** Keys that are never valid for any layer, with a hint at what the author probably meant. */\nconst LAYER_ALIASES: Record<string, string> = {\n rotateX: 'did you mean \"rotationX\"?',\n rotateY: 'did you mean \"rotationY\"?',\n rotateZ: 'did you mean \"rotation\"?',\n rotationZ: 'did you mean \"rotation\" (it is the Z rotation)?',\n translateZ: 'did you mean \"z\"?',\n depth: 'did you mean \"z\"?',\n posZ: 'did you mean \"z\"?',\n perspective: FOV_HINT,\n zoom: FOV_HINT,\n};\n\n/** Camera-only mistakes. */\nconst CAMERA_ALIASES: Record<string, string> = {\n pointOfInterest: 'did you mean \"lookAtX / lookAtY / lookAtZ\"?',\n lookAt: 'did you mean \"lookAtX / lookAtY / lookAtZ\"?',\n depthOfField: DOF_HINT, dof: DOF_HINT, focalDistance: DOF_HINT, focusDistance: DOF_HINT, fStop: DOF_HINT, blurAmount: DOF_HINT,\n};\n\nconst CAMERA_PROPS = ['x', 'y', 'z', 'fov', 'focus', 'aperture', 'lookAtX', 'lookAtY', 'lookAtZ', 'offsetX', 'offsetY', 'offsetZ', 'lookOffsetX', 'lookOffsetY', 'lookOffsetZ', 'fogNear', 'fogFar', 'fogColor', 'fogAmount'];\nconst NEEDS_THREE_D = ['z', 'rotationX', 'rotationY'];\n/** Camera-only names that the animatable-property check lets through on any layer. */\nconst CAMERA_ONLY = ['focus', 'aperture', 'fogNear', 'fogFar', 'fogColor', 'fogAmount'];\nconst SKEW_KEYS = ['skew', 'skewX', 'skewY'];\n\n/**\n * Warn (never throw) about the inputs an AI author is most likely to get wrong,\n * with a message that says what to change. One call per layer, at build time.\n */\nexport function lintSequence(spec: SequenceSpec, warn: Warn = defaultWarn): void {\n const who = describeLayer(spec);\n const keys = collectPropKeys(spec);\n const explained = new Set<string>();\n\n for (const k of keys) {\n const hint = LAYER_ALIASES[k] ?? (spec.type === 'camera' ? CAMERA_ALIASES[k] : undefined);\n if (hint) {\n explained.add(k);\n warn(`pixi-effects: ${who}: \"${k}\" is not a property — ${hint}`);\n }\n }\n\n if (spec.type === 'light') {\n for (const m of lightLayerProblems(spec)) warn(`pixi-effects: ${who}: ${m}`);\n return;\n }\n\n if (spec.type === 'camera') {\n for (const m of fogProblems(spec)) warn(`pixi-effects: ${who}: ${m}`);\n const raw = spec as unknown as Record<string, unknown>;\n for (const p of CAMERA_PROPS) {\n if (p in raw) warn(`pixi-effects: ${who}: \"${p}\" must go inside initial / keyframes, not on the camera itself`);\n }\n for (const k of Object.keys(raw)) {\n const hint = CAMERA_ALIASES[k] ?? LAYER_ALIASES[k];\n if (hint) warn(`pixi-effects: ${who}: \"${k}\" is not a property — ${hint} (inside initial)`);\n }\n for (const k of keys) {\n if (!explained.has(k) && !CAMERA_PROPS.includes(k)) {\n warn(`pixi-effects: ${who}: \"${k}\" has no effect on a camera (use ${CAMERA_PROPS.join(', ')})`);\n }\n }\n return;\n }\n\n for (const k of CAMERA_ONLY) {\n if (keys.has(k)) warn(`pixi-effects: ${who}: \"${k}\" is a camera property and does nothing on this layer: write it in the initial / keyframes of a { type: 'camera' } layer`);\n }\n\n if (spec.type === 'audio') {\n if (spec.threeD) warn(`pixi-effects: ${who}: threeD has no effect on audio`);\n return;\n }\n\n if (!spec.threeD) {\n for (const k of NEEDS_THREE_D) {\n if (keys.has(k)) warn(`pixi-effects: ${who}: \"${k}\" needs threeD: true (it is ignored otherwise)`);\n }\n } else {\n for (const k of SKEW_KEYS) {\n if (keys.has(k)) warn(`pixi-effects: ${who}: \"${k}\" is ignored on threeD layers`);\n }\n }\n}\n\n/** The layer names a camera's `focus` points at: missing, not threeD, or with a z that moves later. One call per camera, at build time. */\nexport function lintFocus(camera: SequenceSpec, siblings: readonly SequenceSpec[], warn: Warn = defaultWarn): void {\n if (camera.type !== 'camera') return;\n const who = describeLayer(camera);\n for (const p of focusProblems(camera, siblings)) {\n if (p.kind === 'missing') {\n warn(`pixi-effects: ${who}: focus: no layer named \"${p.name}\"${p.hint ? `; did you mean \"${p.hint}\"?` : ''} (the z = 0 plane is used). Write a threeD layer's name or a z number`);\n } else if (p.kind === 'not-threeD') {\n warn(`pixi-effects: ${who}: focus \"${p.name}\" is not a threeD layer, so it has no depth (the z = 0 plane is used). Write a threeD layer's name or a z number`);\n } else if (p.kind === 'duplicate') {\n warn(`pixi-effects: ${who}: focus \"${p.name}\": ${p.count} layers are named \"${p.name}\"; the first threeD one is used. Give the layers different names`);\n } else {\n warn(`pixi-effects: ${who}: focus \"${p.name}\" reads only the first z of that layer; its z moves later and the focus does not follow. Animate focus itself with numbers to follow it`);\n }\n }\n}\n","import { suggestName } from './options';\nimport type { SequenceSpec } from '../types';\n\nexport const MATTE_CHANNELS = ['alpha', 'luma'] as const;\n\n/** One matte a layer is cut by: another layer of the same composition, read by its alpha or its brightness, optionally inverted (1 − matte). */\nexport interface MatteRef { layer: string; channel: 'alpha' | 'luma'; invert: boolean }\n\nexport type MaskSource =\n | { kind: 'none' }\n | { kind: 'inline'; spec: Record<string, unknown>; channel: 'alpha' | 'luma'; invert: boolean; problems: string[] }\n | { kind: 'refs'; refs: MatteRef[]; problems: string[] };\n\nconst isObject = (v: unknown): v is Record<string, unknown> => !!v && typeof v === 'object' && !Array.isArray(v);\nconst isLayerSpec = (v: unknown): v is Record<string, unknown> => isObject(v) && typeof v.type === 'string';\n\n/** The `channel` and `invert` of a `{ layer, channel, invert }` mask, with a sentence for each wrong value (the default is used). */\nfunction matteOptions(r: Record<string, unknown>, label: string): { channel: 'alpha' | 'luma'; invert: boolean; problems: string[] } {\n const problems: string[] = [];\n let channel: 'alpha' | 'luma' = 'alpha';\n if (r.channel !== undefined) {\n if (r.channel === 'alpha' || r.channel === 'luma') channel = r.channel;\n else {\n const guess = typeof r.channel === 'string' ? suggestName(r.channel, MATTE_CHANNELS) : null;\n const alias = typeof r.channel === 'string' && ['luminance', 'brightness', 'grayscale', 'greyscale', 'gray', 'grey', 'value'].includes(r.channel.toLowerCase()) ? 'luma' : null;\n const meant = guess ?? alias;\n problems.push(`${label}: channel ${JSON.stringify(r.channel)} is not a matte channel${meant ? `; did you mean \"${meant}\"?` : ''} (use alpha or luma); alpha is used`);\n }\n }\n let invert = false;\n if (r.invert !== undefined) {\n if (typeof r.invert === 'boolean') invert = r.invert;\n else problems.push(`${label}: invert must be true or false (got ${JSON.stringify(r.invert)}); false is used`);\n }\n return { channel, invert, problems };\n}\n\n/**\n * What a layer's `mask` value is: nothing; a layer written in place (a layer spec, or `{ layer: <a layer spec>, channel?, invert? }`); or references\n * to other layers by name.\n */\nexport function maskSourceOf(mask: unknown): MaskSource {\n if (isLayerSpec(mask)) return { kind: 'inline', spec: mask, channel: 'alpha', invert: false, problems: [] };\n if (isObject(mask) && isLayerSpec(mask.layer)) return { kind: 'inline', spec: mask.layer, ...matteOptions(mask, 'mask (written in place)') };\n if (isObject(mask) && isObject(mask.layer)) return { kind: 'refs', refs: [], problems: ['mask: `layer` is an object with no `type`, so it is neither a layer written in place (it needs a `type`, such as \\'shape\\') nor the name of another layer (a string); the layer is drawn without a mask'] };\n const problems: string[] = [];\n const refs: MatteRef[] = [];\n const one = (r: unknown, inList: boolean): void => {\n if (typeof r === 'string') { refs.push({ layer: r, channel: 'alpha', invert: false }); return; }\n if (isLayerSpec(r) || (isObject(r) && isLayerSpec(r.layer))) {\n if (inList) problems.push('a layer written inside a list of masks is ignored: give that layer a name and write the name');\n return;\n }\n if (isObject(r) && typeof r.layer === 'string') {\n const o = matteOptions(r, `mask \"${r.layer}\"`);\n problems.push(...o.problems);\n refs.push({ layer: r.layer, channel: o.channel, invert: o.invert });\n }\n };\n if (Array.isArray(mask)) for (const r of mask) one(r, true);\n else one(mask, false);\n return refs.length || problems.length ? { kind: 'refs', refs, problems } : { kind: 'none' };\n}\n\n/** The names of the layers a `mask` value points at, each once, in order. */\nexport function refNames(mask: unknown): string[] {\n const s = maskSourceOf(mask);\n return s.kind === 'refs' ? [...new Set(s.refs.map(r => r.layer))] : [];\n}\n\n/**\n * Does the layer's inline `mask` go through the matte filter? An inverted mask (`invert: true`), a luma one, and a text, image or video mask, are read by their alpha\n * (a stencil would be the bounding box); they used to be Pixi alpha masks, inside which a blend mode applied to nothing. A plain shape mask\n * stays the cheap stencil.\n */\nexport function usesMatteRoute(spec: { mask?: unknown }): boolean {\n const s = maskSourceOf(spec.mask);\n if (s.kind !== 'inline') return false;\n const t = s.spec.type;\n return s.invert || s.channel === 'luma' || t === 'text' || t === 'image' || t === 'video' || t === 'shader' || t === 'canvas'; // a sprite-backed mask: a stencil would paint it over the layer\n}\n\n/** More mattes than this in one composition warns (each is a full-composition texture). */\nexport const MANY_MATTES = 8;\n\ntype Timed = { at?: number; duration?: number };\nconst startOf = (s: Timed): number => Math.max(0, s.at ?? 0);\nconst endOf = (s: Timed, span: number): number => (s.duration === undefined ? span : (s.at ?? 0) + s.duration);\nconst num = (n: number): string => String(Number(n.toFixed(3)));\n\n/** A layer can be a matte only if it draws something: not a camera, an audio layer, a null layer or a threeD layer. */\nexport function canBeMatte(spec: { type: string; threeD?: boolean }): boolean {\n return spec.type !== 'camera' && spec.type !== 'audio' && spec.type !== 'null' && !spec.threeD;\n}\n\n/**\n * What is wrong with a layer's `mask` references, as sentences (the caller puts `pixi-effects: layer \"x\": ` in front). `siblings` are the layers\n * of the same composition (the layer itself among them); `span` is the composition's length in seconds.\n */\nexport function matteProblems(layer: SequenceSpec, siblings: readonly SequenceSpec[], span: number): string[] {\n const src = maskSourceOf((layer as { mask?: unknown }).mask);\n if (src.kind === 'inline') return [...src.problems];\n if (src.kind !== 'refs') return [];\n const out: string[] = [...src.problems];\n const names = siblings.filter(s => s.name && s.type !== 'camera').map(s => s.name!);\n if (layer.parent && src.refs.length) {\n out.push(`it has a parent, so it is drawn in the null layer's space and the matte is in the composition's: mask the null layer (\"${layer.parent}\") instead`);\n }\n for (const ref of src.refs) {\n if (ref.layer === layer.name) { out.push(`mask \"${ref.layer}\": the layer masks itself; use another layer`); continue; }\n const same = siblings.filter(s => s.name === ref.layer && s.type !== 'camera');\n if (same.length === 0) {\n const guess = suggestName(ref.layer, names.filter(n => n !== layer.name));\n out.push(`mask \"${ref.layer}\": no layer with that name${guess ? `; did you mean \"${guess}\"?` : ''} (a matte is another layer of the same composition; the layer is drawn without it)`);\n continue;\n }\n if (same.length > 1) out.push(`mask \"${ref.layer}\": ${same.length} layers are named \"${ref.layer}\"; the first is used`);\n const matte = same[0]!;\n if (!canBeMatte(matte)) {\n const what = matte.threeD ? 'a threeD layer' : matte.type === 'audio' ? 'an audio layer (it draws nothing)' : 'a null layer (it draws nothing)';\n out.push(`mask \"${ref.layer}\": \"${ref.layer}\" is ${what} and cannot be a matte (the layer is drawn without it)`);\n continue;\n }\n if (maskSourceOf((matte as { mask?: unknown }).mask).kind !== 'none') out.push(`mask \"${ref.layer}\": \"${ref.layer}\" has a mask of its own, which is ignored when it is used as a matte`);\n // the matte is on screen from its own at / duration; where it is not, the layer is cut by nothing and so invisible\n const ms = startOf(matte), me = endOf(matte, span), ls = startOf(layer), le = endOf(layer, span);\n if (ms > ls + 1e-6 || me < le - 1e-6) {\n out.push(`mask \"${ref.layer}\": \"${ref.layer}\" is on screen from ${num(ms)}s to ${num(me)}s but the layer from ${num(ls)}s to ${num(le)}s: where the matte is missing the layer is invisible (give the matte the layer's at and duration, or a longer one)`);\n }\n }\n return out;\n}\n","/**\n * A track matte as a filter. The matte layer is drawn once per frame into a texture the size of its composition (`MatteSet`); a hidden Sprite\n * showing that texture sits in the composition's inner container, so its worldTransform says where the matte is on screen. The filter maps each\n * pixel of its input (the matted layer, already drawn offscreen by Pixi's filter system) to that sprite's texture with `calculateSpriteMatrix`\n * (the way DisplacementFilter does, which works anywhere in a chain, not only as the last filter), reads the matte's alpha, or its brightness\n * (Rec. 709 weights on the premultiplied colour: a transparent matte is black), and multiplies the layer by it (`invert`: by 1 − that).\n * Several mattes are several filters in a row (intersect). A blend mode, when the layer has one, is a filter after these: the blend is the last pass.\n */\nimport { Filter, GlProgram, GpuProgram, Matrix, UniformGroup, type Sprite } from 'pixi.js';\n\nconst VERT = `in vec2 aPosition;\nout vec2 vTextureCoord;\nout vec2 vMatteUv;\nuniform vec4 uInputSize;\nuniform vec4 uOutputFrame;\nuniform vec4 uOutputTexture;\nuniform mat3 uMatteMatrix;\nvoid main(void) {\n vec2 position = aPosition * uOutputFrame.zw + uOutputFrame.xy;\n position.x = position.x * (2.0 / uOutputTexture.x) - 1.0;\n position.y = position.y * (2.0 * uOutputTexture.z / uOutputTexture.y) - uOutputTexture.z;\n gl_Position = vec4(position, 0.0, 1.0);\n vTextureCoord = aPosition * (uOutputFrame.zw * uInputSize.zw);\n vMatteUv = (uMatteMatrix * vec3(vTextureCoord, 1.0)).xy;\n}`;\n\nconst FRAG = `in vec2 vTextureCoord;\nin vec2 vMatteUv;\nout vec4 finalColor;\nuniform sampler2D uTexture;\nuniform sampler2D uMatteTexture;\nuniform float uLuma;\nuniform float uInvert;\nvoid main(void) {\n vec4 src = texture(uTexture, vTextureCoord);\n vec4 m = texture(uMatteTexture, vMatteUv);\n // outside the matte texture there is no matte: the clamp-to-edge sampler would repeat the border\n float inside = step(0.0, vMatteUv.x) * step(0.0, vMatteUv.y) * step(vMatteUv.x, 1.0) * step(vMatteUv.y, 1.0);\n m *= inside;\n // luma of the premultiplied colour = luma(colour) * alpha: a transparent matte counts as black (Rec. 709 weights)\n float v = uLuma > 0.5 ? dot(m.rgb, vec3(0.2126, 0.7152, 0.0722)) : m.a;\n if (uInvert > 0.5) v = 1.0 - v;\n finalColor = src * v;\n}`;\n\nconst WGSL = `\nstruct GlobalFilterUniforms {\n uInputSize:vec4<f32>,\n uInputPixel:vec4<f32>,\n uInputClamp:vec4<f32>,\n uOutputFrame:vec4<f32>,\n uGlobalFrame:vec4<f32>,\n uOutputTexture:vec4<f32>,\n};\nstruct MatteUniforms {\n uMatteMatrix:mat3x3<f32>,\n uLuma:f32,\n uInvert:f32,\n};\n@group(0) @binding(0) var<uniform> gfu: GlobalFilterUniforms;\n@group(0) @binding(1) var uTexture: texture_2d<f32>;\n@group(0) @binding(2) var uSampler : sampler;\n@group(1) @binding(0) var<uniform> matteUniforms : MatteUniforms;\n@group(1) @binding(1) var uMatteTexture: texture_2d<f32>;\n@group(1) @binding(2) var uMatteSampler : sampler;\n\nstruct VSOutput {\n @builtin(position) position: vec4<f32>,\n @location(0) uv : vec2<f32>,\n @location(1) matteUv : vec2<f32>,\n };\n\n@vertex\nfn mainVertex(\n @location(0) aPosition : vec2<f32>,\n) -> VSOutput {\n var position = aPosition * gfu.uOutputFrame.zw + gfu.uOutputFrame.xy;\n position.x = position.x * (2.0 / gfu.uOutputTexture.x) - 1.0;\n position.y = position.y * (2.0 * gfu.uOutputTexture.z / gfu.uOutputTexture.y) - gfu.uOutputTexture.z;\n let uv = aPosition * (gfu.uOutputFrame.zw * gfu.uInputSize.zw);\n let matteUv = (matteUniforms.uMatteMatrix * vec3<f32>(uv, 1.0)).xy;\n return VSOutput(vec4<f32>(position, 0.0, 1.0), uv, matteUv);\n}\n\n@fragment\nfn mainFragment(\n @location(0) uv: vec2<f32>,\n @location(1) matteUv: vec2<f32>,\n) -> @location(0) vec4<f32> {\n let src = textureSample(uTexture, uSampler, uv);\n var m = textureSample(uMatteTexture, uMatteSampler, matteUv);\n let inside = step(0.0, matteUv.x) * step(0.0, matteUv.y) * step(matteUv.x, 1.0) * step(matteUv.y, 1.0);\n m = m * inside;\n var v = select(m.a, dot(m.rgb, vec3<f32>(0.2126, 0.7152, 0.0722)), matteUniforms.uLuma > 0.5);\n if (matteUniforms.uInvert > 0.5) { v = 1.0 - v; }\n return src * v;\n}`;\n\n/** The part of Pixi's FilterSystem this filter uses. */\ninterface MatteFilterManager {\n calculateSpriteMatrix(out: Matrix, sprite: Sprite): Matrix;\n applyFilter(filter: Filter, input: never, output: never, clearMode: never): void;\n}\n\nexport interface MatteFilterOptions { sprite: Sprite; channel?: 'alpha' | 'luma'; invert?: boolean }\n\nexport class MatteFilter extends Filter {\n private readonly _sprite: Sprite;\n constructor({ sprite, channel = 'alpha', invert = false }: MatteFilterOptions) {\n const source = sprite.texture.source;\n super({\n glProgram: GlProgram.from({ vertex: VERT, fragment: FRAG, name: 'pe-matte-filter' }),\n gpuProgram: GpuProgram.from({ vertex: { source: WGSL, entryPoint: 'mainVertex' }, fragment: { source: WGSL, entryPoint: 'mainFragment' } }),\n resources: {\n matteUniforms: new UniformGroup({\n uMatteMatrix: { value: new Matrix(), type: 'mat3x3<f32>' },\n uLuma: { value: channel === 'luma' ? 1 : 0, type: 'f32' },\n uInvert: { value: invert ? 1 : 0, type: 'f32' },\n }),\n uMatteTexture: source,\n uMatteSampler: source.style,\n },\n });\n this._sprite = sprite;\n }\n\n override apply(filterManager: MatteFilterManager, input: never, output: never, clearMode: never): void {\n const u = this.resources.matteUniforms.uniforms;\n filterManager.calculateSpriteMatrix(u.uMatteMatrix, this._sprite);\n this.resources.uMatteTexture = this._sprite.texture.source;\n filterManager.applyFilter(this, input, output, clearMode);\n }\n}\n","import { Container, Matrix, RenderTexture, Sprite } from 'pixi.js';\nimport { MatteFilter } from '../filters/Matte';\nimport type { Sequence } from '../sequences/Base';\nimport type { SpaceHost } from '../space/Layer3D';\n\nconst EMPTY = new Container();\n\ninterface Matte { seq: Sequence; chain: Sequence[]; rt: RenderTexture; sprite: Sprite }\n\n/**\n * The mattes of one composition: each is a layer drawn, once per frame, into a texture the size of the composition. A hidden sprite showing\n * the texture sits in the composition's inner container (so its world transform says where the texture is on screen) and the matted layers'\n * `MatteFilter`s read it. Nothing here remembers a frame: the texture is redrawn from the state the timeline just set.\n */\nexport class MatteSet {\n private readonly mattes = new Map<string, Matte>();\n private readonly sources = new Set<Sequence>();\n\n constructor(private readonly inner: Container, private readonly width: number, private readonly height: number) {}\n\n get size(): number { return this.mattes.size; }\n has(key: string): boolean { return this.mattes.has(key); }\n /** Is this layer a matte's source (so it is not drawn on screen)? */\n isSource(seq: Sequence): boolean { return this.sources.has(seq); }\n\n /** `chain`: the null layers the source sits in, nearest first (the source is in no container, so their transforms are composed by hand). */\n add(key: string, seq: Sequence, chain: Sequence[] = []): void {\n if (this.mattes.has(key)) return;\n const rt = RenderTexture.create({ width: this.width, height: this.height, resolution: 1, antialias: true });\n const sprite = new Sprite(rt);\n sprite.renderable = false; // only its worldTransform is used: where the texture sits on screen\n this.inner.addChild(sprite);\n this.mattes.set(key, { seq, chain, rt, sprite });\n this.sources.add(seq);\n }\n\n filterFor(key: string, opts: { channel: 'alpha' | 'luma'; invert: boolean }): MatteFilter | null {\n const m = this.mattes.get(key);\n return m ? new MatteFilter({ sprite: m.sprite, channel: opts.channel, invert: opts.invert }) : null;\n }\n\n /** Draw every matte into its texture from the state the timeline has just set; a hidden matte is an empty texture (it cuts everything away). */\n render(host: SpaceHost): void {\n for (const { seq, chain, rt } of this.mattes.values()) {\n const target = seq.target;\n if (target && target.renderable && target.visible) {\n target.updateLocalTransform();\n const m = target.localTransform.clone();\n for (const p of chain) { p.target?.updateLocalTransform(); if (p.target) m.prepend(p.target.localTransform); }\n host.render({ container: target, target: rt, transform: m, clear: true, clearColor: [0, 0, 0, 0] });\n } else {\n host.render({ container: EMPTY, target: rt, transform: new Matrix(), clear: true, clearColor: [0, 0, 0, 0] });\n }\n }\n }\n\n destroy(): void {\n for (const m of this.mattes.values()) { m.sprite.destroy(); m.rt.destroy(true); }\n this.mattes.clear();\n this.sources.clear();\n }\n}\n","import { Container, Rectangle } from 'pixi.js';\nimport { createTimeline, type Timeline } from '../core/timelineEngine';\nimport { Sequence } from './Base';\nimport { NullSequence } from './Null';\nimport { suggestName } from '../core/options';\nimport { buildSequenceTree } from '../core/Composition';\nimport { CameraSequence } from '../space/CameraSequence';\nimport { LightSequence } from '../space/LightSequence';\nimport { lightSetProblems } from '../space/lightChecks';\nimport { MAX_CASTERS, lightLevel, packLights, type LightState } from '../space/lighting';\nimport type { CasterInput } from '../space/LitMaterial';\nimport { findOverlap, pickActiveCamera } from '../space/camera';\nimport { assignDepthOrder } from '../space/depth';\nimport { Layer3D, type SpaceHost } from '../space/Layer3D';\nimport { lintSequence, lintFocus } from '../space/lint';\nimport { layerInitialZ, blurRadius, MANY_BLURRED } from '../space/focus';\nimport { matteProblems, maskSourceOf, refNames, usesMatteRoute, canBeMatte, MANY_MATTES } from '../core/matte';\nimport { MatteSet } from '../core/MatteSet';\nimport { describeLayer, lintText, lintTiming, summarizeWarnings, lintKeys } from '../core/lint';\nimport { applyBlendMode, maxConcurrentAdvanced, MANY_ADVANCED, type BlendReport } from '../core/blend';\nimport { cameraBasis, homeCamera, projectPoint, NEAR, type CameraBasis, type CameraState } from '../space/math';\nimport { timeRemapOf, remapOf, contentLength, bindClock, clockTable, type TimeRemap, type ClockTable } from '../core/remap';\nimport type { CompositionSequenceSpec, AudioDescriptor, CompositionShape, SequenceSpec, SpaceNow } from '../types';\n\n\n\nexport class CompositionSequence extends Sequence {\n declare spec: CompositionSequenceSpec;\n private _innerContainer: Container | null = null;\n private _compositionShape: CompositionShape | null = null;\n _children: Sequence[] = [];\n private _cameras: CameraSequence[] = [];\n private _lights: LightSequence[] = [];\n /** The lights alive and the camera position of the last lit frame (what `inspect` reads: a layer's light level is computed from them on demand). */\n private _lighting: { states: LightState[]; cam: { x: number; y: number; z: number } } | null = null;\n private _layers3d: Layer3D[] = [];\n private _dofSaid = { behind: false, many: false };\n /** What this composition made for blend modes (filters added to layers' chains, groups and their carrier filters): destroyed with it. */\n private _blendOwned: Array<{ destroy(): void }> = [];\n /** The mattes (layers drawn into textures that cut other layers), when any layer of this composition names or has one. */\n private _mattes: MatteSet | null = null;\n private _inlineMattes = 0;\n /** Drawn children in stack order (cameras and target-less sequences excluded). */\n private _visual: Array<{ seq: Sequence; layer: Layer3D | null }> = [];\n /** Layers drawn inside a null layer (`parent`): they are not in the composition's own stack. */\n private _nested: Sequence[] = [];\n /** The null layer each parented layer is drawn inside. */\n private _parentOf = new Map<Sequence, NullSequence>();\n /** Set when this composition's own time is remapped: the children live on `_inner` in LOCAL time, driven by `_clock`. */\n private _inner: Timeline | null = null;\n private _clock: { time: number } | null = null;\n private _remap: TimeRemap | null = null;\n private _childBase = 0;\n private _contentSpan = 0;\n\n /** Where the children's time starts: the composition's absolute start, or 0 when their time is local (remapped). */\n get childBase(): number { return this._childBase; }\n /** How long the children's time runs: the composition's duration, or its content length when its time is remapped. */\n get contentSpan(): number { return this._contentSpan; }\n /** The time the children live in at movie time `t`: the movie's own, or this composition's local clock when it is remapped. */\n childTime(t: number): number { return this._clock ? this._clock.time : t; }\n /** The clock reader for filters that want the time (grain), or null when the children run on the movie's time. */\n localClock(): (() => number) | null { return this._clock ? () => this._clock!.time : null; }\n /** How the time is remapped, for the timeline chart: `×0.5`, `×-1`, `time keyframes`, or null. */\n remapLabel(): string | null {\n const r = this._remap;\n if (!r) return null;\n return r.timeKfs.length ? 'time keyframes' : `×${r.speed ?? 1}`;\n }\n\n async build(): Promise<void> {\n const width = this.spec.width ?? this.parent?.width ?? this.root.width;\n const height = this.spec.height ?? this.parent?.height ?? this.root.height;\n if (this.duration === undefined) {\n this.duration = this.spec.duration ?? this.parent?.duration ?? this.root.duration;\n }\n const wrapper = new Container();\n wrapper.cullable = true;\n wrapper.cullableChildren = true;\n wrapper.cullArea = new Rectangle(0, 0, width, height);\n\n const inner = new Container();\n inner.cullable = true;\n inner.cullableChildren = true;\n wrapper.addChild(inner);\n\n this.target = wrapper;\n this.intrinsicWidth = width;\n this.intrinsicHeight = height;\n this._innerContainer = inner;\n // A remapped composition's children live in LOCAL time, which can run past the composition's own duration (speed 2 reads twice as far).\n const base = timeRemapOf(this.spec as never);\n const span = base ? contentLength(base, this.duration) : this.duration;\n this._remap = base ? remapOf(this.spec as never, 'time', span) : null;\n this._contentSpan = span;\n this._compositionShape = { width, height, duration: span, spaceAt: (t) => this._spaceAt(t), findLayer: (name) => this._children.find(c => c.spec.name === name) ?? null, layerNames: () => this._children.map(c => c.spec.name).filter((n): n is string => !!n) };\n\n const lateKeyframes: string[] = [];\n for (const s of this.spec.sequences ?? []) {\n lintSequence(s);\n lintFocus(s, this.spec.sequences ?? []);\n for (const message of matteProblems(s, this.spec.sequences ?? [], span)) console.warn(`pixi-effects: ${describeLayer(s)}: ${message}`);\n lintTiming(s, span, (message, kind) => (kind === 'late-keyframe' ? lateKeyframes.push(message) : console.warn(message)));\n lintText(s);\n lintKeys(s);\n }\n for (const message of summarizeWarnings(lateKeyframes)) console.warn(message);\n const crowd = maxConcurrentAdvanced((this.spec.sequences ?? []) as Array<{ at?: number; duration?: number; blendMode?: unknown; type?: string; sequences?: unknown }>, span);\n if (crowd >= MANY_ADVANCED) {\n console.warn(`pixi-effects: ${describeLayer(this.spec)}: ${crowd} layers with an advanced blendMode are on screen at once (a composition with one counts each layer inside it, since its children blend one by one); each is a full-frame pass (about 2 ms on WebGL). Put fewer layers in the blend (or draw the glow as one layer), or use add / screen / multiply`);\n }\n\n this._children = [];\n await buildSequenceTree(\n this.spec.sequences ?? [],\n this._compositionShape,\n this.root,\n this._children,\n );\n this._resolveParents();\n // Named mattes: a layer that another layer names in `mask` is drawn into a texture (once per frame), not on screen\n const matteNames = new Set<string>();\n for (const c of this._children) for (const n of refNames((c.spec as { mask?: unknown }).mask)) matteNames.add(n);\n if (matteNames.size > 0) {\n this._mattes = new MatteSet(inner, width, height);\n for (const name of matteNames) {\n // the first layer of that name, as matteProblems says: if it cannot be a matte (threeD, audio, null) the layer is drawn without one\n const source = this._children.find(c => c.spec.name === name && !(c instanceof CameraSequence));\n if (!source || !source.target || !canBeMatte(source.spec)) continue; // matteProblems has said why\n const chain: Sequence[] = [];\n for (let p = this._parentOf.get(source); p; p = this._parentOf.get(p)) chain.push(p);\n this._mattes.add(name, source, chain);\n }\n }\n // Lights taken together (no ambient light, shadows half set, too many lights or casters): said once per composition, only when it has a light\n if (this._children.some(c => c instanceof LightSequence)) {\n for (const message of lightSetProblems((this.spec.sequences ?? []) as SequenceSpec[])) console.warn(`pixi-effects: ${describeLayer(this.spec)}: ${message}`);\n }\n // A camera's `focus: \"title\"` becomes that layer's first z, here, where the siblings exist (a camera sees only its parent's shape)\n const layerNames = new Set(this._children.map(c => c.spec.name).filter((n): n is string => !!n));\n for (const cam of this._children) {\n if (!(cam instanceof CameraSequence)) continue;\n cam.resolveFocusNames(name => {\n const hit = this._children.find(c => c.spec.name === name && c.spec.threeD);\n return hit ? layerInitialZ(hit.spec, hit.scope() as unknown as Record<string, number>) : undefined;\n }, layerNames);\n }\n // What is said about blend modes is collected per build: the same mistake in 300 particle layers is one warning (\"and 299 more\")\n const blendSaid = new Map<string, { spec: { name?: string; type: string }; n: number }>();\n const report: BlendReport = (message, spec) => {\n const seen = blendSaid.get(message);\n if (seen) seen.n++; else blendSaid.set(message, { spec, n: 1 });\n };\n for (const child of this._children) {\n // Cameras are display-less: they only feed the projection pass.\n if (child instanceof CameraSequence) {\n this._cameras.push(child);\n continue;\n }\n if (child instanceof LightSequence) { this._lights.push(child); continue; } // a light has no picture: it feeds the lit layers' shading\n if (!child.target) continue;\n if (this._mattes?.isSource(child)) continue; // a matte is drawn into its texture, not on screen\n const holder = this._parentOf.get(child);\n const into = holder?.target ?? inner; // a layer with `parent` is drawn inside its null layer\n\n const maskSrc = maskSourceOf((child.spec as { mask?: unknown }).mask);\n\n // threeD layers never enter the scene graph themselves: their display\n // object is rendered into a texture and a perspective mesh stands in.\n if (child.spec.threeD) {\n const layer = new Layer3D(child, frameOf(child));\n inner.addChild(layer.display);\n this._layers3d.push(layer);\n this._visual.push({ seq: child, layer });\n const added3d = applyBlendMode(child.spec, layer.display, report);\n if (added3d) this._blendOwned.push(added3d);\n if (maskSrc.kind !== 'none') {\n console.warn(`pixi-effects: ${describeLayer(child.spec)}: mask is not supported on threeD layers yet; ignored`);\n }\n continue;\n }\n\n into.addChild(child.target);\n if (holder) this._nested.push(child);\n else this._visual.push({ seq: child, layer: null });\n\n // The matte filters of this layer: one for each reference, or one for an inline mask that is read by its alpha (an inverted mask, a text,\n // image or video mask: a stencil would be the bounding box). They end the layer's filter chain, after its own filters and before the blend.\n const matteFilters: Array<{ destroy(): void }> = [];\n if (maskSrc.kind === 'refs' && this._mattes) {\n for (const ref of maskSrc.refs) {\n const f = this._mattes.filterFor(ref.layer, { channel: ref.channel, invert: ref.invert });\n if (f) matteFilters.push(f);\n }\n }\n if (maskSrc.kind === 'inline') {\n const maskSpec = maskSrc.spec as unknown as SequenceSpec;\n // The mask lives and animates with the layer it masks: with no `at` of its own its `at` and `duration` are the layer's, so its keyframes\n // are measured from the layer's start too. An explicit `at` is composition time, exactly like a layer's.\n const lifetime = maskSpec.at === undefined ? { at: child.at, duration: maskSpec.duration ?? child.duration } : {};\n const built = await buildSequenceTree([{ ...maskSpec, ...lifetime } as SequenceSpec], this._compositionShape, this.root);\n const maskSeq = built[0];\n if (maskSeq?.target) {\n child.maskSequence = maskSeq; // bound to the timeline, synced and destroyed with the layer\n if (usesMatteRoute(child.spec)) {\n if (!this._mattes) this._mattes = new MatteSet(inner, width, height);\n const key = `\\u0000inline-${this._inlineMattes++}`;\n const chain: Sequence[] = []; // the mask is in the layer's space: the null layers it sits in move it too\n for (let p = this._parentOf.get(child); p; p = this._parentOf.get(p)) chain.push(p);\n this._mattes.add(key, maskSeq, chain); // drawn into a texture of its own each frame, not on screen\n const f = this._mattes.filterFor(key, { channel: maskSrc.channel, invert: maskSrc.invert });\n if (f) matteFilters.push(f);\n } else {\n // a plain shape mask is a stencil: the mask's geometry (cheap, and the canvas anti-aliasing makes its edge)\n into.addChild(maskSeq.target);\n const t = child.target as Container & { setMask?: (opts: { mask: Container | null; inverse?: boolean }) => void; mask: Container | null };\n if (typeof t.setMask === 'function') t.setMask({ mask: maskSeq.target, inverse: false });\n else t.mask = maskSeq.target;\n }\n }\n }\n if (matteFilters.length > 0) {\n const t = child.target as unknown as { filters: unknown };\n t.filters = [...(Array.isArray(t.filters) ? t.filters : []), ...matteFilters];\n this._blendOwned.push(...matteFilters);\n }\n const added = applyBlendMode(child.spec, child.target, report);\n if (added) this._blendOwned.push(added);\n }\n\n if (this._mattes && this._mattes.size > MANY_MATTES) {\n console.warn(`pixi-effects: ${describeLayer(this.spec)}: ${this._mattes.size} mattes: each is a ${width}×${height} texture (about ${Math.round(width * height * 4 / 1048576)} MiB, more with anti-aliasing). Share one matte between layers, or use fewer`);\n }\n\n for (const [message, seen] of blendSaid) {\n console.warn(`pixi-effects: ${describeLayer(seen.spec)}: ${message}${seen.n > 1 ? ` (and ${seen.n - 1} more layers have the same mistake)` : ''}`);\n }\n\n if (this._layers3d.length > 0) {\n // Stack order becomes explicit zIndex so threeD layers can be re-sorted\n // by depth each frame without reparenting.\n inner.sortableChildren = true;\n this._visual.forEach((v, i) => {\n (v.layer?.display ?? v.seq.target!).zIndex = i;\n });\n } else if (this._cameras.length > 0 && !this._children.some(c => (c.spec as { followCamera?: boolean }).followCamera)) {\n console.warn('pixi-effects: camera has no effect: this composition has no threeD layers (a three layer with followCamera: true follows it)');\n }\n if (this._layers3d.length === 0 && this._lights.length > 0 && !this._children.some(c => (c.spec as { followLights?: boolean }).followLights)) {\n console.warn(`pixi-effects: ${describeLayer(this.spec)}: a light has no effect: this composition has no threeD layers (a light lights only the threeD layers of its own composition, not those of the compositions nested in it: put the light inside the composition that holds them)`);\n }\n\n this.buildFilters();\n }\n\n protected override displayProps(): { initial: CompositionSequenceSpec['initial']; keyframes: CompositionSequenceSpec['keyframes'] } {\n const r = this._remap;\n return r ? { initial: r.restInitial as CompositionSequenceSpec['initial'], keyframes: r.restKfs } : super.displayProps();\n }\n\n override bindTimeline(timeline: Timeline, offset = 0): void {\n super.bindTimeline(timeline, offset);\n const remap = this._remap;\n // Children's `at` is relative to this composition's start, so push them forward by our absolute start time on the global\n // timeline. A remapped composition builds them in LOCAL time (offset 0) on a timeline of its own, which the clock drives.\n const childOffset = remap ? 0 : offset + this.at;\n this._childBase = childOffset;\n const target = remap ? createTimeline({ paused: true, defaults: { ease: 'none' } }) : timeline;\n for (const child of this._children) {\n // Each layer builds its tweens in a small timeline of its own, which is added to the parent once, finished: the parent holds\n // one child per layer, and a layer nobody else writes is not visited again while its local time stands still. Positions stay\n // absolute, so the picture at any time is the same.\n const own = createTimeline({ defaults: { ease: 'none' } });\n child.bindTimeline(own, childOffset);\n // The mask shares the maskee's offset — its `at` is interpreted\n // relative to the composition's start, just like the child itself,\n // so a reveal-from-zero animation lines up naturally.\n child.maskSequence?.bindTimeline(own, childOffset);\n target.add(own, 0);\n }\n if (remap) this._bindClock(timeline, target, remap, offset);\n const overlap = findOverlap(this._cameras.map(c => c.window()));\n if (overlap) {\n console.warn(`pixi-effects: cameras #${overlap[0] + 1} and #${overlap[1] + 1} overlap in time; the top-most one wins`);\n }\n }\n\n /** Drive the local timeline `inner` from the clock, and put the clock's tweens on the outer `timeline`. */\n private _bindClock(timeline: Timeline, inner: Timeline, remap: TimeRemap, offset: number): void {\n let last = NaN;\n let cur = 0;\n const clock = {\n get time(): number { return cur; },\n set time(v: number) {\n cur = v;\n if (v === last) return; // a freeze renders nothing\n last = v;\n inner.time(v);\n },\n };\n this._inner = inner;\n this._clock = clock;\n const scope = this.scope() as unknown as Record<string, number>;\n if (remap.start !== undefined && remap.timeKfs.length === 0) clock.time = remap.start;\n bindClock(timeline, clock, 'time', remap, this.duration!, offset + this.at, scope);\n this._warnUnreachable(clockTable(remap, 'time', this.duration!, offset + this.at, scope, offset + this.at + this.duration!), offset + this.at, offset + this.at + this.duration!);\n }\n\n /**\n * A child the clock never dwells in is never visible: say so. Its `at` is in THIS composition's local time, so the usual mistake is\n * writing it in the outer time (or forgetting that speed 0.5 reaches only half as far). Decided by dwell, not by the clock's end\n * points: a clock that arrives at the child's `at` and HOLDS there shows it for the whole hold; one that only touches it in a single\n * instant (speed 0.5, a child at exactly the farthest local time) does not.\n */\n private _warnUnreachable(table: ClockTable, from: number, to: number): void {\n const remap = this._remap!;\n const how = remap.timeKfs.length ? 'time keyframes' : `speed ${remap.speed ?? 1}`;\n const span = this._contentSpan;\n const EPS = 1e-9;\n for (const child of this._children) {\n const at = child.at;\n if (at >= span) continue; // already said by lintTiming (\"starts after its composition ends\")\n const end = Math.min(at + (child.duration ?? span), span);\n let dwell = 0; // 1 ms samples of the clock inside [at, end)\n for (let t = from; t <= to && dwell < 2; t += 0.001) { const v = table.at(t); if (v >= at - EPS && v < end + EPS) dwell++; }\n if (dwell >= 2) continue;\n console.warn(\n `pixi-effects: ${describeLayer(child.spec)} starts at ${at}s of ${describeLayer(this.spec)}'s own time, but its clock only reaches ` +\n `${Number(table.min.toFixed(3))}–${Number(table.max.toFixed(3))}s (${how}), so it is never visible. ` +\n `Layers inside a remapped composition are placed in that composition's local time.`,\n );\n }\n }\n\n /**\n * Drawn children in stack order, with the display object that stands in for each (the mesh for a threeD layer).\n * Null layers draw nothing and are left out; the layers inside them follow, with the null layers that carry them.\n */\n layers(): Array<{ seq: Sequence; display: Container; threeD: boolean; carriers: NullSequence[]; depthBlur: number; light?: number; quad: number[] | null }> {\n const carriersOf = (seq: Sequence): NullSequence[] => {\n const out: NullSequence[] = [];\n for (let p = this._parentOf.get(seq); p; p = this._parentOf.get(p)) out.push(p);\n return out;\n };\n return [...this._visual.map(v => v.seq), ...this._nested]\n .filter(seq => !(seq instanceof NullSequence))\n .map(seq => {\n const layer = this._visual.find(v => v.seq === seq)?.layer ?? null;\n return {\n seq,\n display: (layer?.display ?? seq.target!) as unknown as Container,\n threeD: layer !== null,\n carriers: carriersOf(seq),\n depthBlur: layer?.blur ?? 0,\n quad: layer && layer.display.visible ? layer.corners : null,\n // how lit it is (threeD layers that receive the lights of the last frame only); computed here, not per frame\n light: layer && this._lighting && layer.world && layer.spec.lit !== false ? lightLevel(layer.world, this._lighting.cam, this._lighting.states) : undefined,\n };\n });\n }\n\n /** Match every `parent: 'name'` to a null layer; anything that cannot work is said out loud and drawn unparented. */\n private _resolveParents(): void {\n const nulls = this._children.filter((c): c is NullSequence => c instanceof NullSequence);\n const nullNames = nulls.map(n => n.spec.name).filter((n): n is string => !!n);\n const warned = new Set<string>();\n for (const child of this._children) {\n const want = child.spec.parent;\n if (want === undefined) continue;\n const who = describeLayer(child.spec);\n if (child instanceof CameraSequence) { console.warn(`pixi-effects: ${who}: a camera cannot have a parent; ignored`); continue; }\n if (child instanceof LightSequence) { console.warn(`pixi-effects: ${who}: a light cannot have a parent (parent \"${want}\" ignored: move the light with its own x / y / z keyframes)`); continue; }\n if (child.spec.threeD) { console.warn(`pixi-effects: ${who}: a threeD layer cannot have a parent (parent \"${want}\" ignored)`); continue; }\n const same = this._children.filter(c => c.spec.name === want);\n if (same.length === 0) {\n const hint = suggestName(want, nullNames);\n console.warn(`pixi-effects: ${who}: parent \"${want}\": no layer with that name${hint ? `; did you mean \"${hint}\"?` : ''} (the layer is drawn without a parent)`);\n continue;\n }\n const holder = same.find((c): c is NullSequence => c instanceof NullSequence);\n if (!holder) {\n console.warn(`pixi-effects: ${who}: parent \"${want}\" is a ${same[0]!.spec.type} layer; only { type: 'null' } layers can be parents (the layer is drawn without a parent)`);\n continue;\n }\n if (same.length > 1 && !warned.has(want)) {\n warned.add(want);\n console.warn(`pixi-effects: ${same.length} layers are named \"${want}\"; parent \"${want}\" uses the first null layer with that name`);\n }\n if (holder === child) { console.warn(`pixi-effects: ${who} is its own parent; ignored`); continue; }\n this._parentOf.set(child, holder);\n }\n // a chain that leads back to itself: break it where we find it\n for (const start of this._children) {\n const seen = new Set<Sequence>([start]);\n for (let p = this._parentOf.get(start); p; p = this._parentOf.get(p)) {\n if (p === start) {\n const names = [...seen].map(s => s.spec.name ?? s.spec.type).join(' → ');\n console.warn(`pixi-effects: parent cycle: ${names} → ${start.spec.name ?? start.spec.type}; the parent of \"${start.spec.name ?? start.spec.type}\" is ignored`);\n this._parentOf.delete(start);\n break;\n }\n if (seen.has(p)) break;\n seen.add(p);\n }\n }\n }\n\n override syncFrame(): void {\n super.syncFrame();\n for (const child of this._children) child.syncFrame();\n }\n\n override updateSpace(t: number, host: SpaceHost): void {\n // Inner compositions first: a threeD composition is rendered into its own\n // texture by this level, so its content must already be projected.\n const childT = this.childTime(t);\n for (const child of this._children) child.updateSpace(childT, host);\n this._mattes?.render(host); // every matte, from the state the timeline just set\n if (this._layers3d.length === 0 || !this._compositionShape) return;\n\n const { width, height } = this._compositionShape;\n const compEnd = this._childBase + (this.duration ?? 0);\n const active = pickActiveCamera(\n this._cameras.map(cam => ({ cam, ...cam.window() })),\n childT,\n compEnd,\n );\n const cam = active ? active.cam.state() : homeCamera(width, height);\n const basis = cameraBasis(cam, width, height);\n\n for (const layer of this._layers3d) layer.update(host, basis);\n this._applyLighting(childT, compEnd, basis, active?.cam ?? null);\n this._applyDepthOfField(cam, basis);\n\n const order = assignDepthOrder(\n this._visual.map((v, i) => ({ stackIndex: i, threeD: v.layer !== null, depth: v.layer?.depth ?? 0 })),\n );\n this._visual.forEach((v, i) => {\n if (v.layer) v.layer.display.zIndex = order[i]!;\n });\n }\n\n /** The light layers alive at `t` (their own `at` and `duration`; one that runs to the end of the composition is alive at the last instant too). */\n private _liveLights(t: number, compEnd: number): LightSequence[] {\n return this._lights.filter(l => { const w = l.window(); return t >= w.start && (t < w.end || (w.end >= compEnd && t <= w.end)); });\n }\n\n /** What a `three` layer that follows the composition asks for: the camera and the lights alive at `t` on this composition's clock (the same pick `updateSpace` makes). */\n private _spaceAt(t: number): SpaceNow {\n const { width, height } = this._compositionShape!;\n const compEnd = this._childBase + (this.duration ?? 0);\n const active = pickActiveCamera(this._cameras.map(cam => ({ cam, ...cam.window() })), t, compEnd);\n return { camera: active ? active.cam.state() : homeCamera(width, height), lights: this._liveLights(t, compEnd).map(l => l.state()), fog: active?.cam.fogState() ?? null };\n }\n\n /**\n * Lights and fog: when the composition has a light layer or the camera writes fog, every threeD layer draws with the lit shader, fed with\n * the lights alive NOW (a pure function of the lights, the camera and the layers; nothing is remembered between frames). With neither,\n * nothing is made and nothing is drawn differently. With no light alive at this moment (all outside their `at` / `duration`) a layer is\n * drawn unlit, as it is in a composition with no light.\n */\n private _applyLighting(t: number, compEnd: number, basis: CameraBasis, cam: CameraSequence | null): void {\n const fog = cam?.fogState() ?? null;\n // decided on what the composition HAS, not on this frame's camera: once a layer has the lit shader, every later frame must write its uniforms\n // (a fog camera that is over, or a cut to a camera without fog, would leave the last frame's fog on the layers)\n if (this._lights.length === 0 && !this._cameras.some(c => c.fog)) return;\n const states = this._liveLights(t, compEnd).map(l => l.state());\n const packed = states.length > 0 ? packLights(states) : null;\n this._lighting = states.length > 0 ? { states, cam: { x: basis.cx, y: basis.cy, z: basis.cz } } : null;\n // A shadow needs a light that makes shadows AND layers that cast them: the casters are the visible layers with `castsShadows`, drawn this frame\n // (a layer that is hidden, outside its life or behind the camera has no up-to-date picture and casts nothing)\n const shadowing = states.some(s => s.castsShadows);\n const casters = shadowing ? this._layers3d.filter(l => l.spec.castsShadows && l.display.visible && l.world && l.source) : [];\n const camInfo = { x: basis.cx, y: basis.cy, z: basis.cz, fx: basis.fx, fy: basis.fy, fz: basis.fz };\n for (const l of this._layers3d) {\n const mat = l.setLit(true);\n if (!mat || !l.world) continue;\n const lit = l.spec.lit !== false;\n // a layer never shadows itself; each receiver reads at most MAX_CASTERS casters (the first ones, in layer order: said at build)\n const mine: CasterInput[] = lit ? casters.filter(c => c !== l).slice(0, MAX_CASTERS).map(c => ({ frame: c.world!, source: c.source! })) : [];\n mat.update(l.world, camInfo, lit ? packed : null, fog, mine);\n }\n }\n\n /** Depth of field: each threeD layer is blurred by how far its depth is from the focal plane (a pure function of the camera and the layers). */\n private _applyDepthOfField(cam: CameraState, basis: CameraBasis): void {\n const aperture = cam.aperture ?? 0;\n if (!(aperture > 0)) { for (const l of this._layers3d) l.setBlur(0); return; }\n const focusDepth = projectPoint(basis, { x: cam.lookAtX, y: cam.lookAtY, z: cam.focus ?? 0 }).depth;\n if (!(focusDepth > NEAR)) {\n if (!this._dofSaid.behind) {\n this._dofSaid.behind = true;\n console.warn(`pixi-effects: ${describeLayer(this.spec)}: the camera's focus (z = ${(cam.focus ?? 0).toFixed(0)}) is at or behind the camera, so nothing is blurred. Put focus in front of the camera (a z below the camera's z)`);\n }\n for (const l of this._layers3d) l.setBlur(0);\n return;\n }\n let blurred = 0;\n for (const l of this._layers3d) {\n // a hidden layer (lifespan over, alpha 0, behind the camera) keeps the depth of the last frame it was drawn: it is not blurred or counted\n l.setBlur(l.display.visible ? blurRadius(aperture, basis.focal, l.depth, focusDepth) : 0);\n if (l.blur > 0) blurred++;\n }\n if (blurred >= MANY_BLURRED && !this._dofSaid.many) {\n this._dofSaid.many = true;\n console.warn(`pixi-effects: ${describeLayer(this.spec)}: ${blurred} layers are blurred by depth of field at once (it warns from ${MANY_BLURRED}); each costs a filter pass per frame (WebGPU more). Merge the far layers or lower aperture`);\n }\n }\n\n override collectAudio(out: AudioDescriptor[], baseTime: number): void {\n super.collectAudio(out, baseTime);\n const remap = this._remap;\n if (!remap) {\n const childBase = baseTime + this.at;\n for (const child of this._children) child.collectAudio(out, childBase);\n return;\n }\n // The children's sounds are described in local time; each one is given a warp from the movie's time to it.\n const inner: AudioDescriptor[] = [];\n for (const child of this._children) child.collectAudio(inner, 0);\n const lo = baseTime + this.at, hi = lo + this.duration!;\n const table = clockTable(remap, 'time', this.duration!, lo, this.scope() as unknown as Record<string, number>, hi);\n for (const d of inner) {\n const prev = d.warp;\n out.push({ ...d, warp: (t: number) => (t < lo || t > hi ? NaN : prev ? prev(table.at(t)) : table.at(t)) });\n }\n }\n\n override destroy(): void {\n this._inner?.kill();\n this._inner = null;\n this._clock = null;\n // every shader goes first: a caster's texture is bound in the shaders of the layers that read its shadow, and destroying it while they still hold it warns\n for (const l of this._layers3d) l.setLit(false);\n for (const l of this._layers3d) l.destroy();\n this._layers3d = [];\n this._mattes?.destroy();\n this._mattes = null;\n for (const c of this._children) c.destroy();\n for (const o of this._blendOwned) o.destroy();\n this._blendOwned = [];\n super.destroy();\n }\n}\n\n/** Layer-space rectangle a threeD child projects: a composition's frame, otherwise its content bounds. */\nfunction frameOf(child: Sequence): () => { x: number; y: number; width: number; height: number } {\n if (child instanceof CompositionSequence) {\n return () => ({ x: 0, y: 0, width: child.intrinsicWidth, height: child.intrinsicHeight });\n }\n return () => child.target!.getLocalBounds();\n}\n"]}