pixi-effects 0.44.0 → 0.46.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 +15 -0
- package/README.md +5 -5
- package/ai/chat-template.html +3 -3
- package/ai/tools/check.mjs +117 -2
- package/ai/tools/lookup.mjs +1 -0
- package/dist/Composition-NSY7A32Y.js +7 -0
- package/dist/{Composition-YGBQX3HZ.js.map → Composition-NSY7A32Y.js.map} +1 -1
- package/dist/Composition-PME3P5LP.cjs +16 -0
- package/dist/{Composition-N6BOROJ2.cjs.map → Composition-PME3P5LP.cjs.map} +1 -1
- package/dist/Controller.d.cts +2 -2
- package/dist/Controller.d.ts +2 -2
- package/dist/{Movie-B3VOAgwc.d.cts → Movie-BqrAWN0g.d.cts} +13 -1
- package/dist/{Movie-CQCVUqRs.d.ts → Movie-sV8nJr_f.d.ts} +13 -1
- package/dist/{Spans-XTIWYSNO.cjs → Spans-2TZCNREQ.cjs} +9 -9
- package/dist/{Spans-XTIWYSNO.cjs.map → Spans-2TZCNREQ.cjs.map} +1 -1
- package/dist/{Spans-6L2ZVECX.js → Spans-TESJPQKX.js} +4 -4
- package/dist/{Spans-6L2ZVECX.js.map → Spans-TESJPQKX.js.map} +1 -1
- package/dist/{chunk-4MBTYREC.js → chunk-2E74SP63.js} +72 -17
- package/dist/chunk-2E74SP63.js.map +1 -0
- package/dist/{chunk-MAAM45ZX.cjs → chunk-7M63Y6MO.cjs} +114 -59
- package/dist/chunk-7M63Y6MO.cjs.map +1 -0
- package/dist/{chunk-3HZV3UHU.cjs → chunk-DKCMJILW.cjs} +67 -65
- package/dist/chunk-DKCMJILW.cjs.map +1 -0
- package/dist/{chunk-4QVQ5UJJ.js → chunk-DM2OLQOJ.js} +5 -6
- package/dist/chunk-DM2OLQOJ.js.map +1 -0
- package/dist/{chunk-ICI6ACHY.js → chunk-FPV3NPYC.js} +8 -6
- package/dist/chunk-FPV3NPYC.js.map +1 -0
- package/dist/{chunk-UHNSL2KJ.js → chunk-K24FF4BT.js} +10 -5
- package/dist/chunk-K24FF4BT.js.map +1 -0
- package/dist/{chunk-X62H3RBG.cjs → chunk-LALEBV63.cjs} +5 -6
- package/dist/chunk-LALEBV63.cjs.map +1 -0
- package/dist/{chunk-LQDDDIC4.cjs → chunk-O66JGPVV.cjs} +10 -4
- package/dist/chunk-O66JGPVV.cjs.map +1 -0
- package/dist/index.cjs +35 -35
- package/dist/index.d.cts +3 -3
- package/dist/index.d.ts +3 -3
- package/dist/index.js +4 -4
- package/dist/loader.css +1 -1
- package/dist/present.cjs +4 -4
- package/dist/present.d.cts +2 -2
- package/dist/present.d.ts +2 -2
- package/dist/present.js +4 -4
- package/dist/sound.cjs +2 -2
- package/dist/sound.js +1 -1
- package/dist/three.cjs +194 -15
- package/dist/three.cjs.map +1 -1
- package/dist/three.d.cts +75 -4
- package/dist/three.d.ts +75 -4
- package/dist/three.js +191 -13
- package/dist/three.js.map +1 -1
- package/dist/{types-C5xo0fzb.d.cts → types-CTSrPvY3.d.cts} +64 -58
- package/dist/{types-C5xo0fzb.d.ts → types-CTSrPvY3.d.ts} +64 -58
- package/docs/api.md +2 -0
- package/docs/dsl.md +26 -0
- package/llms-full.txt +66 -4
- package/package.json +1 -1
- package/skills/pixi-effects/SKILL.md +2 -2
- package/skills/pixi-effects/reference/cheatsheet.md +2 -2
- package/skills/pixi-effects/reference/recipes.md +34 -0
- package/skills/pixi-effects/template.html +6 -6
- package/dist/Composition-N6BOROJ2.cjs +0 -16
- package/dist/Composition-YGBQX3HZ.js +0 -7
- package/dist/chunk-3HZV3UHU.cjs.map +0 -1
- package/dist/chunk-4MBTYREC.js.map +0 -1
- package/dist/chunk-4QVQ5UJJ.js.map +0 -1
- package/dist/chunk-ICI6ACHY.js.map +0 -1
- package/dist/chunk-LQDDDIC4.cjs.map +0 -1
- package/dist/chunk-MAAM45ZX.cjs.map +0 -1
- package/dist/chunk-UHNSL2KJ.js.map +0 -1
- package/dist/chunk-X62H3RBG.cjs.map +0 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var chunkLALEBV63_cjs = require('./chunk-LALEBV63.cjs');
|
|
4
4
|
var chunkJN7JHNZR_cjs = require('./chunk-JN7JHNZR.cjs');
|
|
5
5
|
var chunk3SAS3ZE5_cjs = require('./chunk-3SAS3ZE5.cjs');
|
|
6
6
|
var chunkTWZNOUM7_cjs = require('./chunk-TWZNOUM7.cjs');
|
|
@@ -33,10 +33,10 @@ var KIND_ALIASES = {
|
|
|
33
33
|
fill: "ambient"
|
|
34
34
|
};
|
|
35
35
|
function lightKindProblem(kind) {
|
|
36
|
-
if (kind === void 0 || typeof kind === "string" &&
|
|
37
|
-
const guess = typeof kind === "string" ? KIND_ALIASES[kind.toLowerCase()] ?? chunkTWZNOUM7_cjs.suggestName(kind,
|
|
36
|
+
if (kind === void 0 || typeof kind === "string" && chunkLALEBV63_cjs.LIGHT_KINDS.includes(kind)) return null;
|
|
37
|
+
const guess = typeof kind === "string" ? KIND_ALIASES[kind.toLowerCase()] ?? chunkTWZNOUM7_cjs.suggestName(kind, chunkLALEBV63_cjs.LIGHT_KINDS) : null;
|
|
38
38
|
const shown = typeof kind === "string" ? `"${kind}"` : String(kind);
|
|
39
|
-
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 ${chunkLALEBV63_cjs.LIGHT_KINDS.join(", ")}); point is used`;
|
|
40
40
|
}
|
|
41
41
|
var LIGHT_ALIASES = {
|
|
42
42
|
pointOfInterest: 'did you mean "lookAtX / lookAtY / lookAtZ"?',
|
|
@@ -61,24 +61,24 @@ function lightLayerProblems(spec) {
|
|
|
61
61
|
const raw = spec;
|
|
62
62
|
const kind = lightKindProblem(raw.kind);
|
|
63
63
|
if (kind) out.push(kind);
|
|
64
|
-
if (raw.falloff !== void 0 && !
|
|
65
|
-
const guess = typeof raw.falloff === "string" ? chunkTWZNOUM7_cjs.suggestName(raw.falloff,
|
|
66
|
-
out.push(`falloff ${JSON.stringify(raw.falloff)} is not supported${guess ? `; did you mean "${guess}"?` : ""} (use ${
|
|
64
|
+
if (raw.falloff !== void 0 && !chunkLALEBV63_cjs.FALLOFFS.includes(raw.falloff)) {
|
|
65
|
+
const guess = typeof raw.falloff === "string" ? chunkTWZNOUM7_cjs.suggestName(raw.falloff, chunkLALEBV63_cjs.FALLOFFS) : null;
|
|
66
|
+
out.push(`falloff ${JSON.stringify(raw.falloff)} is not supported${guess ? `; did you mean "${guess}"?` : ""} (use ${chunkLALEBV63_cjs.FALLOFFS.join(", ")}); none is used`);
|
|
67
67
|
}
|
|
68
68
|
for (const k of Object.keys(raw)) {
|
|
69
|
-
if (
|
|
69
|
+
if (chunkLALEBV63_cjs.LIGHT_PROPS.includes(k) || k === "intensity" || k === "shadowDarkness" || k === "shadowDiffusion") {
|
|
70
70
|
out.push(`"${k}" must go inside initial / keyframes, not on the light itself`);
|
|
71
71
|
} else if (LIGHT_ALIASES[k]) out.push(`"${k}" is not a property \u2014 ${LIGHT_ALIASES[k]}`);
|
|
72
72
|
}
|
|
73
73
|
const explained = new Set(Object.keys(LIGHT_ALIASES));
|
|
74
74
|
for (const k of chunk3SAS3ZE5_cjs.collectPropKeys(spec)) {
|
|
75
75
|
if (LIGHT_ALIASES[k]) out.push(`"${k}" is not a property \u2014 ${LIGHT_ALIASES[k]}`);
|
|
76
|
-
else if (!explained.has(k) && !
|
|
76
|
+
else if (!explained.has(k) && !chunkLALEBV63_cjs.LIGHT_PROPS.includes(k)) out.push(`"${k}" has no effect on a light (use ${chunkLALEBV63_cjs.LIGHT_PROPS.join(", ")})`);
|
|
77
77
|
}
|
|
78
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");
|
|
79
79
|
const big = numbersOf(spec, "intensity").find((v) => v > 10);
|
|
80
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}?`);
|
|
81
|
-
const kindNow = typeof raw.kind === "string" &&
|
|
81
|
+
const kindNow = typeof raw.kind === "string" && chunkLALEBV63_cjs.LIGHT_KINDS.includes(raw.kind) ? raw.kind : "point";
|
|
82
82
|
const has = (...keys) => keys.filter((k) => bagsOf(spec).some((b) => b[k] !== void 0));
|
|
83
83
|
const falloffOn = raw.falloff === "smooth" || raw.falloff === "inverseSquare";
|
|
84
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)");
|
|
@@ -106,18 +106,18 @@ function lightSetProblems(layers) {
|
|
|
106
106
|
out.push("there is no ambient light, so what no light reaches is black; add { type: 'light', kind: 'ambient', initial: { intensity: 0.25 } }");
|
|
107
107
|
}
|
|
108
108
|
const direct = lights.filter((l) => kindOf(l) !== "ambient");
|
|
109
|
-
if (direct.length >
|
|
110
|
-
const dropped = direct.slice(
|
|
111
|
-
out.push(`${direct.length} lights, but at most ${
|
|
109
|
+
if (direct.length > chunkLALEBV63_cjs.MAX_LIGHTS) {
|
|
110
|
+
const dropped = direct.slice(chunkLALEBV63_cjs.MAX_LIGHTS).map((l) => nameOf(l, layers.indexOf(l)));
|
|
111
|
+
out.push(`${direct.length} lights, but at most ${chunkLALEBV63_cjs.MAX_LIGHTS} are used (the first ${chunkLALEBV63_cjs.MAX_LIGHTS}, in layer order); ${dropped.join(", ")} and later are dropped. Use fewer lights`);
|
|
112
112
|
}
|
|
113
113
|
const lightsCast = lights.some((l) => kindOf(l) !== "ambient" && l.castsShadows);
|
|
114
114
|
const casters = layers.filter((l) => l.type !== "light" && l.castsShadows && l.threeD);
|
|
115
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`);
|
|
116
116
|
const hostsThree = layers.some((l) => l.type === "three" && l.followLights);
|
|
117
117
|
if (lightsCast && casters.length === 0 && !hostsThree) out.push("a light has castsShadows but no layer has castsShadows: add castsShadows: true to the threeD layers that should cast a shadow");
|
|
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 ${
|
|
118
|
+
if (lightsCast && casters.length > chunkLALEBV63_cjs.MAX_CASTERS) {
|
|
119
|
+
const dropped = casters.slice(chunkLALEBV63_cjs.MAX_CASTERS).map((c) => nameOf(c, layers.indexOf(c)));
|
|
120
|
+
out.push(`${casters.length} layers cast shadows, but a layer receives shadows from at most ${chunkLALEBV63_cjs.MAX_CASTERS} (the first ${chunkLALEBV63_cjs.MAX_CASTERS}, in layer order); ${dropped.join(", ")} and later cast none`);
|
|
121
121
|
}
|
|
122
122
|
const softLights = lights.filter((l) => l.castsShadows && numbersOf(l, "shadowDiffusion").some((v) => v > 0));
|
|
123
123
|
if (softLights.length >= SOFT_LIGHTS) {
|
|
@@ -302,9 +302,9 @@ var roundPixelsBit = {
|
|
|
302
302
|
name: "round-pixels-bit",
|
|
303
303
|
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
304
|
};
|
|
305
|
-
var ML =
|
|
306
|
-
var MC =
|
|
307
|
-
var TAPS =
|
|
305
|
+
var ML = chunkLALEBV63_cjs.MAX_LIGHTS;
|
|
306
|
+
var MC = chunkLALEBV63_cjs.MAX_CASTERS;
|
|
307
|
+
var TAPS = chunkLALEBV63_cjs.SHADOW_TAPS;
|
|
308
308
|
var SHADOW_KEYS = Array.from({ length: MC }, (_, j) => `uShadow${j}`);
|
|
309
309
|
var WGSL_SHADOW_DECLS = SHADOW_KEYS.map((k, j) => ` @group(2) @binding(${4 + j}) var ${k}: texture_2d<f32>;`).join("\n");
|
|
310
310
|
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 +664,8 @@ function readLayerTransform(target) {
|
|
|
664
664
|
x: c.x,
|
|
665
665
|
y: c.y,
|
|
666
666
|
z: c.z ?? 0,
|
|
667
|
-
rotationX: (c.rotationX ?? 0) *
|
|
668
|
-
rotationY: (c.rotationY ?? 0) *
|
|
667
|
+
rotationX: (c.rotationX ?? 0) * chunkLALEBV63_cjs.DEG,
|
|
668
|
+
rotationY: (c.rotationY ?? 0) * chunkLALEBV63_cjs.DEG,
|
|
669
669
|
rotationZ: c.rotation,
|
|
670
670
|
scaleX: c.scale.x,
|
|
671
671
|
scaleY: c.scale.y,
|
|
@@ -730,20 +730,20 @@ var Layer3D = class {
|
|
|
730
730
|
if (!(needW >= 1 && needH >= 1) || !Number.isFinite(bounds.x) || !Number.isFinite(bounds.y)) return this.hide();
|
|
731
731
|
const size = this.sizeFor(needW, needH);
|
|
732
732
|
const frame = { x: bounds.x - pad, y: bounds.y - pad, width: size.w, height: size.h };
|
|
733
|
-
const projected =
|
|
733
|
+
const projected = chunkLALEBV63_cjs.projectLayer(readLayerTransform(target), frame, basis);
|
|
734
734
|
this.depth = projected.depth;
|
|
735
735
|
{
|
|
736
736
|
const lt = readLayerTransform(target);
|
|
737
|
-
const o =
|
|
738
|
-
const pu =
|
|
739
|
-
const pv =
|
|
737
|
+
const o = chunkLALEBV63_cjs.layerToWorld(lt, frame.x, frame.y);
|
|
738
|
+
const pu = chunkLALEBV63_cjs.layerToWorld(lt, frame.x + frame.width, frame.y);
|
|
739
|
+
const pv = chunkLALEBV63_cjs.layerToWorld(lt, frame.x, frame.y + frame.height);
|
|
740
740
|
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 } };
|
|
741
741
|
}
|
|
742
742
|
if (!projected.visible) {
|
|
743
743
|
if (!this.warnedBehind) {
|
|
744
744
|
this.warnedBehind = true;
|
|
745
745
|
if (this.seq.spec.hideBehindCamera) return this.hide();
|
|
746
|
-
if (projected.depth >
|
|
746
|
+
if (projected.depth > chunkLALEBV63_cjs.NEAR) {
|
|
747
747
|
console.warn(
|
|
748
748
|
`pixi-effects: ${chunk3SAS3ZE5_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).`
|
|
749
749
|
);
|
|
@@ -775,7 +775,7 @@ var Layer3D = class {
|
|
|
775
775
|
*/
|
|
776
776
|
setBlur(radius) {
|
|
777
777
|
const d = this.display;
|
|
778
|
-
const r = radius >
|
|
778
|
+
const r = radius > chunkLALEBV63_cjs.MIN_BLUR ? Math.min(radius, chunkLALEBV63_cjs.MAX_BLUR) : 0;
|
|
779
779
|
this.blur = r;
|
|
780
780
|
if (r === 0) {
|
|
781
781
|
if (this.blurFilter) {
|
|
@@ -962,7 +962,7 @@ function lintSequence(spec, warn = defaultWarn) {
|
|
|
962
962
|
function lintFocus(camera, siblings, warn = defaultWarn) {
|
|
963
963
|
if (camera.type !== "camera") return;
|
|
964
964
|
const who = chunk3SAS3ZE5_cjs.describeLayer(camera);
|
|
965
|
-
for (const p of
|
|
965
|
+
for (const p of chunkLALEBV63_cjs.focusProblems(camera, siblings)) {
|
|
966
966
|
if (p.kind === "missing") {
|
|
967
967
|
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`);
|
|
968
968
|
} else if (p.kind === "not-threeD") {
|
|
@@ -1252,7 +1252,7 @@ var MatteSet = class {
|
|
|
1252
1252
|
};
|
|
1253
1253
|
|
|
1254
1254
|
// src/sequences/Composition.ts
|
|
1255
|
-
var CompositionSequence = class extends
|
|
1255
|
+
var CompositionSequence = class extends chunkLALEBV63_cjs.Sequence {
|
|
1256
1256
|
_innerContainer = null;
|
|
1257
1257
|
_compositionShape = null;
|
|
1258
1258
|
_children = [];
|
|
@@ -1319,11 +1319,11 @@ var CompositionSequence = class extends chunkX62H3RBG_cjs.Sequence {
|
|
|
1319
1319
|
this.intrinsicWidth = width;
|
|
1320
1320
|
this.intrinsicHeight = height;
|
|
1321
1321
|
this._innerContainer = inner;
|
|
1322
|
-
const base =
|
|
1323
|
-
const span = base ?
|
|
1324
|
-
this._remap = base ?
|
|
1322
|
+
const base = chunkLALEBV63_cjs.timeRemapOf(this.spec);
|
|
1323
|
+
const span = base ? chunkLALEBV63_cjs.contentLength(base, this.duration) : this.duration;
|
|
1324
|
+
this._remap = base ? chunkLALEBV63_cjs.remapOf(this.spec, "time", span) : null;
|
|
1325
1325
|
this._contentSpan = span;
|
|
1326
|
-
this._compositionShape = { width, height, duration: span, spaceAt: (t) => this._spaceAt(t) };
|
|
1326
|
+
this._compositionShape = { width, height, duration: span, spaceAt: (t) => this._spaceAt(t), findLayer: (name) => this._children.find((c) => c.spec.name === name) ?? null, layerNames: () => this._children.map((c) => c.spec.name).filter((n) => !!n) };
|
|
1327
1327
|
const lateKeyframes = [];
|
|
1328
1328
|
for (const s of this.spec.sequences ?? []) {
|
|
1329
1329
|
lintSequence(s);
|
|
@@ -1338,10 +1338,12 @@ var CompositionSequence = class extends chunkX62H3RBG_cjs.Sequence {
|
|
|
1338
1338
|
if (crowd >= chunkJN7JHNZR_cjs.MANY_ADVANCED) {
|
|
1339
1339
|
console.warn(`pixi-effects: ${chunk3SAS3ZE5_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`);
|
|
1340
1340
|
}
|
|
1341
|
-
this._children =
|
|
1341
|
+
this._children = [];
|
|
1342
|
+
await chunkLALEBV63_cjs.buildSequenceTree(
|
|
1342
1343
|
this.spec.sequences ?? [],
|
|
1343
1344
|
this._compositionShape,
|
|
1344
|
-
this.root
|
|
1345
|
+
this.root,
|
|
1346
|
+
this._children
|
|
1345
1347
|
);
|
|
1346
1348
|
this._resolveParents();
|
|
1347
1349
|
const matteNames = /* @__PURE__ */ new Set();
|
|
@@ -1349,22 +1351,22 @@ var CompositionSequence = class extends chunkX62H3RBG_cjs.Sequence {
|
|
|
1349
1351
|
if (matteNames.size > 0) {
|
|
1350
1352
|
this._mattes = new MatteSet(inner, width, height);
|
|
1351
1353
|
for (const name of matteNames) {
|
|
1352
|
-
const source = this._children.find((c) => c.spec.name === name && !(c instanceof
|
|
1354
|
+
const source = this._children.find((c) => c.spec.name === name && !(c instanceof chunkLALEBV63_cjs.CameraSequence));
|
|
1353
1355
|
if (!source || !source.target || !canBeMatte(source.spec)) continue;
|
|
1354
1356
|
const chain = [];
|
|
1355
1357
|
for (let p = this._parentOf.get(source); p; p = this._parentOf.get(p)) chain.push(p);
|
|
1356
1358
|
this._mattes.add(name, source, chain);
|
|
1357
1359
|
}
|
|
1358
1360
|
}
|
|
1359
|
-
if (this._children.some((c) => c instanceof
|
|
1361
|
+
if (this._children.some((c) => c instanceof chunkLALEBV63_cjs.LightSequence)) {
|
|
1360
1362
|
for (const message of lightSetProblems(this.spec.sequences ?? [])) console.warn(`pixi-effects: ${chunk3SAS3ZE5_cjs.describeLayer(this.spec)}: ${message}`);
|
|
1361
1363
|
}
|
|
1362
1364
|
const layerNames = new Set(this._children.map((c) => c.spec.name).filter((n) => !!n));
|
|
1363
1365
|
for (const cam of this._children) {
|
|
1364
|
-
if (!(cam instanceof
|
|
1366
|
+
if (!(cam instanceof chunkLALEBV63_cjs.CameraSequence)) continue;
|
|
1365
1367
|
cam.resolveFocusNames((name) => {
|
|
1366
1368
|
const hit = this._children.find((c) => c.spec.name === name && c.spec.threeD);
|
|
1367
|
-
return hit ?
|
|
1369
|
+
return hit ? chunkLALEBV63_cjs.layerInitialZ(hit.spec, hit.scope()) : void 0;
|
|
1368
1370
|
}, layerNames);
|
|
1369
1371
|
}
|
|
1370
1372
|
const blendSaid = /* @__PURE__ */ new Map();
|
|
@@ -1374,11 +1376,11 @@ var CompositionSequence = class extends chunkX62H3RBG_cjs.Sequence {
|
|
|
1374
1376
|
else blendSaid.set(message, { spec, n: 1 });
|
|
1375
1377
|
};
|
|
1376
1378
|
for (const child of this._children) {
|
|
1377
|
-
if (child instanceof
|
|
1379
|
+
if (child instanceof chunkLALEBV63_cjs.CameraSequence) {
|
|
1378
1380
|
this._cameras.push(child);
|
|
1379
1381
|
continue;
|
|
1380
1382
|
}
|
|
1381
|
-
if (child instanceof
|
|
1383
|
+
if (child instanceof chunkLALEBV63_cjs.LightSequence) {
|
|
1382
1384
|
this._lights.push(child);
|
|
1383
1385
|
continue;
|
|
1384
1386
|
}
|
|
@@ -1412,7 +1414,7 @@ var CompositionSequence = class extends chunkX62H3RBG_cjs.Sequence {
|
|
|
1412
1414
|
if (maskSrc.kind === "inline") {
|
|
1413
1415
|
const maskSpec = maskSrc.spec;
|
|
1414
1416
|
const lifetime = maskSpec.at === void 0 ? { at: child.at, duration: maskSpec.duration ?? child.duration } : {};
|
|
1415
|
-
const built = await
|
|
1417
|
+
const built = await chunkLALEBV63_cjs.buildSequenceTree([{ ...maskSpec, ...lifetime }], this._compositionShape, this.root);
|
|
1416
1418
|
const maskSeq = built[0];
|
|
1417
1419
|
if (maskSeq?.target) {
|
|
1418
1420
|
child.maskSequence = maskSeq;
|
|
@@ -1468,9 +1470,9 @@ var CompositionSequence = class extends chunkX62H3RBG_cjs.Sequence {
|
|
|
1468
1470
|
const remap = this._remap;
|
|
1469
1471
|
const childOffset = remap ? 0 : offset + this.at;
|
|
1470
1472
|
this._childBase = childOffset;
|
|
1471
|
-
const target = remap ?
|
|
1473
|
+
const target = remap ? chunkLALEBV63_cjs.createTimeline({ paused: true, defaults: { ease: "none" } }) : timeline;
|
|
1472
1474
|
for (const child of this._children) {
|
|
1473
|
-
const own =
|
|
1475
|
+
const own = chunkLALEBV63_cjs.createTimeline({ defaults: { ease: "none" } });
|
|
1474
1476
|
child.bindTimeline(own, childOffset);
|
|
1475
1477
|
child.maskSequence?.bindTimeline(own, childOffset);
|
|
1476
1478
|
target.add(own, 0);
|
|
@@ -1500,8 +1502,8 @@ var CompositionSequence = class extends chunkX62H3RBG_cjs.Sequence {
|
|
|
1500
1502
|
this._clock = clock;
|
|
1501
1503
|
const scope = this.scope();
|
|
1502
1504
|
if (remap.start !== void 0 && remap.timeKfs.length === 0) clock.time = remap.start;
|
|
1503
|
-
|
|
1504
|
-
this._warnUnreachable(
|
|
1505
|
+
chunkLALEBV63_cjs.bindClock(timeline, clock, "time", remap, this.duration, offset + this.at, scope);
|
|
1506
|
+
this._warnUnreachable(chunkLALEBV63_cjs.clockTable(remap, "time", this.duration, offset + this.at, scope, offset + this.at + this.duration), offset + this.at, offset + this.at + this.duration);
|
|
1505
1507
|
}
|
|
1506
1508
|
/**
|
|
1507
1509
|
* 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
|
|
@@ -1539,7 +1541,7 @@ var CompositionSequence = class extends chunkX62H3RBG_cjs.Sequence {
|
|
|
1539
1541
|
for (let p = this._parentOf.get(seq); p; p = this._parentOf.get(p)) out.push(p);
|
|
1540
1542
|
return out;
|
|
1541
1543
|
};
|
|
1542
|
-
return [...this._visual.map((v) => v.seq), ...this._nested].filter((seq) => !(seq instanceof
|
|
1544
|
+
return [...this._visual.map((v) => v.seq), ...this._nested].filter((seq) => !(seq instanceof chunkLALEBV63_cjs.NullSequence)).map((seq) => {
|
|
1543
1545
|
const layer = this._visual.find((v) => v.seq === seq)?.layer ?? null;
|
|
1544
1546
|
return {
|
|
1545
1547
|
seq,
|
|
@@ -1549,24 +1551,24 @@ var CompositionSequence = class extends chunkX62H3RBG_cjs.Sequence {
|
|
|
1549
1551
|
depthBlur: layer?.blur ?? 0,
|
|
1550
1552
|
quad: layer && layer.display.visible ? layer.corners : null,
|
|
1551
1553
|
// how lit it is (threeD layers that receive the lights of the last frame only); computed here, not per frame
|
|
1552
|
-
light: layer && this._lighting && layer.world && layer.spec.lit !== false ?
|
|
1554
|
+
light: layer && this._lighting && layer.world && layer.spec.lit !== false ? chunkLALEBV63_cjs.lightLevel(layer.world, this._lighting.cam, this._lighting.states) : void 0
|
|
1553
1555
|
};
|
|
1554
1556
|
});
|
|
1555
1557
|
}
|
|
1556
1558
|
/** Match every `parent: 'name'` to a null layer; anything that cannot work is said out loud and drawn unparented. */
|
|
1557
1559
|
_resolveParents() {
|
|
1558
|
-
const nulls = this._children.filter((c) => c instanceof
|
|
1560
|
+
const nulls = this._children.filter((c) => c instanceof chunkLALEBV63_cjs.NullSequence);
|
|
1559
1561
|
const nullNames = nulls.map((n) => n.spec.name).filter((n) => !!n);
|
|
1560
1562
|
const warned = /* @__PURE__ */ new Set();
|
|
1561
1563
|
for (const child of this._children) {
|
|
1562
1564
|
const want = child.spec.parent;
|
|
1563
1565
|
if (want === void 0) continue;
|
|
1564
1566
|
const who = chunk3SAS3ZE5_cjs.describeLayer(child.spec);
|
|
1565
|
-
if (child instanceof
|
|
1567
|
+
if (child instanceof chunkLALEBV63_cjs.CameraSequence) {
|
|
1566
1568
|
console.warn(`pixi-effects: ${who}: a camera cannot have a parent; ignored`);
|
|
1567
1569
|
continue;
|
|
1568
1570
|
}
|
|
1569
|
-
if (child instanceof
|
|
1571
|
+
if (child instanceof chunkLALEBV63_cjs.LightSequence) {
|
|
1570
1572
|
console.warn(`pixi-effects: ${who}: a light cannot have a parent (parent "${want}" ignored: move the light with its own x / y / z keyframes)`);
|
|
1571
1573
|
continue;
|
|
1572
1574
|
}
|
|
@@ -1580,7 +1582,7 @@ var CompositionSequence = class extends chunkX62H3RBG_cjs.Sequence {
|
|
|
1580
1582
|
console.warn(`pixi-effects: ${who}: parent "${want}": no layer with that name${hint ? `; did you mean "${hint}"?` : ""} (the layer is drawn without a parent)`);
|
|
1581
1583
|
continue;
|
|
1582
1584
|
}
|
|
1583
|
-
const holder = same.find((c) => c instanceof
|
|
1585
|
+
const holder = same.find((c) => c instanceof chunkLALEBV63_cjs.NullSequence);
|
|
1584
1586
|
if (!holder) {
|
|
1585
1587
|
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)`);
|
|
1586
1588
|
continue;
|
|
@@ -1625,8 +1627,8 @@ var CompositionSequence = class extends chunkX62H3RBG_cjs.Sequence {
|
|
|
1625
1627
|
childT,
|
|
1626
1628
|
compEnd
|
|
1627
1629
|
);
|
|
1628
|
-
const cam = active ? active.cam.state() :
|
|
1629
|
-
const basis =
|
|
1630
|
+
const cam = active ? active.cam.state() : chunkLALEBV63_cjs.homeCamera(width, height);
|
|
1631
|
+
const basis = chunkLALEBV63_cjs.cameraBasis(cam, width, height);
|
|
1630
1632
|
for (const layer of this._layers3d) layer.update(host, basis);
|
|
1631
1633
|
this._applyLighting(childT, compEnd, basis, active?.cam ?? null);
|
|
1632
1634
|
this._applyDepthOfField(cam, basis);
|
|
@@ -1649,7 +1651,7 @@ var CompositionSequence = class extends chunkX62H3RBG_cjs.Sequence {
|
|
|
1649
1651
|
const { width, height } = this._compositionShape;
|
|
1650
1652
|
const compEnd = this._childBase + (this.duration ?? 0);
|
|
1651
1653
|
const active = pickActiveCamera(this._cameras.map((cam) => ({ cam, ...cam.window() })), t, compEnd);
|
|
1652
|
-
return { camera: active ? active.cam.state() :
|
|
1654
|
+
return { camera: active ? active.cam.state() : chunkLALEBV63_cjs.homeCamera(width, height), lights: this._liveLights(t, compEnd).map((l) => l.state()), fog: active?.cam.fogState() ?? null };
|
|
1653
1655
|
}
|
|
1654
1656
|
/**
|
|
1655
1657
|
* Lights and fog: when the composition has a light layer or the camera writes fog, every threeD layer draws with the lit shader, fed with
|
|
@@ -1661,7 +1663,7 @@ var CompositionSequence = class extends chunkX62H3RBG_cjs.Sequence {
|
|
|
1661
1663
|
const fog = cam?.fogState() ?? null;
|
|
1662
1664
|
if (this._lights.length === 0 && !this._cameras.some((c) => c.fog)) return;
|
|
1663
1665
|
const states = this._liveLights(t, compEnd).map((l) => l.state());
|
|
1664
|
-
const packed = states.length > 0 ?
|
|
1666
|
+
const packed = states.length > 0 ? chunkLALEBV63_cjs.packLights(states) : null;
|
|
1665
1667
|
this._lighting = states.length > 0 ? { states, cam: { x: basis.cx, y: basis.cy, z: basis.cz } } : null;
|
|
1666
1668
|
const shadowing = states.some((s) => s.castsShadows);
|
|
1667
1669
|
const casters = shadowing ? this._layers3d.filter((l) => l.spec.castsShadows && l.display.visible && l.world && l.source) : [];
|
|
@@ -1670,7 +1672,7 @@ var CompositionSequence = class extends chunkX62H3RBG_cjs.Sequence {
|
|
|
1670
1672
|
const mat = l.setLit(true);
|
|
1671
1673
|
if (!mat || !l.world) continue;
|
|
1672
1674
|
const lit = l.spec.lit !== false;
|
|
1673
|
-
const mine = lit ? casters.filter((c) => c !== l).slice(0,
|
|
1675
|
+
const mine = lit ? casters.filter((c) => c !== l).slice(0, chunkLALEBV63_cjs.MAX_CASTERS).map((c) => ({ frame: c.world, source: c.source })) : [];
|
|
1674
1676
|
mat.update(l.world, camInfo, lit ? packed : null, fog, mine);
|
|
1675
1677
|
}
|
|
1676
1678
|
}
|
|
@@ -1681,8 +1683,8 @@ var CompositionSequence = class extends chunkX62H3RBG_cjs.Sequence {
|
|
|
1681
1683
|
for (const l of this._layers3d) l.setBlur(0);
|
|
1682
1684
|
return;
|
|
1683
1685
|
}
|
|
1684
|
-
const focusDepth =
|
|
1685
|
-
if (!(focusDepth >
|
|
1686
|
+
const focusDepth = chunkLALEBV63_cjs.projectPoint(basis, { x: cam.lookAtX, y: cam.lookAtY, z: cam.focus ?? 0 }).depth;
|
|
1687
|
+
if (!(focusDepth > chunkLALEBV63_cjs.NEAR)) {
|
|
1686
1688
|
if (!this._dofSaid.behind) {
|
|
1687
1689
|
this._dofSaid.behind = true;
|
|
1688
1690
|
console.warn(`pixi-effects: ${chunk3SAS3ZE5_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)`);
|
|
@@ -1692,12 +1694,12 @@ var CompositionSequence = class extends chunkX62H3RBG_cjs.Sequence {
|
|
|
1692
1694
|
}
|
|
1693
1695
|
let blurred = 0;
|
|
1694
1696
|
for (const l of this._layers3d) {
|
|
1695
|
-
l.setBlur(l.display.visible ?
|
|
1697
|
+
l.setBlur(l.display.visible ? chunkLALEBV63_cjs.blurRadius(aperture, basis.focal, l.depth, focusDepth) : 0);
|
|
1696
1698
|
if (l.blur > 0) blurred++;
|
|
1697
1699
|
}
|
|
1698
|
-
if (blurred >=
|
|
1700
|
+
if (blurred >= chunkLALEBV63_cjs.MANY_BLURRED && !this._dofSaid.many) {
|
|
1699
1701
|
this._dofSaid.many = true;
|
|
1700
|
-
console.warn(`pixi-effects: ${chunk3SAS3ZE5_cjs.describeLayer(this.spec)}: ${blurred} layers are blurred by depth of field at once (it warns from ${
|
|
1702
|
+
console.warn(`pixi-effects: ${chunk3SAS3ZE5_cjs.describeLayer(this.spec)}: ${blurred} layers are blurred by depth of field at once (it warns from ${chunkLALEBV63_cjs.MANY_BLURRED}); each costs a filter pass per frame (WebGPU more). Merge the far layers or lower aperture`);
|
|
1701
1703
|
}
|
|
1702
1704
|
}
|
|
1703
1705
|
collectAudio(out, baseTime) {
|
|
@@ -1711,7 +1713,7 @@ var CompositionSequence = class extends chunkX62H3RBG_cjs.Sequence {
|
|
|
1711
1713
|
const inner = [];
|
|
1712
1714
|
for (const child of this._children) child.collectAudio(inner, 0);
|
|
1713
1715
|
const lo = baseTime + this.at, hi = lo + this.duration;
|
|
1714
|
-
const table =
|
|
1716
|
+
const table = chunkLALEBV63_cjs.clockTable(remap, "time", this.duration, lo, this.scope(), hi);
|
|
1715
1717
|
for (const d of inner) {
|
|
1716
1718
|
const prev = d.warp;
|
|
1717
1719
|
out.push({ ...d, warp: (t) => t < lo || t > hi ? NaN : prev ? prev(table.at(t)) : table.at(t) });
|
|
@@ -1741,5 +1743,5 @@ function frameOf(child) {
|
|
|
1741
1743
|
|
|
1742
1744
|
exports.CompositionSequence = CompositionSequence;
|
|
1743
1745
|
exports.maskSourceOf = maskSourceOf;
|
|
1744
|
-
//# sourceMappingURL=chunk-
|
|
1745
|
-
//# sourceMappingURL=chunk-
|
|
1746
|
+
//# sourceMappingURL=chunk-DKCMJILW.cjs.map
|
|
1747
|
+
//# sourceMappingURL=chunk-DKCMJILW.cjs.map
|