js360000/rcedit

GitHub: js360000/rcedit

一款基于浏览器的《瑞奇与叮当》PS4 版关卡编辑器,通过逆向工程游戏格式实现资产的解码、渲染、编辑与非破坏性写回。

Stars: 3 | Forks: 0

RCEdit — Ratchet & Clank (PS4) Web Level Editor

一款基于浏览器的《瑞奇与叮当》 (PS4, 2016) 关卡编辑器,完全基于逆向工程的游戏格式构建。
Python 工具将零售版 dump 解码为 glTF/PNG;Vite + Three.js 应用程序负责对其进行渲染、检查和编辑——并将修改写回游戏中。

Three.js Python Vite status

## 图库 | | | |:--:|:--:| | ![Veldin](https://static.pigsec.cn/wp-content/uploads/repos/cas/e3/e33e09799c931524ed1e9d7ff849062858bf9952b13b00f88415861986d96f2f.png) | ![Metropolis](https://static.pigsec.cn/wp-content/uploads/repos/cas/da/daceecd3c12d2df38507944947d4b6d516bb85412477a2fb7cc1052622658aa7.png) | | **Veldin** — 完整的美术 + 玩法层,真实天空盒 | **Metropolis (Kerwan)** — 9 万个实例,剔除后呈现可游玩的城市景观 | | ![Pokitaru](https://static.pigsec.cn/wp-content/uploads/repos/cas/7a/7aaf9010363c2c6ea67c329dbbf9a6319d08675c3d476df5e24face2c82c11f3.png) | ![PS2 Novalis](https://static.pigsec.cn/wp-content/uploads/repos/cas/51/51c7c2dd4b2252933835418457d2203008ddcb4f9d6ddad87eaa3dd89b9babb8.png) | | **Pokitaru** — 主题半透明海洋 | **PS2 · Novalis** — *2002 原版* 游戏,同样包含在文件中 | | ![Overlays](https://static.pigsec.cn/wp-content/uploads/repos/cas/46/46acf8304d80a4d4db86b5ce2f70c24ace3872c8094864ab0d68282e49f4e2ec.png) | ![Editor UI](https://static.pigsec.cn/wp-content/uploads/repos/cas/50/5003587bc48944b88aafcbd5c6a4eb2a5706f65db5e8b67f38613670b3f69b41.png) | | **语义叠加层** — 碰撞体(绿色)、按用途分类的体积、滑索样条线 | **检查器 + 设置** — 对象变量、Gizmo、质量控制 |
更多 — 解码、编辑与导入 | | | |:--:|:--:| | ![Model decode](https://static.pigsec.cn/wp-content/uploads/repos/cas/73/73c75ec6fb5961cde37908015c0dcc6aca4c252d8e52a4b544b5309e615dfc65.png) | ![Texture decode](https://static.pigsec.cn/wp-content/uploads/repos/cas/8d/8d357160fce6e4f3441a36cf3e4dcd00398e833a04845d14487a753a18108a0e.png) | | `.model` → glTF(顶点、法线、UV、LOD、193 个关节) | `.texture` → PNG(BC7/BC5,PS4 untiling,mip 流) | | ![Editing](https://static.pigsec.cn/wp-content/uploads/repos/cas/63/63f8e3dd0a8c87acdfb45584e4afed874b0f5bdf0f3e42a826f2fab634c605ba.png) | ![Import](https://static.pigsec.cn/wp-content/uploads/repos/cas/10/102351a4240f21359756bddb2d300874a6b8e92e2d8ce9a41d9e4f3cbe7a68b2.png) | | 生成并使用 Gizmo 变换任何 actor,保存至 mod overlay | 导入 OBJ/FBX — 在游戏中生成真实的 `.model` + `.texture` |
## 功能说明 - **渲染全部 29 个发布关卡** — 包含 17 个重制版星球(美术 + 玩法 + 天空盒)、Veldin 被删减的早期布局,以及内置于 PS4 文件中的 **11 个 PS2 原版**关卡 — 全部基于零售版 dump,在浏览器中以 60 fps 运行。 - **忠实还原视觉效果** — 解码模型与纹理、逐实例视锥体/距离剔除、mipmap + 各向异性过滤 + 可选的 SSAA、跟随相机的天空盒,以及语义着色(碰撞体、水域/岩浆/滑索体积、白盒网格、生成点)。 - **全面检查** — 点击任意对象即可查看其 transform、模型、材质、烘焙光照色调,以及游戏自带的带类型**变量**(板条箱螺栓数量、供应商升级标志、检查点名称、传送目标等)。 - **真实编辑** — transform gizmo、可搜索的变量编辑器、可从整个 actor 目录中进行复制/生成、带有自动纹理映射的 OBJ/FBX 导入,以及带有表面标志的**生成的 Havok 碰撞体** — 所有这些都会被写回一个非破坏性的 **mod overlay**(`toc` + `mods000`)中,游戏会像加载原生资产一样加载它。原始 dump 绝不会被修改。 一切都经过了端到端验证:编辑、生成、导入和碰撞体均通过游戏自带的 TOC 解析路径实现字节级精确的往返。 ## 快速开始 你需要自行提供游戏文件(一份解密后的零售版 PS4 dump — 即包含 `layout.csv`、`toc` 和归档文件的 `asset_archive/`)。将 `tools/rcdb.py` 中的 `DEFAULT_ROOT` 指向该目录。 ``` # Python codecs (Python 3.11+) pip install lz4 pillow texture2ddecoder numpy # 导出关卡库 -> GLBs + picker 索引 cd rcedit python -m tools.export_all editor/public/data # 运行编辑器 cd editor npm install npm run dev # http://localhost:5173 # (可选)编辑后端 — 启用 Save mod / Import / 变量 python -m tools.serve_api # http://localhost:8791 ``` **视口:** 鼠标左键旋转 · 鼠标右键平移 · 滚轮缩放 · WASDQE 飞行(Shift = 加速) · 点击选择 · **G/R/X** gizmo · **V** 复制 · **F** 聚焦。 **设置 ⚙:** 叠加层(默认关闭,可按类型开启)、mipmap、LOD/剔除、天空盒、抗锯齿 (SSAA)、绘制距离 — 所有设置均可持久化保存。 ## 工作原理 分为三层,以及一个通用容器: 1. **归档 + TOC。** 资产存放于大型归档文件中,由 zlib 压缩的 `toc`(magic 为 `AF 12 AF 77`)进行索引。dump 中的 `layout.csv` 将资产路径映射到 归档/偏移量/大小。 2. **单资产压缩。** 每个构建好的资产都是位于 `0x24` 字节头(类型哈希、解压后大小、次要大小)之后的标准 **LZ4 block**。 3. **DAT1 容器。** 每个解压后的资产 — `.level`、`.zone`、`.model`、`.texture`、`.material`、`.actor`、`.animset` — 都是一个 `1TAD` 分区容器。以 CRC32 哈希命名的分区(在 `tools/*.py` 中进行了映射)使得单一解析器即可解锁所有文件类型。 **`.level`** 是区域/范围/链接的清单;而 **`.zone`** 包含实际内容 — 模型实例(4×4 transform、模型索引、色调、逐顶点烘焙光照)、actor 放置、触发体积、脚本变量,以及路径/滑索控制点。 ### 已逆向并实现的功能 | 领域 | 状态 | |---|---| | 模型 | ✅ 顶点(int16 ÷ 定点指数)、法线、半精度浮点 UV、u16 索引、LOD 表、材质、193 个关节 | | 纹理 | ✅ BC7 / BC5 / BC1 / BC4 / RGBA8,PS4 1D-thin untiling,`.stream` 高清 mip | | 区域 | ✅ 模型实例、actor 放置、带类型的体积、路径样条线、烘焙光照色调 | | 配置数据 | ✅ 递归类型字典 (`prius`) 解析器 — 每个游戏变量均可检查并进行标量编辑 | | Havok 碰撞体 | ✅ **完整的** `hkBinaryPackfile` 解析器(字节精确往返) + 一个将真实已烘焙碰撞体重新映射到 AABB 的写入器,并带有表面标志 | | 动画集 / 影视动画 | ✅ 通过 CRC 进行片段枚举 + 基础姿势四元数 + 关键时间(逐帧曲线插值为 WIP) | | 重新打包 | ✅ 非破坏性 mod overlay(LZ4-HC → `mods000` + 修补后的 `toc`),已通过 TOC 路径验证 | | 导入 | ✅ OBJ (+MTL) & 二进制 FBX → 真实的 `.model` / RGBA8 `.texture`,已在游戏中放置并生成碰撞 | 完整的完整技术日志请见 [`docs/FORMATS.md`](docs/FORMATS.md)。 ## 仓库布局 ``` rcedit/ tools/ Python codecs & CLIs (python -m tools.) rcdb.py layout.csv index + archive reader + LZ4 decompress dat1.py DAT1 ('1TAD') container parser model.py .model decoder texture.py .texture decoder zone.py .zone decoder prius.py typed-dict (variables) parser havok.py Havok packfile reader + collision writer anim.py animset / cinematic clip decoder toc.py repack.py assetid.py archive index + mod overlay + asset-id resolution zone_edit.py spawn / clone / grow zones import_mesh.py OBJ/FBX import export_*.py model/zone/level -> glTF serve_api.py editing HTTP bridge test_*.py repack / spawn / import verification suites editor/ Vite + Three.js app ("RCEdit") src/main.js renderer, culling, gizmos, overlays, settings public/data/ exported GLBs + index.json (git-ignored) docs/ logo, screenshots, format notes ``` ## 路线图 / 已知缺漏 - 逐帧动画与影视动画曲线插值(基础姿势已解码;增量流为 WIP)。 - Materialgraph 多层混合(目前仅支持主 albedo 槽位)。 - 烘焙光照是基于实例的色调;完整的逐顶点 GI 重映射是基于实例的样本集,尚未解码。 - 铸造*全新*的资产 ID(运行时的 路径→id 哈希是 Insomniac 专有的哈希算法;新内容通过 donor-overlay 机制发布)。 - 编辑器内的 transform gizmo → mod 已连通;完整的时间轴/过场动画创作 UI 属于未来的工作。
标签:数据可视化, 逆向工具