pixi-effects 0.49.0 → 0.50.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 (80) hide show
  1. package/CHANGELOG.md +9 -0
  2. package/README.md +8 -7
  3. package/ai/chat-template.html +4 -4
  4. package/ai/tools/check.mjs +6 -6
  5. package/dist/3d.cjs +17 -13
  6. package/dist/3d.cjs.map +1 -1
  7. package/dist/3d.d.cts +3 -1
  8. package/dist/3d.d.ts +3 -1
  9. package/dist/3d.js +9 -5
  10. package/dist/3d.js.map +1 -1
  11. package/dist/Composition-47U5U637.cjs +16 -0
  12. package/dist/{Composition-464AWDV6.cjs.map → Composition-47U5U637.cjs.map} +1 -1
  13. package/dist/Composition-GVWWLFDL.js +7 -0
  14. package/dist/{Composition-5U63LMPX.js.map → Composition-GVWWLFDL.js.map} +1 -1
  15. package/dist/Controller.d.cts +2 -2
  16. package/dist/Controller.d.ts +2 -2
  17. package/dist/{Movie-BxB7bauG.d.cts → Movie-DogzDBuW.d.cts} +20 -5
  18. package/dist/{Movie-6EWOz6Yw.d.ts → Movie-Y7iHg2V8.d.ts} +20 -5
  19. package/dist/{Spans-W5VJRMGC.js → Spans-3SEZSTQV.js} +6 -6
  20. package/dist/{Spans-W5VJRMGC.js.map → Spans-3SEZSTQV.js.map} +1 -1
  21. package/dist/{Spans-DUR2W5EH.cjs → Spans-R426NVY3.cjs} +11 -11
  22. package/dist/{Spans-DUR2W5EH.cjs.map → Spans-R426NVY3.cjs.map} +1 -1
  23. package/dist/{blendModes-NC76DNVX.cjs → blendModes-2IDILRN6.cjs} +5 -5
  24. package/dist/{blendModes-NC76DNVX.cjs.map → blendModes-2IDILRN6.cjs.map} +1 -1
  25. package/dist/{blendModes-ZOBLPSR3.js → blendModes-4QH44GOL.js} +4 -4
  26. package/dist/{blendModes-ZOBLPSR3.js.map → blendModes-4QH44GOL.js.map} +1 -1
  27. package/dist/{chunk-ABWRISRK.cjs → chunk-3FCDRLW3.cjs} +4 -3
  28. package/dist/chunk-3FCDRLW3.cjs.map +1 -0
  29. package/dist/{chunk-MXACRKAN.js → chunk-C2HL5236.js} +4 -4
  30. package/dist/{chunk-MXACRKAN.js.map → chunk-C2HL5236.js.map} +1 -1
  31. package/dist/{chunk-5YNME6AH.cjs → chunk-GXGIISFS.cjs} +5 -5
  32. package/dist/{chunk-5YNME6AH.cjs.map → chunk-GXGIISFS.cjs.map} +1 -1
  33. package/dist/{chunk-H363KMJR.js → chunk-J4ZP76IL.js} +4 -3
  34. package/dist/chunk-J4ZP76IL.js.map +1 -0
  35. package/dist/{chunk-BSFWVTSR.cjs → chunk-O2MD3L4J.cjs} +92 -92
  36. package/dist/{chunk-BSFWVTSR.cjs.map → chunk-O2MD3L4J.cjs.map} +1 -1
  37. package/dist/{chunk-DOGY3EAW.js → chunk-SSVHAF3Q.js} +470 -17
  38. package/dist/chunk-SSVHAF3Q.js.map +1 -0
  39. package/dist/{chunk-USUUAYTE.js → chunk-TXNQLMRT.js} +5 -5
  40. package/dist/{chunk-USUUAYTE.js.map → chunk-TXNQLMRT.js.map} +1 -1
  41. package/dist/{chunk-PBMDZT2T.js → chunk-UTUUOQ47.js} +39 -16
  42. package/dist/chunk-UTUUOQ47.js.map +1 -0
  43. package/dist/{chunk-33USHRV5.cjs → chunk-VVUSZVP7.cjs} +493 -39
  44. package/dist/chunk-VVUSZVP7.cjs.map +1 -0
  45. package/dist/{chunk-GUDLIAIG.cjs → chunk-YOKRPAKA.cjs} +82 -59
  46. package/dist/chunk-YOKRPAKA.cjs.map +1 -0
  47. package/dist/index.cjs +35 -35
  48. package/dist/index.d.cts +3 -3
  49. package/dist/index.d.ts +3 -3
  50. package/dist/index.js +5 -5
  51. package/dist/loader.css +1 -1
  52. package/dist/present.cjs +5 -5
  53. package/dist/present.d.cts +2 -2
  54. package/dist/present.d.ts +2 -2
  55. package/dist/present.js +5 -5
  56. package/dist/three.cjs +13 -9
  57. package/dist/three.cjs.map +1 -1
  58. package/dist/three.d.cts +3 -1
  59. package/dist/three.d.ts +3 -1
  60. package/dist/three.js +8 -4
  61. package/dist/three.js.map +1 -1
  62. package/dist/{types-kt7DQKfO.d.cts → types-BZngm4nT.d.cts} +48 -5
  63. package/dist/{types-kt7DQKfO.d.ts → types-BZngm4nT.d.ts} +48 -5
  64. package/docs/api.md +4 -1
  65. package/docs/dsl.md +35 -1
  66. package/llms-full.txt +91 -3
  67. package/package.json +1 -1
  68. package/skills/pixi-effects/SKILL.md +2 -1
  69. package/skills/pixi-effects/reference/cheatsheet.md +2 -0
  70. package/skills/pixi-effects/reference/pitfalls.md +6 -0
  71. package/skills/pixi-effects/reference/recipes.md +42 -0
  72. package/skills/pixi-effects/template.html +8 -7
  73. package/dist/Composition-464AWDV6.cjs +0 -16
  74. package/dist/Composition-5U63LMPX.js +0 -7
  75. package/dist/chunk-33USHRV5.cjs.map +0 -1
  76. package/dist/chunk-ABWRISRK.cjs.map +0 -1
  77. package/dist/chunk-DOGY3EAW.js.map +0 -1
  78. package/dist/chunk-GUDLIAIG.cjs.map +0 -1
  79. package/dist/chunk-H363KMJR.js.map +0 -1
  80. package/dist/chunk-PBMDZT2T.js.map +0 -1
package/dist/3d.cjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/3d/spaceBridge.ts","../src/3d/layerTexture.ts","../src/3d/Scene3DSequence.ts","../src/3d/gltf.ts","../src/3d/index.ts"],"names":["AmbientLight","DirectionalLight","SpotLight","PointLight","Box","RenderTexture","FlatMaterial","Matrix","Sequence","NOT_PURE","buildScope","View3D","COMMON","suggestName","isAdvancedBlend","blendFilterFor","AlphaFilter","label","Vector3","Plane","evaluateExpr","Assets","Model3D","Container3D","Matrix4","VERSION","AnimationPlayer","registerSequenceType"],"mappings":"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","file":"3d.cjs","sourcesContent":["/**\n * What lets a `scene3d` layer live in the composition's space (`followCamera`, `followLights`, `followFog`): the composition's camera, lights and fog, in PixiJS 3D.\n *\n * The scene is in composition pixels with y flipped: a point the composition calls (x, y, z) is (x, -y, z) here (the composition's y runs down, PixiJS 3D's up; +z is toward\n * the viewer in both). A camera with the composition camera's position, look-at point and vertical fov then projects that point to the pixel the composition's own projection\n * gives it (tests/3d/spaceBridge.test.ts checks it to 1e-3 px: PixiJS 3D computes in 32-bit floats).\n */\nimport { AmbientLight, Box, DirectionalLight, PointLight, SpotLight, type Camera3D, type Container3D, type View3D } from '@pixi/3d';\nimport type { CameraState } from '../space/math';\nimport type { LightState } from '../space/lighting';\nimport type { FogState } from '../space/LitMaterial';\n\n/** The camera's near plane and far plane in composition pixels: the home camera sits about 740 px from the picture, a long dolly can be several thousand. */\nconst NEAR = 1;\nconst FAR = 20000;\n\n/** Put a PixiJS 3D camera where the composition camera is. The aspect is the view's (it must be the composition's: see `followCamera`). */\nexport function applyCameraState(camera: Camera3D, s: CameraState): void {\n camera.mode = 'perspective';\n camera.zoom = 1;\n camera.fov = s.fov;\n camera.near = NEAR;\n camera.far = FAR;\n camera.position.set(s.x, -s.y, s.z);\n const same = Math.hypot(s.lookAtX - s.x, s.lookAtY - s.y, s.lookAtZ - s.z) < 1e-9; // the composition then looks along -z\n camera.lookAt(same ? { x: s.x, y: -s.y, z: s.z - 1 } : { x: s.lookAtX, y: -s.lookAtY, z: s.lookAtZ });\n}\n\ntype AnyLight = AmbientLight | DirectionalLight | PointLight | SpotLight;\ninterface Entry { kind: LightState['kind']; light: AnyLight }\n\n/**\n * The composition's lights as PixiJS 3D lights, one per light layer alive, in layer order. Made once and moved every frame; a light that has ended is switched off\n * (`visible = false`), not removed.\n *\n * Intensity: PixiJS 3D divides direct and ambient light by pi (as three does), so intensity 1 is multiplied by pi to be \"as bright as the colour\" like a card's shading.\n * Falloff: a point / spot light attenuates by window(range) / sqrt(d^4 + R^4), R being its bulb `radius`:\n * - 'none': a bulb far larger than the scene (R = 100 x the extent) and the intensity times R^2: 1 everywhere in the scene, to 1e-8.\n * - 'inverseSquare': R = the composition's radius and the intensity times R^2: (radius / d)^2 far out, exactly; at d = radius 0.71 instead of the composition's 1.\n * - 'smooth': a flat bulb times the range window, the range and a gain fitted to the composition's smoothstep (see SMOOTH_FIT).\n * Shadows: parallel and spot lights cast (`castShadow`); a point light cannot in PixiJS 3D (said once). The scene is in pixels, so PixiJS 3D's defaults (made for a scene of a\n * few units) lose the shadow (found 2026-11-13, lab spike03: no shadow at 100x scale):\n * - a parallel light fits its shadow box to the casters only, so a wall behind them falls outside it: the box is the whole scene (`center`, side `extent`);\n * - a spot light's shadow stops at 1000 units without a range, and its depth bias of 0.001 (after the perspective divide) is more than the depth between a caster and a\n * wall a few hundred pixels behind it: the range is far beyond the scene and the bias 1e-5.\n */\nexport class LightMirror {\n private entries: Entry[] = [];\n private said = new Set<string>();\n constructor(private readonly root: Container3D, private readonly extent = 2000, private readonly say: (message: string) => void = () => {}, private readonly center: { x: number; y: number; z: number } = { x: 0, y: 0, z: 0 }) {}\n\n update(lights: readonly LightState[]): void {\n lights.forEach((s, i) => {\n let e = this.entries[i];\n if (!e || e.kind !== s.kind) {\n if (e) this.remove(e);\n e = this.entries[i] = this.make(s.kind);\n }\n this.configure(e, s);\n });\n for (let i = lights.length; i < this.entries.length; i++) this.entries[i]!.light.visible = false;\n }\n\n dispose(): void {\n for (const e of this.entries) this.remove(e);\n this.entries = [];\n }\n\n /** The lights now live under another root (a rebuild moved the scene into a new view): new lights go there. */\n rehome(root: Container3D): void {\n (this as unknown as { root: Container3D }).root = root;\n }\n\n private once(key: string, message: string): void {\n if (this.said.has(key)) return;\n this.said.add(key);\n this.say(message);\n }\n\n private make(kind: LightState['kind']): Entry {\n const light: AnyLight = kind === 'ambient' ? new AmbientLight() : kind === 'parallel' ? new DirectionalLight() : kind === 'spot' ? new SpotLight() : new PointLight();\n light.label = 'pixi-effects:composition-light';\n this.root.addChild(light);\n return { kind, light };\n }\n\n private remove(e: Entry): void {\n e.light.removeFromParent();\n e.light.destroy();\n }\n\n private configure(e: Entry, s: LightState): void {\n const { light } = e;\n light.visible = true;\n light.color = [s.r, s.g, s.b];\n let intensity = s.intensity * Math.PI;\n if (s.kind !== 'ambient') {\n light.position.set(s.x, -s.y, s.z);\n const same = Math.hypot(s.lookAtX - s.x, s.lookAtY - s.y, s.lookAtZ - s.z) < 1e-9;\n if (s.kind !== 'point') light.lookAt(same ? { x: s.x, y: -s.y, z: s.z - 1 } : { x: s.lookAtX, y: -s.lookAtY, z: s.lookAtZ });\n }\n if (s.kind === 'point' || s.kind === 'spot') {\n const l = light as PointLight | SpotLight;\n const flat = 100 * this.extent;\n const shadowRange = s.kind === 'spot' && s.castsShadows ? 20 * this.extent : 0;\n if (s.falloff === 'inverseSquare') { l.radius = Math.max(s.radius, 1e-3); intensity *= l.radius * l.radius; l.range = shadowRange; }\n else if (s.falloff === 'smooth') {\n const reach = s.radius + Math.max(s.falloffDistance, 1e-3), p = s.radius / reach;\n l.radius = flat; intensity *= flat * flat * (SMOOTH_FIT.gain[0] + SMOOTH_FIT.gain[1] * p);\n l.range = reach * (SMOOTH_FIT.range[0] + SMOOTH_FIT.range[1] * p);\n }\n else { l.radius = flat; intensity *= flat * flat; l.range = shadowRange; }\n }\n if (s.kind === 'spot') {\n const l = light as SpotLight;\n l.coneAngle = s.coneAngle / 2;\n l.penumbra = s.coneFeather;\n }\n light.intensity = intensity;\n if (s.kind !== 'ambient') {\n const casts = s.castsShadows && s.kind !== 'point';\n (light as DirectionalLight | PointLight | SpotLight).castShadow = casts;\n if (casts) {\n const shadow = (light as DirectionalLight | SpotLight).shadow as { bias?: number; bounds?: Box };\n if (s.kind === 'spot') shadow.bias = SPOT_SHADOW_BIAS;\n else shadow.bounds = (shadow.bounds ??= Box.fromCenterSize(this.center, this.extent));\n }\n if (s.castsShadows && s.kind === 'point') this.once('point', 'followLights: a point light casts no shadow in PixiJS 3D; use a spot light (or a parallel one) for the shadow');\n if (casts && (s.shadowDarkness < 1 || s.shadowDiffusion > 0)) {\n this.once('shadowLook', `followLights: shadowDarkness and shadowDiffusion are not mirrored (PixiJS 3D draws a shadow at full darkness with its view's own filter); the shadow is drawn ${s.shadowDarkness < 1 ? 'darker' : 'harder'} than on the cards`);\n }\n }\n }\n}\n\n/** A spot light's shadow bias in a scene of pixels (PixiJS 3D's default 0.001 hid every shadow at 100x scale). */\nexport const SPOT_SHADOW_BIAS = 1e-5;\n\n/** The 'smooth' fit: range = reach x (a + b p), gain = c + d p, p = radius / (radius + falloffDistance) (measured against the composition's curve: tests/films/scene3d-space). */\nexport const SMOOTH_FIT = { range: [0.8, 0.45] as const, gain: [0.87, 0.45] as const };\n\n/**\n * The composition camera's fog as the view's linear fog: the same colour, near and far (along the view, in composition pixels). PixiJS 3D's linear fog fades with\n * smoothstep where the composition's fades linearly, and has no amount below 1: close, not equal. The fog is set when the camera has one and taken away when it has not;\n * a fog the author set on the view is never touched.\n */\nexport class FogMirror {\n private own: { type: 'linear'; color: [number, number, number]; near: number; far: number } | null = null;\n constructor(private readonly view: Pick<View3D, 'fog'>) {}\n\n update(fog: FogState | null): void {\n const current = this.view.fog as unknown;\n if (current && current !== this.own) return; // the author's own fog: leave it\n if (!fog) {\n if (this.own && current === this.own) this.view.fog = null;\n this.own = null;\n return;\n }\n if (!this.own) {\n this.own = { type: 'linear', color: [fog.r, fog.g, fog.b], near: fog.near, far: fog.far };\n this.view.fog = this.own as never;\n }\n this.own.color = [fog.r, fog.g, fog.b];\n this.own.near = fog.near;\n this.own.far = fog.far;\n }\n\n dispose(): void { this.update(null); }\n}\n","/**\n * `layerTexture(ctx, 'screen')`: a live 2D layer (a `composition`) as the picture on a mesh of a `scene3d` layer (a phone's screen, a television, a billboard, a label).\n *\n * The 2D layer stays a layer of the movie: the timeline drives it, its own `at` / `duration` / keyframes / filters apply. It is not drawn on the stage any more: before each\n * frame of the scene3d layer (after the timeline has put every layer at that frame), PixiJS draws it into a RenderTexture, and the material shows that texture. PixiJS 3D takes\n * a PixiJS texture as it is: no copy, no read-back, the same on WebGL and WebGPU.\n */\nimport { Matrix, RenderTexture, type Container, type Renderer } from 'pixi.js';\nimport { FlatMaterial } from '@pixi/3d';\nimport type { Sequence } from '../sequences/Base';\nimport type { Scene3DContext } from './types';\n\nexport interface LayerTextureOptions {\n /** Pixels of the texture per pixel of the 2D layer: 2 for a screen that is seen large. Default 1. */\n resolution?: number;\n /** The 2D layer's empty and half-transparent parts let what is behind the mesh show through (a sticker, a hologram). Default `false`: an opaque screen, empty parts black. */\n transparent?: boolean;\n}\n\nexport interface LayerTexture {\n /** An unlit material that shows the 2D layer: put it on a mesh. A screen shines by itself, so the scene's lights do not shade it. */\n material: FlatMaterial;\n /** The texture behind the material (a PixiJS RenderTexture, redrawn every frame). */\n texture: RenderTexture;\n /** The size of the texture in pixels. */\n width: number;\n height: number;\n /** Stop showing the layer on the mesh (it is drawn on the stage again; the mesh keeps the last picture). The material and the texture are freed with the scene3d layer. */\n dispose(): void;\n}\n\n/** What a scene3d layer lends to `layerTexture` (on its context, not enumerable). */\nexport interface LayerTextureHost {\n findLayer(name: string): Sequence | null;\n layerNames(): string[];\n pixiRenderer: Renderer | null;\n /** Run `fn` before every frame of the scene3d layer is drawn; returns the function that stops it. */\n beforeDraw(fn: () => void): () => void;\n /** Remember a handle (picking through the mesh, keeping the layer hidden, rebinding after a rebuild). */\n track(handle: ShownLayer): () => void;\n /** Let the scene3d layer free a resource when it goes (a material a mesh may still use cannot be freed earlier: PixiJS 3D would draw a destroyed material). */\n own(free: () => void): void;\n}\n\n/** What the scene3d layer keeps of each layer shown on a mesh. */\nexport interface ShownLayer {\n material: unknown;\n source(): Sequence;\n /** Where in the source (0..1 across, 0..1 down) a point (u, v) of the mesh's uv shows. */\n sourceAt(u: number, v: number): { x: number; y: number };\n /** After a rebuild that keeps the scene3d layer: find the layer of the new tree (throws if it is gone); the function returned shows it from the swap on. */\n prepare(host: LayerTextureHost): () => void;\n keepHidden(): void;\n dispose(): void;\n}\n\nexport const HOST = Symbol.for('pixi-effects:scene3d-host');\nconst label = 'pixi-effects: layerTexture';\n\nexport async function layerTexture(ctx: Scene3DContext, name: string, options: LayerTextureOptions = {}): Promise<LayerTexture> {\n const host = (ctx as unknown as Record<symbol, LayerTextureHost | undefined>)[HOST];\n if (!host) throw new Error(`${label}: call it from the setup of a scene3d layer: const screen = await layerTexture(ctx, 'screen')`);\n if (typeof name !== 'string' || !name) throw new Error(`${label}: the second argument is the name of a 2D layer: layerTexture(ctx, 'screen')`);\n const resolution = options.resolution ?? 1;\n if (!(Number.isFinite(resolution) && resolution > 0 && resolution <= 4)) throw new Error(`${label}: resolution is a number from above 0 to 4 (2 = twice the pixels), got ${JSON.stringify(options.resolution)}`);\n const pixi = host.pixiRenderer;\n if (!pixi) throw new Error(`${label}: PixiJS's renderer is not available here (the movie is not ready)`);\n const source = host.findLayer(name);\n if (!source) {\n const names = host.layerNames();\n throw new Error(`${label}: no layer named \"${name}\" before this scene3d layer${names.length ? ` (the layers built before it: ${names.map((n) => `\"${n}\"`).join(', ')})` : ''}. ` +\n 'A layer shown on a mesh must be listed BEFORE the scene3d layer, in the same composition, and have that name.');\n }\n if (source.spec.type !== 'composition') {\n throw new Error(`${label}: \"${name}\" is a ${source.spec.type} layer: a layer shown on a mesh must be a composition (wrap it: { type: 'composition', name: '${name}', width: 480, height: 270, sequences: [ … ] })`);\n }\n const logicalW = Math.max(1, Math.round(source.intrinsicWidth)), logicalH = Math.max(1, Math.round(source.intrinsicHeight));\n const rt = RenderTexture.create({ width: logicalW, height: logicalH, resolution, autoGenerateMipmaps: true });\n const transparent = options.transparent === true;\n // a RenderTexture's rows run top to bottom and a plane's v runs up: flipped by the material, the picture is upright on a default PlaneGeometry (and on a CubeGeometry's sides)\n const material = new FlatMaterial({ baseColorTexture: rt, uvTransform: new Matrix(1, 0, 0, -1, 0, 1), ...(transparent ? { alphaMode: 'blend' as const } : {}) });\n\n let current: Sequence = source;\n let display = source.target as Container;\n let sx = logicalW / source.intrinsicWidth, sy = logicalH / source.intrinsicHeight;\n let hidden = false;\n const hide = (): void => { display.visible = false; hidden = true; };\n hide();\n // The stage's cull skips what is hidden, so the layers of the source keep the `culled` flag of their last measure against the PICTURE: un-cull them (the texture is the layer's own rectangle).\n const uncull = (c: Container): void => { if (c.culled) c.culled = false; for (const k of c.children) uncull(k); };\n const refresh = (): void => {\n display.visible = true;\n uncull(display);\n try { pixi.render({ container: display, target: rt, transform: new Matrix().scale(sx, sy), clear: true, clearColor: [0, 0, 0, transparent ? 0 : 1] }); } finally { display.visible = false; }\n rt.source.updateMipmaps();\n };\n const stop = host.beforeDraw(refresh);\n refresh();\n\n let disposed = false;\n const handle: ShownLayer & LayerTexture = {\n material, texture: rt, width: Math.round(logicalW * resolution), height: Math.round(logicalH * resolution),\n source: () => current,\n sourceAt: (u, v) => ({ x: u, y: 1 - v }), // a plane's uv: v runs up; the texture's rows run down\n prepare(next) {\n const again = next.findLayer(name);\n if (disposed) return () => {};\n if (!again) throw new Error(`${label}: after a rebuild there is no layer \"${name}\" before the scene3d layer any more`);\n return () => {\n current = again;\n display = again.target as Container;\n sx = logicalW / again.intrinsicWidth; sy = logicalH / again.intrinsicHeight;\n hide();\n refresh();\n };\n },\n keepHidden() { if (hidden && !disposed) display.visible = false; },\n dispose() {\n if (disposed) return;\n disposed = true;\n untrack();\n stop();\n if (hidden) { display.visible = true; hidden = false; }\n },\n };\n const untrack = host.track(handle);\n host.own(() => {\n try { material.destroy?.(); } catch { /* gone with the scene */ }\n try { rt.destroy(true); } catch { /* the renderer is gone */ }\n });\n return handle;\n}\n","import { Plane, Vector3, View3D, type Container3D } from '@pixi/3d';\nimport { AlphaFilter, Matrix, RenderTexture, type Container, type Filter, type Renderer } from 'pixi.js';\nimport type { CanvasCheck } from '../sequences/Canvas';\nimport { Sequence } from '../sequences/Base';\nimport { buildScope } from '../expr/Scope';\nimport { evaluateExpr } from '../expr/Parser';\nimport type { PathRouters } from '../core/Timeline';\nimport { COMMON } from '../core/layerKeys';\nimport { suggestName } from '../core/options';\nimport { NOT_PURE } from '../core/purity';\nimport { applyCameraState, FogMirror, LightMirror } from './spaceBridge';\nimport { HOST, type LayerTextureHost, type ShownLayer } from './layerTexture';\nimport { blendFilterFor, isAdvancedBlend, type BlendFilterLike } from '../core/blend';\nimport type { PropValue } from '../types';\nimport type { Scene3DContext, Scene3DSequenceSpec } from './types';\n\n/** The keys a scene3d layer has besides the common ones. */\nconst OWN_KEYS = ['width', 'height', 'view', 'resolution', 'setup', 'update', 'dispose', 'followCamera', 'followLights', 'followFog', 'reuse'] as const;\n/** Keys of a `three` layer about three's own renderer: a scene3d layer is drawn by PixiJS itself and has no such option. */\nconst THREE_ONLY = ['renderer', 'shareGpu', 'antialias'] as const;\n/** What the layer owns: given in `view`, they are ignored. */\nconst LAYER_OWNED = ['width', 'height', 'autoResize'] as const;\n\n/**\n * A `scene3d` layer: a PixiJS 3D scene (`View3D`) drawn inside PixiJS's own renderer, in the layer's place in the stack. The author builds the scene in `setup` and\n * sets it from the time in `update`; `awaitFrameAt` (the per-frame hook `Movie` awaits for playback, seek and export alike) runs `update`, and PixiJS draws the view with the stage.\n */\nexport class Scene3DSequence extends Sequence {\n private _view: View3D | null = null;\n private _ctx: Scene3DContext | null = null;\n private _objects: Record<string, object> = {};\n private _warned = new Set<string>();\n /** The animation players under the root (found after setup). */\n private _players: ClipPlayer[] = [];\n /** The layer's own last filter: what PixiJS 3D ignores on its view (alpha, its parents' alpha, a basic blend mode) applied to the view's picture. Only there while needed. */\n private _look: AlphaFilter | null = null;\n /** An advanced blend mode on a layer with no filter of its own: its blend filter, owned by the layer (the view's own blend mode would be shut inside the look filter's pass). */\n private _blend: BlendFilterLike | null = null;\n /** The layer's time, what PixiJS 3D's shader time `uTime` reads once pinned (see `_pinShaderTime`). */\n private _time = 0;\n /** Things to do before every frame of the scene is drawn (the 2D layers shown on meshes: `layerTexture`), and their handles. */\n private _drawHooks = new Set<() => void>();\n private _shown: ShownLayer[] = [];\n /** Resources the 2D layers on meshes leave to this layer to free when it goes (shared, like `_shown`, with a layer that takes the scene over). */\n private _owned: Array<() => void> = [];\n /** What a rebuild matches this layer by (core/reuse.ts); null: never kept (`reuse: false`, no `name`, view options that are not plain data). */\n private _key: string | null = null;\n /** The layer of the tree being replaced whose scene this one takes over at the swap (`commitReuse`): until then it is not this layer's. */\n private _borrowed: Scene3DSequence | null = null;\n /** True once another layer took this layer's scene: destroying this one must not let it go. */\n private _donated = false;\n private _pendingRebinds: Array<() => void> = [];\n private _lightMirror: LightMirror | null = null;\n private _fogMirror: FogMirror | null = null;\n private _pinned = false;\n /** The scene may have changed since the meshes were last made pickable (a frame ran `update`): the next pick walks it again, the picks after it do not. */\n private _pickStale = true;\n\n /** The PixiJS 3D view this layer shows (null before build and after destroy). */\n get view(): View3D | null { return this._view; }\n\n private get _spec(): Scene3DSequenceSpec {\n return this.spec as unknown as Scene3DSequenceSpec;\n }\n\n private _say(key: string, message: string): void {\n if (this._warned.has(key)) return;\n this._warned.add(key);\n console.warn(`${this._who()}: ${message}`);\n }\n\n private _who(): string {\n const name = this._spec.name;\n return `pixi-effects: scene3d layer${name ? ` \"${name}\"` : ''}`;\n }\n\n protected override pathRouters(): PathRouters {\n return { scene3d: (path) => this._resolvePath(path) };\n }\n\n async build(): Promise<void> {\n const spec = this._spec;\n if (this.duration === undefined) this.duration = this.parent?.duration ?? this.root.duration;\n this._checkKeys();\n this._checkTint();\n if (typeof spec.update === 'function' && NOT_PURE.test(spec.update.toString())) {\n this._say('pure', 'update calls Math.random, Date.now, performance.now or new Date, so it is not deterministic: the same frame would draw differently in playback, in a seek and in an export. Derive the value from t');\n }\n\n const renderer = this.root.pixiRenderer as Renderer | undefined;\n if (renderer && !(renderer.renderPipes as unknown as Record<string, unknown>).view3d) {\n throw new Error(`${this._who()}: PixiJS 3D was loaded after the renderer started; import 'pixi-effects/3d' (and call register3D()) before movie.init`);\n }\n\n const scope = buildScope(this, this.parent, this.root) as unknown as Record<string, number>;\n const width = resolveDim(spec.width, scope) ?? this.parent?.width ?? this.root.width;\n const height = resolveDim(spec.height, scope) ?? this.parent?.height ?? this.root.height;\n const viewOptions: Record<string, unknown> = { ...(spec.view ?? {}) };\n const owned = LAYER_OWNED.filter(k => k in viewOptions);\n if (owned.length) {\n this._say('owned', `${owned.join(' / ')} belong${owned.length === 1 ? 's' : ''} on the layer, not in view; ignored`);\n for (const k of owned) delete viewOptions[k];\n }\n\n const view = new View3D({ cull: 'cpu', ...viewOptions, width, height, ...(spec.resolution !== undefined ? { resolution: spec.resolution } : {}) } as ConstructorParameters<typeof View3D>[0]);\n view.label = spec.name ?? 'scene3d';\n this._view = view;\n this.target = view;\n this.intrinsicWidth = width;\n this.intrinsicHeight = height;\n\n // A rebuild (setVars, resize) builds this layer while the old one still plays: when it cannot be told apart from one of the old tree it takes over that one's scene at the swap\n // (setup does not run again)\n this._key = spec.reuse === false || !spec.name ? null : reuseKeyOf(spec, width, height);\n const donor = this._key !== null ? (this.root.reuse?.claim(this._key) as Scene3DSequence | null | undefined) : null;\n if (donor && donor._lendable()) {\n this._borrow(donor, view, renderer ?? null, width, height);\n if (spec.followCamera) this._checkFollowShape(width, height);\n this.buildFilters();\n return;\n }\n\n const objects: Record<string, object> = {};\n const ctx: Scene3DContext = { view, root: view.root, camera: view.camera, renderer: renderer as Renderer, width, height, objects };\n Object.defineProperty(ctx, HOST, { value: this._makeHost(renderer ?? null), enumerable: false });\n let result: Awaited<ReturnType<Scene3DSequenceSpec['setup']>>;\n try {\n result = await spec.setup(ctx);\n } catch (err) {\n this._destroyView();\n throw new Error(`${this._who()}: setup failed: ${err instanceof Error ? err.message : String(err)}`, { cause: err });\n }\n Object.assign(objects, result?.objects ?? {});\n if (!('camera' in objects)) objects.camera = view.camera;\n if (!('view' in objects)) objects.view = view;\n this._objects = objects;\n this._ctx = ctx;\n this._stopSelfUpdating(view.root);\n if (spec.followCamera) this._checkFollowShape(width, height);\n this.buildFilters();\n }\n\n /** Reuse (core/reuse.ts): the key this layer is matched by, while it can still lend its scene. */\n reuseKey(): string | null { return this._lendable() ? this._key : null; }\n private _lendable(): boolean { return !!this._view && !!this._ctx && !this._donated && !this._borrowed; }\n\n /**\n * Take over a layer of the tree being replaced. The view is a PixiJS display object with one parent, so the old view stays in the old tree (which goes on drawing while this tree is\n * built); this layer has a view of its own, and at the swap (`commitReuse`) the old view's whole scene, its camera with it, moves into this one. The objects setup made (and every\n * value an author kept from setup: the camera, the meshes) are the same objects.\n */\n private _borrow(d: Scene3DSequence, view: View3D, renderer: Renderer | null, width: number, height: number): void {\n this._borrowed = d;\n // the objects are the same ones, but `view` is this layer's: keyframes on scene3d.view.* are bound now, before the swap; the camera is the one the old view shows (setup may have switched it)\n const objects: Record<string, object> = { ...d._objects, ...(d._objects.view === d._view ? { view } : {}) };\n this._objects = objects;\n this._players = d._players;\n const ctx: Scene3DContext = { view, root: view.root, camera: d._view!.camera, renderer: renderer as Renderer, width, height, objects };\n const host = this._makeHost(renderer);\n Object.defineProperty(ctx, HOST, { value: host, enumerable: false });\n this._ctx = ctx;\n this._pendingRebinds = d._shown.map((h) => h.prepare(host)); // the 2D layers of the new tree are shown from the swap on, not before: the old layer goes on drawing its own\n }\n\n /** The new tree is on stage: the scene of the layer this one borrowed from moves into this layer's view, for good. */\n commitReuse(): void {\n const d = this._borrowed, view = this._view, ctx = this._ctx;\n if (!d || !view || !ctx) return;\n const from = d._view!;\n const own = view.camera;\n for (const child of [...from.root.children]) view.root.addChild(child);\n view.camera = ctx.camera; // the old view's camera, now under this view's root\n if (own !== ctx.camera) { own.removeFromParent(); own.destroy(); }\n // what setup (or update) did to the view itself goes with the scene: its background, environment, exposure, tone mapping, post effects, shadow settings, and a fog it set\n // (a fog the old layer's followFog made is made again for this view at the next frame)\n const keep = ['background', 'environment', 'exposure', 'toneMapping', 'shadowQuality', 'shadowFilter', 'cull', ...(d._fogMirror ? [] : ['fog'])] as const;\n const src = from as unknown as Record<string, unknown>, dst = view as unknown as Record<string, unknown>;\n for (const key of keep) { try { if (key in src && dst[key] !== src[key]) dst[key] = src[key]; } catch { /* a setting this version cannot take */ } }\n try {\n const passes = src.passes as unknown[] | undefined;\n if (Array.isArray(passes) && passes.length) { dst.passes = [...passes]; src.passes = []; } // the effects move with the scene; the old view lets them go\n } catch { /* passes this version cannot move */ }\n this._lightMirror = d._lightMirror;\n this._lightMirror?.rehome(view.root);\n this._fogMirror = null; // made again for this view at the next frame\n this._pickStale = true;\n this._shown = d._shown;\n this._drawHooks = d._drawHooks;\n this._owned = d._owned;\n d._donated = true;\n this._borrowed = null;\n for (const apply of this._pendingRebinds) apply();\n this._pendingRebinds = [];\n }\n\n /** Unknown keys (with the likely one), and the keys only a three layer has. */\n private _checkKeys(): void {\n const valid: readonly string[] = [...COMMON, ...OWN_KEYS];\n for (const key of Object.keys(this.spec)) {\n if (valid.includes(key)) continue;\n if ((THREE_ONLY as readonly string[]).includes(key)) { this._say(`key:${key}`, `${key} is about three's own renderer; a scene3d layer is drawn by PixiJS itself, so it has no such option (ignored)`); continue; }\n const guess = suggestName(key, valid);\n this._say(`key:${key}`, `unknown key \"${key}\"${guess ? `; did you mean \"${guess}\"?` : ''} (a scene3d layer has ${OWN_KEYS.join(', ')} and the keys every layer has)`);\n }\n }\n\n /**\n * PixiJS 3D (0.1.0) writes `performance.now()` into the shader time `uTime` of every view at every draw: a shader bit that reads it would follow the wall clock.\n * The view's global uniforms exist once PixiJS has drawn it; from then on `uTime` reads the layer's time and the pipe's write is ignored. Tried before every frame\n * until it holds (drawing the view on its own at build to make them sooner broke a stencil mask on it later). This reaches into the view's per-renderer data\n * (`_gpuData[renderer.uid].globalUniformGroup.uniforms`); when that is there but has no `uTime` (another version), say so once.\n */\n private _pinShaderTime(): void {\n if (this._pinned) return;\n const view = this._view, renderer = this.root.pixiRenderer as Renderer | undefined;\n if (!view || !renderer) return;\n const data = (view as unknown as { _gpuData?: Record<number, { globalUniformGroup?: { uniforms?: Record<string, unknown> } }> })._gpuData?.[renderer.uid];\n if (!data) return; // not drawn yet\n this._pinned = true;\n const uniforms = data.globalUniformGroup?.uniforms;\n if (!uniforms || !('uTime' in uniforms)) {\n this._say('uTime', \"could not tie PixiJS 3D's shader time uTime to the video's time (no global uniforms found): a custom shader bit that reads uTime follows the wall clock; give it a uniform you set from t instead\");\n return;\n }\n Object.defineProperty(uniforms, 'uTime', { configurable: true, enumerable: true, get: () => this._time, set: () => { /* the pipe's wall clock: ignored */ } });\n }\n\n /**\n * `followCamera` (and, later, `followLights` / `followFog`): before each frame, ask the composition for its camera at this moment (the layer's time on the composition's\n * clock) and put the view's camera there. `ctx.space` keeps the raw numbers for `update`, which runs after and may override.\n */\n private _followSpace(t: number): void {\n const spec = this._spec;\n if (!spec.followCamera && !spec.followLights && !spec.followFog) return;\n const ctx = this._ctx, view = this._view;\n if (!ctx || !view) return;\n if (!this.parent?.spaceAt) {\n this._say('parent', 'followCamera / followLights / followFog need the layer to sit in a composition that has a camera or a light to follow; this layer\\'s parent cannot say (it keeps its own camera and lights)');\n return;\n }\n const space = this.parent.spaceAt((this.absoluteStart ?? this.at) + t);\n ctx.space = space;\n if (spec.followCamera) applyCameraState(view.camera, space.camera);\n if (spec.followLights) (this._lightMirror ??= new LightMirror(view.root, Math.max(ctx.width, ctx.height) * 2, (m) => this._say(`light:${m}`, m), { x: ctx.width / 2, y: -ctx.height / 2, z: 0 })).update(space.lights);\n if (spec.followFog) {\n if (space.fog && space.fog.amount !== 1) this._say('fogAmount', `followFog: the camera's fogAmount is ${space.fog.amount}, and PixiJS 3D's fog has no amount below 1: the layer uses the full amount (set fogColor to the colour you want at the far end, or leave followFog off and set view.fog yourself from ctx.space.fog)`);\n (this._fogMirror ??= new FogMirror(view)).update(space.fog);\n }\n }\n\n\n /** followCamera shows the whole composition through the layer's picture: a layer of another shape would show it squeezed or cut. Said once at build. */\n private _checkFollowShape(width: number, height: number): void {\n const p = this.parent;\n if (!p || !(p.width > 0 && p.height > 0)) return;\n if (Math.abs(width * p.height - height * p.width) <= 1e-3 * width * p.height) return;\n this._say('shape', `followCamera: the layer is ${width} x ${height} but the composition is ${p.width} x ${p.height}; the camera shows the whole composition, so the layer needs its aspect ratio (drop width / height to cover the composition)`);\n }\n\n /** PixiJS 3D draws the view in its materials' colours: a tint does nothing. Said once, at build. */\n private _checkTint(): void {\n const spec = this._spec as { initial?: Record<string, unknown>; keyframes?: Array<{ to?: Record<string, unknown>; from?: Record<string, unknown> }> };\n const uses = spec.initial?.tint !== undefined || (spec.keyframes ?? []).some(k => k?.to?.tint !== undefined || k?.from?.tint !== undefined);\n if (uses) this._say('tint', 'tint is ignored on a scene3d layer (PixiJS 3D draws its own colours): colour the materials, or put a filter on the layer');\n }\n\n /**\n * Every frame, before the draw: PixiJS 3D ignores the view's alpha (and its parents') and a basic blend mode, so when the layer is not at full strength or blends,\n * its picture goes through one AlphaFilter of the layer's own, last in its filter list, that applies them. A layer at alpha 1 with a normal blend has no such filter.\n */\n override syncFrame(): void {\n super.syncFrame();\n for (const h of this._shown) h.keepHidden(); // a 2D layer shown on a mesh stays off the stage (a tween of autoAlpha writes visible = true)\n const view = this._view;\n if (!view) return;\n let alpha = 1;\n for (let c: Container | null = view; c; c = c.parent) alpha *= c.alpha;\n const current = (view.filters ?? []) as readonly Filter[];\n const others = current.filter(f => f !== this._look && f !== (this._blend as unknown));\n // Where the blend goes (blend.ts put it on the view, or on the last of the layer's filters):\n // - filters of its own (the author's, a matte, an advanced blend appended to them): the blend sits on the last of them; the look filter goes FIRST and only fades.\n // - no filter, a basic mode: the view's own mode is ignored by PixiJS 3D, so the look filter carries it, as the only pass.\n // - no filter, an advanced mode: a blend filter of the layer's own ends the chain (the view's own mode would be shut inside the look filter's pass); the view stays normal.\n const authored = String((this.spec as { blendMode?: unknown }).blendMode ?? 'normal');\n if (others.length === 0 && isAdvancedBlend(authored) && !this._blend) {\n this._blend = blendFilterFor(authored);\n if (this._blend) view.blendMode = 'normal';\n }\n const mode = String(view.blendMode ?? 'normal');\n const basic = others.length === 0 && (mode === 'add' || mode === 'screen' || mode === 'multiply');\n const need = alpha < 1 || basic;\n const own = this._blend && others.length === 0 ? [this._blend as unknown as Filter] : [];\n let next: Filter[] = [...others, ...own];\n if (need) {\n const look = (this._look ??= new AlphaFilter({ alpha: 1 }));\n look.alpha = alpha;\n look.blendMode = (basic ? mode : 'normal') as AlphaFilter['blendMode'];\n next = others.length || own.length ? [look, ...others, ...own] : [look];\n }\n if (next.length !== current.length || next.some((f, k) => f !== current[k])) view.filters = next.length ? next : null;\n }\n\n /**\n * Models, animation players and particle systems update themselves on PixiJS's shared ticker unless told otherwise: their picture would follow the browser's clock,\n * not the video's time. Turn that off on everything under the root, and say once what was turned off (the author drives them from `update`).\n */\n private _stopSelfUpdating(root: Container3D): void {\n const stopped: string[] = [];\n const visit = (node: unknown): void => {\n const n = node as { label?: string; constructor?: { name?: string }; autoUpdate?: unknown; player?: ClipPlayer };\n let hit = false;\n if (n.player && Array.isArray(n.player.animationLabels) && !this._players.includes(n.player)) this._players.push(n.player);\n if (n.player && n.player.autoUpdate === true) { n.player.autoUpdate = false; hit = true; }\n if (n.autoUpdate === true) { n.autoUpdate = false; hit = true; }\n if (hit) stopped.push(n.label || n.constructor?.name || 'a node');\n };\n (root as unknown as { traverse(cb: (n: unknown) => void): void }).traverse(visit);\n if (stopped.length) {\n this._say('autoUpdate', `turned off autoUpdate on ${stopped.join(', ')}: a video draws from the time, so drive them from update(t) (a model's clip: model.player.getState(name).gotoAndStop(t))`);\n }\n }\n\n /**\n * Per-frame hook, duck-typed by `Movie._awaitVideoFrames` (as the video and three layers are): the single frame path of playback, seek and export.\n * `update` sets the scene from the time; PixiJS draws the view with the rest of the stage.\n */\n async awaitFrameAt(local: number): Promise<void> {\n if (!this._ctx || this._borrowed) return; // a layer waiting for the swap: the scene is still the old layer's\n const t = Math.max(0, Math.min(local, this.duration ?? local));\n this._time = t;\n this._pickStale = true;\n this._pinShaderTime();\n this._followSpace(t);\n const update = this._spec.update;\n if (update) {\n try {\n update(t, this._ctx);\n } catch (err) {\n this._say('update', `update threw (reported once): ${err instanceof Error ? err.message : String(err)}`);\n }\n }\n this._poseClips(t);\n for (const hook of this._drawHooks) hook(); // the 2D layers shown on meshes, drawn into their textures at this frame\n }\n\n /**\n * A clip still playing after `update` (a model made with `autoPlay`, a `player.play(name)` in setup) is posed by nobody: it would move with the ticker, or not at all.\n * The layer poses it from its own time (its speed and loop kept) and leaves it playing, so it plays in the video as it would in a page. A clip `update` poses itself\n * (`gotoAndStop(t)` stops it) is left alone. Nothing is remembered from one frame to the next: the frame depends on this frame's `update` only.\n */\n private _poseClips(t: number): void {\n for (const player of this._players) {\n for (const label of player.animationLabels) {\n const state = player.getState(label);\n if (!state.playing) continue;\n const length = state.animation.duration;\n const x = t * (state.animationSpeed ?? 1);\n state.gotoAndStop(length > 0 ? (state.loop ? ((x % length) + length) % length : Math.min(Math.max(x, 0), length)) : 0);\n state.play(); // still playing: posed again next frame (no ticker advances it)\n }\n }\n }\n\n\n /**\n * The determinism check (`check`, `movie.review()`): the scene set by `update` and drawn at a few moments in two orders, with one draw thrown away first, and the pictures\n * compared, as the canvas and three layers are. A scene whose same frame is not the same picture (state kept from call to call, a clock, a player or particle system on its\n * own clock, a motion blur that reads the last frame) is reported. It draws the view alone into a texture of its own size with PixiJS's renderer; the next real frame sets\n * the scene again, so nothing is left behind.\n */\n checkDeterminism(times: number[]): CanvasCheck {\n const none: CanvasCheck = { differs: [], drawMs: 0, threw: [] };\n const view = this._view, ctx = this._ctx;\n const renderer = this.root.pixiRenderer as Renderer | undefined;\n if (!view || !ctx || !renderer) return none;\n const w = Math.max(1, Math.ceil(ctx.width)), h = Math.max(1, Math.ceil(ctx.height));\n const rt = RenderTexture.create({ width: w, height: h });\n // PixiJS makes a container it renders on its own a render group (AbstractRenderer.render: enableRenderGroup); a view left as one loses its stencil mask\n // in the stage's later draws (found 2026-11-13: check's contact sheet showed a masked scene3d unmasked). Put it back as it was.\n const wasGroup = view.isRenderGroup;\n const at = new Matrix().translate(view.anchor.x * w, view.anchor.y * h); // the view alone, its top-left at the texture's\n const keep = w * h * 4 * times.length <= 96e6;\n const hash = (d: Uint8Array | Uint8ClampedArray): number => { let x = 0x811c9dc5; for (let i = 0; i < d.length; i++) { x ^= d[i]!; x = Math.imul(x, 0x01000193); } return x >>> 0; };\n const ms: number[] = [];\n const threw = new Set<number>();\n const update = this._spec.update;\n const once = (t: number, timed: boolean): Uint8Array | Uint8ClampedArray => {\n const from = performance.now();\n let pixels: Uint8Array | Uint8ClampedArray = new Uint8Array(0);\n try {\n this._time = t;\n this._followSpace(t);\n update?.(t, ctx);\n this._poseClips(t);\n renderer.render({ container: view, target: rt, clear: true, transform: at });\n pixels = renderer.extract.pixels(rt).pixels;\n } catch { threw.add(t); }\n if (timed) ms.push(performance.now() - from);\n return pixels;\n };\n try {\n for (const t of times) once(t, false); // the warm-up\n const first = times.map(t => { const d = once(t, true); return keep ? d.slice() : hash(d); });\n const second = [...times].reverse().map(t => once(t, false)).reverse();\n const differs: CanvasCheck['differs'] = [];\n times.forEach((t, i) => {\n const a = first[i]!, b = second[i]!;\n if (typeof a === 'number') { if (a !== hash(b)) differs.push({ t, pixels: -1, maxDiff: -1 }); return; }\n let pixels = 0, maxDiff = 0;\n for (let k = 0; k < a.length; k++) { const d = Math.abs(a[k]! - b[k]!); if (d) { pixels++; if (d > maxDiff) maxDiff = d; } }\n if (pixels) differs.push({ t, pixels, maxDiff });\n });\n ms.sort((x, y) => x - y);\n return { differs: differs.filter(d => !threw.has(d.t)), drawMs: ms.length ? ms[Math.floor(ms.length / 2)]! : 0, threw: times.filter(t => threw.has(t)) };\n } finally {\n rt.destroy(true);\n if (!wasGroup && view.isRenderGroup) view.disableRenderGroup();\n }\n }\n\n /** What `layerTexture` asks of this layer: the layers listed before it, PixiJS's renderer, and a place to hook in before every frame. */\n private _makeHost(renderer: Renderer | null): LayerTextureHost {\n return {\n findLayer: (name) => this.parent?.findLayer?.(name) ?? null,\n layerNames: () => this.parent?.layerNames?.() ?? [],\n pixiRenderer: renderer,\n beforeDraw: (fn) => { this._drawHooks.add(fn); return () => { this._drawHooks.delete(fn); }; },\n track: (handle) => { this._shown.push(handle); return () => { const i = this._shown.indexOf(handle); if (i >= 0) this._shown.splice(i, 1); }; },\n own: (free) => { this._owned.push(free); },\n };\n }\n\n /** True when this layer shows 2D layers on its meshes (`layerTexture`): the movie runs its frame after the rest of the frame is ready (projections, filters fed), as for a three layer. */\n get showsLayers(): boolean { return this._shown.length > 0; }\n\n /** The 2D layer that a material shows (`layerTexture`), for a click on the mesh to reach it (movie.pick); null for any other material. */\n screenOf(material: unknown): { source: Sequence; at(u: number, v: number): { x: number; y: number } } | null {\n const handle = this._shown.find((h) => h.material === material);\n return handle ? { source: handle.source(), at: (u, v) => handle.sourceAt(u, v) } : null;\n }\n\n /** The view's global point at (u, v) of its picture (0..1, v down). */\n private _globalAt(u: number, v: number): { x: number; y: number } | null {\n const view = this._view;\n if (!view) return null;\n const b = view.getLocalBounds();\n return view.toGlobal({ x: b.x + u * b.width, y: b.y + v * b.height });\n }\n\n /**\n * Make the scene's meshes hit by a ray, exactly: PixiJS 3D only hits nodes whose eventMode is not 'passive', and by default against the mesh's bounding box (a sphere's corners\n * count, and the hit has no uv). A mesh the author left as it was gets eventMode 'static' and hitVolume 'geometry' (per triangle: the silhouette, the normal and the uv a 2D\n * layer on the mesh needs); the author's own choice is kept.\n */\n private _makePickable(): void {\n if (!this._pickStale) return; // (a hover picks at every pointer move: one walk per frame is enough)\n this._pickStale = false;\n const root = this._view?.root as unknown as { traverse(cb: (n: unknown) => void): void } | undefined;\n root?.traverse((node) => {\n const n = node as { eventMode?: string; geometry?: unknown; hitVolume?: unknown };\n if (n.eventMode !== 'passive' || n.geometry === undefined) return;\n n.eventMode = 'static';\n if (n.hitVolume === undefined || n.hitVolume === null) n.hitVolume = 'geometry';\n });\n }\n\n /**\n * `movie.pick`: a ray through (u, v) of the layer's picture (0..1, v down) from the view's camera, and what it meets first: the object's name (its own label, or its nearest\n * labelled ancestor's), where (scene units), how far from the camera, and the node. Uses the transforms of the last render, which is the frame on screen. null when it meets nothing.\n */\n pickAt(u: number, v: number): { object: string; point: [number, number, number]; distance: number; object3d: unknown; uv?: { u: number; v: number }; material?: unknown } | null {\n const view = this._view;\n const at = this._globalAt(u, v);\n if (!view || !at) return null;\n this._makePickable();\n const hit = (view as unknown as { raycast(p: { x: number; y: number }): { target: unknown; point: { x: number; y: number; z: number }; distance: number; uv?: { x: number; y: number } | null } | null }).raycast(at);\n if (!hit) return null;\n let name = '';\n // a node made without a label carries its class name (PixiJS 3D's default: 'Mesh3D'): that is no name, the nearest ancestor's is\n for (let n = hit.target as { label?: string | null; parent?: unknown; constructor?: { name?: string } } | null; n && n !== (view.root as unknown); n = n.parent as typeof n) {\n if (n.label && n.label !== n.constructor?.name) { name = n.label; break; }\n }\n return {\n object: name, point: [hit.point.x, hit.point.y, hit.point.z], distance: hit.distance, object3d: hit.target,\n ...(hit.uv ? { uv: { u: hit.uv.x, v: hit.uv.y } } : {}), material: (hit.target as { material?: unknown }).material,\n };\n }\n\n /**\n * `hit.scene3d.grab(plane)`: a function of a point (u, v) of the layer's picture that gives where the pointer's ray meets a plane through the grabbed point, and how far that is\n * from it (`delta`): move the object by it. `plane`: 'screen' (facing the camera: the default), 'floor' (horizontal: y up), 'wall' (z constant), or a normal [x, y, z].\n * null where the ray never meets the plane.\n */\n dragPlane(point: [number, number, number], plane: 'screen' | 'floor' | 'wall' | [number, number, number] = 'screen'): (u: number, v: number) => { point: [number, number, number]; delta: [number, number, number] } | null {\n const view = this._view;\n const grabbed = new Vector3(...point);\n let normal: Vector3;\n if (plane === 'floor') normal = new Vector3(0, 1, 0);\n else if (plane === 'wall') normal = new Vector3(0, 0, 1);\n else if (Array.isArray(plane)) normal = new Vector3(...plane).normalize();\n else {\n const m = view?.camera.worldTransform.elements; // the camera looks down its -z: its z axis is the plane's normal\n normal = m ? new Vector3(m[8], m[9], m[10]).normalize() : new Vector3(0, 0, 1);\n }\n const surface = new Plane().setFromNormalAndCoplanarPoint(normal, grabbed);\n return (u, v) => {\n const at = this._globalAt(u, v);\n if (!view || !at) return null;\n const meet = view.screenToRay(at).intersectPlane(surface, new Vector3());\n if (!meet) return null;\n return { point: [meet.x, meet.y, meet.z], delta: [meet.x - grabbed.x, meet.y - grabbed.y, meet.z - grabbed.z] };\n };\n }\n\n private _resolvePath(path: string): { target: object; prop: string } | null {\n const segs = path.split('.');\n if (segs.length < 2) { this._warnPath(path, 'needs at least <object>.<prop>'); return null; }\n let obj: unknown = this._objects[segs[0]!];\n if (obj == null) {\n this._warnPath(path, `unknown object \"${segs[0]}\" (known: ${Object.keys(this._objects).join(', ')}): expose it in setup's { objects }`);\n return null;\n }\n for (let i = 1; i < segs.length - 1; i++) {\n obj = (obj as Record<string, unknown>)[segs[i]!];\n if (obj == null) { this._warnPath(path, `\"${segs[i]}\" is undefined along the path`); return null; }\n }\n const prop = segs[segs.length - 1]!;\n if (typeof obj !== 'object' || !(prop in (obj as object))) { this._warnPath(path, `no property \"${prop}\"`); return null; }\n return { target: obj as object, prop };\n }\n\n private _warnPath(path: string, why: string): void {\n this._say(`path:${path}`, `keyframe path scene3d.${path}: ${why}; skipped`);\n }\n\n private _destroyView(): void {\n const view = this._view;\n this._view = null;\n if (this.target === view) this.target = null;\n try { view?.destroy({ children: true }); } catch (err) { console.warn(`${this._who()}: destroying the view threw —`, err); }\n }\n\n override destroy(): void {\n const spec = this._spec;\n // another layer has this layer's scene (or this layer never took the one it borrowed): the scene, the 2D layers on meshes and the lights are not this layer's to let go\n const kept = this._donated || this._borrowed !== null;\n if (!kept) {\n if (this._ctx && spec.dispose) {\n try { spec.dispose(this._ctx); } catch (err) { console.warn(`${this._who()}: dispose() threw —`, err); }\n }\n for (const h of [...this._shown]) { try { h.dispose(); } catch { /* the 2D layer is gone with its tree */ } }\n this._drawHooks.clear();\n for (const free of this._owned.splice(0)) free();\n this._lightMirror?.dispose();\n }\n // a layer whose scene moved on keeps pointing at the shared list and set: a 2D layer's handle (made by this layer's host) removes itself from them when it is let go\n if (!kept) { this._shown = []; this._drawHooks = new Set(); this._owned = []; }\n this._pendingRebinds = [];\n this._borrowed = null;\n this._lightMirror = null;\n this._fogMirror = null;\n this._ctx = null;\n this._objects = {};\n this._players = [];\n this._destroyView(); // (a view whose scene moved on is empty)\n this._look?.destroy();\n this._look = null;\n this._blend?.destroy();\n this._blend = null;\n super.destroy();\n }\n\n}\n\n/** What the layer uses of a PixiJS 3D animation player (public API only). */\ninterface ClipState { readonly playing: boolean; readonly animation: { duration: number }; animationSpeed?: number; loop: boolean; gotoAndStop(time: number): unknown; play(): unknown }\ninterface ClipPlayer { autoUpdate?: unknown; readonly animationLabels: readonly string[]; getState(label: string): ClipState }\n\n/** A number for each function: two layers are the same layer only when their `setup` is the same function. */\nconst ids = new WeakMap<object, number>();\nlet lastId = 0;\nfunction idOf(fn: unknown): number {\n if (typeof fn !== 'function') return 0;\n let id = ids.get(fn);\n if (id === undefined) { id = ++lastId; ids.set(fn, id); }\n return id;\n}\n\n/**\n * The key a rebuild matches a scene3d layer by: its kind (so it can never equal a three layer's key in the shared pool), its name, its setup, its size and its options as JSON.\n * View options that cannot be written as JSON (a cycle) make the layer one that is built again; an object of a class (an effect in `passes`) is written as its own fields, so two\n * such options that differ only inside the class may count as the same.\n * @internal exported for its unit test\n */\nexport function reuseKeyOf(spec: Scene3DSequenceSpec, width: number, height: number): string | null {\n let view: string;\n try { view = JSON.stringify(spec.view ?? null) ?? 'null'; } catch { return null; }\n return JSON.stringify(['scene3d', spec.name, idOf(spec.setup), width, height, spec.resolution ?? 1, view, !!spec.followCamera, !!spec.followLights, !!spec.followFog]);\n}\n\nfunction resolveDim(v: PropValue | undefined, scope: Record<string, number>): number | undefined {\n if (v === undefined) return undefined;\n if (typeof v === 'number') return v;\n return evaluateExpr(v, scope);\n}\n","/**\n * `loadModel(url)` and `fitCamera(ctx, object)`: a glTF / GLB model in a scene3d layer, posed from the time; the camera where the whole model fits.\n */\nimport { Assets } from 'pixi.js';\nimport { Container3D, Matrix4, Model3D, Vector3 } from '@pixi/3d';\nimport type { Scene3DContext } from './types';\n\nexport interface LoadModelOptions {\n /** A clip name, a clip index, or `false` (no animation: the model's bind pose). Default: the first clip, if the file has one. */\n animation?: string | number | false;\n /** The clip time is `t x speed + offset` (the layer's seconds). Defaults 1 and 0. */\n speed?: number;\n offset?: number;\n /** `true` (default): the clip repeats; `false`: it holds its last pose. */\n loop?: boolean;\n}\n\nexport interface LoadedModel {\n /** Add this to `ctx.root`. A group whose origin is the centre of the model's bounding box (bind pose): position, turn and `fit` it about its centre. */\n object: Container3D;\n /** The PixiJS 3D model inside `object` (its `player`, `materials`, `skeletons`). */\n model: Model3D;\n /** The names of the clips the file has. */\n clips: string[];\n /** The size of the model's bounding box now (with `fit`), in the scene's units. */\n size(): { x: number; y: number; z: number };\n /** Scale `object` so the model's longest side is `n` (a model in metres in a scene in composition pixels: `fit(400)` under `followCamera`). */\n fit(n: number): void;\n /** Pose the model at the layer's time `t` (seconds): the clip at `t x speed + offset`, looped or held. A seek, an export and a repeat give the same pose. */\n pose(t: number): void;\n}\n\nconst label = 'pixi-effects: loadModel';\n\n/** Load a glTF / GLB (a URL relative to the page) as a PixiJS 3D model, ready to pose from the time. Call it in a scene3d layer's `setup` (await it). */\nexport async function loadModel(url: string, options: LoadModelOptions = {}): Promise<LoadedModel> {\n if (typeof url !== 'string' || !url) throw new Error(`${label}: the first argument is the model's URL: await loadModel('model.glb')`);\n const source = await Assets.load(url);\n const model = new Model3D({ source, autoUpdate: false, autoPlay: false } as ConstructorParameters<typeof Model3D>[0]);\n // a file with no animation has no player\n const player = model.player as unknown as { animationLabels: readonly string[]; getState(label: string): { animation: { duration: number }; gotoAndStop(t: number): unknown } } | undefined;\n const clips = player ? [...player.animationLabels] : [];\n const speed = options.speed ?? 1, offset = options.offset ?? 0, loop = options.loop !== false;\n let clip: string | null = null;\n if (options.animation === undefined) clip = clips[0] ?? null;\n else if (options.animation === false) clip = null;\n else if (typeof options.animation === 'number') {\n clip = clips[options.animation] ?? null;\n if (clip === null) throw new Error(`${label}: the model has no clip number ${options.animation} (it has ${clips.length}${clips.length ? `: ${clips.map((c) => `\"${c}\"`).join(', ')}` : ''})`);\n } else {\n if (!clips.includes(options.animation)) throw new Error(`${label}: the model has no clip \"${options.animation}\" (its clips: ${clips.length ? clips.map((c) => `\"${c}\"`).join(', ') : 'none'})`);\n clip = options.animation;\n }\n\n // the group's origin is the centre of the model's box (bind pose): the model sits at minus that centre inside it\n const object = new Container3D({ label: url.split('/').pop() ?? 'model' } as ConstructorParameters<typeof Container3D>[0]);\n object.addChild(model);\n const box = model.getLocalBounds();\n model.position.set(-(box.min.x + box.max.x) / 2, -(box.min.y + box.max.y) / 2, -(box.min.z + box.max.z) / 2);\n const base = { x: box.max.x - box.min.x, y: box.max.y - box.min.y, z: box.max.z - box.min.z };\n\n const state = clip !== null && player ? player.getState(clip) : null;\n const pose = (t: number): void => {\n if (!state) return;\n const length = state.animation.duration;\n const x = t * speed + offset;\n state.gotoAndStop(length > 0 ? (loop ? ((x % length) + length) % length : Math.min(Math.max(x, 0), length)) : 0);\n };\n pose(0);\n return {\n object, model, clips,\n size: () => ({ x: base.x * object.scale.x, y: base.y * object.scale.y, z: base.z * object.scale.z }),\n fit: (n: number) => {\n const longest = Math.max(base.x, base.y, base.z);\n if (!(n > 0) || !(longest > 0)) throw new Error(`${label}: fit(n) needs a size above 0 (got ${n}) and a model with a size (its box is ${base.x} x ${base.y} x ${base.z})`);\n const k = n / longest;\n object.scale.set(k, k, k);\n },\n pose,\n };\n}\n\nexport interface FitCameraOptions {\n /** The direction the camera sits in from the centre of the object, any length. Default `[0.45, 0.3, 1]`: a three-quarter view, a little from the side and above. */\n direction?: [number, number, number];\n /** Free room around the object: 1.1 (the default) leaves 10 %. */\n margin?: number;\n}\n\n/**\n * Put the layer's camera where the whole of `object` (its bounding box now, with its scale and place) fits the picture, looking at its centre: the smallest distance at which\n * the 8 corners of the box fit both the vertical and the horizontal field of view. Uses the camera's `fov` and the layer's shape; `near` and `far` follow the distance.\n * The box is the pose of now: for a clip that travels far, place the camera yourself.\n */\nexport function fitCamera(ctx: Scene3DContext, object: Container3D, options: FitCameraOptions = {}): void {\n const camera = ctx.camera;\n const box = object.getLocalBounds().applyMatrix4(object.getGlobalTransform(new Matrix4()));\n const centre = new Vector3((box.min.x + box.max.x) / 2, (box.min.y + box.max.y) / 2, (box.min.z + box.max.z) / 2);\n const margin = options.margin ?? 1.1;\n const [dx, dy, dz] = options.direction ?? [0.45, 0.3, 1];\n const toCamera = new Vector3(dx, dy, dz).normalize();\n const right = new Vector3(0, 1, 0).cross(toCamera);\n if (right.x * right.x + right.y * right.y + right.z * right.z < 1e-12) right.set(1, 0, 0);\n right.normalize();\n const up = toCamera.clone().cross(right);\n const tanV = Math.tan((camera.fov * Math.PI) / 360), tanH = tanV * (ctx.width / ctx.height);\n let distance = 1e-3;\n for (const x of [box.min.x, box.max.x]) for (const y of [box.min.y, box.max.y]) for (const z of [box.min.z, box.max.z]) {\n const r = new Vector3(x - centre.x, y - centre.y, z - centre.z);\n const along = r.dot(toCamera);\n distance = Math.max(distance, along + (Math.abs(r.dot(right)) * margin) / tanH, along + (Math.abs(r.dot(up)) * margin) / tanV);\n }\n camera.mode = 'perspective';\n camera.position.set(centre.x + toCamera.x * distance, centre.y + toCamera.y * distance, centre.z + toCamera.z * distance);\n camera.near = Math.max(distance / 100, 1e-4);\n camera.far = distance * 100;\n camera.lookAt(centre);\n}\n","/**\n * pixi-effects/3d — 3D scenes drawn by PixiJS 3D (`@pixi/3d`), the main 3D engine.\n *\n * Import this entry BEFORE `movie.init` and call `register3D()` once: PixiJS loads the 3D drawing code while its renderer starts, so a\n * renderer that started before `@pixi/3d` was imported cannot draw a `scene3d` layer. The core `pixi-effects` entry never loads `@pixi/3d`.\n */\nimport '@pixi/3d'; // the import registers the 3D backends with PixiJS (they load at app.init)\nimport { AnimationPlayer, Model3D } from '@pixi/3d';\nimport { VERSION } from 'pixi.js';\nimport { registerSequenceType, type SequenceCtor } from '../core/Composition';\nimport type { SequenceSpec } from '../types';\nimport { Scene3DSequence } from './Scene3DSequence';\nimport type { Scene3DSequenceSpec } from './types';\n\nexport { Scene3DSequence } from './Scene3DSequence';\nexport { layerTexture } from './layerTexture';\nexport { loadModel, fitCamera } from './gltf';\nexport type { LoadModelOptions, LoadedModel, FitCameraOptions } from './gltf';\nexport type { LayerTexture, LayerTextureOptions } from './layerTexture';\nexport type { Scene3DContext, Scene3DSetupResult, Scene3DSequenceSpec } from './types';\n\nlet saidVersion = false;\n\n/** PixiJS 3D needs pixi.js 8.23.0 or later. */\nfunction versionAtLeast(v: string, min: [number, number]): boolean {\n const [a, b] = v.split('.').map(Number);\n if (!Number.isFinite(a) || !Number.isFinite(b)) return true; // an unbuilt PixiJS (\"$_VERSION\"): nothing to say\n return a! > min[0] || (a === min[0] && b! >= min[1]);\n}\n\n/**\n * Register the `scene3d` layer type. Explicit call so `sideEffects: false` bundlers cannot drop it; calling it again is fine.\n * It also turns off the self-updating of models and animation players (they would move with the browser's clock, not the video's time):\n * pose a clip from the time in `update` with `model.player.getState(name).gotoAndStop(t)`.\n */\nexport function register3D(): void {\n if (!saidVersion && !versionAtLeast(String(VERSION), [8, 23])) {\n saidVersion = true;\n console.warn(`pixi-effects: PixiJS 3D needs pixi.js 8.23.0 or later (this page has ${VERSION}): put pixi.js@8.23.0 in the import map`);\n }\n (Model3D as unknown as { defaultOptions: { autoUpdate: boolean } }).defaultOptions.autoUpdate = false;\n (AnimationPlayer as unknown as { defaultOptions: { autoUpdate: boolean } }).defaultOptions.autoUpdate = false;\n registerSequenceType('scene3d', Scene3DSequence as unknown as SequenceCtor);\n}\n\n/** Typing helper: accepts a strongly-typed scene3d spec and returns it as a core SequenceSpec, keeping `@pixi/3d` types out of the core union. */\nexport function scene3d(spec: Scene3DSequenceSpec): SequenceSpec {\n return spec as unknown as SequenceSpec;\n}\n"]}
1
+ {"version":3,"sources":["../src/3d/spaceBridge.ts","../src/3d/layerTexture.ts","../src/3d/Scene3DSequence.ts","../src/3d/gltf.ts","../src/3d/index.ts"],"names":["AmbientLight","DirectionalLight","SpotLight","PointLight","Box","RenderTexture","FlatMaterial","Matrix","Sequence","SetupValues","NOT_PURE","buildScope","View3D","COMMON","suggestName","isAdvancedBlend","blendFilterFor","AlphaFilter","label","Vector3","Plane","evaluateExpr","Assets","Model3D","Container3D","Matrix4","VERSION","AnimationPlayer","registerSequenceType"],"mappings":"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","file":"3d.cjs","sourcesContent":["/**\n * What lets a `scene3d` layer live in the composition's space (`followCamera`, `followLights`, `followFog`): the composition's camera, lights and fog, in PixiJS 3D.\n *\n * The scene is in composition pixels with y flipped: a point the composition calls (x, y, z) is (x, -y, z) here (the composition's y runs down, PixiJS 3D's up; +z is toward\n * the viewer in both). A camera with the composition camera's position, look-at point and vertical fov then projects that point to the pixel the composition's own projection\n * gives it (tests/3d/spaceBridge.test.ts checks it to 1e-3 px: PixiJS 3D computes in 32-bit floats).\n */\nimport { AmbientLight, Box, DirectionalLight, PointLight, SpotLight, type Camera3D, type Container3D, type View3D } from '@pixi/3d';\nimport type { CameraState } from '../space/math';\nimport type { LightState } from '../space/lighting';\nimport type { FogState } from '../space/LitMaterial';\n\n/** The camera's near plane and far plane in composition pixels: the home camera sits about 740 px from the picture, a long dolly can be several thousand. */\nconst NEAR = 1;\nconst FAR = 20000;\n\n/** Put a PixiJS 3D camera where the composition camera is. The aspect is the view's (it must be the composition's: see `followCamera`). */\nexport function applyCameraState(camera: Camera3D, s: CameraState): void {\n camera.mode = 'perspective';\n camera.zoom = 1;\n camera.fov = s.fov;\n camera.near = NEAR;\n camera.far = FAR;\n camera.position.set(s.x, -s.y, s.z);\n const same = Math.hypot(s.lookAtX - s.x, s.lookAtY - s.y, s.lookAtZ - s.z) < 1e-9; // the composition then looks along -z\n camera.lookAt(same ? { x: s.x, y: -s.y, z: s.z - 1 } : { x: s.lookAtX, y: -s.lookAtY, z: s.lookAtZ });\n}\n\ntype AnyLight = AmbientLight | DirectionalLight | PointLight | SpotLight;\ninterface Entry { kind: LightState['kind']; light: AnyLight }\n\n/**\n * The composition's lights as PixiJS 3D lights, one per light layer alive, in layer order. Made once and moved every frame; a light that has ended is switched off\n * (`visible = false`), not removed.\n *\n * Intensity: PixiJS 3D divides direct and ambient light by pi (as three does), so intensity 1 is multiplied by pi to be \"as bright as the colour\" like a card's shading.\n * Falloff: a point / spot light attenuates by window(range) / sqrt(d^4 + R^4), R being its bulb `radius`:\n * - 'none': a bulb far larger than the scene (R = 100 x the extent) and the intensity times R^2: 1 everywhere in the scene, to 1e-8.\n * - 'inverseSquare': R = the composition's radius and the intensity times R^2: (radius / d)^2 far out, exactly; at d = radius 0.71 instead of the composition's 1.\n * - 'smooth': a flat bulb times the range window, the range and a gain fitted to the composition's smoothstep (see SMOOTH_FIT).\n * Shadows: parallel and spot lights cast (`castShadow`); a point light cannot in PixiJS 3D (said once). The scene is in pixels, so PixiJS 3D's defaults (made for a scene of a\n * few units) lose the shadow (found 2026-11-13, lab spike03: no shadow at 100x scale):\n * - a parallel light fits its shadow box to the casters only, so a wall behind them falls outside it: the box is the whole scene (`center`, side `extent`);\n * - a spot light's shadow stops at 1000 units without a range, and its depth bias of 0.001 (after the perspective divide) is more than the depth between a caster and a\n * wall a few hundred pixels behind it: the range is far beyond the scene and the bias 1e-5.\n */\nexport class LightMirror {\n private entries: Entry[] = [];\n private said = new Set<string>();\n constructor(private readonly root: Container3D, private readonly extent = 2000, private readonly say: (message: string) => void = () => {}, private readonly center: { x: number; y: number; z: number } = { x: 0, y: 0, z: 0 }) {}\n\n update(lights: readonly LightState[]): void {\n lights.forEach((s, i) => {\n let e = this.entries[i];\n if (!e || e.kind !== s.kind) {\n if (e) this.remove(e);\n e = this.entries[i] = this.make(s.kind);\n }\n this.configure(e, s);\n });\n for (let i = lights.length; i < this.entries.length; i++) this.entries[i]!.light.visible = false;\n }\n\n dispose(): void {\n for (const e of this.entries) this.remove(e);\n this.entries = [];\n }\n\n /** The lights now live under another root (a rebuild moved the scene into a new view): new lights go there. */\n rehome(root: Container3D): void {\n (this as unknown as { root: Container3D }).root = root;\n }\n\n private once(key: string, message: string): void {\n if (this.said.has(key)) return;\n this.said.add(key);\n this.say(message);\n }\n\n private make(kind: LightState['kind']): Entry {\n const light: AnyLight = kind === 'ambient' ? new AmbientLight() : kind === 'parallel' ? new DirectionalLight() : kind === 'spot' ? new SpotLight() : new PointLight();\n light.label = 'pixi-effects:composition-light';\n this.root.addChild(light);\n return { kind, light };\n }\n\n private remove(e: Entry): void {\n e.light.removeFromParent();\n e.light.destroy();\n }\n\n private configure(e: Entry, s: LightState): void {\n const { light } = e;\n light.visible = true;\n light.color = [s.r, s.g, s.b];\n let intensity = s.intensity * Math.PI;\n if (s.kind !== 'ambient') {\n light.position.set(s.x, -s.y, s.z);\n const same = Math.hypot(s.lookAtX - s.x, s.lookAtY - s.y, s.lookAtZ - s.z) < 1e-9;\n if (s.kind !== 'point') light.lookAt(same ? { x: s.x, y: -s.y, z: s.z - 1 } : { x: s.lookAtX, y: -s.lookAtY, z: s.lookAtZ });\n }\n if (s.kind === 'point' || s.kind === 'spot') {\n const l = light as PointLight | SpotLight;\n const flat = 100 * this.extent;\n const shadowRange = s.kind === 'spot' && s.castsShadows ? 20 * this.extent : 0;\n if (s.falloff === 'inverseSquare') { l.radius = Math.max(s.radius, 1e-3); intensity *= l.radius * l.radius; l.range = shadowRange; }\n else if (s.falloff === 'smooth') {\n const reach = s.radius + Math.max(s.falloffDistance, 1e-3), p = s.radius / reach;\n l.radius = flat; intensity *= flat * flat * (SMOOTH_FIT.gain[0] + SMOOTH_FIT.gain[1] * p);\n l.range = reach * (SMOOTH_FIT.range[0] + SMOOTH_FIT.range[1] * p);\n }\n else { l.radius = flat; intensity *= flat * flat; l.range = shadowRange; }\n }\n if (s.kind === 'spot') {\n const l = light as SpotLight;\n l.coneAngle = s.coneAngle / 2;\n l.penumbra = s.coneFeather;\n }\n light.intensity = intensity;\n if (s.kind !== 'ambient') {\n const casts = s.castsShadows && s.kind !== 'point';\n (light as DirectionalLight | PointLight | SpotLight).castShadow = casts;\n if (casts) {\n const shadow = (light as DirectionalLight | SpotLight).shadow as { bias?: number; bounds?: Box };\n if (s.kind === 'spot') shadow.bias = SPOT_SHADOW_BIAS;\n else shadow.bounds = (shadow.bounds ??= Box.fromCenterSize(this.center, this.extent));\n }\n if (s.castsShadows && s.kind === 'point') this.once('point', 'followLights: a point light casts no shadow in PixiJS 3D; use a spot light (or a parallel one) for the shadow');\n if (casts && (s.shadowDarkness < 1 || s.shadowDiffusion > 0)) {\n this.once('shadowLook', `followLights: shadowDarkness and shadowDiffusion are not mirrored (PixiJS 3D draws a shadow at full darkness with its view's own filter); the shadow is drawn ${s.shadowDarkness < 1 ? 'darker' : 'harder'} than on the cards`);\n }\n }\n }\n}\n\n/** A spot light's shadow bias in a scene of pixels (PixiJS 3D's default 0.001 hid every shadow at 100x scale). */\nexport const SPOT_SHADOW_BIAS = 1e-5;\n\n/** The 'smooth' fit: range = reach x (a + b p), gain = c + d p, p = radius / (radius + falloffDistance) (measured against the composition's curve: tests/films/scene3d-space). */\nexport const SMOOTH_FIT = { range: [0.8, 0.45] as const, gain: [0.87, 0.45] as const };\n\n/**\n * The composition camera's fog as the view's linear fog: the same colour, near and far (along the view, in composition pixels). PixiJS 3D's linear fog fades with\n * smoothstep where the composition's fades linearly, and has no amount below 1: close, not equal. The fog is set when the camera has one and taken away when it has not;\n * a fog the author set on the view is never touched.\n */\nexport class FogMirror {\n private own: { type: 'linear'; color: [number, number, number]; near: number; far: number } | null = null;\n constructor(private readonly view: Pick<View3D, 'fog'>) {}\n\n update(fog: FogState | null): void {\n const current = this.view.fog as unknown;\n if (current && current !== this.own) return; // the author's own fog: leave it\n if (!fog) {\n if (this.own && current === this.own) this.view.fog = null;\n this.own = null;\n return;\n }\n if (!this.own) {\n this.own = { type: 'linear', color: [fog.r, fog.g, fog.b], near: fog.near, far: fog.far };\n this.view.fog = this.own as never;\n }\n this.own.color = [fog.r, fog.g, fog.b];\n this.own.near = fog.near;\n this.own.far = fog.far;\n }\n\n dispose(): void { this.update(null); }\n}\n","/**\n * `layerTexture(ctx, 'screen')`: a live 2D layer (a `composition`) as the picture on a mesh of a `scene3d` layer (a phone's screen, a television, a billboard, a label).\n *\n * The 2D layer stays a layer of the movie: the timeline drives it, its own `at` / `duration` / keyframes / filters apply. It is not drawn on the stage any more: before each\n * frame of the scene3d layer (after the timeline has put every layer at that frame), PixiJS draws it into a RenderTexture, and the material shows that texture. PixiJS 3D takes\n * a PixiJS texture as it is: no copy, no read-back, the same on WebGL and WebGPU.\n */\nimport { Matrix, RenderTexture, type Container, type Renderer } from 'pixi.js';\nimport { FlatMaterial } from '@pixi/3d';\nimport type { Sequence } from '../sequences/Base';\nimport type { Scene3DContext } from './types';\n\nexport interface LayerTextureOptions {\n /** Pixels of the texture per pixel of the 2D layer: 2 for a screen that is seen large. Default 1. */\n resolution?: number;\n /** The 2D layer's empty and half-transparent parts let what is behind the mesh show through (a sticker, a hologram). Default `false`: an opaque screen, empty parts black. */\n transparent?: boolean;\n}\n\nexport interface LayerTexture {\n /** An unlit material that shows the 2D layer: put it on a mesh. A screen shines by itself, so the scene's lights do not shade it. */\n material: FlatMaterial;\n /** The texture behind the material (a PixiJS RenderTexture, redrawn every frame). */\n texture: RenderTexture;\n /** The size of the texture in pixels. */\n width: number;\n height: number;\n /** Stop showing the layer on the mesh (it is drawn on the stage again; the mesh keeps the last picture). The material and the texture are freed with the scene3d layer. */\n dispose(): void;\n}\n\n/** What a scene3d layer lends to `layerTexture` (on its context, not enumerable). */\nexport interface LayerTextureHost {\n findLayer(name: string): Sequence | null;\n layerNames(): string[];\n pixiRenderer: Renderer | null;\n /** Run `fn` before every frame of the scene3d layer is drawn; returns the function that stops it. */\n beforeDraw(fn: () => void): () => void;\n /** Remember a handle (picking through the mesh, keeping the layer hidden, rebinding after a rebuild). */\n track(handle: ShownLayer): () => void;\n /** Let the scene3d layer free a resource when it goes (a material a mesh may still use cannot be freed earlier: PixiJS 3D would draw a destroyed material). */\n own(free: () => void): void;\n}\n\n/** What the scene3d layer keeps of each layer shown on a mesh. */\nexport interface ShownLayer {\n material: unknown;\n source(): Sequence;\n /** Where in the source (0..1 across, 0..1 down) a point (u, v) of the mesh's uv shows. */\n sourceAt(u: number, v: number): { x: number; y: number };\n /** After a rebuild that keeps the scene3d layer: find the layer of the new tree (throws if it is gone); the function returned shows it from the swap on. */\n prepare(host: LayerTextureHost): () => void;\n keepHidden(): void;\n dispose(): void;\n}\n\nexport const HOST = Symbol.for('pixi-effects:scene3d-host');\nconst label = 'pixi-effects: layerTexture';\n\nexport async function layerTexture(ctx: Scene3DContext, name: string, options: LayerTextureOptions = {}): Promise<LayerTexture> {\n const host = (ctx as unknown as Record<symbol, LayerTextureHost | undefined>)[HOST];\n if (!host) throw new Error(`${label}: call it from the setup of a scene3d layer: const screen = await layerTexture(ctx, 'screen')`);\n if (typeof name !== 'string' || !name) throw new Error(`${label}: the second argument is the name of a 2D layer: layerTexture(ctx, 'screen')`);\n const resolution = options.resolution ?? 1;\n if (!(Number.isFinite(resolution) && resolution > 0 && resolution <= 4)) throw new Error(`${label}: resolution is a number from above 0 to 4 (2 = twice the pixels), got ${JSON.stringify(options.resolution)}`);\n const pixi = host.pixiRenderer;\n if (!pixi) throw new Error(`${label}: PixiJS's renderer is not available here (the movie is not ready)`);\n const source = host.findLayer(name);\n if (!source) {\n const names = host.layerNames();\n throw new Error(`${label}: no layer named \"${name}\" before this scene3d layer${names.length ? ` (the layers built before it: ${names.map((n) => `\"${n}\"`).join(', ')})` : ''}. ` +\n 'A layer shown on a mesh must be listed BEFORE the scene3d layer, in the same composition, and have that name.');\n }\n if (source.spec.type !== 'composition') {\n throw new Error(`${label}: \"${name}\" is a ${source.spec.type} layer: a layer shown on a mesh must be a composition (wrap it: { type: 'composition', name: '${name}', width: 480, height: 270, sequences: [ … ] })`);\n }\n const logicalW = Math.max(1, Math.round(source.intrinsicWidth)), logicalH = Math.max(1, Math.round(source.intrinsicHeight));\n const rt = RenderTexture.create({ width: logicalW, height: logicalH, resolution, autoGenerateMipmaps: true });\n const transparent = options.transparent === true;\n // a RenderTexture's rows run top to bottom and a plane's v runs up: flipped by the material, the picture is upright on a default PlaneGeometry (and on a CubeGeometry's sides)\n const material = new FlatMaterial({ baseColorTexture: rt, uvTransform: new Matrix(1, 0, 0, -1, 0, 1), ...(transparent ? { alphaMode: 'blend' as const } : {}) });\n\n let current: Sequence = source;\n let display = source.target as Container;\n let sx = logicalW / source.intrinsicWidth, sy = logicalH / source.intrinsicHeight;\n let hidden = false;\n const hide = (): void => { display.visible = false; hidden = true; };\n hide();\n // The stage's cull skips what is hidden, so the layers of the source keep the `culled` flag of their last measure against the PICTURE: un-cull them (the texture is the layer's own rectangle).\n const uncull = (c: Container): void => { if (c.culled) c.culled = false; for (const k of c.children) uncull(k); };\n const refresh = (): void => {\n display.visible = true;\n uncull(display);\n try { pixi.render({ container: display, target: rt, transform: new Matrix().scale(sx, sy), clear: true, clearColor: [0, 0, 0, transparent ? 0 : 1] }); } finally { display.visible = false; }\n rt.source.updateMipmaps();\n };\n const stop = host.beforeDraw(refresh);\n refresh();\n\n let disposed = false;\n const handle: ShownLayer & LayerTexture = {\n material, texture: rt, width: Math.round(logicalW * resolution), height: Math.round(logicalH * resolution),\n source: () => current,\n sourceAt: (u, v) => ({ x: u, y: 1 - v }), // a plane's uv: v runs up; the texture's rows run down\n prepare(next) {\n const again = next.findLayer(name);\n if (disposed) return () => {};\n if (!again) throw new Error(`${label}: after a rebuild there is no layer \"${name}\" before the scene3d layer any more`);\n return () => {\n current = again;\n display = again.target as Container;\n sx = logicalW / again.intrinsicWidth; sy = logicalH / again.intrinsicHeight;\n hide();\n refresh();\n };\n },\n keepHidden() { if (hidden && !disposed) display.visible = false; },\n dispose() {\n if (disposed) return;\n disposed = true;\n untrack();\n stop();\n if (hidden) { display.visible = true; hidden = false; }\n },\n };\n const untrack = host.track(handle);\n host.own(() => {\n try { material.destroy?.(); } catch { /* gone with the scene */ }\n try { rt.destroy(true); } catch { /* the renderer is gone */ }\n });\n return handle;\n}\n","import { Plane, Vector3, View3D, type Container3D } from '@pixi/3d';\nimport { AlphaFilter, Matrix, RenderTexture, type Container, type Filter, type Renderer } from 'pixi.js';\nimport type { CanvasCheck } from '../sequences/Canvas';\nimport { Sequence } from '../sequences/Base';\nimport { buildScope } from '../expr/Scope';\nimport { evaluateExpr } from '../expr/Parser';\nimport type { PathRouters } from '../core/Timeline';\nimport { COMMON } from '../core/layerKeys';\nimport { suggestName } from '../core/options';\nimport { NOT_PURE } from '../core/purity';\nimport { SetupValues } from '../core/setupValues';\nimport { applyCameraState, FogMirror, LightMirror } from './spaceBridge';\nimport { HOST, type LayerTextureHost, type ShownLayer } from './layerTexture';\nimport { blendFilterFor, isAdvancedBlend, type BlendFilterLike } from '../core/blend';\nimport type { PropValue } from '../types';\nimport type { Scene3DContext, Scene3DSequenceSpec } from './types';\n\n/** The keys a scene3d layer has besides the common ones. */\nconst OWN_KEYS = ['width', 'height', 'view', 'resolution', 'setup', 'update', 'dispose', 'followCamera', 'followLights', 'followFog', 'reuse'] as const;\n/** Keys of a `three` layer about three's own renderer: a scene3d layer is drawn by PixiJS itself and has no such option. */\nconst THREE_ONLY = ['renderer', 'shareGpu', 'antialias'] as const;\n/** What the layer owns: given in `view`, they are ignored. */\nconst LAYER_OWNED = ['width', 'height', 'autoResize'] as const;\n\n/**\n * A `scene3d` layer: a PixiJS 3D scene (`View3D`) drawn inside PixiJS's own renderer, in the layer's place in the stack. The author builds the scene in `setup` and\n * sets it from the time in `update`; `awaitFrameAt` (the per-frame hook `Movie` awaits for playback, seek and export alike) runs `update`, and PixiJS draws the view with the stage.\n */\nexport class Scene3DSequence extends Sequence {\n private _view: View3D | null = null;\n private _ctx: Scene3DContext | null = null;\n private _objects: Record<string, object> = {};\n private _warned = new Set<string>();\n /** The animation players under the root (found after setup). */\n private _players: ClipPlayer[] = [];\n /** The layer's own last filter: what PixiJS 3D ignores on its view (alpha, its parents' alpha, a basic blend mode) applied to the view's picture. Only there while needed. */\n private _look: AlphaFilter | null = null;\n /** An advanced blend mode on a layer with no filter of its own: its blend filter, owned by the layer (the view's own blend mode would be shut inside the look filter's pass). */\n private _blend: BlendFilterLike | null = null;\n /** The layer's time, what PixiJS 3D's shader time `uTime` reads once pinned (see `_pinShaderTime`). */\n private _time = 0;\n /** Things to do before every frame of the scene is drawn (the 2D layers shown on meshes: `layerTexture`), and their handles. */\n private _drawHooks = new Set<() => void>();\n private _shown: ShownLayer[] = [];\n /** Resources the 2D layers on meshes leave to this layer to free when it goes (shared, like `_shown`, with a layer that takes the scene over). */\n private _owned: Array<() => void> = [];\n /** What a rebuild matches this layer by (core/reuse.ts); null: never kept (`reuse: false`, no `name`, view options that are not plain data). */\n private _key: string | null = null;\n /** The layer of the tree being replaced whose scene this one takes over at the swap (`commitReuse`): until then it is not this layer's. */\n private _borrowed: Scene3DSequence | null = null;\n /** True once another layer took this layer's scene: destroying this one must not let it go. */\n private _donated = false;\n /** What setup left on the objects the keyframes reach, shared with a layer that takes the scene over (core/setupValues.ts). */\n private _setupValues = new SetupValues();\n private _pendingRebinds: Array<() => void> = [];\n private _lightMirror: LightMirror | null = null;\n private _fogMirror: FogMirror | null = null;\n private _pinned = false;\n /** The scene may have changed since the meshes were last made pickable (a frame ran `update`): the next pick walks it again, the picks after it do not. */\n private _pickStale = true;\n\n /** The PixiJS 3D view this layer shows (null before build and after destroy). */\n get view(): View3D | null { return this._view; }\n\n private get _spec(): Scene3DSequenceSpec {\n return this.spec as unknown as Scene3DSequenceSpec;\n }\n\n private _say(key: string, message: string): void {\n if (this._warned.has(key)) return;\n this._warned.add(key);\n console.warn(`${this._who()}: ${message}`);\n }\n\n private _who(): string {\n const name = this._spec.name;\n return `pixi-effects: scene3d layer${name ? ` \"${name}\"` : ''}`;\n }\n\n protected override pathRouters(): PathRouters {\n return { scene3d: (path) => this._resolvePath(path) };\n }\n\n async build(): Promise<void> {\n const spec = this._spec;\n if (this.duration === undefined) this.duration = this.parent?.duration ?? this.root.duration;\n this._checkKeys();\n this._checkTint();\n if (typeof spec.update === 'function' && NOT_PURE.test(spec.update.toString())) {\n this._say('pure', 'update calls Math.random, Date.now, performance.now or new Date, so it is not deterministic: the same frame would draw differently in playback, in a seek and in an export. Derive the value from t');\n }\n\n const renderer = this.root.pixiRenderer as Renderer | undefined;\n if (renderer && !(renderer.renderPipes as unknown as Record<string, unknown>).view3d) {\n throw new Error(`${this._who()}: PixiJS 3D was loaded after the renderer started; import 'pixi-effects/3d' (and call register3D()) before movie.init`);\n }\n\n const scope = buildScope(this, this.parent, this.root) as unknown as Record<string, number>;\n const width = resolveDim(spec.width, scope) ?? this.parent?.width ?? this.root.width;\n const height = resolveDim(spec.height, scope) ?? this.parent?.height ?? this.root.height;\n const viewOptions: Record<string, unknown> = { ...(spec.view ?? {}) };\n const owned = LAYER_OWNED.filter(k => k in viewOptions);\n if (owned.length) {\n this._say('owned', `${owned.join(' / ')} belong${owned.length === 1 ? 's' : ''} on the layer, not in view; ignored`);\n for (const k of owned) delete viewOptions[k];\n }\n\n const view = new View3D({ cull: 'cpu', ...viewOptions, width, height, ...(spec.resolution !== undefined ? { resolution: spec.resolution } : {}) } as ConstructorParameters<typeof View3D>[0]);\n view.label = spec.name ?? 'scene3d';\n this._view = view;\n this.target = view;\n this.intrinsicWidth = width;\n this.intrinsicHeight = height;\n\n // A rebuild (setVars, resize) builds this layer while the old one still plays: when it cannot be told apart from one of the old tree it takes over that one's scene at the swap\n // (setup does not run again)\n this._key = spec.reuse === false || !spec.name ? null : reuseKeyOf(spec, width, height);\n const donor = this._key !== null ? (this.root.reuse?.claim(this._key, this) as Scene3DSequence | null | undefined) : null;\n if (donor && donor._lendable()) {\n this._borrow(donor, view, renderer ?? null, width, height);\n if (spec.followCamera) this._checkFollowShape(width, height);\n this.buildFilters();\n return;\n }\n\n const objects: Record<string, object> = {};\n const ctx: Scene3DContext = { view, root: view.root, camera: view.camera, renderer: renderer as Renderer, width, height, objects };\n Object.defineProperty(ctx, HOST, { value: this._makeHost(renderer ?? null), enumerable: false });\n let result: Awaited<ReturnType<Scene3DSequenceSpec['setup']>>;\n try {\n result = await spec.setup(ctx);\n } catch (err) {\n this._destroyView();\n throw new Error(`${this._who()}: setup failed: ${err instanceof Error ? err.message : String(err)}`, { cause: err });\n }\n Object.assign(objects, result?.objects ?? {});\n if (!('camera' in objects)) objects.camera = view.camera;\n if (!('view' in objects)) objects.view = view;\n this._objects = objects;\n this._ctx = ctx;\n this._stopSelfUpdating(view.root);\n if (spec.followCamera) this._checkFollowShape(width, height);\n this.buildFilters();\n }\n\n /** Reuse (core/reuse.ts): the key this layer is matched by, while it can still lend its scene. */\n reuseKey(): string | null { return this._lendable() ? this._key : null; }\n private _lendable(): boolean { return !!this._view && !!this._ctx && !this._donated && !this._borrowed; }\n\n /**\n * Take over a layer of the tree being replaced. The view is a PixiJS display object with one parent, so the old view stays in the old tree (which goes on drawing while this tree is\n * built); this layer has a view of its own, and at the swap (`commitReuse`) the old view's whole scene, its camera with it, moves into this one. The objects setup made (and every\n * value an author kept from setup: the camera, the meshes) are the same objects.\n */\n private _borrow(d: Scene3DSequence, view: View3D, renderer: Renderer | null, width: number, height: number): void {\n this._borrowed = d;\n // the objects are the same ones, but `view` is this layer's: keyframes on scene3d.view.* are bound now, before the swap; the camera is the one the old view shows (setup may have switched it)\n const objects: Record<string, object> = { ...d._objects, ...(d._objects.view === d._view ? { view } : {}) };\n this._objects = objects;\n this._players = d._players;\n this._setupValues = d._setupValues;\n const ctx: Scene3DContext = { view, root: view.root, camera: d._view!.camera, renderer: renderer as Renderer, width, height, objects };\n const host = this._makeHost(renderer);\n Object.defineProperty(ctx, HOST, { value: host, enumerable: false });\n this._ctx = ctx;\n this._pendingRebinds = d._shown.map((h) => h.prepare(host)); // the 2D layers of the new tree are shown from the swap on, not before: the old layer goes on drawing its own\n }\n\n /** The new tree is on stage: the scene of the layer this one borrowed from moves into this layer's view, for good. */\n commitReuse(): void {\n const d = this._borrowed, view = this._view, ctx = this._ctx;\n if (!d || !view || !ctx) return;\n const from = d._view!;\n this._setupValues.restore(); // the new timeline starts from setup's picture (the frame drawn next writes the rest)\n const own = view.camera;\n for (const child of [...from.root.children]) view.root.addChild(child);\n view.camera = ctx.camera; // the old view's camera, now under this view's root\n if (own !== ctx.camera) { own.removeFromParent(); own.destroy(); }\n // what setup (or update) did to the view itself goes with the scene: its background, environment, exposure, tone mapping, post effects, shadow settings, and a fog it set\n // (a fog the old layer's followFog made is made again for this view at the next frame)\n const keep = ['background', 'environment', 'exposure', 'toneMapping', 'shadowQuality', 'shadowFilter', 'cull', ...(d._fogMirror ? [] : ['fog'])] as const;\n const src = from as unknown as Record<string, unknown>, dst = view as unknown as Record<string, unknown>;\n for (const key of keep) { try { if (key in src && dst[key] !== src[key]) dst[key] = src[key]; } catch { /* a setting this version cannot take */ } }\n try {\n const passes = src.passes as unknown[] | undefined;\n if (Array.isArray(passes) && passes.length) { dst.passes = [...passes]; src.passes = []; } // the effects move with the scene; the old view lets them go\n } catch { /* passes this version cannot move */ }\n this._lightMirror = d._lightMirror;\n this._lightMirror?.rehome(view.root);\n this._fogMirror = null; // made again for this view at the next frame\n this._pickStale = true;\n this._shown = d._shown;\n this._drawHooks = d._drawHooks;\n this._owned = d._owned;\n d._donated = true;\n this._borrowed = null;\n for (const apply of this._pendingRebinds) apply();\n this._pendingRebinds = [];\n }\n\n /** Unknown keys (with the likely one), and the keys only a three layer has. */\n private _checkKeys(): void {\n const valid: readonly string[] = [...COMMON, ...OWN_KEYS];\n for (const key of Object.keys(this.spec)) {\n if (valid.includes(key)) continue;\n if ((THREE_ONLY as readonly string[]).includes(key)) { this._say(`key:${key}`, `${key} is about three's own renderer; a scene3d layer is drawn by PixiJS itself, so it has no such option (ignored)`); continue; }\n const guess = suggestName(key, valid);\n this._say(`key:${key}`, `unknown key \"${key}\"${guess ? `; did you mean \"${guess}\"?` : ''} (a scene3d layer has ${OWN_KEYS.join(', ')} and the keys every layer has)`);\n }\n }\n\n /**\n * PixiJS 3D (0.1.0) writes `performance.now()` into the shader time `uTime` of every view at every draw: a shader bit that reads it would follow the wall clock.\n * The view's global uniforms exist once PixiJS has drawn it; from then on `uTime` reads the layer's time and the pipe's write is ignored. Tried before every frame\n * until it holds (drawing the view on its own at build to make them sooner broke a stencil mask on it later). This reaches into the view's per-renderer data\n * (`_gpuData[renderer.uid].globalUniformGroup.uniforms`); when that is there but has no `uTime` (another version), say so once.\n */\n private _pinShaderTime(): void {\n if (this._pinned) return;\n const view = this._view, renderer = this.root.pixiRenderer as Renderer | undefined;\n if (!view || !renderer) return;\n const data = (view as unknown as { _gpuData?: Record<number, { globalUniformGroup?: { uniforms?: Record<string, unknown> } }> })._gpuData?.[renderer.uid];\n if (!data) return; // not drawn yet\n this._pinned = true;\n const uniforms = data.globalUniformGroup?.uniforms;\n if (!uniforms || !('uTime' in uniforms)) {\n this._say('uTime', \"could not tie PixiJS 3D's shader time uTime to the video's time (no global uniforms found): a custom shader bit that reads uTime follows the wall clock; give it a uniform you set from t instead\");\n return;\n }\n Object.defineProperty(uniforms, 'uTime', { configurable: true, enumerable: true, get: () => this._time, set: () => { /* the pipe's wall clock: ignored */ } });\n }\n\n /**\n * `followCamera` (and, later, `followLights` / `followFog`): before each frame, ask the composition for its camera at this moment (the layer's time on the composition's\n * clock) and put the view's camera there. `ctx.space` keeps the raw numbers for `update`, which runs after and may override.\n */\n private _followSpace(t: number): void {\n const spec = this._spec;\n if (!spec.followCamera && !spec.followLights && !spec.followFog) return;\n const ctx = this._ctx, view = this._view;\n if (!ctx || !view) return;\n if (!this.parent?.spaceAt) {\n this._say('parent', 'followCamera / followLights / followFog need the layer to sit in a composition that has a camera or a light to follow; this layer\\'s parent cannot say (it keeps its own camera and lights)');\n return;\n }\n const space = this.parent.spaceAt((this.absoluteStart ?? this.at) + t);\n ctx.space = space;\n if (spec.followCamera) applyCameraState(view.camera, space.camera);\n if (spec.followLights) (this._lightMirror ??= new LightMirror(view.root, Math.max(ctx.width, ctx.height) * 2, (m) => this._say(`light:${m}`, m), { x: ctx.width / 2, y: -ctx.height / 2, z: 0 })).update(space.lights);\n if (spec.followFog) {\n if (space.fog && space.fog.amount !== 1) this._say('fogAmount', `followFog: the camera's fogAmount is ${space.fog.amount}, and PixiJS 3D's fog has no amount below 1: the layer uses the full amount (set fogColor to the colour you want at the far end, or leave followFog off and set view.fog yourself from ctx.space.fog)`);\n (this._fogMirror ??= new FogMirror(view)).update(space.fog);\n }\n }\n\n\n /** followCamera shows the whole composition through the layer's picture: a layer of another shape would show it squeezed or cut. Said once at build. */\n private _checkFollowShape(width: number, height: number): void {\n const p = this.parent;\n if (!p || !(p.width > 0 && p.height > 0)) return;\n if (Math.abs(width * p.height - height * p.width) <= 1e-3 * width * p.height) return;\n this._say('shape', `followCamera: the layer is ${width} x ${height} but the composition is ${p.width} x ${p.height}; the camera shows the whole composition, so the layer needs its aspect ratio (drop width / height to cover the composition)`);\n }\n\n /** PixiJS 3D draws the view in its materials' colours: a tint does nothing. Said once, at build. */\n private _checkTint(): void {\n const spec = this._spec as { initial?: Record<string, unknown>; keyframes?: Array<{ to?: Record<string, unknown>; from?: Record<string, unknown> }> };\n const uses = spec.initial?.tint !== undefined || (spec.keyframes ?? []).some(k => k?.to?.tint !== undefined || k?.from?.tint !== undefined);\n if (uses) this._say('tint', 'tint is ignored on a scene3d layer (PixiJS 3D draws its own colours): colour the materials, or put a filter on the layer');\n }\n\n /**\n * Every frame, before the draw: PixiJS 3D ignores the view's alpha (and its parents') and a basic blend mode, so when the layer is not at full strength or blends,\n * its picture goes through one AlphaFilter of the layer's own, last in its filter list, that applies them. A layer at alpha 1 with a normal blend has no such filter.\n */\n override syncFrame(): void {\n super.syncFrame();\n for (const h of this._shown) h.keepHidden(); // a 2D layer shown on a mesh stays off the stage (a tween of autoAlpha writes visible = true)\n const view = this._view;\n if (!view) return;\n let alpha = 1;\n for (let c: Container | null = view; c; c = c.parent) alpha *= c.alpha;\n const current = (view.filters ?? []) as readonly Filter[];\n const others = current.filter(f => f !== this._look && f !== (this._blend as unknown));\n // Where the blend goes (blend.ts put it on the view, or on the last of the layer's filters):\n // - filters of its own (the author's, a matte, an advanced blend appended to them): the blend sits on the last of them; the look filter goes FIRST and only fades.\n // - no filter, a basic mode: the view's own mode is ignored by PixiJS 3D, so the look filter carries it, as the only pass.\n // - no filter, an advanced mode: a blend filter of the layer's own ends the chain (the view's own mode would be shut inside the look filter's pass); the view stays normal.\n const authored = String((this.spec as { blendMode?: unknown }).blendMode ?? 'normal');\n if (others.length === 0 && isAdvancedBlend(authored) && !this._blend) {\n this._blend = blendFilterFor(authored);\n if (this._blend) view.blendMode = 'normal';\n }\n const mode = String(view.blendMode ?? 'normal');\n const basic = others.length === 0 && (mode === 'add' || mode === 'screen' || mode === 'multiply');\n const need = alpha < 1 || basic;\n const own = this._blend && others.length === 0 ? [this._blend as unknown as Filter] : [];\n let next: Filter[] = [...others, ...own];\n if (need) {\n const look = (this._look ??= new AlphaFilter({ alpha: 1 }));\n look.alpha = alpha;\n look.blendMode = (basic ? mode : 'normal') as AlphaFilter['blendMode'];\n next = others.length || own.length ? [look, ...others, ...own] : [look];\n }\n if (next.length !== current.length || next.some((f, k) => f !== current[k])) view.filters = next.length ? next : null;\n }\n\n /**\n * Models, animation players and particle systems update themselves on PixiJS's shared ticker unless told otherwise: their picture would follow the browser's clock,\n * not the video's time. Turn that off on everything under the root, and say once what was turned off (the author drives them from `update`).\n */\n private _stopSelfUpdating(root: Container3D): void {\n const stopped: string[] = [];\n const visit = (node: unknown): void => {\n const n = node as { label?: string; constructor?: { name?: string }; autoUpdate?: unknown; player?: ClipPlayer };\n let hit = false;\n if (n.player && Array.isArray(n.player.animationLabels) && !this._players.includes(n.player)) this._players.push(n.player);\n if (n.player && n.player.autoUpdate === true) { n.player.autoUpdate = false; hit = true; }\n if (n.autoUpdate === true) { n.autoUpdate = false; hit = true; }\n if (hit) stopped.push(n.label || n.constructor?.name || 'a node');\n };\n (root as unknown as { traverse(cb: (n: unknown) => void): void }).traverse(visit);\n if (stopped.length) {\n this._say('autoUpdate', `turned off autoUpdate on ${stopped.join(', ')}: a video draws from the time, so drive them from update(t) (a model's clip: model.player.getState(name).gotoAndStop(t))`);\n }\n }\n\n /**\n * Per-frame hook, duck-typed by `Movie._awaitVideoFrames` (as the video and three layers are): the single frame path of playback, seek and export.\n * `update` sets the scene from the time; PixiJS draws the view with the rest of the stage.\n */\n async awaitFrameAt(local: number): Promise<void> {\n if (!this._ctx || this._borrowed) return; // a layer waiting for the swap: the scene is still the old layer's\n const t = Math.max(0, Math.min(local, this.duration ?? local));\n this._time = t;\n this._pickStale = true;\n this._pinShaderTime();\n this._followSpace(t);\n const update = this._spec.update;\n if (update) {\n try {\n update(t, this._ctx);\n } catch (err) {\n this._say('update', `update threw (reported once): ${err instanceof Error ? err.message : String(err)}`);\n }\n }\n this._poseClips(t);\n for (const hook of this._drawHooks) hook(); // the 2D layers shown on meshes, drawn into their textures at this frame\n }\n\n /**\n * A clip still playing after `update` (a model made with `autoPlay`, a `player.play(name)` in setup) is posed by nobody: it would move with the ticker, or not at all.\n * The layer poses it from its own time (its speed and loop kept) and leaves it playing, so it plays in the video as it would in a page. A clip `update` poses itself\n * (`gotoAndStop(t)` stops it) is left alone. Nothing is remembered from one frame to the next: the frame depends on this frame's `update` only.\n */\n private _poseClips(t: number): void {\n for (const player of this._players) {\n for (const label of player.animationLabels) {\n const state = player.getState(label);\n if (!state.playing) continue;\n const length = state.animation.duration;\n const x = t * (state.animationSpeed ?? 1);\n state.gotoAndStop(length > 0 ? (state.loop ? ((x % length) + length) % length : Math.min(Math.max(x, 0), length)) : 0);\n state.play(); // still playing: posed again next frame (no ticker advances it)\n }\n }\n }\n\n\n /**\n * The determinism check (`check`, `movie.review()`): the scene set by `update` and drawn at a few moments in two orders, with one draw thrown away first, and the pictures\n * compared, as the canvas and three layers are. A scene whose same frame is not the same picture (state kept from call to call, a clock, a player or particle system on its\n * own clock, a motion blur that reads the last frame) is reported. It draws the view alone into a texture of its own size with PixiJS's renderer; the next real frame sets\n * the scene again, so nothing is left behind.\n */\n checkDeterminism(times: number[]): CanvasCheck {\n const none: CanvasCheck = { differs: [], drawMs: 0, threw: [] };\n const view = this._view, ctx = this._ctx;\n const renderer = this.root.pixiRenderer as Renderer | undefined;\n if (!view || !ctx || !renderer) return none;\n const w = Math.max(1, Math.ceil(ctx.width)), h = Math.max(1, Math.ceil(ctx.height));\n const rt = RenderTexture.create({ width: w, height: h });\n // PixiJS makes a container it renders on its own a render group (AbstractRenderer.render: enableRenderGroup); a view left as one loses its stencil mask\n // in the stage's later draws (found 2026-11-13: check's contact sheet showed a masked scene3d unmasked). Put it back as it was.\n const wasGroup = view.isRenderGroup;\n const at = new Matrix().translate(view.anchor.x * w, view.anchor.y * h); // the view alone, its top-left at the texture's\n const keep = w * h * 4 * times.length <= 96e6;\n const hash = (d: Uint8Array | Uint8ClampedArray): number => { let x = 0x811c9dc5; for (let i = 0; i < d.length; i++) { x ^= d[i]!; x = Math.imul(x, 0x01000193); } return x >>> 0; };\n const ms: number[] = [];\n const threw = new Set<number>();\n const update = this._spec.update;\n const once = (t: number, timed: boolean): Uint8Array | Uint8ClampedArray => {\n const from = performance.now();\n let pixels: Uint8Array | Uint8ClampedArray = new Uint8Array(0);\n try {\n this._time = t;\n this._followSpace(t);\n update?.(t, ctx);\n this._poseClips(t);\n renderer.render({ container: view, target: rt, clear: true, transform: at });\n pixels = renderer.extract.pixels(rt).pixels;\n } catch { threw.add(t); }\n if (timed) ms.push(performance.now() - from);\n return pixels;\n };\n try {\n for (const t of times) once(t, false); // the warm-up\n const first = times.map(t => { const d = once(t, true); return keep ? d.slice() : hash(d); });\n const second = [...times].reverse().map(t => once(t, false)).reverse();\n const differs: CanvasCheck['differs'] = [];\n times.forEach((t, i) => {\n const a = first[i]!, b = second[i]!;\n if (typeof a === 'number') { if (a !== hash(b)) differs.push({ t, pixels: -1, maxDiff: -1 }); return; }\n let pixels = 0, maxDiff = 0;\n for (let k = 0; k < a.length; k++) { const d = Math.abs(a[k]! - b[k]!); if (d) { pixels++; if (d > maxDiff) maxDiff = d; } }\n if (pixels) differs.push({ t, pixels, maxDiff });\n });\n ms.sort((x, y) => x - y);\n return { differs: differs.filter(d => !threw.has(d.t)), drawMs: ms.length ? ms[Math.floor(ms.length / 2)]! : 0, threw: times.filter(t => threw.has(t)) };\n } finally {\n rt.destroy(true);\n if (!wasGroup && view.isRenderGroup) view.disableRenderGroup();\n }\n }\n\n /** What `layerTexture` asks of this layer: the layers listed before it, PixiJS's renderer, and a place to hook in before every frame. */\n private _makeHost(renderer: Renderer | null): LayerTextureHost {\n return {\n findLayer: (name) => this.parent?.findLayer?.(name) ?? null,\n layerNames: () => this.parent?.layerNames?.() ?? [],\n pixiRenderer: renderer,\n beforeDraw: (fn) => { this._drawHooks.add(fn); return () => { this._drawHooks.delete(fn); }; },\n track: (handle) => { this._shown.push(handle); return () => { const i = this._shown.indexOf(handle); if (i >= 0) this._shown.splice(i, 1); }; },\n own: (free) => { this._owned.push(free); },\n };\n }\n\n /** True when this layer shows 2D layers on its meshes (`layerTexture`): the movie runs its frame after the rest of the frame is ready (projections, filters fed), as for a three layer. */\n get showsLayers(): boolean { return this._shown.length > 0; }\n\n /** The 2D layer that a material shows (`layerTexture`), for a click on the mesh to reach it (movie.pick); null for any other material. */\n screenOf(material: unknown): { source: Sequence; at(u: number, v: number): { x: number; y: number } } | null {\n const handle = this._shown.find((h) => h.material === material);\n return handle ? { source: handle.source(), at: (u, v) => handle.sourceAt(u, v) } : null;\n }\n\n /** The view's global point at (u, v) of its picture (0..1, v down). */\n private _globalAt(u: number, v: number): { x: number; y: number } | null {\n const view = this._view;\n if (!view) return null;\n const b = view.getLocalBounds();\n return view.toGlobal({ x: b.x + u * b.width, y: b.y + v * b.height });\n }\n\n /**\n * Make the scene's meshes hit by a ray, exactly: PixiJS 3D only hits nodes whose eventMode is not 'passive', and by default against the mesh's bounding box (a sphere's corners\n * count, and the hit has no uv). A mesh the author left as it was gets eventMode 'static' and hitVolume 'geometry' (per triangle: the silhouette, the normal and the uv a 2D\n * layer on the mesh needs); the author's own choice is kept.\n */\n private _makePickable(): void {\n if (!this._pickStale) return; // (a hover picks at every pointer move: one walk per frame is enough)\n this._pickStale = false;\n const root = this._view?.root as unknown as { traverse(cb: (n: unknown) => void): void } | undefined;\n root?.traverse((node) => {\n const n = node as { eventMode?: string; geometry?: unknown; hitVolume?: unknown };\n if (n.eventMode !== 'passive' || n.geometry === undefined) return;\n n.eventMode = 'static';\n if (n.hitVolume === undefined || n.hitVolume === null) n.hitVolume = 'geometry';\n });\n }\n\n /**\n * `movie.pick`: a ray through (u, v) of the layer's picture (0..1, v down) from the view's camera, and what it meets first: the object's name (its own label, or its nearest\n * labelled ancestor's), where (scene units), how far from the camera, and the node. Uses the transforms of the last render, which is the frame on screen. null when it meets nothing.\n */\n pickAt(u: number, v: number): { object: string; point: [number, number, number]; distance: number; object3d: unknown; uv?: { u: number; v: number }; material?: unknown } | null {\n const view = this._view;\n const at = this._globalAt(u, v);\n if (!view || !at) return null;\n this._makePickable();\n const hit = (view as unknown as { raycast(p: { x: number; y: number }): { target: unknown; point: { x: number; y: number; z: number }; distance: number; uv?: { x: number; y: number } | null } | null }).raycast(at);\n if (!hit) return null;\n let name = '';\n // a node made without a label carries its class name (PixiJS 3D's default: 'Mesh3D'): that is no name, the nearest ancestor's is\n for (let n = hit.target as { label?: string | null; parent?: unknown; constructor?: { name?: string } } | null; n && n !== (view.root as unknown); n = n.parent as typeof n) {\n if (n.label && n.label !== n.constructor?.name) { name = n.label; break; }\n }\n return {\n object: name, point: [hit.point.x, hit.point.y, hit.point.z], distance: hit.distance, object3d: hit.target,\n ...(hit.uv ? { uv: { u: hit.uv.x, v: hit.uv.y } } : {}), material: (hit.target as { material?: unknown }).material,\n };\n }\n\n /**\n * `hit.scene3d.grab(plane)`: a function of a point (u, v) of the layer's picture that gives where the pointer's ray meets a plane through the grabbed point, and how far that is\n * from it (`delta`): move the object by it. `plane`: 'screen' (facing the camera: the default), 'floor' (horizontal: y up), 'wall' (z constant), or a normal [x, y, z].\n * null where the ray never meets the plane.\n */\n dragPlane(point: [number, number, number], plane: 'screen' | 'floor' | 'wall' | [number, number, number] = 'screen'): (u: number, v: number) => { point: [number, number, number]; delta: [number, number, number] } | null {\n const view = this._view;\n const grabbed = new Vector3(...point);\n let normal: Vector3;\n if (plane === 'floor') normal = new Vector3(0, 1, 0);\n else if (plane === 'wall') normal = new Vector3(0, 0, 1);\n else if (Array.isArray(plane)) normal = new Vector3(...plane).normalize();\n else {\n const m = view?.camera.worldTransform.elements; // the camera looks down its -z: its z axis is the plane's normal\n normal = m ? new Vector3(m[8], m[9], m[10]).normalize() : new Vector3(0, 0, 1);\n }\n const surface = new Plane().setFromNormalAndCoplanarPoint(normal, grabbed);\n return (u, v) => {\n const at = this._globalAt(u, v);\n if (!view || !at) return null;\n const meet = view.screenToRay(at).intersectPlane(surface, new Vector3());\n if (!meet) return null;\n return { point: [meet.x, meet.y, meet.z], delta: [meet.x - grabbed.x, meet.y - grabbed.y, meet.z - grabbed.z] };\n };\n }\n\n private _resolvePath(path: string): { target: object; prop: string } | null {\n const segs = path.split('.');\n if (segs.length < 2) { this._warnPath(path, 'needs at least <object>.<prop>'); return null; }\n let obj: unknown = this._objects[segs[0]!];\n if (obj == null) {\n this._warnPath(path, `unknown object \"${segs[0]}\" (known: ${Object.keys(this._objects).join(', ')}): expose it in setup's { objects }`);\n return null;\n }\n for (let i = 1; i < segs.length - 1; i++) {\n obj = (obj as Record<string, unknown>)[segs[i]!];\n if (obj == null) { this._warnPath(path, `\"${segs[i]}\" is undefined along the path`); return null; }\n }\n const prop = segs[segs.length - 1]!;\n if (typeof obj !== 'object' || !(prop in (obj as object))) { this._warnPath(path, `no property \"${prop}\"`); return null; }\n return this._borrowed ? this._setupValues.view(obj as object, prop, () => this._borrowed !== null) : (this._setupValues.note(obj as object, prop), { target: obj as object, prop });\n }\n\n private _warnPath(path: string, why: string): void {\n this._say(`path:${path}`, `keyframe path scene3d.${path}: ${why}; skipped`);\n }\n\n private _destroyView(): void {\n const view = this._view;\n this._view = null;\n if (this.target === view) this.target = null;\n try { view?.destroy({ children: true }); } catch (err) { console.warn(`${this._who()}: destroying the view threw —`, err); }\n }\n\n override destroy(): void {\n const spec = this._spec;\n // another layer has this layer's scene (or this layer never took the one it borrowed): the scene, the 2D layers on meshes and the lights are not this layer's to let go\n const kept = this._donated || this._borrowed !== null;\n if (!kept) {\n if (this._ctx && spec.dispose) {\n try { spec.dispose(this._ctx); } catch (err) { console.warn(`${this._who()}: dispose() threw —`, err); }\n }\n for (const h of [...this._shown]) { try { h.dispose(); } catch { /* the 2D layer is gone with its tree */ } }\n this._drawHooks.clear();\n for (const free of this._owned.splice(0)) free();\n this._lightMirror?.dispose();\n }\n // a layer whose scene moved on keeps pointing at the shared list and set: a 2D layer's handle (made by this layer's host) removes itself from them when it is let go\n if (!kept) { this._shown = []; this._drawHooks = new Set(); this._owned = []; }\n this._pendingRebinds = [];\n this._borrowed = null;\n this._lightMirror = null;\n this._fogMirror = null;\n this._ctx = null;\n this._objects = {};\n this._players = [];\n this._destroyView(); // (a view whose scene moved on is empty)\n this._look?.destroy();\n this._look = null;\n this._blend?.destroy();\n this._blend = null;\n super.destroy();\n }\n\n}\n\n/** What the layer uses of a PixiJS 3D animation player (public API only). */\ninterface ClipState { readonly playing: boolean; readonly animation: { duration: number }; animationSpeed?: number; loop: boolean; gotoAndStop(time: number): unknown; play(): unknown }\ninterface ClipPlayer { autoUpdate?: unknown; readonly animationLabels: readonly string[]; getState(label: string): ClipState }\n\n/** A number for each function: two layers are the same layer only when their `setup` is the same function. */\nconst ids = new WeakMap<object, number>();\nlet lastId = 0;\nfunction idOf(fn: unknown): number {\n if (typeof fn !== 'function') return 0;\n let id = ids.get(fn);\n if (id === undefined) { id = ++lastId; ids.set(fn, id); }\n return id;\n}\n\n/**\n * The key a rebuild matches a scene3d layer by: its kind (so it can never equal a three layer's key in the shared pool), its name, its setup, its size and its options as JSON.\n * View options that cannot be written as JSON (a cycle) make the layer one that is built again; an object of a class (an effect in `passes`) is written as its own fields, so two\n * such options that differ only inside the class may count as the same.\n * @internal exported for its unit test\n */\nexport function reuseKeyOf(spec: Scene3DSequenceSpec, width: number, height: number): string | null {\n let view: string;\n try { view = JSON.stringify(spec.view ?? null) ?? 'null'; } catch { return null; }\n return JSON.stringify(['scene3d', spec.name, idOf(spec.setup), width, height, spec.resolution ?? 1, view, !!spec.followCamera, !!spec.followLights, !!spec.followFog]);\n}\n\nfunction resolveDim(v: PropValue | undefined, scope: Record<string, number>): number | undefined {\n if (v === undefined) return undefined;\n if (typeof v === 'number') return v;\n return evaluateExpr(v, scope);\n}\n","/**\n * `loadModel(url)` and `fitCamera(ctx, object)`: a glTF / GLB model in a scene3d layer, posed from the time; the camera where the whole model fits.\n */\nimport { Assets } from 'pixi.js';\nimport { Container3D, Matrix4, Model3D, Vector3 } from '@pixi/3d';\nimport type { Scene3DContext } from './types';\n\nexport interface LoadModelOptions {\n /** A clip name, a clip index, or `false` (no animation: the model's bind pose). Default: the first clip, if the file has one. */\n animation?: string | number | false;\n /** The clip time is `t x speed + offset` (the layer's seconds). Defaults 1 and 0. */\n speed?: number;\n offset?: number;\n /** `true` (default): the clip repeats; `false`: it holds its last pose. */\n loop?: boolean;\n}\n\nexport interface LoadedModel {\n /** Add this to `ctx.root`. A group whose origin is the centre of the model's bounding box (bind pose): position, turn and `fit` it about its centre. */\n object: Container3D;\n /** The PixiJS 3D model inside `object` (its `player`, `materials`, `skeletons`). */\n model: Model3D;\n /** The names of the clips the file has. */\n clips: string[];\n /** The size of the model's bounding box now (with `fit`), in the scene's units. */\n size(): { x: number; y: number; z: number };\n /** Scale `object` so the model's longest side is `n` (a model in metres in a scene in composition pixels: `fit(400)` under `followCamera`). */\n fit(n: number): void;\n /** Pose the model at the layer's time `t` (seconds): the clip at `t x speed + offset`, looped or held. A seek, an export and a repeat give the same pose. */\n pose(t: number): void;\n}\n\nconst label = 'pixi-effects: loadModel';\n\n/** Load a glTF / GLB (a URL relative to the page) as a PixiJS 3D model, ready to pose from the time. Call it in a scene3d layer's `setup` (await it). */\nexport async function loadModel(url: string, options: LoadModelOptions = {}): Promise<LoadedModel> {\n if (typeof url !== 'string' || !url) throw new Error(`${label}: the first argument is the model's URL: await loadModel('model.glb')`);\n const source = await Assets.load(url);\n const model = new Model3D({ source, autoUpdate: false, autoPlay: false } as ConstructorParameters<typeof Model3D>[0]);\n // a file with no animation has no player\n const player = model.player as unknown as { animationLabels: readonly string[]; getState(label: string): { animation: { duration: number }; gotoAndStop(t: number): unknown } } | undefined;\n const clips = player ? [...player.animationLabels] : [];\n const speed = options.speed ?? 1, offset = options.offset ?? 0, loop = options.loop !== false;\n let clip: string | null = null;\n if (options.animation === undefined) clip = clips[0] ?? null;\n else if (options.animation === false) clip = null;\n else if (typeof options.animation === 'number') {\n clip = clips[options.animation] ?? null;\n if (clip === null) throw new Error(`${label}: the model has no clip number ${options.animation} (it has ${clips.length}${clips.length ? `: ${clips.map((c) => `\"${c}\"`).join(', ')}` : ''})`);\n } else {\n if (!clips.includes(options.animation)) throw new Error(`${label}: the model has no clip \"${options.animation}\" (its clips: ${clips.length ? clips.map((c) => `\"${c}\"`).join(', ') : 'none'})`);\n clip = options.animation;\n }\n\n // the group's origin is the centre of the model's box (bind pose): the model sits at minus that centre inside it\n const object = new Container3D({ label: url.split('/').pop() ?? 'model' } as ConstructorParameters<typeof Container3D>[0]);\n object.addChild(model);\n const box = model.getLocalBounds();\n model.position.set(-(box.min.x + box.max.x) / 2, -(box.min.y + box.max.y) / 2, -(box.min.z + box.max.z) / 2);\n const base = { x: box.max.x - box.min.x, y: box.max.y - box.min.y, z: box.max.z - box.min.z };\n\n const state = clip !== null && player ? player.getState(clip) : null;\n const pose = (t: number): void => {\n if (!state) return;\n const length = state.animation.duration;\n const x = t * speed + offset;\n state.gotoAndStop(length > 0 ? (loop ? ((x % length) + length) % length : Math.min(Math.max(x, 0), length)) : 0);\n };\n pose(0);\n return {\n object, model, clips,\n size: () => ({ x: base.x * object.scale.x, y: base.y * object.scale.y, z: base.z * object.scale.z }),\n fit: (n: number) => {\n const longest = Math.max(base.x, base.y, base.z);\n if (!(n > 0) || !(longest > 0)) throw new Error(`${label}: fit(n) needs a size above 0 (got ${n}) and a model with a size (its box is ${base.x} x ${base.y} x ${base.z})`);\n const k = n / longest;\n object.scale.set(k, k, k);\n },\n pose,\n };\n}\n\nexport interface FitCameraOptions {\n /** The direction the camera sits in from the centre of the object, any length. Default `[0.45, 0.3, 1]`: a three-quarter view, a little from the side and above. */\n direction?: [number, number, number];\n /** Free room around the object: 1.1 (the default) leaves 10 %. */\n margin?: number;\n}\n\n/**\n * Put the layer's camera where the whole of `object` (its bounding box now, with its scale and place) fits the picture, looking at its centre: the smallest distance at which\n * the 8 corners of the box fit both the vertical and the horizontal field of view. Uses the camera's `fov` and the layer's shape; `near` and `far` follow the distance.\n * The box is the pose of now: for a clip that travels far, place the camera yourself.\n */\nexport function fitCamera(ctx: Scene3DContext, object: Container3D, options: FitCameraOptions = {}): void {\n const camera = ctx.camera;\n const box = object.getLocalBounds().applyMatrix4(object.getGlobalTransform(new Matrix4()));\n const centre = new Vector3((box.min.x + box.max.x) / 2, (box.min.y + box.max.y) / 2, (box.min.z + box.max.z) / 2);\n const margin = options.margin ?? 1.1;\n const [dx, dy, dz] = options.direction ?? [0.45, 0.3, 1];\n const toCamera = new Vector3(dx, dy, dz).normalize();\n const right = new Vector3(0, 1, 0).cross(toCamera);\n if (right.x * right.x + right.y * right.y + right.z * right.z < 1e-12) right.set(1, 0, 0);\n right.normalize();\n const up = toCamera.clone().cross(right);\n const tanV = Math.tan((camera.fov * Math.PI) / 360), tanH = tanV * (ctx.width / ctx.height);\n let distance = 1e-3;\n for (const x of [box.min.x, box.max.x]) for (const y of [box.min.y, box.max.y]) for (const z of [box.min.z, box.max.z]) {\n const r = new Vector3(x - centre.x, y - centre.y, z - centre.z);\n const along = r.dot(toCamera);\n distance = Math.max(distance, along + (Math.abs(r.dot(right)) * margin) / tanH, along + (Math.abs(r.dot(up)) * margin) / tanV);\n }\n camera.mode = 'perspective';\n camera.position.set(centre.x + toCamera.x * distance, centre.y + toCamera.y * distance, centre.z + toCamera.z * distance);\n camera.near = Math.max(distance / 100, 1e-4);\n camera.far = distance * 100;\n camera.lookAt(centre);\n}\n","/**\n * pixi-effects/3d — 3D scenes drawn by PixiJS 3D (`@pixi/3d`), the main 3D engine.\n *\n * Import this entry BEFORE `movie.init` and call `register3D()` once: PixiJS loads the 3D drawing code while its renderer starts, so a\n * renderer that started before `@pixi/3d` was imported cannot draw a `scene3d` layer. The core `pixi-effects` entry never loads `@pixi/3d`.\n */\nimport '@pixi/3d'; // the import registers the 3D backends with PixiJS (they load at app.init)\nimport { AnimationPlayer, Model3D } from '@pixi/3d';\nimport { VERSION } from 'pixi.js';\nimport { registerSequenceType, type SequenceCtor } from '../core/Composition';\nimport type { SequenceSpec } from '../types';\nimport { Scene3DSequence } from './Scene3DSequence';\nimport type { Scene3DSequenceSpec } from './types';\n\nexport { Scene3DSequence } from './Scene3DSequence';\nexport { layerTexture } from './layerTexture';\nexport { loadModel, fitCamera } from './gltf';\nexport type { LoadModelOptions, LoadedModel, FitCameraOptions } from './gltf';\nexport type { LayerTexture, LayerTextureOptions } from './layerTexture';\nexport type { Scene3DContext, Scene3DSetupResult, Scene3DSequenceSpec } from './types';\n\nlet saidVersion = false;\n\n/** PixiJS 3D needs pixi.js 8.23.0 or later. */\nfunction versionAtLeast(v: string, min: [number, number]): boolean {\n const [a, b] = v.split('.').map(Number);\n if (!Number.isFinite(a) || !Number.isFinite(b)) return true; // an unbuilt PixiJS (\"$_VERSION\"): nothing to say\n return a! > min[0] || (a === min[0] && b! >= min[1]);\n}\n\n/**\n * Register the `scene3d` layer type. Explicit call so `sideEffects: false` bundlers cannot drop it; calling it again is fine.\n * It also turns off the self-updating of models and animation players (they would move with the browser's clock, not the video's time):\n * pose a clip from the time in `update` with `model.player.getState(name).gotoAndStop(t)`.\n */\nexport function register3D(): void {\n if (!saidVersion && !versionAtLeast(String(VERSION), [8, 23])) {\n saidVersion = true;\n console.warn(`pixi-effects: PixiJS 3D needs pixi.js 8.23.0 or later (this page has ${VERSION}): put pixi.js@8.23.0 in the import map`);\n }\n (Model3D as unknown as { defaultOptions: { autoUpdate: boolean } }).defaultOptions.autoUpdate = false;\n (AnimationPlayer as unknown as { defaultOptions: { autoUpdate: boolean } }).defaultOptions.autoUpdate = false;\n registerSequenceType('scene3d', Scene3DSequence as unknown as SequenceCtor);\n}\n\n/** Typing helper: accepts a strongly-typed scene3d spec and returns it as a core SequenceSpec, keeping `@pixi/3d` types out of the core union. */\nexport function scene3d(spec: Scene3DSequenceSpec): SequenceSpec {\n return spec as unknown as SequenceSpec;\n}\n"]}
package/dist/3d.d.cts CHANGED
@@ -1,4 +1,4 @@
1
- import { b as SpaceNow, c as SequenceCommon, d as PropValue, e as Sequence, f as PathRouters, S as SequenceSpec } from './types-kt7DQKfO.cjs';
1
+ import { b as SpaceNow, c as SequenceCommon, d as PropValue, e as Sequence, f as PathRouters, S as SequenceSpec } from './types-BZngm4nT.cjs';
2
2
  import { Renderer, RenderTexture } from 'pixi.js';
3
3
  import { View3D, Container3D, Camera3D, View3DOptions, FlatMaterial, Model3D } from '@pixi/3d';
4
4
  import { C as CanvasCheck } from './Canvas-BfZkAFJm.cjs';
@@ -95,6 +95,8 @@ declare class Scene3DSequence extends Sequence {
95
95
  private _borrowed;
96
96
  /** True once another layer took this layer's scene: destroying this one must not let it go. */
97
97
  private _donated;
98
+ /** What setup left on the objects the keyframes reach, shared with a layer that takes the scene over (core/setupValues.ts). */
99
+ private _setupValues;
98
100
  private _pendingRebinds;
99
101
  private _lightMirror;
100
102
  private _fogMirror;
package/dist/3d.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { b as SpaceNow, c as SequenceCommon, d as PropValue, e as Sequence, f as PathRouters, S as SequenceSpec } from './types-kt7DQKfO.js';
1
+ import { b as SpaceNow, c as SequenceCommon, d as PropValue, e as Sequence, f as PathRouters, S as SequenceSpec } from './types-BZngm4nT.js';
2
2
  import { Renderer, RenderTexture } from 'pixi.js';
3
3
  import { View3D, Container3D, Camera3D, View3DOptions, FlatMaterial, Model3D } from '@pixi/3d';
4
4
  import { C as CanvasCheck } from './Canvas-BfZkAFJm.js';
@@ -95,6 +95,8 @@ declare class Scene3DSequence extends Sequence {
95
95
  private _borrowed;
96
96
  /** True once another layer took this layer's scene: destroying this one must not let it go. */
97
97
  private _donated;
98
+ /** What setup left on the objects the keyframes reach, shared with a layer that takes the scene over (core/setupValues.ts). */
99
+ private _setupValues;
98
100
  private _pendingRebinds;
99
101
  private _lightMirror;
100
102
  private _fogMirror;