SPluzh/zbrush-spotlight-extractor

GitHub: SPluzh/zbrush-spotlight-extractor

一个用于从 ZBrush 专有的 .zsl Spotlight 文件中逆向解析并提取嵌入纹理、输出为标准 PNG 图像的 Python 命令行工具。

Stars: 1 | Forks: 0

# zbrush-spotlight-extractor 一个 Python 工具,用于从 ZBrush Spotlight (`.zsl`) 文件中提取嵌入的纹理,并将它们保存为标准的 PNG 图像。 ## 什么是 .zsl 文件? ZBrush Spotlight 是内置于 ZBrush 的纹理管理系统。当保存 Spotlight 会话时,ZBrush 会将所有已加载的纹理序列化为一个专有的扩展名为 `.zsl` 的二进制容器。每个纹理都以压缩的平面通道格式存储——而不是作为标准图像文件——这使得普通的图像查看器或转换器无法访问它。 **zbrush-spotlight-extractor** 对该格式进行了逆向工程,并从原始二进制数据中重建出像素级完美的 PNG 图像。 ## 功能 - 查找 `.zsl` 容器中所有嵌入的图像块 - 解压 ZBrush 的倒序 PackBits RLE 格式 - 从数据块级别的 BGRA 平面数据中重建完整的 RGBA 图像 - 从容器元数据中恢复原始源文件名 - 将 PNG 保存到输入文件旁边的 `_extracted/` 文件夹中 - 内含 Windows 拖放批处理脚本 ## 用法 ### 简单方法:预编译可执行文件 (Windows) 使用该工具最简单的方法是从 [Releases](https://github.com/SPluzh/zbrush-spotlight-extractor/releases) 页面下载独立的 **`zsltoimg.exe`**: 1. **拖放:** 只需从文件资源管理器中拖动任何 `.zsl` 文件,并将其放到 `zsltoimg.exe` 上。它会自动将所有纹理提取到源文件旁边的文件夹中,并显示完成日志。 2. **命令行:** 在终端中运行该可执行文件: zsltoimg.exe ## 工作原理 ### 1. 容器解析 `.zsl` 文件使用 LSZ (Pixologic Serialization) 二进制格式。`zslformat.find_image_blocks()` 扫描原始字节以查找类型为 `0x06` 的标记 (`\x01\x03\x80\x01\x00\x06\x00`);`zslformat.parse_block_header()` 提取宽度、高度和数据块布局。 ### 2. RLE 解压 每个压缩数据块都使用倒序的 PackBits 算法: - 控制字节 `n < 128` → 将下一个字节精确重复 **n** 次 - 控制字节 `n = 128` → 无操作,跳过 - 控制字节 `n > 128` → 按原义复制接下来的 **256 − n** 个字节 ### 3. 平面通道重组 ZBrush 以**数据块级别的平面 BGRA 格式**存储像素数据:每个数据块包含 32 768 个像素,分为四个相等的平面——蓝、绿、红、Alpha——按此顺序排列。该工具: 1. 从每个数据块中提取 B/G/R/A 切片 2. 将同一通道的所有切片连接成全局平面 3. 反转 Alpha 通道 (`255 − value`),将 ZBrush 的透明度蒙版转换为标准 PNG 不透明度 4. 将各个平面交错为 RGBA 像素数据并保存为 PNG 有关详细的技术分析,请参阅 [`zsl_specification.md`](zsl_specification.md)。 ## 许可证 MIT
标签:3D图形, Python, ZBrush, 云资产清单, 图像处理, 文件解析, 无后门, 纹理提取, 逆向工具, 逆向工程