pixi-effects 0.26.2 → 0.27.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.
- package/CHANGELOG.md +28 -0
- package/README.md +8 -10
- package/ai/CHAT.md +1 -1
- package/ai/chat-template.html +4 -6
- package/ai/tools/render.mjs +16 -11
- package/dist/{Base-CpdDs4HT.d.ts → Base-CVezIEdo.d.ts} +2 -4
- package/dist/{Base-TbBhHPrG.d.cts → Base-DzC3i919.d.cts} +2 -4
- package/dist/Composition-4TYDRRRY.js +7 -0
- package/dist/{Composition-H4QA24MV.js.map → Composition-4TYDRRRY.js.map} +1 -1
- package/dist/Composition-QCOWQSDB.cjs +16 -0
- package/dist/{Composition-HM4YT5L7.cjs.map → Composition-QCOWQSDB.cjs.map} +1 -1
- package/dist/Controller.d.cts +2 -3
- package/dist/Controller.d.ts +2 -3
- package/dist/{Movie-i05Oh9mJ.d.cts → Movie-CQ0Nz62a.d.cts} +12 -6
- package/dist/{Movie-DVeDTdnc.d.ts → Movie-M9dKm9dI.d.ts} +12 -6
- package/dist/Presenter.d.cts +2 -3
- package/dist/Presenter.d.ts +2 -3
- package/dist/{blendModes-YV43K6E7.cjs → blendModes-HDOP6R7T.cjs} +5 -5
- package/dist/{blendModes-YV43K6E7.cjs.map → blendModes-HDOP6R7T.cjs.map} +1 -1
- package/dist/{blendModes-G3NOAU3T.js → blendModes-PAVTW3BO.js} +4 -4
- package/dist/{blendModes-G3NOAU3T.js.map → blendModes-PAVTW3BO.js.map} +1 -1
- package/dist/{chunk-TLYTYBWX.js → chunk-45QKLD6M.js} +9 -11
- package/dist/chunk-45QKLD6M.js.map +1 -0
- package/dist/{chunk-GBUM7X2S.js → chunk-CKTS6G6I.js} +7 -11
- package/dist/chunk-CKTS6G6I.js.map +1 -0
- package/dist/{chunk-555URQHQ.cjs → chunk-NDR2VQFV.cjs} +91 -95
- package/dist/chunk-NDR2VQFV.cjs.map +1 -0
- package/dist/{chunk-3DLYAPK7.cjs → chunk-P4GY3Z4G.cjs} +5 -5
- package/dist/{chunk-3DLYAPK7.cjs.map → chunk-P4GY3Z4G.cjs.map} +1 -1
- package/dist/{chunk-WPXDRSGN.cjs → chunk-RQMI7EJT.cjs} +1170 -280
- package/dist/chunk-RQMI7EJT.cjs.map +1 -0
- package/dist/{chunk-X3HB4DSR.js → chunk-TGJACVLD.js} +1150 -263
- package/dist/chunk-TGJACVLD.js.map +1 -0
- package/dist/{chunk-AXZUKNXF.js → chunk-TYWFKCPY.js} +4 -4
- package/dist/{chunk-AXZUKNXF.js.map → chunk-TYWFKCPY.js.map} +1 -1
- package/dist/{chunk-ECA2WNRX.cjs → chunk-ZMAD3KJU.cjs} +9 -11
- package/dist/chunk-ZMAD3KJU.cjs.map +1 -0
- package/dist/index.cjs +189 -116
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +16 -14
- package/dist/index.d.ts +16 -14
- package/dist/index.js +136 -45
- package/dist/index.js.map +1 -1
- package/dist/loader.css +1 -1
- package/dist/three.cjs +6 -6
- package/dist/three.d.cts +2 -3
- package/dist/three.d.ts +2 -3
- package/dist/three.js +2 -2
- package/dist/{types-DSGwN5w1.d.ts → types-DUVefWiB.d.cts} +128 -3
- package/dist/{types-DSGwN5w1.d.cts → types-DUVefWiB.d.ts} +128 -3
- package/docs/api.md +16 -6
- package/docs/dsl.md +14 -14
- package/llms-full.txt +38 -28
- package/llms.txt +1 -1
- package/package.json +3 -4
- package/skills/pixi-effects/SKILL.md +1 -1
- package/skills/pixi-effects/reference/cheatsheet.md +3 -3
- package/skills/pixi-effects/reference/pitfalls.md +3 -3
- package/skills/pixi-effects/reference/recipes.md +1 -1
- package/skills/pixi-effects/template.html +6 -8
- package/dist/Composition-H4QA24MV.js +0 -7
- package/dist/Composition-HM4YT5L7.cjs +0 -16
- package/dist/chunk-555URQHQ.cjs.map +0 -1
- package/dist/chunk-ECA2WNRX.cjs.map +0 -1
- package/dist/chunk-GBUM7X2S.js.map +0 -1
- package/dist/chunk-TLYTYBWX.js.map +0 -1
- package/dist/chunk-WPXDRSGN.cjs.map +0 -1
- package/dist/chunk-X3HB4DSR.js.map +0 -1
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
4
|
-
var
|
|
5
|
-
var
|
|
3
|
+
var chunkRQMI7EJT_cjs = require('./chunk-RQMI7EJT.cjs');
|
|
4
|
+
var chunkP4GY3Z4G_cjs = require('./chunk-P4GY3Z4G.cjs');
|
|
5
|
+
var chunkZMAD3KJU_cjs = require('./chunk-ZMAD3KJU.cjs');
|
|
6
6
|
var chunkTWZNOUM7_cjs = require('./chunk-TWZNOUM7.cjs');
|
|
7
7
|
var pixi_js = require('pixi.js');
|
|
8
|
-
var gsap = require('gsap');
|
|
9
8
|
|
|
10
9
|
// src/space/lightChecks.ts
|
|
11
10
|
var SOFT_LIGHTS = 3;
|
|
@@ -34,10 +33,10 @@ var KIND_ALIASES = {
|
|
|
34
33
|
fill: "ambient"
|
|
35
34
|
};
|
|
36
35
|
function lightKindProblem(kind) {
|
|
37
|
-
if (kind === void 0 || typeof kind === "string" &&
|
|
38
|
-
const guess = typeof kind === "string" ? KIND_ALIASES[kind.toLowerCase()] ?? chunkTWZNOUM7_cjs.suggestName(kind,
|
|
36
|
+
if (kind === void 0 || typeof kind === "string" && chunkRQMI7EJT_cjs.LIGHT_KINDS.includes(kind)) return null;
|
|
37
|
+
const guess = typeof kind === "string" ? KIND_ALIASES[kind.toLowerCase()] ?? chunkTWZNOUM7_cjs.suggestName(kind, chunkRQMI7EJT_cjs.LIGHT_KINDS) : null;
|
|
39
38
|
const shown = typeof kind === "string" ? `"${kind}"` : String(kind);
|
|
40
|
-
return `kind ${shown} is not a light kind${guess ? `; did you mean "${guess}"?` : ""} (use ${
|
|
39
|
+
return `kind ${shown} is not a light kind${guess ? `; did you mean "${guess}"?` : ""} (use ${chunkRQMI7EJT_cjs.LIGHT_KINDS.join(", ")}); point is used`;
|
|
41
40
|
}
|
|
42
41
|
var LIGHT_ALIASES = {
|
|
43
42
|
pointOfInterest: 'did you mean "lookAtX / lookAtY / lookAtZ"?',
|
|
@@ -62,24 +61,24 @@ function lightLayerProblems(spec) {
|
|
|
62
61
|
const raw = spec;
|
|
63
62
|
const kind = lightKindProblem(raw.kind);
|
|
64
63
|
if (kind) out.push(kind);
|
|
65
|
-
if (raw.falloff !== void 0 && !
|
|
66
|
-
const guess = typeof raw.falloff === "string" ? chunkTWZNOUM7_cjs.suggestName(raw.falloff,
|
|
67
|
-
out.push(`falloff ${JSON.stringify(raw.falloff)} is not supported${guess ? `; did you mean "${guess}"?` : ""} (use ${
|
|
64
|
+
if (raw.falloff !== void 0 && !chunkRQMI7EJT_cjs.FALLOFFS.includes(raw.falloff)) {
|
|
65
|
+
const guess = typeof raw.falloff === "string" ? chunkTWZNOUM7_cjs.suggestName(raw.falloff, chunkRQMI7EJT_cjs.FALLOFFS) : null;
|
|
66
|
+
out.push(`falloff ${JSON.stringify(raw.falloff)} is not supported${guess ? `; did you mean "${guess}"?` : ""} (use ${chunkRQMI7EJT_cjs.FALLOFFS.join(", ")}); none is used`);
|
|
68
67
|
}
|
|
69
68
|
for (const k of Object.keys(raw)) {
|
|
70
|
-
if (
|
|
69
|
+
if (chunkRQMI7EJT_cjs.LIGHT_PROPS.includes(k) || k === "intensity" || k === "shadowDarkness" || k === "shadowDiffusion") {
|
|
71
70
|
out.push(`"${k}" must go inside initial / keyframes, not on the light itself`);
|
|
72
71
|
} else if (LIGHT_ALIASES[k]) out.push(`"${k}" is not a property \u2014 ${LIGHT_ALIASES[k]}`);
|
|
73
72
|
}
|
|
74
73
|
const explained = new Set(Object.keys(LIGHT_ALIASES));
|
|
75
|
-
for (const k of
|
|
74
|
+
for (const k of chunkZMAD3KJU_cjs.collectPropKeys(spec)) {
|
|
76
75
|
if (LIGHT_ALIASES[k]) out.push(`"${k}" is not a property \u2014 ${LIGHT_ALIASES[k]}`);
|
|
77
|
-
else if (!explained.has(k) && !
|
|
76
|
+
else if (!explained.has(k) && !chunkRQMI7EJT_cjs.LIGHT_PROPS.includes(k)) out.push(`"${k}" has no effect on a light (use ${chunkRQMI7EJT_cjs.LIGHT_PROPS.join(", ")})`);
|
|
78
77
|
}
|
|
79
78
|
if (numbersOf(spec, "coneFeather").some((v) => v > 1 || v < 0)) out.push("coneFeather is 0..1 (the soft part of the cone edge, as a fraction of the half angle); it is clamped");
|
|
80
79
|
const big = numbersOf(spec, "intensity").find((v) => v > 10);
|
|
81
80
|
if (big !== void 0) out.push(`intensity ${big} looks like a percentage: it is a multiplier (1 = full, 0.25 = a quarter); did you mean ${big / 100}?`);
|
|
82
|
-
const kindNow = typeof raw.kind === "string" &&
|
|
81
|
+
const kindNow = typeof raw.kind === "string" && chunkRQMI7EJT_cjs.LIGHT_KINDS.includes(raw.kind) ? raw.kind : "point";
|
|
83
82
|
const has = (...keys) => keys.filter((k) => bagsOf(spec).some((b) => b[k] !== void 0));
|
|
84
83
|
const falloffOn = raw.falloff === "smooth" || raw.falloff === "inverseSquare";
|
|
85
84
|
if (kindNow === "ambient" && raw.castsShadows) out.push("an ambient light has no direction, so it makes no shadow: castsShadows is ignored (put it on a point, spot or parallel light)");
|
|
@@ -107,17 +106,17 @@ function lightSetProblems(layers) {
|
|
|
107
106
|
out.push("there is no ambient light, so what no light reaches is black; add { type: 'light', kind: 'ambient', initial: { intensity: 0.25 } }");
|
|
108
107
|
}
|
|
109
108
|
const direct = lights.filter((l) => kindOf(l) !== "ambient");
|
|
110
|
-
if (direct.length >
|
|
111
|
-
const dropped = direct.slice(
|
|
112
|
-
out.push(`${direct.length} lights, but at most ${
|
|
109
|
+
if (direct.length > chunkRQMI7EJT_cjs.MAX_LIGHTS) {
|
|
110
|
+
const dropped = direct.slice(chunkRQMI7EJT_cjs.MAX_LIGHTS).map((l) => nameOf(l, layers.indexOf(l)));
|
|
111
|
+
out.push(`${direct.length} lights, but at most ${chunkRQMI7EJT_cjs.MAX_LIGHTS} are used (the first ${chunkRQMI7EJT_cjs.MAX_LIGHTS}, in layer order); ${dropped.join(", ")} and later are dropped. Use fewer lights`);
|
|
113
112
|
}
|
|
114
113
|
const lightsCast = lights.some((l) => kindOf(l) !== "ambient" && l.castsShadows);
|
|
115
114
|
const casters = layers.filter((l) => l.type !== "light" && l.castsShadows && l.threeD);
|
|
116
115
|
if (casters.length > 0 && !lightsCast) out.push(`${casters.length} layer${casters.length > 1 ? "s have" : " has"} castsShadows but no light has castsShadows: add castsShadows: true to the light that should make the shadows`);
|
|
117
116
|
if (lightsCast && casters.length === 0) out.push("a light has castsShadows but no layer has castsShadows: add castsShadows: true to the threeD layers that should cast a shadow");
|
|
118
|
-
if (lightsCast && casters.length >
|
|
119
|
-
const dropped = casters.slice(
|
|
120
|
-
out.push(`${casters.length} layers cast shadows, but a layer receives shadows from at most ${
|
|
117
|
+
if (lightsCast && casters.length > chunkRQMI7EJT_cjs.MAX_CASTERS) {
|
|
118
|
+
const dropped = casters.slice(chunkRQMI7EJT_cjs.MAX_CASTERS).map((c) => nameOf(c, layers.indexOf(c)));
|
|
119
|
+
out.push(`${casters.length} layers cast shadows, but a layer receives shadows from at most ${chunkRQMI7EJT_cjs.MAX_CASTERS} (the first ${chunkRQMI7EJT_cjs.MAX_CASTERS}, in layer order); ${dropped.join(", ")} and later cast none`);
|
|
121
120
|
}
|
|
122
121
|
const softLights = lights.filter((l) => l.castsShadows && numbersOf(l, "shadowDiffusion").some((v) => v > 0));
|
|
123
122
|
if (softLights.length >= SOFT_LIGHTS) {
|
|
@@ -302,9 +301,9 @@ var roundPixelsBit = {
|
|
|
302
301
|
name: "round-pixels-bit",
|
|
303
302
|
vertex: { header: `fn roundPixels(position: vec2<f32>, targetSize: vec2<f32>) -> vec2<f32> { return (floor(((position * 0.5 + 0.5) * targetSize) + 0.5) / targetSize) * 2.0 - 1.0; }` }
|
|
304
303
|
};
|
|
305
|
-
var ML =
|
|
306
|
-
var MC =
|
|
307
|
-
var TAPS =
|
|
304
|
+
var ML = chunkRQMI7EJT_cjs.MAX_LIGHTS;
|
|
305
|
+
var MC = chunkRQMI7EJT_cjs.MAX_CASTERS;
|
|
306
|
+
var TAPS = chunkRQMI7EJT_cjs.SHADOW_TAPS;
|
|
308
307
|
var SHADOW_KEYS = Array.from({ length: MC }, (_, j) => `uShadow${j}`);
|
|
309
308
|
var WGSL_SHADOW_DECLS = SHADOW_KEYS.map((k, j) => ` @group(2) @binding(${4 + j}) var ${k}: texture_2d<f32>;`).join("\n");
|
|
310
309
|
var WGSL_SHADOW_PICK = SHADOW_KEYS.map((k, j) => (j === 0 ? "" : "else ") + `if (j == ${j}) { a = textureSampleLevel(${k}, uSampler, uv, 0.0).a; }`).join(" ");
|
|
@@ -664,8 +663,8 @@ function readLayerTransform(target) {
|
|
|
664
663
|
x: c.x,
|
|
665
664
|
y: c.y,
|
|
666
665
|
z: c.z ?? 0,
|
|
667
|
-
rotationX: (c.rotationX ?? 0) *
|
|
668
|
-
rotationY: (c.rotationY ?? 0) *
|
|
666
|
+
rotationX: (c.rotationX ?? 0) * chunkRQMI7EJT_cjs.DEG,
|
|
667
|
+
rotationY: (c.rotationY ?? 0) * chunkRQMI7EJT_cjs.DEG,
|
|
669
668
|
rotationZ: c.rotation,
|
|
670
669
|
scaleX: c.scale.x,
|
|
671
670
|
scaleY: c.scale.y,
|
|
@@ -728,26 +727,26 @@ var Layer3D = class {
|
|
|
728
727
|
if (!(needW >= 1 && needH >= 1) || !Number.isFinite(bounds.x) || !Number.isFinite(bounds.y)) return this.hide();
|
|
729
728
|
const size = this.sizeFor(needW, needH);
|
|
730
729
|
const frame = { x: bounds.x - pad, y: bounds.y - pad, width: size.w, height: size.h };
|
|
731
|
-
const projected =
|
|
730
|
+
const projected = chunkRQMI7EJT_cjs.projectLayer(readLayerTransform(target), frame, basis);
|
|
732
731
|
this.depth = projected.depth;
|
|
733
732
|
{
|
|
734
733
|
const lt = readLayerTransform(target);
|
|
735
|
-
const o =
|
|
736
|
-
const pu =
|
|
737
|
-
const pv =
|
|
734
|
+
const o = chunkRQMI7EJT_cjs.layerToWorld(lt, frame.x, frame.y);
|
|
735
|
+
const pu = chunkRQMI7EJT_cjs.layerToWorld(lt, frame.x + frame.width, frame.y);
|
|
736
|
+
const pv = chunkRQMI7EJT_cjs.layerToWorld(lt, frame.x, frame.y + frame.height);
|
|
738
737
|
this.world = { o, u: { x: pu.x - o.x, y: pu.y - o.y, z: pu.z - o.z }, v: { x: pv.x - o.x, y: pv.y - o.y, z: pv.z - o.z } };
|
|
739
738
|
}
|
|
740
739
|
if (!projected.visible) {
|
|
741
740
|
if (!this.warnedBehind) {
|
|
742
741
|
this.warnedBehind = true;
|
|
743
742
|
if (this.seq.spec.hideBehindCamera) return this.hide();
|
|
744
|
-
if (projected.depth >
|
|
743
|
+
if (projected.depth > chunkRQMI7EJT_cjs.NEAR) {
|
|
745
744
|
console.warn(
|
|
746
|
-
`pixi-effects: ${
|
|
745
|
+
`pixi-effects: ${chunkZMAD3KJU_cjs.describeLayer(this.seq.spec)}: part of it (a corner) reaches the camera plane (z = ${(target.z ?? 0).toFixed(0)}, rotationX ${(target.rotationX ?? 0).toFixed(0)}\xB0, rotationY ${(target.rotationY ?? 0).toFixed(0)}\xB0), and a layer is hidden whole when any corner is at or behind it. Tilt it less (rotationX / rotationY), make it smaller, or keep the camera further away from it (the default camera sits at z = (height/2)/tan(fov/2), about 989 for 720p at fov 40).`
|
|
747
746
|
);
|
|
748
747
|
} else {
|
|
749
748
|
console.warn(
|
|
750
|
-
`pixi-effects: ${
|
|
749
|
+
`pixi-effects: ${chunkZMAD3KJU_cjs.describeLayer(this.seq.spec)} is at or behind the camera plane (z = ${(target.z ?? 0).toFixed(0)}) and is hidden. If that is unintended, lower its z or move the camera back (the default camera sits at z = (height/2)/tan(fov/2), about 989 for 720p at fov 40).`
|
|
751
750
|
);
|
|
752
751
|
}
|
|
753
752
|
}
|
|
@@ -772,7 +771,7 @@ var Layer3D = class {
|
|
|
772
771
|
*/
|
|
773
772
|
setBlur(radius) {
|
|
774
773
|
const d = this.display;
|
|
775
|
-
const r = radius >
|
|
774
|
+
const r = radius > chunkRQMI7EJT_cjs.MIN_BLUR ? Math.min(radius, chunkRQMI7EJT_cjs.MAX_BLUR) : 0;
|
|
776
775
|
this.blur = r;
|
|
777
776
|
if (r === 0) {
|
|
778
777
|
if (this.blurFilter) {
|
|
@@ -789,8 +788,8 @@ var Layer3D = class {
|
|
|
789
788
|
this.blurFilter = new DiscBlurFilter(r);
|
|
790
789
|
this.blendWas = d.blendMode ?? "normal";
|
|
791
790
|
const chain = [this.blurFilter];
|
|
792
|
-
if (
|
|
793
|
-
this.blendFilter =
|
|
791
|
+
if (chunkP4GY3Z4G_cjs.isAdvancedBlend(this.blendWas)) {
|
|
792
|
+
this.blendFilter = chunkP4GY3Z4G_cjs.blendFilterFor(this.blendWas);
|
|
794
793
|
if (this.blendFilter) {
|
|
795
794
|
chain.push(this.blendFilter);
|
|
796
795
|
d.blendMode = "normal";
|
|
@@ -814,7 +813,7 @@ var Layer3D = class {
|
|
|
814
813
|
} catch (err) {
|
|
815
814
|
if (!this.warnedLit) {
|
|
816
815
|
this.warnedLit = true;
|
|
817
|
-
console.warn(`pixi-effects: ${
|
|
816
|
+
console.warn(`pixi-effects: ${chunkZMAD3KJU_cjs.describeLayer(this.seq.spec)}: the lighting shader could not be made on this renderer (${err?.message ?? err}); the layer is drawn unlit`);
|
|
818
817
|
}
|
|
819
818
|
return null;
|
|
820
819
|
}
|
|
@@ -908,8 +907,8 @@ var NEEDS_THREE_D = ["z", "rotationX", "rotationY"];
|
|
|
908
907
|
var CAMERA_ONLY = ["focus", "aperture", "fogNear", "fogFar", "fogColor", "fogAmount"];
|
|
909
908
|
var SKEW_KEYS = ["skew", "skewX", "skewY"];
|
|
910
909
|
function lintSequence(spec, warn = defaultWarn) {
|
|
911
|
-
const who =
|
|
912
|
-
const keys =
|
|
910
|
+
const who = chunkZMAD3KJU_cjs.describeLayer(spec);
|
|
911
|
+
const keys = chunkZMAD3KJU_cjs.collectPropKeys(spec);
|
|
913
912
|
const explained = /* @__PURE__ */ new Set();
|
|
914
913
|
for (const k of keys) {
|
|
915
914
|
const hint = LAYER_ALIASES[k] ?? (spec.type === "camera" ? CAMERA_ALIASES[k] : void 0);
|
|
@@ -958,8 +957,8 @@ function lintSequence(spec, warn = defaultWarn) {
|
|
|
958
957
|
}
|
|
959
958
|
function lintFocus(camera, siblings, warn = defaultWarn) {
|
|
960
959
|
if (camera.type !== "camera") return;
|
|
961
|
-
const who =
|
|
962
|
-
for (const p of
|
|
960
|
+
const who = chunkZMAD3KJU_cjs.describeLayer(camera);
|
|
961
|
+
for (const p of chunkRQMI7EJT_cjs.focusProblems(camera, siblings)) {
|
|
963
962
|
if (p.kind === "missing") {
|
|
964
963
|
warn(`pixi-effects: ${who}: focus: no layer named "${p.name}"${p.hint ? `; did you mean "${p.hint}"?` : ""} (the z = 0 plane is used). Write a threeD layer's name or a z number`);
|
|
965
964
|
} else if (p.kind === "not-threeD") {
|
|
@@ -1242,7 +1241,7 @@ var MatteSet = class {
|
|
|
1242
1241
|
};
|
|
1243
1242
|
|
|
1244
1243
|
// src/sequences/Composition.ts
|
|
1245
|
-
var CompositionSequence = class extends
|
|
1244
|
+
var CompositionSequence = class extends chunkRQMI7EJT_cjs.Sequence {
|
|
1246
1245
|
_innerContainer = null;
|
|
1247
1246
|
_compositionShape = null;
|
|
1248
1247
|
_children = [];
|
|
@@ -1309,26 +1308,26 @@ var CompositionSequence = class extends chunkWPXDRSGN_cjs.Sequence {
|
|
|
1309
1308
|
this.intrinsicWidth = width;
|
|
1310
1309
|
this.intrinsicHeight = height;
|
|
1311
1310
|
this._innerContainer = inner;
|
|
1312
|
-
const base =
|
|
1313
|
-
const span = base ?
|
|
1314
|
-
this._remap = base ?
|
|
1311
|
+
const base = chunkRQMI7EJT_cjs.timeRemapOf(this.spec);
|
|
1312
|
+
const span = base ? chunkRQMI7EJT_cjs.contentLength(base, this.duration) : this.duration;
|
|
1313
|
+
this._remap = base ? chunkRQMI7EJT_cjs.remapOf(this.spec, "time", span) : null;
|
|
1315
1314
|
this._contentSpan = span;
|
|
1316
1315
|
this._compositionShape = { width, height, duration: span };
|
|
1317
1316
|
const lateKeyframes = [];
|
|
1318
1317
|
for (const s of this.spec.sequences ?? []) {
|
|
1319
1318
|
lintSequence(s);
|
|
1320
1319
|
lintFocus(s, this.spec.sequences ?? []);
|
|
1321
|
-
for (const message of matteProblems(s, this.spec.sequences ?? [], span)) console.warn(`pixi-effects: ${
|
|
1322
|
-
|
|
1323
|
-
|
|
1324
|
-
|
|
1320
|
+
for (const message of matteProblems(s, this.spec.sequences ?? [], span)) console.warn(`pixi-effects: ${chunkZMAD3KJU_cjs.describeLayer(s)}: ${message}`);
|
|
1321
|
+
chunkZMAD3KJU_cjs.lintTiming(s, span, (message, kind) => kind === "late-keyframe" ? lateKeyframes.push(message) : console.warn(message));
|
|
1322
|
+
chunkZMAD3KJU_cjs.lintText(s);
|
|
1323
|
+
chunkZMAD3KJU_cjs.lintKeys(s);
|
|
1325
1324
|
}
|
|
1326
|
-
for (const message of
|
|
1327
|
-
const crowd =
|
|
1328
|
-
if (crowd >=
|
|
1329
|
-
console.warn(`pixi-effects: ${
|
|
1325
|
+
for (const message of chunkZMAD3KJU_cjs.summarizeWarnings(lateKeyframes)) console.warn(message);
|
|
1326
|
+
const crowd = chunkP4GY3Z4G_cjs.maxConcurrentAdvanced(this.spec.sequences ?? [], span);
|
|
1327
|
+
if (crowd >= chunkP4GY3Z4G_cjs.MANY_ADVANCED) {
|
|
1328
|
+
console.warn(`pixi-effects: ${chunkZMAD3KJU_cjs.describeLayer(this.spec)}: ${crowd} layers with an advanced blendMode are on screen at once (a composition with one counts each layer inside it, since its children blend one by one); each is a full-frame pass (about 2 ms on WebGL). Put fewer layers in the blend (or draw the glow as one layer), or use add / screen / multiply`);
|
|
1330
1329
|
}
|
|
1331
|
-
this._children = await
|
|
1330
|
+
this._children = await chunkRQMI7EJT_cjs.buildSequenceTree(
|
|
1332
1331
|
this.spec.sequences ?? [],
|
|
1333
1332
|
this._compositionShape,
|
|
1334
1333
|
this.root
|
|
@@ -1339,22 +1338,22 @@ var CompositionSequence = class extends chunkWPXDRSGN_cjs.Sequence {
|
|
|
1339
1338
|
if (matteNames.size > 0) {
|
|
1340
1339
|
this._mattes = new MatteSet(inner, width, height);
|
|
1341
1340
|
for (const name of matteNames) {
|
|
1342
|
-
const source = this._children.find((c) => c.spec.name === name && !(c instanceof
|
|
1341
|
+
const source = this._children.find((c) => c.spec.name === name && !(c instanceof chunkRQMI7EJT_cjs.CameraSequence));
|
|
1343
1342
|
if (!source || !source.target || !canBeMatte(source.spec)) continue;
|
|
1344
1343
|
const chain = [];
|
|
1345
1344
|
for (let p = this._parentOf.get(source); p; p = this._parentOf.get(p)) chain.push(p);
|
|
1346
1345
|
this._mattes.add(name, source, chain);
|
|
1347
1346
|
}
|
|
1348
1347
|
}
|
|
1349
|
-
if (this._children.some((c) => c instanceof
|
|
1350
|
-
for (const message of lightSetProblems(this.spec.sequences ?? [])) console.warn(`pixi-effects: ${
|
|
1348
|
+
if (this._children.some((c) => c instanceof chunkRQMI7EJT_cjs.LightSequence)) {
|
|
1349
|
+
for (const message of lightSetProblems(this.spec.sequences ?? [])) console.warn(`pixi-effects: ${chunkZMAD3KJU_cjs.describeLayer(this.spec)}: ${message}`);
|
|
1351
1350
|
}
|
|
1352
1351
|
const layerNames = new Set(this._children.map((c) => c.spec.name).filter((n) => !!n));
|
|
1353
1352
|
for (const cam of this._children) {
|
|
1354
|
-
if (!(cam instanceof
|
|
1353
|
+
if (!(cam instanceof chunkRQMI7EJT_cjs.CameraSequence)) continue;
|
|
1355
1354
|
cam.resolveFocusNames((name) => {
|
|
1356
1355
|
const hit = this._children.find((c) => c.spec.name === name && c.spec.threeD);
|
|
1357
|
-
return hit ?
|
|
1356
|
+
return hit ? chunkRQMI7EJT_cjs.layerInitialZ(hit.spec, hit.scope()) : void 0;
|
|
1358
1357
|
}, layerNames);
|
|
1359
1358
|
}
|
|
1360
1359
|
const blendSaid = /* @__PURE__ */ new Map();
|
|
@@ -1364,11 +1363,11 @@ var CompositionSequence = class extends chunkWPXDRSGN_cjs.Sequence {
|
|
|
1364
1363
|
else blendSaid.set(message, { spec, n: 1 });
|
|
1365
1364
|
};
|
|
1366
1365
|
for (const child of this._children) {
|
|
1367
|
-
if (child instanceof
|
|
1366
|
+
if (child instanceof chunkRQMI7EJT_cjs.CameraSequence) {
|
|
1368
1367
|
this._cameras.push(child);
|
|
1369
1368
|
continue;
|
|
1370
1369
|
}
|
|
1371
|
-
if (child instanceof
|
|
1370
|
+
if (child instanceof chunkRQMI7EJT_cjs.LightSequence) {
|
|
1372
1371
|
this._lights.push(child);
|
|
1373
1372
|
continue;
|
|
1374
1373
|
}
|
|
@@ -1382,10 +1381,10 @@ var CompositionSequence = class extends chunkWPXDRSGN_cjs.Sequence {
|
|
|
1382
1381
|
inner.addChild(layer.display);
|
|
1383
1382
|
this._layers3d.push(layer);
|
|
1384
1383
|
this._visual.push({ seq: child, layer });
|
|
1385
|
-
const added3d =
|
|
1384
|
+
const added3d = chunkP4GY3Z4G_cjs.applyBlendMode(child.spec, layer.display, report);
|
|
1386
1385
|
if (added3d) this._blendOwned.push(added3d);
|
|
1387
1386
|
if (maskSrc.kind !== "none") {
|
|
1388
|
-
console.warn(`pixi-effects: ${
|
|
1387
|
+
console.warn(`pixi-effects: ${chunkZMAD3KJU_cjs.describeLayer(child.spec)}: mask is not supported on threeD layers yet; ignored`);
|
|
1389
1388
|
}
|
|
1390
1389
|
continue;
|
|
1391
1390
|
}
|
|
@@ -1402,7 +1401,7 @@ var CompositionSequence = class extends chunkWPXDRSGN_cjs.Sequence {
|
|
|
1402
1401
|
if (maskSrc.kind === "inline") {
|
|
1403
1402
|
const maskSpec = maskSrc.spec;
|
|
1404
1403
|
const lifetime = maskSpec.at === void 0 ? { at: child.at, duration: maskSpec.duration ?? child.duration } : {};
|
|
1405
|
-
const built = await
|
|
1404
|
+
const built = await chunkRQMI7EJT_cjs.buildSequenceTree([{ ...maskSpec, ...lifetime }], this._compositionShape, this.root);
|
|
1406
1405
|
const maskSeq = built[0];
|
|
1407
1406
|
if (maskSeq?.target) {
|
|
1408
1407
|
child.maskSequence = maskSeq;
|
|
@@ -1427,14 +1426,14 @@ var CompositionSequence = class extends chunkWPXDRSGN_cjs.Sequence {
|
|
|
1427
1426
|
t.filters = [...Array.isArray(t.filters) ? t.filters : [], ...matteFilters];
|
|
1428
1427
|
this._blendOwned.push(...matteFilters);
|
|
1429
1428
|
}
|
|
1430
|
-
const added =
|
|
1429
|
+
const added = chunkP4GY3Z4G_cjs.applyBlendMode(child.spec, child.target, report);
|
|
1431
1430
|
if (added) this._blendOwned.push(added);
|
|
1432
1431
|
}
|
|
1433
1432
|
if (this._mattes && this._mattes.size > MANY_MATTES) {
|
|
1434
|
-
console.warn(`pixi-effects: ${
|
|
1433
|
+
console.warn(`pixi-effects: ${chunkZMAD3KJU_cjs.describeLayer(this.spec)}: ${this._mattes.size} mattes: each is a ${width}\xD7${height} texture (about ${Math.round(width * height * 4 / 1048576)} MiB, more with anti-aliasing). Share one matte between layers, or use fewer`);
|
|
1435
1434
|
}
|
|
1436
1435
|
for (const [message, seen] of blendSaid) {
|
|
1437
|
-
console.warn(`pixi-effects: ${
|
|
1436
|
+
console.warn(`pixi-effects: ${chunkZMAD3KJU_cjs.describeLayer(seen.spec)}: ${message}${seen.n > 1 ? ` (and ${seen.n - 1} more layers have the same mistake)` : ""}`);
|
|
1438
1437
|
}
|
|
1439
1438
|
if (this._layers3d.length > 0) {
|
|
1440
1439
|
inner.sortableChildren = true;
|
|
@@ -1445,7 +1444,7 @@ var CompositionSequence = class extends chunkWPXDRSGN_cjs.Sequence {
|
|
|
1445
1444
|
console.warn("pixi-effects: camera has no effect: this composition has no threeD layers");
|
|
1446
1445
|
}
|
|
1447
1446
|
if (this._layers3d.length === 0 && this._lights.length > 0) {
|
|
1448
|
-
console.warn(`pixi-effects: ${
|
|
1447
|
+
console.warn(`pixi-effects: ${chunkZMAD3KJU_cjs.describeLayer(this.spec)}: a light has no effect: this composition has no threeD layers (a light lights only the threeD layers of its own composition, not those of the compositions nested in it: put the light inside the composition that holds them)`);
|
|
1449
1448
|
}
|
|
1450
1449
|
this.buildFilters();
|
|
1451
1450
|
}
|
|
@@ -1458,9 +1457,9 @@ var CompositionSequence = class extends chunkWPXDRSGN_cjs.Sequence {
|
|
|
1458
1457
|
const remap = this._remap;
|
|
1459
1458
|
const childOffset = remap ? 0 : offset + this.at;
|
|
1460
1459
|
this._childBase = childOffset;
|
|
1461
|
-
const target = remap ?
|
|
1460
|
+
const target = remap ? chunkRQMI7EJT_cjs.createTimeline({ paused: true, defaults: { ease: "none" } }) : timeline;
|
|
1462
1461
|
for (const child of this._children) {
|
|
1463
|
-
const own =
|
|
1462
|
+
const own = chunkRQMI7EJT_cjs.createTimeline({ defaults: { ease: "none" } });
|
|
1464
1463
|
child.bindTimeline(own, childOffset);
|
|
1465
1464
|
child.maskSequence?.bindTimeline(own, childOffset);
|
|
1466
1465
|
target.add(own, 0);
|
|
@@ -1490,11 +1489,8 @@ var CompositionSequence = class extends chunkWPXDRSGN_cjs.Sequence {
|
|
|
1490
1489
|
this._clock = clock;
|
|
1491
1490
|
const scope = this.scope();
|
|
1492
1491
|
if (remap.start !== void 0 && remap.timeKfs.length === 0) clock.time = remap.start;
|
|
1493
|
-
|
|
1494
|
-
|
|
1495
|
-
inner.time(0);
|
|
1496
|
-
last = NaN;
|
|
1497
|
-
this._warnUnreachable(chunkWPXDRSGN_cjs.clockTable(remap, "time", this.duration, offset + this.at, scope, offset + this.at + this.duration), offset + this.at, offset + this.at + this.duration);
|
|
1492
|
+
chunkRQMI7EJT_cjs.bindClock(timeline, clock, "time", remap, this.duration, offset + this.at, scope);
|
|
1493
|
+
this._warnUnreachable(chunkRQMI7EJT_cjs.clockTable(remap, "time", this.duration, offset + this.at, scope, offset + this.at + this.duration), offset + this.at, offset + this.at + this.duration);
|
|
1498
1494
|
}
|
|
1499
1495
|
/**
|
|
1500
1496
|
* A child the clock never dwells in is never visible: say so. Its `at` is in THIS composition's local time, so the usual mistake is
|
|
@@ -1518,7 +1514,7 @@ var CompositionSequence = class extends chunkWPXDRSGN_cjs.Sequence {
|
|
|
1518
1514
|
}
|
|
1519
1515
|
if (dwell >= 2) continue;
|
|
1520
1516
|
console.warn(
|
|
1521
|
-
`pixi-effects: ${
|
|
1517
|
+
`pixi-effects: ${chunkZMAD3KJU_cjs.describeLayer(child.spec)} starts at ${at}s of ${chunkZMAD3KJU_cjs.describeLayer(this.spec)}'s own time, but its clock only reaches ${Number(table.min.toFixed(3))}\u2013${Number(table.max.toFixed(3))}s (${how}), so it is never visible. Layers inside a remapped composition are placed in that composition's local time.`
|
|
1522
1518
|
);
|
|
1523
1519
|
}
|
|
1524
1520
|
}
|
|
@@ -1532,7 +1528,7 @@ var CompositionSequence = class extends chunkWPXDRSGN_cjs.Sequence {
|
|
|
1532
1528
|
for (let p = this._parentOf.get(seq); p; p = this._parentOf.get(p)) out.push(p);
|
|
1533
1529
|
return out;
|
|
1534
1530
|
};
|
|
1535
|
-
return [...this._visual.map((v) => v.seq), ...this._nested].filter((seq) => !(seq instanceof
|
|
1531
|
+
return [...this._visual.map((v) => v.seq), ...this._nested].filter((seq) => !(seq instanceof chunkRQMI7EJT_cjs.NullSequence)).map((seq) => {
|
|
1536
1532
|
const layer = this._visual.find((v) => v.seq === seq)?.layer ?? null;
|
|
1537
1533
|
return {
|
|
1538
1534
|
seq,
|
|
@@ -1541,24 +1537,24 @@ var CompositionSequence = class extends chunkWPXDRSGN_cjs.Sequence {
|
|
|
1541
1537
|
carriers: carriersOf(seq),
|
|
1542
1538
|
depthBlur: layer?.blur ?? 0,
|
|
1543
1539
|
// how lit it is (threeD layers that receive the lights of the last frame only); computed here, not per frame
|
|
1544
|
-
light: layer && this._lighting && layer.world && layer.spec.lit !== false ?
|
|
1540
|
+
light: layer && this._lighting && layer.world && layer.spec.lit !== false ? chunkRQMI7EJT_cjs.lightLevel(layer.world, this._lighting.cam, this._lighting.states) : void 0
|
|
1545
1541
|
};
|
|
1546
1542
|
});
|
|
1547
1543
|
}
|
|
1548
1544
|
/** Match every `parent: 'name'` to a null layer; anything that cannot work is said out loud and drawn unparented. */
|
|
1549
1545
|
_resolveParents() {
|
|
1550
|
-
const nulls = this._children.filter((c) => c instanceof
|
|
1546
|
+
const nulls = this._children.filter((c) => c instanceof chunkRQMI7EJT_cjs.NullSequence);
|
|
1551
1547
|
const nullNames = nulls.map((n) => n.spec.name).filter((n) => !!n);
|
|
1552
1548
|
const warned = /* @__PURE__ */ new Set();
|
|
1553
1549
|
for (const child of this._children) {
|
|
1554
1550
|
const want = child.spec.parent;
|
|
1555
1551
|
if (want === void 0) continue;
|
|
1556
|
-
const who =
|
|
1557
|
-
if (child instanceof
|
|
1552
|
+
const who = chunkZMAD3KJU_cjs.describeLayer(child.spec);
|
|
1553
|
+
if (child instanceof chunkRQMI7EJT_cjs.CameraSequence) {
|
|
1558
1554
|
console.warn(`pixi-effects: ${who}: a camera cannot have a parent; ignored`);
|
|
1559
1555
|
continue;
|
|
1560
1556
|
}
|
|
1561
|
-
if (child instanceof
|
|
1557
|
+
if (child instanceof chunkRQMI7EJT_cjs.LightSequence) {
|
|
1562
1558
|
console.warn(`pixi-effects: ${who}: a light cannot have a parent (parent "${want}" ignored: move the light with its own x / y / z keyframes)`);
|
|
1563
1559
|
continue;
|
|
1564
1560
|
}
|
|
@@ -1572,7 +1568,7 @@ var CompositionSequence = class extends chunkWPXDRSGN_cjs.Sequence {
|
|
|
1572
1568
|
console.warn(`pixi-effects: ${who}: parent "${want}": no layer with that name${hint ? `; did you mean "${hint}"?` : ""} (the layer is drawn without a parent)`);
|
|
1573
1569
|
continue;
|
|
1574
1570
|
}
|
|
1575
|
-
const holder = same.find((c) => c instanceof
|
|
1571
|
+
const holder = same.find((c) => c instanceof chunkRQMI7EJT_cjs.NullSequence);
|
|
1576
1572
|
if (!holder) {
|
|
1577
1573
|
console.warn(`pixi-effects: ${who}: parent "${want}" is a ${same[0].spec.type} layer; only { type: 'null' } layers can be parents (the layer is drawn without a parent)`);
|
|
1578
1574
|
continue;
|
|
@@ -1617,8 +1613,8 @@ var CompositionSequence = class extends chunkWPXDRSGN_cjs.Sequence {
|
|
|
1617
1613
|
childT,
|
|
1618
1614
|
compEnd
|
|
1619
1615
|
);
|
|
1620
|
-
const cam = active ? active.cam.state() :
|
|
1621
|
-
const basis =
|
|
1616
|
+
const cam = active ? active.cam.state() : chunkRQMI7EJT_cjs.homeCamera(width, height);
|
|
1617
|
+
const basis = chunkRQMI7EJT_cjs.cameraBasis(cam, width, height);
|
|
1622
1618
|
for (const layer of this._layers3d) layer.update(host, basis);
|
|
1623
1619
|
this._applyLighting(childT, compEnd, basis, active?.cam ?? null);
|
|
1624
1620
|
this._applyDepthOfField(cam, basis);
|
|
@@ -1643,7 +1639,7 @@ var CompositionSequence = class extends chunkWPXDRSGN_cjs.Sequence {
|
|
|
1643
1639
|
return t >= w.start && (t < w.end || w.end >= compEnd && t <= w.end);
|
|
1644
1640
|
});
|
|
1645
1641
|
const states = live.map((l) => l.state());
|
|
1646
|
-
const packed = states.length > 0 ?
|
|
1642
|
+
const packed = states.length > 0 ? chunkRQMI7EJT_cjs.packLights(states) : null;
|
|
1647
1643
|
this._lighting = states.length > 0 ? { states, cam: { x: basis.cx, y: basis.cy, z: basis.cz } } : null;
|
|
1648
1644
|
const shadowing = states.some((s) => s.castsShadows);
|
|
1649
1645
|
const casters = shadowing ? this._layers3d.filter((l) => l.spec.castsShadows && l.display.visible && l.world && l.source) : [];
|
|
@@ -1652,7 +1648,7 @@ var CompositionSequence = class extends chunkWPXDRSGN_cjs.Sequence {
|
|
|
1652
1648
|
const mat = l.setLit(true);
|
|
1653
1649
|
if (!mat || !l.world) continue;
|
|
1654
1650
|
const lit = l.spec.lit !== false;
|
|
1655
|
-
const mine = lit ? casters.filter((c) => c !== l).slice(0,
|
|
1651
|
+
const mine = lit ? casters.filter((c) => c !== l).slice(0, chunkRQMI7EJT_cjs.MAX_CASTERS).map((c) => ({ frame: c.world, source: c.source })) : [];
|
|
1656
1652
|
mat.update(l.world, camInfo, lit ? packed : null, fog, mine);
|
|
1657
1653
|
}
|
|
1658
1654
|
}
|
|
@@ -1663,23 +1659,23 @@ var CompositionSequence = class extends chunkWPXDRSGN_cjs.Sequence {
|
|
|
1663
1659
|
for (const l of this._layers3d) l.setBlur(0);
|
|
1664
1660
|
return;
|
|
1665
1661
|
}
|
|
1666
|
-
const focusDepth =
|
|
1667
|
-
if (!(focusDepth >
|
|
1662
|
+
const focusDepth = chunkRQMI7EJT_cjs.projectPoint(basis, { x: cam.lookAtX, y: cam.lookAtY, z: cam.focus ?? 0 }).depth;
|
|
1663
|
+
if (!(focusDepth > chunkRQMI7EJT_cjs.NEAR)) {
|
|
1668
1664
|
if (!this._dofSaid.behind) {
|
|
1669
1665
|
this._dofSaid.behind = true;
|
|
1670
|
-
console.warn(`pixi-effects: ${
|
|
1666
|
+
console.warn(`pixi-effects: ${chunkZMAD3KJU_cjs.describeLayer(this.spec)}: the camera's focus (z = ${(cam.focus ?? 0).toFixed(0)}) is at or behind the camera, so nothing is blurred. Put focus in front of the camera (a z below the camera's z)`);
|
|
1671
1667
|
}
|
|
1672
1668
|
for (const l of this._layers3d) l.setBlur(0);
|
|
1673
1669
|
return;
|
|
1674
1670
|
}
|
|
1675
1671
|
let blurred = 0;
|
|
1676
1672
|
for (const l of this._layers3d) {
|
|
1677
|
-
l.setBlur(l.display.visible ?
|
|
1673
|
+
l.setBlur(l.display.visible ? chunkRQMI7EJT_cjs.blurRadius(aperture, basis.focal, l.depth, focusDepth) : 0);
|
|
1678
1674
|
if (l.blur > 0) blurred++;
|
|
1679
1675
|
}
|
|
1680
|
-
if (blurred >=
|
|
1676
|
+
if (blurred >= chunkRQMI7EJT_cjs.MANY_BLURRED && !this._dofSaid.many) {
|
|
1681
1677
|
this._dofSaid.many = true;
|
|
1682
|
-
console.warn(`pixi-effects: ${
|
|
1678
|
+
console.warn(`pixi-effects: ${chunkZMAD3KJU_cjs.describeLayer(this.spec)}: ${blurred} layers are blurred by depth of field at once; each costs a filter pass per frame (WebGPU more). Merge the far layers or lower aperture`);
|
|
1683
1679
|
}
|
|
1684
1680
|
}
|
|
1685
1681
|
collectAudio(out, baseTime) {
|
|
@@ -1693,7 +1689,7 @@ var CompositionSequence = class extends chunkWPXDRSGN_cjs.Sequence {
|
|
|
1693
1689
|
const inner = [];
|
|
1694
1690
|
for (const child of this._children) child.collectAudio(inner, 0);
|
|
1695
1691
|
const lo = baseTime + this.at, hi = lo + this.duration;
|
|
1696
|
-
const table =
|
|
1692
|
+
const table = chunkRQMI7EJT_cjs.clockTable(remap, "time", this.duration, lo, this.scope(), hi);
|
|
1697
1693
|
for (const d of inner) {
|
|
1698
1694
|
const prev = d.warp;
|
|
1699
1695
|
out.push({ ...d, warp: (t) => t < lo || t > hi ? NaN : prev ? prev(table.at(t)) : table.at(t) });
|
|
@@ -1723,5 +1719,5 @@ function frameOf(child) {
|
|
|
1723
1719
|
|
|
1724
1720
|
exports.CompositionSequence = CompositionSequence;
|
|
1725
1721
|
exports.maskSourceOf = maskSourceOf;
|
|
1726
|
-
//# sourceMappingURL=chunk-
|
|
1727
|
-
//# sourceMappingURL=chunk-
|
|
1722
|
+
//# sourceMappingURL=chunk-NDR2VQFV.cjs.map
|
|
1723
|
+
//# sourceMappingURL=chunk-NDR2VQFV.cjs.map
|