Initial commit: RHINE LAB · ANALYSIS OS:三维界面与动效实验(本仓库不含个人归档索引数据)
@@ -0,0 +1,21 @@
|
||||
# 侧边角度条纹修复
|
||||
|
||||
基线:`ca578332ebe35107740e94d2406f208ed4624c03`,标签 `baseline-2026-09-08`。本地完整快照保存在 `backups/render-baseline-20260908-021308`。
|
||||
|
||||
标注位置对应 Amber_Lightguide。导光条前表面仅比透明盖板前表面靠前 0.002 世界单位,原有远距离透视镜头在部分角度下无法稳定区分深度,形成斜向条纹。以 -0.8 弧度稳定复现。
|
||||
|
||||
仅给 Amber_Lightguide 材质添加 polygonOffset,factor=-1、units=-2。模型 GLB 与基线 SHA256 相同;相机、裁剪面、灯光、AO、颜色、透射与动效均未改变。
|
||||
|
||||
验证:
|
||||
|
||||
- 实际场景在 -0.8、-0.45、0、+0.8 弧度对照;标注侧条的斜纹消失,螺钉和标签的遮挡正常。
|
||||
- 关闭 AO 后基线问题仍存在;临时提高近裁剪面能消除问题但改变 AO 层次,因此最终只修正局部材质。
|
||||
- 切换档案并归位时,当前和旧卡片都保留同一深度偏移,旧卡片仍先转正再下降。
|
||||
- `node scripts/check-appearance.mjs`、`node scripts/check-motion.mjs`、`npm run build` 通过。
|
||||
|
||||
本地复核页面(开发服务):
|
||||
|
||||
- 修复前:`/reference/detail-transition.html?t=5&angle=-0.8&sharp=1&close=1&offset=0`
|
||||
- 修复后:`/reference/detail-transition.html?t=5&angle=-0.8&sharp=1&close=1`
|
||||
|
||||
`sharp` 仅在验证页关闭景深以方便观察,产品仍使用原有景深。
|
||||
@@ -0,0 +1,159 @@
|
||||
# 全量归档阵列(2026-09-12)⚠️ 已回退,仅存档
|
||||
|
||||
> **本文档描述的方案已于 2026-09-12 当天整体回退**,用户判定"索引完全改坏"。文中提到的
|
||||
> `src/archive-array.ts` / `scripts/check-array.mjs` / `npm run check:array` / `loadArchiveDataset` /
|
||||
> `searchDataset` / `laneCenter` / `rowPeriod` / `ROW_SNAP_DISTANCE` **都已不存在**,不要再按本文实现。
|
||||
> 当前机制见 [`../AGENTS.md`](../AGENTS.md) 顶部「索引与阵列:当前机制(权威)」。保留本文只为记录当时的
|
||||
> 设计与失败原因(列外条目错位、检索列表被 `00_索引` 元数据文件淹没)。
|
||||
|
||||
把三维档案阵列从**写死的 5 列 × 8 条(40 条精选档案)**改造为**全量归档驱动**:列 = 归档顶层内容分类,列内是该分类下的真实归档条目。条目简介由索引自动派生。
|
||||
|
||||
使用与安全边界见 [`../docs/LOCAL-ARCHIVE.md`](../docs/LOCAL-ARCHIVE.md)。
|
||||
|
||||
## 架构:两个数据集,一套寻址接口
|
||||
|
||||
| 数据集 | 来源 | 规模 | 作用 |
|
||||
| --- | --- | ---: | --- |
|
||||
| `curated` | `content/archives.json`(生成物,手写内容在 `content/curated.mjs`) | 5 列 / 40 条 | ① 模块加载时即刻可用,保证 `main.ts` 顶层的同步访问不炸 ② 归档索引不可用时降级 |
|
||||
| `archive` | `public/archive-index.json`(生成物) | 7 列 / **32 张盘**(盘内 49,965 条) | `start()` 里由 `loadArchiveDataset()` 换上,阵列与检索的正式数据源 |
|
||||
|
||||
`data.ts` 的 `columnFiles` / `fileLocation` / `fileAtSlot` / `indexAtCell` 对两个数据集是同一套接口,因此阵列、循环、拖拽、收藏都不需要知道当前用的是哪一份。
|
||||
|
||||
## 为什么必须做性能改造
|
||||
|
||||
优化前后的实测(真实 49,997 条索引):
|
||||
|
||||
| 指标 | 旧实现 | 新实现 |
|
||||
| --- | ---: | ---: |
|
||||
| 2000 次寻址 | **38,365 ms** | **0.33 ms** |
|
||||
| 单次寻址 | ~19 ms | ~0.0002 ms |
|
||||
| 一百万个格子反查 | — | 23 ms |
|
||||
| 建表(一次性) | — | 72 ms |
|
||||
| 全量数据集载入 | — | 181–231 ms |
|
||||
|
||||
旧实现每次调用都 `.map().filter()` 扫全量再用 `.indexOf()` 定位。真实后果不是"每帧卡",而是**输入路径**卡:hover 每次进新格一次全扫(约 19 ms)、滚轮每步两次、**一次拖动最多 64 次(约 1.2 秒)**。
|
||||
|
||||
> 记录一条判断失误:我曾据基准推算出"旧写法每帧 19 秒",这是错的。渲染循环 `scene.update` 里根本不调用 `columnFiles` / `fileAtCell`(每帧 0 次),开销全在输入路径。
|
||||
|
||||
## 关键设计决策
|
||||
|
||||
### 1. 全局行周期(这是全量化最容易错的一点)
|
||||
|
||||
行坐标靠"减去周期整数倍"做归一化(rebase),而位移必须保持内容不变 —— 也就是必须是该列**取模周期的整数倍**。各列长度不同(2340 / 14797 / 20675 …)时**不存在公共周期**。
|
||||
|
||||
解法:引入**全局行周期 = 最长一列的条数**(`data.ts` 的 `rowPeriod()`)。`indexAtCell` 先用全局周期定位槽位、再落到该列自身长度上:
|
||||
|
||||
```
|
||||
slot = wrap(row - ROW_BASE, rowPeriod)
|
||||
item = members[slot % members.length]
|
||||
```
|
||||
|
||||
于是任何全局周期整数倍的平移都不改变结果,rebase 成立。`curated` 下各列都是 8,与原行为逐位一致。
|
||||
|
||||
`scripts/check-array.mjs` 专门断言了这条不变性(±1 个周期与 +3 个周期)。
|
||||
|
||||
### 2. `fileAtSlot` 与 `indexAtCell` 语义不同,不能合并
|
||||
|
||||
- `fileAtSlot` —— **截断**(越界夹到首尾)。只服务 boot 与 `?time=`/`review=1` 逐帧对照的固定 160 布局,必须与原片一致。
|
||||
- `indexAtCell` —— **循环取模**。服务交互阵列的无限循环。
|
||||
|
||||
中途我把 `fileAtSlot` 误写成取模,等价性检查立刻报出 110 处差异(每列 12 行 × 9 列边距)。已改回截断。
|
||||
|
||||
### 3. 展示字段惰性物化 + 有界缓存
|
||||
|
||||
五万条记录若都生成摘要文本,仅数据就约 35 MB。`data.ts` 用 `Proxy` 惰性物化:只给真正被读到的条目算文本(首读一条含派生摘要约 **0.008 ms**)。缓存上限 1024,防止日后有人全量遍历时几十 MB 常驻。
|
||||
|
||||
### 4. 检索在紧凑索引上,绝不遍历 `records`
|
||||
|
||||
`renderResults` 曾经 `records.map().filter()` —— 全量下会物化五万条。现在走 `searchDataset()`:只比对路径字符串(小写路径惰性建一次),命中后由调用方按需读那几条。实测路径检索 **9 ms**。
|
||||
|
||||
`scene.ts` 对 `records` 的引用数现在是 **0**;`main.ts` 只剩 4 处 `records.length`(O(1))与一处位于 curated 分支的 `forEach`。
|
||||
|
||||
### 5. 收藏改按路径键
|
||||
|
||||
编号是数组下标,归档新增文件会整体位移,按编号存会让旧收藏指到别的档案。改为 `recordKey()`(优先归档相对路径,退化为编号),`indexOfKey()` 用惰性 Map 反查。
|
||||
|
||||
### 6. 刻度条窗口化
|
||||
|
||||
`#file-ticks` 原先每条档案一个按钮;20,675 条会渲染两万个 DOM 节点。改为固定 8 个按钮的滑动窗口(`TICK_WINDOW`),随选中位置移动、按循环语义环绕。
|
||||
|
||||
### 7. 列数参数化
|
||||
|
||||
| 位置 | 改动 |
|
||||
| --- | --- |
|
||||
| `archive-loop.ts` | 新增 `configureLoop(columnCount)`;`LOOP_COLUMNS` / `POOL_LANES` 改为 live binding。前五项恒为真实列(列数不足时回绕),保证固定 160 布局永远成立 |
|
||||
| `archive-visibility.ts:36-37,42` | `+2` / `(lane-2)` → `laneCenter()` |
|
||||
| `scene.ts` | 四处 lane 原点改用 `laneCenter()`;rebase 周期 `(lane-2)/5` → `/(列数)`、`(row-12)/8` → `/rowPeriod()`;`laneFocus` 与 `selectedSlot` 初值随列数;`Math.floor(selectedSlot/32)` → `ROW_STRIDE` |
|
||||
| `motion.ts` | `archiveWave` / `cinematicField` 增加 `laneOrigin` 可选参数(默认 2,保持签名兼容,也不把数据层拖进纯数学模块) |
|
||||
| `main.ts` | `COLUMN 03 / 05` 的 /05 改为动态;`columnMemory` 改为可重建;新增 `applyColumnChrome()` |
|
||||
|
||||
`scene.ts:1596` 的 `fixed` 路径(boot + 逐帧对照)**保持不变**:仍是 `Array.from({length:160})` 的 5 列 × 32 行,因为它是原片对照基准。正常入场走的是动态路径(`responsiveOpening` 令 `fixed=false`),所以 boot → archive 之间不会跳变,只是入场画面从 5 列变成 7 列。
|
||||
|
||||
### 8. 远距离跳转直接落位
|
||||
|
||||
`selectionCell` 的 `nearestOccurrence` 会把目标行放到离当前位置最近的同现点,最大距离是**列长的一半**——最长列 20,675 条,即最远 10,337 行。照阻尼飞过去镜头会横穿整列。
|
||||
|
||||
`scene.ts` 因此加了 `ROW_SNAP_DISTANCE = 64`(可视窗口 32 行的两倍):行距超过它就认定是跳转而非移动,`shoulder` 与 `rail` 直接赋值、速度清零。
|
||||
|
||||
- 只作用于**行轴**。列轴最远只有半个列数(`nearestOccurrence` 对 7 列最多 3 列),原动画保留,不介入。
|
||||
- 拖动、惯性、抽取期间由它们接管轨道,条件里显式排除,不干扰已确认的交互。
|
||||
- 正常导航不会误触发:方向键与滚轮的连按滞后远小于 64 行(`check-array` 断言相邻移动的行距恒为 1)。
|
||||
|
||||
阈值两侧都由 `npm run check:array` 用真实数据钉住:相邻移动距离必须为 1,半列之外的跳转距离必须大于 64。
|
||||
|
||||
## 刻意没有改的东西
|
||||
|
||||
- **校验器 `archive-content.mjs` 与 `check-content.mjs` 未放宽**。因为 `content/archives.json` 仍是 curated 数据集、仍是 5 列 × 8 条 × 40 条,校验契约依旧成立 —— 原计划要放宽,架构定下来后发现没必要。
|
||||
- **`export-records.mjs` / `build-pwa.mjs` 未改**。TXT 导出仍只针对 40 条精选档案(40 个文件),不会线性膨胀。
|
||||
|
||||
## 盘的粒度:一个项目一张盘(2026-09-12 修正)
|
||||
|
||||
第一版把**每个文件**都做成一张盘(49,997 张),这是错的。用户指出正确模型是"**一个项目就是一个 3D 盘,在盘内的页面可以自由访问所有文件**"。错误版本有两个可见后果:
|
||||
|
||||
1. 检索列表一打开就列 `records` 的前 60 条,而索引按路径排序,头 60 条正好是 `00_索引` 下的 CSV / MD / TXT 元数据文件;
|
||||
2. 这些条目 `laneOf < 0`(不在任何列里),选中时 `fileLocation` 退回 `{lane: 0, row: 12}`,**抽出的是第一列的第一张盘**——完全错位。
|
||||
|
||||
现在的规则:
|
||||
|
||||
- **盘 = 分类下的第 1 层目录**(项目单元)。文件不是盘,更深的目录也不是盘。
|
||||
- 列外条目不再参与 `searchDataset`,也不会出现在检索列表里;未输入关键字时列的是各列的盘。
|
||||
- 详情页新增 **04 盘内文件** 页签:列当前盘的直接子项(目录在前),可逐层进入并带面包屑,文件可【打开】【定位】。
|
||||
|
||||
列分布:`4 / 2 / 11 / 3 / 4 / 4 / 4 = 32 张盘`,`unlisted` 49,965(盘内文件与更深结构)。
|
||||
|
||||
**副作用**:`ROW_SNAP_DISTANCE = 64` 在盘模型下**休眠**——最长列 11 张盘,最近同现点最远 5 行。阈值保留以应对粒度变化;`check-array` 会报告 `snapEngaged`,并在列长超过阈值时自动改断言为"必须触发"。
|
||||
|
||||
## 证据
|
||||
|
||||
```
|
||||
$ npm run check:array
|
||||
{
|
||||
"entries": 49997,
|
||||
"columns": 7,
|
||||
"counts": [2340, 14797, 20675, 11901, 200, 15, 32],
|
||||
"unlisted": 37,
|
||||
"rowPeriod": 20675,
|
||||
"roundTripsChecked": 89,
|
||||
"searchMs": 9,
|
||||
"addressMsPerMillion": 23,
|
||||
"checks": "passed"
|
||||
}
|
||||
|
||||
$ npx tsc --noEmit → exit 0
|
||||
$ npm run check:content → 18 pass / 0 fail
|
||||
$ node scripts/check-archive.mjs → checks: passed(40 条 / 每列 8 / 帧 760 波峰等高)
|
||||
$ node scripts/check-loop.mjs → checks: passed(poolSize 288 / referenceInstances 160)
|
||||
$ npm run build → exit 0,离线包 818 files / 33.9 MiB
|
||||
```
|
||||
|
||||
行为等价性(对既有 40 条,与旧实现逐位对比):`fileLocation` / `fileAtSlot` / `columnFiles` 差异均为 **0**。
|
||||
|
||||
## 尚未验证与已知取舍
|
||||
|
||||
- **浏览器内的实际观感**:项目无 Playwright / Puppeteer,也没有无头 WebGL 环境。7 列下的构图、卡片观感、`archiveCandidates` / `archiveCulled` 的真实数值,都需要人工在 `npm run dev:archive` 下确认。剔除遥测可从
|
||||
`JSON.parse(document.querySelector('#three-scene').dataset.renderStats)` 读取。
|
||||
- 相机位置与 fov 是按 5 列调的,但交互阵列本就只显示约 5 列、靠 `columnCamera` 横向平移到达其余列,因此**预期**只是横向可视列数不变、需要平移才能看到边缘列,而非取景错误。这一点未经实机确认。
|
||||
- **列极不均衡**:`03_代码与项目` 20,675 条 vs `06_下载与安装包` 15 条。列数已参数化,若要改成"大分区拆子列"只需换列规则。
|
||||
- **行坐标量级**:rebase 前行可达 20,675,z 约 12,800 单位。相机相对矩阵下精度约 0.001(卡片尺寸约 5),预期无可见影响,但未实测。
|
||||
- **旧收藏**:早先按 `X-0NN` 编号存的收藏不会解析到路径键,会从收藏列表消失(仍留在 localStorage)。按编号存的语义本就与全量归档冲突,取舍是明确的。
|
||||
|
||||
@@ -0,0 +1,199 @@
|
||||
# 本地归档接入验证(2026-09-12)
|
||||
|
||||
本轮把 `E:\归档`(约 90 GB / 45,055 个文件 / 4,937 个目录)接入本项目:四十条精选档案改为由真实归档生成,新增 **LOCAL ARCHIVE** 面板做全量检索与安全写操作。
|
||||
|
||||
实现说明见 [`../docs/LOCAL-ARCHIVE.md`](../docs/LOCAL-ARCHIVE.md),数据维护见 [`../content/README.md`](../content/README.md)。
|
||||
|
||||
## 新增与改动
|
||||
|
||||
| 文件 | 类型 | 说明 |
|
||||
| --- | --- | --- |
|
||||
| `archive.config.json` | 新增 | 归档根目录、端口、索引与日志位置 |
|
||||
| `content/curated.mjs` | 新增 | 四十条档案的手写部分与对应的真实 `path` |
|
||||
| `scripts/archive-source.mjs` | 新增 | 扫描归档,生成 `archives.json`、`archive-index.json`、40 个 TXT |
|
||||
| `scripts/archive-service.mjs` | 新增 | 回环服务:令牌、路径围栏、检索、读写操作、目录监视 |
|
||||
| `scripts/archive-dev.mjs` | 新增 | 一条命令同时启动服务与 Vite |
|
||||
| `src/archive-service.ts` | 新增 | 浏览器端客户端,含静态快照降级 |
|
||||
| `src/archive-panel.ts` | 新增 | 检索与归档操作面板 |
|
||||
| `src/archive-panel.css` | 新增 | 面板样式,全部走 `--theme-*` 变量 |
|
||||
| `scripts/archive-content.mjs` | 改动 | `source` 接受 `file:`;TXT 模板改为归档口径 |
|
||||
| `src/main.ts` | 改动 | 导航新增 LOCAL ARCHIVE 按钮、点击分支、面板实例化;详情页 EXPORT 下载改为 SHOW IN FOLDER 定位 |
|
||||
| `src/data.ts` | 改动 | `ArchiveRecord` 增加可选的 `path` 与 `stats`(生成物写入的真实归档信息) |
|
||||
| `src/style.css`、`src/responsive.css` | 改动 | `.export-button` 改为双语按钮并加宽;新增被截断的 `.detail-path` |
|
||||
| `vite.config.ts` | 改动 | `server`/`preview` 增加 `/archive-api` 代理并注入令牌 |
|
||||
| `package.json` | 改动 | 新增 `dev:archive`、`archive:snapshot`、`archive:serve`;钩子改跑 `archive-source.mjs` |
|
||||
| `.gitignore` | 改动 | 忽略 `.archive-token` |
|
||||
| `content/README.md` | 改动 | 说明 `archives.json` 现在是生成物;`path` 的两个用途 |
|
||||
| `docs/LOCAL-ARCHIVE.md`、`verification/ARCHIVE-INTEGRATION.md` | 新增 | 用法、安全边界与实测记录 |
|
||||
|
||||
**没有改动的**:`src/scene.ts`、`src/archive-loop.ts` 与阵列数学。五列、每列八份、`X-0NN` 稳定编号的约束原样保留,`archive-content.mjs` 的三条硬校验(五分类 / 四十条 / 每类八条)未放宽。
|
||||
|
||||
## 证据
|
||||
|
||||
### 1. 数据校验与构建
|
||||
|
||||
```
|
||||
$ npm run check:content
|
||||
ℹ tests 18 ℹ pass 18 ℹ fail 0
|
||||
|
||||
$ npx tsc --noEmit
|
||||
exit=0
|
||||
|
||||
$ npm run build
|
||||
归档快照已更新:40 条精选档案,45055 个文件 / 4937 个目录 / 90.03 GB
|
||||
dist/assets/index-KZVOVeb_.js 993.68 kB │ gzip: 301.66 kB
|
||||
✓ built in 2.48s
|
||||
Offline release 22cf358e6368842a: 818 files, 33.8 MiB.
|
||||
build exit=0
|
||||
```
|
||||
|
||||
`check:content` 的 18 项包含"下载 TXT 与 `archiveText` 逐字节一致(含 BOM)",即 40 个 TXT 与 `archives.json` 同步;放宽 `source` 协议后,`rejects unsafe URL`(`javascript:`)与 `rejects invalid URL`(`example.com`)两项仍如期失败,说明放宽没有引入注入面。
|
||||
|
||||
### 2. 服务接口实测
|
||||
|
||||
| 用例 | 结果 |
|
||||
| --- | --- |
|
||||
| 无令牌 `GET /status` | `401`,正确拒绝 |
|
||||
| `GET /status` | `{"root":"E:\\归档","watching":true,"totals":{"files":45055,"dirs":4937,...},"sevenZip":true}` |
|
||||
| `POST /open {"path":"../Windows/system.ini"}` | `403`(越界拦截) |
|
||||
| `POST /reveal {"path":"C:\\Windows\\win.ini"}` | `403`(绝对路径拦截) |
|
||||
| `POST /open {"path":"不存在的目录/foo.txt"}` | `404` |
|
||||
| `POST /plan {"op":"mkdir"}` → `apply` | `blocked=null`,目录创建成功 |
|
||||
| `POST /plan {"op":"move"}` → `apply` | `files=1 bytes=18`,移动成功,源消失 |
|
||||
| 目标已存在时 `plan move` | `blocked="目标已存在,请换一个名字"` |
|
||||
| `plan move` 到 `D:\` | `403`(目标越界拦截) |
|
||||
| `POST /plan {"op":"extract","from":"07_日志与排查/LOG.7z"}` → `apply` | 解出 4 个文件,与包内条目数一致 |
|
||||
| `POST /apply` 缺少 `confirm` | `400`,且未创建任何目录 |
|
||||
| `GET /index`(gzip) | 7,767,411 字节 → 698,629 字节(约 9 倍) |
|
||||
| `POST /refresh` | 返回新的快照时间 |
|
||||
|
||||
操作日志按预期落盘:
|
||||
|
||||
```json
|
||||
{"at":"2026-09-12T02:10:44.855Z","op":"mkdir","from":null,"to":"_测试_归档操作","result":"ok"}
|
||||
{"at":"2026-09-12T02:10:44.872Z","op":"move","from":"_测试源文件.txt","to":"_测试_归档操作/测试源文件.txt","result":"ok"}
|
||||
{"at":"2026-09-12T02:10:44.946Z","op":"extract","from":"07_日志与排查/LOG.7z","to":"_测试_归档操作/LOG_解压","result":"ok"}
|
||||
```
|
||||
|
||||
测试产物已全部删除,归档中已无 `_测试_*` 条目。
|
||||
|
||||
### 3. 自动更新
|
||||
|
||||
在归档根新建 `_自动更新测试.txt`,**不调用任何刷新接口**,等待 8 秒后检索:
|
||||
|
||||
```
|
||||
索引命中 1 条:_自动更新测试.txt
|
||||
最近一次快照:09/12/2026 02:11:06
|
||||
```
|
||||
|
||||
删除该文件后再次等待,快照随之更新为 `02:11:14`。递归监视器与防抖重生生效。
|
||||
|
||||
### 4. 开发链路
|
||||
|
||||
```
|
||||
$ npm run dev
|
||||
归档快照已更新:40 条精选档案,45055 个文件 / 4937 个目录 / 90.03 GB
|
||||
VITE v7.3.6 ready in 426 ms
|
||||
➜ Local: http://127.0.0.1:5174/ (5173 已被占用)
|
||||
|
||||
GET http://127.0.0.1:5174/ → 200, text/html
|
||||
GET http://127.0.0.1:5174/archive-api/status → 200, 返回真实 status(令牌由代理注入)
|
||||
GET http://127.0.0.1:5174/archive-api/search?q=runs.7z → 命中 2 条,含 01_人工智能/01_训练产物/runs.7z
|
||||
GET http://127.0.0.1:5174/archive-index.json → 200(静态降级路径可用)
|
||||
GET http://127.0.0.1:5174/src/archive-panel.ts → 200, 57,329 字节(Vite 转译无错)
|
||||
GET http://127.0.0.1:5174/src/archive-service.ts → 200, 15,727 字节
|
||||
```
|
||||
|
||||
### 5. 产物复核
|
||||
|
||||
```
|
||||
dist/assets/index-KZVOVeb_.js : LOCAL ARCHIVE / local-archive / la-surface /
|
||||
archive-index.json / archive-api / 正在检测归档服务 全部命中
|
||||
dist/assets/index-DeuQtmYI.css : .la-surface 命中
|
||||
dist/archives/*.txt : 40 个
|
||||
dist/archive-index.json : 7.41 MB(未进入 PWA 预缓存,818 files / 33.8 MiB 与改动前同量级)
|
||||
```
|
||||
|
||||
### 6. 详情页 EXPORT 改为定位文件位置
|
||||
|
||||
按用户要求,详情页右下角的 EXPORT(下载 TXT)改为 **SHOW IN FOLDER / 文件位置**:直接用该档案的真实 `path` 调 `/reveal`,在资源管理器中打开其所在位置。
|
||||
|
||||
改动点:
|
||||
|
||||
- `src/main.ts:513` 的 `<a class="export-button" href="archives/…" download>` 换成 `<button data-action="reveal-archive">`;新增 `revealSelectedArchive()`,先 `fetchStatus()` 判断服务是否在线,离线时提示"需要本地归档服务:请运行 `npm run dev:archive`",不静默失败。
|
||||
- `src/data.ts` 的 `ArchiveRecord` 增加可选 `path` 与 `stats`。
|
||||
- `.export-button` 加宽到 190px 并把 `<span>` 从箭头字号改回双语副标题(11px、`--theme-muted`);紧凑/竖屏布局改为 132px。这处 `span` 样式只被该按钮使用,无外溢。
|
||||
- 顺带修一处因接入本地数据而失效的地方:详情页脚注原本是 `<a href="${r.source}">设定参考 ↗</a>`,而 `source` 现在是 `file:` 链接,**浏览器不允许网页跳转 `file:`**。改为显示归档内相对路径文本(过长省略,完整值在 `title`),新增 `.detail-path`。
|
||||
|
||||
验证:
|
||||
|
||||
```
|
||||
40 条档案全部带 path(40/40),示例 01_人工智能\01_训练产物\runs.7z
|
||||
POST /reveal {"path":"01_人工智能\\01_训练产物\\runs.7z"} → HTTP 200, action=reveal
|
||||
npx tsc --noEmit → exit=0
|
||||
npm run build → exit=0, dist/assets/index-BoST1KaL.js 994.12 kB
|
||||
开发服务器 /src/main.ts 已含 reveal-archive / SHOW IN FOLDER / revealSelectedArchive / detail-path
|
||||
产物:SHOW IN FOLDER、reveal-archive、需要本地归档服务、.detail-path 全部命中;"EXPORT <span>" 已无残留
|
||||
```
|
||||
|
||||
`public/archives/*.txt` 仍会生成(`check:content` 依赖它们),只是详情页不再有下载入口。
|
||||
|
||||
### 7. 修复"归档新增了却搜不到"
|
||||
|
||||
用户报告:外部智能体往 `E:\归档` 导入了三个大包(7.26 GB + 6.63 GB + 6.71 GB),界面里搜不到。
|
||||
|
||||
**诊断过程**(先证伪,再改代码):
|
||||
|
||||
| 检查 | 结果 |
|
||||
| --- | --- |
|
||||
| 文件是否在磁盘 | 三个包都在,`01_人工智能` 34.9 → 41.45 GB,`03_代码与项目` 7.12 → 20.69 GB |
|
||||
| 快照是否过期 | 否。`NM2_原版...7z` mtime `14:34:11` → 快照生成 `14:34:25`,**14 秒后**自动重建 |
|
||||
| 服务是否报错 | `/status` 的 `lastError` 为空 |
|
||||
| 索引内容 | 完整复刻面板取数路径(`scripts/_diag-search.mjs`):`dpskw` → 3 条、`NM2` → 1 条,服务路径与静态兜底都命中 |
|
||||
|
||||
结论:**索引、监视、检索逻辑全部正确,bug 在前端状态生命周期。**
|
||||
|
||||
**根因**:`LocalArchivePanel` 的索引只在「页面加载后第一次打开面板」时取一次,`loaded` 标志置真后永不复位;`close()` 还会 `unsubscribe()` 退掉服务端事件订阅,而重新订阅只发生在上面的 `loadIndex()` 里。因此**只要用户在文件加进来之前开过面板,之后重开既不重取也不重订阅,永远是旧数据**,除非整页刷新。这是实现缺陷,不是配置问题。
|
||||
|
||||
**修复**:
|
||||
|
||||
1. `src/archive-service.ts` 新增共享索引缓存 `loadArchiveIndex({ maxAgeMs })` 与 `searchArchive()` / `topLevelNames()` / `invalidateArchiveIndex()`。`maxAgeMs: 0` 表示不信任缓存、总是重取。
|
||||
2. 面板**每次打开都重新取索引**(服务在线时 `maxAgeMs: 0`;离线时退回静态快照只取一次),`prepare()` 末尾调 `ensureSubscription()` 重新挂事件流,`close()` **不再退订**。写操作成功后 `invalidateArchiveIndex()` 丢弃共享缓存。
|
||||
3. 顺带清掉面板自己维护的 `entries` / `lowerPaths` 两份派生数组,改由 `searchArchive()` 统一处理(小写路径用 `WeakMap` 按索引实例缓存)。
|
||||
|
||||
**主检索接入全量归档**(用户批准的第二项):主检索弹窗(`/` 或 ARCHIVE INDEX)在四十条列表下方新增「LOCAL ARCHIVE / 本地归档」一栏,显示全量索引最多 5 条命中,每条可【定位】【打开】,点「全部 →」关闭弹窗并打开 LOCAL ARCHIVE 面板并带入检索词。两条路径共用同一份内存索引,不会重复下载 7.4 MB。`renderLocalHits()` 带请求令牌,快速输入时丢弃过期结果;`loadArchiveIndex({ maxAgeMs: 15_000 })` 让结果在 15 秒内保持新鲜。
|
||||
|
||||
布局:`.terminal-modal.has-local-hits .search-results` 由 387px 降到 240px,新增 `.local-hits` 140px,弹窗总高不变。
|
||||
|
||||
**验证**:
|
||||
|
||||
```
|
||||
node scripts/_diag-search.mjs
|
||||
取数路径 : 服务 /archive-api/index
|
||||
条目数 : 49997
|
||||
'dpskw' -> 3 条 03_代码与项目/V2_dpskw-备份
|
||||
'NM2' -> 1 条 01_人工智能/01_训练产物/NM2_原版_..._20260912_142722.7z
|
||||
静态兜底快照含 dpskw: 3 条,含 nm2: 1 条
|
||||
|
||||
npx tsc --noEmit → exit=0
|
||||
npm run build → exit=0
|
||||
```
|
||||
|
||||
**同期补的文档**:`00_索引\归档索引.md` 补登记 `NM2_原版`(另一智能体只写了 `V2_dpskw`)、更新分区体量与合计、新增「八、变更记录」逐笔列出整理后的导入(+20.12 GB);`AGENTS.md` §3.2 从「主界面永远搜不到」改写为「三维阵列看不到、但主检索下方本地归档栏能搜到」,并加入"先查服务与快照时间,再怀疑代码"的排查顺序。
|
||||
|
||||
**遗留**:`scripts/_diag-search.mjs` 是一次性诊断脚本,验证后已删除。
|
||||
|
||||
|
||||
## 尚未验证
|
||||
|
||||
- **浏览器内的实际呈现与交互**:项目未安装 Playwright / Puppeteer,`scripts/check-*.mjs` 均为纯 Node 逻辑测试,无法自动化驱动页面。面板与详情页按钮的布局、明暗配色、按钮手感,以及资源管理器窗口在用户多显示器环境下的落点,需要人工在 `npm run dev:archive` 下确认。
|
||||
- **`/open` 的成功路径**:`/reveal` 的成功路径已用真实档案路径实测(弹出资源管理器并选中 `runs.7z`),`/open` 只验证了越界与不存在两种拦截,未实际唤起默认程序。
|
||||
- **大目录解压的耗时**:仅用 `LOG.7z`(0.4 MB)验证了解压路径。对 `runs.7z`(26 GB)这类大包,`/plan` 只报包体大小,不会预估解压后的体积与耗时。
|
||||
- **非默认浏览器 / 无文件关联时的打开行为**:取决于系统文件关联。
|
||||
|
||||
## 已知取舍
|
||||
|
||||
- `public/archive-index.json` 约 7.4 MB 会随构建进入 `dist`。它是快照而非源码,且不进离线预缓存;若要进一步瘦身,可去掉每个条目的 `mtime` 或改由服务端按需检索。
|
||||
- 面板一次最多渲染 200 行命中,超出部分只计数不渲染,避免一次插入过多 DOM。
|
||||
- 服务不可用时面板为只读,这是刻意降级而非缺陷。
|
||||
- 归档内的 `.archive-token` 不存在:令牌写在**项目根目录**,不在归档内,避免污染归档。
|
||||
@@ -0,0 +1,24 @@
|
||||
# 自适应阵列覆盖验证 · 2026-09-10
|
||||
|
||||
## 实现
|
||||
|
||||
旧交互窗口固定 288 个实例,关闭整组视锥裁剪。新实现使用相机视锥和阵列高度区间计算候选,再按完整卡片包围盒筛选,紧凑写入 InstancedMesh 并设置实际 count;没有通过缩放为零来保留屏幕外的绘制实例。保留屏幕边缘和附近阴影余量,标准/额外两档分别放大视锥横纵范围至 1.18/1.5。
|
||||
|
||||
实例缓冲容量按需增长并复用,不等于实际绘制数量;几何继续共享。射线点击使用紧凑排列后的物理单元映射。显式原片时间轴保留 159 个背景档案与一个选中模型。
|
||||
|
||||
暗色增加灰雾,缩短预览的雾化距离,并增强边缘淡出。亮色参数保持基线。
|
||||
|
||||
## 验证结果
|
||||
|
||||
- `check-archive-visibility.mjs`:16:9、21:9、32:9、4:3、竖屏,预览/详情镜头;独立大范围采样检查实际可见卡片不会落出候选范围,包括最高/最低位置、轨道平移与额外余量;通过。
|
||||
- `reference/coverage-review.html`:Edge 实际预览检查 16:9、32:9、竖屏与竖屏详情。边角有档案连续覆盖;余量选项生效,详情内部结构与正文正常。
|
||||
- 实际采样:1920×1080 暗色标准余量绘制约 277 份(候选约 399);3840×1080 绘制约 492 份(候选约 699);1080×1920 预览约 272 份,竖屏详情额外余量约 213 份。数量随镜头状态变化。这些不是对旧版的帧率提升百分比。
|
||||
- `reference/loop-review.html`:61 次连续循环切换、9 个实际射线点击、数千行列坐标重置、详情净空、先转正后归位与快速重新选中均通过。原片四个时间点保持 159 个背景位置,最大位置误差 5.48e-7。
|
||||
- 原有循环、运动、档案、自由拖动与惯性、主题、律动、视口检查通过。
|
||||
- `check-array-input.mjs` 依赖当前未安装的 Playwright,未执行浏览器步骤;使用上面的实际场景射线验证与纯拖动/惯性检查补充覆盖。
|
||||
|
||||
## 性能边界
|
||||
|
||||
裁剪降低同等覆盖范围内无须提交的实例数,但超宽屏补齐缺失部分可能比旧版 288 份更多。全屏后期处理成本和卡片互相遮挡的片元成本仍存在。浏览器受后台节流与宿主模拟帧率限制,不能把这些检查作为真实 WE 帧率基准;本机壁纸更新后由宿主试用确认实际表现。
|
||||
|
||||
普通构建与 Wallpaper Engine 构建均通过,沿用既有单包体积提示。
|
||||
@@ -0,0 +1,31 @@
|
||||
# 阵列悬停、拖动与滚轮
|
||||
|
||||
2026-09-10。沿用已批准的参考视频与原生实现流程。
|
||||
|
||||
## 交互
|
||||
|
||||
- 鼠标命中卡片时额外竖直抬起 0.28,约 200ms 显现,移开后平滑回落。反馈按循环阵列的实际位置保存,选中模型、阵列实例和归位副本共享同一高度,不改变详情抽取进度或镜头目标。
|
||||
- 鼠标左键、触摸与笔使用同一组 Pointer Events。7px 内保留点击,10px 后自由拖动;已经移动过的手势回到起点也不当作点击。
|
||||
- 用户最新选择自由平面跟随,取消屏幕横竖快捷手势和斜向锁轴。以选中模型中心采样两个轨道的 CSS 投影,逆矩阵同时计算列与档案位移。投影在手势内固定,允许水平、竖直、任意斜向及中途转弯;无效或退化投影不开始拖动。
|
||||
- 两个轨道同时由指针或惯性持有,选档不能引发额外镜头吸附。沿实际经过的物理格位选档并更新列内记忆,按钮/键盘切列仍使用该列记忆。
|
||||
- 拖动连续改变原有横向与前后轨道。用户进一步要求网页快速滑动的持续惯性:松手后以实际速度继续运动,速度按 `exp(-2.4 × 秒数)` 衰减,不再预选远处目标或限制最多两列/三档。档案随实际经过的位置依次切换,沿用标题、声音、波浪、归位和各列记忆;速度低于 0.6 格/秒后,才以速率 10 的临界阻尼弹簧吸附到最终整数位置。
|
||||
- 松手速度来自最近 120ms 的指针样本,包含可用的合并事件并使用事件时间戳;反向时从转折点重新估算。相同距离,拖得越快,继续滚动越远;停止移动超过 80ms 再松手不追加惯性。再次按住立即停止并保留当前轨道位置,尚未拖过方向阈值时也不会自动回弹;点击接住惯性不会误选其他卡片。键盘、滚轮、模式切换和减少动态效果设置会中止惯性。
|
||||
- 双向速度共享自由衰减阶段,保留屏幕中的滑行方向;整体放慢后共同吸附。再次按下同时接住两个轨道。
|
||||
- 滚轮向上切上一档、向下切下一档。像素、行和页单位归一化,累计 100px 切一档,单事件最多三档;停顿或反向清除旧的累计量。Ctrl+滚轮和主要横向的触控板事件不截获。
|
||||
- 捕获丢失、pointercancel、窗口失焦、窗口尺寸变化或新增第二根手指时,停止拖动并吸附;后续单指可继续。详情仍在净空足够后拖动旋转;正文和弹窗不会触发阵列切档。
|
||||
|
||||
实现:`src/archive-drag.ts`、`src/scene.ts`。原来的松手后单步 swipe 判断已移除。
|
||||
|
||||
## 验证
|
||||
|
||||
本次自由拖动:纯逻辑、桌面及手机横竖屏自由路径、鼠标及触摸快慢惯性、悬停与输入回归、生产构建通过。桌面另验证双向惯性比例及同时接住两个轨道。相同 3.2 档拖动,慢拖最终移动 3 档,快拖桌面移动 6 档、触摸模拟移动 8 档(原生事件调度会影响采样速度)。下列响应式与 WebKit 条目还记录此前验证范围;本次结果见对应 JSON 报告。
|
||||
|
||||
- `node --experimental-strip-types scripts/check-archive-drag.mjs`:小幅移动、逆投影还原任意屏幕方向、连续转弯、反向、停顿、减少动态效果、快慢速度差与最终吸附、负坐标循环,以及 30/60/120fps 的惯性积分一致性。相同 1.6 档距离、80ms 与 800ms 两种输入,模型测试最终位置为第 10 格与第 2 格。
|
||||
- `scripts/check-archive-momentum.mjs`:Chromium 实际鼠标与 CDP 触摸,比较同距离快拖和慢拖,检查松手后依次跨档、连续衰减、按住停止、改变方向接管、跨列惯性、键盘中止和减少动态效果。报告为 `.tools/array-input/momentum.json`。
|
||||
- `scripts/check-archive-diagonal.mjs`:桌面鼠标、手机竖屏和横屏 CDP 触摸,直接使用实际相机的两条斜向投影,检查正反方向、物理间距跟随,以及同一次拖动中水平、竖直、转弯、回到起点的屏幕位移。纯逻辑检查补充另一组相机、冻结映射、退化投影与双向惯性比例。报告为 `.tools/array-input/diagonal.json`。
|
||||
- `scripts/check-array-input.mjs`:实际 Chromium WebGL 页面,1920×1080 鼠标与 390×844 CDP 触摸。检查不足半格时阵列已经跟随、松手前切档、吸附、反向、悬停升起与复原、点击选择、滚轮、弹窗隔离、八档循环、捕获丢失和多指取消、取消后恢复、详情旋转。
|
||||
- `scripts/check-responsive.mjs`:Chromium 手机横屏与竖屏原有回归,包括滑动方向、循环、详情、正文、查看器和弹窗。
|
||||
- Windows Playwright WebKit 的 390×844 竖屏完整回归通过;使用合成 PointerEvent,不代表 iPhone 真机多指行为。初次开发服务器运行在查看器步骤超时,改用固定生产构建后完整通过。
|
||||
- `scripts/check-loop.mjs`:20,000 次相邻循环导航;`npm run check:viewport`:视口与原片构图;`npm run build`:TypeScript、资源与 PWA 构建。
|
||||
|
||||
本地截图和报告在 `.tools/array-input/`、`.tools/responsive/`。手机触摸验证属于桌面浏览器模拟,没有新增 iPhone 真机测试数据。
|
||||
@@ -0,0 +1,90 @@
|
||||
# 声音重设计与验证
|
||||
|
||||
日期:2026-09-09。交付为原创配乐「Observatory / 观测室」、16 种程序合成音效、原片短音重构的逐字输入音效及实际终端集成。
|
||||
|
||||
## 依据和边界
|
||||
|
||||
查看本地《明日方舟》特别映像 [莱茵生命:访问] 的 6.76–40 秒画面联系表及现有逐帧记录;从原文件提取并测量同段声音。当前代理不能直接听辨音频,因此这些结果是画面观察、音轨数值分析与原创编配,不是对原曲旋律、乐器或 BPM 的听写。后续根据用户复刻逐字输入音效的要求,单独引入三个 38ms 原片短音,详见下文。
|
||||
|
||||
设定参照 [PRTS 收录的赫默档案](https://prts.wiki/w/赫默)、[克丽斯腾图鉴](https://prts.wiki/w/克丽斯腾),以及项目既有 `reference/LORE-SOURCES.md`。将科研秩序、探索与独行感转译为精细脉冲、开放和声和稀疏动机,是本次声音设计的解释,并非官方对莱茵生命音乐风格的规定。
|
||||
|
||||
原片为 25 fps、48 kHz 双声道 AAC。`scripts/analyze-reference-audio.mjs` 将左右声道各取 0.5,解码为 24 kHz 浮点 PCM 后按视觉段落计算 RMS;输出见 `reference/audio-analysis.json`。验证段 11.12–22.76 秒约 −25 dBFS RMS,欢迎页 22.76–26.92 秒约 −15.92,阵列 26.92–30.68 秒约 −13.05。由此保留「克制验证 → 欢迎渐强 → 阵列展开 → 特写收敛」的动态结构;音乐不直接照搬原片的峰值响度。
|
||||
|
||||
## 编配
|
||||
|
||||
- 原创 72 BPM、4/4、16 小节、53⅓ 秒循环。72 BPM 是本次选择,不是原片测定速度。
|
||||
- Dmaj9、Bm11、Gmaj9、Asus2 的开放和声,后半段以轻微配音变化回答;音符与休止直接写在生成脚本中。
|
||||
- `atmosphere.ogg`:低饱和度、缓慢交叠的和声;`motif.ogg`:带衰减谐波的键音及交错延迟;`pulse.ogg`:稀疏低频呼吸与设备点击。
|
||||
- 所有音符尾音和早期反射按环形缓冲叠加,三轨使用同一音频时钟启动、同一循环长度。场景切换只改变声部音量,不重启音乐。
|
||||
- 浏览状态三轨比例为 0.9 / 0.72 / 0.65;详情为 0.72 / 0.36 / 0.12;模型查看为 0.8 / 0.24 / 0.28。启动段随原片时间 22.76、26.92、34.3 秒调整编配,约 0.9 秒过渡。
|
||||
- 总输出有余量与压缩保护;抽取、欢迎、阵列和拆组时音乐短暂降低到 65%,约 0.9 秒恢复。
|
||||
|
||||
## 音效
|
||||
|
||||
| 操作 | 声音构成 |
|
||||
| --- | --- |
|
||||
| 窗口打开 / 关闭 | 180ms 轻空气上扫与低音抬升 / 130ms 下扫收束 |
|
||||
| 标签切换 / 系统操作 | 52ms 无长共鸣的电子点击 |
|
||||
| 启动标志 | 约 720ms 低频 D–A 和声逐层点亮,缓起音与轻空气声 |
|
||||
| 整块文字显现 | 64ms 低音量的数据脉冲,每块一次 |
|
||||
| 输入 | 原片截取的三个 38ms 短音轮替,保留原攻击与频谱 |
|
||||
| 上下切档 | 1.68 kHz 主共鸣,短促清脆的薄玻璃轻碰 |
|
||||
| 左右切列 | 稍低的玻璃碰击与很轻的第二次接触,按方向轻微左右定位 |
|
||||
| 抽取 / 返回 | 较长、明亮的悬起余音 / 阻尼更强、收束更快的落定声 |
|
||||
| 确认 | 640 / 960Hz 两次电子短音,作为授权及保存的标识 |
|
||||
| 权限扫描 | 轻扫声与四次等距电子脉冲 |
|
||||
| 欢迎 / 阵列 | 缓起音的开放和声 / 错开的薄玻璃碰击 |
|
||||
| 特写读取 | 两次极短的同频电子脉冲 |
|
||||
| 拆解 / 重组 | 三次渐高的玻璃分离声 / 渐低、短尾的接合声 |
|
||||
|
||||
键音至少间隔 24ms,以通过 25fps 输入的连续触发;切档与切列至少 55ms、其他同类事件至少 120ms;活动音效组限制为 10。冻结、倒退或跳转超过 0.3 秒不补播历史事件;离开启动时停止残留启动音效。
|
||||
|
||||
## 设置与生命周期
|
||||
|
||||
系统设置提供音效、音乐各自的开关与音量,自动保存。旧版本关闭界面声音的用户升级后继续保持静音;首次使用会在首次点击或按键后解锁声音。浏览器禁止无交互自动播放时,先点击页面,再重播启动即可听到完整流程。
|
||||
|
||||
隐藏页面、离开页面或全部静音时暂停音频上下文,音乐保留位置。重新开启串行等待先前的 suspend 完成,修复快速切换造成的 resume / suspend 竞争。音乐加载期间再次关闭不会迟到起播;载入失败可在下一次交互重试,音效独立工作。音量拖动只保存声音偏好,不触发画质重建。
|
||||
|
||||
## 验证结果
|
||||
|
||||
- TypeScript 与 Vite 生产构建通过;原有大 bundle 提示仍存在。
|
||||
- `reference/audio-check.html` 的浏览器检查全部通过:17 音效的有限样本、非静音、峰值与尾端归零;三轨解码时长和双声道接缝;启动事件;冻结与倒退;快速输入;切场景保留音乐;音乐独立开关;连续开关后的三轨恢复;全静音暂停和音效清空。
|
||||
- 解码后每声道循环边界差值小于 0.01,时长误差小于 2ms;不把该数值结论等同于主观无缝听感。
|
||||
- 在真实主界面检查了独立开关、音量控件和设置布局,并操作切档、切列、读取、模型拆解与重组。
|
||||
- 完整开场实机播放结束后:输入声 71 / 71,进入详情、残留音效为 0,恢复原静音设置;再次含配乐重播时恰好启动三轨,中途停止后恢复静音、上下文暂停、轨道与音效均为 0。
|
||||
- 听感尚未由代理人工试听确认,最终需要用户以耳机和扬声器试听。试听页提供 17 种音效按钮、配乐播放器和原片对照播放器。
|
||||
|
||||
## 2026-09-09 · 玻璃质感修订
|
||||
|
||||
用户进一步明确:交互对象像玻璃,声音应该清脆。当前音效按这一方向修订。使用约 1.2ms 接触起音和五组不等间隔共鸣频率;高阶共鸣更快衰减,最高模式限制在 8.5kHz 以下,加入很轻的 13ms 接触噪声。切档名义尾长 240ms,抽取 580ms,归位 220ms;指数衰减使实际主体更短。目标是薄玻璃轻碰的清亮感,属于合成音色设计,不宣称等同于真实玻璃录音。
|
||||
|
||||
保留原有输入节流与活动音效上限。试听页新增连续 40 次、间隔 55ms 的离线叠音检查,验证延长共鸣后仍有峰值余量。背景音乐的音符、声部与文件沿用上一版。
|
||||
|
||||
## 系统反馈与玻璃对象的触发修订
|
||||
|
||||
用户接受切换档案的玻璃方向,并要求检查作为 OS 的页面打开、Logo 和文字出现是否使用了合适的音效。当前按操作含义重新绑定:档案实体的切换、抽取、落定、阵列入场和拆组继续使用玻璃;检索、收藏、设置窗口及独立查看器开合采用电子升降音;内容标签和模型视角重置采用短电子点击。没有给悬停或所有文字更新逐一添加声音。
|
||||
|
||||
开场按原片时间码触发:9.16 秒标志启动和声,11.84 秒身份确认,19.48 秒扫描,21.84 秒授权确认,22.76 秒欢迎和声,23.52 / 25.04 秒整块文字显现,26.92 秒玻璃阵列,30.68 秒档案抽取,34.30 秒读取标记。14.68 / 16.92 秒的通用玻璃点击已删除,避免与逐字输入声重复。Logo、欢迎、扫描和读取均不再附加玻璃共鸣。
|
||||
|
||||
`reference/boot-audio.html` 提供真实界面的完整开场试听,从 6.76 秒白场开始;点击按钮解锁浏览器声音,可选择包含背景音乐。试听只临时开启音效,结束或停止后恢复保存的偏好;不写入本地设置。同步面板显示实际发出的输入声数量、音频状态与完成情况,可与 71 个输入揭示帧核对。
|
||||
|
||||
## 复现
|
||||
|
||||
### 逐字输入的原片短音复刻
|
||||
|
||||
用户指出原视频中已有逐字输入声音,明确要求复刻。本次从视频约 6.864、6.906、6.948 秒各截取 38ms,位于 `ACCESS PERMISSION REQUIRED` 的开头。频谱可见约 40–50ms 间隔的宽频瞬态,在约 6–11kHz 有较强能量;此前玻璃模式不足以表达这一特征。
|
||||
|
||||
短音只做去直流、0.35ms 入端淡变、3.5ms 出端淡变和统一增益;三个样本之间保留原相对强弱,不做变调、去噪或速度调整。源音来自成片混音,不保证获得了原制作中的独立音效分轨;代理未能进行直接人工听辨。三段原始 PCM 共约 11KB,随代码嵌入,首次输入不依赖异步下载;每个音频上下文只解码一次并轮替播放。保留原片来源与处理记录,见 `public/audio/typing-source.json`。
|
||||
|
||||
输入帧从真实 `bootMotion` 的文字揭示推导,覆盖首句、ID、姓名、请求、处理和省略号。修正 65ms 节流使 40ms 相邻输入漏拍的问题;新行首字也有声音,19.16 秒附近的故障闪动与文字恢复不视为新输入。多字符同帧显示只触发一个短音;帧卡顿不积压补发一串声音。试听页新增原片 0.55 秒片段和重排输入串,方便核对音色。
|
||||
|
||||
检查增加 25Hz 密集输入的波形峰值、所有字段首字、文字恢复不误触发,以及正常播放时输入帧数量。此前玻璃卡片交互继续使用独立的合成音色。
|
||||
|
||||
```powershell
|
||||
node scripts/extract-typing-audio.mjs 'D:/Program Files/CueWeave/resources/tools/ffmpeg.exe'
|
||||
node scripts/render-audio.mjs 'D:/Program Files/CueWeave/resources/tools/ffmpeg.exe'
|
||||
node scripts/analyze-reference-audio.mjs 'D:/Program Files/CueWeave/resources/tools/ffmpeg.exe'
|
||||
npm run build
|
||||
```
|
||||
|
||||
生成器仅需要 Node.js;参数为本机 FFmpeg 路径,用于 Ogg / MP3 编码。省略参数仍可在 `.tools/audio-render/` 生成无损 WAV 母带。生成脚本使用固定随机种子;同一工具版本可复现。生产只读取原创三轨 Ogg(合计约 1.6MB),试听 MP3 另约 1.3MB,不在运行时加载原视频。
|
||||
@@ -0,0 +1,16 @@
|
||||
# 开场 HUD
|
||||
|
||||
2026-09-11:按用户要求,既有 HUD 开关覆盖开场 UI。
|
||||
|
||||
- 接入 ACCESS、Logo、验证文字、扫描圆环与欢迎画面;品牌及 Powered 共用既有投影。
|
||||
- 先更新 BootSequence 当帧原始动作,再读取本帧布局并计算投影,避免缓存旧的 Logo 位移或欢迎缩放。仅开场逐帧测量相关七块内容,交互阶段保留原来的按需测量。
|
||||
- 阶段切换不再将 HUD 深度归零。关闭追踪保留曲面,减少动态效果停止追踪,关闭 HUD 恢复原始 DOM 变换。三维镜头继续不响应被动指针。
|
||||
- 磨砂底沿用仅交互阶段启用的范围,全局屏幕效果继续覆盖开场。
|
||||
|
||||
验证:`npm run build:wallpaper`、`node scripts/check-visual-effects.mjs`、`node scripts/check-boot-hud.mjs` 通过。Edge 实际运行覆盖开场五块投影、启停、静态追踪、减少动态效果、工作台衔接与 2560×1080 视口;无页面异常。截图与结果见 `verification/boot-hud/`。检查了圆环与欢迎画面截图;尚待用户试用最终观感。
|
||||
|
||||
复现脚本自带 5189 静态服务,读取壁纸构建;可通过 `PLAYWRIGHT_MODULE` 指定 Playwright 安装位置。
|
||||
|
||||
## Logo 下方小字闪动修正
|
||||
|
||||
用户录屏 `PixPin_2026-09-11_10-36-02.mp4` 指向 Logo 内的 RHINE·LAB 字样。此前 BootSequence 每帧无条件赋值 SVG text.textContent;内容完整且不变时,650ms 内产生 20 次节点替换。改为仅内容变化时赋值。浏览器回归同一时段为 0 次替换,保留同一个文本节点和完整文字,HUD 其他回归通过。仅修正此处文字更新,最终 WE 录屏所见的闪动是否完全消失仍待用户复看。
|
||||
@@ -0,0 +1,55 @@
|
||||
# 开场中央文字 · Novecento
|
||||
|
||||
2026-09-11,按用户要求将适合的中央开场文案统一替换,不仅限于 START PROCESSING。
|
||||
|
||||
- Normal:访问权限、身份确认、请求接收、开始处理、权限通过,以及处理中的留白故障帧。
|
||||
- Bold:WELCOME TO、RHINE LAB.LLC.、INTERNAL DATABASE;公司名称的黑底与灰闪层使用相同图形。
|
||||
- 保留原逐字时间轴、声音触发、授权字距收束、欢迎黑底扫过及 HUD 投影。左上 RHINE LAB 后续改为 DemiBold,下方两行保留 MiSans。
|
||||
|
||||
## 来源与制作
|
||||
|
||||
在原片 18 秒的 START PROCESSING 裁切上,以实际 OTF 对比 Light、Normal、DemiBold、Bold 和 Arial。Normal 在本次统一字号/字距搜索中最贴合。该比较用于选型,不代表获得了原工程的字体记录。
|
||||
|
||||
Normal 与 DemiBold 来自作者的 DaFont 免费包;用户已明确同意其许可。Bold 来自用户既有 MyFonts 桌面字体包。源文件版本与 SHA-256 见 `boot-lettering/sources.json`。本地比较材料位于 `.tools/font-comparison/`,字体不纳入 Git 或发行包。
|
||||
|
||||
根据两个来源许可中将字母作为轮廓图形导入的条款,项目仅发行十段预先制作的固定文字图形,不嵌入 OTF 或 Webfont。`scripts/make-boot-lettering.py` 需要使用者自行提供获许可的本地字体,并安装 Pillow、fonttools 4.59.2。执行示例:
|
||||
|
||||
```powershell
|
||||
python scripts/make-boot-lettering.py --fonts .tools/font-comparison/fonts
|
||||
```
|
||||
|
||||
生成 `src/boot-lettering-art.json`(29,698 字节),保留逐字显现所需的图形分段,不提供任意文字排版或通用字库。来源声明随发行包保存在 `assets/boot-lettering-notice.txt`。
|
||||
|
||||
## 实现与验证
|
||||
|
||||
`BootLettering` 预建图形节点,仅在文字变化时更新可见段;可访问文本单独保留。未知新文案回退为普通文字,维护时需重新制作图形。授权扫描圆环在文字绑定前收集路径,避免把字形路径作为圆弧修改。
|
||||
|
||||
浏览器复核入口:`reference/boot-lettering-review.html`。本机 Chromium 实际运行通过 12 项回归:
|
||||
|
||||
- 169–487 帧共 83 个实际文字变化,文本、图形段数与时间轴一致,覆盖标点、空白和故障帧。
|
||||
- 静止 450ms 内无文字 DOM 修改;前后跳帧复用原节点并恢复相同可见图形。
|
||||
- 授权图形宽度随字距收束;扫描圆环仍为六条动画弧,跳帧结果一致。
|
||||
- 欢迎灰闪及恢复符合原透明度,四个显示层全部使用 Bold。
|
||||
- 无意外文案回退、无 Novecento 字体文件请求;开场结束正常隐藏文字进入阵列。
|
||||
|
||||
处理提示与欢迎画面已在浏览器检查。此轮不声称真实 iPhone 验收或所有 HUD 参数组合均已重测。
|
||||
|
||||
`npm run build` 与 `npm run build:wallpaper` 均通过,包含 TypeScript 检查;只出现既有的大体积 JavaScript 分块提示。壁纸产物位于 `release/wallpaper`,此轮未上传创意工坊。
|
||||
|
||||
## 左上标题后续修订
|
||||
|
||||
用户指出 Bold 偏重后,同一裁切拟合的 DemiBold 像素 MSE 为 0.03689,Bold 为 0.06343,支持采用 DemiBold。对照图 `boot-lettering/brand-demibold-fit.png` 从上到下为原片、DemiBold、叠加;不代表原工程字体鉴定。原始品牌外层及三行节点不变,第一行固定 48px 高,避免推动下方内容。复核页新增标题文字、DemiBold 图形和行高检查。
|
||||
|
||||
此修订实际浏览器共 14 项检查全部通过,含原有 83 个文字变化;两种发行构建再次通过。
|
||||
|
||||
## MyFonts 正式 Webfont(2026-09-11 后续)
|
||||
|
||||
用户明确授权接受 MyFonts 条款并领取字体。Normal、DemiBold、Bold 的年度 Webfont 订单已成功,当前每种每月 10,000 次页面浏览,合计 $0;自动续期未开启。订单与个人账单信息不写入仓库。MyFonts 的单域名网页许可范围不应等同于允许分发 Wallpaper Engine 字体包;用户获知区别后仍要求本机直接替换,此轮完成本机构建,未上传创意工坊。
|
||||
|
||||
官方 Kit Builder 下载的原始 WOFF2 总计 119,732 字节。每种所用 27 个字符的字形与之前桌面 OTF 一致,来源版本与哈希见 `boot-lettering/webfont-sources.json`。字体未经转换、子集化或修改。原包保存于本机 `.tools/myfonts-webfont/`;字体包和版权声明安装到 `public/fonts/novecento/`,该目录已加入 Git 忽略。
|
||||
|
||||
其他获许可的维护者可将官方 Kit Builder 的包解压,将其顶层内容放到上述目录,保持 `webFonts/NovecentoSansWideNormal/font.woff2`、`NovecentoSansWideDemiBold/font.woff2`、`NovecentoSansWideBold/font.woff2` 三个相对路径,并保留原 CSS 的版权声明。重启开发服务器或重新构建后生效。字体权利不随项目 MIT 许可转让。
|
||||
|
||||
Vite 检查本地三种字体是否齐备;齐备时开场准备阶段加载三种原生 FontFace,成功后用真实文字替换 SVG 字形。保留原有逐字容器宽度和字距,以避免位置、声音触发和动画变化。官方字体行度量为 1021/-179,1em 行高下基线为 0.921em;字形上移 0.121em 对齐既有 0.8em 基线。缺少字体包或网络失败时保留原图形,8 秒超时不阻断启动。
|
||||
|
||||
浏览器实际通过 15 项检查:原有文字/品牌/扫描/欢迎回归通过,确认三种 WOFF2 均已加载、所有文字改用真实字体且不保留文字 SVG 路径。网页与壁纸构建均通过;PWA 资源表包含三种 WOFF2。公开 Git 仅提交接入逻辑和声明,不包含授权字体。新环境未安装字体包时仍使用此前图形。
|
||||
@@ -0,0 +1,79 @@
|
||||
# 前段 2D 动效复核
|
||||
|
||||
日期:2026-09-08。原片:1920×1080、25 fps。检查了原片第 125–674 帧的连续帧联系表;用户随后明确排除黑底发行商片头,交付范围为第 169–675 帧(6.76–27.00 秒)。
|
||||
|
||||
## 参考事件
|
||||
|
||||
| 原片时间 / 帧 | 观察与实现 |
|
||||
| --- | --- |
|
||||
| 6.76 / 169 | 白场起点,下一帧出现 A;6.80–7.48 固定左端逐字输入 ACCESS PERMISSION REQUIRED |
|
||||
| 9.04–9.16 / 226–229 | 文字变淡、清空,标志开始绘制 |
|
||||
| 9.16–10.24 / 229–256 | 右上弧、左环、右环依次绘制;下方 RHINE·LAB 逐字出现;加减符号进入 |
|
||||
| 10.60–11.84 / 265–296 | 标志向左落定;11.12、11.20、11.28 三行品牌错开显现,右下文字逐字揭示 |
|
||||
| 11.28–13.56 / 282–339 | 先输入 ID CONFIRMED,停顿后输入姓名 |
|
||||
| 14.52–15.56 / 363–389 | 清空,输入 REQUEST RECEIVED |
|
||||
| 16.84–19.48 / 421–487 | 清空,输入 START PROCESSING,补入省略号,短暂缺字后切到权限验证 |
|
||||
| 19.48–21.80 / 487–545 | 字距收拢,画面外黑白圆弧收拢至约 256 px 半径 |
|
||||
| 21.00、21.04、21.12、21.16 / 525、526、528、529 | 仅圆环出现放大和变淡,文字保持独立 |
|
||||
| 21.84–22.72 / 546–568 | 中心圆点及小弧形取代权限文字 |
|
||||
| 22.76–23.04 / 569–576 | 黑白闪切后 WELCOME TO 落定 |
|
||||
| 23.52–24.04 / 588–601 | 公司名称和标志出现,黑底从左至右扫过名称 |
|
||||
| 25.04–25.40 / 626–635 | INTERNAL DATABASE 短暂闪动后落定 |
|
||||
| 26.16–26.92 / 654–673 | 背景逐渐变白,欢迎内容缩小失焦;第 673 帧退出,接原有阵列入场 |
|
||||
|
||||
## 实现范围与限制
|
||||
|
||||
原生 DOM/SVG 重建,未将视频嵌入产品。离散切换按原片帧编号确定,位移和半径为目测关键帧拟合;曲线、光晕、背景抽象线条和字体栅格化仍与原片有差异,不宣称逐像素一致。启动用同一标志曲线重新排序绘制,最终仍是共享标志。已认可的三维模型、镜头、交互和基线光照未修改。
|
||||
|
||||
## 验证
|
||||
|
||||
- `npm run build`:通过 TypeScript 与生产构建。保留原有 bundle 大小提示。
|
||||
- `reference/boot-check.html`:15 项检查通过。覆盖关键帧与文字停顿、507 帧正反序一致性、圆环收拢、实际页面跨阶段倒退、无 CSS 循环动画、绘制中跳过后的品牌恢复、重入欢迎页以及阵列阶段衔接。
|
||||
- `reference/boot-review.html`:原片与真实页面同步,支持逐帧和 1× / 0.5× / 0.25×。人工对照姓名、圆环落定、中心图形、欢迎页,并依据全尺寸参考修订笔画顺序、黑色矩形尺寸、字距收拢与退出缩放。
|
||||
- 首次播放延后 600ms,以便加载遮罩完全淡出后再输入第一个字;减少动态效果偏好继续直接进入档案。
|
||||
|
||||
在仓库根目录运行 `reference/extract-boot.py` 可从本地 MP4 重新提取参考帧,需要 Python、OpenCV 和 Pillow;视频和 JPG 均被 Git 忽略。
|
||||
|
||||
## 2026-09-09 · 非线性轨迹复核
|
||||
|
||||
用户指出权限圆环、名称黑底及左上三行文字的速度和出现顺序有差距。本轮重新放大原片第 277–315、487–568、588–621 帧;`reference/measure-boot.py` 提取同心圆半径、弧端角度、橙点位置、三行文字左边缘与名称遮罩右边缘,输出至本地 `reference/boot-frames/`。测量后的人工校正轨迹保存在 `src/boot-tracks.ts`,产品仅使用数值和 DOM/SVG。
|
||||
|
||||
- 左上三行分别在 278、280、282 帧开始出现,各有独立位移和透明度。第一行最初几帧距落点 234、216、181、143 px,先加速再减速;第三行到第 305 帧落定。既定 MiSans 排版继续使用。
|
||||
- 外环半径在 500、510、520、530 帧约为 895.5、492、320.5、270 px;白环为 619、374、272、246 px。两环的半径、起始角与弧长独立变化,内环弧段和橙点各自减速,补上逐渐缩小的黑白弧端圆点。525、526、528、529 帧保留放大、淡化与模糊。
|
||||
- 名称黑底在 588、589、592、601、610 帧的宽度分别约为 4、39、225、382、410 px。前段快速扫过,后段持续缓慢收束;590–591 帧短暂消失,594–595 帧保留灰色遮罩、微弱反相文字及未扫过的文字。
|
||||
- 空间轨迹使用保持单调的三次 Hermite 插值,保留关键帧之间的速度连续性;不在每个采样点重新缓入缓出。离散闪切仍按原片 25 fps 定位,拖动或倒放不累积状态。
|
||||
|
||||
复核页 `reference/boot-review.html` 增加三行品牌、圆环和公司名称的局部放大,支持逐帧及四分之一速度。`reference/boot-check.html` 的 21 项实机检查通过,无页面异常;覆盖独立错峰、先加速后减速、黑底长尾、灰闪层保留、倒退恢复与跳过恢复。TypeScript 和生产构建通过。
|
||||
|
||||
对照截图检查了 278、280、282、286、301、500、510、520、532、545、592、594、601、610 帧。原片压缩、字体栅格化、发光及画面外弧段存在测量限制;轨迹为逐帧测量后的拟合,不声称拿到了原视频工程中的原始动画曲线,也不视为用户已确认最终观感。
|
||||
|
||||
## 2026-09-09 · 小圆、环绕点与 Logo 再修订
|
||||
|
||||
用户指出两侧小圆应表现为自转、弧段逐渐补全,并要求复核中央小点;随后要求重新检查 Logo 初始连续笔画、加减号出现与后段缺口移动。
|
||||
|
||||
### 小圆与中央点
|
||||
|
||||
`reference/measure-scan-detail.py` 放大 540–568 帧,以移动的采样环排除文字、测量弧段,并从连通域提取中央点。早期短弧不足以稳定拟合圆心,544–547 帧另作人工拟合。原片中小圆不是绕大圆公转:551→568 帧,左圆心约从 (828,552) 到 (832,540),右圆心约从 (1090,527) 到 (1087,539),半径从约 38.3 降至 37.2 px;以稳定位置上的自转为主,只保留这段轻微收拢。
|
||||
|
||||
- 左弧顺时针、右弧逆时针,角度跨 360° 时展开为连续数值。弧长从 544 帧约 3° 增至 568 帧约 332°/339°,后段角速度降低。原片在完全闭合前已切换场景,因此不提前强行合圆。
|
||||
- 中央大点半径约 43 px,保留 546、547、549、550 帧离散闪变;548 帧约 8 px,551 帧约 10 px,随后缓慢稳定在约 11.4 px。
|
||||
- 六颗小点从 548 帧开始,每隔三帧出现一颗,逐渐长至约 4.2 px;沿约 35 px 轨道减速绕行。节点置于大点下层,大点放大时自然遮挡小点。
|
||||
- 权限文字在 545–551 帧逐渐消失,避免中心图形进入时突然清空文字。
|
||||
|
||||
### Logo
|
||||
|
||||
`reference/inspect-boot-logo.py` 生成连续放大图;`reference/measure-boot-logo.py` 沿共享贝塞尔轮廓采样黑色笔画,输出首尾位置、缺口区间、符号和左边缘测量。使用一条连续路径代替原三段永久断开的笔画;印刷标志原有的小缺口由 dash 首尾表现,交叉处按真实描边叠加。
|
||||
|
||||
- 229–264 帧同时推进笔画头尾,早期描边宽度逐渐建立;237 帧为用户截图中的连续长弧,无额外固定缺口。
|
||||
- 加号和小方点于 247 帧同帧进入,在内侧放大并向左右展开。256 帧后,加号快速转动后减速落定,右侧方点逐渐拉成横线。
|
||||
- 左移改用 260–294 帧测量值,保留先加速再减速的节奏。
|
||||
- 425–486 帧缺口沿轮廓加速移动;经过交叉点时被另一段笔画局部遮挡。229–486 帧整体透明度保持为 1,移除原先 461、471、475 帧整枚变淡的处理。
|
||||
|
||||
### 实机复核
|
||||
|
||||
- TypeScript、生产构建通过;原有 bundle 大小提示仍存在。
|
||||
- `reference/boot-check.html` 共 30 项通过,无页面异常。新增小弧反向减速及弧长增长、六点错峰、中央闪变、连续 Logo 首尾、符号展开、整枚不闪烁和倒退恢复检查;递归检查嵌套轨迹数值。
|
||||
- 捕获了 229–264、425–486、540–568 共 127 帧连续 DOM/SVG 局部截图,按相同裁剪区域对照原片。重点放大检查 237、248、258、460、474、479、546、551、556、560、564、568 帧;对照工具为 `reference/compare-boot-details.py`。
|
||||
- 对照页新增「Logo 绘制与符号」「Logo 移动缺口」「小圆与环绕点」3.8× 放大选项。支持链接参数,如 `?focus=logo&frame=237`、`?focus=gap&frame=460`、`?focus=orbit&frame=551`。保留逐帧、慢放及完整画面。
|
||||
|
||||
本轮依据压缩视频测量拟合,保留原有字体与背景差异;技术复核不代替用户对最终动效观感的确认。
|
||||
@@ -0,0 +1,42 @@
|
||||
# 清晰内构与解密验证
|
||||
|
||||
日期:2026-09-09。用户要求参考原片 41 秒及 46–51 秒,详情解密后变清晰,查看器可切换清晰/磨砂,并修正详情大环闪烁。
|
||||
|
||||
## 模型
|
||||
|
||||
- Blender MCP 执行 `art/build_archive.py`,再执行 `art/build_assembly.py`;两者共用 `art/clear_reference_details.py`。保留 `art/rhine-archive.blend`、`art/archive-assembly.blend` 与导出 GLB。
|
||||
- 两组环形内构采用分段闭合截面、斜肩、内孔、橙色弧段、84/52 根细立面肋和薄片连接带。左侧三根高塔完全省略。
|
||||
- 内构深度范围为 -0.0340000 至 0.1500000,位于基板前面 -0.038 与盖板内面 0.174 之间。
|
||||
- 六组拆解与单体的对应顶点最大差为 2.666e-7;组装高度 3.70000005。只改变组装关系,不更换不同的模型。
|
||||
|
||||
## 时间轴
|
||||
|
||||
| 原片时间 | 动作 |
|
||||
| --- | --- |
|
||||
| 34.24–36.04 | 两端沿同一对角线向中央延伸 |
|
||||
| 36.04–37.72 | 保持完整黑线 |
|
||||
| 37.72–38.84 | 两端向中央收束 |
|
||||
| 38.58–39.30 | 中央验证点短暂停留 |
|
||||
| 38.84–39.56 | 玻璃由顶部向下从磨砂转清晰(后续外壳修订,见 SHELL-REFINEMENT.md) |
|
||||
|
||||
曲线按本地 25 fps 视频逐帧测量,使用单调三次 Hermite 插值,保持非线性速度且不越界。两段端点均在同一个模型空间线段上计算,随相机投影;不使用固定长度线条淡入淡出。交互以 1.5 倍播放(约 3.63 秒),等到镜头与升降接近就位才开始。原片回放不压缩。减少动态效果时直接切换。
|
||||
|
||||
## 闪烁原因与修正
|
||||
|
||||
详情长焦相机与查看器有不同距离:详情约 72,查看器初始约 14.5。原详情近裁剪面 0.1 使大环的薄层表面落入相同深度量化格,在微小镜头变化下争抢像素。将主相机 near 改为 5;far 仍为 300,不移动相机或模型。理论 24 位深度步长在距离 72 处从 0.003088875 降为 0.000060768,约提升 50.83 倍。修正前可见的环面斑驳在修正后静帧中消失。
|
||||
|
||||
`reference/depth-check.html` 检查原片 27、27.2、27.6、28、29、30、31、32、34、36、39.6 秒,共 11 个镜头。使用旧 near=0.1 视锥筛选可见模型,再测世界包围盒距镜头的最近深度,最小为 16.662,大于新的近裁剪面 5。地面平面不纳入档案包围盒检测。此检查覆盖代表镜头,并非对每个可能交互姿态的数学证明。
|
||||
|
||||
## 检查结果
|
||||
|
||||
- `node --experimental-strip-types scripts/check-decryption.mjs`:通过。包含延伸/收束单调性、无过冲、阶段顺序、进出/减少动态效果/反向跳帧、实际材质 uniform 绑定、重组后材质更新、内构空间约束和深度精度。
|
||||
- `node --experimental-strip-types scripts/check-assembly.mjs`:通过。
|
||||
- `reference/decryption-check.html`:8 项真实应用检查通过;包括投影共线、解密结束后清晰且无标记、近裁剪面、磨砂中间态、快速反向切换保留镜头、拆解后切换、返回原详情、解密中退出。
|
||||
- `reference/depth-check.html`:11 个代表镜头通过。
|
||||
- `npm run build`:通过;保留既有包体大于 500 kB 的提示。
|
||||
|
||||
## 查看与限制
|
||||
|
||||
`reference/decryption-review.html` 提供原片与生产界面同时间码对照、逐帧、半速和四分之一速度;参考视频及 JPG 仅用于本地验证,不进入产品背景。`reference/model-review.html` 保留放大模型对照,左侧基线是本轮细化前的资产。
|
||||
|
||||
这是依据可见画面推演的三维结构,内部建筑用途、隐藏结构和精确截面无法从视频唯一恢复。镜头、光照和材质与原片仍有差异,不宣称逐像素一致。用户尚未确认最终视觉效果。
|
||||
@@ -0,0 +1,15 @@
|
||||
# 文档同步解密试用版
|
||||
|
||||
- 沿用项目原生实现流程;用户要求先做出效果试用,视觉节奏待实际反馈。
|
||||
- `src/document-decryption.ts` 读取现有模型解密帧。合拢、保持及收束期间遮挡;模型开始清晰时触发 950ms 文字揭示,其中各行最多错峰 209ms。
|
||||
- 以实际文字换行测量黑色遮挡条,通过行内裁切窗口向右退开;先加速、后长尾减速。正文节点与布局保持原样。此为视觉动效,不改变内容授权或导出。
|
||||
- 覆盖英文标题、中文标题及分类、资料字段、摘要、研究记录与访问日志;导航、字段名和操作保持可识别。切换页签复用当前进度,完成后不重播;退回阵列后再次打开重新解密。减少动态效果直接可读。
|
||||
- 用户指出横向滚动条后,遮挡宽度限制在文本容器内,正文仅允许纵向滚动,避免遮挡消失时可用高度变化。
|
||||
|
||||
## 验证(2026-09-09)
|
||||
|
||||
`npm run build` 通过;保留原有打包体积提示。
|
||||
|
||||
浏览器实际运行 `reference/document-decryption-check.html`,12 项通过:初始遮挡、摘要无横向溢出、解密中切页签仍遮挡、模型与文档揭示同步、正文位置稳定、揭示期间无横向溢出、结束清除遮挡、正文高度一致、收藏不重播、其他页签直接可读、重新进入遮挡、快速重入正常结束。
|
||||
|
||||
正文区实测 `clientWidth = scrollWidth = 636`、`clientHeight = 189`;横向滚动关闭。
|
||||
@@ -0,0 +1,30 @@
|
||||
# 内部模型专项打磨
|
||||
|
||||
日期:2026-09-09。需求:更锐利的内构边缘、半透明磨砂质感、改善两环连接处。继续采用 Blender MCP 建模;外壳与交互规则沿用现状。
|
||||
|
||||
## 几何与法线
|
||||
|
||||
- `art/internal_architecture.py` 生成环形屋面、直立壁板、内孔薄阶、橙色嵌带、84/52 根立面细肋与连续连接薄片。`art/clear_reference_details.py` 保留外盖压槽、浮雕文字等已有细节。
|
||||
- 环形面沿圆周使用 192 段并平滑插值,在截面折边处使用分裂法线;不跨屋面与侧壁平均法线。切边为小平面。橙色嵌带也采用直壁截面。
|
||||
- 连接薄片为一条三次贝塞尔路径,两端导数与环切线一致,宽度 0.225–0.260,烘焙后厚度 0.008。截面角处断开法线,沿路径平滑;两端展宽、中央浅拱。
|
||||
- 导出前断言内构位于盖板与基板之间;GLB 实测内构深度 -0.0340000 至 0.142399997。没有左侧高塔。
|
||||
- 通过 Blender MCP 顺序执行 `art/build_archive.py` 和 `art/build_assembly.py`,保留单体与拆解 `.blend`。先导出至 `art/.cache`,成功后替换产品 GLB,避免浏览器读取到半写入文件。
|
||||
|
||||
## 材质
|
||||
|
||||
`src/internal-optics.ts` 定义四类内部玻璃表面:壁板、屋面、切边和连接片。使用粗糙高光与掠射角透明密度,保持薄片的平面感。闭合薄层使用正面绘制,避免前后表面重复加深。
|
||||
|
||||
Three.js 的外层 transmission 捕获不包含其他 transmissive 网格。因此内构先在不透明捕获序列中,以自定义 alpha 混合绘制到基板与细肋上,外盖再折射已经合成的内构。它是实时薄层透明近似;没有完整体积散射或多层路径追踪。基线灯光和外盖清晰/磨砂参数未改变。
|
||||
|
||||
## 验证
|
||||
|
||||
- `node --experimental-strip-types scripts/check-internal-optics.mjs`:通过。外壳顶点误差 0、法线误差 0;内构三角形几何法线与着色法线最小点积 0.9997446,说明折边未再次被平均成圆角。四种半透明材料与一条连接薄片检查通过。
|
||||
- `node --experimental-strip-types scripts/check-assembly.mjs`:通过;六组装配与单体顶点最大差 1.688e-7,高度 3.70000005。
|
||||
- `node --experimental-strip-types scripts/check-decryption.mjs`:通过;包含实际 GLB 的内构空间约束与材质连续切换绑定。
|
||||
- `npm run build`:通过,保留既有包体大小提示。
|
||||
- `reference/decryption-check.html`:8 项真实应用检查通过,覆盖解密、清晰/磨砂反向切换、拆解时切换、返回详情及中途退出。
|
||||
- 浏览器复核:无遮挡的斜视、连接处 1.6 倍放大、清晰装配与磨砂装配。外盖透视正常,原片与模型仍有材质、比例及光照差异,最终效果待用户查看。
|
||||
|
||||
## 对照
|
||||
|
||||
`reference/internal-review.html` 保留本轮打磨前与当前资产,可切换三种装配显示、三个角度及放大。两边共用相同灯光与视角。网格用于展示透明层次,仅存在于本地对照页。打磨前资产为 `reference/internal-study/assembly-before.glb`;此前正式版本可从提交 89c7742 恢复。
|
||||
@@ -0,0 +1,28 @@
|
||||
# 基线动效与光影微调
|
||||
|
||||
用户确认回到原始基线 aeddd8f;本次保留循环阵列、独立查看器与数字滚动,主界面恢复有正负波谷、抬起与波浪同时开始的运动。
|
||||
|
||||
## 本次调整
|
||||
|
||||
- 阵列与独立查看器共用灯光配置,分别创建自身上下文的环境贴图。
|
||||
- 主光转到前上方,降低补光和整体曝光,保留玻璃边缘反光与暖灰内部结构。
|
||||
- 阵列盖板的斜面增加暖色吸收,背板改为浅香槟色;微调接触阴影与 AO。
|
||||
- 透光吸收色、距离随材质质量连续插值,兼容不含吸收属性的普通不透明材质。
|
||||
- 模型与相机轨迹不变。旧运动实验以明确标注的方式保留在 reference 页面。
|
||||
|
||||
## 验证
|
||||
|
||||
- npm run build:通过。保留 Three.js 包体积的已知提示。
|
||||
- node scripts/check-motion.mjs:通过。恢复后的波浪在 202 × 65 个采样点与保存的原始函数逐值一致,包括负波谷。
|
||||
- node scripts/check-appearance.mjs:通过。覆盖吸收色、有限吸收距离的连续插值、不透明材质兼容和默认无限吸收距离不会产生 NaN,以及归位副本状态独立。
|
||||
- node scripts/check-loop.mjs:通过,20,000 次方向操作、288 个循环位置。
|
||||
- reference/loop-review.html 实际场景检查:passed=true,61 次运动,进入详情、转正后归位和快速重新选中通过;原片阵列 159 个实例可见(加 1 个独立抽出模型),投影前坐标误差 5.48e-7。
|
||||
- 浏览器复核:阵列、详情与独立查看器;light-review 比较原视频与微调版,也可切到调整前,实时两侧模型位置和相机一致。
|
||||
|
||||
## 本地对照页
|
||||
|
||||
运行开发服务器后打开 /reference/light-review.html。该页面不包含在生产入口中。
|
||||
|
||||
原片帧率 25fps;图片为 reference/motion/0690.jpg、0729.jpg、0787.jpg、0975.jpg,对应 27.60、29.16、31.48、39.00 秒。从项目原有本地参考帧复制,图片目录按既有规则不纳入版本控制。换机器时需从用户提供的视频重新提取,或复制这些已有参考帧。
|
||||
|
||||
原片的阵列面仍有更深的暖棕透光和更丰富的多层折射。此次是小幅光影修整,未宣称逐像素匹配。
|
||||
@@ -0,0 +1,25 @@
|
||||
# 循环档案阵列验证
|
||||
|
||||
开发分支:codex/looping-archive,基于查看器光照修订 6d01e1f。
|
||||
|
||||
## 逻辑与实际场景
|
||||
|
||||
- scripts/check-loop.mjs:正反两个方向合计 20,000 次切换,检查跨首尾始终沿操作方向移动一个位置、内容对应正确、负坐标周期映射、窗口无重复和缺列;通过。
|
||||
- reference/loop-review.html:使用实际 ArchiveScene 完成 61 次移动,反复跨过上下、左右边界;固定实例池为 288,归位副本最终归零;通过。
|
||||
- 在循环位置进入详情可获得 4.05 的完整抬起与旋转净空;收回期间在原高度先转正,快速重新选中恢复归位副本的高度;通过。
|
||||
- 将逻辑位置推至数千行列后进行坐标重置,实际位置、速度和呼吸相位保持不变,误差小于 1e-9;通过。
|
||||
- 循环后重播原片,检查原片 27.60、29.16、31.56、39.00 秒的阵列:159 个背景位置加一个抽出模型,额外列全部隐藏,位置误差最大约 5.48e-7;通过。
|
||||
|
||||
## 页面实测
|
||||
|
||||
- 从机构档案第一份按上键,选中第八份 X-018,物理行由 12 前进到 11。
|
||||
- 连续向左跨过第一列,选中特别项目 X-008,物理列为 -1,阵列仍覆盖画面。
|
||||
- 向右返回机构档案,恢复 X-018 的选择;连续向下八次仍按同一方向运行并回到相同内容。
|
||||
- 点击画面中的卡片可正确选中 X-013;向右循环五列后仍保留该档案,详情页和 360° 查看器均显示相应编号与标题。
|
||||
- 实际截图检查了初始、越界后和循环后的阵列,未出现可见队列尽头。
|
||||
|
||||
## 回归
|
||||
|
||||
- check-archive.mjs、check-appearance.mjs、check-motion.mjs 通过。
|
||||
- TypeScript 与 Vite 构建通过;仍有既有的包体积提示。
|
||||
- 原有 Blender 模型资源未修改。
|
||||
@@ -0,0 +1,27 @@
|
||||
# 原片模型细化 · 2026-09-09
|
||||
|
||||
本轮按用户要求放大原片模型,沿用逐帧观察与 Blender MCP 流程。参考为原片 37、39 秒特写、39 秒顶部放大及既有端面放大 reference/edge-study.png。对照页包含 27.60、29.16、31.48、39.00 秒。
|
||||
|
||||
## 几何调整
|
||||
|
||||
- 两个光学环由压扁圆管改为闭合旋转截面,区分宽腔壁、斜肩、内孔台阶与细环;主截面采用 128 段。小环的香槟色嵌件保持在透明盖板后方。
|
||||
- 顶部压槽沿参考增加折返与双侧槽边,放到盖板内侧;增加内周边、前沿细阶、框架接缝和刻度区支点。
|
||||
- 螺钉由球面头与叠加黑条改为倒角圆柱、真实布尔凹槽和沉头垫圈。
|
||||
- 材质名称、基线颜色和光照不变;共享标志、外包围盒、镜头及抽取运动沿用。
|
||||
- 主模型与六组拆解资源均由 Blender MCP 执行脚本导出。使用 bpy.data.libraries.write 保存目标场景及依赖,不保存其他工作场景,也不更改当前打开文件路径。
|
||||
|
||||
## 复现与对照
|
||||
|
||||
通过 Blender MCP 在 Blender 内先执行 art/build_archive.py,再执行 art/build_assembly.py,分别提供脚本绝对路径 __file__。输出为 public/assets/archive-cassette.glb、archive-assembly.glb 及对应 art/*.blend。
|
||||
|
||||
reference/model-review.html 左侧可选择原视频或细化前,右侧为当前模型。两边使用基线灯光、同一时刻、相同相机及 1920×1080 渲染缓冲,支持 2×/3× 裁切放大。旧模型为本轮开始前保存的 reference/model-study/archive-before.glb。原片帧沿用本地 reference/motion,不进入生产构建。ArchiveScene.load 的可选路径供对照复用生产渲染逻辑,默认仍载入正式资源。
|
||||
|
||||
## 验证
|
||||
|
||||
- npm run build 通过;保留既有包体积提示。
|
||||
- node scripts/check-assembly.mjs 通过:六组齐全,双向几何最大误差 2.3842e-7,重组误差 9.704e-7。
|
||||
- node scripts/check-archive.mjs 通过:模型高 3.70000005,详情升高 4.05,归位净空及先转正后下降检查通过。
|
||||
- 细化前 / 后:GLB 1,439,344 / 1,629,368 字节;三角形 39,544 / 41,528(约 +5.0%);重复阵列每张使用的三角形 8,988 / 7,164(约 −20.3%)。主资源保持 11 组材质,拆解资源保持 14 个网格。此为几何统计,不是帧率提升承诺。
|
||||
- 浏览器检查:31.48 秒前后阵列疏密和边界一致;39 秒放大检查环槽、边缘和顶槽。实际进入详情、打开独立查看器并测试拆解与重组。
|
||||
|
||||
原片透明折射、磨砂散射和镜头效果仍有差异。这是依据可见轮廓重建的细化,不代表恢复原片三维源模型;最终审美效果由用户查看对照判断。
|
||||
@@ -0,0 +1,27 @@
|
||||
# 三维模型查看器验证
|
||||
|
||||
开发分支:feat/model-inspector;基于 69f9c99。
|
||||
|
||||
## 浏览器交互
|
||||
|
||||
- 从档案 X-001 的详情按钮进入查看器,模型和当前档案标签正常显示。
|
||||
- 方向键右、上使视角目标从 (0,0,0) 移至约 (0.262,0.350,-0.268);鼠标滚轮放大使观察距离由 14.501 降至 11.198。
|
||||
- 鼠标拖拽越过侧面至方位角约 -3.143 弧度,实际检查了完整背面。Home 将视角、目标与距离恢复至默认值。
|
||||
- 一键拆解后六组部件偏移分别为 2.75、1.85、0.75、-0.15、-1.1、-2.05,默认构图可看到全部部件,底部操作区可用。
|
||||
- 一键重组后展开系数严格为 0,六组偏移全部回到 0;界面显示「已组装」。
|
||||
- 展开系数约 0.290 时反向重组,保留连续运动并顺利归位。
|
||||
- ESC 返回同一个档案 X-001,焦点恢复至入口按钮;再次打开可正常载入并操作。
|
||||
|
||||
## 自动检查
|
||||
|
||||
- scripts/check-assembly.mjs 验证六组部件、原始与装配资源的双向表面顶点距离、3.7 的模型高度,以及中途反向重组的连续性与收敛。
|
||||
- 共检查 17,954 个原模型表面顶点,最大几何距离误差约 6.08e-7,低于 1e-5 容差。
|
||||
- npm run build、scripts/check-assembly.mjs、scripts/check-appearance.mjs、scripts/check-motion.mjs 全部通过。构建保留既有的包体积提示。
|
||||
|
||||
透明部件使用现有实时透射材质,多个透明层间的递归折射仍受实时渲染能力限制。
|
||||
|
||||
## 光照一致性修订
|
||||
|
||||
- 修复两个 WebGL renderer 之间直接共享 PMREM 渲染目标纹理导致的环境光缺失;查看器独立生成与主场景相同的光照环境。
|
||||
- 对照用户截图,实际检查组装正面、完整拆解、旋转和滚轮放大:内部基板、圆环和透明外壳均恢复浅色效果,拆解层次仍可辨认。
|
||||
- 复用主界面的背景色与氛围渐变,雾效随模型观察距离调整。没有修改模型资源或材质颜色。
|
||||
@@ -0,0 +1,60 @@
|
||||
# 本地文件工具:性能与技术栈评估
|
||||
|
||||
日期:2026-09-09。此文是源码、GLB 资源统计与官方架构文档分析,不是跨框架性能跑分。未测得当前设备的 GPU 帧时、整进程内存或文件索引吞吐;系统硬件信息查询在当前权限下未能取得。未修改产品代码或已确认的视觉规范。
|
||||
|
||||
## 当前实现的可核实成本
|
||||
|
||||
- `src/archive-loop.ts` 固定 9 × 32 = 288 个阵列位置,已经具备可见窗口复用机制。文件总数不必决定 GPU 中的模型数量。
|
||||
- `src/scene.ts` 从 GLB 选择五个材质组建立 InstancedMesh;没有为阵列复制全部模型。五组分别为 Frosted_Polymer、Ivory_Edges、Optical_Diffuser、Champagne_Index、Titanium_Fasteners。
|
||||
- 直接读取 `public/assets/archive-cassette.glb` 的 accessor 索引数量,五组每份分别为 188、6248、188、1468、896 个三角形,共 8988。288 个位置在一次遍历全部阵列几何的 pass 中提交约 2,588,544 个三角形。这不是每帧最终总量,也不是最终可见像素量;阴影和透射等 pass 绘制的对象集合不同,隐藏实例通过缩放为零处理,仍占实例提交。
|
||||
- Ivory_Edges 占阵列几何三角形约 69.5%,是背景模型 LOD 原型最值得检查的部位。原始 GLB 全部 11 个 primitive 共 39544 个三角形,不能直接乘以 288 作为实际阵列负载。
|
||||
- 五组实例矩阵每帧均标记更新:5 × 288 × 16 × 4 = 92160 字节,约 90 KiB/帧,60 FPS 约 5.27 MiB/s。仅从传输量看并不大;这不等于 CPU 计算耗时已测定。
|
||||
- `src/scene.ts` 开启物理透射、2048² 阴影、SSAO 和景深。当前 Three.js 的 SSAOPass 额外渲染法线并做屏幕空间处理,BokehPass 另绘深度;透射也有背景捕获与纹理处理。实例化减少提交调用,不能免除几何处理和多 pass 的像素成本。
|
||||
- 所有阵列 InstancedMesh 设置 `frustumCulled = false`,没有逐实例视锥剔除。外围与雾中的卡片仍可能提交,是否减少窗口或增加分块剔除需检查镜头边界。
|
||||
- `src/main.ts` 持续 requestAnimationFrame,主场景在独立查看器打开时暂停绘制。档案预览有持续呼吸动画;减少动态效果只改变动效状态,不会停止主渲染循环。启动阶段三维画布透明时也没有在主循环按其可见性跳过场景更新。
|
||||
- 高画质使用 `min(devicePixelRatio, 1.5)`,再结合固定 1920×1080 舞台的窗口缩放。相同 CSS 视口从有效像素比例 1 提到 1.5,渲染面积增加到 2.25 倍;不能据此声称 FPS 必然变为 1/2.25。低画质同时关闭 AO 和景深,不能用该开关单独归因某一种效果。
|
||||
|
||||
结论:GPU 几何、多 pass 与长期持续绘制是优先验证的瓶颈假设。当前没有证据表明 TypeScript 执行速度是主要瓶颈,也没有证据证明更换宿主能自动提升特定倍数的 FPS。
|
||||
|
||||
## 文件数据层
|
||||
|
||||
文件名、路径、大小和时间戳索引,与三维效果分开测量。缩略图、全文提取、视频解码也应独立排队,不能在初次扫描时读取所有内容。
|
||||
|
||||
建议查询层返回有界分页结果,附稳定标识与查询代次;快速输入取消或丢弃旧查询。界面只维护当前结果页和附近卡片,不把百万条记录反复序列化传给前端。收藏与目录绑定等元数据可以用 SQLite;文件名包含匹配的索引策略需要单独设计,普通 B-tree 不能自动加速任意子串查询。
|
||||
|
||||
绑定少量目录可用后台枚举、持久缓存与目录变更监听。监听事件需要合并,丢失或溢出后重扫对应范围。全盘搜索优先接入 Everything SDK,避免第一版自行实现完整 NTFS 索引器。SDK 需要 Everything 客户端后台运行;性能统计应把它的索引时间和内存计入总成本。
|
||||
|
||||
## 技术栈取舍
|
||||
|
||||
| 方案 | 对本项目的判断 | 主要成本或限制 |
|
||||
| --- | --- | --- |
|
||||
| Electron + Three.js | 复用现有代码最直接,适合快速产品化 | 携带 Chromium/Node 运行时;不能解决既有 GPU 渲染成本 |
|
||||
| Tauri 2 + Rust + Three.js | 推荐作为保留当前效果的第一条验证路线;Rust 承担索引和系统操作 | Windows 前端仍是 WebView2。减少自带浏览器的发行负担,不代表运行内存或 FPS 必然优于 Electron |
|
||||
| C++ + Qt Quick/QML + Qt Quick 3D | 推荐作为非 Web 的工具型应用候选,具备集成的二维控件与三维场景 | UI 和渲染层需迁移;灯光、透射、色彩映射和后处理需重新校准。Qt Quick 3D 官方许可为 GPLv3 或商业许可,选型时需与发行方式匹配 |
|
||||
| Godot 4 + C#,必要处接原生模块 | 偏三维交互体验的原生候选,场景和动画工作流适合档案阵列 | 工具所需的系统集成、文件预览与列表行为要自行完善;游戏引擎运行成本仍存在,不保证更省电 |
|
||||
| Windows 原生 UI + Direct3D,或 Rust + wgpu | 对渲染管线、内存和调度控制最多,适合将底层优化作为长期核心投入 | 需要自行搭建较多材质、后处理、文本与输入系统;开发和视觉验证成本最高,并无本项目跑分证明其收益 |
|
||||
|
||||
Tauri 是桌面宿主方案,wgpu 是图形 API,二者不处于同一抽象层。wgpu 在原生运行时可以使用 D3D12、Vulkan、Metal,不要求网页或浏览器。WinUI 的 SwapChainPanel 可承载 DirectX,但不直接提供现成的 Three.js 材质与场景移植。
|
||||
|
||||
## 验证顺序与验收口径
|
||||
|
||||
1. 在相同机器、相同物理输出分辨率、相同画质和电源模式下记录现有生产构建。分别测试启动、闲置、连续换档、详情和独立查看器。记录帧间隔 P50/P95/P99、长帧、CPU、GPU、进程树内存与显存。帧率上限和垂直同步应保持一致。
|
||||
2. 分别关闭 AO、景深、阴影和透射,分别调低渲染分辨率、引入背景 LOD,定位单项收益;不要以同时关闭多个效果的差值归因某一项。静止、隐藏和最小化状态单独检查绘制调度。
|
||||
3. 在独立原型中测试背景边框简化,保留当前特写模型;对抽取和归位的材质、几何连续性做对照。涉及美术模型的生成仍遵循项目 Blender MCP 要求。原型不能直接替换用户确认的外观。
|
||||
4. 用 1万、10万、100万条元数据测查询和分页,以真实目录测磁盘枚举与监听;合成数据不能代替真实磁盘吞吐。分别报告冷启动、热缓存以及缩略图队列负载。
|
||||
5. 只有在同一资产、相机、输出尺寸、可比材质效果下,才用 Tauri 或原生候选原型进行对比。新引擎默认场景的高帧率不能证明当前画面迁移后更快。
|
||||
|
||||
可用的初步目标:60 Hz 下帧预算 16.7 ms;索引就绪后首批结果端到端延迟 P95 小于 100 ms;隐藏和最小化时停止三维绘制。以上是候选验收目标,不是现有成绩,也不保证适用所有硬件。
|
||||
|
||||
推荐决策:保留成果并尽快得到本地工具,先验证 Tauri + Rust + Three.js;明确选择完全非 Web 且以桌面工具功能为主,评估 Qt Quick 3D 的同场景原型;若主要价值是三维交互且不选 Qt 的许可路线,评估 Godot。不要仅根据框架名称进行全量重写。
|
||||
|
||||
## 官方资料
|
||||
|
||||
- [Everything SDK](https://www.voidtools.com/support/everything/sdk/)
|
||||
- [Tauri 架构](https://v2.tauri.app/concept/architecture/)、[WebView 版本](https://tauri.app/reference/webview-versions/)
|
||||
- [Electron 性能分析指导](https://www.electronjs.org/docs/latest/tutorial/performance)
|
||||
- [Qt Quick 3D 功能与许可](https://doc.qt.io/qt-6/qtquick3d-index.html)、[后处理性能成本](https://doc.qt.io/qt-6/qml-qtquick3d-effect.html)
|
||||
- [Godot MultiMesh](https://docs.godotengine.org/en/stable/tutorials/performance/using_multimesh.html)
|
||||
- [wgpu 原生后端](https://docs.rs/wgpu/latest/wgpu/)
|
||||
- [WinUI SwapChainPanel](https://learn.microsoft.com/en-us/windows/windows-app-sdk/api/winrt/microsoft.ui.xaml.controls.swapchainpanel?view=windows-app-sdk-1.8)
|
||||
- [Windows 目录变化监听](https://learn.microsoft.com/zh-cn/windows/win32/api/winbase/nf-winbase-readdirectorychangesw)
|
||||
@@ -0,0 +1,30 @@
|
||||
# Win11 桌面动效与 PWA 更新入口
|
||||
|
||||
日期:2026-09-09。反馈环境:Windows 11,Chrome 152.0.7977.83,Edge 同样出现症状。
|
||||
|
||||
## 复现与判断
|
||||
|
||||
在本机 Chrome 152.0.7977.83 和 Edge 152.0.4191.66 中使用新建浏览器上下文,对比 `prefers-reduced-motion` 的两种状态。正常状态进入开机动画;`reduce` 状态直接进入阵列,减少选档、镜头和文字动效。两种状态都可打开右上角圆形图标对应的设置窗口。默认继承系统偏好和跳过开机的代码在 PWA 之前的 c24afa5 中已存在。
|
||||
|
||||
这证明系统减少动画可以造成相同症状,不能证明反馈者的 Win11 开关一定关闭;未直接检查对方设备。原先设置只有图标,提示要求“在设置中更新”却没有可点操作,确实不易找到入口。
|
||||
|
||||
另用两个完整生产构建复现旧版本更新:先安装旧 Service Worker,再切换服务端新版,调用 Chromium `Network.clearBrowserCache` 后重新加载。页面仍由旧 Service Worker 提供,新版处于 waiting。只清理 HTTP 缓存不能保证替换离线副本。
|
||||
|
||||
## 修改
|
||||
|
||||
- 设置图标增加可见文字,新版就绪后在底部提供“更新并重启”,保留设置内的更新按钮。
|
||||
- `update.html` / `update.js` 不进入离线清单,可通过网络加载恢复入口;用户点击后检查并下载新版,等待激活后返回。保留收藏与偏好。
|
||||
- 设置中说明减少动效会跳过开机与简化选档,并提供“启用完整动效并重播”。选择保存在本站,系统辅助设置不变。
|
||||
- 正文解密遮罩改为遵循 `.reduce-motion`,避免系统媒体查询覆盖用户在本站明确开启完整动效的选择。
|
||||
|
||||
## 回归方式
|
||||
|
||||
`scripts/check-startup-motion.mjs` 检查正常启动、减少动画启动、明确覆盖系统偏好、重播、选档脉冲、正文遮罩和刷新后保留偏好。
|
||||
|
||||
`scripts/check-pwa-recovery.mjs` 以 `PWA_PREVIOUS_DIST` 指向保留的旧构建,检查普通缓存清理后仍运行旧版、从网络恢复入口迁移、保留收藏与动效偏好、更新后离线重载,以及从未安装 Service Worker 的新访客。
|
||||
|
||||
两个脚本分别使用 Chrome 与 `REVIEW_CHANNEL=msedge`。另运行 `scripts/check-pwa.mjs`,覆盖直接更新按钮、完整离线资源、失败更新保留旧版及不清理其他应用缓存。截图和报告存放于 `.tools/responsive`。浏览器动效偏好通过自动化设置,未修改测试机的 Windows 全局辅助功能设置。
|
||||
|
||||
本次结果:Chrome 152.0.7977.83 与 Edge 152.0.4191.66 的动效和旧版恢复测试通过。Chrome 额外模拟恢复下载时一个图标返回 503,页面报告失败并继续保留上一完整版本;直接更新、离线查看、偏好保留和模态输入隔离也通过。
|
||||
|
||||
平台依据:[MDN 的系统减少动画映射](https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/At-rules/%40media/prefers-reduced-motion)、[Chrome 的 Service Worker 更新生命周期](https://developer.chrome.com/docs/workbox/handling-service-worker-updates)。
|
||||
@@ -0,0 +1,39 @@
|
||||
# 渲染画质设置 · 2026-09-09
|
||||
|
||||
入口:系统设置 → 渲染画质 → 精细设置。沿用参考视频与原生实现流程。
|
||||
|
||||
## 预设
|
||||
|
||||
| 预设 | 渲染比例 | DPR 上限 | 抗锯齿 | 阴影 | AO 采样 | AO 分辨率 | 景深 | 折射分辨率 | 纹理过滤 |
|
||||
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
|
||||
| 性能 | 80% | 1 | 原始 | 1024 | 关闭 | 50% | 关闭 | 50% | 4× |
|
||||
| 原始(默认) | 100% | 1.5 | 原始 | 2048 | 32 | 100% | 100% | 100% | 16× |
|
||||
| 高 | 125% | 2 | SMAA | 4096 | 32 | 100% | 100% | 100% | 16× |
|
||||
| 极高 | 150% | 2 | SMAA | 4096 | 64 | 100% | 100% | 100% | 16× |
|
||||
|
||||
自定义渲染比例 50–200%,步进 5%;景深强度 0–150%,步进 5%。另支持 DPR 上限 3、AO 16 采样、AO 分辨率 75%、折射分辨率 25%/75% 及 1×/2×/8× 纹理过滤。纹理过滤限制到显卡实际支持值。
|
||||
|
||||
屏幕显示尺寸乘以 min(设备 DPR, 设置上限) 再乘渲染比例,得到请求分辨率。全尺寸缓冲限制到 8,294,400 像素及硬件纹理边长;达到限制时面板显示实际尺寸和限制提示。1080p、DPR 1 时极高渲染为 2880×1620,为原始的 2.25 倍像素,不能据此推断帧率。
|
||||
|
||||
## 实现
|
||||
|
||||
- `src/render-quality.ts` 负责预设、规范化、本地旧布尔设置迁移和分辨率计算。旧低画质继续保留 2048 阴影与全分辨率折射,只关闭 AO/景深并使用 DPR 1。
|
||||
- 主场景顺序为 RenderPass → SSAO → Bokeh → SMAA → OutputPass。SMAA 按本地 Three.js 实现和[官方说明](https://threejs.org/docs/pages/SMAAPass.html)位于 OutputPass 前;旧主场景默认无额外抗锯齿。
|
||||
- AO 更换采样数时替换并 dispose 旧 pass,切换阴影尺寸时释放旧 shadow map;AO 分辨率在 composer resize 后单独设置。相同画质不重复应用,音量调节不会重建画质资源。
|
||||
- 使用 [WebGLRenderer 的 transmissionResolutionScale](https://threejs.org/docs/pages/WebGLRenderer.html)控制折射捕获精度,不改变透光率与颜色。
|
||||
- 查看器同步清晰度、纹理过滤和折射设置。启用 SMAA 时用独立后处理管线,原始档位继续直接渲染以保留其原生抗锯齿。阴影、AO、景深只控制阵列,在设置标签中标明。
|
||||
- 设置储存在 `rhine-settings.rendering`;修改单项自动标记自定义,选预设恢复整组参数。范围滑块拖动时更新数值,释放或键盘修改提交后应用,避免拖动期间连续重建大尺寸缓冲。
|
||||
- 同步保留并行音频任务的开关、音量与场景音频接线。
|
||||
|
||||
## 验证
|
||||
|
||||
- `node scripts/check-quality.mjs`:通过。覆盖新旧设置、无效持久化值、范围约束、预设识别、序列化恢复、超采样比例及 48 组屏幕/DPR/硬件边长组合。
|
||||
- `npm run build`:通过。Vite 保留大于 500 kB 的主包提示。
|
||||
- 实际浏览器切换全部四个预设:主场景读取到对应分辨率、AO 采样、阴影尺寸和景深开关。
|
||||
- 自定义 16 采样、50% AO 分辨率时,全尺寸 1180×664 对应 AO 590×332;关闭 AO 后其分辨率控件禁用。
|
||||
- 构建后预览选择极高,再设置景深 0%、折射 50%、纹理 4×:刷新后上述值一致;查看器读取到相同分辨率、SMAA、50% 折射和 4× 过滤,模型载入、拆解和返回正常。
|
||||
- 关闭阴影与 AO 后恢复原始:实际恢复 2048 阴影、32 采样、100% 景深;详情画面正常。
|
||||
- 展开精细设置后面板内部可滚动;原生 select、range、summary 可键盘操作,模态焦点循环包含新增控件并排除折叠项与禁用项。
|
||||
- 实际渲染与查看器检查未发现控制台 error。现有 PCFSoftShadowMap 被当前依赖自动降为 PCFShadowMap 的弃用提示与本次改动无关。
|
||||
|
||||
尚未进行跨显卡帧率、显存峰值或长时间稳定性基准测试。8.3 MP 上限限制尺寸,并不保证所有设备的帧率或显存占用。
|
||||
@@ -0,0 +1,101 @@
|
||||
# 验证记录
|
||||
|
||||
日期:2026-09-07。
|
||||
|
||||
## 工程检查
|
||||
|
||||
- TypeScript 严格模式检查通过。
|
||||
- Vite 生产构建通过,生成 `dist/`。
|
||||
- 12 份文本导出文件由同一份 `src/data.ts` 生成。
|
||||
- 模型经 Blender MCP 建模、导出,并在 Blender Cycles 和实际应用中审阅。
|
||||
- 运行界面没有 video 元素,也没有将参考 MP4 作为产品资源引用。
|
||||
|
||||
## 浏览器交互验证
|
||||
|
||||
在实际 Codex 内置 Chromium 浏览器中完成:
|
||||
|
||||
| 行为 | 结果 |
|
||||
| --- | --- |
|
||||
| 跳过启动进入阵列 | 通过 |
|
||||
| 完整 35 秒启动自动进入详情 | 通过,最终进入 X-001,未发现运行错误 |
|
||||
| Esc / 左方向键 / Enter | 通过,返回阵列后从 X-001 循环至 X-012 并读取 |
|
||||
| 拖拽档案特写 | 通过,实际模型随拖拽旋转 |
|
||||
| 下一份档案并读取 X-002 | 通过,编号、标题与内容一致 |
|
||||
| 研究记录标签切换 | 通过 |
|
||||
| 研究记录页收藏档案 | 通过,保留当前标签页和焦点 |
|
||||
| 刷新后打开收藏 | 通过,X-001 / X-002 收藏仍在 |
|
||||
| 取消测试收藏 | 通过,验收结束恢复为空 |
|
||||
| 输入不存在的档案 | 通过,显示明确空结果和重置入口 |
|
||||
| 输入 X-005 并读取结果 | 通过,进入生态观测档案 |
|
||||
| 画质关闭和重新开启 | 通过 |
|
||||
| 减少动效开关 | 通过,验收结束恢复完整动效 |
|
||||
| 浏览器运行错误 | 已检查,未发现运行错误 |
|
||||
|
||||
最初的 Blob 导出没有收到内置浏览器的 download 事件,因此改为实际存在的静态文本链接。已验证链接编号及对应 UTF-8 文件;没有将缺失的浏览器下载事件报告为通过。
|
||||
|
||||
## 视觉复核
|
||||
|
||||
- 先在默认 1280×720 视口检查整体交互和渲染。
|
||||
- 再按原片 1920×1080 检查认证和档案抽取关键帧。
|
||||
- 校正过透视方向、阵列间距、抽取高度、标题字宽、标志字距、背景曲线对比度、曝光、景深与文案定位。
|
||||
- 最终阵列采用 160 个物理实例。完整档案盒只在抽取特写使用全部细节,减少重复绘制。
|
||||
|
||||
## 限制
|
||||
|
||||
当前属于高保真重新建模与交互实现,未以图像差分认证逐像素一致;材质折射、景深与离线原片仍有可见差异。档案与身份权限为本地演示内容。界面优先为桌面横屏设计,窄屏按比例保留构图。
|
||||
|
||||
## 用户反馈后的修订复核
|
||||
|
||||
上一版的错峰升降不能表现原片的整体波纹,表面凸起的圆环与参考材质也有明显差距。本轮重新抽取原片 26–40 秒的 351 帧,并建立 `reference/review.html` 同步对照页。以下结果属于本轮修订,前面的表格是初版功能验证记录。
|
||||
|
||||
- 重写为连续传播的波包、反向回传、两段抽取及分段镜头运动。对照后又修正了回传阶段镜头过早转向的问题。
|
||||
- Blender MCP 重建为磨砂盖板、内部光学腔、环槽、基板、边框与表面刻线。GLB 与 `.blend` 已重新导出,Cycles 审阅图已更新。
|
||||
- 浏览器实际验证快速执行“下一份、下一份、上一份”,最终编号 X-002、抽取高度 4.05、轨道偏移 -0.72;过渡结束后 `returningFiles` 为 0,没有残留重复抽出模型。打开详情与拖拽旋转均可用。
|
||||
- `node scripts/check-motion.mjs` 通过:第一波峰采样位置由第 16 行移动至第 27 行,反向波峰由第 27 行返回第 12 行;按 25fps 检查所有 160 个位置的连续性,最大相邻帧高度变化 0.615 世界单位。验证了两段抽取之间的停留,以及 30fps / 120fps 下临界阻尼结果的一致性。这些检查证明实现的连续性,并不证明与原片轨迹完全相同。
|
||||
- TypeScript 严格检查与 Vite 生产构建通过。当前 GLB 使用 10 个材质组;重复阵列仍为 160 份。
|
||||
- 对照页的原视频与实时场景可以切换到指定时间、逐帧前后移动并同步播放。对照视频不进入产品构建。
|
||||
- 最终版本在新建浏览器预览中,从原片第 30 秒对应的时间启动,自动完成抽取并进入 X-001 详情;返回阵列可用,浏览器未记录运行错误。逐帧按钮实测由 27.48 秒前进到 27.52 秒,播放按钮可推进视频与实时场景。
|
||||
|
||||
仍可观察到:阵列的厚度光照、光学环局部高光、景深过渡与原片不同。密集背景采用近似面板材质,完整抽出档案采用物理透射;WebGL 屏幕空间透射不能递归还原所有透明层的折射。当前结果没有达到逐像素一致,保留同步对照入口供直接审阅。
|
||||
|
||||
|
||||
## 第二次修订(2026-09-08)
|
||||
|
||||
用户进一步指出镜头、余波、卡距、字体、光照与白场过渡的差异,并明确要求优先重新检查摄像机。
|
||||
|
||||
- 撤回扩大通道间距和高度阶梯的补偿。通道中心距仍为 5.2、同高。改用未遮挡的卡片顶边和标签垂直边校准镜头;此前把可见片段当成完整高度的测量方式无效。
|
||||
- 31.48 秒人工参考端点约为 (518,296)、(900,92);实时模型投影测得 (517,288)、(899,95)。这是两个局部特征点的对齐证据,不代表整幅画面或所有帧匹配。
|
||||
- 新增左侧水平入场、快速抬高镜头、逐字出现的选档文字、回传后仍有延迟与衰减的邻片起伏。抽卡第一段 0.4 世界单位,第二段完成后总升高 3.35。
|
||||
- 调整近景转向时间及构图锚点,补充保密等级扫描线。模型边框、材料层次、光照和景深一起重审,GLB、Blender 源文件、Cycles 预览均更新。
|
||||
- MiSans 四个官方原版 WOFF2 已嵌入;设置页保留署名和许可。字体未转换或子集化。
|
||||
- node scripts/check-motion.mjs 通过:正向/反向传播、25fps 连续性、第一段抽取停留、邻片在停留期继续运动、不同帧率下弹簧结果一致。
|
||||
- 浏览器重新验证“下一份、下一份、上一份、读取”,详情正确显示 X-002,无浏览器错误。独立查看 27.16、31.48、33.48、39.00 秒并播放同步对照。
|
||||
- TypeScript 与生产构建通过。仍存在 WebGL 透射、局部轮廓、柔光和景深差异;没有达到逐像素一致。
|
||||
|
||||
## 第三次修订:用户标注(2026-09-08)
|
||||
|
||||
- 通过 reference/match-annotations.py 匹配标注帧,定位 27.60 / 29.16 / 31.56 秒;据此调整厚度与前半段透视镜头。
|
||||
- 实际运行的模型位置:31.56 秒为 [0,-1.9963,-2.17],33.48 秒为 [0,0.4728,-2.17],39 秒为 [0,0.9,-2.17]。这三帧横向和纵深坐标相同,摄像机位置不同;实现中已移除抽取的平面插值。
|
||||
- 39 秒模型顶边投影约 [618,287]、[1478,226];镜头重新构图没有依赖档案前移。
|
||||
- 移除背景随特写额外下沉,保留正常波场运动;按标注修正回波进入时机。
|
||||
- Blender 源文件、GLB、Cycles 预览已更新。运动连续性检查通过,最大相邻帧波场位移约 0.633。TypeScript 与 Vite 构建通过。
|
||||
- 对照页增加“标注① / ② / ③”三个快捷按钮。仍然存在材质散射和景深差异,没有声明逐像素一致。
|
||||
|
||||
## 第四次修订:交互预览和材质过渡(2026-09-08)
|
||||
|
||||
- 交互预览实测 extraction=0.4、cameraDetail=0,顶边投影 [517,288] / [899,95],对应用户截图的浅抬起构图。
|
||||
- 确认读取后实测 extraction=3.35、cameraDetail=1;X-002 模型位置从 [0,-1.9963,-2.17] 升至 [0,0.9537,-2.17],镜头把卡片置于左侧,详情在右侧完整显示。横向与纵深坐标没有改变。
|
||||
- 新增 src/appearance.ts:共用外壳几何,材质参数随升降插值,内部细节覆盖率和标签透明度渐变,归位副本使用独立材质。消除归位交接时阵列实例晚一帧恢复的空档。
|
||||
- 浏览器验证连续“下一份、下一份、上一份”、点击读取、选择按钮获得焦点后按 Enter、升起途中返回。返回后停在浅抬起;运行错误日志为空。
|
||||
- node scripts/check-appearance.mjs 通过:连续材质插值、归位材质相互独立、着色器渐变参数、归位与阵列表面一致。既有 check-motion.mjs 同时通过。
|
||||
- 交互改动没有消除既有屏幕空间透射与原片材质之间的差异,仍不声明逐像素一致。
|
||||
|
||||
## 第五次修订:列选择、旋转净空与内容(2026-09-08)
|
||||
|
||||
- 第 760 帧五列峰值均为 2.121317;760–785 帧对应的波峰突出与镜头右移连续进行。相关逐帧窗口最大相邻帧波场变化为 0.5532。
|
||||
- 交互最终采用 4.05 升高,较早先 3.35 略高;回退试调的 5.0。实测模型高度 3.70000005,稳定展示时对邻片顶部的净空约 0.3635,旋转到 0.8 弧度仍保留净空。
|
||||
- 返回先转正再下降;0.8 弧度以 60fps 测试约 0.967 秒完成对齐。转正期间摄像机保持构图,随后跟随下降。切换时归位副本独立对齐,附近新卡片暂缓抬起。
|
||||
- 浏览器实际用左右和上下键遍历了 40 个不同档案编号,五列各 8 个,无不可达记录;切列会恢复该列上次选择。
|
||||
- 每份档案含摘要、三条研究记录和设定来源;导出脚本生成 40 份文本。修正了科属混淆,去除未核实的具体归档日期与虚构负责人任命,改为编目范围和相关人物。
|
||||
- 标签删除简笔曲线,与启动界面共享同一标志路径。
|
||||
- check-archive.mjs 验证列容量、唯一槽位、世界观文本结构、波峰连续性、真实 GLB 高度、旋转对齐时间;既有运动和材质检查继续通过。
|
||||
@@ -0,0 +1,46 @@
|
||||
# 屏幕比例、触摸与 PWA 验证
|
||||
|
||||
日期:2026-09-09。保持原生 TypeScript / Three.js / DOM 实现;原片对照继续使用 1920×1080 舞台。
|
||||
|
||||
## 实现边界
|
||||
|
||||
- 交互舞台按视口延展;桌面以 1080 高度计算坐标,小屏使用 CSS 像素。宽高比小于 1.05 时采用竖屏布局。
|
||||
- 竖屏详情使用上方模型和下方独立滚动正文;镜头构图只改变投影与相机位置,不移动模型来适配。固定预览参照保留波浪、抬起和循环轨道的运动。
|
||||
- 使用安全区域和动态视口;软键盘通过 Visual Viewport 缩短弹窗,不反复重建三维缓冲。横竖屏切换保留选择、视角和拆解状态。
|
||||
- 指针捕获、取消和多指隔离避免误切档;单次滑动至少 36 px,主轴至少为次轴的 1.3 倍,最长 1.4 秒。查看器双指缩放与平移,正文保持原生滚动。
|
||||
- 延用用户画质。渲染分辨率按实际画布尺寸计算;后台标签页暂停更新,开场纯二维阶段不渲染三维阵列。没有按手机型号降低材质或阴影。
|
||||
- Safari 点击按钮不一定转移焦点,因此显式记录弹窗与查看器的打开按钮。缺少全屏 API 时不显示全屏按钮。
|
||||
|
||||
## 自动检查
|
||||
|
||||
`npm run build`、`npm run check:viewport`、既有档案内容、循环阵列、解密与画质检查均通过。
|
||||
|
||||
`scripts/check-responsive.mjs` 在真实 WebGL 页面验证以下视口:
|
||||
|
||||
| 类型 | CSS 视口 |
|
||||
| --- | --- |
|
||||
| 桌面基准 | 1920×1080 |
|
||||
| 笔记本 | 1440×900 |
|
||||
| 宽屏 / 超宽屏 | 2560×1080 / 3840×1080 |
|
||||
| 较方桌面 | 1280×1024 |
|
||||
| 手机横屏 / 竖屏 | 844×390 / 390×844 |
|
||||
| 小屏竖屏 / 横屏 | 320×568 / 568×320 |
|
||||
|
||||
检查主要按钮不越界、两个方向的滑动、八次切档跨循环接缝、解密完成及抽取高度 4.05、正文滚动和收藏、查看器拆解、双指缩放和平移、旋转屏幕后的状态保留,以及检索、收藏与设置弹窗。Windows Playwright WebKit 另检查 390×844、844×390;其指针检查使用合成 PointerEvent,不能代表 iPhone 真实多指输入。
|
||||
|
||||
1920×1080 原片 39 秒定格与改动前截图对照:相机、投影与模型坐标一致;RGB 平均绝对差 0.013852 / 255,单通道最大差 4 / 255。截图为真实渲染差异,不能解释为所有设备逐像素一致。测试报告和截图输出在本地 `.tools/responsive`。
|
||||
|
||||
## iPhone 实机
|
||||
|
||||
用户已在 iPhone / Safari 试用并反馈没有明显问题。提供 `npm run review:mobile` 与 `reference/mobile-review.html`,可在同一局域网测试阵列、切档、解密和查看器并保存帧间隔报告;尚未收到真机报告,因此不声称已取得 iPhone 帧率或 GPU 耗时数据。Windows WebKit 不支持本次音频环境,声音听感与 iPhone 音频需以真机为准。
|
||||
|
||||
## PWA
|
||||
|
||||
`scripts/check-pwa.mjs` 使用生产构建验证:
|
||||
|
||||
- manifest 与图标;62 个资源、约 28 MiB 的完整版本安装。
|
||||
- 断网重新加载、字体、TXT 导出、模型查看与拆解、音乐资源读取。
|
||||
- 新版本等待、用户明确更新后重启、清理本应用旧版本、保留其他缓存及收藏偏好。
|
||||
- 模拟一个图标返回 503 导致更新失败:删除不完整新版本,旧版本继续离线打开。
|
||||
|
||||
这些是本地 Chromium 的 Service Worker 实测。iPhone 从主屏幕启动、系统安全区、缓存保留时长和音频自动播放限制,需要实际设备继续确认。使用步骤与 Vercel 配置见 [PWA 说明](../docs/PWA.md)。
|
||||
@@ -0,0 +1,24 @@
|
||||
# 第一版内构恢复与磨砂修正 · 2026-09-09
|
||||
|
||||
用户最终选择截图中对照页左侧第一版完整内构,要求恢复该版本,并反馈磨砂比原片更重。
|
||||
|
||||
## 实现
|
||||
|
||||
- 从 89c7742 的原始脚本恢复两组圆环及双连接带,保留全部原始几何、平滑法线、白色和橙色材质。通过 Blender MCP 重新生成单体、六组拆解模型及两个 .blend 源文件。
|
||||
- 外壳保留已完成的齐平黄色嵌片、两处螺丝、盖板后刻线。reference/ring-study/assembly-before.glb 保存 dde61fd 外壳回归基准。
|
||||
- 选中盖板粗糙度降至 0.42;折射采样模糊上限约为投影盖板高度的 1.6%,小尺寸预览与大尺寸展示采用一致比例。清晰过程单调减轻模糊,保留阵列与完全清晰端原始采样。
|
||||
- reference/internal-review.html 同时展示原始第一版和恢复后的第一版。reference/decryption-review.html 可与原片按帧观察磨砂及清晰过渡。
|
||||
|
||||
## 验证
|
||||
|
||||
- check-internal-optics 比较当前与第一版的内部世界坐标、法线、原始材质,以及当前与 dde61fd 的外壳坐标、法线和材质,精度为 1e-5。
|
||||
- check-decryption 覆盖解密曲线、盖板清晰控制、内构深度、折射采样与着色器替换;新增半尺寸、标准、双倍尺寸的模糊比例与单调性检查。
|
||||
- check-assembly、check-shell 分别检查单体/拆解几何一致性与外壳细节、移动揭示。
|
||||
|
||||
原片仍存在几何、照明与实时折射近似差异。技术验证不代表用户已经确认磨砂最终观感。
|
||||
|
||||
最终结果:四项脚本检查通过;单体与拆解最大顶点差为 2.666e-7,高度 3.70000005,内构深度 -0.034 至 0.150。浏览器 8 项交互回归全部通过,覆盖解密、玻璃切换、快速反向、拆解中切换、退出与重新进入。原片 34.00 秒并排复核可辨识两组环体;第一版恢复对照两侧内构外观一致。
|
||||
|
||||
生产构建 npm run build 通过,保留既有包体大小提示。最终浏览器复核无着色器编译错误。
|
||||
|
||||
用户最终反馈:‘效果很不错’,确认保留恢复后的内构与本版磨砂效果。
|
||||
@@ -0,0 +1,21 @@
|
||||
# 档案文字滚动与刻度过渡
|
||||
|
||||
用户要求标题快切采用类似已有数字滚动的效果。主界面复用 `@kitlangton/rolling-number` 0.4.1 的 `createRollingText`,移除旧 `ScrubTitle` 和黑条样式。
|
||||
|
||||
- 标题与编号共用 460ms 运动配置。标题采用 `transition: direct`、`stagger: none`,各字同时启动,宽度跟随同一引擎的布局弹簧。
|
||||
- 文字固定向上滚动;数字保留按导航方向滚动。中文不经过字母表或随机中间字符。
|
||||
- 标题使用 0.2 的垂直模糊强度,停止后恢复清晰。字号、颜色和布局位置沿用原样。
|
||||
- 快速替换延续当前可见过渡并转向最新标题。进入详情或启动、开启减少动态效果时结束滚动,保留最新语义文字。
|
||||
- 进入阵列时提前同步 animated 状态,修复首次切换因同时开启动画而直接换字的问题。
|
||||
|
||||
2026-09-09 验证:`npm run build` 通过;`reference/micro-transition-review.html` 的 15 项检查通过,覆盖首次切换、快速连续替换、最终文字与旧字槽回收、长短中文及符号混排、减少动态效果、进入详情打断,以及原有查看器进出与焦点行为。库会暂停隐藏页面的动画,动态检查应在可见页面运行。
|
||||
|
||||
## 分类、列名和悬停标签
|
||||
|
||||
用户要求统一检查快速选档时变化的文字。顶部 `INTERNAL DATABASE /` 后的分类、底部列名、悬停标题与权限标签都接入相同的 460ms 文字滚动,共用动效偏好与退出清理。权限内容当前相同,因此没有重复动画;档案数据日后变化时自动过渡。悬停的 `X-` 与斜杠固定,首次出现直接显示,连续命中不同档案才滚动。离开阵列时结束隐藏动画,下次显示当前文字。
|
||||
|
||||
将列导航字号及 eyebrow 外边距选择器限制在直接子元素,避免影响滚动引擎新增的内部字槽。保留原字号、色彩与分隔间距。
|
||||
|
||||
跨列刻度原来依赖隐藏和显示每份档案各自的按钮,导致新列没有可插值的旧样式。现在固定复用八个位置,切列仅更新对应档案、可访问标签和选中状态,沿用 400ms 的高度、位置和颜色过渡;各列相同位置无需额外播放。
|
||||
|
||||
本次构建通过;`reference/navigation-transition-check.html` 的 19 项真实场景检查通过,覆盖分类与列名同时滚动、嵌套样式、固定节点、跨列中间高度、快速反向、各列记忆、刻度点击映射、循环切列、实际射线悬停、首次显示、快速收敛、进入详情打断与减少动态效果。减少动态效果下的极短 CSS 过渡在下一帧清理,验证留出 40ms 提交时间。
|
||||
@@ -0,0 +1,11 @@
|
||||
# 音乐归齐与强调色修正
|
||||
|
||||
2026-09-10。
|
||||
|
||||
壁纸的短交互声音也可能进入 WE 系统频谱。播放本地音效时记录实际音符结束时间与 200ms 回传余量,在尚未形成音乐活动时忽略该时间内的新频谱活动;已有音乐继续响应。音乐强度为零时不驱动归齐。
|
||||
|
||||
归齐进度同时控制阵列与选中标签的强调程度,完全归齐时无强调色。暗色“仅选中强调”根据当前档案实际升降插值,新选中与归位副本均连续更新。
|
||||
|
||||
scripts/check-local-sound.mjs 复现未过滤时的假音乐起点,验证自身声音抑制、持续音乐起动与保留、信号丢失回落。scripts/check-selection-state.mjs 在 Edge 1600×900 使用实际鼠标拖动与模拟宿主频谱,验证静音拖动 flatten=0、新旧档案强调色出现中间值、全部归齐无强调及恢复;截图与结果在 verification/selection-state/。通过的是模拟回传测试,混合系统音源的最终表现以 WE 实际使用为准。
|
||||
|
||||
用户本轮决定保留原版、连续频谱、层叠流波三种音乐律动供自行选择,默认原版。
|
||||
@@ -0,0 +1,29 @@
|
||||
# 外壳与移动磨砂检查 · 2026-09-09
|
||||
|
||||
按用户提供的正面与局部截图,通过 Blender MCP 运行共享模型脚本;未使用参考视频作为交互背景。视效仍待用户实际审阅。
|
||||
|
||||
## 修改
|
||||
|
||||
- 顶边黄色嵌片改为约 0.25 × 0.2239;前面 z=0.206、顶部 y=3.7,与盖板齐平,具有真实嵌槽。原来的突出方块和左侧黄条删除。
|
||||
- 螺丝只保留右上与左下,使用十字凹槽、齐平垫圈及盖板孔。周围 C 形压槽连同顶部回路、内边框与底部回路均在盖板后,最前深度为 0.168,小于盖板内面 0.174。
|
||||
- 去掉前表面额外细阶与宽端盖。物理外缘仍可形成轮廓,盖板内的装饰刻线随磨砂模糊。
|
||||
- 以移动边界替代原来的固定高度粗糙度渐变:进度 0 全部磨砂,0.5 上部清晰而下部模糊,1 全部清晰。羽化带为高度的 24%。原片时间曲线从 38.84 秒开始,39.0 秒约 0.51,39.56 秒结束。
|
||||
- 主场景和 360° 查看器共享同一套资产与材质逻辑。内部六组光学网格的坐标及法线保持上一版。
|
||||
|
||||
## 验证
|
||||
|
||||
- `node --experimental-strip-types scripts/check-shell.mjs`:通过。内构位置及法线一致,螺丝仅分布在指定两角,嵌片顶边与前面齐平,所有刻线在盖板后;清晰进度与原片时间曲线单调,起止状态覆盖整面。
|
||||
- `node --experimental-strip-types scripts/check-assembly.mjs`:通过。单体与六组拆解资产的顶点最大误差 1.688e-7,模型高度 3.70000005。
|
||||
- `node --experimental-strip-types scripts/check-internal-optics.mjs`:通过。法线与截面最小点积 0.9997446,四种半透明内构材质与唯一连接带保留。前一轮的外壳不变断言由本轮的内构不变断言替代。
|
||||
- `node --experimental-strip-types scripts/check-decryption.mjs`:通过。解密线、退出重入、减少动态效果及内构净空保持正常。
|
||||
- `reference/decryption-check.html` 实际浏览器运行:8/8 通过。两段解密线共线、结束清晰与标记消失、近裁剪精度、磨砂过渡、反向切换保留镜头、拆解后切换、关闭后详情保持清晰、解密中退出清除标记。
|
||||
- `npm run build`:通过。已有 bundle 大小提示仍在。
|
||||
- 在对照页观察 0%、50%、100% 及斜视放大:初始整面模糊、中途上部先显露、结束内构与刻线清楚;嵌片无凸块侧面,黄条消失,只有两处螺丝。
|
||||
|
||||
## 入口与限制
|
||||
|
||||
`reference/shell-review.html`:打磨前后同镜头对照,使用同一套新版磨砂过渡;可拖动进度、以约 2.2 秒慢放清晰过程、检查顶部或螺丝局部。此页用于模型检查,标签复用产品资产。
|
||||
|
||||
`reference/decryption-review.html`:与原片同步逐帧检查,保留原时间码。实际详情为 `/?scene=detail`。
|
||||
|
||||
这是按图片与视频观察重建的外壳;刻线尺寸、玻璃光学和揭示速度仍是实时近似。当前没有声称与原片逐像素一致。源文件为 `art/rhine-archive.blend` 与 `art/archive-assembly.blend`;公共细节脚本为 `art/shell_reference_details.py`。
|
||||
@@ -0,0 +1,56 @@
|
||||
# 字体分包与开场声音(GitHub #6、#7)
|
||||
|
||||
## 范围与选择
|
||||
|
||||
用户于 2026-09-10 批准采用第三方 MiSans 分包,并授权修复后回复、关闭两个 issue。保留原生实现和既有视觉方向。
|
||||
|
||||
对比 npm `[email protected]`(dsrkafuu)和 `[email protected]`(mobeicanyue),使用开场中英文、40 份档案的全部文字、四个字重,以及 Chromium canvas 与页面截图进行检查。源码和分包使用 npm 固定归档,未执行上游脚本。
|
||||
|
||||
| 四字重合计 | 原整包 | misans | misans-webfont |
|
||||
| --- | ---: | ---: | ---: |
|
||||
| 全部字体字节 | 19,744,460 | 8,141,984 | 24,461,284 |
|
||||
| 同一组开场字符命中分包字节 | 19,744,460 | 1,013,060 | 972,988 |
|
||||
| 全档案字符命中分包字节 | 19,744,460 | 2,168,004 | 3,278,460 |
|
||||
|
||||
这里的“同一组字符”是向每个字重都请求相同文本的对照,不是实际页面流量。两包的 CSS 字符范围均覆盖测试语料。
|
||||
|
||||
选择 `misans-webfont`:开场对照稍小,CFF 轮廓渲染更接近现有官方 WOFF2;`misans` 的完整包更小,但其 TrueType 轮廓在逐字栅格对照中变化较多。两包均基于字体 4.003,现有官方文件为 4.009,因此不声称字形逐像素相同。字重固定映射到原来的 300/400/600/700,不使用上游多字体家族/统一 400 的默认 CSS,也不让设备本地字体覆盖固定版本。
|
||||
|
||||
字体分片原字节保存在 `public/fonts/misans-webfont-4.3.1`;`source.json` 记录归档完整性及每片 SHA-256。上游说明、原 CSS 与字体许可保留。`scripts/vendor-fonts.mjs` 可以从校验后的 npm 归档复现,生成 `src/fonts.css`;没有现场转换、重新切字或变更字体轮廓。
|
||||
|
||||
## 实际加载与布局
|
||||
|
||||
同一 Chrome、1920×1080、禁用 Service Worker 干预的冷页面测试:
|
||||
|
||||
- 原页面进入前下载四个字体,共 **19,744,460 字节 / 18.83 MiB**。
|
||||
- 新页面进入前下载 20 个分片,共 **424,676 字节 / 414.72 KiB**,字体字节减少 **97.85%**。
|
||||
- 这是字体下载量变化,不是所有网络、设备上的端到端时间承诺。入口也会等待既有主模型载入和必要字体;音乐下载与准备画面并行。
|
||||
- 两包字体版本带来少量拉丁字距差别。固定品牌第一行字距调整为 2.324px,中间行 0.587px,三行测量宽度恢复为 **269.78125 / 269.625 / 270px**,与基线一致;字号、字重、行高、起点和 ANALYSIS 的独立字母定位继续沿用。
|
||||
- 1920×1080 的档案正文宽高仍为 636×660px,未出现横向溢出。按需字体载入完成后,正文解密遮罩重新测量,保留解密进度。
|
||||
|
||||
模型源文件与 Blender 导出路径保留。Vite 构建为生产模型生成基于 SHA-256 的 URL;版本化字体与模型配置一年 immutable 缓存。模型实际加载仍保持同源,PWA 使用同一版本资源。
|
||||
|
||||
完整离线缓存仍包含所有字符分包,避免离线打开新档案或检索时缺字;当前完整安装约 **33.7 MiB / 817 个文件**,比此前约 28 MiB 增大。安装在用户进入、声音准备完成后开始,最多六个并发下载;全部成功后才成为完整版本。任一资源失败时等待其余下载结束后删除不完整缓存,保留旧版本。固定版本字体/模型可复用 HTTP 缓存,HTML 与非版本化资源仍验证更新。
|
||||
|
||||
## 开场启动
|
||||
|
||||
- 启用音效或音乐时,入口停在等待画面。点击或触摸画面、用按钮按 Enter/Space 才开始;等待时间不计入动画,起点仍为原片 6.76 秒。
|
||||
- 提前下载音乐原始字节;在真实用户操作中创建或 resume AudioContext,等解码和必要音轨准备完成,再开始动画。进入事件不会穿透为跳过动画或打开档案。
|
||||
- 重复点击不重复启动。声音下载失败、浏览器拒绝或等待超时,保留入口并显示重试;可选择“关闭声音并进入”,关闭并保存音效和音乐偏好。取消后迟到的音频不会自行播放。
|
||||
- 已关闭两项声音的用户自动进入;减少动态效果仍遵循既有偏好,启用声音时点击后直接进入档案。原片定格/场景对照参数绕过入口,不改变时间码。
|
||||
- 入口使用实际视口并隔离背景焦点,移动端不把按钮缩进 1920×1080 舞台。退出后恢复可见入口按钮的焦点。
|
||||
|
||||
## 检查与复现
|
||||
|
||||
使用本机 Playwright 路径设置 `PLAYWRIGHT_MODULE`。`npm run build` 生成生产构建;`npm run preview -- --port 5190` 供页面检查。
|
||||
|
||||
- `scripts/compare-font-packages.mjs`:拆包对照、字重、字符覆盖、canvas 字宽/像素差与截图。准备 `.tools/font-comparison/{dsrkafuu,mobeicanyue}/package`;原字体可从先前生产构建或 Git 的 e313777 提取,使用 `BASELINE_FONT_DIR` 指向它。
|
||||
- `scripts/check-font-loading.mjs`:旧/新生产构建的字体实际下载量、三行品牌宽度、详情正文尺寸与截图。通过 `BASELINE_DIST` 指定旧构建。
|
||||
- `scripts/check-startup-entry.mjs`:桌面、触摸、键盘、减少动态效果、静音、失败后重试、连续输入、取消后迟到音频、原片定格参数。
|
||||
- `scripts/check-startup-motion.mjs`:系统偏好、本站覆盖、重播与正文解密。
|
||||
- `scripts/check-pwa.mjs`:完整安装、离线读取、显式更新、收藏/偏好保留与更新失败。
|
||||
- `scripts/check-font-update.mjs`:由旧整包字体 PWA 更新到分包版本,删除旧整包缓存;离线点击启动三轨音乐并打开、拆解模型。
|
||||
|
||||
最终独立生产构建的 TypeScript/Vite 构建通过。Chrome 152 与 Edge 152 均通过上述全部入口用例(包括仅音效、仅音乐),Chrome 的系统偏好/重播检查通过。PWA 完整安装、离线、失败回退及从 e313777 整包字体版本迁移到本版的检查通过,无页面未捕获异常。旧缓存更新后,已验证断网进入三轨配乐、详情及模型拆解。档案内容 18 项检查与视口计算检查通过。
|
||||
|
||||
Windows Playwright WebKit 26.5 验证竖屏入口与声音解码失败后的继续路径;该环境缺少本项目所需的音频解码能力,不能代表 iPhone/Safari 实机音频验证。页面截图、下载字节与逐项报告输出在本地 `.tools/issues`,独立发布检查输出在 `.tools/issues-release/.tools/issues`。
|
||||
@@ -0,0 +1,25 @@
|
||||
# 超级性能模式与自定义画质
|
||||
|
||||
2026-09-10。采用现有原生实现,不改变动画或新增美术资产。
|
||||
|
||||
现有性能预设仍有 1024 阴影和阵列透射。新独立开关进一步降低三维像素、移除背景阵列透射/清漆与微小紧固件,跳过后处理,屏幕 SVG 滤镜停用,磨砂保留底色而取消模糊。选中模型、内构、解密、三维阵列位置、持续惯性和音乐运动计算均继续原路径。物理材质逐像素开销的依据见 [Three.js 官方材质说明](https://threejs.org/docs/pages/MeshPhysicalMaterial.html)。
|
||||
|
||||
## 实际页面验证
|
||||
|
||||
通过 scripts/check-super-performance.mjs,在 Edge headless、1920×1080、DPR 1 运行。GPU 报告为 NVIDIA GeForce RTX 5070 Ti Laptop GPU / ANGLE D3D11。这不是低配实机或 Wallpaper Engine 宿主帧率测试。
|
||||
|
||||
| 项目 | 原始 | 超级性能 |
|
||||
| --- | ---: | ---: |
|
||||
| 三维像素 | 2,073,600 | 746,496(减少 64%) |
|
||||
| 绘制调用 | 67 | 43 |
|
||||
| 每帧提交三角形 | 6,061,145 | 1,477,402(约减少 76%) |
|
||||
|
||||
统计包含阴影与后处理等多次提交,三角形不是唯一资产面的数量。此运行帧率读数为 5 / 6 FPS,受当前浏览器测试负载影响,不能视为低配收益比例;仅据实际缓冲尺寸与渲染器计数说明资源负担下降。
|
||||
|
||||
- 超级模式保留 reduced=false;实际选档与详情正常,着色器和页面均无报错。
|
||||
- 关闭后恢复原渲染尺寸、阴影与全局效果。自定义 75% → 部分回调 65% 保留其他参数;超级模式中改为 85%,关闭后恢复 85%。
|
||||
- 3840×2160 下缓冲总量仍不超过 921600 像素;字号不因超级模式改变。
|
||||
- 修复切档副本在复制标签材质前重复安装主题着色器的问题,消除该路径中 uniform 重复定义。
|
||||
- 视口/分辨率检查与 HUD 效果检查通过,TypeScript 与壁纸构建通过。
|
||||
|
||||
对照:[原始](super-performance/original.png)、[超级性能](super-performance/super.png)、[详情](super-performance/detail.png)。原始结果为 super-performance/results.json。超级模式的代价是模型边缘更软,玻璃感和阴影层次减少;未声称用户已经认可本版视觉取舍。
|
||||
@@ -0,0 +1,17 @@
|
||||
# 明暗配色验证 · 2026-09-10
|
||||
|
||||
设置新增亮色/暗色,默认亮色;WE 原生属性在「入场与画面」分组中长期保存。沿用原生实现与既有 Blender 模型。
|
||||
|
||||
## 行为与视觉
|
||||
|
||||
- `theme-motion.ts` 以选中档案的物理位置为起点,逐行逐列延迟改变材质;快速反向保留每张卡片上一帧颜色,减少动态效果直接到目标。
|
||||
- `theme-material.ts` 在原有光学着色器上扩展单个实例属性;没有增加网格或渲染通道。暗色盖板随原有解密前沿恢复清透,内部双环与刻线保持可见。标签为深底暖白字。
|
||||
- `theme-ui.ts` 共用连续颜色变量,覆盖设置、工作台、详情、查看器及启动元素。初次载入直接应用保存的配色。
|
||||
- Edge 中通过 `reference/theme-review.html` 试切工作台/档案展示并打开设置、详情和查看器;检查了烟灰阵列、深色弹窗、暖白正文、清晰内构和标签。减少动态效果下详情直接展示清晰终点。
|
||||
- 本机 WE 已更新构建文件;宿主重新载入后的实际显示和用户审美确认仍需试用,浏览器检查不替代该项。
|
||||
|
||||
## 检查
|
||||
|
||||
`node --experimental-strip-types scripts/check-theme.mjs`:级联次序、反向连续、亮色终点、减少动态效果、数值边界通过。
|
||||
|
||||
`check-wallpaper.mjs`、`check-workbench.mjs`、`check-playground.mjs` 通过。TypeScript、普通构建和壁纸构建通过;沿用既有单包体积提示。
|
||||
@@ -0,0 +1,22 @@
|
||||
# 三维资源开关与可选图片
|
||||
|
||||
2026-09-10,壁纸实验分支。
|
||||
|
||||
左下 SESSION 右侧的 3D 开关使档案按行列错峰下落,约 1.1 秒结束后释放主场景、独立查看器、几何体、材质、纹理、实例缓冲、后处理与渲染器,并主动丢失 WebGL 上下文、移除画布与场景输入监听。再次开启重新加载资产、恢复选档,以相同位置轨迹逆向升起。关闭途中可反向;加载中禁用重复加载,失败回到关闭状态允许重试。减少动态效果直接切换。
|
||||
|
||||
2D 内容继续运行。游戏入口从退场开始隐藏,载入后按 showgame 恢复;模型查看入口在关闭期间隐藏。已有独立查看器也随释放销毁,避免隐藏画布继续占用资源。
|
||||
|
||||
WE「入场与画面」提供“关闭 3D 后显示自定义壁纸”(默认关闭)和条件显示的图片文件选择器。图片按 cover 铺满,在资源释放后约 650ms 淡入;重新加载成功时淡出,加载期间保留。图片位于 WebGL 画布之上、普通 UI 之下,使不透明三维背景不会打断图片渐隐。支持部分属性更新、清除路径、运行中改图及失败提示;快速改图使用请求编号拒绝旧回调。文件路径根据 [WE 官方 File property 文档](https://docs.wallpaperengine.io/en/web/customization/properties.html#file-property) 转为 file:/// 地址。
|
||||
|
||||
## 验证
|
||||
|
||||
scripts/check-three-release.mjs 在 Edge 1600×900 实际渲染中通过:
|
||||
|
||||
- 关闭中 presence 处于 0–1;反向恢复不触发 context lost。
|
||||
- 完整关闭触发原画布 webglcontextlost,主场景与查看器画布数均归零。
|
||||
- 新加载产生不同画布,选档保留;入场 presence 从小于 1 到达 1。
|
||||
- 自定义图片只在关闭后显示;重开淡出,关闭选项和清除路径均有效。
|
||||
- 游戏入口关闭时不可见,重新开启后恢复。
|
||||
- 减少动态效果反复开关、查看器用过后释放、详情正文继续可读以及重新加载均通过;无页面或着色器错误。
|
||||
|
||||
截图与结果在 verification/three-release/。图片使用测试图形,未替用户设置默认自定义图片。浏览器通过模拟宿主回调验证;WE 原生文件选择器与真实本地文件加载仍需宿主试用,不将浏览器模拟称为宿主验收。
|
||||
@@ -0,0 +1,33 @@
|
||||
# UI 对齐复核 · 2026-09-09
|
||||
|
||||
沿用项目的原生 DOM/CSS 实现流程。范围为导航入口、检索与收藏弹窗、详情操作区、设置网格,以及独立查看器的页眉和页脚。
|
||||
|
||||
## 修正
|
||||
|
||||
- 检索表头和结果行共用列定义与 7px 右侧留白,表头和滚动区域均预留稳定的细滚动条空间。原来 10px 滚动条加上结果行独有的 7px padding,使科室和权限列相对表头左移 17px。
|
||||
- 权限文字与箭头改为水平 flex 居中;箭头占固定宽度,靠权限列右侧排列,避免字号差异造成基线偏移。
|
||||
- 关闭和搜索符号以 CSS 几何绘制,保留原有符号轮廓和按钮语义,避免字体字符自身的留白影响对齐。导航按钮统一行高与最小高度,快捷键框禁止收缩。
|
||||
- 搜索输入框清除浏览器默认水平 padding;档案编号禁止压缩,标题允许在自身列内换行。
|
||||
- 每个分类按钮始终预留选中标记空间,切换分类不会改变按钮宽度或后续文字位置。
|
||||
- 详情导出和设置底部操作使用 flex 居中,移除导出箭头的 float 布局。
|
||||
- 设置面板预留稳定滚动条空间;音频和画质网格均使用 32px 列间距,消除展开高级设置时的横移及两组网格的错位。
|
||||
|
||||
## 实际浏览器验证
|
||||
|
||||
使用本地 Vite 页面、现有 40 份档案内容,读取 DOM 边界并检查截图。坐标均为浏览器 CSS 像素。
|
||||
|
||||
| 检查 | 结果 |
|
||||
| --- | --- |
|
||||
| 1280×720 原始表头 / 首行 | 科室 x=754 / 742.667;权限 x=907.333 / 896,差 11.333px,即基准尺寸 17px |
|
||||
| 1280×720 修正后 | 科室均为 x=742.667;权限均为 x=896 |
|
||||
| 1920×1080,单条 X-001 | 表头和结果的三列左边界均为 384、1114、1344 |
|
||||
| 1366×768,全部 40 行 | 三列左边界约为 273.400、792.511、956.067;所有行相对表头的最大偏差 0px |
|
||||
| 1366×768,工程研究 / 单条 X-020 | 三列位置与全部档案一致;六个分类按钮左边界在切换前后完全一致 |
|
||||
| 无匹配结果 / 收藏空状态 | 空状态正常居中,表头保留,关闭后焦点返回入口 |
|
||||
| 设置展开 / 收起 | 关闭按钮 x 均为 1364.047;音频与画质网格的两列均起于 x=474、971 |
|
||||
| 详情页 | 导出文字与箭头居中,与收藏按钮共同位于操作行;页签、正文和元数据目视检查正常 |
|
||||
| 独立查看器 | 页脚帮助、拆解/重组按钮组和复位按钮的垂直中心均为 y=982;无需修改 |
|
||||
|
||||
`npm run build` 通过(TypeScript 与 Vite)。Vite 仍提示主包大于 500kB,与本次 CSS 对齐修正无关。本次未新增仅重复 CSS 声明的单元测试。
|
||||
|
||||
浏览器验证为 Chromium;其他浏览器的字体栅格化尚未逐一检查。
|
||||
@@ -0,0 +1,24 @@
|
||||
# 四边距设置
|
||||
|
||||
2026-09-10。用户因任务栏遮挡底部 UI,要求增加上/下/左/右四个独立滑杆,并明确允许负数。
|
||||
|
||||
WE 属性新增原生「界面边距 · 正值内收 / 负值外扩」分组,四项范围 −300~300px、默认 0、步长 1。数值是原布局额外偏移,通过舞台缩放换算为显示区域的 CSS 像素;不是把原边距替换为 0。部分宿主回调不覆盖其他方向,非法数值回退 0。
|
||||
|
||||
原生 CSS 调整工作台、档案与详情容器的边界,分别校正品牌、设置、页脚、固定游戏说明、弹窗和独立查看器控制区。三维画布保持原尺寸,字号不因边距缩放。UI 曲面在边距布局后测量;开场不受 UI 边距影响。场景目标与解密标记继续对应真实模型位置。
|
||||
|
||||
验证:
|
||||
- 单元检查覆盖四方向正负数、超范围、非有限值、部分回调保留和全零恢复;八个原生分组及条件显示通过。
|
||||
- Edge 对照页在曲面关闭时记录:基线 brandLeft=46.11、brandTop=89.09、footerBottom=27.35、navRight=46.11。
|
||||
- 设置上 30、下 60、左 −20、右 40 后分别得到 26.11、119.08、87.34、86.10,误差约 0.01px。字体均为 44px,三维画布均为 2139.70×844 CSS px。
|
||||
- 随后开启曲面并切到档案模式,实际点击读取入口成功打开详情。设置无需开启视差即可生效。
|
||||
- 壁纸构建与正式网页构建均通过;保留既有大块体积提示。
|
||||
|
||||
|
||||
2026-09-10 修订:曲面纵深、细颗粒、颗粒尺寸、边缘色散、暗角的默认数值统一为 20。下边距不再缩短桌面工作台的中部定位容器;底部导航和页脚先上移,实际接近中部内容时才推动对应内容,上方品牌限制继续上移,空间不足时内容独立滚动。手机窄屏继续采用原有纵向滚动布局。
|
||||
|
||||
WE 新增「工作台 · 可用功能」,时间日期、今日事项、重要日程、正在播放、专注计时各自可开关,默认全开。关闭功能同时移除其右侧内容入口和底部按钮;当前项关闭时选择首个仍开启功能,全关时隐藏右侧内容和导航。左侧时钟与事项仍由原显示开关控制,任务和计时状态保留。用户明确要求自行验证,本轮仅完成实现和构建打包,未进行运行时与视觉验收。
|
||||
|
||||
|
||||
2026-09-10 后续修正(覆盖上述中部避让方案):用户明确下边距只移动底部两排,排间距固定,中部组件不压缩、不滚动。已删除 workbench-insets 自动避让;工作台高度不再随下边距变化。底部导航、游戏入口与页脚在曲面投影之后使用相同 translate 偏移。另修复 :is 内 ID 提高优先级导致原规则覆盖,以及减少动态效果的隐式 all 过渡污染曲面测量的问题。Edge 实际页面完成 1920×1080、2560×1440、1600×900,曲面 0/20/80,下边距 60/192/300/−80/0,共 45 组检查:中部坐标及尺寸固定,无新增 overflow,底部各行位移一致。画面对照与数据见 verification/ui-insets/。
|
||||
|
||||
WE「入场与画面」新增暗色专用开关「暗色模式仅选中档案标签使用强调色」,默认关闭保留现有选择。开启后阵列与归位档案的顶边标签使用暗色,当前选中档案保留琥珀强调;浅色不受影响。通过既有材质 uniform 实现,无新增网格与绘制通道,暗色开/关及浅色截图已检查。
|
||||
@@ -0,0 +1,15 @@
|
||||
# 详情与弹窗过渡验证
|
||||
|
||||
2026-09-09 在真实 Vite 应用中验证。分支 `codex/boot-motion-polish` 已通过合并提交 `09162a0` 进入 `main`,同时保留工作区内的音频和画质改动。
|
||||
|
||||
## 本次覆盖
|
||||
|
||||
- `reference/ui-transition-check.html`:20 项通过。覆盖弹窗退出保留节点和输入隔离、重复 Esc、开场中断时的透明度连续性、检索结果的关闭后导航、正文可读后焦点、收藏保留 DOM 与滚动位置、快速页签切换、详情退出反向接续、镜头遮罩归位,以及减少动态效果。
|
||||
- `reference/viewer-motion-check.html`:合并后的 14 项全部通过,包括帧率一致性、复位短路径与中断、键盘与滚轮平滑跟随、边界以及再次进入。
|
||||
- `reference/micro-transition-review.html`:原有标题快切与查看器进出 13 项全部通过。
|
||||
- `node scripts/check-motion.mjs` 与 `node scripts/check-loop.mjs`:通过。基线正负波谷、抽取运动和 20,000 次循环导航继续满足原有检查。
|
||||
- `npm run build`:通过 TypeScript 与生产打包。仍存在原有的大体积 JavaScript chunk 提示。
|
||||
|
||||
详情稳定画面经浏览器截图检查,页签下划线、正文、收藏按钮与既有构图一致。功能与数值连续性检查不等同于原片逐像素认证。
|
||||
|
||||
新增检查页只在本地开发入口使用,自动恢复开始前的收藏与设置存储。参考页面不包含在产品构建入口中。
|
||||
@@ -0,0 +1,23 @@
|
||||
# 壁纸 UI 曲面与全局画面质感
|
||||
|
||||
2026-09-10。用户提供三张标注截图,要求重新查看本机创意工坊 3088099655;UI 单独产生空间视差,色散、颗粒、暗角处理全局。
|
||||
|
||||
## 参考结构与本次修正
|
||||
|
||||
只读查看指定项目的 project.json 与 scene.pkg。场景禁用了 camera parallax;前后两个 Full Composition Layer 使用正负 0.02 的径向镜头畸变,UI 位于中间,背景经过相反方向处理。cursortracking 控制两层相反的切向中心偏移,归一化鼠标乘正负 0.005,关闭时回到中心。另一个合成层使用 CRT 与色散;颗粒还受 resolution 影响,中心附近色散较弱。参考文件没有复制到交付包。
|
||||
|
||||
此前同方向 translate / rotate 与仅三维的 ShaderPass 已撤换。本版 UI 各区块以共同径向曲面四角计算 matrix3d,左上/右上、左下/右下的斜率不同。为保留原生 DOM 控件、磨砂底和正确命中范围,区块内部采用四角投影近似,没有声称逐像素复用参考项目的光学 shader。曲率为纵深 × 0.08,指针改变切向项。屏幕角落归一化避免把边缘内容推离画面。关闭鼠标追踪保留静态曲面;关闭视差返回原布局。WE 被动指针不再移动三维相机,显式拖动卡片规则沿用。
|
||||
|
||||
全局效果现在使用浏览器 SVG SourceGraphic 合成,涵盖三维画布、DOM 文字、按钮、磨砂与模态查看器。径向色散分别偏移红/蓝通道;边界淡出并校正位移图中性值,避免彩色边框。颗粒为单色 soft-light 合成,有强度和尺寸,12Hz 更新;暗角同样在全局合成后衰减。关闭时移除滤镜,单项为零时不创建对应处理节点。保留 sRGB 避免不必要的色调变化。技术依据:[SVG 位移滤镜](https://developer.mozilla.org/en-US/docs/Web/SVG/Reference/Element/feDisplacementMap)、[SVG 混合滤镜](https://developer.mozilla.org/en-US/docs/Web/SVG/Reference/Element/feBlend)。
|
||||
|
||||
三项主开关默认关闭。鼠标追踪默认开启,依赖 UI 视差显示。减少动态效果时停止追踪、冻结颗粒,但不取消用户选中的静态曲面。开场没有 UI 曲面,仍经过用户启用的全局屏幕效果。局部磨砂继续独立配置。
|
||||
|
||||
## 验证
|
||||
|
||||
- check-visual-effects.mjs:三种宽高比零纵深恒等、曲面左右对称、两侧斜率相反、投影矩阵四角精确匹配、部分属性回调、追踪关闭保留曲面、弹窗停止追踪、减少动态效果、开场全局滤镜范围。
|
||||
- check-workbench.mjs、check-wallpaper.mjs、check-playground.mjs:工作台、宿主回调、原生七分组与条件显示通过。
|
||||
- Edge 实际打开 reference/visual-effects-review.html,逐项检查曲面、色散、颗粒、暗角。70% 纵深、追踪关闭时,左上品牌顶边斜率约 +0.098,canvas transform 为 none;右侧与底部方向相应反转。
|
||||
- 60% 色散清楚覆盖品牌字体、时钟与三维卡片边缘;修正后的边缘无越界彩框。80% 颗粒 / 60% 尺寸在浅色背景可见;70% 暗角同时压暗暗色主题的文字与背景。
|
||||
- 曲面与磨砂开启时,实际点击底部「专注计时」成功切换,再点击变形后的设置入口成功打开弹窗。20% 色散、30% 颗粒、35% 暗角同时覆盖设置弹窗,弹窗内容和按钮仍可使用。
|
||||
- 浏览器检查不等于 Wallpaper Engine 宿主 GPU 性能测量。本次不宣称宿主帧率;整体合成滤镜的实际负载取决于壁纸分辨率和硬件。
|
||||
`npm run build:wallpaper` 与 `npm run build` 均通过;保留既有大块体积提示。
|
||||
@@ -0,0 +1,28 @@
|
||||
# 壁纸分支回合网页主分支
|
||||
|
||||
2026-09-11,按用户授权将 `codex/wallpaper-engine` 的已提交实现合入 `main`,保留两种构建入口。未包含原工作区未提交的文件桥接实验与其他改动。
|
||||
|
||||
| 功能 | 网页处理 |
|
||||
| --- | --- |
|
||||
| 亮暗配色及卡片波次变色 | 直接合入,设置选择,保存偏好;详情、查看器同步 |
|
||||
| 自适应阵列、逐实例裁剪、暗色雾气 | 直接合入;显式原片时间码对照保留固定阵列 |
|
||||
| 正常开场铺屏与移除字幕 | 直接合入,保留网页版点击解锁声音 |
|
||||
| 页脚数字时钟、滚动测量修复 | 直接合入,时分秒独立滚动,减少动态效果仍有效 |
|
||||
| 超级性能模式 | 增加网页设置,默认关闭,保存到原偏好;独立于减少动态效果,关闭恢复当前预设或自定义画质 |
|
||||
| 资源释放与材质管理 | 共用修复合入;网页不提供隐藏档案场景的桌面开关 |
|
||||
| 工作台、待办、倒计时、专注、媒体文字滚动 | 代码保留在壁纸入口;网页继续以档案浏览为主 |
|
||||
| 系统音频律动、媒体回调、宿主暂停与帧率 | 仅壁纸构建初始化,普通网页不伪造系统输入 |
|
||||
| HUD、颗粒色散、界面边距、自定义图片、3D 开关 | 本次保留为壁纸属性;网页如需开放,应另行设计对应的设置入口 |
|
||||
| PWA、声音、检索收藏、导出、触摸与自定义画质 | 继续保留网页流程 |
|
||||
|
||||
## 验证
|
||||
|
||||
- `npm ci --offline` 安装通过,安装阶段自动应用固定版本滚动库修补。
|
||||
- `npm run build`、`npm run build:wallpaper` 均通过。网页离线包 817 文件、33.8 MiB;壁纸 824 文件、35.1 MiB。保留 Vite 既有大包提示。
|
||||
- 18 项档案内容测试通过;视口计算、主题反转连续性、阵列覆盖与裁剪检查通过。
|
||||
- `scripts/check-web-integration.mjs` 对正式网页构建运行 Edge:真实点击启动、无壁纸宿主初始化、暗色和性能偏好刷新恢复、关闭性能恢复画质、键盘选档、真实时钟动画、详情和查看器均通过。
|
||||
- 1600×900、2560×1080、390×844、844×390 视口检查通过,后面三项未出现页面横向溢出。截图检查了暗色详情与手机横屏布局。这是桌面 Edge 视口模拟,不是新一轮 iPhone 真机测试。
|
||||
- 网页 manifest 和生成的 Service Worker 存在,壁纸输出保持独立;本轮未重新执行完整离线升级故障矩阵。
|
||||
- 运行无页面异常或 THREE/Shader/WebGL 错误。结果与截图位于 `verification/web-integration/`。
|
||||
|
||||
复现:`npm run build`,运行 `npm run preview -- --port 5188`,另一个终端执行 `node scripts/check-web-integration.mjs`。可用 `PLAYWRIGHT_MODULE` 指定 Playwright 安装位置。
|
||||
@@ -0,0 +1,11 @@
|
||||
# 官网 Novecento 字体部署
|
||||
|
||||
2026-09-11:之前的字体提交仅在 Wallpaper Engine 分支,且授权字体文件不进入 Git,因此正式网页仍是原版。将开场字体相关提交独立集成到 main,保留网页原有功能。
|
||||
|
||||
- 本机通过 MyFonts 正式 Webfont kit 构建,三份 WOFF2 共 119,732 字节;文件哈希见 `boot-lettering/webfont-sources.json`。
|
||||
- 首次使用 `npm run build`、`node scripts/package-vercel.mjs` 和 Vercel `deploy --prebuilt --prod` 部署静态输出,不读取生产环境变量。
|
||||
- 后续仅本项目 Vercel 构建从当前正式域名恢复同一份字体及原 CSS,逐文件验证 SHA-256。恢复失败中止构建,保留原部署;其他项目没有本地字体时沿用固定文字图形。
|
||||
- 正式域名 `https://rhine.lubeiluchen.cc/` 的 PWA 版本为 `0aa8a1c41186b335`。从空目录执行恢复脚本,成功下载并验证全部四个资源,线上 PWA 清单包含三份字体。
|
||||
- 本地正式构建通过;原生浏览器字体回归 15 项通过,三种字重用于开场的 27 个字形分别与源文件一致。线上完成资源及版本校验,未将这些 HTTP 检查称作线上视觉验收。
|
||||
|
||||
已安装旧 PWA 的用户可从设置更新并重启,或打开 `/update.html` 恢复入口。授权原文件与订单不提交到公共仓库;官网 Webfont 授权不等同于 Wallpaper Engine 内容包分发许可。
|
||||
@@ -0,0 +1,43 @@
|
||||
# 工作台修订复核 · 2026-09-10
|
||||
|
||||
## 内容、配色与过渡
|
||||
|
||||
删除媒体无进度和本机时区两段说明;有效进度仍显示。暗色选中导航竖线修复为独立的伪元素选择器,使用主题正文色;重播悬停使用琥珀色。接力退出按钮移到计时线下方。
|
||||
|
||||
工作台与档案互切时,退出内容约 220ms 淡出,立即 inert,结束后隐藏;快速反向从当前透明度返回。工作台进入继续保留各区域轻微错峰。开场隐藏档案编号和选档文字,Powered 在结束前 350ms 淡出;减少动态效果直接到位。
|
||||
|
||||
Edge 的 `reference/workbench-revision.html` 16 项页面回归全部通过,包含双向退场、快速反向、减少动态效果、游戏按钮与设置的实际矩形分离、开场标签隐藏、Powered 中间透明度 0.807 及短开场进入工作台。浏览器帧调度有延迟,因此检查等待动画完成;开场中间帧通过反复定位到目标时刻采样,不用固定 35ms 定时器假设已经完成渲染。
|
||||
|
||||
## 音乐 A/B
|
||||
|
||||
原版默认参数保留。A 按相机投影后的屏幕位置将低频放左侧、中频居中、高频放右侧,边界平滑混合。B 为三层持续流波。两者均取消节拍门槛,持续音保持运动;共享频谱衰减和方案切换权重。
|
||||
|
||||
`check-playground.mjs` 验证左右频段、持续中频、持续低中高频下的 B、频段边界、静音与打断切换;通过。这是合成输入与算法验证,新 A/B 的真实歌曲观感待用户试用。
|
||||
|
||||
## 普通开场动态覆盖
|
||||
|
||||
`reference/loop-review.html` 实际 Three.js 场景检查通过,正常开场在 22.2 / 24 / 25.8 秒的背景数量分别为:
|
||||
|
||||
| 视口 | 22.2 秒 | 24 秒 | 25.8 秒 |
|
||||
| --- | ---: | ---: | ---: |
|
||||
| 1920×1080 | 284 | 322 | 302 |
|
||||
| 3840×1080 | 555 | 610 | 541 |
|
||||
| 1080×1920 | 813 | 677 | 520 |
|
||||
|
||||
普通开场已使用超出原五列、32 行的背景位置,按视锥裁剪。显式原片对照仍保持 159 个背景档案与独立选中模型;最大坐标误差 5.48e-7。61 次循环、9 次真实射线选取、坐标重置、详情净空、转正归位与重新选中均通过。UI 复核页实际 32:9 开场记录 610 个背景档案,进入工作台后按镜头变为约 492 个,不再在阶段边界从固定 159 个突然切换到完整覆盖。
|
||||
|
||||
`check-archive-visibility.mjs`、`check-wallpaper.mjs`、TypeScript、普通构建与壁纸构建通过。数量不等于实机帧率基准;真实 WE 性能仍需宿主试用。
|
||||
|
||||
## 本地媒体封面消失
|
||||
|
||||
用户报告 Magic Theorem 本地播放时封面短暂出现后消失,切换网易云再返回才恢复。代码原因:Properties 回调无条件删除 Thumbnail 和 Timeline 状态。WE 的媒体监听器为独立的变化事件,不能将文字事件当作整个媒体快照;同一封面还可能被多个曲目复用而不重新发送。依据:[官方 Web 媒体接口](https://docs.wallpaperengine.io/en/web/audio/media.html)。
|
||||
|
||||
现已让每个媒体事件只更新自己的状态;显式空封面仍会移除图片。`check-workbench.mjs` 覆盖封面先于文字、文字先于封面、延迟补充专辑名、共用封面、暂停恢复、跨播放器切换、空封面及空进度;通过。读取用户指定 MP3 的 ID3v2.3 标签,确认包含约 400 KB PNG 封面。没有修改音频文件,也未将其打包。
|
||||
|
||||
本轮未实际操控两个原生播放器重走播放顺序;验证的是本地元数据与相应宿主事件序列。更新后仍需用户按原步骤试听确认。
|
||||
|
||||
## 游戏进出过渡追加
|
||||
|
||||
复用 SurfaceTransition 管理 HUD、入口和目标标记的可见生命周期。HUD 进入 300ms、退出 220ms,工作台及共享品牌、页脚使用相反方向的淡变;退出完成前保持场景浏览和旧控件隔离,结束后恢复入口焦点。快速重新进入取消旧结束回调,减少动态效果直接完成。
|
||||
|
||||
Edge 实际页面的 11 项游戏过渡检查全部通过:进入与退出、工作台淡出恢复、焦点返回、快速进出再进入、竖屏按钮位置、隐藏入口、减少动态效果,以及退出期间切到档案模式不残留输入锁。TypeScript、接力与频谱检查、壁纸构建通过。
|
||||
@@ -0,0 +1,13 @@
|
||||
# 工作台工坊预览
|
||||
|
||||
2026-09-10 用户改为自行发布,要求录制 GIF,并参照本地工坊项目 3088099655 的镜头方式。
|
||||
|
||||
参考预览分析:256×256,127 个编码帧,12.8 秒,帧延迟主要 100ms;全景与局部裁切交替,局部轻微移动。具体制作软件无法仅凭 GIF 确定。没有使用其人物图片、文字、4K 标记或任何画面作为本作品素材。
|
||||
|
||||
素材由 scripts/record-workshop-preview.mjs 在 1280×720 浏览器内录制,展示工作台、演示事项、音乐频谱、专注页与明暗切换。53 个截图素材按实际时间记录;随后 scripts/encode-workshop-preview.py 组织六个镜头并进行局部推近。素材受截图采样速度限制,导出 100ms 时间步不代表原三维渲染或录制达到稳定 10 FPS。
|
||||
|
||||
最终 wallpaper/preview.gif:256×256、13.2 秒、940017 字节、73 个编码帧(相同帧合并延长停留),小于 1 MB。全局 24 色调色板用于减少闪动与体积;主要损失为细渐变层次。reference/workshop-preview/workbench-preview.gif 是 640×640、96 色的本地审阅版,不能作为受 1 MB 限制的工坊封面直接上传。
|
||||
|
||||
镜头:亮色全景 1.8s → 时钟与事项 2.4s → 亮色专注 2.4s → 暗色全景 2.0s → 暗色专注 2.0s → 亮色全景 2.6s。storyboard.jpg 已逐镜检查;输入没有写入生产默认任务。封面预览路径和正式名称写入 wallpaper/project.json,构建脚本自动复制 GIF。
|
||||
|
||||
正式工程准备在 myprojects/rhine-lab-workshop,尚未上传。用户操作步骤与保持工坊 ID 的更新注意事项见 docs/WORKSHOP-PUBLISH.md。
|
||||
|
After Width: | Height: | Size: 229 KiB |
@@ -0,0 +1,124 @@
|
||||
{
|
||||
"results": [
|
||||
{
|
||||
"name": "logo",
|
||||
"mode": "boot",
|
||||
"hud": "true",
|
||||
"tracking": "true",
|
||||
"panels": [
|
||||
{
|
||||
"name": "access-text hud-surface",
|
||||
"base": "",
|
||||
"projection": "matrix3d(0.837670949,0.000408488,0,-0.000004524,-0.001947569,0.838824954,0,-0.000011917,0,0,1,0,25.651449558,1.403405474,0,1)",
|
||||
"transform": "matrix3d(0.837671, 0.000408488, 0, -4.524e-06, -0.00194757, 0.838825, 0, -1.1917e-05, 0, 0, 1, 0, 25.6514, 1.40341, 0, 1)"
|
||||
},
|
||||
{
|
||||
"name": "boot-logo hud-surface",
|
||||
"base": "translate(-2px, 1px)",
|
||||
"projection": "matrix3d(0.916117351,0.005829202,0,0.000108124,-0.006222649,0.864456864,0,-0.000013425,0,0,1,0,56.771493536,12.272288651,0,1)",
|
||||
"transform": "matrix3d(0.916117, 0.0058292, 0, 0.000108124, -0.00622265, 0.864457, 0, -1.3425e-05, 0, 0, 1, 0, 56.7715, 12.2723, 0, 1)"
|
||||
},
|
||||
{
|
||||
"name": "auth-status hud-surface",
|
||||
"base": "",
|
||||
"projection": "matrix3d(0.833556157,0.000395581,0,-0.000004555,-0.000377875,0.834082305,0,-0.000011834,0,0,1,0,4.803994139,1.82830221,0,1)",
|
||||
"transform": "matrix3d(0.833556, 0.000395581, 0, -4.555e-06, -0.000377875, 0.834082, 0, -1.1834e-05, 0, 0, 1, 0, 4.80399, 1.8283, 0, 1)"
|
||||
},
|
||||
{
|
||||
"name": "scan hud-surface",
|
||||
"base": "",
|
||||
"projection": "matrix3d(1.014054761,0.005468473,0,0.000009932,-0.008388244,0.999691006,0,-0.000008964,0,0,1,0,-10.481348462,2.889266871,0,1)",
|
||||
"transform": "matrix3d(1.01405, 0.00546847, 0, 9.932e-06, -0.00838824, 0.999691, 0, -8.964e-06, 0, 0, 1, 0, -10.4813, 2.88927, 0, 1)"
|
||||
},
|
||||
{
|
||||
"name": "welcome hud-surface",
|
||||
"base": "scale(1)",
|
||||
"projection": "matrix3d(0.848240275,0.001612509,0,0.000011653,-0.005381638,0.842829731,0,-0.000021204,0,0,1,0,36.709917572,21.511397237,0,1)",
|
||||
"transform": "matrix3d(0.84824, 0.00161251, 0, 1.1653e-05, -0.00538164, 0.84283, 0, -2.1204e-05, 0, 0, 1, 0, 36.7099, 21.5114, 0, 1)"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "scan",
|
||||
"mode": "boot",
|
||||
"hud": "true",
|
||||
"tracking": "true",
|
||||
"panels": [
|
||||
{
|
||||
"name": "access-text hud-surface",
|
||||
"base": "",
|
||||
"projection": "matrix3d(0.837756127,0.000480546,0,-0.000002988,-0.002179857,0.838723132,0,-0.000013346,0,0,1,0,25.649694248,1.41941549,0,1)",
|
||||
"transform": "matrix3d(0.837756, 0.000480546, 0, -2.988e-06, -0.00217986, 0.838723, 0, -1.3346e-05, 0, 0, 1, 0, 25.6497, 1.41942, 0, 1)"
|
||||
},
|
||||
{
|
||||
"name": "boot-logo hud-surface",
|
||||
"base": "translate(-2px, 1px)",
|
||||
"projection": "matrix3d(0.917514605,0.005616957,0,0.000109848,-0.006836009,0.864612661,0,-0.000014731,0,0,1,0,56.530529856,12.374376262,0,1)",
|
||||
"transform": "matrix3d(0.917515, 0.00561696, 0, 0.000109848, -0.00683601, 0.864613, 0, -1.4731e-05, 0, 0, 1, 0, 56.5305, 12.3744, 0, 1)"
|
||||
},
|
||||
{
|
||||
"name": "auth-status hud-surface",
|
||||
"base": "",
|
||||
"projection": "matrix3d(0.832376131,0.000748284,0,-0.000017072,-0.000423595,0.833795729,0,-0.000013191,0,0,1,0,4.811390616,1.831919798,0,1)",
|
||||
"transform": "matrix3d(0.832376, 0.000748284, 0, -1.7072e-05, -0.000423595, 0.833796, 0, -1.3191e-05, 0, 0, 1, 0, 4.81139, 1.83192, 0, 1)"
|
||||
},
|
||||
{
|
||||
"name": "scan hud-surface",
|
||||
"base": "",
|
||||
"projection": "matrix3d(1.015911017,0.006216827,0,0.000011262,-0.009478941,0.9996251,0,-0.000010164,0,0,1,0,-11.877749937,3.274196018,0,1)",
|
||||
"transform": "matrix3d(1.01591, 0.00621683, 0, 1.1262e-05, -0.00947894, 0.999625, 0, -1.0164e-05, 0, 0, 1, 0, -11.8777, 3.2742, 0, 1)"
|
||||
},
|
||||
{
|
||||
"name": "welcome hud-surface",
|
||||
"base": "scale(1)",
|
||||
"projection": "matrix3d(0.848477973,0.001829398,0,0.000013209,-0.005761611,0.842536869,0,-0.000022635,0,0,1,0,36.690828784,21.574594918,0,1)",
|
||||
"transform": "matrix3d(0.848478, 0.0018294, 0, 1.3209e-05, -0.00576161, 0.842537, 0, -2.2635e-05, 0, 0, 1, 0, 36.6908, 21.5746, 0, 1)"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "welcome",
|
||||
"mode": "boot",
|
||||
"hud": "true",
|
||||
"tracking": "true",
|
||||
"panels": [
|
||||
{
|
||||
"name": "access-text hud-surface",
|
||||
"base": "",
|
||||
"projection": "matrix3d(0.837761433,0.000484997,0,-0.000002893,-0.002194191,0.838716888,0,-0.000013435,0,0,1,0,25.649579299,1.420402968,0,1)",
|
||||
"transform": "matrix3d(0.837761, 0.000484997, 0, -2.893e-06, -0.00219419, 0.838717, 0, -1.3435e-05, 0, 0, 1, 0, 25.6496, 1.4204, 0, 1)"
|
||||
},
|
||||
{
|
||||
"name": "boot-logo hud-surface",
|
||||
"base": "translate(-2px, 1px)",
|
||||
"projection": "matrix3d(0.917600825,0.005603862,0,0.000109955,-0.006873817,0.864622315,0,-0.000014811,0,0,1,0,56.515646817,12.380672299,0,1)",
|
||||
"transform": "matrix3d(0.917601, 0.00560386, 0, 0.000109955, -0.00687382, 0.864622, 0, -1.4811e-05, 0, 0, 1, 0, 56.5156, 12.3807, 0, 1)"
|
||||
},
|
||||
{
|
||||
"name": "auth-status hud-surface",
|
||||
"base": "",
|
||||
"projection": "matrix3d(0.832354279,0.00075612,0,-0.000016979,-0.000426439,0.833777969,0,-0.000013279,0,0,1,0,4.811845745,1.832142535,0,1)",
|
||||
"transform": "matrix3d(0.832354, 0.00075612, 0, -1.6979e-05, -0.000426439, 0.833778, 0, -1.3279e-05, 0, 0, 1, 0, 4.81185, 1.83214, 0, 1)"
|
||||
},
|
||||
{
|
||||
"name": "scan hud-surface",
|
||||
"base": "",
|
||||
"projection": "matrix3d(1.016025421,0.006263154,0,0.000011344,-0.009546029,0.999620842,0,-0.000010239,0,0,1,0,-11.963907266,3.297945969,0,1)",
|
||||
"transform": "matrix3d(1.01603, 0.00626315, 0, 1.1344e-05, -0.00954603, 0.999621, 0, -1.0239e-05, 0, 0, 1, 0, -11.9639, 3.29795, 0, 1)"
|
||||
},
|
||||
{
|
||||
"name": "welcome hud-surface",
|
||||
"base": "scale(1)",
|
||||
"projection": "matrix3d(0.848492667,0.001842795,0,0.000013305,-0.005785043,0.842518818,0,-0.000022724,0,0,1,0,36.689641469,21.578488737,0,1)",
|
||||
"transform": "matrix3d(0.848493, 0.00184279, 0, 1.3305e-05, -0.00578504, 0.842519, 0, -2.2724e-05, 0, 0, 1, 0, 36.6896, 21.5785, 0, 1)"
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"errors": [],
|
||||
"off": true,
|
||||
"static": true,
|
||||
"reduced": true,
|
||||
"modeTransition": true,
|
||||
"resize": true
|
||||
}
|
||||
|
After Width: | Height: | Size: 302 KiB |
|
After Width: | Height: | Size: 358 KiB |
|
After Width: | Height: | Size: 242 KiB |
|
After Width: | Height: | Size: 203 KiB |
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"error": 0.0368942660067128,
|
||||
"params": {
|
||||
"size": 50.75,
|
||||
"tracking": 1.0,
|
||||
"x": 59.0,
|
||||
"y": 120.5
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
{
|
||||
"Normal": {
|
||||
"filename": "Novecentosanswide-Normal.otf",
|
||||
"sha256": "8bb9c4a562adeaae69a6174fe3cce83166119841a71b22f3b0d5246680b78e34",
|
||||
"version": "Version 3.001;PS 003.001;hotconv 1.0.70;makeotf.lib2.5.58329"
|
||||
},
|
||||
"DemiBold": {
|
||||
"filename": "Novecentosanswide-DemiBold.otf",
|
||||
"sha256": "853df25212b04737f7c9ea08c2c8f1fa0991fde40bbfb36d3bfdc171d8ad3a53",
|
||||
"version": "Version 3.001;PS 003.001;hotconv 1.0.70;makeotf.lib2.5.58329"
|
||||
},
|
||||
"Bold": {
|
||||
"filename": "Novecentosanswide-Bold.otf",
|
||||
"sha256": "dbba358622df5b4bffc76bdb46fb9e688e0f76b8e0f8c386593f4f1a3de159d1",
|
||||
"version": "Version 3.001;PS 003.001;hotconv 1.0.70;makeotf.lib2.5.58329"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
{
|
||||
"Normal": {
|
||||
"glyphsIdentical": 27,
|
||||
"glyphsCompared": 27,
|
||||
"woff2Bytes": 39572,
|
||||
"sha256": "31910c082422680a19fc22c8677ea8e11664d8b8ad55812e96018833d15ae4d4",
|
||||
"version": "Version 3.001;PS 003.001;hotconv 1.0.70;makeotf.lib2.5.58329"
|
||||
},
|
||||
"DemiBold": {
|
||||
"glyphsIdentical": 27,
|
||||
"glyphsCompared": 27,
|
||||
"woff2Bytes": 40452,
|
||||
"sha256": "35fd72ca8d5a366a07497845f376328e887c51ea6c521025f42196a06c6dadd2",
|
||||
"version": "Version 3.001;PS 003.001;hotconv 1.0.70;makeotf.lib2.5.58329"
|
||||
},
|
||||
"Bold": {
|
||||
"glyphsIdentical": 27,
|
||||
"glyphsCompared": 27,
|
||||
"woff2Bytes": 39708,
|
||||
"sha256": "d9c32120abe0a5ea33dca70cb16083efc06671c86a9a1f781641c47a436bebe2",
|
||||
"version": "Version 3.001;PS 003.001;hotconv 1.0.70;makeotf.lib2.5.58329"
|
||||
}
|
||||
}
|
||||
|
After Width: | Height: | Size: 946 KiB |
|
After Width: | Height: | Size: 878 KiB |
@@ -0,0 +1,7 @@
|
||||
{
|
||||
"state": "off",
|
||||
"mode": "archive",
|
||||
"property": false,
|
||||
"canvas": 0,
|
||||
"models": 0
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"delayedHostCallbackMs": 1800,
|
||||
"noInitialCanvas": true,
|
||||
"noInitialModelRequests": true,
|
||||
"bootTo2d": true,
|
||||
"manualLoad": true,
|
||||
"startupOnly": true,
|
||||
"default3d": true,
|
||||
"errors": []
|
||||
}
|
||||
|
After Width: | Height: | Size: 1.0 MiB |
|
After Width: | Height: | Size: 2.3 MiB |
|
After Width: | Height: | Size: 1.4 MiB |
|
After Width: | Height: | Size: 786 KiB |
|
After Width: | Height: | Size: 904 KiB |
@@ -0,0 +1,683 @@
|
||||
{
|
||||
"before": {
|
||||
"decryption": {
|
||||
"time": -1,
|
||||
"intervals": [],
|
||||
"markers": 0,
|
||||
"point": 0,
|
||||
"label": 0,
|
||||
"labelValue": 0,
|
||||
"clarity": 0,
|
||||
"phase": "waiting"
|
||||
},
|
||||
"topLeft": [
|
||||
-1324,
|
||||
10
|
||||
],
|
||||
"topRight": [
|
||||
-964,
|
||||
-138
|
||||
],
|
||||
"labelTopLeft": [
|
||||
-1252,
|
||||
39
|
||||
],
|
||||
"labelBottomLeft": [
|
||||
-1249,
|
||||
86
|
||||
],
|
||||
"modelPosition": [
|
||||
0,
|
||||
-2.3657,
|
||||
-23.3319
|
||||
],
|
||||
"cameraPosition": [
|
||||
-82.8371,
|
||||
39.7394,
|
||||
53.2654
|
||||
],
|
||||
"fieldOfView": 4.910240400031848,
|
||||
"loaded": true,
|
||||
"drawCalls": 5,
|
||||
"superPerformance": true,
|
||||
"presentation": 1,
|
||||
"triangles": 811154,
|
||||
"archiveCount": 393,
|
||||
"archiveCandidates": 534,
|
||||
"archiveCulled": 141,
|
||||
"archiveCapacity": 576,
|
||||
"archiveCoverage": "standard",
|
||||
"returningFiles": 0,
|
||||
"selectionPhase": "settled",
|
||||
"pendingPulse": null,
|
||||
"pulses": [],
|
||||
"referenceTime": 34.2,
|
||||
"selectedSlot": 76,
|
||||
"selectedLane": 2,
|
||||
"selectedCell": {
|
||||
"lane": 2,
|
||||
"row": 12
|
||||
},
|
||||
"hoverCell": null,
|
||||
"hoverLifts": {},
|
||||
"dragTrack": null,
|
||||
"archiveMomentum": null,
|
||||
"holdingArchive": false,
|
||||
"dragProjection": {
|
||||
"lane": {
|
||||
"x": -309.9545782438803,
|
||||
"y": 132.47118532294434
|
||||
},
|
||||
"row": {
|
||||
"x": -41.73956529496259,
|
||||
"y": -10.160735053997383
|
||||
}
|
||||
},
|
||||
"dragMapping": null,
|
||||
"coordinateOrigin": {
|
||||
"lane": 0,
|
||||
"row": 0
|
||||
},
|
||||
"poolBounds": {
|
||||
"minLane": -3,
|
||||
"maxLane": 9,
|
||||
"minRow": 1,
|
||||
"maxRow": 85
|
||||
},
|
||||
"laneFocus": 2,
|
||||
"columnCamera": 0,
|
||||
"rotation": 0,
|
||||
"clearance": -3.6609709849095577,
|
||||
"canInspect": false,
|
||||
"returnPhase": "lowering",
|
||||
"extraction": 0.027,
|
||||
"appearance": 0.003,
|
||||
"cameraDetail": 0,
|
||||
"idleGain": 0.07688365361336427,
|
||||
"flatten": 0,
|
||||
"spectrumActivity": 0,
|
||||
"selectedIndexDim": 0,
|
||||
"returningIndexDims": [],
|
||||
"cameraDistance": 105.16920005611999,
|
||||
"cameraNear": 5,
|
||||
"cameraFar": 300,
|
||||
"fogNear": 110.16920005611999,
|
||||
"fogFar": 130.16920005612,
|
||||
"returningAppearance": [],
|
||||
"rail": 0,
|
||||
"threeState": "on",
|
||||
"fps": 0,
|
||||
"mode": "archive",
|
||||
"ready": true,
|
||||
"startup": "started",
|
||||
"motion": {
|
||||
"reduced": false,
|
||||
"systemReduced": false
|
||||
},
|
||||
"bootTime": null,
|
||||
"selected": "X-001",
|
||||
"saved": [],
|
||||
"audio": {
|
||||
"state": "suspended",
|
||||
"scene": "archive",
|
||||
"tracks": 0,
|
||||
"voices": 0,
|
||||
"loaded": false,
|
||||
"playedKeys": 0,
|
||||
"error": "",
|
||||
"preferences": {
|
||||
"sound": false,
|
||||
"music": false,
|
||||
"soundVolume": 0.55,
|
||||
"musicVolume": 0.5
|
||||
}
|
||||
},
|
||||
"wallpaper": {
|
||||
"properties": {
|
||||
"desktopmode": {
|
||||
"value": "workbench"
|
||||
},
|
||||
"boot": {
|
||||
"value": false
|
||||
},
|
||||
"superperformance": {
|
||||
"value": true
|
||||
},
|
||||
"screenfinish": {
|
||||
"value": false
|
||||
},
|
||||
"hudparallax": {
|
||||
"value": false
|
||||
},
|
||||
"uifrost": {
|
||||
"value": false
|
||||
},
|
||||
"sound": {
|
||||
"value": false
|
||||
},
|
||||
"music": {
|
||||
"value": false
|
||||
},
|
||||
"reduced": {
|
||||
"value": false
|
||||
}
|
||||
},
|
||||
"fps": 30,
|
||||
"paused": false
|
||||
}
|
||||
},
|
||||
"closing": {
|
||||
"decryption": {
|
||||
"time": -1,
|
||||
"intervals": [],
|
||||
"markers": 0,
|
||||
"point": 0,
|
||||
"label": 0,
|
||||
"labelValue": 0,
|
||||
"clarity": 0,
|
||||
"phase": "waiting"
|
||||
},
|
||||
"topLeft": [
|
||||
-648,
|
||||
128
|
||||
],
|
||||
"topRight": [
|
||||
-277,
|
||||
-39
|
||||
],
|
||||
"labelTopLeft": [
|
||||
-571,
|
||||
164
|
||||
],
|
||||
"labelBottomLeft": [
|
||||
-569,
|
||||
219
|
||||
],
|
||||
"modelPosition": [
|
||||
0,
|
||||
-2.2212,
|
||||
-13.3308
|
||||
],
|
||||
"cameraPosition": [
|
||||
-104.4373,
|
||||
43.6858,
|
||||
63.7474
|
||||
],
|
||||
"fieldOfView": 3.6088326240271495,
|
||||
"loaded": true,
|
||||
"drawCalls": 5,
|
||||
"superPerformance": true,
|
||||
"presentation": 0.8528181818181824,
|
||||
"triangles": 745106,
|
||||
"archiveCount": 361,
|
||||
"archiveCandidates": 502,
|
||||
"archiveCulled": 141,
|
||||
"archiveCapacity": 576,
|
||||
"archiveCoverage": "standard",
|
||||
"returningFiles": 0,
|
||||
"selectionPhase": "settled",
|
||||
"pendingPulse": null,
|
||||
"pulses": [],
|
||||
"referenceTime": 34.43,
|
||||
"selectedSlot": 76,
|
||||
"selectedLane": 2,
|
||||
"selectedCell": {
|
||||
"lane": 2,
|
||||
"row": 12
|
||||
},
|
||||
"hoverCell": null,
|
||||
"hoverLifts": {},
|
||||
"dragTrack": null,
|
||||
"archiveMomentum": null,
|
||||
"holdingArchive": false,
|
||||
"dragProjection": {
|
||||
"lane": {
|
||||
"x": -319.8093738304337,
|
||||
"y": 149.66015090177888
|
||||
},
|
||||
"row": {
|
||||
"x": -52.68551748259487,
|
||||
"y": -10.91186620286135
|
||||
}
|
||||
},
|
||||
"dragMapping": null,
|
||||
"coordinateOrigin": {
|
||||
"lane": 0,
|
||||
"row": 0
|
||||
},
|
||||
"poolBounds": {
|
||||
"minLane": -4,
|
||||
"maxLane": 9,
|
||||
"minRow": -12,
|
||||
"maxRow": 71
|
||||
},
|
||||
"laneFocus": 2,
|
||||
"columnCamera": 0,
|
||||
"rotation": 0,
|
||||
"clearance": -3.5294400512398427,
|
||||
"canInspect": false,
|
||||
"returnPhase": "lowering",
|
||||
"extraction": 0.16,
|
||||
"appearance": 0.319,
|
||||
"cameraDetail": 0,
|
||||
"idleGain": 0.23110433893351442,
|
||||
"flatten": 0,
|
||||
"spectrumActivity": 0,
|
||||
"selectedIndexDim": 0,
|
||||
"returningIndexDims": [],
|
||||
"cameraDistance": 128.84792191146238,
|
||||
"cameraNear": 5,
|
||||
"cameraFar": 300,
|
||||
"fogNear": 133.84792191146238,
|
||||
"fogFar": 153.84792191146238,
|
||||
"returningAppearance": [],
|
||||
"rail": 0,
|
||||
"threeState": "closing",
|
||||
"fps": 0,
|
||||
"mode": "archive",
|
||||
"ready": true,
|
||||
"startup": "started",
|
||||
"motion": {
|
||||
"reduced": false,
|
||||
"systemReduced": false
|
||||
},
|
||||
"bootTime": null,
|
||||
"selected": "X-001",
|
||||
"saved": [],
|
||||
"audio": {
|
||||
"state": "suspended",
|
||||
"scene": "archive",
|
||||
"tracks": 0,
|
||||
"voices": 0,
|
||||
"loaded": false,
|
||||
"playedKeys": 0,
|
||||
"error": "",
|
||||
"preferences": {
|
||||
"sound": false,
|
||||
"music": false,
|
||||
"soundVolume": 0.55,
|
||||
"musicVolume": 0.5
|
||||
}
|
||||
},
|
||||
"wallpaper": {
|
||||
"properties": {
|
||||
"desktopmode": {
|
||||
"value": "workbench"
|
||||
},
|
||||
"boot": {
|
||||
"value": false
|
||||
},
|
||||
"superperformance": {
|
||||
"value": true
|
||||
},
|
||||
"screenfinish": {
|
||||
"value": false
|
||||
},
|
||||
"hudparallax": {
|
||||
"value": false
|
||||
},
|
||||
"uifrost": {
|
||||
"value": false
|
||||
},
|
||||
"sound": {
|
||||
"value": false
|
||||
},
|
||||
"music": {
|
||||
"value": false
|
||||
},
|
||||
"reduced": {
|
||||
"value": false
|
||||
}
|
||||
},
|
||||
"fps": 30,
|
||||
"paused": false
|
||||
}
|
||||
},
|
||||
"reloading": {
|
||||
"decryption": {
|
||||
"time": -1,
|
||||
"intervals": [],
|
||||
"markers": 0,
|
||||
"point": 0,
|
||||
"label": 0,
|
||||
"labelValue": 0,
|
||||
"clarity": 0,
|
||||
"phase": "waiting"
|
||||
},
|
||||
"topLeft": [
|
||||
618,
|
||||
3230
|
||||
],
|
||||
"topRight": [
|
||||
916,
|
||||
2968
|
||||
],
|
||||
"labelTopLeft": [
|
||||
681,
|
||||
3242
|
||||
],
|
||||
"labelBottomLeft": [
|
||||
681,
|
||||
3283
|
||||
],
|
||||
"modelPosition": [
|
||||
0,
|
||||
-30.0857,
|
||||
-2.17
|
||||
],
|
||||
"cameraPosition": [
|
||||
-73.8279,
|
||||
38.0935,
|
||||
48.8936
|
||||
],
|
||||
"fieldOfView": 5.453036286150327,
|
||||
"loaded": true,
|
||||
"drawCalls": 5,
|
||||
"superPerformance": true,
|
||||
"presentation": 0.22727272727272727,
|
||||
"triangles": 22706,
|
||||
"archiveCount": 11,
|
||||
"archiveCandidates": 522,
|
||||
"archiveCulled": 511,
|
||||
"archiveCapacity": 288,
|
||||
"archiveCoverage": "standard",
|
||||
"returningFiles": 0,
|
||||
"selectionPhase": "settled",
|
||||
"pendingPulse": null,
|
||||
"pulses": [],
|
||||
"referenceTime": 34.15,
|
||||
"selectedSlot": 76,
|
||||
"selectedLane": 2,
|
||||
"selectedCell": {
|
||||
"lane": 2,
|
||||
"row": 12
|
||||
},
|
||||
"hoverCell": null,
|
||||
"hoverLifts": {},
|
||||
"dragTrack": null,
|
||||
"archiveMomentum": null,
|
||||
"holdingArchive": false,
|
||||
"dragProjection": {
|
||||
"lane": {
|
||||
"x": -255.87434055839887,
|
||||
"y": 230.79087600367637
|
||||
},
|
||||
"row": {
|
||||
"x": -44.550513365770605,
|
||||
"y": -18.217561835856078
|
||||
}
|
||||
},
|
||||
"dragMapping": null,
|
||||
"coordinateOrigin": {
|
||||
"lane": 0,
|
||||
"row": 0
|
||||
},
|
||||
"poolBounds": {
|
||||
"minLane": -3,
|
||||
"maxLane": 9,
|
||||
"minRow": -34,
|
||||
"maxRow": 50
|
||||
},
|
||||
"laneFocus": 2,
|
||||
"columnCamera": 0,
|
||||
"rotation": 0,
|
||||
"clearance": -31.377952052013175,
|
||||
"canInspect": false,
|
||||
"returnPhase": "lowering",
|
||||
"extraction": 0.008,
|
||||
"appearance": 0,
|
||||
"cameraDetail": 0,
|
||||
"idleGain": 0.03921056084767682,
|
||||
"flatten": 0,
|
||||
"spectrumActivity": 0,
|
||||
"selectedIndexDim": 0,
|
||||
"returningIndexDims": [],
|
||||
"cameraDistance": 95.36791873221328,
|
||||
"cameraNear": 5,
|
||||
"cameraFar": 300,
|
||||
"fogNear": 100.36791873221328,
|
||||
"fogFar": 120.36791873221328,
|
||||
"returningAppearance": [],
|
||||
"rail": 0,
|
||||
"threeState": "on",
|
||||
"fps": 30,
|
||||
"mode": "archive",
|
||||
"ready": true,
|
||||
"startup": "started",
|
||||
"motion": {
|
||||
"reduced": false,
|
||||
"systemReduced": false
|
||||
},
|
||||
"bootTime": null,
|
||||
"selected": "X-001",
|
||||
"saved": [],
|
||||
"audio": {
|
||||
"state": "suspended",
|
||||
"scene": "archive",
|
||||
"tracks": 0,
|
||||
"voices": 0,
|
||||
"loaded": false,
|
||||
"playedKeys": 0,
|
||||
"error": "",
|
||||
"preferences": {
|
||||
"sound": false,
|
||||
"music": false,
|
||||
"soundVolume": 0.55,
|
||||
"musicVolume": 0.5
|
||||
}
|
||||
},
|
||||
"wallpaper": {
|
||||
"properties": {
|
||||
"desktopmode": {
|
||||
"value": "workbench"
|
||||
},
|
||||
"boot": {
|
||||
"value": false
|
||||
},
|
||||
"superperformance": {
|
||||
"value": true
|
||||
},
|
||||
"screenfinish": {
|
||||
"value": false
|
||||
},
|
||||
"hudparallax": {
|
||||
"value": false
|
||||
},
|
||||
"uifrost": {
|
||||
"value": false
|
||||
},
|
||||
"sound": {
|
||||
"value": false
|
||||
},
|
||||
"music": {
|
||||
"value": false
|
||||
},
|
||||
"reduced": {
|
||||
"value": false
|
||||
},
|
||||
"customwallpaper": {
|
||||
"value": true
|
||||
},
|
||||
"customwallpaperfile": {
|
||||
"value": "data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%221600%22%20height%3D%22900%22%3E%3Crect%20width%3D%221600%22%20height%3D%22900%22%20fill%3D%22%23bfd0db%22%2F%3E%3Ccircle%20cx%3D%22900%22%20cy%3D%22380%22%20r%3D%22260%22%20fill%3D%22%23dfd5be%22%2F%3E%3Cpath%20d%3D%22M0%20790L1100%20560L1600%20730V900H0Z%22%20fill%3D%22%238da69d%22%2F%3E%3C%2Fsvg%3E"
|
||||
}
|
||||
},
|
||||
"fps": 30,
|
||||
"paused": false
|
||||
}
|
||||
},
|
||||
"after": {
|
||||
"decryption": {
|
||||
"time": 39.56,
|
||||
"intervals": [],
|
||||
"markers": 0,
|
||||
"point": 0,
|
||||
"label": 0,
|
||||
"labelValue": 1,
|
||||
"clarity": 1,
|
||||
"phase": "clear"
|
||||
},
|
||||
"topLeft": [
|
||||
127,
|
||||
238
|
||||
],
|
||||
"topRight": [
|
||||
1000,
|
||||
174
|
||||
],
|
||||
"labelTopLeft": [
|
||||
255,
|
||||
317
|
||||
],
|
||||
"labelBottomLeft": [
|
||||
257,
|
||||
399
|
||||
],
|
||||
"modelPosition": [
|
||||
0,
|
||||
1.6537,
|
||||
-2.17
|
||||
],
|
||||
"cameraPosition": [
|
||||
-20.0643,
|
||||
21.4815,
|
||||
64.8791
|
||||
],
|
||||
"fieldOfView": 4.7296934149796535,
|
||||
"loaded": true,
|
||||
"drawCalls": 43,
|
||||
"superPerformance": true,
|
||||
"presentation": 1,
|
||||
"triangles": 825178,
|
||||
"archiveCount": 160,
|
||||
"archiveCandidates": 276,
|
||||
"archiveCulled": 116,
|
||||
"archiveCapacity": 576,
|
||||
"archiveCoverage": "standard",
|
||||
"returningFiles": 0,
|
||||
"selectionPhase": "settled",
|
||||
"pendingPulse": null,
|
||||
"pulses": [],
|
||||
"referenceTime": 34.76,
|
||||
"selectedSlot": 76,
|
||||
"selectedLane": 2,
|
||||
"selectedCell": {
|
||||
"lane": 2,
|
||||
"row": 12
|
||||
},
|
||||
"hoverCell": null,
|
||||
"hoverLifts": {},
|
||||
"dragTrack": null,
|
||||
"archiveMomentum": null,
|
||||
"holdingArchive": false,
|
||||
"dragProjection": {
|
||||
"lane": {
|
||||
"x": -751.5369089431449,
|
||||
"y": 61.708452792965105
|
||||
},
|
||||
"row": {
|
||||
"x": -26.997889581692736,
|
||||
"y": -22.089203813031105
|
||||
}
|
||||
},
|
||||
"dragMapping": null,
|
||||
"coordinateOrigin": {
|
||||
"lane": 0,
|
||||
"row": 0
|
||||
},
|
||||
"poolBounds": {
|
||||
"minLane": 0,
|
||||
"maxLane": 5,
|
||||
"minRow": -26,
|
||||
"maxRow": 52
|
||||
},
|
||||
"laneFocus": 2,
|
||||
"columnCamera": 0,
|
||||
"rotation": 0,
|
||||
"clearance": 0.3635096763018444,
|
||||
"canInspect": true,
|
||||
"returnPhase": "lowering",
|
||||
"extraction": 4.05,
|
||||
"appearance": 1,
|
||||
"cameraDetail": 1,
|
||||
"idleGain": 0,
|
||||
"flatten": 0,
|
||||
"spectrumActivity": 0,
|
||||
"selectedIndexDim": 0,
|
||||
"returningIndexDims": [],
|
||||
"cameraDistance": 72.20515830620151,
|
||||
"cameraNear": 5,
|
||||
"cameraFar": 300,
|
||||
"fogNear": 71.20515830811468,
|
||||
"fogFar": 84.20515831034672,
|
||||
"returningAppearance": [],
|
||||
"rail": 0,
|
||||
"threeState": "on",
|
||||
"fps": 7,
|
||||
"mode": "detail",
|
||||
"ready": true,
|
||||
"startup": "started",
|
||||
"motion": {
|
||||
"reduced": true,
|
||||
"systemReduced": false
|
||||
},
|
||||
"bootTime": null,
|
||||
"selected": "X-001",
|
||||
"saved": [],
|
||||
"audio": {
|
||||
"state": "suspended",
|
||||
"scene": "detail",
|
||||
"tracks": 0,
|
||||
"voices": 0,
|
||||
"loaded": false,
|
||||
"playedKeys": 0,
|
||||
"error": "",
|
||||
"preferences": {
|
||||
"sound": false,
|
||||
"music": false,
|
||||
"soundVolume": 0.55,
|
||||
"musicVolume": 0.5
|
||||
}
|
||||
},
|
||||
"wallpaper": {
|
||||
"properties": {
|
||||
"desktopmode": {
|
||||
"value": "archive"
|
||||
},
|
||||
"boot": {
|
||||
"value": false
|
||||
},
|
||||
"superperformance": {
|
||||
"value": true
|
||||
},
|
||||
"screenfinish": {
|
||||
"value": false
|
||||
},
|
||||
"hudparallax": {
|
||||
"value": false
|
||||
},
|
||||
"uifrost": {
|
||||
"value": false
|
||||
},
|
||||
"sound": {
|
||||
"value": false
|
||||
},
|
||||
"music": {
|
||||
"value": false
|
||||
},
|
||||
"reduced": {
|
||||
"value": true
|
||||
},
|
||||
"customwallpaper": {
|
||||
"value": true
|
||||
},
|
||||
"customwallpaperfile": {
|
||||
"value": ""
|
||||
}
|
||||
},
|
||||
"fps": 30,
|
||||
"paused": false
|
||||
}
|
||||
},
|
||||
"errors": []
|
||||
}
|
||||
|
After Width: | Height: | Size: 2.4 MiB |
|
After Width: | Height: | Size: 2.4 MiB |
|
After Width: | Height: | Size: 2.7 MiB |
|
After Width: | Height: | Size: 2.6 MiB |
|
After Width: | Height: | Size: 2.3 MiB |
@@ -0,0 +1,407 @@
|
||||
[
|
||||
{
|
||||
"width": 1920,
|
||||
"height": 1080,
|
||||
"depth": 0,
|
||||
"bottom": 60,
|
||||
"upperShift": -60,
|
||||
"lowerShift": -60,
|
||||
"middleShift": 0
|
||||
},
|
||||
{
|
||||
"width": 1920,
|
||||
"height": 1080,
|
||||
"depth": 0,
|
||||
"bottom": 192,
|
||||
"upperShift": -192,
|
||||
"lowerShift": -192,
|
||||
"middleShift": 0
|
||||
},
|
||||
{
|
||||
"width": 1920,
|
||||
"height": 1080,
|
||||
"depth": 0,
|
||||
"bottom": 300,
|
||||
"upperShift": -300,
|
||||
"lowerShift": -300,
|
||||
"middleShift": 0
|
||||
},
|
||||
{
|
||||
"width": 1920,
|
||||
"height": 1080,
|
||||
"depth": 0,
|
||||
"bottom": -80,
|
||||
"upperShift": 80,
|
||||
"lowerShift": 80,
|
||||
"middleShift": 0
|
||||
},
|
||||
{
|
||||
"width": 1920,
|
||||
"height": 1080,
|
||||
"depth": 0,
|
||||
"bottom": 0,
|
||||
"upperShift": 0,
|
||||
"lowerShift": 0,
|
||||
"middleShift": 0
|
||||
},
|
||||
{
|
||||
"width": 1920,
|
||||
"height": 1080,
|
||||
"depth": 20,
|
||||
"bottom": 60,
|
||||
"upperShift": -60,
|
||||
"lowerShift": -60,
|
||||
"middleShift": 0
|
||||
},
|
||||
{
|
||||
"width": 1920,
|
||||
"height": 1080,
|
||||
"depth": 20,
|
||||
"bottom": 192,
|
||||
"upperShift": -192,
|
||||
"lowerShift": -192,
|
||||
"middleShift": 0
|
||||
},
|
||||
{
|
||||
"width": 1920,
|
||||
"height": 1080,
|
||||
"depth": 20,
|
||||
"bottom": 300,
|
||||
"upperShift": -300,
|
||||
"lowerShift": -300,
|
||||
"middleShift": 0
|
||||
},
|
||||
{
|
||||
"width": 1920,
|
||||
"height": 1080,
|
||||
"depth": 20,
|
||||
"bottom": -80,
|
||||
"upperShift": 80,
|
||||
"lowerShift": 80,
|
||||
"middleShift": 0
|
||||
},
|
||||
{
|
||||
"width": 1920,
|
||||
"height": 1080,
|
||||
"depth": 20,
|
||||
"bottom": 0,
|
||||
"upperShift": 0,
|
||||
"lowerShift": 0,
|
||||
"middleShift": 0
|
||||
},
|
||||
{
|
||||
"width": 1920,
|
||||
"height": 1080,
|
||||
"depth": 80,
|
||||
"bottom": 60,
|
||||
"upperShift": -60,
|
||||
"lowerShift": -60,
|
||||
"middleShift": 0
|
||||
},
|
||||
{
|
||||
"width": 1920,
|
||||
"height": 1080,
|
||||
"depth": 80,
|
||||
"bottom": 192,
|
||||
"upperShift": -192,
|
||||
"lowerShift": -192,
|
||||
"middleShift": 0
|
||||
},
|
||||
{
|
||||
"width": 1920,
|
||||
"height": 1080,
|
||||
"depth": 80,
|
||||
"bottom": 300,
|
||||
"upperShift": -300,
|
||||
"lowerShift": -300,
|
||||
"middleShift": 0
|
||||
},
|
||||
{
|
||||
"width": 1920,
|
||||
"height": 1080,
|
||||
"depth": 80,
|
||||
"bottom": -80,
|
||||
"upperShift": 80,
|
||||
"lowerShift": 79.99993896484375,
|
||||
"middleShift": 0
|
||||
},
|
||||
{
|
||||
"width": 1920,
|
||||
"height": 1080,
|
||||
"depth": 80,
|
||||
"bottom": 0,
|
||||
"upperShift": 0,
|
||||
"lowerShift": 0,
|
||||
"middleShift": 0
|
||||
},
|
||||
{
|
||||
"width": 2560,
|
||||
"height": 1440,
|
||||
"depth": 0,
|
||||
"bottom": 60,
|
||||
"upperShift": -60,
|
||||
"lowerShift": -60,
|
||||
"middleShift": 0
|
||||
},
|
||||
{
|
||||
"width": 2560,
|
||||
"height": 1440,
|
||||
"depth": 0,
|
||||
"bottom": 192,
|
||||
"upperShift": -192,
|
||||
"lowerShift": -192,
|
||||
"middleShift": 0
|
||||
},
|
||||
{
|
||||
"width": 2560,
|
||||
"height": 1440,
|
||||
"depth": 0,
|
||||
"bottom": 300,
|
||||
"upperShift": -300,
|
||||
"lowerShift": -300,
|
||||
"middleShift": 0
|
||||
},
|
||||
{
|
||||
"width": 2560,
|
||||
"height": 1440,
|
||||
"depth": 0,
|
||||
"bottom": -80,
|
||||
"upperShift": 80,
|
||||
"lowerShift": 80,
|
||||
"middleShift": 0
|
||||
},
|
||||
{
|
||||
"width": 2560,
|
||||
"height": 1440,
|
||||
"depth": 0,
|
||||
"bottom": 0,
|
||||
"upperShift": 0,
|
||||
"lowerShift": 0,
|
||||
"middleShift": 0
|
||||
},
|
||||
{
|
||||
"width": 2560,
|
||||
"height": 1440,
|
||||
"depth": 20,
|
||||
"bottom": 60,
|
||||
"upperShift": -60,
|
||||
"lowerShift": -60,
|
||||
"middleShift": 0
|
||||
},
|
||||
{
|
||||
"width": 2560,
|
||||
"height": 1440,
|
||||
"depth": 20,
|
||||
"bottom": 192,
|
||||
"upperShift": -192,
|
||||
"lowerShift": -192,
|
||||
"middleShift": 0
|
||||
},
|
||||
{
|
||||
"width": 2560,
|
||||
"height": 1440,
|
||||
"depth": 20,
|
||||
"bottom": 300,
|
||||
"upperShift": -300,
|
||||
"lowerShift": -300,
|
||||
"middleShift": 0
|
||||
},
|
||||
{
|
||||
"width": 2560,
|
||||
"height": 1440,
|
||||
"depth": 20,
|
||||
"bottom": -80,
|
||||
"upperShift": 80,
|
||||
"lowerShift": 80,
|
||||
"middleShift": 0
|
||||
},
|
||||
{
|
||||
"width": 2560,
|
||||
"height": 1440,
|
||||
"depth": 20,
|
||||
"bottom": 0,
|
||||
"upperShift": 0,
|
||||
"lowerShift": 0,
|
||||
"middleShift": 0
|
||||
},
|
||||
{
|
||||
"width": 2560,
|
||||
"height": 1440,
|
||||
"depth": 80,
|
||||
"bottom": 60,
|
||||
"upperShift": -60,
|
||||
"lowerShift": -60,
|
||||
"middleShift": 0
|
||||
},
|
||||
{
|
||||
"width": 2560,
|
||||
"height": 1440,
|
||||
"depth": 80,
|
||||
"bottom": 192,
|
||||
"upperShift": -192.00006103515625,
|
||||
"lowerShift": -192,
|
||||
"middleShift": 0
|
||||
},
|
||||
{
|
||||
"width": 2560,
|
||||
"height": 1440,
|
||||
"depth": 80,
|
||||
"bottom": 300,
|
||||
"upperShift": -300.00006103515625,
|
||||
"lowerShift": -300,
|
||||
"middleShift": 0
|
||||
},
|
||||
{
|
||||
"width": 2560,
|
||||
"height": 1440,
|
||||
"depth": 80,
|
||||
"bottom": -80,
|
||||
"upperShift": 80,
|
||||
"lowerShift": 80,
|
||||
"middleShift": 0
|
||||
},
|
||||
{
|
||||
"width": 2560,
|
||||
"height": 1440,
|
||||
"depth": 80,
|
||||
"bottom": 0,
|
||||
"upperShift": 0,
|
||||
"lowerShift": 0,
|
||||
"middleShift": 0
|
||||
},
|
||||
{
|
||||
"width": 1600,
|
||||
"height": 900,
|
||||
"depth": 0,
|
||||
"bottom": 60,
|
||||
"upperShift": -60,
|
||||
"lowerShift": -60,
|
||||
"middleShift": 0
|
||||
},
|
||||
{
|
||||
"width": 1600,
|
||||
"height": 900,
|
||||
"depth": 0,
|
||||
"bottom": 192,
|
||||
"upperShift": -192.00006103515625,
|
||||
"lowerShift": -192.00006103515625,
|
||||
"middleShift": 0
|
||||
},
|
||||
{
|
||||
"width": 1600,
|
||||
"height": 900,
|
||||
"depth": 0,
|
||||
"bottom": 300,
|
||||
"upperShift": -300,
|
||||
"lowerShift": -300,
|
||||
"middleShift": 0
|
||||
},
|
||||
{
|
||||
"width": 1600,
|
||||
"height": 900,
|
||||
"depth": 0,
|
||||
"bottom": -80,
|
||||
"upperShift": 80,
|
||||
"lowerShift": 80,
|
||||
"middleShift": 0
|
||||
},
|
||||
{
|
||||
"width": 1600,
|
||||
"height": 900,
|
||||
"depth": 0,
|
||||
"bottom": 0,
|
||||
"upperShift": 0,
|
||||
"lowerShift": 0,
|
||||
"middleShift": 0
|
||||
},
|
||||
{
|
||||
"width": 1600,
|
||||
"height": 900,
|
||||
"depth": 20,
|
||||
"bottom": 60,
|
||||
"upperShift": -60,
|
||||
"lowerShift": -60,
|
||||
"middleShift": 0
|
||||
},
|
||||
{
|
||||
"width": 1600,
|
||||
"height": 900,
|
||||
"depth": 20,
|
||||
"bottom": 192,
|
||||
"upperShift": -192,
|
||||
"lowerShift": -192,
|
||||
"middleShift": 0
|
||||
},
|
||||
{
|
||||
"width": 1600,
|
||||
"height": 900,
|
||||
"depth": 20,
|
||||
"bottom": 300,
|
||||
"upperShift": -299.9999694824219,
|
||||
"lowerShift": -300,
|
||||
"middleShift": 0
|
||||
},
|
||||
{
|
||||
"width": 1600,
|
||||
"height": 900,
|
||||
"depth": 20,
|
||||
"bottom": -80,
|
||||
"upperShift": 80,
|
||||
"lowerShift": 80,
|
||||
"middleShift": 0
|
||||
},
|
||||
{
|
||||
"width": 1600,
|
||||
"height": 900,
|
||||
"depth": 20,
|
||||
"bottom": 0,
|
||||
"upperShift": 0,
|
||||
"lowerShift": 0,
|
||||
"middleShift": 0
|
||||
},
|
||||
{
|
||||
"width": 1600,
|
||||
"height": 900,
|
||||
"depth": 80,
|
||||
"bottom": 60,
|
||||
"upperShift": -60,
|
||||
"lowerShift": -60,
|
||||
"middleShift": 0
|
||||
},
|
||||
{
|
||||
"width": 1600,
|
||||
"height": 900,
|
||||
"depth": 80,
|
||||
"bottom": 192,
|
||||
"upperShift": -192,
|
||||
"lowerShift": -192,
|
||||
"middleShift": 0
|
||||
},
|
||||
{
|
||||
"width": 1600,
|
||||
"height": 900,
|
||||
"depth": 80,
|
||||
"bottom": 300,
|
||||
"upperShift": -299.9999694824219,
|
||||
"lowerShift": -300,
|
||||
"middleShift": 0
|
||||
},
|
||||
{
|
||||
"width": 1600,
|
||||
"height": 900,
|
||||
"depth": 80,
|
||||
"bottom": -80,
|
||||
"upperShift": 80,
|
||||
"lowerShift": 79.99993896484375,
|
||||
"middleShift": 0
|
||||
},
|
||||
{
|
||||
"width": 1600,
|
||||
"height": 900,
|
||||
"depth": 80,
|
||||
"bottom": 0,
|
||||
"upperShift": 0,
|
||||
"lowerShift": 0,
|
||||
"middleShift": 0
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,7 @@
|
||||
{
|
||||
"ok": true,
|
||||
"raw": "E%3A/AIProject/RhineLabUI/reference/extracted-3088099655/wallpaper-2.jpg",
|
||||
"url": "file:///E:/AIProject/RhineLabUI/reference/extracted-3088099655/wallpaper-2.jpg",
|
||||
"width": 3200,
|
||||
"height": 2000
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"raw": "E:/AIProject/RhineLabUI/reference/extracted-3088099655/wallpaper-2.jpg",
|
||||
"encoded": "E%3A/AIProject/RhineLabUI/reference/extracted-3088099655/wallpaper-2.jpg",
|
||||
"url": "file:///E:/AIProject/RhineLabUI/reference/extracted-3088099655/wallpaper-2.jpg",
|
||||
"dimensions": [
|
||||
3200,
|
||||
2000
|
||||
],
|
||||
"samePathRetry": true
|
||||
}
|
||||
@@ -0,0 +1,38 @@
|
||||
[
|
||||
{
|
||||
"dark": false,
|
||||
"value": 100,
|
||||
"opacity": "1",
|
||||
"size": "100% 100%, 100% 100%, 100% 100%"
|
||||
},
|
||||
{
|
||||
"dark": false,
|
||||
"value": 50,
|
||||
"opacity": "1",
|
||||
"size": "100% 50%, 100% 50%, 100% 100%"
|
||||
},
|
||||
{
|
||||
"dark": false,
|
||||
"value": 0,
|
||||
"opacity": "0",
|
||||
"size": "100% 0%, 100% 0%, 100% 100%"
|
||||
},
|
||||
{
|
||||
"dark": true,
|
||||
"value": 100,
|
||||
"opacity": "1",
|
||||
"size": "100% 100%"
|
||||
},
|
||||
{
|
||||
"dark": true,
|
||||
"value": 50,
|
||||
"opacity": "1",
|
||||
"size": "100% 50%"
|
||||
},
|
||||
{
|
||||
"dark": true,
|
||||
"value": 0,
|
||||
"opacity": "0",
|
||||
"size": "100% 0%"
|
||||
}
|
||||
]
|
||||
|
After Width: | Height: | Size: 490 KiB |
|
After Width: | Height: | Size: 879 KiB |
|
After Width: | Height: | Size: 226 KiB |
@@ -0,0 +1,161 @@
|
||||
{
|
||||
"fast": {
|
||||
"decryption": {
|
||||
"time": -1,
|
||||
"intervals": [],
|
||||
"markers": 0,
|
||||
"point": 0,
|
||||
"label": 0,
|
||||
"labelValue": 0,
|
||||
"clarity": 0,
|
||||
"phase": "waiting"
|
||||
},
|
||||
"topLeft": [
|
||||
516,
|
||||
280
|
||||
],
|
||||
"topRight": [
|
||||
898,
|
||||
87
|
||||
],
|
||||
"labelTopLeft": [
|
||||
599,
|
||||
321
|
||||
],
|
||||
"labelBottomLeft": [
|
||||
599,
|
||||
385
|
||||
],
|
||||
"modelPosition": [
|
||||
0,
|
||||
-1.9432,
|
||||
-2.1768
|
||||
],
|
||||
"cameraPosition": [
|
||||
-114.5564,
|
||||
45.5345,
|
||||
68.6579
|
||||
],
|
||||
"fieldOfView": 2.999159420495768,
|
||||
"loaded": true,
|
||||
"drawCalls": 43,
|
||||
"superPerformance": true,
|
||||
"presentation": 1,
|
||||
"triangles": 1312282,
|
||||
"archiveCount": 278,
|
||||
"archiveCandidates": 399,
|
||||
"archiveCulled": 121,
|
||||
"archiveCapacity": 576,
|
||||
"archiveCoverage": "standard",
|
||||
"returningFiles": 0,
|
||||
"selectionPhase": "settled",
|
||||
"pendingPulse": null,
|
||||
"pulses": [],
|
||||
"referenceTime": 37.07,
|
||||
"selectedSlot": 76,
|
||||
"selectedLane": 2,
|
||||
"selectedCell": {
|
||||
"lane": 2,
|
||||
"row": 12
|
||||
},
|
||||
"hoverCell": null,
|
||||
"hoverLifts": {},
|
||||
"dragTrack": null,
|
||||
"archiveMomentum": null,
|
||||
"holdingArchive": false,
|
||||
"dragProjection": {
|
||||
"lane": {
|
||||
"x": -329.9848645599612,
|
||||
"y": 172.94017667625525
|
||||
},
|
||||
"row": {
|
||||
"x": -63.80490046678038,
|
||||
"y": -12.386913393363914
|
||||
}
|
||||
},
|
||||
"dragMapping": null,
|
||||
"coordinateOrigin": {
|
||||
"lane": 0,
|
||||
"row": 0
|
||||
},
|
||||
"poolBounds": {
|
||||
"minLane": -4,
|
||||
"maxLane": 8,
|
||||
"minRow": -20,
|
||||
"maxRow": 51
|
||||
},
|
||||
"laneFocus": 2,
|
||||
"columnCamera": 0,
|
||||
"rotation": 0,
|
||||
"clearance": -3.2930383612627256,
|
||||
"canInspect": false,
|
||||
"returnPhase": "lowering",
|
||||
"extraction": 0.4,
|
||||
"appearance": 1,
|
||||
"cameraDetail": 0,
|
||||
"idleGain": 0.9034563460125465,
|
||||
"flatten": 0,
|
||||
"spectrumActivity": 0,
|
||||
"selectedIndexDim": 0,
|
||||
"returningIndexDims": [],
|
||||
"cameraDistance": 139.99997971447004,
|
||||
"cameraNear": 5,
|
||||
"cameraFar": 300,
|
||||
"fogNear": 140.99997971447004,
|
||||
"fogFar": 155.99997971447004,
|
||||
"returningAppearance": [],
|
||||
"rail": 0,
|
||||
"threeState": "on",
|
||||
"fps": 166,
|
||||
"mode": "archive",
|
||||
"ready": true,
|
||||
"startup": "started",
|
||||
"motion": {
|
||||
"reduced": false,
|
||||
"systemReduced": false
|
||||
},
|
||||
"bootTime": null,
|
||||
"selected": "X-001",
|
||||
"saved": [],
|
||||
"audio": {
|
||||
"state": "running",
|
||||
"scene": "archive",
|
||||
"tracks": 3,
|
||||
"voices": 0,
|
||||
"loaded": true,
|
||||
"playedKeys": 0,
|
||||
"error": "",
|
||||
"preferences": {
|
||||
"sound": true,
|
||||
"music": true,
|
||||
"soundVolume": 0.55,
|
||||
"musicVolume": 0.5
|
||||
}
|
||||
},
|
||||
"wallpaper": null
|
||||
},
|
||||
"viewports": [
|
||||
{
|
||||
"width": 2560,
|
||||
"height": 1080,
|
||||
"overflow": false
|
||||
},
|
||||
{
|
||||
"width": 390,
|
||||
"height": 844,
|
||||
"overflow": false
|
||||
},
|
||||
{
|
||||
"width": 844,
|
||||
"height": 390,
|
||||
"overflow": false
|
||||
}
|
||||
],
|
||||
"pwaBuild": true,
|
||||
"viewer": true,
|
||||
"numericMotion": true,
|
||||
"restoredQuality": true,
|
||||
"persistedPerformance": true,
|
||||
"startupGesture": true,
|
||||
"errors": []
|
||||
}
|
||||
@@ -0,0 +1,190 @@
|
||||
{
|
||||
"retainedMediaNode": true,
|
||||
"retainedUnchangedReel": true,
|
||||
"clockReels": true,
|
||||
"longTitleEllipsis": true,
|
||||
"digitMotion": [
|
||||
{
|
||||
"sec": 0,
|
||||
"active": 6,
|
||||
"reels": [
|
||||
{
|
||||
"transform": "matrix(1, 0, 0, 1, 0, -48.2862)",
|
||||
"faces": "567890567890"
|
||||
},
|
||||
{
|
||||
"transform": "matrix(1, 0, 0, 1, 0, -9.65723)",
|
||||
"faces": "9090"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"sec": 1,
|
||||
"active": 3,
|
||||
"reels": [
|
||||
{
|
||||
"transform": "matrix(1, 0, 0, 1, 0, 0)",
|
||||
"faces": "0"
|
||||
},
|
||||
{
|
||||
"transform": "matrix(1, 0, 0, 1, 0, -10.2081)",
|
||||
"faces": "0101"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"sec": 2,
|
||||
"active": 3,
|
||||
"reels": [
|
||||
{
|
||||
"transform": "matrix(1, 0, 0, 1, 0, 0)",
|
||||
"faces": "0"
|
||||
},
|
||||
{
|
||||
"transform": "matrix(1, 0, 0, 1, 0, -9.94542)",
|
||||
"faces": "1212"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"sec": 3,
|
||||
"active": 3,
|
||||
"reels": [
|
||||
{
|
||||
"transform": "matrix(1, 0, 0, 1, 0, 0)",
|
||||
"faces": "0"
|
||||
},
|
||||
{
|
||||
"transform": "matrix(1, 0, 0, 1, 0, -9.65723)",
|
||||
"faces": "2323"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"sec": 4,
|
||||
"active": 3,
|
||||
"reels": [
|
||||
{
|
||||
"transform": "matrix(1, 0, 0, 1, 0, 0)",
|
||||
"faces": "0"
|
||||
},
|
||||
{
|
||||
"transform": "matrix(1, 0, 0, 1, 0, -9.94064)",
|
||||
"faces": "3434"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"sec": 5,
|
||||
"active": 3,
|
||||
"reels": [
|
||||
{
|
||||
"transform": "matrix(1, 0, 0, 1, 0, 0)",
|
||||
"faces": "0"
|
||||
},
|
||||
{
|
||||
"transform": "matrix(1, 0, 0, 1, 0, -9.94064)",
|
||||
"faces": "4545"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"sec": 6,
|
||||
"active": 3,
|
||||
"reels": [
|
||||
{
|
||||
"transform": "matrix(1, 0, 0, 1, 0, 0)",
|
||||
"faces": "0"
|
||||
},
|
||||
{
|
||||
"transform": "matrix(1, 0, 0, 1, 0, -10.2033)",
|
||||
"faces": "5656"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"sec": 7,
|
||||
"active": 3,
|
||||
"reels": [
|
||||
{
|
||||
"transform": "matrix(1, 0, 0, 1, 0, 0)",
|
||||
"faces": "0"
|
||||
},
|
||||
{
|
||||
"transform": "matrix(1, 0, 0, 1, 0, -9.94064)",
|
||||
"faces": "6767"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"sec": 8,
|
||||
"active": 5,
|
||||
"reels": [
|
||||
{
|
||||
"transform": "matrix(1, 0, 0, 1, 0, 0)",
|
||||
"faces": "0"
|
||||
},
|
||||
{
|
||||
"transform": "matrix(1, 0, 0, 1, 0, -10.2081)",
|
||||
"faces": "7878"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"sec": 9,
|
||||
"active": 5,
|
||||
"reels": [
|
||||
{
|
||||
"transform": "matrix(1, 0, 0, 1, 0, 0)",
|
||||
"faces": "0"
|
||||
},
|
||||
{
|
||||
"transform": "matrix(1, 0, 0, 1, 0, -9.65179)",
|
||||
"faces": "8989"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"sec": 10,
|
||||
"active": 7,
|
||||
"reels": [
|
||||
{
|
||||
"transform": "matrix(1, 0, 0, 1, 0, -10.2081)",
|
||||
"faces": "0101"
|
||||
},
|
||||
{
|
||||
"transform": "matrix(1, 0, 0, 1, 0, -10.2081)",
|
||||
"faces": "9090"
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"mediaMotion": [
|
||||
{
|
||||
"title": "Dive",
|
||||
"active": 24
|
||||
},
|
||||
{
|
||||
"title": "888999",
|
||||
"active": 25
|
||||
},
|
||||
{
|
||||
"title": "Wide letters WWW",
|
||||
"active": 71
|
||||
},
|
||||
{
|
||||
"title": "Thin letters iii",
|
||||
"active": 36
|
||||
},
|
||||
{
|
||||
"title": "Another Artist - Song",
|
||||
"active": 86
|
||||
}
|
||||
],
|
||||
"footerNumericReels": 3,
|
||||
"footerRunningAnimation": true,
|
||||
"footerHourCarry": true,
|
||||
"focusReels": true,
|
||||
"reducedMotion": true,
|
||||
"errors": []
|
||||
}
|
||||