lorenfa99/hfw-raw-mesh-point-inspector

GitHub: lorenfa99/hfw-raw-mesh-point-inspector

一款针对未知二进制网格文件的点云检视工具,帮助研究者在格式尚未完全解析的中间阶段快速验证顶点数据布局。

Stars: 0 | Forks: 0

# hfw-raw-mesh-point-inspector `hfw-raw-mesh-point-inspector` 是一个小型的取证工具包,专门用于处理未知的二进制类网格(mesh)文件, 它是基于《地平线:西之绝境》(Horizon Forbidden West,简称 HFW)/ Decima 引擎的资产研究创建的。 它非常适用于资产逆向工程中尴尬的中间阶段:你可能还不太 了解其格式,但你怀疑某些字节范围包含了位置信息。与其 等待完整的导入工具,不如使用该工具来尝试候选的记录布局,将 记录范围渲染为点云,导出仅包含顶点的 OBJ 文件,并将 OBJ 网格拆分为 连通分量以便手动检查。 该项目有意不提供任何《地平线:西之绝境》文件、Decima 引擎游戏 资产、提取的网格/纹理以及任何专有工具。演示数据均为合成的。 它不隶属于 Guerrilla、Sony、Nixxes 或任何官方的 Decima 引擎工具。 ## 为什么会有这个项目 大多数工具要么是: - 针对已知格式的完整导入器,或者 - 能够显示所有内容但在视觉上无法提供任何解释的十六进制编辑器。 这个项目介于这些极端之间。如果一个二进制数据块可能包含如下记录: ``` record 0: x y z ... other bytes ... record 1: x y z ... other bytes ... ``` 你可以尝试诸如 `f32x3@0:36` 或 `f16x3@0:32` 的布局,预览这些范围,并快速查看 这些记录究竟是构成了躯体、服装外壳、道具、地形块,还是纯粹的无用数据。 第一个现实中的目标是《地平线:西之绝境》网格流调查,但该 工作流程具有普遍适用性:任何涉及 Decima 引擎、游戏模组(modding)或含有未知顶点缓冲区的二进制资产研究 项目,都可以使用相同的点云探测方法。 ## 安装 在仓库根目录下执行: ``` python -m pip install -e ".[plot,test]" ``` `matplotlib` 仅用于生成 PNG 图表。OBJ/CSV/统计报告在没有它的情况下也能正常工作。 ## 快速演示 生成一个合成的二进制文件: ``` meshpoints demo --out-dir examples/generated ``` 扫描它: ``` meshpoints scan examples/generated/synthetic_mesh.bin ``` 在记录窗口中扫描它: ``` meshpoints sweep examples/generated/synthetic_mesh.bin ^ --layout f32x3@0:36 ^ --records-per-range 400 ^ --out-dir outputs/sweep ^ --plot-top 4 ``` 提取特定的记录范围: ``` meshpoints extract examples/generated/synthetic_mesh.bin ^ --layout f32x3@0:36 ^ --range 0..899 ^ --range 900..1499 ^ --out-dir outputs/extract ``` 将一个三角形 OBJ 拆分为连通分量: ``` meshpoints components model.obj --out-dir outputs/components --top 10 ``` 找出两个二进制版本之间发生变化的记录范围: ``` meshpoints diff before.bin after.bin --stride 36 --out-dir outputs/diff ``` 如果发生变化的记录也使用了已知的位置布局,请预览这些已更改的范围: ``` meshpoints diff before.bin after.bin ^ --layout f32x3@0:36 ^ --out-dir outputs/diff ^ --plot-top 8 ``` ## 布局语法 布局使用: ``` TYPE x COMPONENTS @ POSITION_OFFSET : RECORD_STRIDE ``` 示例: - `f32x3@0:36` = 在字节偏移量 `0` 处的三个小端序 float32 值,每 `36` 个字节为一条记录。 - `f16x3@0:32` = 在字节偏移量 `0` 处的三个小端序 float16 值,每 `32` 个字节为一条记录。 - `s16x3@8:48` = 在字节偏移量 `8` 处的三个有符号 int16 值,每 `48` 个字节为一条记录。 支持的类型包括 `f32`、`f16`、`s16` 和 `u16`。 ## 主要命令 - `scan` — 用于查看二进制文件的字节/熵窗口。 - `sweep` — 汇总固定的记录窗口,并可选择绘制最强点云候选对象的图表。 - `extract` — 将选定的记录范围导出为 OBJ/CSV/PNG。 - `diff` — 对比两个二进制版本之间变化的记录进行分组,并可选择预览已更改的范围。 - `components` — 将三角形 OBJ 拆分为连通分量。 - `demo` — 生成合成的类网格数据,作为安全的示例。 ## 符合 GitHub 规范的范围 本仓库用于通用的二进制检查工作流,包括《地平线:西之绝境》 / HFW / Decima 引擎研究。请勿提交专有的游戏资产、提取的网格、 提取的纹理、本地工具二进制文件或已打补丁的游戏文件。 请使用合成的示例、您自己的文件,或您有权共享的文件。
标签:3D网格, Python, 云资产清单, 代码示例, 数据分析, 无后门, 游戏开发, 点云, 逆向工具, 逆向工程