- Added `ben2_onnx.py` for BEN2 ONNX inference with preprocessing. - Introduced `da3_onnx.py` for Depth Anything 3 inference, including camera projection calculations. - Created `moge_onnx.py` for MoGe-2 ONNX inference and post-processing. - Implemented shared ONNX Runtime session helpers in `onnx_runtime.py`. - Added model synchronization script `sync_models.py` for downloading and verifying ONNX models. - Developed unit tests for BEN2, Depth Anything 3, and MoGe ONNX models to ensure functionality. - Updated `vendor.lock.toml` to remove unused artifacts.
3.5 KiB
AI Service
运行架构
SnapForm 在独立的 Python 3.12 Environment 中运行常驻 HTTP Service,Blender 只通过标准库 urllib.request 提交任务,不把 AI 运行库载入 Blender Python。Service 只监听 127.0.0.1,请求使用随机 Token;同一 Storage Root 由 service.lock 保证只有一个实例。
Environment、模型和任务结果默认保存在 ~/.snapform:
~/.snapform/
├── .venv/
├── models/
├── jobs/
├── manifest.json
├── service.log
├── service.json # Service 运行时存在
└── service.lock # Service 运行时持有
不同 Blender 版本可共享此目录。也可以在 Extension Preferences 的 Storage Root 中修改位置。
ONNX-only Environment
扩展只内置对应平台的 uv 可执行文件。Install Environment 使用它创建环境并安装:
- ONNX Runtime 1.24.4;Windows 使用
onnxruntime-directml - NumPy 2.4.2、Pillow 12.1.1、OpenCV Headless 4.13.0.92、trimesh 4.11.2
- FastAPI 0.139.2、Uvicorn 0.51.0、huggingface-hub 1.4.1
运行环境不安装 PyTorch、TorchVision、xFormers,也不安装 DA3、MoGe、BEN2 或 utils3d 的 Python 源码包。模型推理和 SnapForm 所需的相机、点云、网格后处理均由 ONNX Runtime、NumPy 与内部实现完成。
Windows 当前发行环境提供 DirectML 与 CPU;Auto 优先使用 DmlExecutionProvider。显式指定不可用设备时会安全回退到 CPU。其他平台安装标准 ONNX Runtime,并按可用 provider 选择 CoreML、OpenVINO 或 CPU。
manifest.json 记录 Environment 版本、ONNX Runtime 版本、runtime variant 与设备列表。Manifest Revision 改变后需要重新执行 Install Environment。
模型
所有正式功能都使用 ONNX:
- MoGe-2 ViT-S、ViT-B、ViT-L Normal
- DA3 Small、DA3 Base
- BEN2 Base
首次安装自动下载 MoGe-2 ViT-S Normal 与 FP16 BEN2 Base,其他模型在 Models panel 按需下载。模型按 Hugging Face 仓库末段名称保存在 ~/.snapform/models/,并保留仓库内部结构。下载顺序为 Hugging Face,然后回退到 https://models.omoolab.xyz/<repository-name>/<relative-path>;R2 文件会校验大小与 SHA-256。可用 HF_ENDPOINT 指定 Hugging Face 镜像。
DA3 ONNX 使用模型的 camera decoder 恢复外参与内参;旧版 Use Ray Pose 参数只为任务协议兼容保留,不参与 ONNX 推理。MoGe-2 的 metric depth、normal、mask、normalized intrinsics,以及 BEN2 的 Alpha,均在 NumPy 后处理中恢复。
安装网络与镜像
安装器直接开始工作,不做阻塞式网络预检。依赖安装失败时会依次重试清华与阿里云 PyPI 镜像,也可用 PIP_INDEX_URL 或 Preferences 中的 PyPI Index 显式指定。Windows 系统代理会注入子进程;同时支持 HTTP_PROXY、HTTPS_PROXY 与 ALL_PROXY。
GitHub 不参与用户安装流程。prepare_vendor.py 只为扩展打包准备各平台的 uv 二进制。
生命周期
扩展启用后只查找已有 Service;第一次执行 AI 操作或点击 Start 时才启动。每个 Blender 客户端每 5 秒发送心跳,正常关闭时注销。最后一个客户端离开后,Service 保留模型缓存 20 秒再退出。
Service 全局同时执行一个 AI 任务。BEN2 独立缓存,深度模型只保留最近使用的一个;切换模型时释放旧会话。取消任务不会重启 Service,ONNX Runtime 当前调用返回后在最近检查点结束。
启动与崩溃信息写入 ~/.snapform/service.log。