- Created development.md for development setup and licensing information. - Added features.md detailing functionalities and usage instructions for developers and users. - Introduced index.md to serve as a navigation hub for the documentation. - Developed outputs.md to explain output formats and their specifications. - Established service.md to describe the AI Service architecture and environment setup. - Created surface.md to outline the process of converting Image Empty to perspective meshes.
8.7 KiB
功能与使用
本文档面向开发者和需要了解内部实现细节的用户,从原 README 迁移而来。普通用户请阅读项目根目录的
README.md。
SnapForm 是一套从图片快速构建空间结构的 Blender Extension。目前以
Depth Anything 3
作为首个 AI 能力,在独立 Environment 中运行 DA3,可将官方导出结果保存在独立 job 目录,
也可把 Image Empty 转换成带几何与材质置换的立体面片。MoGe-2 作为独立深度来源,保留其 metric depth、normal、mask 与 intrinsics 输出,不复用 DA3 Prediction 后处理。Debug 面板还可运行
BEN2 背景剔除功能测试。
当前功能
- 使用 Blender Extension manifest,可通过
Install from Disk安装 - 在独立 Environment 中通过常驻 Service 运行 Torch、DA3、MoGe-2 与 BEN2,避免污染 Blender Python 进程
- Service 的深度模型缓存只保留 DA3 或 MoGe-2 其中一个,切换时主动释放前一个;BEN2 使用独立缓存, 可与当前深度模型共存
- Blender 使用内置
urllib.request访问仅监听127.0.0.1的 Service;请求带随机 Token - 常驻 Service 复用 Torch、CUDA、BEN2 与最近使用的 DA3 模型,连续执行时不再重复加载
- 多个 Blender 实例自动连接同一个共享 Service;
AI Service面板显示状态、端口、客户端与模型缓存,并提供安装、启动、清理、重启和停止控制 - Environment、模型和任务结果默认保存在
~/.snapform,可由多个 Blender 版本共享 - 当前启用 DA3 Small 和 Base;Large 1.1、Giant 1.1 与 Nested Giant Large 1.1 暂停使用
- 支持 BEN2 Base 单图背景剔除测试,输出透明 PNG 与推理耗时
- 支持单张 JPG、JPEG、PNG、WEBP 图片或常见视频文件输入
- 视频按顺序截取前若干帧,可设置参与重建的最大帧数
Modelspanel 默认折叠,展开后可逐项查看和下载所有可用模型- Environment 已安装时不额外占用面板空间;模型列表每个模型只占一行
Debug默认折叠,内部的DA3、MoGe-2与BEN2也分别默认折叠- 使用一个输出类型下拉菜单和一个
Generate Output按钮 - DA3 与 MoGe-2 Debug 都先选择单一 Output Format,只显示当前格式的专属参数;GLB 与 PLY 不会在一次测试中同时生成
- Debug 的模型选项按格式过滤;PLY 只提供两个带 Gaussian head 的 Giant 模型
- Debug 与 Convert to Depth Plane 的模型选项直接显示下载状态;未下载模型带
(Missing),已下载模型保持原名 - 分别调用 DA3 的
glb、gs_ply、depth_vis和mini_npzexporter Textured Surface (GLB)直接使用 DA3 Prediction 中的深度、置信度和相机参数,把相邻像素 组成三角面并写入mesh.glb;每个输入帧生成一张独立纹理网格,不做多视图融合- Image Empty 右键菜单可直接运行 DA3,根据
mini_npz深度生成面片 - Image Empty 右键菜单可直接运行 BEN2,保留原图并换用新建的透明背景图片
- Image Empty 支持视频与序列帧输入:
Convert to Depth Plane逐帧估计深度,Remove Background逐帧抠图,入口保持不变 - 视频生成的序列帧以外部文件引用保留在 job 目录(Blender 无法整体 Pack 序列帧); Geometry Nodes 与材质 Image Texture 均可按场景帧播放序列帧
- 使用浮点深度贴图、
O DA3 Depth PlaneGeometry Nodes 和原图 Bump 构建立体面片 - 转换对话框选择推理模式、处理分辨率与背景移除;细分和置换方式在 Geometry Nodes 修改器中调整
- Debug 的 DA3 输出或 BEN2 背景剔除完成后只打开对应 job 文件夹,不修改当前场景
- 完整保留每次任务生成的所有官方文件
- 安装和模型下载使用后台子进程;推理提交给常驻 Service,状态栏实时显示阶段、百分比进度条与取消按钮
- 后台任务运行时,Install、Download 和 Export 按钮保持原位置并变灰,任务完成后恢复
使用
- 先运行
uv run python prepare_vendor.py,按vendor.lock.toml下载并校验固定版本的 第三方构建输入;再运行uv run python pack.py,分别构建windows-x64、macos-arm64、linux-x64三个平台的 Extension ZIP(如SnapForm.v0.10.12.macos-arm64.zip)。 每个包只含对应平台的 uv 二进制,并内置 DA3、BEN2 源码包。 - 在 Blender 的
Preferences > Extensions中选择Install from Disk。 - 在 Extension Preferences 中确认 Storage Root 与 Device。Device 是正式功能 (Image Empty 右键菜单)使用的推理设备,默认取本机最快的 CUDA/MPS,否则 CPU,且只列出 本机支持的设备。
- 在
AI Service点击Install Environment。首次安装会下载 Python、PyTorch、FastAPI、Uvicorn; DA3、BEN2 源码包与 uv 已内置在扩展中,安装时从 安装任务的临时目录中使用,安装结束后自动清理, 并在 Environment 安装后自动下载DA3 Small和BEN2 Base推荐模型。Environment 安装 固定显示Environment、PyTorch、AI components三个用户阶段;xFormers(macOS 跳过)、 FastAPI 等内部安装步骤合并在AI components中。耗时最长的 PyTorch 与 AI 组件占主要进度 区间。安装完成后直接写入 Environment Manifest,不再额外导入全部组件进行验证。推荐模型属于安装 后的自动步骤,不计入阶段编号;DA3 Base等其他模型可稍后在Models面板按需下载。 状态文字使用阶段/总数 阶段名 | 当前操作 | 预计剩余时间,依赖安装会结合预设耗时与实际 进度修正预期;模型下载根据字节数和速度计算剩余时间,例如Downloading DA3 Small | 14.2 MB/s | About 2 min left。重试或切换镜像时进度不会倒退。 Environment 安装后即使模型下载中断也不影响 Service 使用,可稍后在Models面板单独补下。 安装不做启动网络预检:pip 安装失败会自动依次重试清华、阿里镜像,模型下载由 worker 自行探测回退到 HF 镜像;需要手动指定镜像时可通过PIP_INDEX_URL环境变量覆盖。 - 在 3D View 按
N,打开SnapForm页签。 - 如需其他模型,展开
Modelspanel,找到模型并点击该行的Download。 - 展开默认收起的
Debug,选择Output Type和本次执行使用的模型。 - 选择一张图片或一个视频文件。视频可设置从头截取的帧数,然后点击
Generate Output。 - 测试背景剔除时,确认
Modelspanel 中的BEN2 Base已就绪,然后在Debug的BEN2区域选择单张图片并点击Remove Background。 完成后会打开 job 文件夹,其中的foreground.png带透明 Alpha;状态栏显示 BEN2 推理、模型加载与任务总耗时。当前测试固定关闭较慢的 foreground refinement。
Image Empty 去背景
- 确认
Modelspanel 中的BEN2 Base已就绪;首次安装 Environment 时会默认下载。 - 在 3D View 选中 Image Empty,右键打开
SnapForm子菜单并选择Remove Background。 - 完成后以 Fake User 保留原 Image datablock,新建并 Pack 一张透明 PNG 到当前
.blend,然后只把 当前 Empty 的data换成新图;Empty 的 Transform、显示尺寸、Offset 及其他设置保持不变。 - 新 Image 使用原图去掉格式后再追加
.foreground的名称。例如img.png生成img.foreground,img.png.001生成img.001.foreground。已有同名 datablock 时由 Blender 自动追加编号。
原图已 Pack 时会先写出临时 PNG 交给 BEN2,任务结束后删除临时输入;原 Image 仍保持 Pack
状态和原始内容。BEN2 的 foreground.png 也会保留在对应 job 目录中。
Image Empty 引用视频或序列帧时,Remove Background 直接执行,默认取 Empty 的 Image Frames
数值(未设置时为完整帧数,显式设为 1 时只处理 1 帧),起始帧跟随 Empty 的 Offset;若 Offset 加 Frames 超出视频长度,
会把窗口整体收进视频内(保证实际处理 Frames 帧数),Offset 过小时从第 1 帧开始。输出
foreground.0001.png 等透明序列帧(帧号从 0001 开始,与 Blender 场景帧一一对应),并把
源帧以 frame.0001.jpg 等命名复制到 job 目录根下供材质颜色导入。替换 Empty 的 Image 为
加载这些帧的 SEQUENCE Image,从原 Empty 的 Start 位置开始播放(Start 原样保留),
Cyclic 沿用原 Empty 的设置。序列帧无法被 Blender 整体 Pack,因此保持外部引用 job 目录;
请保留对应 job 目录,否则序列会失效。