prts-terrarchive 0.2.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/GAME_ASSETS.md +26 -0
- package/LICENSE +21 -0
- package/README.en.md +274 -0
- package/README.md +423 -0
- package/THIRD_PARTY_NOTICES.md +61 -0
- package/bin/bake-rhine-details.mjs +34 -0
- package/bin/install.js +273 -0
- package/bin/pack-map-assets.mjs +110 -0
- package/bin/preview-rhine.mjs +71 -0
- package/bin/rhine-detail-baker.ts +84 -0
- package/contracts/cloud_tools_v1.schema.json +243 -0
- package/contracts/corpus_i18n_v1.schema.json +179 -0
- package/contracts/corpus_tools_v1.schema.json +1801 -0
- package/cordis.patch.yml +32 -0
- package/docs/endfield-official-i18n.md +103 -0
- package/lib/client.js +3912 -0
- package/lib/endfield-map/map.js.br +0 -0
- package/lib/endfield-map/map.js.gz +0 -0
- package/lib/endfield-map/resources/map-00b0d0744a1b4404.json.br +0 -0
- package/lib/endfield-map/resources/map-00b0d0744a1b4404.json.gz +0 -0
- package/lib/endfield-map/resources/map-01616f534aaaeca1.png +0 -0
- package/lib/endfield-map/resources/map-1562e0dff4be3d23.png +0 -0
- package/lib/endfield-map/resources/map-160fe040f080f6a3.png +0 -0
- package/lib/endfield-map/resources/map-17b9d8be25dc2b39.json.br +0 -0
- package/lib/endfield-map/resources/map-17b9d8be25dc2b39.json.gz +0 -0
- package/lib/endfield-map/resources/map-1c4245c4e8b80c43.json.br +0 -0
- package/lib/endfield-map/resources/map-1c4245c4e8b80c43.json.gz +0 -0
- package/lib/endfield-map/resources/map-1d30baaaef3e29cc.png +0 -0
- package/lib/endfield-map/resources/map-21a61386af79cd12.json.br +0 -0
- package/lib/endfield-map/resources/map-21a61386af79cd12.json.gz +0 -0
- package/lib/endfield-map/resources/map-24b920b8dab49b44.json.br +0 -0
- package/lib/endfield-map/resources/map-24b920b8dab49b44.json.gz +0 -0
- package/lib/endfield-map/resources/map-26caf8d71247abb7.png +0 -0
- package/lib/endfield-map/resources/map-2729942c89545e73.json.br +0 -0
- package/lib/endfield-map/resources/map-2729942c89545e73.json.gz +0 -0
- package/lib/endfield-map/resources/map-29063a9802f67014.json.br +0 -0
- package/lib/endfield-map/resources/map-29063a9802f67014.json.gz +0 -0
- package/lib/endfield-map/resources/map-2f35d09a3ab60a63.json.br +0 -0
- package/lib/endfield-map/resources/map-2f35d09a3ab60a63.json.gz +0 -0
- package/lib/endfield-map/resources/map-2f98a873da81425e.json.br +0 -0
- package/lib/endfield-map/resources/map-2f98a873da81425e.json.gz +0 -0
- package/lib/endfield-map/resources/map-3ab978ae44190f80.json.br +0 -0
- package/lib/endfield-map/resources/map-3ab978ae44190f80.json.gz +0 -0
- package/lib/endfield-map/resources/map-3b62c80d14208902.json.br +0 -0
- package/lib/endfield-map/resources/map-3b62c80d14208902.json.gz +0 -0
- package/lib/endfield-map/resources/map-3d486e887ae121ac.png +0 -0
- package/lib/endfield-map/resources/map-418dc4865608fce5.png +0 -0
- package/lib/endfield-map/resources/map-4366b84607335f76.json.br +0 -0
- package/lib/endfield-map/resources/map-4366b84607335f76.json.gz +0 -0
- package/lib/endfield-map/resources/map-4371259d3ab7aac7.png +0 -0
- package/lib/endfield-map/resources/map-48dcc0fd55e13f7f.png +0 -0
- package/lib/endfield-map/resources/map-4aabda0e41197570.json.br +0 -0
- package/lib/endfield-map/resources/map-4aabda0e41197570.json.gz +0 -0
- package/lib/endfield-map/resources/map-505f5687b287043c.json.br +0 -0
- package/lib/endfield-map/resources/map-505f5687b287043c.json.gz +0 -0
- package/lib/endfield-map/resources/map-5177e9d1d46f47e2.png +0 -0
- package/lib/endfield-map/resources/map-51baeb59b7f8c28d.png +0 -0
- package/lib/endfield-map/resources/map-549561b46e621874.png +0 -0
- package/lib/endfield-map/resources/map-56c6a0bef799c8dc.json.br +0 -0
- package/lib/endfield-map/resources/map-56c6a0bef799c8dc.json.gz +0 -0
- package/lib/endfield-map/resources/map-5a6963909423b674.png +0 -0
- package/lib/endfield-map/resources/map-5a9c533c0552d7b7.png +0 -0
- package/lib/endfield-map/resources/map-5d20ae9ffa9a02b0.png +0 -0
- package/lib/endfield-map/resources/map-626c8847393f60bf.png +0 -0
- package/lib/endfield-map/resources/map-63d43cbec3bed3b8.png +0 -0
- package/lib/endfield-map/resources/map-661b6ec56e722574.png +0 -0
- package/lib/endfield-map/resources/map-6ddd384eca190828.png +0 -0
- package/lib/endfield-map/resources/map-6fc1aa9144f8156c.json.br +0 -0
- package/lib/endfield-map/resources/map-6fc1aa9144f8156c.json.gz +0 -0
- package/lib/endfield-map/resources/map-738ebaa002c33cfc.png +0 -0
- package/lib/endfield-map/resources/map-758c13be6085ec07.json.br +0 -0
- package/lib/endfield-map/resources/map-758c13be6085ec07.json.gz +0 -0
- package/lib/endfield-map/resources/map-78929f26d6844509.png +0 -0
- package/lib/endfield-map/resources/map-7f09c142950a0f74.png +0 -0
- package/lib/endfield-map/resources/map-8385e11f39e1a51c.json.br +0 -0
- package/lib/endfield-map/resources/map-8385e11f39e1a51c.json.gz +0 -0
- package/lib/endfield-map/resources/map-881343926a568f27.json.br +0 -0
- package/lib/endfield-map/resources/map-881343926a568f27.json.gz +0 -0
- package/lib/endfield-map/resources/map-8d1ade3f01d952b0.png +0 -0
- package/lib/endfield-map/resources/map-8fef3495bb7ed60f.png +0 -0
- package/lib/endfield-map/resources/map-907a7ecf8a0ce352.png +0 -0
- package/lib/endfield-map/resources/map-9113d5951c4db903.json.br +0 -0
- package/lib/endfield-map/resources/map-9113d5951c4db903.json.gz +0 -0
- package/lib/endfield-map/resources/map-94ad6634436224e3.json.br +0 -0
- package/lib/endfield-map/resources/map-94ad6634436224e3.json.gz +0 -0
- package/lib/endfield-map/resources/map-99722e61da5f3e53.png +0 -0
- package/lib/endfield-map/resources/map-9be9596cc059abe3.png +0 -0
- package/lib/endfield-map/resources/map-a4db9a4763e47fbf.png +0 -0
- package/lib/endfield-map/resources/map-a4e8ef07159997e7.json.br +0 -0
- package/lib/endfield-map/resources/map-a4e8ef07159997e7.json.gz +0 -0
- package/lib/endfield-map/resources/map-ab35d06875ee418f.png +0 -0
- package/lib/endfield-map/resources/map-ac51bb3e7623cd8b.png +0 -0
- package/lib/endfield-map/resources/map-ac830a66296bc83a.png +0 -0
- package/lib/endfield-map/resources/map-b3fd04209718e55e.json.br +0 -0
- package/lib/endfield-map/resources/map-b3fd04209718e55e.json.gz +0 -0
- package/lib/endfield-map/resources/map-b8164f1af7c5d895.png +0 -0
- package/lib/endfield-map/resources/map-b8cde93b965384d8.json.br +0 -0
- package/lib/endfield-map/resources/map-b8cde93b965384d8.json.gz +0 -0
- package/lib/endfield-map/resources/map-b8e48511502e0e8d.json.br +0 -0
- package/lib/endfield-map/resources/map-b8e48511502e0e8d.json.gz +0 -0
- package/lib/endfield-map/resources/map-bfc58277d5ba649d.png +0 -0
- package/lib/endfield-map/resources/map-c013f82048c6891a.png +0 -0
- package/lib/endfield-map/resources/map-c49c947841ae4ab5.json.br +0 -0
- package/lib/endfield-map/resources/map-c49c947841ae4ab5.json.gz +0 -0
- package/lib/endfield-map/resources/map-c4d1b1c6d6706c81.json.br +0 -0
- package/lib/endfield-map/resources/map-c4d1b1c6d6706c81.json.gz +0 -0
- package/lib/endfield-map/resources/map-c607f8b4c8ad8967.png +0 -0
- package/lib/endfield-map/resources/map-c6f20276b8781326.json.br +0 -0
- package/lib/endfield-map/resources/map-c6f20276b8781326.json.gz +0 -0
- package/lib/endfield-map/resources/map-d51adf5952af1e8e.png +0 -0
- package/lib/endfield-map/resources/map-d695eface22f8b74.json.br +0 -0
- package/lib/endfield-map/resources/map-d695eface22f8b74.json.gz +0 -0
- package/lib/endfield-map/resources/map-db11d394456a7465.png +0 -0
- package/lib/endfield-map/resources/map-dcc4d218581e3dc6.png +0 -0
- package/lib/endfield-map/resources/map-ddd43dbb8ab8a4e3.json.br +0 -0
- package/lib/endfield-map/resources/map-ddd43dbb8ab8a4e3.json.gz +0 -0
- package/lib/endfield-map/resources/map-defe5db7dabf748a.png +0 -0
- package/lib/endfield-map/resources/map-e1aeb833e22520aa.json.br +0 -0
- package/lib/endfield-map/resources/map-e1aeb833e22520aa.json.gz +0 -0
- package/lib/endfield-map/resources/map-e25ee9af6e493500.png +0 -0
- package/lib/endfield-map/resources/map-e3824082cd6f747d.json.br +0 -0
- package/lib/endfield-map/resources/map-e3824082cd6f747d.json.gz +0 -0
- package/lib/endfield-map/resources/map-e694a91e630b1bd6.png +0 -0
- package/lib/endfield-map/resources/map-eaa93af79d12a87d.png +0 -0
- package/lib/endfield-map/resources/map-ec9575ee65d7766f.json.br +0 -0
- package/lib/endfield-map/resources/map-ec9575ee65d7766f.json.gz +0 -0
- package/lib/endfield-map/resources/map-ede421a329dc78a4.png +0 -0
- package/lib/endfield-map/resources/map-eff3bce8f6888fc5.json.br +0 -0
- package/lib/endfield-map/resources/map-eff3bce8f6888fc5.json.gz +0 -0
- package/lib/endfield-map/resources/map-fb5f4a59a181452c.png +0 -0
- package/lib/endfield-map/resources/map-fdeaa17eeba90d8e.json.br +0 -0
- package/lib/endfield-map/resources/map-fdeaa17eeba90d8e.json.gz +0 -0
- package/lib/rhine/assets/archive-assembly.glb +0 -0
- package/lib/rhine/assets/archive-cassette.glb +0 -0
- package/lib/rhine/fonts/MiSans-Bold.woff2 +0 -0
- package/lib/rhine/fonts/MiSans-Demibold.woff2 +0 -0
- package/lib/rhine/fonts/MiSans-Light.woff2 +0 -0
- package/lib/rhine/fonts/MiSans-Regular.woff2 +0 -0
- package/lib/rhine/fonts/MiSans-license.pdf +0 -0
- package/lib/rhine/fonts/NOTICE.txt +6 -0
- package/lib/rhine/licenses/RhineLabUI-MIT.txt +21 -0
- package/lib/rhine/licenses/entities-BSD-2-Clause.txt +11 -0
- package/lib/rhine/licenses/linkify-it-MIT.txt +22 -0
- package/lib/rhine/licenses/markdown-it-MIT.txt +22 -0
- package/lib/rhine/licenses/mdurl-MIT.txt +45 -0
- package/lib/rhine/licenses/punycode.js-MIT.txt +20 -0
- package/lib/rhine/licenses/rolling-number-MIT.txt +21 -0
- package/lib/rhine/licenses/three-MIT.txt +21 -0
- package/lib/rhine/licenses/uc.micro-MIT.txt +20 -0
- package/lib/rhine/rhine.css +1 -0
- package/lib/rhine/rhine.js +5106 -0
- package/lib/skins/common.css +31 -0
- package/lib/skins/endfield-aic.css +141 -0
- package/lib/skins/prts-agent.css +136 -0
- package/lib/skins/rhine-lab.css +70 -0
- package/package.json +112 -0
- package/presets/definition.js +26 -0
- package/presets/prts/agent.cordis.yml +25 -0
- package/presets/prts/preset.yml +3 -0
- package/presets/register.js +86 -0
- package/resources/entity-routing.json +21 -0
- package/skills/prts-investigation/SKILL.md +121 -0
- package/skills/prts-retrieval/SKILL.md +35 -0
- package/skills/prts-retrieval/references/cloud-tools.md +13 -0
- package/skills/prts-retrieval/references/diagnostics.md +15 -0
- package/skills/prts-retrieval/references/local-tools.md +24 -0
- package/skills/prts-retrieval/references/module-arknights.md +23 -0
- package/skills/prts-retrieval/references/module-dual.md +15 -0
- package/skills/prts-retrieval/references/module-endfield.md +21 -0
- package/skills/prts-retrieval/references/retrieval-process.md +44 -0
- package/skills/prts-retrieval/references/retrieval-recipes-dual.md +34 -0
- package/skills/prts-retrieval/references/retrieval-recipes-endfield.md +37 -0
- package/skills/prts-retrieval/references/retrieval-recipes.md +39 -0
- package/skills/prts-retrieval/references/tools-runtime.md +48 -0
- package/skills/prts-retrieval/references/wiki-schema.md +38 -0
- package/src/archive-presentation.js +287 -0
- package/src/cloud-projection.js +124 -0
- package/src/cloud.js +498 -0
- package/src/entity-recognizer.js +311 -0
- package/src/entity-routing.js +82 -0
- package/src/evidence-state.js +332 -0
- package/src/i18n.js +365 -0
- package/src/index.js +1261 -0
- package/src/installer.js +1362 -0
- package/src/investigation-review.js +87 -0
- package/src/investigation-store.js +579 -0
- package/src/investigation-tools.js +113 -0
- package/src/localization-format.js +23 -0
- package/src/manual-search.js +103 -0
- package/src/read.js +1097 -0
- package/src/release-compatibility.js +73 -0
- package/src/release-watch.js +40 -0
- package/src/search-projection.js +139 -0
- package/src/search.js +1522 -0
- package/src/skill.js +98 -0
- package/src/source-map.js +348 -0
- package/src/state.js +314 -0
- package/src/store.js +1569 -0
- package/src/timeline.js +386 -0
- package/src/ui.js +1353 -0
- package/src/wiki.js +111 -0
- package/tsconfig.rhine.json +15 -0
- package/ui/rhine/archive-navigation-limit.ts +31 -0
- package/ui/rhine/archive-rack.ts +83 -0
- package/ui/rhine/assets/evidence-observatory.webp +0 -0
- package/ui/rhine/board-plane-transform.ts +24 -0
- package/ui/rhine/catalogue.ts +72 -0
- package/ui/rhine/deferred-preparation.ts +146 -0
- package/ui/rhine/evidence-board-controls.css +22 -0
- package/ui/rhine/evidence-board-history.ts +73 -0
- package/ui/rhine/evidence-board-model.ts +189 -0
- package/ui/rhine/evidence-board-panel.ts +762 -0
- package/ui/rhine/evidence-board-scene.ts +548 -0
- package/ui/rhine/evidence-board.css +191 -0
- package/ui/rhine/evidence-card-art.ts +470 -0
- package/ui/rhine/evidence-card-style.ts +17 -0
- package/ui/rhine/evidence-inbox-scene.ts +43 -0
- package/ui/rhine/evidence-inbox.css +29 -0
- package/ui/rhine/evidence-inbox.ts +104 -0
- package/ui/rhine/index.ts +12 -0
- package/ui/rhine/interaction.css +20 -0
- package/ui/rhine/investigation-board-plane.ts +5 -0
- package/ui/rhine/investigation-board.css +34 -0
- package/ui/rhine/investigation-board.ts +348 -0
- package/ui/rhine/investigation-edits.ts +46 -0
- package/ui/rhine/investigation-layout.ts +29 -0
- package/ui/rhine/label-prefetch.ts +34 -0
- package/ui/rhine/looping-title.ts +40 -0
- package/ui/rhine/manual-search.css +41 -0
- package/ui/rhine/manual-search.ts +89 -0
- package/ui/rhine/original/appearance.ts +180 -0
- package/ui/rhine/original/archive-label.ts +84 -0
- package/ui/rhine/original/archive-lighting.ts +39 -0
- package/ui/rhine/original/archive-loop.ts +82 -0
- package/ui/rhine/original/archive-refill.ts +64 -0
- package/ui/rhine/original/array-detail-data.ts +2 -0
- package/ui/rhine/original/array-detail.ts +41 -0
- package/ui/rhine/original/array-interior.ts +411 -0
- package/ui/rhine/original/array-occlusion.ts +166 -0
- package/ui/rhine/original/array-shell.ts +38 -0
- package/ui/rhine/original/array-visibility.ts +309 -0
- package/ui/rhine/original/asset-url.ts +4 -0
- package/ui/rhine/original/brand.ts +12 -0
- package/ui/rhine/original/cassette-lod.ts +81 -0
- package/ui/rhine/original/data.ts +21 -0
- package/ui/rhine/original/decryption.ts +185 -0
- package/ui/rhine/original/detail-signature.ts +18 -0
- package/ui/rhine/original/glass-reveal.ts +45 -0
- package/ui/rhine/original/internal-optics.ts +70 -0
- package/ui/rhine/original/label-renderer.ts +119 -0
- package/ui/rhine/original/label-textures.ts +117 -0
- package/ui/rhine/original/model-viewer.ts +658 -0
- package/ui/rhine/original/motion.ts +116 -0
- package/ui/rhine/original/opaque-backfaces.ts +64 -0
- package/ui/rhine/original/program-preparation.ts +111 -0
- package/ui/rhine/original/quality-renderer.ts +97 -0
- package/ui/rhine/original/quality-settings.ts +111 -0
- package/ui/rhine/original/render-quality.ts +163 -0
- package/ui/rhine/original/scene.ts +2051 -0
- package/ui/rhine/original/shelf-interior.ts +142 -0
- package/ui/rhine/original/ui-transitions.ts +111 -0
- package/ui/rhine/original/viewer-camera.ts +92 -0
- package/ui/rhine/original/viewport-layout.ts +41 -0
- package/ui/rhine/original-ui.css +2334 -0
- package/ui/rhine/readability.css +46 -0
- package/ui/rhine/reading-object.ts +96 -0
- package/ui/rhine/reading-origin.ts +28 -0
- package/ui/rhine/reading-room.css +55 -0
- package/ui/rhine/report-markdown.ts +98 -0
- package/ui/rhine/scene-edge-navigation.ts +84 -0
- package/ui/rhine/scene.ts +1726 -0
- package/ui/rhine/shelf-layout.ts +38 -0
- package/ui/rhine/snapshot-update-gate.ts +22 -0
- package/ui/rhine/source-reading.ts +15 -0
- package/ui/rhine/source-selection.css +164 -0
- package/ui/rhine/temporary-performance-observers.ts +163 -0
- package/ui/rhine/temporary-performance-panel.ts +124 -0
- package/ui/rhine/temporary-performance.css +19 -0
- package/ui/rhine/temporary-performance.ts +552 -0
- package/ui/rhine/temporary-render-diagnostics.ts +105 -0
- package/ui/rhine/tool-activity.ts +69 -0
- package/ui/rhine/types.ts +219 -0
- package/ui/rhine/visible-scene-hit.ts +13 -0
- package/ui/rhine/workbench.css +818 -0
- package/ui/rhine/workbench.ts +2245 -0
- package/ui/rhine/workspace-travel.ts +32 -0
- package/vite.rhine.config.ts +19 -0
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import type { ArchiveCell } from './archive-loop';
|
|
2
|
+
|
|
3
|
+
type LaneRefill = { holes: number[]; elapsed: number; duration: number };
|
|
4
|
+
const ease = (value: number) => value ** 3 * (value * (value * 6 - 15) + 10);
|
|
5
|
+
|
|
6
|
+
/** Close physical vacancies with the existing rear row, without adding any meshes. */
|
|
7
|
+
export class ArchiveRefill {
|
|
8
|
+
private pending = new Map<number, Set<number>>();
|
|
9
|
+
private moving = new Map<number, LaneRefill>();
|
|
10
|
+
|
|
11
|
+
remove({ lane, row }: ArchiveCell) {
|
|
12
|
+
const holes = this.pending.get(lane) ?? new Set<number>();
|
|
13
|
+
holes.add(row);
|
|
14
|
+
this.pending.set(lane, holes);
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
get active() { return this.pending.size > 0 || this.moving.size > 0; }
|
|
18
|
+
blocks(lane: number) { return this.pending.has(lane) || this.moving.has(lane); }
|
|
19
|
+
vacant({ lane, row }: ArchiveCell) { return this.pending.get(lane)?.has(row) ?? false; }
|
|
20
|
+
|
|
21
|
+
update(dt: number, occupied: Iterable<ArchiveCell>, reduced = false) {
|
|
22
|
+
for (const [lane, motion] of this.moving) {
|
|
23
|
+
motion.elapsed += Math.max(0, dt);
|
|
24
|
+
if (reduced || motion.elapsed >= motion.duration) this.moving.delete(lane);
|
|
25
|
+
}
|
|
26
|
+
const blocked = new Set(Array.from(occupied, cell => cell.lane));
|
|
27
|
+
for (const [lane, holes] of this.pending) {
|
|
28
|
+
// Parallel readers keep their physical slot until they depart or return.
|
|
29
|
+
// Begin one continuous refill for the lane once every actor has cleared it.
|
|
30
|
+
if (blocked.has(lane) || this.moving.has(lane)) continue;
|
|
31
|
+
this.pending.delete(lane);
|
|
32
|
+
if (!reduced) this.moving.set(lane, {
|
|
33
|
+
holes: [...holes].sort((a, b) => b - a), elapsed: 0,
|
|
34
|
+
duration: 0.86 + Math.min(0.36, (holes.size - 1) * 0.18),
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
row({ lane, row }: ArchiveCell) {
|
|
40
|
+
const motion = this.moving.get(lane);
|
|
41
|
+
if (!motion) return row;
|
|
42
|
+
// The camera looks toward -Z: smaller row numbers are behind the vacancy.
|
|
43
|
+
// Reuse destination instance IDs for the surviving rear cassettes. At t=0
|
|
44
|
+
// the occupied positions are identical; at t=1 the normal grid takes over.
|
|
45
|
+
let source = row;
|
|
46
|
+
for (const hole of motion.holes) if (hole >= source) source--;
|
|
47
|
+
return source + (row - source) * ease(Math.min(1, motion.elapsed / motion.duration));
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
rebase(shift: ArchiveCell) {
|
|
51
|
+
this.pending = new Map([...this.pending].map(([lane, holes]) =>
|
|
52
|
+
[lane - shift.lane, new Set([...holes].map(row => row - shift.row))]));
|
|
53
|
+
this.moving = new Map([...this.moving].map(([lane, motion]) =>
|
|
54
|
+
[lane - shift.lane, { ...motion, holes: motion.holes.map(row => row - shift.row) }]));
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
clear() { this.pending.clear(); this.moving.clear(); }
|
|
58
|
+
stats() {
|
|
59
|
+
return [
|
|
60
|
+
...[...this.pending].map(([lane, holes]) => ({ lane, holes: [...holes], phase: 'waiting', progress: 0 })),
|
|
61
|
+
...[...this.moving].map(([lane, motion]) => ({ lane, holes: [...motion.holes], phase: 'moving', progress: motion.elapsed / motion.duration })),
|
|
62
|
+
];
|
|
63
|
+
}
|
|
64
|
+
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
// Generated by bin/bake-rhine-details.mjs from archive-cassette.glb.
|
|
2
|
+
export default {"signature":"9a49cc2e","width":512,"height":64,"sourceTriangles":1928,"min":[-1.8234825134277344,3.0156421661376953,0.24641001224517822],"max":[-1.3948416709899902,3.047001838684082,0.24641001224517822],"runs":[1494,16744576,1,2164228224,1,3221192832,3,4294934656,1,3221192832,1,2164228224,37,16744576,5,4294934656,8,16744576,1,2164228224,4,4294934656,1,2164228224,21,16744576,1,1090486400,4,4294934656,1,2164228224,17,16744576,5,4294934656,17,16744576,1,2164228224,19,4294934656,1,2164228224,6,16744576,5,4294934656,15,16744576,1,2164228224,5,4294934656,1,1090486400,4,16744576,1,2164228224,4,4294934656,22,16744576,1,1090486400,4,4294934656,1,2164228224,4,16744576,1,2164228224,4,4294934656,1,2164228224,22,16744576,1,2164228224,4,4294934656,1,2164228224,4,16744576,1,2164228224,20,4294934656,21,16744576,16,4294934656,1,3221192832,1,2164228224,17,16744576,5,4294934656,23,16744576,1,3221192832,4,4294934656,1,1090486400,13,16744576,1,2164228224,4,4294934656,1,2164228224,13,16744576,1,2164228224,4,4294934656,1,2164228224,22,16744576,1,2164228224,4,4294934656,1,2164228224,4,16744576,1,2164228224,14,4294934656,1,3221192832,1,2164228224,9,16744576,1,2164228224,4,4294934656,1,2164228224,22,16744576,1,2164228224,4,4294934656,1,3221192832,7,16744576,1,2164228224,9,4294934656,1,1090486400,11,16744576,20,4294934656,4,16744576,5,4294934656,8,16744576,1,2164228224,4,4294934656,1,2164228224,21,16744576,1,3221192832,4,4294934656,1,2164228224,17,16744576,5,4294934656,17,16744576,1,2164228224,19,4294934656,1,2164228224,6,16744576,5,4294934656,15,16744576,6,4294934656,5,16744576,1,2164228224,4,4294934656,22,16744576,1,3221192832,4,4294934656,1,2164228224,4,16744576,1,1090486400,4,4294934656,1,3221192832,22,16744576,1,3221192832,4,4294934656,1,2164228224,4,16744576,1,2164228224,20,4294934656,21,16744576,19,4294934656,1,2164228224,15,16744576,1,2164228224,4,4294934656,1,2164228224,22,16744576,5,4294934656,14,16744576,1,2164228224,4,4294934656,1,2164228224,13,16744576,1,2164228224,4,4294934656,1,2164228224,22,16744576,1,3221192832,4,4294934656,1,1090486400,4,16744576,1,2164228224,17,4294934656,1,1090486400,8,16744576,5,4294934656,22,16744576,1,2164228224,4,4294934656,1,2164228224,6,16744576,1,3221192832,11,4294934656,1,1090486400,10,16744576,20,4294934656,4,16744576,5,4294934656,8,16744576,1,2164228224,4,4294934656,1,2164228224,20,16744576,1,1090486400,5,4294934656,1,2164228224,17,16744576,5,4294934656,17,16744576,1,2164228224,19,4294934656,1,2164228224,6,16744576,5,4294934656,14,16744576,1,1090486400,5,4294934656,1,2164228224,5,16744576,1,2164228224,4,4294934656,21,16744576,1,1090486400,5,4294934656,1,2164228224,5,16744576,5,4294934656,22,16744576,5,4294934656,5,16744576,1,2164228224,20,4294934656,21,16744576,21,4294934656,1,1090486400,13,16744576,1,2164228224,4,4294934656,1,2164228224,21,16744576,1,2164228224,4,4294934656,1,3221192832,14,16744576,1,2164228224,4,4294934656,1,2164228224,14,16744576,5,4294934656,22,16744576,5,4294934656,5,16744576,1,2164228224,18,4294934656,1,3221192832,7,16744576,5,4294934656,22,16744576,5,4294934656,6,16744576,1,3221192832,13,4294934656,1,1090486400,9,16744576,20,4294934656,4,16744576,5,4294934656,8,16744576,1,2164228224,4,4294934656,1,2164228224,20,16744576,1,3221192832,5,4294934656,1,2164228224,17,16744576,5,4294934656,17,16744576,1,2164228224,19,4294934656,1,2164228224,6,16744576,5,4294934656,14,16744576,1,3221192832,5,4294934656,6,16744576,1,2164228224,4,4294934656,21,16744576,1,3221192832,5,4294934656,1,2164228224,5,16744576,1,3221192832,4,4294934656,1,1090486400,20,16744576,1,1090486400,4,4294934656,1,3221192832,5,16744576,1,2164228224,20,4294934656,21,16744576,22,4294934656,1,1090486400,13,16744576,5,4294934656,21,16744576,1,2164228224,4,4294934656,1,2164228224,14,16744576,1,2164228224,4,4294934656,1,2164228224,14,16744576,5,4294934656,21,16744576,1,2164228224,4,4294934656,1,3221192832,5,16744576,1,2164228224,19,4294934656,1,2164228224,6,16744576,1,2164228224,4,4294934656,1,2164228224,21,16744576,5,4294934656,5,16744576,1,3221192832,14,4294934656,1,3221192832,9,16744576,20,4294934656,4,16744576,5,4294934656,8,16744576,1,2164228224,4,4294934656,1,2164228224,19,16744576,1,1090486400,6,4294934656,1,2164228224,17,16744576,5,4294934656,17,16744576,1,2164228224,19,4294934656,1,2164228224,6,16744576,5,4294934656,14,16744576,5,4294934656,1,2164228224,6,16744576,1,2164228224,4,4294934656,20,16744576,1,1090486400,6,4294934656,1,2164228224,5,16744576,1,2164228224,4,4294934656,1,2164228224,20,16744576,1,2164228224,4,4294934656,1,2164228224,5,16744576,1,2164228224,20,4294934656,21,16744576,23,4294934656,1,1090486400,12,16744576,5,4294934656,21,16744576,5,4294934656,15,16744576,1,2164228224,4,4294934656,1,2164228224,14,16744576,1,2164228224,4,4294934656,1,2164228224,20,16744576,1,2164228224,4,4294934656,1,2164228224,5,16744576,1,2164228224,20,4294934656,1,1090486400,5,16744576,1,2164228224,4,4294934656,1,2164228224,20,16744576,1,2164228224,4,4294934656,1,2164228224,4,16744576,1,2164228224,1,4294934400,15,4294934656,1,1090486400,8,16744576,20,4294934656,4,16744576,5,4294934656,8,16744576,1,2164228224,4,4294934656,1,2164228224,19,16744576,1,3221192832,6,4294934656,1,2164228224,17,16744576,5,4294934656,17,16744576,1,2164228224,19,4294934656,1,2164228224,6,16744576,5,4294934656,13,16744576,1,2164228224,5,4294934656,1,1090486400,6,16744576,1,2164228224,4,4294934656,20,16744576,1,3221192832,6,4294934656,1,2164228224,5,16744576,1,1090486400,4,4294934656,1,3221192832,20,16744576,1,3221192832,4,4294934656,1,1090486400,5,16744576,1,2164228224,20,4294934656,21,16744576,24,4294934656,1,1090486400,11,16744576,1,2164228224,4,4294934656,1,2164228224,20,16744576,5,4294934656,15,16744576,1,2164228224,4,4294934656,1,2164228224,14,16744576,1,2164228224,4,4294934656,1,2164228224,20,16744576,5,4294934656,6,16744576,1,2164228224,20,4294934656,1,3221192832,6,16744576,5,4294934656,20,16744576,1,2164228224,4,4294934656,1,2164228224,4,16744576,1,2164228224,2,4294934656,1,4294934400,1,4294934656,1,4294934400,11,4294934656,1,3221192832,8,16744576,20,4294934656,4,16744576,5,4294934656,8,16744576,1,2164228224,4,4294934656,1,2164228224,18,16744576,1,1090486400,7,4294934656,1,2164228224,17,16744576,5,4294934656,17,16744576,1,2164228224,19,4294934656,1,2164228224,6,16744576,5,4294934656,13,16744576,1,3221192832,4,4294934656,1,3221192832,7,16744576,1,2164228224,4,4294934656,19,16744576,1,1090486400,7,4294934656,1,2164228224,6,16744576,5,4294934656,20,16744576,5,4294934656,6,16744576,1,2164228224,20,4294934656,21,16744576,25,4294934656,11,16744576,1,2164228224,4,4294934656,1,2164228224,19,16744576,1,2164228224,4,4294934656,1,2164228224,15,16744576,1,2164228224,4,4294934656,1,2164228224,15,16744576,5,4294934656,20,16744576,5,4294934656,6,16744576,1,2164228224,17,4294934656,2,4294934400,2,4294934656,1,2164228224,5,16744576,5,4294934656,20,16744576,5,4294934656,5,16744576,1,2164228224,6,4294934656,1,4294934400,2,2164228224,1,3221192832,7,4294934656,1,1090486400,7,16744576,20,4294934656,4,16744576,5,4294934656,8,16744576,1,2164228224,4,4294934656,1,2164228224,18,16744576,1,3221192832,7,4294934656,1,2164228224,17,16744576,5,4294934656,17,16744576,1,2164228224,4,4294934656,1,3221192832,14,2164228224,1,1090486400,6,16744576,5,4294934656,12,16744576,1,1090486400,5,4294934656,1,2164228224,7,16744576,1,2164228224,4,4294934656,19,16744576,1,3221192832,7,4294934656,1,2164228224,6,16744576,1,3221192832,4,4294934656,1,1090486400,18,16744576,1,1090486400,4,4294934656,1,3221192832,6,16744576,1,2164228224,4,4294934656,1,3221192832,15,2164228224,21,16744576,5,4294934656,10,2164228224,1,3221192832,9,4294934656,1,3221192832,11,16744576,5,4294934656,19,16744576,1,2164228224,4,4294934656,1,2164228224,15,16744576,1,2164228224,4,4294934656,1,2164228224,15,16744576,5,4294934656,19,16744576,1,2164228224,4,4294934656,1,2164228224,6,16744576,1,2164228224,4,4294934656,1,3221192832,6,2164228224,2,2164227968,1,3221192576,7,4294934656,1,3221192832,5,16744576,1,2164228224,4,4294934656,1,2164228224,19,16744576,5,4294934656,5,16744576,1,2164228224,5,4294934656,1,1090486400,5,16744576,1,3221192832,5,4294934656,1,2164228224,7,16744576,5,4294934656,15,2164228224,4,16744576,5,4294934656,8,16744576,1,2164228224,4,4294934656,1,2164228224,17,16744576,1,1090486400,8,4294934656,1,2164228224,17,16744576,5,4294934656,17,16744576,1,2164228224,4,4294934656,1,2164228224,21,16744576,5,4294934656,12,16744576,1,2164228224,5,4294934656,8,16744576,1,2164228224,4,4294934656,18,16744576,1,1090486400,8,4294934656,1,2164228224,6,16744576,1,2164228224,4,4294934656,1,2164228224,18,16744576,1,2164228224,4,4294934656,1,2164228224,6,16744576,1,2164228224,4,4294934656,1,2164228224,36,16744576,5,4294934656,12,16744576,1,2164228224,8,4294934656,1,1090486400,10,16744576,5,4294934656,19,16744576,5,4294934656,16,16744576,1,2164228224,4,4294934656,1,2164228224,15,16744576,1,2164228224,4,4294934656,1,2164228224,18,16744576,1,2164228224,4,4294934656,1,2164228224,6,16744576,1,2164228224,4,4294934656,1,2164228224,9,16744576,1,1090486400,7,4294934656,5,16744576,1,2164228224,4,4294934656,1,2164228224,18,16744576,1,2164228224,4,4294934656,1,2164228224,5,16744576,1,2164228224,3,4294934656,1,3221192832,8,16744576,1,3221192832,4,4294934656,1,3221192832,7,16744576,5,4294934656,19,16744576,5,4294934656,8,16744576,1,2164228224,4,4294934656,1,2164228224,17,16744576,1,3221192832,8,4294934656,1,2164228224,17,16744576,5,4294934656,17,16744576,1,2164228224,4,4294934656,1,2164228224,21,16744576,5,4294934656,12,16744576,5,4294934656,1,2164228224,8,16744576,1,2164228224,4,4294934656,18,16744576,1,3221192832,8,4294934656,1,2164228224,6,16744576,1,1090486400,4,4294934656,1,3221192832,18,16744576,5,4294934656,1,1090486400,6,16744576,1,2164228224,4,4294934656,1,2164228224,36,16744576,5,4294934656,14,16744576,1,3221192832,7,4294934656,10,16744576,1,2164228224,4,4294934656,1,2164228224,17,16744576,1,1090486400,5,4294934656,16,16744576,1,2164228224,4,4294934656,1,2164228224,15,16744576,1,2164228224,4,4294934656,1,2164228224,18,16744576,5,4294934656,7,16744576,1,2164228224,4,4294934656,1,2164228224,11,16744576,6,4294934656,1,2164228224,5,16744576,5,4294934656,18,16744576,1,3221192832,4,4294934656,1,2164228224,5,16744576,1,2164228224,2,4294934656,1,3221192832,9,16744576,1,1090486400,5,4294934656,7,16744576,5,4294934656,19,16744576,5,4294934656,8,16744576,1,2164228224,4,4294934656,1,2164228224,16,16744576,1,1090486400,9,4294934656,1,2164228224,17,16744576,5,4294934656,17,16744576,1,2164228224,4,4294934656,1,2164228224,21,16744576,5,4294934656,11,16744576,1,1090486400,5,4294934656,1,1090486400,8,16744576,1,2164228224,4,4294934656,17,16744576,1,2164228224,9,4294934656,1,2164228224,7,16744576,5,4294934656,18,16744576,5,4294934656,7,16744576,1,2164228224,4,4294934656,1,2164228224,36,16744576,5,4294934656,15,16744576,1,3221192832,6,4294934656,1,2164228224,9,16744576,1,2164228224,4,4294934656,1,2164228224,17,16744576,1,2164228224,4,4294934656,1,2164228224,16,16744576,1,2164228224,4,4294934656,1,2164228224,16,16744576,5,4294934656,17,16744576,1,1090486400,5,4294934656,7,16744576,1,2164228224,4,4294934656,1,2164228224,11,16744576,1,1090486400,5,4294934656,1,2164228224,5,16744576,5,4294934656,18,16744576,5,4294934656,6,16744576,1,2164228224,2,4294934656,11,16744576,1,3221192832,4,4294934656,7,16744576,5,4294934656,19,16744576,5,4294934656,8,16744576,1,2164228224,4,4294934656,1,2164228224,16,16744576,1,3221192832,9,4294934656,1,2164228224,17,16744576,5,4294934656,17,16744576,1,2164228224,4,4294934656,1,2164228224,21,16744576,5,4294934656,11,16744576,1,3221192832,5,4294934656,9,16744576,1,2164228224,4,4294934656,17,16744576,10,4294934656,1,2164228224,7,16744576,1,3221192832,4,4294934656,1,1090486400,16,16744576,1,2164228224,4,4294934656,1,3221192832,7,16744576,1,2164228224,4,4294934656,1,2164228224,36,16744576,5,4294934656,16,16744576,1,3221192832,6,4294934656,10,16744576,5,4294934656,17,16744576,1,3221192832,4,4294934656,1,2164228224,16,16744576,1,2164228224,4,4294934656,1,2164228224,16,16744576,5,4294934656,17,16744576,1,2164228224,4,4294934656,1,2164228224,7,16744576,1,2164228224,4,4294934656,1,2164228224,12,16744576,1,3221192832,4,4294934656,1,4294934400,5,16744576,1,2164228224,4,4294934656,1,2164228224,16,16744576,1,1090486400,5,4294934656,6,16744576,1,2164228224,1,4294934656,1,1090486400,11,16744576,1,2164228224,4,4294934656,1,2164228224,6,16744576,5,4294934656,19,16744576,5,4294934656,8,16744576,1,2164228224,4,4294934656,1,2164228224,15,16744576,1,1090486400,10,4294934656,1,2164228224,17,16744576,5,4294934656,17,16744576,1,2164228224,4,4294934656,1,2164228224,21,16744576,5,4294934656,11,16744576,5,4294934656,1,2164228224,9,16744576,1,2164228224,4,4294934656,16,16744576,1,2164228224,10,4294934656,1,2164228224,7,16744576,1,2164228224,4,4294934656,1,2164228224,16,16744576,1,2164228224,4,4294934656,1,2164228224,7,16744576,1,2164228224,4,4294934656,1,2164228224,36,16744576,5,4294934656,17,16744576,6,4294934656,1,1090486400,9,16744576,5,4294934656,17,16744576,5,4294934656,17,16744576,1,2164228224,4,4294934656,1,2164228224,16,16744576,1,2164228224,4,4294934656,1,2164228224,16,16744576,1,3221192832,4,4294934656,1,2164228224,7,16744576,1,2164228224,4,4294934656,1,2164228224,12,16744576,1,2164227968,3,4294934400,2,4294934656,5,16744576,1,2164228224,4,4294934656,1,2164228224,16,16744576,1,2164228224,4,4294934656,1,2164228224,6,16744576,1,2164228224,1,3221192832,13,16744576,4,4294934656,1,2164228224,6,16744576,5,4294934656,19,16744576,5,4294934656,8,16744576,1,2164228224,4,4294934656,1,2164228224,15,16744576,1,3221192832,5,4294934656,1,2164228224,4,4294934656,1,2164228224,17,16744576,5,4294934656,17,16744576,1,2164228224,4,4294934656,1,2164228224,21,16744576,5,4294934656,10,16744576,1,2164228224,5,4294934656,1,1090486400,9,16744576,1,2164228224,4,4294934656,16,16744576,11,4294934656,1,2164228224,7,16744576,1,1090486400,4,4294934656,1,3221192832,16,16744576,5,4294934656,1,1090486400,7,16744576,1,2164228224,4,4294934656,1,2164228224,36,16744576,5,4294934656,17,16744576,1,2164228224,5,4294934656,1,3221192832,9,16744576,1,2164228224,4,4294934656,1,2164228224,15,16744576,1,1090486400,5,4294934656,17,16744576,1,2164228224,4,4294934656,1,2164228224,16,16744576,1,2164228224,4,4294934656,1,2164228224,16,16744576,5,4294934656,8,16744576,1,2164228224,4,4294934656,1,2164228224,13,16744576,4,4294934400,1,4294934656,6,16744576,5,4294934656,16,16744576,1,3221192832,4,4294934656,1,1090486400,6,16744576,1,2164228224,14,16744576,4,4294934656,1,2164228224,6,16744576,5,4294934656,19,16744576,5,4294934656,8,16744576,1,2164228224,4,4294934656,1,2164228224,14,16744576,1,1090486400,6,4294934656,1,16744576,4,4294934656,1,2164228224,17,16744576,5,4294934656,17,16744576,1,2164228224,4,4294934656,1,2164228224,21,16744576,5,4294934656,10,16744576,1,3221192832,4,4294934656,1,3221192832,10,16744576,1,2164228224,4,4294934656,15,16744576,1,2164228224,6,4294934656,1,2164228224,4,4294934656,1,2164228224,8,16744576,5,4294934656,16,16744576,5,4294934656,8,16744576,1,2164228224,4,4294934656,1,2164228224,36,16744576,5,4294934656,18,16744576,1,3221192832,5,4294934656,9,16744576,1,2164228224,4,4294934656,1,2164228224,15,16744576,1,2164228224,4,4294934656,1,2164228224,17,16744576,1,2164228224,4,4294934656,1,2164228224,17,16744576,5,4294934656,15,16744576,1,1090486400,5,4294934656,8,16744576,1,2164228224,4,4294934656,1,2164228224,13,16744576,1,4294934400,4,4294934656,6,16744576,5,4294934656,16,16744576,5,4294934656,22,16744576,4,4294934656,1,2164228224,6,16744576,5,4294934656,19,16744576,5,4294934656,8,16744576,1,2164228224,4,4294934656,1,2164228224,14,16744576,1,3221192832,5,4294934656,1,2164228224,1,16744576,4,4294934656,1,2164228224,17,16744576,5,4294934656,17,16744576,1,2164228224,4,4294934656,1,2164228224,21,16744576,5,4294934656,9,16744576,1,1090486400,5,4294934656,1,2164228224,10,16744576,1,2164228224,4,4294934656,15,16744576,6,4294934656,1,1090486400,1,2164228224,4,4294934656,1,2164228224,8,16744576,1,3221192832,4,4294934656,1,1090486400,14,16744576,1,2164228224,4,4294934656,1,2164228224,8,16744576,1,2164228224,4,4294934656,1,2164228224,36,16744576,5,4294934656,18,16744576,1,1090486400,5,4294934656,1,2164228224,9,16744576,5,4294934656,15,16744576,1,3221192832,4,4294934656,1,1090486400,17,16744576,1,2164228224,4,4294934656,1,2164228224,17,16744576,5,4294934656,15,16744576,1,2164228224,4,4294934656,1,2164228224,8,16744576,1,2164228224,4,4294934656,1,2164228224,13,16744576,4,4294934400,1,4294934656,6,16744576,1,2164228224,4,4294934656,1,2164228224,14,16744576,1,1090486400,4,4294934656,1,3221192832,22,16744576,4,4294934656,1,2164228224,6,16744576,5,4294934656,19,16744576,5,4294934656,8,16744576,1,2164228224,4,4294934656,1,2164228224,13,16744576,1,1090486400,6,4294934656,2,16744576,4,4294934656,1,2164228224,17,16744576,5,4294934656,17,16744576,1,2164228224,4,4294934656,1,2164228224,21,16744576,5,4294934656,9,16744576,1,3221192832,5,4294934656,11,16744576,1,2164228224,4,4294934656,14,16744576,1,2164228224,5,4294934656,1,3221192832,1,16744576,1,2164228224,4,4294934656,1,2164228224,8,16744576,1,2164228224,4,4294934656,1,2164228224,14,16744576,1,3221192832,4,4294934656,1,2164228224,8,16744576,1,2164228224,4,4294934656,1,2164228224,36,16744576,5,4294934656,19,16744576,5,4294934656,1,2164228224,9,16744576,5,4294934656,15,16744576,5,4294934656,18,16744576,1,2164228224,4,4294934656,1,2164228224,17,16744576,1,2164228224,4,4294934656,1,2164228224,14,16744576,1,3221192832,4,4294934656,1,2164228224,8,16744576,1,2164228224,4,4294934656,1,2164228224,13,16744576,2,4294934400,3,4294934656,6,16744576,1,2164228224,4,4294934656,1,2164228224,14,16744576,1,2164228224,4,4294934656,1,2164228224,21,16744576,1,2164228224,4,4294934656,1,2164228224,6,16744576,5,4294934656,19,16744576,5,4294934656,8,16744576,1,2164228224,4,4294934656,1,2164228224,13,16744576,1,3221192832,5,4294934656,1,2164228224,2,16744576,4,4294934656,1,2164228224,17,16744576,5,4294934656,17,16744576,1,2164228224,4,4294934656,1,2164228224,21,16744576,5,4294934656,9,16744576,5,4294934656,1,3221192832,11,16744576,1,2164228224,4,4294934656,14,16744576,6,4294934656,1,1090486400,1,16744576,1,2164228224,4,4294934656,1,2164228224,8,16744576,1,1090486400,24,4294934656,9,16744576,1,2164228224,4,4294934656,1,2164228224,36,16744576,5,4294934656,19,16744576,1,2164228224,5,4294934656,9,16744576,1,2164228224,23,4294934656,1,3221192832,18,16744576,1,2164228224,4,4294934656,1,2164228224,17,16744576,1,2164228224,24,4294934656,9,16744576,1,2164228224,4,4294934656,1,2164228224,13,16744576,5,4294934656,7,16744576,24,4294934656,1,1090486400,21,16744576,1,2164228224,4,4294934656,1,2164228224,6,16744576,5,4294934656,19,16744576,5,4294934656,8,16744576,1,2164228224,4,4294934656,1,2164228224,12,16744576,1,1090486400,6,4294934656,3,16744576,4,4294934656,1,2164228224,17,16744576,5,4294934656,17,16744576,1,2164228224,4,4294934656,1,2164228224,21,16744576,5,4294934656,8,16744576,1,2164228224,5,4294934656,1,1090486400,11,16744576,1,2164228224,4,4294934656,13,16744576,1,2164228224,5,4294934656,1,3221192832,2,16744576,1,2164228224,4,4294934656,1,2164228224,9,16744576,24,4294934656,9,16744576,1,2164228224,4,4294934656,1,2164228224,36,16744576,5,4294934656,19,16744576,1,1090486400,5,4294934656,1,1090486400,8,16744576,1,2164228224,23,4294934656,1,2164228224,18,16744576,1,2164228224,4,4294934656,1,2164228224,18,16744576,23,4294934656,1,3221192832,9,16744576,1,2164228224,4,4294934656,1,2164228224,13,16744576,5,4294934656,7,16744576,24,4294934656,22,16744576,5,4294934656,1,1090486400,6,16744576,5,4294934656,19,16744576,5,4294934656,8,16744576,1,2164228224,4,4294934656,1,2164228224,12,16744576,1,3221192832,5,4294934656,1,2164228224,3,16744576,4,4294934656,1,2164228224,17,16744576,5,4294934656,17,16744576,1,2164228224,4,4294934656,1,2164228224,21,16744576,5,4294934656,8,16744576,6,4294934656,12,16744576,1,2164228224,4,4294934656,13,16744576,6,4294934656,1,1090486400,2,16744576,1,2164228224,4,4294934656,1,2164228224,9,16744576,1,3221192832,22,4294934656,1,2164228224,9,16744576,1,2164228224,4,4294934656,1,2164228224,36,16744576,5,4294934656,20,16744576,5,4294934656,1,2164228224,9,16744576,23,4294934656,1,1090486400,18,16744576,1,2164228224,4,4294934656,1,2164228224,18,16744576,23,4294934656,1,2164228224,9,16744576,1,2164228224,4,4294934656,1,2164228224,12,16744576,1,1090486144,5,4294934400,7,16744576,1,2164228224,22,4294934656,1,3221192832,21,16744576,1,1090486400,5,4294934656,7,16744576,5,4294934656,19,16744576,5,4294934656,8,16744576,1,2164228224,4,4294934656,1,2164228224,11,16744576,1,1090486400,6,4294934656,4,16744576,4,4294934656,1,2164228224,17,16744576,5,4294934656,17,16744576,1,2164228224,4,4294934656,1,2164228224,21,16744576,5,4294934656,7,16744576,1,2164228224,5,4294934656,1,2164228224,12,16744576,1,2164228224,4,4294934656,12,16744576,1,2164228224,5,4294934656,1,3221192832,3,16744576,1,2164228224,4,4294934656,1,2164228224,9,16744576,1,2164228224,22,4294934656,1,2164228224,9,16744576,1,2164228224,4,4294934656,1,2164228224,36,16744576,5,4294934656,20,16744576,1,3221192832,4,4294934656,1,2164228224,9,16744576,23,4294934656,19,16744576,1,2164228224,4,4294934656,1,2164228224,18,16744576,1,2164228224,22,4294934656,1,1090486400,9,16744576,1,2164228224,4,4294934656,1,2164228224,12,16744576,1,2164228224,4,4294934656,1,2164228224,7,16744576,1,2164228224,22,4294934656,1,2164228224,21,16744576,1,3221192832,5,4294934656,7,16744576,5,4294934656,19,16744576,5,4294934656,8,16744576,1,2164228224,4,4294934656,1,2164228224,11,16744576,1,3221192832,5,4294934656,1,2164228224,4,16744576,4,4294934656,1,2164228224,17,16744576,5,4294934656,17,16744576,1,2164228224,4,4294934656,1,2164228224,21,16744576,5,4294934656,6,16744576,1,1090486400,6,4294934400,13,16744576,1,2164228224,4,4294934656,12,16744576,6,4294934656,1,1090486400,3,16744576,1,2164228224,4,4294934656,1,2164228224,9,16744576,1,1090486400,22,4294934656,10,16744576,1,2164228224,4,4294934656,1,2164228224,36,16744576,5,4294934656,20,16744576,1,2164228224,4,4294934656,1,3221192832,9,16744576,1,2164228224,21,4294934656,1,3221192832,19,16744576,1,2164228224,4,4294934656,1,2164228224,18,16744576,1,2164228224,22,4294934656,10,16744576,1,2164228224,4,4294934656,1,2164228224,12,16744576,1,3221192832,4,4294934656,1,2164228224,8,16744576,22,4294934656,1,1090486400,20,16744576,1,2164228224,5,4294934656,1,2164228224,7,16744576,5,4294934656,19,16744576,5,4294934656,8,16744576,1,2164228224,4,4294934656,1,2164228224,10,16744576,1,1090486400,6,4294934656,5,16744576,4,4294934656,1,2164228224,17,16744576,5,4294934656,17,16744576,1,2164228224,4,4294934656,1,2164228224,21,16744576,5,4294934656,6,16744576,1,3221192832,5,4294934656,1,2164228224,13,16744576,1,2164228224,4,4294934656,11,16744576,1,2164228224,5,4294934656,1,3221192832,4,16744576,1,2164228224,4,4294934656,1,2164228224,10,16744576,22,4294934656,10,16744576,1,2164228224,4,4294934656,1,2164228224,36,16744576,5,4294934656,20,16744576,1,1090486400,5,4294934656,9,16744576,1,2164228224,21,4294934656,1,2164228224,19,16744576,1,2164228224,4,4294934656,1,2164228224,19,16744576,21,4294934656,1,3221192832,10,16744576,1,2164228224,4,4294934656,1,2164228224,11,16744576,1,1090486144,3,4294934400,2,4294934656,9,16744576,22,4294934656,20,16744576,1,1090486400,6,4294934656,1,2164228224,7,16744576,5,4294934656,19,16744576,5,4294934656,8,16744576,1,2164228224,4,4294934656,1,2164228224,10,16744576,1,3221192832,5,4294934656,1,2164228224,5,16744576,4,4294934656,1,2164228224,17,16744576,5,4294934656,17,16744576,1,2164228224,4,4294934656,1,2164228224,21,16744576,5,4294934656,5,16744576,1,2164228224,6,4294934656,14,16744576,1,2164228224,4,4294934656,11,16744576,6,4294934656,1,1090486400,4,16744576,1,2164228224,4,4294934656,1,2164228224,10,16744576,1,3221192832,20,4294934656,1,2164228224,10,16744576,1,2164228224,4,4294934656,1,2164228224,36,16744576,5,4294934656,21,16744576,5,4294934656,10,16744576,21,4294934656,1,1090486400,19,16744576,1,2164228224,4,4294934656,1,2164228224,19,16744576,21,4294934656,1,2164228224,10,16744576,1,2164228224,4,4294934656,1,2164228224,10,16744576,1,1090486400,5,4294934656,1,3221192832,9,16744576,1,2164228224,20,4294934656,1,3221192832,20,16744576,7,4294934656,8,16744576,5,4294934656,19,16744576,5,4294934656,8,16744576,1,2164228224,4,4294934656,1,2164228224,9,16744576,1,2164228224,6,4294934656,6,16744576,4,4294934656,1,2164228224,17,16744576,5,4294934656,17,16744576,1,2164228224,4,4294934656,1,2164228224,21,16744576,5,4294934656,4,16744576,1,3221192832,6,4294934656,1,2164228224,14,16744576,1,2164228224,4,4294934656,10,16744576,1,2164228224,5,4294934656,1,3221192832,5,16744576,1,2164228224,4,4294934656,1,2164228224,10,16744576,1,2164228224,4,4294934656,1,3221192832,10,2164228224,5,4294934656,1,2164228224,10,16744576,1,2164228224,4,4294934656,1,2164228224,36,16744576,5,4294934656,21,16744576,5,4294934656,10,16744576,5,4294934656,11,2164228224,5,4294934656,20,16744576,1,2164228224,4,4294934656,1,2164228224,19,16744576,1,2164228224,4,4294934656,1,3221192832,10,2164228224,5,4294934656,1,1090486400,10,16744576,1,2164228224,4,4294934656,1,2164228224,9,16744576,1,1090486400,6,4294934656,1,2164228224,9,16744576,1,2164228224,4,4294934656,1,3221192832,10,2164228224,5,4294934656,1,2164228224,19,16744576,1,3221192832,6,4294934656,1,3221192832,8,16744576,5,4294934656,19,16744576,5,4294934656,8,16744576,1,2164228224,4,4294934656,1,2164228224,9,16744576,6,4294934656,1,1090486400,6,16744576,4,4294934656,1,2164228224,17,16744576,5,4294934656,17,16744576,1,2164228224,4,4294934656,1,3221192832,13,2164228224,1,1090486400,7,16744576,5,4294934656,2,4294934400,1,4294934656,1,4294934400,6,4294934656,1,3221192832,15,16744576,1,2164228224,4,4294934656,10,16744576,6,4294934656,1,1090486400,5,16744576,1,2164228224,4,4294934656,1,2164228224,10,16744576,1,1090486400,4,4294934656,1,3221192832,10,16744576,5,4294934656,11,16744576,1,2164228224,4,4294934656,1,2164228224,36,16744576,5,4294934656,21,16744576,5,4294934656,1,1090486400,9,16744576,1,2164228224,4,4294934656,1,2164228224,9,16744576,1,2164228224,4,4294934656,1,3221192832,20,16744576,1,2164228224,4,4294934656,1,2164228224,19,16744576,1,2164228224,4,4294934656,1,2164228224,10,16744576,5,4294934656,11,16744576,1,2164228224,4,4294934656,1,3221192832,8,2164228224,7,4294934656,1,3221192832,11,16744576,5,4294934656,10,16744576,5,4294934656,1,1090486400,18,16744576,1,3221192832,7,4294934656,1,1090486400,8,16744576,5,4294934656,14,2164228224,5,16744576,5,4294934656,8,16744576,1,2164228224,4,4294934656,1,2164228224,8,16744576,1,2164228224,5,4294934656,1,3221192832,7,16744576,4,4294934656,1,2164228224,17,16744576,5,4294934656,17,16744576,1,2164228224,18,4294934656,1,2164228224,7,16744576,11,4294934656,4,4294934400,1,1090486400,15,16744576,1,2164228224,4,4294934656,9,16744576,1,2164228224,5,4294934656,1,3221192832,6,16744576,1,2164228224,4,4294934656,1,2164228224,11,16744576,5,4294934656,9,16744576,1,2164228224,4,4294934656,1,3221192832,11,16744576,1,2164228224,4,4294934656,1,2164228224,36,16744576,5,4294934656,21,16744576,5,4294934656,1,2164228224,9,16744576,1,2164228224,4,4294934656,1,2164228224,9,16744576,1,3221192832,4,4294934656,1,2164228224,20,16744576,1,2164228224,4,4294934656,1,2164228224,20,16744576,5,4294934656,9,16744576,1,2164228224,4,4294934656,1,3221192832,11,16744576,1,2164228224,20,4294934656,1,1090486400,11,16744576,5,4294934656,9,16744576,1,1090486400,5,4294934656,18,16744576,1,3221192832,7,4294934656,1,3221192832,9,16744576,19,4294934656,5,16744576,5,4294934656,8,16744576,1,2164228224,4,4294934656,1,2164228224,8,16744576,6,4294934656,1,1090486400,7,16744576,4,4294934656,1,2164228224,17,16744576,5,4294934656,17,16744576,1,2164228224,18,4294934656,1,2164228224,7,16744576,10,4294934656,2,4294934400,2,4294934656,1,2164228224,16,16744576,1,2164228224,4,4294934656,9,16744576,6,4294934656,1,1090486400,6,16744576,1,2164228224,4,4294934656,1,2164228224,11,16744576,1,3221192832,4,4294934656,1,1090486400,8,16744576,1,2164228224,4,4294934656,1,2164228224,11,16744576,1,2164228224,4,4294934656,1,2164228224,36,16744576,5,4294934656,21,16744576,1,2164228224,4,4294934656,1,2164228224,10,16744576,5,4294934656,9,16744576,5,4294934656,21,16744576,1,2164228224,4,4294934656,1,2164228224,20,16744576,5,4294934656,9,16744576,1,3221192832,4,4294934656,1,2164228224,11,16744576,1,2164228224,19,4294934656,1,2164228224,12,16744576,1,2164228224,4,4294934656,1,2164228224,8,16744576,1,2164228224,4,4294934656,1,2164228224,17,16744576,1,3221192832,8,4294934656,1,1090486400,9,16744576,19,4294934656,5,16744576,5,4294934656,8,16744576,1,2164228224,4,4294934656,1,2164228224,7,16744576,1,2164228224,5,4294934656,1,3221192832,8,16744576,4,4294934656,1,2164228224,17,16744576,5,4294934656,17,16744576,1,2164228224,18,4294934656,1,2164228224,7,16744576,13,4294934656,2,4294934400,1,2164227968,15,16744576,1,2164228224,4,4294934656,8,16744576,1,2164228224,5,4294934656,1,3221192832,7,16744576,1,2164228224,4,4294934656,1,2164228224,11,16744576,1,2164228224,4,4294934656,1,2164228224,8,16744576,5,4294934656,1,1090486400,11,16744576,1,2164228224,4,4294934656,1,2164228224,36,16744576,5,4294934656,21,16744576,1,2164228224,4,4294934656,1,2164228224,10,16744576,5,4294934656,8,16744576,1,1090486400,5,4294934656,21,16744576,1,2164228224,4,4294934656,1,2164228224,20,16744576,1,2164228224,4,4294934656,1,2164228224,8,16744576,5,4294934656,1,1090486400,11,16744576,1,2164228224,18,4294934656,1,3221192832,13,16744576,1,2164228224,4,4294934656,1,2164228224,8,16744576,1,3221192832,4,4294934656,1,2164228224,16,16744576,1,3221192832,8,4294934656,1,2164228224,10,16744576,19,4294934656,5,16744576,5,4294934656,8,16744576,1,2164228224,4,4294934656,1,2164228224,7,16744576,6,4294934656,1,1090486400,8,16744576,4,4294934656,1,2164228224,17,16744576,5,4294934656,17,16744576,1,2164228224,18,4294934656,1,2164228224,7,16744576,15,4294934656,1,4294934400,1,1090486400,14,16744576,1,2164228224,4,4294934656,8,16744576,6,4294934656,1,1090486400,7,16744576,1,2164228224,4,4294934656,1,2164228224,11,16744576,1,1090486400,4,4294934656,1,3221192832,8,16744576,5,4294934656,12,16744576,1,2164228224,4,4294934656,1,2164228224,36,16744576,5,4294934656,21,16744576,1,2164228224,4,4294934656,1,2164228224,10,16744576,1,2164228224,4,4294934656,1,2164228224,7,16744576,1,2164228224,4,4294934656,1,2164228224,21,16744576,1,2164228224,4,4294934656,1,2164228224,20,16744576,1,2164228224,4,4294934656,1,2164228224,7,16744576,1,1090486400,5,4294934656,12,16744576,1,2164228224,17,4294934656,1,1090486400,15,16744576,5,4294934656,8,16744576,5,4294934656,16,16744576,1,3221192832,8,4294934656,1,3221192832,11,16744576,19,4294934656,5,16744576,5,4294934656,8,16744576,1,2164228224,4,4294934656,1,2164228224,6,16744576,1,2164228224,5,4294934656,1,3221192832,9,16744576,4,4294934656,1,2164228224,17,16744576,5,4294934656,17,16744576,1,2164228224,18,4294934656,1,2164228224,7,16744576,17,4294934656,1,1090486400,13,16744576,1,2164228224,4,4294934656,7,16744576,1,2164228224,5,4294934656,1,3221192832,8,16744576,1,2164228224,4,4294934656,1,2164228224,12,16744576,5,4294934656,7,16744576,1,2164228224,4,4294934656,1,3221192832,12,16744576,1,2164228224,4,4294934656,1,2164228224,36,16744576,5,4294934656,21,16744576,1,2164228224,4,4294934656,1,2164228224,10,16744576,1,2164228224,4,4294934656,1,2164228224,7,16744576,1,3221192832,4,4294934656,1,2164228224,21,16744576,1,2164228224,4,4294934656,1,2164228224,21,16744576,5,4294934656,7,16744576,1,2164228224,4,4294934656,1,2164228224,12,16744576,1,2164228224,15,4294934656,1,2164228224,17,16744576,5,4294934656,7,16744576,1,1090486400,5,4294934656,15,16744576,1,1090486400,8,4294934656,1,3221192832,12,16744576,19,4294934656,5,16744576,5,4294934656,8,16744576,1,2164228224,4,4294934656,1,2164228224,6,16744576,6,4294934656,1,1090486400,9,16744576,4,4294934656,1,2164228224,17,16744576,5,4294934656,17,16744576,1,2164228224,18,4294934656,1,2164228224,7,16744576,17,4294934656,1,3221192832,13,16744576,1,2164228224,4,4294934656,7,16744576,6,4294934656,1,1090486400,8,16744576,1,2164228224,4,4294934656,1,2164228224,12,16744576,1,3221192832,4,4294934656,1,1090486400,6,16744576,1,2164228224,4,4294934656,1,2164228224,12,16744576,1,2164228224,4,4294934656,1,2164228224,36,16744576,5,4294934656,21,16744576,5,4294934656,1,2164228224,11,16744576,5,4294934656,7,16744576,5,4294934656,22,16744576,1,2164228224,4,4294934656,1,2164228224,21,16744576,5,4294934656,7,16744576,1,3221192832,4,4294934656,1,2164228224,12,16744576,1,2164228224,15,4294934656,1,3221192832,17,16744576,1,2164228224,4,4294934656,1,2164228224,6,16744576,1,2164228224,4,4294934656,1,2164228224,14,16744576,1,1090486400,9,4294934656,13,16744576,19,4294934656,5,16744576,5,4294934656,8,16744576,1,2164228224,4,4294934656,1,2164228224,5,16744576,1,2164228224,5,4294934656,1,3221192832,10,16744576,4,4294934656,1,2164228224,17,16744576,5,4294934656,17,16744576,1,2164228224,18,4294934656,1,2164228224,7,16744576,5,4294934656,4,2164228224,1,4294934400,4,4294934656,1,4294934400,3,4294934656,1,1090486400,12,16744576,1,2164228224,4,4294934656,6,16744576,1,2164228224,5,4294934656,1,3221192832,9,16744576,1,2164228224,4,4294934656,1,2164228224,12,16744576,1,2164228224,4,4294934656,1,2164228224,6,16744576,5,4294934656,1,1090486400,12,16744576,1,2164228224,4,4294934656,1,2164228224,36,16744576,5,4294934656,21,16744576,5,4294934656,1,1090486400,11,16744576,5,4294934656,6,16744576,1,1090486400,5,4294934656,22,16744576,1,2164228224,4,4294934656,1,2164228224,21,16744576,1,2164228224,4,4294934656,1,2164228224,6,16744576,5,4294934656,13,16744576,1,2164228224,16,4294934656,1,3221192832,16,16744576,1,2164228224,4,4294934656,1,2164228224,6,16744576,1,3221192832,4,4294934656,1,2164228224,14,16744576,1,3221192832,8,4294934656,1,1090486400,13,16744576,19,4294934656,5,16744576,5,4294934656,8,16744576,1,2164228224,4,4294934656,1,2164228224,5,16744576,6,4294934656,1,1090486400,10,16744576,4,4294934656,1,2164228224,17,16744576,5,4294934656,17,16744576,1,2164228224,4,4294934656,1,2164228224,21,16744576,5,4294934656,6,16744576,1,2164228224,6,4294934656,1,3221192832,12,16744576,1,2164228224,4,4294934656,6,16744576,6,4294934656,1,1090486400,9,16744576,1,2164228224,4,4294934656,1,2164228224,12,16744576,1,1090486400,4,4294934656,1,3221192832,6,16744576,5,4294934656,13,16744576,1,2164228224,4,4294934656,1,2164228224,36,16744576,5,4294934656,21,16744576,5,4294934656,12,16744576,1,2164228224,4,4294934656,1,2164228224,5,16744576,1,2164228224,4,4294934656,1,2164228224,22,16744576,1,2164228224,4,4294934656,1,2164228224,21,16744576,1,2164228224,4,4294934656,1,2164228224,5,16744576,1,1090486400,5,4294934656,13,16744576,1,2164228224,4,4294934656,1,2164228224,4,16744576,2,2164227968,2,4294934400,4,4294934656,1,3221192832,16,16744576,5,4294934656,6,16744576,5,4294934656,14,16744576,1,1090486400,8,4294934656,1,1090486400,14,16744576,5,4294934656,19,16744576,5,4294934656,8,16744576,1,2164228224,4,4294934656,1,2164228224,4,16744576,1,2164228224,5,4294934656,1,3221192832,11,16744576,4,4294934656,1,2164228224,17,16744576,5,4294934656,17,16744576,1,2164228224,4,4294934656,1,2164228224,21,16744576,5,4294934656,7,16744576,1,1090486400,6,4294934656,12,16744576,1,2164228224,4,4294934656,5,16744576,1,2164228224,5,4294934656,1,3221192832,10,16744576,1,2164228224,4,4294934656,1,2164228224,13,16744576,5,4294934656,5,16744576,1,2164228224,4,4294934656,1,3221192832,13,16744576,1,2164228224,4,4294934656,1,2164228224,36,16744576,5,4294934656,21,16744576,5,4294934656,12,16744576,1,2164228224,4,4294934656,1,2164228224,5,16744576,1,3221192832,4,4294934656,1,2164228224,22,16744576,1,2164228224,4,4294934656,1,2164228224,22,16744576,5,4294934656,5,16744576,1,2164228224,4,4294934656,1,2164228224,13,16744576,1,2164228224,4,4294934656,1,2164228224,7,16744576,1,3221192832,5,4294934656,1,1090486400,15,16744576,5,4294934656,5,16744576,1,1090486400,5,4294934656,14,16744576,8,4294934656,1,1090486400,15,16744576,5,4294934656,19,16744576,5,4294934656,8,16744576,1,2164228224,4,4294934656,1,2164228224,4,16744576,6,4294934656,1,1090486400,11,16744576,4,4294934656,1,2164228224,17,16744576,5,4294934656,17,16744576,1,2164228224,4,4294934656,1,2164228224,21,16744576,5,4294934656,8,16744576,1,2164228224,5,4294934656,1,2164228224,11,16744576,1,2164228224,4,4294934656,5,16744576,6,4294934656,1,1090486400,10,16744576,1,2164228224,4,4294934656,1,2164228224,13,16744576,1,3221192832,4,4294934656,5,16744576,1,2164228224,4,4294934656,1,2164228224,13,16744576,1,2164228224,4,4294934656,1,2164228224,36,16744576,5,4294934656,21,16744576,5,4294934656,13,16744576,5,4294934656,5,16744576,5,4294934656,23,16744576,1,2164228224,4,4294934656,1,2164228224,22,16744576,5,4294934656,5,16744576,1,3221192832,4,4294934656,1,2164228224,13,16744576,1,2164228224,4,4294934656,1,2164228224,8,16744576,1,3221192832,4,4294934656,1,3221192832,15,16744576,1,2164228224,4,4294934656,1,1090486400,4,16744576,1,2164228224,4,4294934656,1,2164228224,13,16744576,1,1090486400,7,4294934656,1,1090486400,16,16744576,5,4294934656,19,16744576,5,4294934656,8,16744576,1,2164228224,4,4294934656,1,2164228224,3,16744576,1,2164228224,5,4294934656,1,3221192832,12,16744576,4,4294934656,1,2164228224,17,16744576,5,4294934656,17,16744576,1,2164228224,4,4294934656,1,2164228224,21,16744576,5,4294934656,9,16744576,5,4294934656,1,2164228224,11,16744576,1,2164228224,4,4294934656,4,16744576,1,2164228224,5,4294934656,1,2164228224,11,16744576,1,2164228224,4,4294934656,1,2164228224,13,16744576,1,2164228224,4,4294934656,1,2164228224,4,16744576,5,4294934656,1,1090486400,13,16744576,1,2164228224,4,4294934656,1,2164228224,36,16744576,5,4294934656,20,16744576,1,2164228224,5,4294934656,13,16744576,5,4294934656,4,16744576,1,1090486400,5,4294934656,23,16744576,1,2164228224,4,4294934656,1,2164228224,22,16744576,1,2164228224,4,4294934656,1,2164228224,4,16744576,5,4294934656,14,16744576,1,2164228224,4,4294934656,1,2164228224,9,16744576,5,4294934656,1,1090486400,14,16744576,1,2164228224,4,4294934656,1,2164228224,4,16744576,5,4294934656,1,2164228224,13,16744576,1,3221192832,6,4294934656,1,1090486400,17,16744576,5,4294934656,19,16744576,5,4294934656,8,16744576,1,2164228224,4,4294934656,1,2164228224,3,16744576,6,4294934656,1,1090486400,12,16744576,4,4294934656,1,2164228224,17,16744576,5,4294934656,17,16744576,1,2164228224,4,4294934656,1,2164228224,21,16744576,5,4294934656,9,16744576,1,2164228224,4,4294934656,1,3221192832,11,16744576,1,2164228224,4,4294934656,4,16744576,6,4294934656,12,16744576,1,2164228224,4,4294934656,1,2164228224,13,16744576,1,1090486400,4,4294934656,1,2164228224,3,16744576,1,1090486400,5,4294934656,14,16744576,1,2164228224,4,4294934656,1,2164228224,36,16744576,5,4294934656,20,16744576,1,2164228224,4,4294934656,1,2164228224,13,16744576,1,2164228224,4,4294934656,1,1090486400,3,16744576,1,2164228224,4,4294934656,1,2164228224,23,16744576,1,2164228224,4,4294934656,1,2164228224,22,16744576,1,2164228224,4,4294934656,1,2164228224,3,16744576,1,1090486400,5,4294934656,14,16744576,1,2164228224,4,4294934656,1,2164228224,9,16744576,1,2164228224,4,4294934656,1,2164228224,15,16744576,4,4294934656,1,3221192832,4,16744576,5,4294934656,14,16744576,6,4294934656,1,1090486400,18,16744576,5,4294934656,19,16744576,5,4294934656,8,16744576,1,2164228224,4,4294934656,1,2164228224,2,16744576,1,2164228224,5,4294934656,1,3221192832,13,16744576,4,4294934656,1,2164228224,17,16744576,5,4294934656,17,16744576,1,2164228224,4,4294934656,1,2164228224,21,16744576,5,4294934656,9,16744576,1,2164227968,5,4294934400,11,16744576,1,2164228224,4,4294934656,3,16744576,1,2164228224,5,4294934656,1,2164228224,12,16744576,1,2164228224,4,4294934656,1,2164228224,14,16744576,5,4294934656,3,16744576,1,2164228224,4,4294934656,1,3221192832,14,16744576,1,2164228224,4,4294934656,1,2164228224,36,16744576,5,4294934656,20,16744576,5,4294934656,1,2164228224,13,16744576,1,2164228224,4,4294934656,1,2164228224,3,16744576,5,4294934656,1,2164228224,23,16744576,1,2164228224,4,4294934656,1,2164228224,23,16744576,5,4294934656,3,16744576,1,2164228224,4,4294934656,1,2164228224,14,16744576,1,2164228224,4,4294934656,1,2164228224,9,16744576,1,2164228224,4,4294934656,1,3221192832,15,16744576,5,4294934656,3,16744576,1,2164228224,4,4294934656,1,3221192832,13,16744576,1,1090486400,5,4294934656,1,2164228224,19,16744576,5,4294934656,19,16744576,5,4294934656,8,16744576,1,2164228224,4,4294934656,1,2164228224,2,16744576,6,4294934656,1,1090486400,13,16744576,4,4294934656,1,2164228224,17,16744576,5,4294934656,17,16744576,1,2164228224,4,4294934656,1,2164228224,21,16744576,5,4294934656,10,16744576,2,4294934400,3,4294934656,11,16744576,1,2164228224,4,4294934656,2,16744576,1,1090486400,6,4294934656,13,16744576,1,2164228224,4,4294934656,1,2164228224,14,16744576,1,3221192832,4,4294934656,3,16744576,1,3221192832,4,4294934656,1,2164228224,14,16744576,1,2164228224,4,4294934656,1,2164228224,36,16744576,5,4294934656,20,16744576,5,4294934656,1,1090486400,14,16744576,4,4294934656,1,3221192832,3,16744576,5,4294934656,24,16744576,1,2164228224,4,4294934656,1,2164228224,23,16744576,5,4294934656,3,16744576,5,4294934656,1,2164228224,14,16744576,1,2164228224,4,4294934656,1,2164228224,10,16744576,5,4294934656,15,16744576,1,2164228224,4,4294934656,1,1090486400,2,16744576,1,2164228224,4,4294934656,1,2164228224,13,16744576,1,2164228224,5,4294934656,20,16744576,5,4294934656,19,16744576,5,4294934656,8,16744576,1,2164228224,4,4294934656,1,2164228224,1,16744576,1,2164228224,5,4294934656,1,3221192832,14,16744576,4,4294934656,1,2164228224,17,16744576,5,4294934656,17,16744576,1,2164228224,4,4294934656,1,2164228224,21,16744576,5,4294934656,10,16744576,5,4294934656,11,16744576,1,2164228224,4,4294934656,2,16744576,1,3221192832,5,4294934656,1,2164228224,13,16744576,1,2164228224,4,4294934656,1,2164228224,14,16744576,1,2164228224,4,4294934656,1,2164228224,2,16744576,5,4294934656,15,16744576,1,2164228224,4,4294934656,1,2164228224,36,16744576,5,4294934656,19,16744576,1,2164228224,5,4294934656,15,16744576,5,4294934656,2,16744576,1,2164228224,4,4294934656,1,3221192832,24,16744576,1,2164228224,4,4294934656,1,2164228224,23,16744576,1,2164228224,4,4294934656,1,1090486400,2,16744576,5,4294934656,15,16744576,1,2164228224,4,4294934656,1,2164228224,10,16744576,3,4294934656,2,4294934400,15,16744576,1,2164228224,4,4294934656,1,2164228224,2,16744576,5,4294934656,1,1090486400,13,16744576,1,2164228224,4,4294934656,1,2164228224,20,16744576,5,4294934656,19,16744576,5,4294934656,8,16744576,1,2164228224,4,4294934656,1,2164228224,1,16744576,6,4294934656,1,1090486400,14,16744576,4,4294934656,1,2164228224,17,16744576,5,4294934656,17,16744576,1,2164228224,4,4294934656,1,2164228224,21,16744576,5,4294934656,10,16744576,5,4294934656,11,16744576,1,2164228224,4,4294934656,1,16744576,1,1090486400,6,4294934656,14,16744576,1,2164228224,4,4294934656,1,2164228224,14,16744576,1,1090486400,4,4294934656,1,2164228224,1,16744576,1,1090486400,5,4294934656,15,16744576,1,2164228224,4,4294934656,1,2164228224,36,16744576,5,4294934656,19,16744576,1,3221192832,4,4294934656,1,3221192832,15,16744576,1,2164228224,4,4294934656,1,1090486400,1,16744576,1,2164228224,4,4294934656,1,2164228224,24,16744576,1,2164228224,4,4294934656,1,2164228224,23,16744576,1,2164228224,4,4294934656,1,2164228224,1,16744576,1,2164228224,4,4294934656,1,3221192832,15,16744576,1,2164228224,4,4294934656,1,2164228224,10,16744576,4,4294934656,1,4294934400,16,16744576,4,4294934656,1,3221192832,2,16744576,5,4294934656,14,16744576,1,2164228224,4,4294934656,21,16744576,5,4294934656,19,16744576,5,4294934656,8,16744576,1,2164228224,4,4294934656,2,2164228224,5,4294934656,1,3221192832,15,16744576,4,4294934656,1,2164228224,17,16744576,5,4294934656,17,16744576,1,2164228224,4,4294934656,1,2164228224,21,16744576,5,4294934656,10,16744576,5,4294934656,11,16744576,1,2164228224,4,4294934656,1,16744576,1,3221192832,5,4294934656,1,2164228224,14,16744576,1,2164228224,4,4294934656,1,2164228224,15,16744576,5,4294934656,1,16744576,1,2164228224,4,4294934656,1,2164228224,15,16744576,1,2164228224,4,4294934656,1,2164228224,36,16744576,5,4294934656,18,16744576,1,1090486400,5,4294934656,1,2164228224,15,16744576,1,2164228224,4,4294934656,1,2164228224,1,16744576,5,4294934656,1,1090486400,24,16744576,1,2164228224,4,4294934656,1,2164228224,24,16744576,4,4294934656,1,3221192832,1,16744576,1,2164228224,4,4294934656,1,2164228224,15,16744576,1,2164228224,4,4294934656,1,2164228224,10,16744576,2,4294934656,3,4294934400,16,16744576,5,4294934656,1,16744576,1,2164228224,4,4294934656,1,3221192832,14,16744576,5,4294934656,21,16744576,5,4294934656,19,16744576,5,4294934656,8,16744576,1,2164228224,4,4294934656,1,2164228224,6,4294934656,1,1090486400,15,16744576,4,4294934656,1,2164228224,17,16744576,5,4294934656,17,16744576,1,2164228224,4,4294934656,1,2164228224,21,16744576,5,4294934656,10,16744576,5,4294934656,11,16744576,1,2164228224,4,4294934656,1,1090486400,6,4294934656,15,16744576,1,2164228224,4,4294934656,1,2164228224,15,16744576,1,3221192832,4,4294934656,1,16744576,1,3221192832,4,4294934656,1,2164228224,15,16744576,1,2164228224,4,4294934656,1,2164228224,36,16744576,5,4294934656,18,16744576,1,3221192832,5,4294934656,1,1090486400,16,16744576,4,4294934656,1,3221192832,1,16744576,5,4294934656,25,16744576,1,2164228224,4,4294934656,1,2164228224,24,16744576,5,4294934656,1,16744576,5,4294934656,1,1090486400,15,16744576,1,2164228224,4,4294934656,1,2164228224,10,16744576,5,4294934656,16,16744576,1,2164228224,4,4294934656,1,1090486400,1,2164228224,4,4294934656,1,2164228224,14,16744576,5,4294934656,21,16744576,5,4294934656,19,16744576,5,4294934656,8,16744576,1,2164228224,10,4294934656,1,3221192832,16,16744576,4,4294934656,1,2164228224,17,16744576,5,4294934656,17,16744576,1,2164228224,4,4294934656,1,2164228224,21,16744576,5,4294934656,10,16744576,5,4294934656,11,16744576,1,2164228224,4,4294934656,1,3221192832,5,4294934656,1,2164228224,15,16744576,1,2164228224,4,4294934656,1,2164228224,15,16744576,1,2164228224,4,4294934656,1,2164228224,5,4294934656,16,16744576,1,2164228224,4,4294934656,1,2164228224,36,16744576,5,4294934656,17,16744576,1,1090486400,6,4294934656,17,16744576,5,4294934656,1,2164228224,4,4294934656,1,3221192832,25,16744576,1,2164228224,4,4294934656,1,2164228224,24,16744576,1,2164228224,4,4294934656,1,1090486400,5,4294934656,16,16744576,1,2164228224,4,4294934656,1,2164228224,10,16744576,5,4294934656,16,16744576,1,2164228224,4,4294934656,1,2164228224,5,4294934656,1,1090486400,14,16744576,4,4294934656,1,2164228224,21,16744576,5,4294934656,19,16744576,5,4294934656,8,16744576,1,2164228224,10,4294934656,1,1090486400,16,16744576,4,4294934656,1,2164228224,17,16744576,5,4294934656,17,16744576,1,2164228224,4,4294934656,1,2164228224,21,16744576,5,4294934656,9,16744576,1,2164228224,5,4294934656,11,16744576,1,2164228224,10,4294934656,16,16744576,1,2164228224,4,4294934656,1,2164228224,15,16744576,1,1090486400,4,4294934656,1,3221192832,5,4294934656,16,16744576,1,2164228224,4,4294934656,1,2164228224,36,16744576,5,4294934656,17,16744576,1,3221192832,5,4294934656,1,2164228224,17,16744576,1,2164228224,4,4294934656,1,3221192832,4,4294934656,1,2164228224,25,16744576,1,2164228224,4,4294934656,1,2164228224,24,16744576,1,2164228224,9,4294934656,1,3221192832,16,16744576,1,2164228224,4,4294934656,1,2164228224,10,16744576,5,4294934656,17,16744576,4,4294934656,1,3221192832,5,4294934656,15,16744576,4,4294934656,1,3221192832,21,16744576,5,4294934656,19,16744576,5,4294934656,8,16744576,1,2164228224,9,4294934656,1,2164228224,17,16744576,4,4294934656,1,2164228224,17,16744576,5,4294934656,17,16744576,1,2164228224,4,4294934656,1,2164228224,21,16744576,5,4294934656,9,16744576,1,2164228224,4,4294934656,1,2164228224,11,16744576,1,2164228224,9,4294934656,1,2164228224,16,16744576,1,2164228224,4,4294934656,1,2164228224,16,16744576,9,4294934656,1,2164228224,16,16744576,1,2164228224,4,4294934656,1,2164228224,36,16744576,5,4294934656,16,16744576,1,3221192832,6,4294934656,18,16744576,1,2164228224,9,4294934656,1,1090486400,25,16744576,1,2164228224,4,4294934656,1,2164228224,25,16744576,9,4294934656,1,2164228224,16,16744576,1,2164228224,4,4294934656,1,2164228224,9,16744576,1,2164228224,5,4294934656,17,16744576,9,4294934656,1,3221192832,15,16744576,1,2164228224,4,4294934656,12,16744576,1,3221192832,8,16744576,5,4294934656,19,16744576,5,4294934656,8,16744576,1,2164228224,9,4294934656,18,16744576,4,4294934656,1,2164228224,17,16744576,5,4294934656,17,16744576,1,2164228224,4,4294934656,1,2164228224,21,16744576,5,4294934656,9,16744576,5,4294934656,1,2164228224,11,16744576,1,2164228224,9,4294934656,17,16744576,1,2164228224,4,4294934656,1,2164228224,16,16744576,1,3221192832,8,4294934656,1,2164228224,16,16744576,1,2164228224,4,4294934656,1,2164228224,36,16744576,5,4294934656,15,16744576,1,3221192832,6,4294934656,1,2164228224,19,16744576,9,4294934656,26,16744576,1,2164228224,4,4294934656,1,2164228224,25,16744576,9,4294934656,1,1090486400,16,16744576,1,2164228224,4,4294934656,1,2164228224,9,16744576,1,3221192832,4,4294934656,1,3221192832,17,16744576,1,2164228224,8,4294934656,1,2164228224,15,16744576,1,2164228224,4,4294934400,1,1090486144,10,16744576,1,1090486400,1,4294934656,8,16744576,5,4294934656,19,16744576,5,4294934656,8,16744576,1,2164228224,8,4294934656,1,2164228224,18,16744576,4,4294934656,1,2164228224,17,16744576,5,4294934656,17,16744576,1,2164228224,4,4294934656,1,2164228224,21,16744576,5,4294934656,8,16744576,1,2164228224,5,4294934656,1,1090486400,11,16744576,1,2164228224,8,4294934656,1,2164228224,17,16744576,1,2164228224,4,4294934656,1,2164228224,16,16744576,1,2164228224,8,4294934656,17,16744576,1,2164228224,4,4294934656,1,2164228224,36,16744576,5,4294934656,14,16744576,1,3221192832,7,4294934656,1,1090486400,19,16744576,8,4294934656,1,3221192832,26,16744576,1,2164228224,4,4294934656,1,2164228224,25,16744576,1,2164228224,8,4294934656,17,16744576,1,2164228224,4,4294934656,1,2164228224,8,16744576,1,1090486400,5,4294934656,1,2164228224,17,16744576,1,2164228224,8,4294934656,1,1090486400,15,16744576,1,2164227968,2,4294934400,2,4294934656,1,2164228224,9,16744576,1,1090486400,2,4294934656,8,16744576,5,4294934656,19,16744576,5,4294934656,8,16744576,1,2164228224,8,4294934656,19,16744576,4,4294934656,1,2164228224,17,16744576,5,4294934656,17,16744576,1,2164228224,4,4294934656,1,2164228224,21,16744576,5,4294934656,7,16744576,1,1090486400,2,4294934400,1,4294934656,1,4294934400,2,4294934656,12,16744576,1,2164228224,8,4294934656,18,16744576,1,2164228224,4,4294934656,1,2164228224,16,16744576,1,1090486400,8,4294934656,17,16744576,1,2164228224,4,4294934656,1,2164228224,36,16744576,5,4294934656,12,16744576,1,2164228224,8,4294934656,1,2164228224,20,16744576,1,2164228224,7,4294934656,1,2164228224,26,16744576,1,2164228224,4,4294934656,1,2164228224,25,16744576,1,2164228224,7,4294934656,1,3221192832,17,16744576,1,2164228224,4,4294934656,1,2164228224,7,16744576,1,1090486400,6,4294934656,1,2164228224,18,16744576,8,4294934656,17,16744576,4,4294934400,1,4294934656,1,1090486400,7,16744576,1,1090486400,3,4294934656,8,16744576,5,4294934656,19,16744576,5,4294934656,8,16744576,1,2164228224,7,4294934656,1,2164228224,19,16744576,4,4294934656,1,2164228224,5,16744576,1,1090486400,11,2164228224,5,4294934656,12,2164228224,5,16744576,1,2164228224,4,4294934656,1,3221192832,14,2164228224,7,16744576,5,4294934656,5,16744576,1,1090486400,1,3221192576,6,4294934656,1,3221192832,12,16744576,1,2164228224,7,4294934656,1,2164228224,18,16744576,1,2164228224,4,4294934656,1,2164228224,17,16744576,7,4294934656,1,2164228224,17,16744576,1,2164228224,4,4294934656,1,2164228224,36,16744576,5,4294934656,1,2164228224,8,2164227968,1,2164228224,1,3221192832,10,4294934656,21,16744576,1,2164228224,7,4294934656,1,1090486400,14,16744576,1,1090486400,11,2164228224,1,3221192832,4,4294934656,1,3221192832,11,2164228224,15,16744576,7,4294934656,1,2164228224,17,16744576,1,2164228224,4,4294934656,1,3221192832,5,2164227968,1,2164228224,1,3221192832,7,4294934656,19,16744576,7,4294934656,1,2164228224,17,16744576,2,4294934656,1,4294934400,2,4294934656,1,4294934400,1,1090486400,5,16744576,1,2164228224,4,4294934656,8,16744576,5,4294934656,14,2164228224,1,1090486400,4,16744576,5,4294934656,8,16744576,1,2164228224,7,4294934656,20,16744576,4,4294934656,1,2164228224,5,16744576,1,2164228224,28,4294934656,5,16744576,1,2164228224,19,4294934656,7,16744576,18,4294934656,1,1090486400,12,16744576,1,2164228224,7,4294934656,19,16744576,1,2164228224,4,4294934656,1,2164228224,17,16744576,1,3221192832,6,4294934656,1,1090486400,17,16744576,1,2164228224,4,4294934656,1,2164228224,36,16744576,20,4294934656,3,4294934400,2,4294934656,1,1090486400,22,16744576,7,4294934656,15,16744576,1,2164228224,28,4294934656,15,16744576,7,4294934656,1,1090486400,17,16744576,1,2164228224,10,4294934656,3,4294934400,2,4294934656,2,4294934400,1,4294934656,1,3221192832,19,16744576,1,2164228224,6,4294934656,1,2164228224,17,16744576,1,2164228224,6,4294934656,1,3221192832,2,2164228224,1,3221192832,6,4294934656,8,16744576,19,4294934656,1,2164228224,4,16744576,5,4294934656,8,16744576,1,2164228224,6,4294934656,1,2164228224,20,16744576,4,4294934656,1,2164228224,5,16744576,1,2164228224,28,4294934656,5,16744576,1,2164228224,19,4294934656,7,16744576,17,4294934656,1,3221192832,13,16744576,1,2164228224,6,4294934656,1,2164228224,19,16744576,1,2164228224,4,4294934656,1,2164228224,17,16744576,1,2164228224,6,4294934656,18,16744576,1,2164228224,4,4294934656,1,2164228224,36,16744576,24,4294934656,1,2164228224,23,16744576,6,4294934656,1,2164228224,15,16744576,1,2164228224,28,4294934656,15,16744576,1,2164228224,6,4294934656,18,16744576,1,2164228224,18,4294934656,1,1090486400,19,16744576,1,2164228224,6,4294934656,18,16744576,1,1090486400,16,4294934656,8,16744576,19,4294934656,1,2164228224,4,16744576,5,4294934656,8,16744576,1,2164228224,6,4294934656,21,16744576,4,4294934656,1,2164228224,5,16744576,1,2164228224,28,4294934656,5,16744576,1,2164228224,19,4294934656,7,16744576,17,4294934656,1,1090486400,13,16744576,1,2164228224,6,4294934656,20,16744576,1,2164228224,4,4294934656,1,2164228224,17,16744576,1,1090486400,5,4294934656,1,3221192832,18,16744576,1,2164228224,4,4294934656,1,2164228224,36,16744576,23,4294934656,1,3221192832,24,16744576,1,2164228224,5,4294934656,1,2164228224,15,16744576,1,2164228224,28,4294934656,15,16744576,1,2164228224,5,4294934656,1,3221192832,18,16744576,1,2164228224,17,4294934656,1,3221192832,21,16744576,6,4294934656,19,16744576,1,3221192832,15,4294934656,8,16744576,19,4294934656,1,2164228224,4,16744576,5,4294934656,8,16744576,1,2164228224,5,4294934656,1,2164228224,21,16744576,4,4294934656,1,2164228224,5,16744576,1,2164228224,28,4294934656,5,16744576,1,2164228224,19,4294934656,7,16744576,16,4294934656,1,2164228224,14,16744576,1,2164228224,5,4294934656,1,2164228224,20,16744576,1,2164228224,4,4294934656,1,2164228224,18,16744576,5,4294934656,1,2164228224,18,16744576,1,2164228224,4,4294934656,1,2164228224,36,16744576,22,4294934656,1,3221192832,25,16744576,1,2164228224,5,4294934656,16,16744576,1,2164228224,28,4294934656,16,16744576,5,4294934656,1,2164228224,18,16744576,1,2164228224,17,4294934656,22,16744576,5,4294934656,1,2164228224,19,16744576,1,1090486400,15,4294934656,8,16744576,19,4294934656,1,2164228224,4,16744576,5,4294934656,8,16744576,1,2164228224,5,4294934656,22,16744576,4,4294934656,1,2164228224,5,16744576,1,2164228224,28,4294934656,5,16744576,1,2164228224,19,4294934656,7,16744576,15,4294934656,1,3221192832,15,16744576,1,2164228224,5,4294934656,21,16744576,1,2164228224,4,4294934656,1,2164228224,18,16744576,1,3221192832,4,4294934656,1,1090486400,18,16744576,1,2164228224,4,4294934656,1,2164228224,36,16744576,21,4294934656,1,1090486400,27,16744576,5,4294934656,16,16744576,1,2164228224,28,4294934656,16,16744576,5,4294934656,19,16744576,1,2164228224,16,4294934656,1,1090486400,22,16744576,1,2164228224,4,4294934656,1,2164228224,20,16744576,1,2164228224,13,4294934656,1,3221192832,8,16744576,19,4294934656,1,2164228224,4,16744576,5,4294934656,8,16744576,1,2164228224,4,4294934656,1,2164228224,22,16744576,4,4294934656,1,2164228224,5,16744576,1,2164228224,28,4294934656,5,16744576,1,2164228224,19,4294934656,7,16744576,14,4294934656,1,2164228224,16,16744576,1,2164228224,4,4294934656,1,2164228224,21,16744576,1,2164228224,4,4294934656,1,2164228224,18,16744576,1,2164228224,4,4294934656,19,16744576,1,2164228224,4,4294934656,1,2164228224,36,16744576,19,4294934656,1,3221192832,29,16744576,4,4294934656,1,2164228224,16,16744576,1,2164228224,28,4294934656,16,16744576,1,2164228224,4,4294934656,19,16744576,1,2164228224,14,4294934656,1,3221192832,1,1090486400,23,16744576,1,2164228224,4,4294934656,22,16744576,1,3221192832,3,4294934656,7,4294934400,1,4294934656,1,2164227968,9,16744576,19,4294934656,1,2164228224,4,16744576,5,4294934656,8,16744576,1,2164228224,4,4294934656,23,16744576,4,4294934656,1,2164228224,5,16744576,1,2164228224,28,4294934656,5,16744576,1,2164228224,19,4294934656,7,16744576,12,4294934656,1,2164228224,18,16744576,1,2164228224,3,4294934656,1,3221192832,22,16744576,1,2164228224,4,4294934656,1,2164228224,18,16744576,1,1090486400,3,4294934656,1,3221192832,19,16744576,1,2164228224,4,4294934656,1,2164228224,36,16744576,16,4294934656,1,3221192832,1,2164228224,31,16744576,1,2164228224,3,4294934656,1,2164228224,16,16744576,1,2164228224,28,4294934656,16,16744576,1,2164228224,3,4294934656,1,2164228224,19,16744576,1,2164228224,12,4294934656,1,3221192832,1,1090486400,26,16744576,4,4294934656,23,16744576,1,1090486400,2,4294934656,7,4294934400,1,1090486144,10,16744576,19,4294934656,1,2164228224,199,16744576,3,2164228224,1,1090486400,110,16744576,1,1090486400,3,2164228224,63,16744576,3,2164228224,1,1090486400,60,16744576,3,2164228224,1,1090486400,25,16744576,1,2164228224,1,3221192832,3,4294934656,1,3221192832,1,2164228224,1058,16744576]};
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import * as THREE from "three";
|
|
2
|
+
import data from "./array-detail-data.ts";
|
|
3
|
+
import { detailSignature } from "./detail-signature.ts";
|
|
4
|
+
|
|
5
|
+
/** Prebaked shallow lettering; source mismatch retains real geometry. No browser
|
|
6
|
+
* rasterization/readback is needed. Normals, coverage and live PBR lighting are
|
|
7
|
+
* kept separate, so this is not a photograph with fixed illumination.
|
|
8
|
+
*/
|
|
9
|
+
export function createArrayDetail(surface: string, source: THREE.BufferGeometry, material: THREE.Material) {
|
|
10
|
+
if (surface !== "Array_Interior_Lettering" || !(material instanceof THREE.MeshStandardMaterial)
|
|
11
|
+
|| detailSignature(source) !== data.signature) return undefined;
|
|
12
|
+
const pixels = new Uint8Array(data.width * data.height * 4);
|
|
13
|
+
let offset = 0;
|
|
14
|
+
for (let run = 0; run < data.runs.length; run += 2) {
|
|
15
|
+
const count = data.runs[run], value = data.runs[run + 1];
|
|
16
|
+
for (let i = 0; i < count; i++) {
|
|
17
|
+
pixels[offset++] = value & 255; pixels[offset++] = (value >>> 8) & 255;
|
|
18
|
+
pixels[offset++] = (value >>> 16) & 255; pixels[offset++] = value >>> 24;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
if (offset !== pixels.length) return undefined;
|
|
22
|
+
const texture = new THREE.DataTexture(pixels, data.width, data.height, THREE.RGBAFormat);
|
|
23
|
+
texture.name = "Array lettering normal and coverage"; texture.colorSpace = THREE.NoColorSpace;
|
|
24
|
+
texture.generateMipmaps = true; texture.minFilter = THREE.LinearMipmapLinearFilter;
|
|
25
|
+
texture.magFilter = THREE.LinearFilter; texture.anisotropy = 4; texture.needsUpdate = true;
|
|
26
|
+
const geometry = new THREE.PlaneGeometry(data.max[0] - data.min[0], data.max[1] - data.min[1]).translate(
|
|
27
|
+
(data.min[0] + data.max[0]) / 2, (data.min[1] + data.max[1]) / 2, data.max[2]);
|
|
28
|
+
const proxyMaterial = material.clone();
|
|
29
|
+
proxyMaterial.normalMap = texture; proxyMaterial.normalMapType = THREE.TangentSpaceNormalMap;
|
|
30
|
+
proxyMaterial.normalScale.set(1, 1); proxyMaterial.transparent = true; proxyMaterial.depthWrite = false;
|
|
31
|
+
proxyMaterial.alphaTest = 0.01;
|
|
32
|
+
proxyMaterial.onBeforeCompile = shader => {
|
|
33
|
+
shader.fragmentShader = shader.fragmentShader.replace("#include <alphatest_fragment>",
|
|
34
|
+
"diffuseColor.a *= texture2D(normalMap, vNormalMapUv).a;\n#include <alphatest_fragment>");
|
|
35
|
+
};
|
|
36
|
+
proxyMaterial.customProgramCacheKey = () => "array-normal-coverage-v1";
|
|
37
|
+
proxyMaterial.userData.arrayDetail = {
|
|
38
|
+
surface, width: data.width, height: data.height, bakedTriangles: data.sourceTriangles, signature: data.signature,
|
|
39
|
+
};
|
|
40
|
+
return { geometry, material: proxyMaterial, texture };
|
|
41
|
+
}
|
|
@@ -0,0 +1,411 @@
|
|
|
1
|
+
import * as THREE from "three";
|
|
2
|
+
|
|
3
|
+
export const ARRAY_INTERIOR_SURFACES = new Set([
|
|
4
|
+
"Internal_Ceramic",
|
|
5
|
+
"Subsurface_Optics",
|
|
6
|
+
"Optical_Edges",
|
|
7
|
+
]);
|
|
8
|
+
|
|
9
|
+
export type ArrayInteriorBake = {
|
|
10
|
+
meshes: THREE.Mesh[];
|
|
11
|
+
texture: THREE.Texture;
|
|
12
|
+
dispose(): void;
|
|
13
|
+
stats: {
|
|
14
|
+
width: number;
|
|
15
|
+
height: number;
|
|
16
|
+
sourceTriangles: number;
|
|
17
|
+
bakedTriangles: number;
|
|
18
|
+
proxyTriangles: number;
|
|
19
|
+
letteringTriangles: number;
|
|
20
|
+
instanceTriangles: number;
|
|
21
|
+
textureType: "half-float";
|
|
22
|
+
textureBytes: number;
|
|
23
|
+
shadowStrength: number;
|
|
24
|
+
};
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
export type InteriorBakeOptions = {
|
|
28
|
+
surfaces?: ReadonlySet<string>;
|
|
29
|
+
/** Shelf overview direction in the cassette's local space. */
|
|
30
|
+
direction?: THREE.Vector3;
|
|
31
|
+
maxSize?: number;
|
|
32
|
+
preserveOutsideSubstrate?: boolean;
|
|
33
|
+
shadowStrength?: number;
|
|
34
|
+
name?: string;
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
const LETTERING_DEPTH = 0.22;
|
|
38
|
+
const SURFACE_OFFSET = 0.001;
|
|
39
|
+
// A lit image contains ambient as well as direct illumination. This deliberately
|
|
40
|
+
// conservative approximation restores moving shadows without blackening both.
|
|
41
|
+
const SHADOW_STRENGTH = 0.3;
|
|
42
|
+
|
|
43
|
+
function surfaceName(mesh: THREE.Mesh) {
|
|
44
|
+
const material = mesh.material as THREE.Material;
|
|
45
|
+
return String(mesh.userData.surface ?? material.name).replace(/\.\d+$/, "");
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
function triangleCount(geometry: THREE.BufferGeometry) {
|
|
49
|
+
return (geometry.index?.count ?? geometry.getAttribute("position").count) / 3;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
/** Copy selected triangles, owning every attribute independently of the GLB. */
|
|
53
|
+
function extractTriangles(
|
|
54
|
+
source: THREE.BufferGeometry,
|
|
55
|
+
keep: (a: number, b: number, c: number) => boolean,
|
|
56
|
+
) {
|
|
57
|
+
const index = source.index;
|
|
58
|
+
const count = index?.count ?? source.getAttribute("position").count;
|
|
59
|
+
const original: number[] = [];
|
|
60
|
+
const remap = new Map<number, number>();
|
|
61
|
+
const indices: number[] = [];
|
|
62
|
+
for (let offset = 0; offset < count; offset += 3) {
|
|
63
|
+
const a = index ? index.getX(offset) : offset;
|
|
64
|
+
const b = index ? index.getX(offset + 1) : offset + 1;
|
|
65
|
+
const c = index ? index.getX(offset + 2) : offset + 2;
|
|
66
|
+
if (!keep(a, b, c)) continue;
|
|
67
|
+
for (const vertex of [a, b, c]) {
|
|
68
|
+
if (!remap.has(vertex)) {
|
|
69
|
+
remap.set(vertex, original.length);
|
|
70
|
+
original.push(vertex);
|
|
71
|
+
}
|
|
72
|
+
indices.push(remap.get(vertex)!);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
const geometry = new THREE.BufferGeometry();
|
|
76
|
+
for (const [name, attribute] of Object.entries(source.attributes)) {
|
|
77
|
+
const values = new Float32Array(original.length * attribute.itemSize);
|
|
78
|
+
for (let i = 0; i < original.length; i++) {
|
|
79
|
+
for (let component = 0; component < attribute.itemSize; component++) {
|
|
80
|
+
values[i * attribute.itemSize + component] = attribute.getComponent(original[i], component);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
geometry.setAttribute(name, new THREE.BufferAttribute(values, attribute.itemSize));
|
|
84
|
+
}
|
|
85
|
+
geometry.setIndex(indices);
|
|
86
|
+
return geometry;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
export function copyInteriorLights(source: THREE.Scene, target: THREE.Scene) {
|
|
90
|
+
source.traverse((object) => {
|
|
91
|
+
if (!(object instanceof THREE.Light)) return;
|
|
92
|
+
object.updateWorldMatrix(true, false);
|
|
93
|
+
const light = object.clone();
|
|
94
|
+
object.matrixWorld.decompose(light.position, light.quaternion, light.scale);
|
|
95
|
+
light.castShadow = false;
|
|
96
|
+
if (
|
|
97
|
+
(object instanceof THREE.DirectionalLight && light instanceof THREE.DirectionalLight) ||
|
|
98
|
+
(object instanceof THREE.SpotLight && light instanceof THREE.SpotLight)
|
|
99
|
+
) {
|
|
100
|
+
object.target.getWorldPosition(light.target.position);
|
|
101
|
+
target.add(light.target);
|
|
102
|
+
}
|
|
103
|
+
target.add(light);
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
function proxyMaterial(texture: THREE.Texture, shadowStrength: number) {
|
|
108
|
+
// The built-in shadow vertex path already handles instance matrices, normal
|
|
109
|
+
// bias, logarithmic depth and directional/spot/point shadow coordinates.
|
|
110
|
+
const shader = THREE.ShaderLib.shadow;
|
|
111
|
+
const uniforms = THREE.UniformsUtils.clone(shader.uniforms);
|
|
112
|
+
uniforms.arrayInteriorMap = { value: texture };
|
|
113
|
+
uniforms.arrayShadowStrength = { value: shadowStrength };
|
|
114
|
+
const material = new THREE.ShaderMaterial({
|
|
115
|
+
uniforms,
|
|
116
|
+
vertexShader: shader.vertexShader
|
|
117
|
+
.replace("#include <common>", "#include <common>\nvarying vec2 vArrayUv;")
|
|
118
|
+
.replace("#include <begin_vertex>", "#include <begin_vertex>\nvArrayUv = uv;"),
|
|
119
|
+
fragmentShader: shader.fragmentShader
|
|
120
|
+
.replace(
|
|
121
|
+
"#include <common>",
|
|
122
|
+
"#include <common>\nvarying vec2 vArrayUv;\nuniform sampler2D arrayInteriorMap;\nuniform float arrayShadowStrength;",
|
|
123
|
+
)
|
|
124
|
+
.replace(
|
|
125
|
+
"gl_FragColor = vec4( color, opacity * ( 1.0 - getShadowMask() ) );",
|
|
126
|
+
"vec3 radiance = texture2D(arrayInteriorMap, vArrayUv).rgb;\n" +
|
|
127
|
+
"gl_FragColor = vec4(radiance * mix(1.0, getShadowMask(), arrayShadowStrength), 1.0);",
|
|
128
|
+
),
|
|
129
|
+
lights: true,
|
|
130
|
+
fog: true,
|
|
131
|
+
toneMapped: true,
|
|
132
|
+
transparent: false,
|
|
133
|
+
depthTest: true,
|
|
134
|
+
depthWrite: true,
|
|
135
|
+
side: THREE.FrontSide,
|
|
136
|
+
});
|
|
137
|
+
material.name = "Array_Interior";
|
|
138
|
+
return material;
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
/**
|
|
142
|
+
* Bake the packed array's three interior surfaces onto the substrate's real
|
|
143
|
+
* opaque front face. Source meshes/attributes/materials remain caller-owned.
|
|
144
|
+
* The original substrate still supplies its bevels, back face and cast shadow;
|
|
145
|
+
* the cover and perimeter retain their authored geometry and transmission.
|
|
146
|
+
*/
|
|
147
|
+
export function bakeArrayInterior(
|
|
148
|
+
renderer: THREE.WebGLRenderer,
|
|
149
|
+
scene: THREE.Scene,
|
|
150
|
+
sources: THREE.Mesh[],
|
|
151
|
+
options: InteriorBakeOptions = {},
|
|
152
|
+
): ArrayInteriorBake {
|
|
153
|
+
const interiorSurfaces = options.surfaces ?? ARRAY_INTERIOR_SURFACES;
|
|
154
|
+
const shadowStrength = THREE.MathUtils.clamp(options.shadowStrength ?? SHADOW_STRENGTH, 0, 1);
|
|
155
|
+
const substrate = sources.find((mesh) => surfaceName(mesh) === "Optical_Diffuser");
|
|
156
|
+
if (!substrate) throw new Error("Array interior baking requires the optical substrate.");
|
|
157
|
+
if (sources.some((mesh) => Array.isArray(mesh.material))) {
|
|
158
|
+
throw new Error("Array interior baking requires one material per source mesh.");
|
|
159
|
+
}
|
|
160
|
+
if (!renderer.extensions.has("EXT_color_buffer_float")) {
|
|
161
|
+
// Let the caller retain the authored meshes rather than silently clipping
|
|
162
|
+
// HDR lighting into an 8-bit render target on unsupported hardware.
|
|
163
|
+
throw new Error("Array interior baking requires a linear half-float render target.");
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
const meshes: THREE.Mesh[] = [];
|
|
167
|
+
const ownedGeometry = new Set<THREE.BufferGeometry>();
|
|
168
|
+
const ownedMaterial = new Set<THREE.Material>();
|
|
169
|
+
const temporaryGeometry = new Set<THREE.BufferGeometry>();
|
|
170
|
+
const temporaryMaterial = new Set<THREE.Material>();
|
|
171
|
+
let target: THREE.WebGLRenderTarget | undefined;
|
|
172
|
+
let texture: THREE.DataTexture | undefined;
|
|
173
|
+
let disposed = false;
|
|
174
|
+
const dispose = () => {
|
|
175
|
+
if (disposed) return;
|
|
176
|
+
disposed = true;
|
|
177
|
+
for (const geometry of ownedGeometry) geometry.dispose();
|
|
178
|
+
for (const material of ownedMaterial) material.dispose();
|
|
179
|
+
target?.dispose();
|
|
180
|
+
texture?.dispose();
|
|
181
|
+
};
|
|
182
|
+
|
|
183
|
+
try {
|
|
184
|
+
const sourcePosition = substrate.geometry.getAttribute("position");
|
|
185
|
+
let frontZ = -Infinity;
|
|
186
|
+
for (let i = 0; i < sourcePosition.count; i++) frontZ = Math.max(frontZ, sourcePosition.getZ(i));
|
|
187
|
+
const front = extractTriangles(substrate.geometry, (a, b, c) =>
|
|
188
|
+
[a, b, c].every((index) => Math.abs(sourcePosition.getZ(index) - frontZ) < 1e-6),
|
|
189
|
+
);
|
|
190
|
+
ownedGeometry.add(front);
|
|
191
|
+
if (!front.index?.count) throw new Error("The optical substrate has no planar front face.");
|
|
192
|
+
front.computeBoundingBox();
|
|
193
|
+
const bounds = front.boundingBox!;
|
|
194
|
+
const size = bounds.getSize(new THREE.Vector3());
|
|
195
|
+
const center = bounds.getCenter(new THREE.Vector3());
|
|
196
|
+
if (!(size.x > 0 && size.y > 0)) throw new Error("The optical substrate has an empty front face.");
|
|
197
|
+
const position = front.getAttribute("position");
|
|
198
|
+
const uv = new Float32Array(position.count * 2);
|
|
199
|
+
for (let i = 0; i < position.count; i++) {
|
|
200
|
+
uv[i * 2] = (position.getX(i) - bounds.min.x) / size.x;
|
|
201
|
+
uv[i * 2 + 1] = (position.getY(i) - bounds.min.y) / size.y;
|
|
202
|
+
position.setZ(i, position.getZ(i) + SURFACE_OFFSET);
|
|
203
|
+
}
|
|
204
|
+
front.setAttribute("uv", new THREE.BufferAttribute(uv, 2));
|
|
205
|
+
front.computeBoundingBox();
|
|
206
|
+
front.computeBoundingSphere();
|
|
207
|
+
|
|
208
|
+
const bakeScene = new THREE.Scene();
|
|
209
|
+
bakeScene.environment = scene.environment;
|
|
210
|
+
bakeScene.environmentIntensity = scene.environmentIntensity;
|
|
211
|
+
bakeScene.environmentRotation.copy(scene.environmentRotation);
|
|
212
|
+
copyInteriorLights(scene, bakeScene);
|
|
213
|
+
let sourceTriangles = 0;
|
|
214
|
+
let bakedTriangles = 0;
|
|
215
|
+
let letteringTriangles = 0;
|
|
216
|
+
for (const source of sources) {
|
|
217
|
+
const name = surfaceName(source);
|
|
218
|
+
if (!interiorSurfaces.has(name) && name !== "Optical_Diffuser") continue;
|
|
219
|
+
if (interiorSurfaces.has(name)) sourceTriangles += triangleCount(source.geometry);
|
|
220
|
+
let geometry = source.geometry;
|
|
221
|
+
if (name === "Internal_Ceramic" || options.preserveOutsideSubstrate && name !== "Optical_Diffuser") {
|
|
222
|
+
const attribute = source.geometry.getAttribute("position");
|
|
223
|
+
const isLetter = (a: number, b: number, c: number) =>
|
|
224
|
+
name === "Internal_Ceramic" && [a, b, c].every((index) => attribute.getZ(index) > LETTERING_DEPTH)
|
|
225
|
+
|| !!options.preserveOutsideSubstrate && [a, b, c].some(index =>
|
|
226
|
+
attribute.getX(index) < bounds.min.x || attribute.getX(index) > bounds.max.x
|
|
227
|
+
|| attribute.getY(index) < bounds.min.y || attribute.getY(index) > bounds.max.y);
|
|
228
|
+
const lettering = extractTriangles(source.geometry, isLetter);
|
|
229
|
+
ownedGeometry.add(lettering);
|
|
230
|
+
if (lettering.index!.count > 0) {
|
|
231
|
+
const material = (source.material as THREE.Material).clone();
|
|
232
|
+
ownedMaterial.add(material);
|
|
233
|
+
const mesh = new THREE.Mesh(lettering, material);
|
|
234
|
+
mesh.name = options.name ? `${options.name}_${name}_Retained` : "Array_Interior_Lettering";
|
|
235
|
+
mesh.userData.surface = mesh.name;
|
|
236
|
+
mesh.receiveShadow = true;
|
|
237
|
+
meshes.push(mesh);
|
|
238
|
+
letteringTriangles += triangleCount(lettering);
|
|
239
|
+
}
|
|
240
|
+
geometry = extractTriangles(source.geometry, (a, b, c) => !isLetter(a, b, c));
|
|
241
|
+
temporaryGeometry.add(geometry);
|
|
242
|
+
}
|
|
243
|
+
const material = (source.material as THREE.MeshStandardMaterial).clone();
|
|
244
|
+
material.fog = false;
|
|
245
|
+
material.toneMapped = false;
|
|
246
|
+
if (material instanceof THREE.MeshPhysicalMaterial) material.transmission = 0;
|
|
247
|
+
temporaryMaterial.add(material);
|
|
248
|
+
const mesh = new THREE.Mesh(geometry, material);
|
|
249
|
+
mesh.name = name;
|
|
250
|
+
bakeScene.add(mesh);
|
|
251
|
+
bakedTriangles += triangleCount(geometry);
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
const camera = new THREE.OrthographicCamera(-size.x / 2, size.x / 2, size.y / 2, -size.y / 2, 0.1, options.direction ? 20 : 4);
|
|
255
|
+
camera.position.copy(center).addScaledVector(options.direction?.clone().normalize() ?? new THREE.Vector3(0, 0, 1), options.direction ? 10 : 2 - center.z);
|
|
256
|
+
camera.lookAt(center.x, center.y, options.direction ? center.z : 0);
|
|
257
|
+
camera.updateMatrixWorld(true);
|
|
258
|
+
if (options.direction) {
|
|
259
|
+
const projectedBounds = bounds.clone().applyMatrix4(camera.matrixWorldInverse);
|
|
260
|
+
camera.left = projectedBounds.min.x; camera.right = projectedBounds.max.x;
|
|
261
|
+
camera.bottom = projectedBounds.min.y; camera.top = projectedBounds.max.y;
|
|
262
|
+
camera.updateProjectionMatrix();
|
|
263
|
+
const projected = new THREE.Vector3();
|
|
264
|
+
for (let i = 0; i < position.count; i++) {
|
|
265
|
+
projected.fromBufferAttribute(position, i).project(camera);
|
|
266
|
+
uv[i * 2] = projected.x * 0.5 + 0.5;
|
|
267
|
+
uv[i * 2 + 1] = projected.y * 0.5 + 0.5;
|
|
268
|
+
}
|
|
269
|
+
front.getAttribute("uv").needsUpdate = true;
|
|
270
|
+
}
|
|
271
|
+
const maximum = Math.min(options.maxSize ?? 1024, renderer.capabilities.maxTextureSize);
|
|
272
|
+
const aspect = (camera.right - camera.left) / (camera.top - camera.bottom);
|
|
273
|
+
const width = options.direction ? Math.max(1, Math.round(maximum * Math.min(1, aspect))) : maximum;
|
|
274
|
+
const height = options.direction ? Math.max(1, Math.round(maximum * Math.min(1, 1 / aspect))) : Math.max(1, Math.round(width * size.y / size.x));
|
|
275
|
+
target = new THREE.WebGLRenderTarget(width, height, {
|
|
276
|
+
type: THREE.HalfFloatType,
|
|
277
|
+
format: THREE.RGBAFormat,
|
|
278
|
+
colorSpace: THREE.LinearSRGBColorSpace,
|
|
279
|
+
depthBuffer: true,
|
|
280
|
+
stencilBuffer: false,
|
|
281
|
+
minFilter: THREE.LinearFilter,
|
|
282
|
+
magFilter: THREE.LinearFilter,
|
|
283
|
+
generateMipmaps: false,
|
|
284
|
+
});
|
|
285
|
+
|
|
286
|
+
const saved = {
|
|
287
|
+
target: renderer.getRenderTarget(),
|
|
288
|
+
face: renderer.getActiveCubeFace(),
|
|
289
|
+
mip: renderer.getActiveMipmapLevel(),
|
|
290
|
+
viewport: renderer.getViewport(new THREE.Vector4()),
|
|
291
|
+
scissor: renderer.getScissor(new THREE.Vector4()),
|
|
292
|
+
scissorTest: renderer.getScissorTest(),
|
|
293
|
+
clearColor: renderer.getClearColor(new THREE.Color()),
|
|
294
|
+
clearAlpha: renderer.getClearAlpha(),
|
|
295
|
+
autoClear: renderer.autoClear,
|
|
296
|
+
autoClearColor: renderer.autoClearColor,
|
|
297
|
+
autoClearDepth: renderer.autoClearDepth,
|
|
298
|
+
autoClearStencil: renderer.autoClearStencil,
|
|
299
|
+
toneMapping: renderer.toneMapping,
|
|
300
|
+
exposure: renderer.toneMappingExposure,
|
|
301
|
+
outputColorSpace: renderer.outputColorSpace,
|
|
302
|
+
shadowEnabled: renderer.shadowMap.enabled,
|
|
303
|
+
shadowAutoUpdate: renderer.shadowMap.autoUpdate,
|
|
304
|
+
shadowNeedsUpdate: renderer.shadowMap.needsUpdate,
|
|
305
|
+
xrEnabled: renderer.xr.enabled,
|
|
306
|
+
clippingPlanes: renderer.clippingPlanes,
|
|
307
|
+
localClipping: renderer.localClippingEnabled,
|
|
308
|
+
};
|
|
309
|
+
const pixels = new Uint16Array(width * height * 4);
|
|
310
|
+
// Some readback failures only log an error. A NaN sentinel plus opaque,
|
|
311
|
+
// finite-pixel validation keeps those failures on the real-geometry path.
|
|
312
|
+
pixels.fill(0x7e00);
|
|
313
|
+
try {
|
|
314
|
+
renderer.xr.enabled = false;
|
|
315
|
+
renderer.shadowMap.enabled = false;
|
|
316
|
+
renderer.shadowMap.autoUpdate = false;
|
|
317
|
+
renderer.shadowMap.needsUpdate = false;
|
|
318
|
+
renderer.clippingPlanes = [];
|
|
319
|
+
renderer.localClippingEnabled = false;
|
|
320
|
+
renderer.toneMapping = THREE.NoToneMapping;
|
|
321
|
+
renderer.toneMappingExposure = 1;
|
|
322
|
+
renderer.outputColorSpace = THREE.LinearSRGBColorSpace;
|
|
323
|
+
renderer.autoClear = true;
|
|
324
|
+
renderer.autoClearColor = true;
|
|
325
|
+
renderer.autoClearDepth = true;
|
|
326
|
+
renderer.autoClearStencil = true;
|
|
327
|
+
// RenderTarget viewport/scissor are physical pixels. Renderer.setViewport
|
|
328
|
+
// would multiply by the main canvas DPR and crop this independent image.
|
|
329
|
+
renderer.setRenderTarget(target);
|
|
330
|
+
renderer.setClearColor(0x000000, 1);
|
|
331
|
+
renderer.render(bakeScene, camera);
|
|
332
|
+
renderer.readRenderTargetPixels(target, 0, 0, width, height, pixels);
|
|
333
|
+
let hasColor = false;
|
|
334
|
+
for (let offset = 0; offset < pixels.length; offset += 4) {
|
|
335
|
+
if (pixels[offset + 3] !== 0x3c00) {
|
|
336
|
+
throw new Error("Array interior half-float readback did not produce an opaque image.");
|
|
337
|
+
}
|
|
338
|
+
for (let channel = 0; channel < 3; channel++) {
|
|
339
|
+
const value = pixels[offset + channel];
|
|
340
|
+
if ((value & 0x7c00) === 0x7c00) {
|
|
341
|
+
throw new Error("Array interior half-float readback contains non-finite pixels.");
|
|
342
|
+
}
|
|
343
|
+
if ((value & 0x7fff) !== 0) hasColor = true;
|
|
344
|
+
}
|
|
345
|
+
}
|
|
346
|
+
if (!hasColor) throw new Error("Array interior baking produced an empty image.");
|
|
347
|
+
} finally {
|
|
348
|
+
renderer.setViewport(saved.viewport);
|
|
349
|
+
renderer.setScissor(saved.scissor);
|
|
350
|
+
renderer.setScissorTest(saved.scissorTest);
|
|
351
|
+
renderer.setRenderTarget(saved.target, saved.face, saved.mip);
|
|
352
|
+
renderer.setClearColor(saved.clearColor, saved.clearAlpha);
|
|
353
|
+
renderer.autoClear = saved.autoClear;
|
|
354
|
+
renderer.autoClearColor = saved.autoClearColor;
|
|
355
|
+
renderer.autoClearDepth = saved.autoClearDepth;
|
|
356
|
+
renderer.autoClearStencil = saved.autoClearStencil;
|
|
357
|
+
renderer.toneMapping = saved.toneMapping;
|
|
358
|
+
renderer.toneMappingExposure = saved.exposure;
|
|
359
|
+
renderer.outputColorSpace = saved.outputColorSpace;
|
|
360
|
+
renderer.shadowMap.enabled = saved.shadowEnabled;
|
|
361
|
+
renderer.shadowMap.autoUpdate = saved.shadowAutoUpdate;
|
|
362
|
+
renderer.shadowMap.needsUpdate = saved.shadowNeedsUpdate;
|
|
363
|
+
renderer.xr.enabled = saved.xrEnabled;
|
|
364
|
+
renderer.clippingPlanes = saved.clippingPlanes;
|
|
365
|
+
renderer.localClippingEnabled = saved.localClipping;
|
|
366
|
+
}
|
|
367
|
+
|
|
368
|
+
// Retain pixels in an ordinary texture: context restoration can upload it
|
|
369
|
+
// again, and the existing quality control can change its anisotropy.
|
|
370
|
+
texture = new THREE.DataTexture(pixels, width, height, THREE.RGBAFormat, THREE.HalfFloatType);
|
|
371
|
+
texture.name = options.name ?? "Rhine array interior radiance";
|
|
372
|
+
texture.colorSpace = THREE.LinearSRGBColorSpace;
|
|
373
|
+
texture.flipY = false;
|
|
374
|
+
texture.generateMipmaps = true;
|
|
375
|
+
texture.minFilter = THREE.LinearMipmapLinearFilter;
|
|
376
|
+
texture.magFilter = THREE.LinearFilter;
|
|
377
|
+
texture.anisotropy = Math.min(4, renderer.capabilities.getMaxAnisotropy());
|
|
378
|
+
texture.needsUpdate = true;
|
|
379
|
+
target.dispose();
|
|
380
|
+
target = undefined;
|
|
381
|
+
const material = proxyMaterial(texture, shadowStrength);
|
|
382
|
+
ownedMaterial.add(material);
|
|
383
|
+
const proxy = new THREE.Mesh(front, material);
|
|
384
|
+
proxy.name = options.name ?? "Array_Interior";
|
|
385
|
+
proxy.userData.surface = proxy.name;
|
|
386
|
+
proxy.receiveShadow = shadowStrength > 0;
|
|
387
|
+
meshes.unshift(proxy);
|
|
388
|
+
const proxyTriangles = triangleCount(front);
|
|
389
|
+
let textureBytes = 0;
|
|
390
|
+
for (let w = width, h = height; ; w = Math.max(1, w >> 1), h = Math.max(1, h >> 1)) {
|
|
391
|
+
textureBytes += w * h * 8;
|
|
392
|
+
if (w === 1 && h === 1) break;
|
|
393
|
+
}
|
|
394
|
+
return {
|
|
395
|
+
meshes,
|
|
396
|
+
texture,
|
|
397
|
+
dispose,
|
|
398
|
+
stats: {
|
|
399
|
+
width, height, sourceTriangles, bakedTriangles, proxyTriangles,
|
|
400
|
+
letteringTriangles, instanceTriangles: proxyTriangles + letteringTriangles,
|
|
401
|
+
textureType: "half-float", textureBytes, shadowStrength,
|
|
402
|
+
},
|
|
403
|
+
};
|
|
404
|
+
} catch (error) {
|
|
405
|
+
dispose();
|
|
406
|
+
throw error;
|
|
407
|
+
} finally {
|
|
408
|
+
for (const geometry of temporaryGeometry) geometry.dispose();
|
|
409
|
+
for (const material of temporaryMaterial) material.dispose();
|
|
410
|
+
}
|
|
411
|
+
}
|