postext-folio 0.74.1 → 0.75.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/dist/pageFlip/finish.d.ts +8 -2
- package/dist/pageFlip/finish.d.ts.map +1 -1
- package/dist/pageFlip/finish.js +10 -2
- package/dist/pageFlip/finish.js.map +1 -1
- package/dist/pageFlip/leaf.d.ts +9 -1
- package/dist/pageFlip/leaf.d.ts.map +1 -1
- package/dist/pageFlip/leaf.js +22 -1
- package/dist/pageFlip/leaf.js.map +1 -1
- package/dist/pageFlip/materials.d.ts.map +1 -1
- package/dist/pageFlip/materials.js +15 -0
- package/dist/pageFlip/materials.js.map +1 -1
- package/dist/pageFlip/through.d.ts +63 -28
- package/dist/pageFlip/through.d.ts.map +1 -1
- package/dist/pageFlip/through.js +84 -22
- package/dist/pageFlip/through.js.map +1 -1
- package/dist/pageFlip.d.ts +4 -0
- package/dist/pageFlip.d.ts.map +1 -1
- package/dist/pageFlip.js +29 -11
- package/dist/pageFlip.js.map +1 -1
- package/dist/pageFlipFlat/shaders.d.ts.map +1 -1
- package/dist/pageFlipFlat/shaders.js +5 -1
- package/dist/pageFlipFlat/shaders.js.map +1 -1
- package/dist/postext/through.d.ts +2 -1
- package/dist/postext/through.d.ts.map +1 -1
- package/dist/postext/through.js +3 -2
- package/dist/postext/through.js.map +1 -1
- package/package.json +3 -3
package/dist/pageFlip/through.js
CHANGED
|
@@ -7,13 +7,20 @@
|
|
|
7
7
|
// The fragment walks the view ray down the stack a leaf at a time: a
|
|
8
8
|
// layer shows where the ray reaches it, a cut wall where it meets paper
|
|
9
9
|
// first; the key light's ray is walked back up for the shadow the walls
|
|
10
|
-
// throw, and the deep pages darken with depth.
|
|
10
|
+
// throw, and the deep pages darken with depth. Where the holes go
|
|
11
|
+
// through to the end of the book and nothing lies past it but the desk
|
|
12
|
+
// (a book whose own printed covers are its case, #1586), the ray leaves
|
|
13
|
+
// the book: the page discards there and the desk shows, in the key
|
|
14
|
+
// light's depth too, so light falls through.
|
|
11
15
|
// - A leaf in the air (or the block of a long jump) is real geometry: it
|
|
12
16
|
// discards its holes, in its colour, in its key-light depth and in the
|
|
13
17
|
// height map, so the open page under it shows and shadows fall through.
|
|
18
|
+
// A board in the air is two faces with its edges between them: the edges
|
|
19
|
+
// follow the leaf's outline and leave the holes open, and a face seen
|
|
20
|
+
// from inside the board, through a hole, is the board's core (#1586).
|
|
14
21
|
// - Paper cut away past the leaf's outline (rounded corners, a shaped
|
|
15
22
|
// book) is discarded everywhere.
|
|
16
|
-
import { DataTexture, LinearFilter, MeshDepthMaterial, RGBADepthPacking, RGBAFormat, SRGBColorSpace, UnsignedByteType } from 'three';
|
|
23
|
+
import { BoxGeometry, DataTexture, LinearFilter, MeshDepthMaterial, MeshStandardMaterial, RGBADepthPacking, RGBAFormat, SRGBColorSpace, UnsignedByteType } from 'three';
|
|
17
24
|
/** A through picture as a texture: its colour sRGB like the pages' (the
|
|
18
25
|
* alpha, the depth codes, stays as it is), filtered; the shader reads
|
|
19
26
|
* the codes texel by texel (`texelFetch`), never blended. */
|
|
@@ -41,6 +48,9 @@ export const cutUniforms = (mode) => ({
|
|
|
41
48
|
uHasBackThrough: { value: 0 },
|
|
42
49
|
uThroughLayers: { value: 0 },
|
|
43
50
|
uLeafDepth: { value: 1 },
|
|
51
|
+
uFrontEnd: { value: 0 },
|
|
52
|
+
uBackEnd: { value: 0 },
|
|
53
|
+
uSeeDesk: { value: 0 },
|
|
44
54
|
});
|
|
45
55
|
/** Declarations for the page material's fragment shader. */
|
|
46
56
|
export const CUT_PARS = /* glsl */ `
|
|
@@ -53,6 +63,9 @@ export const CUT_PARS = /* glsl */ `
|
|
|
53
63
|
uniform float uHasBackThrough;
|
|
54
64
|
uniform float uThroughLayers;
|
|
55
65
|
uniform float uLeafDepth;
|
|
66
|
+
uniform float uFrontEnd;
|
|
67
|
+
uniform float uBackEnd;
|
|
68
|
+
uniform float uSeeDesk;
|
|
56
69
|
// The direct light a hole's wall keeps from a point deep in it, and the
|
|
57
70
|
// sky its depth leaves it.
|
|
58
71
|
float throughLit = 1.0;
|
|
@@ -131,6 +144,10 @@ export const CUT_FRAGMENT = /* glsl */ `
|
|
|
131
144
|
if (d < k) { wall = 1.0; break; }
|
|
132
145
|
if (d < k + 0.5) break;
|
|
133
146
|
}
|
|
147
|
+
// Out past the book's last page with nothing there but the desk:
|
|
148
|
+
// the page lets the eye through, to the real desk under the book.
|
|
149
|
+
float endK = front ? uFrontEnd : uBackEnd;
|
|
150
|
+
if (uSeeDesk > 0.5 && endK > 0.5 && wall < 0.5 && k > endK - 0.5) discard;
|
|
134
151
|
// The key's ray from there back up: paper on its way is a wall's
|
|
135
152
|
// shadow.
|
|
136
153
|
float lit = 1.0;
|
|
@@ -154,9 +171,8 @@ export const CUT_FRAGMENT = /* glsl */ `
|
|
|
154
171
|
* page texture's alpha discarding the holes (the leaf's front, or its back
|
|
155
172
|
* read through the paper), so the key's shadow falls through them.
|
|
156
173
|
*/
|
|
157
|
-
export function cutDepthMaterial() {
|
|
174
|
+
export function cutDepthMaterial(cut = leafCut()) {
|
|
158
175
|
const m = new MeshDepthMaterial({ depthPacking: RGBADepthPacking });
|
|
159
|
-
const cut = { uCut: { value: null }, uCutBack: { value: 0 }, uMirror: { value: 0 } };
|
|
160
176
|
m.userData.cut = cut;
|
|
161
177
|
m.onBeforeCompile = (shader) => {
|
|
162
178
|
Object.assign(shader.uniforms, cut);
|
|
@@ -169,29 +185,64 @@ export function cutDepthMaterial() {
|
|
|
169
185
|
};
|
|
170
186
|
return m;
|
|
171
187
|
}
|
|
188
|
+
export const leafCut = () => ({ uCut: { value: null }, uCutBack: { value: 0 }, uMirror: { value: 0 }, uHasCut: { value: 0 } });
|
|
172
189
|
/** The leaf's cut at a point, from either face's texture. */
|
|
173
190
|
const CUT_UV_PARS = /* glsl */ `
|
|
174
191
|
uniform sampler2D uCut;
|
|
175
192
|
uniform float uCutBack;
|
|
176
193
|
uniform float uMirror;
|
|
194
|
+
uniform float uHasCut;
|
|
177
195
|
varying vec2 vCutUv;
|
|
178
196
|
`;
|
|
179
197
|
const CUT_DISCARD = /* glsl */ `
|
|
180
|
-
{
|
|
198
|
+
if (uHasCut > 0.5) {
|
|
181
199
|
float u = uMirror > 0.5 ? 1.0 - vCutUv.x : vCutUv.x;
|
|
182
200
|
vec2 st = uCutBack > 0.5 ? vec2(1.0 - u, vCutUv.y) : vec2(u, vCutUv.y);
|
|
183
|
-
|
|
201
|
+
// Kept a hair inside the sheet: a board's edges stand on its rim.
|
|
202
|
+
if (texture2D(uCut, clamp(st, 0.002, 0.998)).a < 0.5) discard;
|
|
184
203
|
}
|
|
185
204
|
`;
|
|
205
|
+
/**
|
|
206
|
+
* The edges of a board in the air (#1586): a unit box's four sides (its
|
|
207
|
+
* two faces are the leaf's meshes), its colour the board's. Each side
|
|
208
|
+
* stands only where the leaf has paper at its rim: a rounded or shaped
|
|
209
|
+
* outline takes its edges with it. Without a lid between the two faces a
|
|
210
|
+
* hole stays open through the board's thickness.
|
|
211
|
+
*/
|
|
212
|
+
export function boardEdges(cut) {
|
|
213
|
+
const box = new BoxGeometry(1, 1, 1);
|
|
214
|
+
// A box's groups run +x, −x, +y, −y, +z, −z: the faces are the last two.
|
|
215
|
+
const sides = box.groups.slice(0, 4).reduce((n, g) => n + g.count, 0);
|
|
216
|
+
box.setIndex(Array.from(box.index.array.slice(0, sides)));
|
|
217
|
+
box.clearGroups();
|
|
218
|
+
const material = new MeshStandardMaterial({ roughness: 0.8 });
|
|
219
|
+
material.onBeforeCompile = (shader) => {
|
|
220
|
+
Object.assign(shader.uniforms, cut);
|
|
221
|
+
shader.vertexShader = shader.vertexShader
|
|
222
|
+
.replace("#include <common>", "#include <common>\nvarying vec2 vCutUv;")
|
|
223
|
+
// The box's x runs from the spine (−½) to the fore-edge, y from foot
|
|
224
|
+
// to head: the leaf's own uv.
|
|
225
|
+
.replace("#include <begin_vertex>", "#include <begin_vertex>\nvCutUv = position.xy + 0.5;");
|
|
226
|
+
shader.fragmentShader = shader.fragmentShader
|
|
227
|
+
.replace("#include <common>", `#include <common>\n${CUT_UV_PARS}`)
|
|
228
|
+
.replace("#include <clipping_planes_fragment>", `#include <clipping_planes_fragment>\n${CUT_DISCARD}`);
|
|
229
|
+
};
|
|
230
|
+
return { geometry: box, material };
|
|
231
|
+
}
|
|
186
232
|
/** The same discard for the height-map caster of a cut leaf. */
|
|
187
233
|
export const CASTER_CUT = { pars: CUT_UV_PARS, discard: CUT_DISCARD };
|
|
234
|
+
/** The leaf's cut uniforms its depth material and its board's edges share,
|
|
235
|
+
* made once per mesh. */
|
|
236
|
+
export const leafCutOf = (mesh) => (mesh.userData.leafCut ??= leafCut());
|
|
188
237
|
/**
|
|
189
238
|
* Sets a page mesh's cut uniforms from the pages on its faces: which face
|
|
190
239
|
* is cut, what its holes show (open pages), a leaf's thickness, and for a
|
|
191
240
|
* leaf in the air its key-light depth material and its caster, which
|
|
192
|
-
* discard the holes (the shared caster again once it is not cut).
|
|
241
|
+
* discard the holes (the shared caster again once it is not cut). `desk`:
|
|
242
|
+
* nothing lies past the book's end but the desk (no case), so an open page
|
|
243
|
+
* whose holes reach it lets the key light through them too.
|
|
193
244
|
*/
|
|
194
|
-
export function dressCut(mesh, sources, leafDepth, caster) {
|
|
245
|
+
export function dressCut(mesh, sources, leafDepth, caster, desk = false) {
|
|
195
246
|
const u = mesh.material.userData.uniforms;
|
|
196
247
|
const front = mesh.userData.Front;
|
|
197
248
|
const back = mesh.userData.Back;
|
|
@@ -208,28 +259,39 @@ export function dressCut(mesh, sources, leafDepth, caster) {
|
|
|
208
259
|
u.uBackThrough.value = bt?.texture ?? null;
|
|
209
260
|
u.uHasBackThrough.value = bt ? 1 : 0;
|
|
210
261
|
u.uThroughLayers.value = Math.max(ft?.layers ?? 0, bt?.layers ?? 0);
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
262
|
+
u.uFrontEnd.value = ft?.end ? ft.layers : 0;
|
|
263
|
+
u.uBackEnd.value = bt?.end ? bt.layers : 0;
|
|
264
|
+
u.uSeeDesk.value = desk ? 1 : 0;
|
|
265
|
+
const air = u.uCutMode.value === CUT_AIR;
|
|
266
|
+
// The face's holes, from whichever face is painted and cut.
|
|
214
267
|
const tex = fc && u.uFront.value ? u.uFront.value : bc && u.uBack.value ? u.uBack.value : null;
|
|
268
|
+
const shared = leafCutOf(mesh);
|
|
269
|
+
shared.uCut.value = tex;
|
|
270
|
+
shared.uHasCut.value = tex ? 1 : 0;
|
|
271
|
+
shared.uCutBack.value = tex && tex !== u.uFront.value ? 1 : 0;
|
|
272
|
+
shared.uMirror.value = u.uMirror.value;
|
|
273
|
+
// An open page drops its holes from the key light's depth only where the
|
|
274
|
+
// desk shows through them: elsewhere the pages beneath are its own
|
|
275
|
+
// picture, shadowed by the walk.
|
|
276
|
+
const throughToDesk = open && desk && !!(ft?.end || bt?.end);
|
|
215
277
|
const casterMesh = mesh.userData.caster;
|
|
216
|
-
if (!tex) {
|
|
278
|
+
if (!tex || !(air || throughToDesk)) {
|
|
217
279
|
mesh.customDepthMaterial = undefined;
|
|
218
280
|
if (casterMesh)
|
|
219
281
|
casterMesh.material = caster.shared;
|
|
220
282
|
return;
|
|
221
283
|
}
|
|
222
|
-
|
|
284
|
+
mesh.customDepthMaterial = (mesh.userData.cutDepth ??= cutDepthMaterial(shared));
|
|
285
|
+
if (!casterMesh)
|
|
286
|
+
return;
|
|
223
287
|
const cutCaster = (mesh.userData.cutCaster ??= caster.cut());
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
if (casterMesh)
|
|
231
|
-
casterMesh.material = cutCaster;
|
|
288
|
+
const c = cutCaster.uniforms;
|
|
289
|
+
c.uCut.value = tex;
|
|
290
|
+
c.uCutBack.value = shared.uCutBack.value;
|
|
291
|
+
c.uMirror.value = shared.uMirror.value;
|
|
292
|
+
c.uHasCut.value = 1;
|
|
293
|
+
casterMesh.material = cutCaster;
|
|
232
294
|
}
|
|
233
295
|
/** The caster discard's uniforms, fresh for each cut leaf. */
|
|
234
|
-
export const casterCut = () => ({ ...CASTER_CUT, uniforms: {
|
|
296
|
+
export const casterCut = () => ({ ...CASTER_CUT, uniforms: { ...leafCut() } });
|
|
235
297
|
//# sourceMappingURL=through.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"through.js","sourceRoot":"","sources":["../../src/pageFlip/through.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAC3E,wEAAwE;AACxE,4BAA4B;AAC5B,wEAAwE;AACxE,0EAA0E;AAC1E,2EAA2E;AAC3E,uEAAuE;AACvE,0EAA0E;AAC1E,0EAA0E;AAC1E,
|
|
1
|
+
{"version":3,"file":"through.js","sourceRoot":"","sources":["../../src/pageFlip/through.ts"],"names":[],"mappings":"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"}
|
package/dist/pageFlip.d.ts
CHANGED
|
@@ -240,6 +240,10 @@ export declare class PageFlipper {
|
|
|
240
240
|
/** A mesh's faces' finish masks, and the clear coat a varnish needs;
|
|
241
241
|
* their die-cuts (#1569). */
|
|
242
242
|
private dressFinish;
|
|
243
|
+
/** Nothing lies under the book's outer leaves but the desk: its own
|
|
244
|
+
* printed covers stand for the case (or folded sheets have none), so a
|
|
245
|
+
* hole through to the end of the book shows the desk (#1586). */
|
|
246
|
+
private onDesk;
|
|
243
247
|
/** The special inks of the pages (#1568): page source → its finish
|
|
244
248
|
* mask. Pages left out have none; their textures are freed. */
|
|
245
249
|
setFinishes(finishes: ReadonlyMap<PageSource, FaceFinish>): void;
|
package/dist/pageFlip.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pageFlip.d.ts","sourceRoot":"","sources":["../src/pageFlip.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"pageFlip.d.ts","sourceRoot":"","sources":["../src/pageFlip.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,KAAK,WAAW,EAAE,KAAK,gBAAgB,EAAgD,MAAM,SAAS,CAAC;AAYhH,OAAO,EAA+B,KAAK,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAIpF,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAE9E;wDACwD;AACxD,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,iBAAiB,GAAG,gBAAgB,GAAG,IAAI,CAAC;AAE9E,gCAAgC;AAChC,MAAM,MAAM,SAAS,GAAG,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;AAIjD;;;;;;;;;GASG;AACH,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACjC,MAAM,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACjC,IAAI,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC/B,IAAI,CAAC,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;CAChE;AAED,uDAAuD;AACvD,MAAM,WAAW,SAAS;IACxB,GAAG,EAAE,UAAU,CAAC;IAChB,OAAO,EAAE,gBAAgB,CAAC;IAC1B,KAAK,EAAE,cAAc,CAAC;CACvB;AAED;;;sBAGsB;AACtB,MAAM,WAAW,cAAc;IAC7B,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,iDAAiD;IACjD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,6DAA6D;IAC7D,WAAW,CAAC,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAChD,sDAAsD;IACtD,UAAU,CAAC,EAAE,SAAS,CAAC,gBAAgB,GAAG,SAAS,CAAC,EAAE,CAAC;IACvD;uEACmE;IACnE,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;;gBAGY;IACZ,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB;;oEAEgE;IAChE,WAAW,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAChD;;;4DAGwD;IACxD,UAAU,CAAC,EAAE,UAAU,CAAC;CACzB;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,qBAAa,WAAW;IAkGpB,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,IAAI;IAEZ,OAAO,CAAC,QAAQ;IAChB,2DAA2D;IAC3D,OAAO,CAAC,QAAQ;IAvGlB,OAAO,CAAC,QAAQ,CAAgB;IAChC,OAAO,CAAC,KAAK,CAAe;IAC5B,OAAO,CAAC,MAAM,CAA2C;IACzD,OAAO,CAAC,QAAQ,CAAiB;IACjC,OAAO,CAAC,IAAI,CAAW;IACvB,OAAO,CAAC,KAAK,CAAW;IACxB,OAAO,CAAC,IAAI,CAAgC;IAC5C,OAAO,CAAC,MAAM,CAAoD;IAClE,OAAO,CAAC,MAAM,CAAe;IAC7B,OAAO,CAAC,aAAa,CAAuB;IAC5C,sEAAsE;IACtE,OAAO,CAAC,QAAQ,CAAoB;IACpC,OAAO,CAAC,QAAQ,CAAwB;IACxC,OAAO,CAAC,UAAU,CAAmD;IACrE;;;+DAG2D;IAC3D,OAAO,CAAC,KAAK,CAA0C;IACvD,OAAO,CAAC,IAAI,CAAiC;IAC7C,OAAO,CAAC,KAAK,CAAuB;IACpC,OAAO,CAAC,GAAG,CAAqC;IAChD,OAAO,CAAC,KAAK,CAA+B;IAC5C,OAAO,CAAC,OAAO,CAAgC;IAC/C,OAAO,CAAC,GAAG,CAA4B;IACvC;6BACyB;IACzB,OAAO,CAAC,KAAK,CAAe;IAC5B,yDAAyD;IACzD,OAAO,CAAC,IAAI,CAAS;IACrB,OAAO,CAAC,WAAW,CAAe;IAClC,OAAO,CAAC,YAAY,CAAiD;IACrE,OAAO,CAAC,YAAY,CAAkC;IACtD;wEACoE;IACpE,OAAO,CAAC,OAAO,CAAoG;IACnH,OAAO,CAAC,YAAY,CAA2B;IAC/C,OAAO,CAAC,QAAQ,CAAS;IACzB,iEAAiE;IACjE,OAAO,CAAC,YAAY,CAAkC;IACtD,iEAAiE;IACjE,OAAO,CAAC,MAAM,CAAqB;IACnC,OAAO,CAAC,GAAG,CAAK;IAChB;sBACkB;IAClB,OAAO,CAAC,UAAU,CAAiB;IACnC,OAAO,CAAC,YAAY,CAAiB;IACrC,OAAO,CAAC,aAAa,CAAc;IACnC,OAAO,CAAC,MAAM,CAA+B;IAC7C,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,QAAQ,CAA6C;IAC7D,OAAO,CAAC,KAAK,CAA6B;IAC1C,OAAO,CAAC,CAAC,CAAK;IACd,OAAO,CAAC,CAAC,CAAK;IACd,+BAA+B;IAC/B,OAAO,CAAC,MAAM,CAAY;IAC1B,OAAO,CAAC,KAAK,CAA2B;IACxC;8DAC0D;IAC1D,OAAO,CAAC,KAAK,CAAuD;IACpE,OAAO,CAAC,SAAS,CAAyB;IAC1C,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,GAAG,CAAK;IAChB,OAAO,CAAC,SAAS,CAAK;IACtB,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,QAAQ,CAAS;IACzB,gEAAgE;IAChE,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,UAAU,CAAU;IAC5B,OAAO,CAAC,MAAM,CAAS;IACvB,8CAA8C;IAC9C,OAAO,CAAC,KAAK,CAAK;IAClB,OAAO,CAAC,UAAU,CAAsB;IACxC,OAAO,CAAC,QAAQ,CAAsD;IACtE,OAAO,CAAC,QAAQ,CAA6C;IAC7D,OAAO,CAAC,SAAS,CAAmB;IACpC,uDAAuD;IACvD,OAAO,CAAC,SAAS,CAA0B;IAC3C,OAAO,CAAC,QAAQ,CAAyB;IACzC,wCAAwC;IACxC,OAAO,CAAC,UAAU,CAAM;IACxB,OAAO,CAAC,SAAS,CAAmB;IACpC;;sCAEkC;IAClC,OAAO,CAAC,KAAK,CAA4E;IACzF;;4DAEwD;IACxD,OAAO,CAAC,IAAI,CAAoF;IAChG,OAAO,CAAC,KAAK,CAAsB;IACnC,OAAO,CAAC,OAAO,CAAmE;IAClF,OAAO,CAAC,KAAK,CAAuC;IACpD,uDAAuD;IACvD,OAAO,CAAC,QAAQ,CAAwB;gBAG9B,MAAM,EAAE,iBAAiB,EACzB,MAAM,EAAE,WAAW,EACnB,IAAI,EAAE,SAAS,EAAE,EACzB,EAAE,EAAE,MAAM,EACF,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI;IACzC,2DAA2D;IACnD,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI;IACzC,qCAAqC;IACrC,OAAO,GAAE,MAAM,GAAG,OAAgB;IAClC;;;sEAGkE;IAClE,EAAE,UAAkB,EAAE,MAAY,EAAE,UAAe,EAAE,GAAE;QAAE,UAAU,CAAC,EAAE,OAAO,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,cAAc,CAAA;KAAO;IAoFpI,OAAO,CAAC,YAAY;IASpB;mDAC+C;IAC/C,aAAa,CAAC,UAAU,EAAE,cAAc;IA4HxC;;wDAEoD;IACpD,OAAO,CAAC,SAAS;IAsBjB,qEAAqE;IACrE,OAAO,CAAC,SAAS;IAMjB;;;;wEAIoE;IACpE,OAAO,CAAC,UAAU;IAkBlB,OAAO,CAAC,OAAO,CAAgD;IAE/D,iEAAiE;IACjE,OAAO,CAAC,MAAM;IAYd,OAAO,CAAC,SAAS;IAmCjB;kCAC8B;IAC9B,OAAO,CAAC,WAAW;IAUnB;;sEAEkE;IAClE,OAAO,CAAC,MAAM;IAId;oEACgE;IAChE,WAAW,CAAC,QAAQ,EAAE,WAAW,CAAC,UAAU,EAAE,UAAU,CAAC;IAQzD,OAAO,CAAC,OAAO;IAIf,+DAA+D;IAC/D,OAAO,CAAC,WAAW;IASnB,8CAA8C;IAC9C,OAAO,CAAC,OAAO;IAIf;6CACyC;IACzC,OAAO,CAAC,YAAY;IAIpB,mEAAmE;YACrD,SAAS;IAyBvB;;;;;OAKG;IACH,OAAO,CAAC,UAAU;IAyClB,OAAO,CAAC,UAAU;IAUlB,8EAA8E;IAC9E,OAAO,CAAC,SAAS;IAkKjB,2EAA2E;IAC3E,OAAO,CAAC,WAAW;IAiBnB;;;+EAG2E;IAC3E,OAAO,CAAC,MAAM;IAqGd,6DAA6D;IAC7D,OAAO,CAAC,IAAI;IAKZ,0DAA0D;IAC1D,OAAO,CAAC,IAAI;IAKZ,+DAA+D;IAC/D,OAAO,CAAC,IAAI;IAIZ;yEACqE;IACrE,IAAI,IAAI;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE;IASrC;0DACsD;IACtD,OAAO,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM;IAe9B;wBACoB;IACpB,UAAU;IA4BV,OAAO,CAAC,UAAU,CAAK;IAEvB,qEAAqE;IACrE,QAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM;IAMxC,oDAAoD;IACpD,OAAO,CAAC,MAAM,CAAmB;IACjC,8CAA8C;IAC9C,OAAO,CAAC,KAAK,CAA2B;IACxC,+CAA+C;IAC/C,OAAO,CAAC,QAAQ,CAAM;IAEtB;;;;;;;OAOG;IACH,SAAS,CAAC,MAAM,EAAE,SAAS,SAAS,EAAE;IAYtC,4DAA4D;IAC5D,QAAQ,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI;IAIhC;yEACqE;IACrE,OAAO,CAAC,UAAU;IAwBlB,OAAO,CAAC,WAAW;IAInB;qBACiB;IACjB,OAAO,CAAC,UAAU;IAIlB;wEACoE;IACpE,OAAO,CAAC,UAAU;IAwBlB;0DACsD;IACtD,KAAK,CAAC,GAAG,EAAE,UAAU;IAgBrB,6DAA6D;IAC7D,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE;IAIzB,OAAO,CAAC,OAAO;IA6Bf;;;;;OAKG;IACH,OAAO,CAAC,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,EAAE,MAAM;IAuCtC,OAAO,CAAC,MAAM;IAsBd,OAAO,CAAC,IAAI;IAYZ,iDAAiD;IACjD,OAAO,CAAC,QAAQ;IAchB;8EAC0E;IAC1E,OAAO,CAAC,SAAS;IASjB,kEAAkE;IAClE,OAAO,CAAC,cAAc;IAMtB;;;;;;OAMG;IACH,OAAO,CAAC,SAAS;IAgCjB,kEAAkE;IAClE,OAAO,CAAC,UAAU;IAgBlB,sDAAsD;IACtD,EAAE,CAAC,KAAK,EAAE,MAAM;IAwBhB,kDAAkD;IAClD,OAAO,CAAC,SAAS;IAKjB;mDAC+C;IAC/C,OAAO,CAAC,IAAI;IASZ,OAAO,CAAC,KAAK,CAwFX;IAEF,OAAO,CAAC,MAAM;IAYd;;0EAEsE;IACtE,OAAO,CAAC,OAAO;IAef,2DAA2D;IAC3D,OAAO,CAAC,KAAK;IAQb;;;;;;OAMG;IACH,SAAS,CAAC,KAAK,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,GAAG;QAAE,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAepG,0EAA0E;IAC1E,WAAW,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IA6B/E;sBACkB;IAClB,OAAO,CAAC,OAAO;IAIf;;qDAEiD;IACjD,GAAG,CAAC,KAAK,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC;IAO5D;qDACiD;IACjD,IAAI,CAAC,KAAK,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO;IAe1D,6CAA6C;IAC7C,IAAI,CAAC,KAAK,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE;IAUhD;;;0EAGsE;IACtE,OAAO,CAAC,QAAQ;IAoDhB;;;gCAG4B;IAC5B,OAAO,CAAC,KAAK,UAAQ;IA8CrB,OAAO,CAAC,IAAI;IAuHZ;;yDAEqD;IACrD,OAAO,CAAC,IAAI,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAMxF;2BACuB;IACvB,IAAI,cAAc,IAAI,MAAM,CAE3B;IAED;;yDAEqD;IACrD,SAAS,CAAC,OAAO,EAAE,WAAW,CAAC,UAAU,EAAE,UAAU,CAAC;IAiCtD;;;;mBAIe;IACf,OAAO,CAAC,SAAS;IAoCjB;;;;;;;;;;OAUG;IACH,OAAO,CAAC,MAAM;IAwCd;;;;;;;;;;OAUG;IACH,OAAO,CAAC,MAAM;IAyBd;6EACyE;IACzE,OAAO,CAAC,YAAY;IAYpB,4EAA4E;IAC5E,OAAO,CAAC,UAAU;IAMlB;wEACoE;IACpE,KAAK;IAOL;;kEAE8D;IAC9D,MAAM;IAUN,OAAO;CAsCR;AAED,mEAAmE;AACnE,wBAAgB,OAAO,IAAI,OAAO,CAOjC"}
|
package/dist/pageFlip.js
CHANGED
|
@@ -12,12 +12,12 @@ import { VideoAtlas, ATLAS_MAX, MAX_PAGE_VIDEOS } from './videoAtlas.js';
|
|
|
12
12
|
import { cachedDesk, cachedRelief, deskKind } from './procedural.js';
|
|
13
13
|
import { Loupe } from './loupe.js';
|
|
14
14
|
import { FOV, NX_OPEN, NX, NY, BLOCK_PAGES, DURATION, BLOCK_DURATION, GAP, GRIP } from './pageFlip/constants.js';
|
|
15
|
-
import { spreadColumns, column, MAX_PITCH, disposeLeaf, progressFrom, reach, foldOf, layLeaf, pagePlane } from './pageFlip/leaf.js';
|
|
15
|
+
import { spreadColumns, leafGeometry, setLeafFace, column, MAX_PITCH, disposeLeaf, progressFrom, reach, foldOf, layLeaf, pagePlane } from './pageFlip/leaf.js';
|
|
16
16
|
import { edgeMaterial, pageMaterial, withStockForExtent, edgeUniforms, edgeColorOf, ease, easeOut, smooth, behindUniforms } from './pageFlip/materials.js';
|
|
17
17
|
import { occluded, casterMaterial, casterGeometry, occlusionUniforms, syncCaster } from './pageFlip/occlusion.js';
|
|
18
18
|
import { FinishTextures, dressFinish } from './pageFlip/finish.js';
|
|
19
19
|
import { drawMirror } from './pageFlip/mirror.js';
|
|
20
|
-
import { CUT_AIR, CUT_OPEN, casterCut, dressCut } from './pageFlip/through.js';
|
|
20
|
+
import { CUT_AIR, CUT_OPEN, boardEdges, casterCut, dressCut, leafCutOf } from './pageFlip/through.js';
|
|
21
21
|
export { BLOCK_PAGES } from './pageFlip/constants.js';
|
|
22
22
|
export { withStockForExtent } from './pageFlip/materials.js';
|
|
23
23
|
export { foldOf, progressFrom, layLeaf, pagePlane } from './pageFlip/leaf.js';
|
|
@@ -494,7 +494,16 @@ export class PageFlipper {
|
|
|
494
494
|
const f = this.finishes;
|
|
495
495
|
const spec = mesh.material.userData.spec;
|
|
496
496
|
dressFinish(mesh.material, f.maskOf(mesh.userData.Front), f.maskOf(mesh.userData.Back), spec?.clearcoat ?? 0);
|
|
497
|
-
|
|
497
|
+
// An open page's caster is the book's at rest; a leaf's, its own.
|
|
498
|
+
const open = mesh === this.left || mesh === this.right;
|
|
499
|
+
const caster = open ? { shared: this.staticCaster, cut: () => casterMaterial(false, casterCut()) } : { shared: this.leafCaster, cut: () => casterMaterial(true, casterCut()) };
|
|
500
|
+
dressCut(mesh, f, (spec ?? this.bookSpec).caliperMm * this.pxPerMm(), caster, this.onDesk());
|
|
501
|
+
}
|
|
502
|
+
/** Nothing lies under the book's outer leaves but the desk: its own
|
|
503
|
+
* printed covers stand for the case (or folded sheets have none), so a
|
|
504
|
+
* hole through to the end of the book shows the desk (#1586). */
|
|
505
|
+
onDesk() {
|
|
506
|
+
return !!this.coverSpec || this.resolved.binding.type === "folded";
|
|
498
507
|
}
|
|
499
508
|
/** The special inks of the pages (#1568): page source → its finish
|
|
500
509
|
* mask. Pages left out have none; their textures are freed. */
|
|
@@ -763,6 +772,11 @@ export class PageFlipper {
|
|
|
763
772
|
this.shadowScene.add(c);
|
|
764
773
|
return c;
|
|
765
774
|
});
|
|
775
|
+
// The open pages' casters drop holes that go through to the desk.
|
|
776
|
+
this.left.userData.caster = this.staticCasters[0];
|
|
777
|
+
this.right.userData.caster = this.staticCasters[1];
|
|
778
|
+
this.dressFinish(this.left);
|
|
779
|
+
this.dressFinish(this.right);
|
|
766
780
|
occlusionUniforms.uOccRadius.value = 0.14 * W;
|
|
767
781
|
this.layoutLight();
|
|
768
782
|
}
|
|
@@ -1218,9 +1232,7 @@ export class PageFlipper {
|
|
|
1218
1232
|
}
|
|
1219
1233
|
/** A leaf's mesh, its pages not yet assigned. */
|
|
1220
1234
|
leafMesh() {
|
|
1221
|
-
const geometry =
|
|
1222
|
-
spreadColumns(geometry, NX);
|
|
1223
|
-
geometry.setAttribute("ao", new BufferAttribute(new Float32Array(geometry.attributes.position.count).fill(1), 1));
|
|
1235
|
+
const geometry = leafGeometry();
|
|
1224
1236
|
const mesh = new Mesh(geometry, pageMaterial(this.sign < 0, this.sign, CUT_AIR));
|
|
1225
1237
|
mesh.material.userData.uniforms.uPaper.value.setRGB(...this.paper, SRGBColorSpace);
|
|
1226
1238
|
mesh.castShadow = mesh.receiveShadow = true;
|
|
@@ -1296,13 +1308,11 @@ export class PageFlipper {
|
|
|
1296
1308
|
boardParts(mesh) {
|
|
1297
1309
|
let parts = mesh.userData.board;
|
|
1298
1310
|
if (!parts) {
|
|
1299
|
-
const
|
|
1300
|
-
spreadColumns(geometry, NX);
|
|
1301
|
-
geometry.setAttribute("ao", new BufferAttribute(new Float32Array(geometry.attributes.position.count).fill(1), 1));
|
|
1302
|
-
const back = new Mesh(geometry, mesh.material);
|
|
1311
|
+
const back = new Mesh(leafGeometry(), mesh.material);
|
|
1303
1312
|
back.castShadow = back.receiveShadow = true;
|
|
1304
1313
|
back.frustumCulled = false;
|
|
1305
|
-
const
|
|
1314
|
+
const edges = boardEdges(leafCutOf(mesh));
|
|
1315
|
+
const slab = new Mesh(edges.geometry, edges.material);
|
|
1306
1316
|
slab.castShadow = slab.receiveShadow = true;
|
|
1307
1317
|
mesh.add(back, slab);
|
|
1308
1318
|
parts = { back, slab };
|
|
@@ -1730,6 +1740,8 @@ export class PageFlipper {
|
|
|
1730
1740
|
const lay = (geometry, face) => layLeaf(geometry, fold, forward, W, H, Math.min(lift, 0.6), book, 1, q, 0, now, { thick, face });
|
|
1731
1741
|
const { phi, pivot } = lay(mesh.geometry, 1);
|
|
1732
1742
|
lay(parts.back.geometry, -1);
|
|
1743
|
+
setLeafFace(mesh.geometry, 1);
|
|
1744
|
+
setLeafFace(parts.back.geometry, -1);
|
|
1733
1745
|
parts.slab.position.set((W / 2) * Math.cos(phi), 0, pivot + (W / 2) * Math.sin(phi));
|
|
1734
1746
|
parts.slab.rotation.set(0, -phi, 0);
|
|
1735
1747
|
parts.slab.scale.set(W, H, thick * 0.97);
|
|
@@ -1738,6 +1750,7 @@ export class PageFlipper {
|
|
|
1738
1750
|
}
|
|
1739
1751
|
else {
|
|
1740
1752
|
layLeaf(mesh.geometry, fold, forward, W, H, lift, book, spec.rigidity, q, flutter, now);
|
|
1753
|
+
setLeafFace(mesh.geometry, 0);
|
|
1741
1754
|
const parts = mesh.userData.board;
|
|
1742
1755
|
if (parts)
|
|
1743
1756
|
parts.back.visible = parts.slab.visible = false;
|
|
@@ -1765,6 +1778,8 @@ export class PageFlipper {
|
|
|
1765
1778
|
const lay = (geometry, face) => layLeaf(geometry, null, turn.forward, W, H, 0.5, book, 1, q, 0, 0, { thick, face });
|
|
1766
1779
|
const { phi, pivot } = lay(mesh.geometry, 1);
|
|
1767
1780
|
lay(parts.back.geometry, -1);
|
|
1781
|
+
setLeafFace(mesh.geometry, 1);
|
|
1782
|
+
setLeafFace(parts.back.geometry, -1);
|
|
1768
1783
|
parts.slab.position.set((W / 2) * Math.cos(phi), 0, pivot + (W / 2) * Math.sin(phi));
|
|
1769
1784
|
parts.slab.rotation.set(0, -phi, 0);
|
|
1770
1785
|
parts.slab.scale.set(W, H, thick * 0.97);
|
|
@@ -2076,6 +2091,9 @@ export class PageFlipper {
|
|
|
2076
2091
|
disposeLeaf(mesh);
|
|
2077
2092
|
if (this.blockMesh)
|
|
2078
2093
|
disposeLeaf(this.blockMesh);
|
|
2094
|
+
for (const mesh of [this.left, this.right])
|
|
2095
|
+
for (const key of ["cutDepth", "cutCaster"])
|
|
2096
|
+
mesh.userData[key]?.dispose();
|
|
2079
2097
|
for (const mesh of [this.left, this.right, this.desk, ...this.stacks]) {
|
|
2080
2098
|
mesh.geometry.dispose();
|
|
2081
2099
|
mesh.material.dispose();
|