# RHINE LAB · ANALYSIS OS **把莱茵生命的终端,做成可以操作的三维界面。** **[在线体验 → rhine.lubeiluchen.cc](https://rhine.lubeiluchen.cc/)** iPhone 可用 Safari 打开在线版,通过“分享 → 添加到主屏幕”安装;从主屏幕图标进入可使用独立窗口。首次联网后,设置中显示“离线资源已就绪”即可离线浏览档案和模型。支持桌面不同比例、手机横竖屏和触摸操作。[安装与更新说明](docs/PWA.md) ![莱茵生命终端:由透明档案盒构成的三维阵列](docs/media/archive.jpg) 这是对《明日方舟》特别映像「莱茵生命:访问」终端界面的非官方复刻。从白底开场进入五列循环档案阵列,抽取一份档案,等待玻璃与正文解密,再进入独立查看器观察内部结构。 项目以原 PV 的 **5–40 秒**为主要视觉与动效参考,实际开场从 **6.76 秒的白色画面**开始;内部结构另参考约 **41 秒及 46–51 秒**的正面与多角度画面。检索、收藏、正文阅读、结构拆解与声音设置是可操作的扩展功能。 代码由 GPT-6 Astra 协助完成,模型通过 Blender MCP 制作。界面采用 **TypeScript + Three.js + Vite**,运行时实时渲染三维模型,开场由 DOM / SVG 与场景时间轴驱动。 [快速运行](#快速运行) · [界面与动效](#界面与动效) · [操作说明](#操作说明) · [源码与 Blender 工程下载](https://pan.quark.cn/s/762d9ee9dfc3) · [参考原 PV](https://www.bilibili.com/video/BV1rr4y1b7sz/) ## Wallpaper Engine 壁纸与独立仓库 壁纸版已从本项目拆分为独立公共仓库,后续功能在 **[RhineLabWallpaper](https://github.com/LBEILC/RhineLabWallpaper)** 的 `main` 分支开发。本仓库继续维护网页版本;[原壁纸分支 codex/wallpaper-engine](https://github.com/LBEILC/RhineLabUI/tree/codex/wallpaper-engine) 保留迁移记录。需要最新壁纸源码,请前往独立仓库。 **[在 Steam 创意工坊订阅壁纸 → Rhine Lab · 莱茵生命交互桌面](https://steamcommunity.com/sharedfiles/filedetails/?id=3799142774)** ![Wallpaper Engine 工作台预览](wallpaper/preview.gif) - **两种工作模式**:三维档案展示与桌面工作台,可显示时间日期、今日事项、日程倒计时、系统媒体信息和专注计时。 - **壁纸交互**:音乐律动、呼吸效果、波纹接力小游戏,以及亮暗配色、玻璃模糊、HUD 曲面与视差。 - **按需保留画面**:在 WE 属性中选择显示哪些组件;可关闭启动时加载 3D,播放 2D 开场后直接进入工作台,再从左下角手动载入模型。 - **自定义图片**:关闭 3D 后可显示自行选择的壁纸,支持调整上下遮罩范围,设为 0 即关闭;时钟和媒体信息复用滚动数字与文字效果。 - **宿主适配**:接入 WE 属性、音频响应、媒体信息、帧率及暂停通知,壁纸资源本地打包,壁纸构建不启用 PWA。 使用壁纸请通过上方创意工坊链接订阅,在 Wallpaper Engine 中应用并调整属性。需要自行构建时: ```sh git clone https://github.com/LBEILC/RhineLabWallpaper.git cd RhineLabWallpaper npm ci npm run build:wallpaper ``` 输出目录为 `release/wallpaper`,在 Wallpaper Engine 编辑器中打开其中的 `index.html`。系统媒体信息取决于播放器支持及 WE 媒体集成设置。更多细节见 [壁纸使用与开发说明](docs/WALLPAPER-ENGINE.md) 和 [创意工坊发布说明](docs/WORKSHOP-PUBLISH.md)。 以下为项目共用的网页与三维档案功能介绍。 ## 新版效果 - **亮暗配色**:设置中切换,卡片依次变色,详情与独立查看器同步适配。 - **自适应阵列**:按实际镜头与屏幕范围布置、裁剪档案,改善宽屏边角露出尽头;开场铺满实际视口。 - **超级性能模式**:设置中独立开启,降低三维渲染负担并保留动效,关闭恢复之前的画质。 - **数字时钟**:页脚时、分、秒独立滚动,修复变换布局下部分数字动画中断。 整合范围与验证见 [主分支整合记录](verification/WEB-INTEGRATION.md)。 - **模型与正文同步解密**:对角解密线合拢、保持并收束,盖板自上而下由磨砂变清晰;右侧文档的遮挡条随之退开,露出标题、资料字段与正文。 - **可看清的双环内构**:双环、连接带与白色/橙色部件封装在盖板与基板之间。顶边黄色方块、两处螺丝和盖板后的刻线补全了外壳细节。 - **清晰/磨砂切换**:独立查看器可以随时改变玻璃状态,保留当前视角和拆解位置;支持平滑缩放、平移及复位。 - **滚动文字与编号**:档案标题、分类、权限标签及编号连续滚动,快速输入衔接最新选择。 - **重新校准的开场**:逐字输入、圆环绕行、连续 Logo 笔画、身份验证和欢迎转场,按原片逐帧修订轨迹与节奏。 - **声音与画质设置**:玻璃交互音、系统电子音与三轨循环配乐;音效和音乐可独立开关、调节音量。画质提供四档预设及精细设置。 ## 界面与动效 以下截图与动图于 **2026-09-09** 重新采集,均来自当前版本的实际浏览器运行。截图为 **1600 × 900**,GIF 为 **8–12 fps**、原速播放;压缩后的帧率与颜色不代表实时渲染质量。采集版本与复现步骤见 [素材说明](docs/media/README.md)。 ### 抽取、解密与阅读 档案竖直升起,镜头靠近并转向详情构图。解密时玻璃与文档一起揭示;完成后可阅读概述、研究记录及访问日志,也可以收藏或导出 UTF-8 文本。 ![档案抽取与同步解密:对角线收束,玻璃从上向下变清晰,正文遮挡退开](docs/media/decryption.gif) | 解密完成 · 清晰内构与档案概述 | 研究记录 · 正文阅读 | | --- | --- | | [![解密后的档案:左侧可见双环内构,右侧显示机构资料](docs/media/detail.jpg)](docs/media/detail.jpg) | [![档案研究记录页签](docs/media/research.jpg)](docs/media/research.jpg) | ### 清晰内构与磨砂玻璃 在 360° 查看器中比较两种玻璃状态。切换不会重置镜头或拆解状态,返回详情后仍保留已解密状态。 | 清晰 · 双环与连接带 | 磨砂 · 轻柔折射 | | --- | --- | | [![清晰玻璃下的档案内部结构](docs/media/viewer-clear.jpg)](docs/media/viewer-clear.jpg) | [![相同视角下的磨砂玻璃](docs/media/viewer-frosted.jpg)](docs/media/viewer-frosted.jpg) |
查看动图:清晰/磨砂连续切换 ![玻璃由清晰过渡到磨砂,再恢复清晰](docs/media/glass-motion.gif)
### 360° 旋转、拆解与重组 紧固件、透明盖板、折射环组、光学核心、信息基板、背板与框架按六组展开。拆解后仍可旋转、平移和缩放,观察部件之间的关系,再一键重组。 [![新版档案模型:六组结构分层展开](docs/media/assembly.jpg)](docs/media/assembly.jpg)
查看动图:模型拆解、旋转与重组 ![操作动图:档案盒从完整状态拆开,旋转观察后连续重组](docs/media/assembly-motion.gif)
### 循环阵列与滚动标题 五类、每类八份,共 **40 份档案**。上下翻阅、左右切列均可持续循环;切回某列时保留上次选择。选中抬起与阵列波浪同时开始,标题和编号跟随输入滚动;返回阵列时,档案先转正再下降。
查看动图:切列、翻阅与连续文字滚动 ![循环切换档案,标题、编号、分类及刻度同步更新](docs/media/browse.gif)
### 白底开场 从终端逐字输入到圆环、Logo 绘制,再进入身份接入与权限验证。可以重播,也可以跳过开场直接进入阵列。 [![白底开场中的莱茵生命标志与身份接入文字](docs/media/boot.jpg)](docs/media/boot.jpg)
查看动图:新版开场片段 ![新版白底开场:逐字输入、圆环和连续标志绘制、身份验证与欢迎转场](docs/media/boot-motion.gif)
### 检索、声音与画质 检索支持编号、标题、英文名、科室、相关人物与分类筛选。收藏和设置保存在当前浏览器中。音效区分档案的玻璃碰触与系统操作的电子反馈,背景配乐随开场、阵列、详情和查看器调整三轨比例。 | 档案索引 · 关键词与分类筛选 | 系统设置 · 声音与画质 | | --- | --- | | [![输入莱茵关键词后的档案检索结果](docs/media/search.jpg)](docs/media/search.jpg) | [![独立音效和音乐音量、减少动态效果与画质预设](docs/media/settings.jpg)](docs/media/settings.jpg) | GIF 不含声音。可单独[试听原创配乐「观测室」](public/audio/observatory-preview.mp3),完整声音效果请启动应用体验。浏览器可能需要一次点击或按键才允许播放音频。 ## 快速运行 需要 **Node.js 22.12 或更高版本**(可使用 Node.js 24),以及支持 WebGL 2 的现代桌面浏览器。首次安装依赖需要网络;应用不需要 API Key,也不需要启动后端服务。 ### 获取项目 ```sh git clone https://github.com/LBEILC/RhineLabUI.git cd RhineLabUI ``` 也可以从 GitHub 的 **Code → Download ZIP** 下载当前源码,或获取[夸克项目包](https://pan.quark.cn/s/762d9ee9dfc3)。夸克包是 **2026-09-08 的打包快照**,包含源码、运行模型与 Blender 源工程;后续更新以本仓库为准。 ### 安装并启动 ```sh npm ci npm run dev ``` 打开终端显示的地址,通常为 `http://127.0.0.1:5173/`。如果端口被占用,以终端实际输出为准。 Windows 用户安装 Node.js 并解压项目后,也可以双击 [`启动终端.cmd`](启动终端.cmd):首次运行会安装依赖,然后启动本地服务并打开浏览器。 ### 构建与预览 ```sh npm run build npm run preview ``` 生产文件输出到 `dist/`,可以交给静态 HTTP 服务托管。请通过服务地址访问,不要直接双击 `dist/index.html`。 ## 操作说明 ### 终端与档案 | 操作 | 效果 | | --- | --- | | 开场中按 `Enter` / `Esc`,或点击 `ENTER SYSTEM` | 资源就绪后进入交互阵列 | | `←` / `→` | 切换档案类别,首尾循环 | | `↑` / `↓` | 翻阅同类档案,首尾循环 | | `Enter`、`ACCESS FILE` 或文件编号 | 读取当前档案 | | 在详情模型上拖动 | 档案获得净空后,旋转观察 | | `/` 或 `ARCHIVE INDEX` | 打开检索,可搜索编号、标题、英文名、科室、负责人和分类 | | `SAVE ARCHIVE` / `SAVED` | 收藏当前档案 / 查看收藏 | | `EXPORT` | 下载当前档案的文本文件 | | `Esc` | 关闭当前弹窗,或从详情返回阵列 | ### 独立模型查看器 在详情页点击 **「360° 查看文档模型」** 进入。 | 操作 | 效果 | | --- | --- | | 鼠标拖动 | 环绕旋转模型 | | 滚轮、`+` / `−` | 平滑缩放 | | 方向键 | 平移观察位置 | | 「复位视角」或 `Home` | 平滑恢复初始观察位置 | | 「清晰」 / 「磨砂」 | 切换玻璃状态,保留视角和拆解位置 | | 「拆解档案」 / 「一键重组」 | 展开六组部件 / 连续收回 | | `Esc` 或「返回档案」 | 关闭查看器,返回原档案 | ### 显示与偏好 布局以 **1920 × 1080** 为基准等比例适应窗口,主要面向桌面与横向屏幕。设置页提供音效与背景音乐的独立开关、独立音量,以及减少动态效果、画质、全屏和重新播放开场。收藏和偏好保存在当前浏览器中。 首次载入需要加载字体与 GLB 模型。项目保留了四份官方 MiSans WOFF2,合计约 19.7 MB,按实际使用加载。画质预设为**性能、原始、高、极高**,默认使用原始;精细设置可调整渲染比例、像素密度、抗锯齿、纹理过滤、透明材质分辨率、阴影、环境遮蔽及景深。运行不够流畅时可选性能档;需要简化镜头、文字与揭示动画时,可启用减少动态效果。 ## 工程结构 | 目录或文件 | 内容 | | --- | --- | | [`src/main.ts`](src/main.ts) | 页面状态、档案阅读、检索、收藏与快捷键 | | [`src/boot.ts`](src/boot.ts)、[`src/boot-motion.ts`](src/boot-motion.ts) | 开场界面与逐帧时间轴 | | [`src/scene.ts`](src/scene.ts)、[`src/archive-loop.ts`](src/archive-loop.ts) | Three.js 场景、循环阵列、抽取与归位 | | [`src/model-viewer.ts`](src/model-viewer.ts) | 独立模型查看器与拆解动画 | | [`src/decryption.ts`](src/decryption.ts)、[`src/document-decryption.ts`](src/document-decryption.ts) | 模型解密轨迹与正文同步揭示 | | [`src/audio.ts`](src/audio.ts)、[`public/audio/`](public/audio/) | 交互音效、三轨配乐与音源记录 | | [`src/render-quality.ts`](src/render-quality.ts)、[`src/quality-renderer.ts`](src/quality-renderer.ts) | 画质预设与渲染管线 | | [`content/archives.json`](content/archives.json) | 页面与下载共用的五类、40 份档案数据 | | [`src/data.ts`](src/data.ts) | 档案类型与阵列位置映射 | | [`public/assets/`](public/assets/) | 运行所需的 GLB 模型 | | [`public/archives/`](public/archives/) | 导出的档案文本;启动和构建前自动生成 | | [`art/`](art/) | Blender 源文件、建模与审阅脚本 | | [`scripts/`](scripts/) | 档案导出与行为检查 | | [`reference/`](reference/)、[`verification/`](verification/) | 开发对照工具与分阶段验证记录 | | [`docs/media/`](docs/media/) | README 截图与动图 | | [`DESIGN.md`](DESIGN.md) | 视觉、相机、材质与运动约束 | 原片时间轴使用 160 个阵列位置;交互模式使用固定的可见窗口与外围卡片补位,让有限的档案内容可以持续循环。 ### 修改与复核 修改档案内容从 [`content/archives.json`](content/archives.json) 入手,字段与操作步骤见 [档案修改说明](content/README.md)。`npm run dev` 与 `npm run build` 会先校验数据,再更新 `public/archives/` 中的文本导出;开发过程中修改数据后,可执行 `npm run export:archives` 同步下载文件。`npm run check:content` 检查数据规则与导出一致性。 ```sh node scripts/check-motion.mjs node scripts/check-loop.mjs node scripts/check-appearance.mjs node scripts/check-assembly.mjs node scripts/check-decryption.mjs node scripts/check-shell.mjs node scripts/check-internal-optics.mjs node scripts/check-quality.mjs ``` 这些脚本检查运动、循环位置、外观、装配结构、解密轨迹、外壳、内构与画质参数。视觉效果仍需在浏览器中实际查看,尤其是快速切换、模型归位、文档揭示及查看器进出过渡。 | 本地调试路径 | 用途 | | --- | --- | | `/?scene=archive` | 直接进入档案阵列 | | `/?scene=detail` | 直接进入档案详情 | | `/?time=28&freeze=1` | 固定在参考时间轴的指定时刻 | | `/reference/review.html`、`/reference/boot-review.html` | 原片与复刻对照工具 | | `/reference/decryption-review.html` | 玻璃解密逐帧对照 | | `/reference/document-decryption-check.html` | 正文同步解密与布局检查 | | `/reference/boot-audio.html` | 完整开场声音试听 | 原 PV 不随仓库分发。使用视频对照工具时,需要自行准备对应参考视频;正常运行应用不依赖它。 ### Blender 源工程 | 文件 | 用途 | | --- | --- | | [`art/rhine-archive.blend`](art/rhine-archive.blend) | 档案盒基础模型与审阅灯光 | | [`art/archive-assembly.blend`](art/archive-assembly.blend) | 可按六组结构拆解的模型 | | [`art/build_archive.py`](art/build_archive.py) | 生成基础模型与 GLB | | [`art/build_assembly.py`](art/build_assembly.py) | 生成拆解模型与 GLB | | [`art/internal_architecture.py`](art/internal_architecture.py) | 当前双环内构与连接带 | | [`art/shell_reference_details.py`](art/shell_reference_details.py) | 顶边方块、螺丝及盖板后刻线 | | [`art/setup_studio.py`](art/setup_studio.py) | 配置资产审阅灯光与相机 | 普通运行直接使用现有 GLB 即可,无需安装 Blender。重新建模时,可在 Blender 的脚本环境中通过 `runpy.run_path()` 执行对应脚本,或通过 Blender MCP 调用。脚本根据自身位置确定项目目录,重新生成会更新对应模型输出。 ## 参考与资源说明 参考作品为《明日方舟》特别映像「莱茵生命:访问」:[BV1rr4y1b7sz](https://www.bilibili.com/video/BV1rr4y1b7sz/)。本项目与官方制作方无隶属关系,原 PV、相关名称、标志与设定的权利归各自权利人所有。原片未展示的档案摘要、日期、研究记录等属于本项目的扩展演示内容。 模型为重新制作;实时折射、景深、灯光与局部细节和原 PV 仍有差异。身份验证画面是演示状态机,不连接真实身份或业务服务。 - **MiSans**:使用小米官方字体文件,保留[字体许可](public/fonts/MiSans-license.pdf)及字体目录内的版权说明,设置页也提供署名与许可入口。 - **Rolling Number**:用于编号和文字滚动,许可见 [`public/licenses/rolling-number.txt`](public/licenses/rolling-number.txt)。 - **声音**:三轨配乐为本项目程序编配;逐字输入使用原 PV 的三个 38ms 短音,来源与处理记录见 [音频说明](public/audio/README.md)。原片短音及其衍生片段不纳入原创配乐的 MIT 授权声明。 - **其他依赖**:各自遵循其原有许可。源码公开不改变第三方资源的权利。 源码包包含运行代码、模型、Blender 工程、说明与验证脚本,不包含依赖目录、本机缓存、原 PV 或完整录制素材。 ## 开源许可 本项目自行编写且有权授权的程序代码、建模脚本及配套技术文档采用 [MIT License](LICENSE),版权署名为 **Copyright (c) 2026 LBEILC**。你可以使用、修改、分发这些内容,也可以将其用于商业或闭源项目;分发代码或其重要部分时,须保留版权声明和许可证。软件按原样提供,不作担保,具体以许可证全文为准。 MIT 授权不覆盖第三方权利或自动覆盖仓库内全部素材: - 《明日方舟》及莱茵生命相关名称、标志、设定、原 PV 和原作视觉设计,以及它们在模型、界面、截图或演示文本中的呈现,不因本项目公开而获得额外授权。本项目无法代替相应权利人授予这些权利。 - Blender / GLB 模型、图像、动图等非代码资产未另行声明为 MIT;建模脚本采用 MIT 不表示脚本生成的原作相关视觉内容也已获授权。 - MiSans、Rolling Number 及其他第三方依赖继续遵循各自的许可证和版权声明,见上方「参考与资源说明」。 复用代码时,请根据用途处理涉及的第三方素材与标志。GitHub 当前源码包已包含本许可证;上方夸克链接为早期打包快照,未包含本次新增的项目许可证文件,最新许可说明以本仓库为准。