- Added a new cutout tool for selecting regions in images, allowing users to choose mesh shapes based on selected areas. - Introduced depth generation capabilities for rasterized images, including normal data extraction. - Created jobs for generating depth planes and region data, enhancing the AI data generation workflow. - Developed a selection refinement process for cutout regions, improving accuracy in generated outputs. - Established a new region module for handling rasterized image regions and their associated AI generation tasks. - Enhanced node graph builders for asset generation, facilitating smoother integration of new features.
73 lines
3.8 KiB
Markdown
73 lines
3.8 KiB
Markdown
# Job 产物
|
||
|
||
Job 目录是 Server 与 Blender Operator 的交换边界。Server 写入普通图片、JSON 或 NPZ;Blender 只根据 Job 返回值读取需要的文件,并创建最终数据块。
|
||
|
||
## 产物流向
|
||
|
||
```mermaid
|
||
flowchart TD
|
||
Input["媒体输入"] --> Job["Server Job"]
|
||
Job --> Color["PNG 颜色 / Alpha"]
|
||
Job --> Field["NPZ 深度场"]
|
||
Job --> Meta["JSON bounds"]
|
||
Color --> Import["Blender response()"]
|
||
Field --> Import
|
||
Meta --> Import
|
||
Import --> Data["Image / Mesh / Material"]
|
||
```
|
||
|
||
## 正式 Job
|
||
|
||
| Job | 主要文件 | 消费方 |
|
||
| --- | --- | --- |
|
||
| `remove-background` | `image.0001.png` 起 | 替换 Image Empty 的颜色数据 |
|
||
| `upscale-image` | `upscale.0001.png` 起 | 按共享引用情况替换当前 Image Empty 的颜色数据,并沿用原 Image 命名语义 |
|
||
| `refine-image-mask` | `image.png`、`bounds.json` | Image Box / Lasso 读取细化 Alpha 与原图坐标 |
|
||
| `generate-depth-plane` | `image.0001.*`、`image_geometry.npz` | 创建颜色图、深度图、材质和 Plane |
|
||
| `generate-region-data` | 可选的 `region.png`、`region_bounds.json`、`image_geometry.npz`、`normal.png` | Blender 主线程构建 Cutout Shape 与贴图 |
|
||
|
||
两个几何 Job 都不输出 Blender 网格。`generate-depth-plane` 生成完整图片的颜色副本与深度场;`generate-region-data` 只生成请求的 AI 产物。轮廓提取、约束三角化以及 Mesh、Material 和 Geometry Nodes 创建都在 Blender 主线程完成。
|
||
|
||
## 深度场
|
||
|
||
`image_geometry.npz` 是 Depth Plane、Depth Balloon 与 Depth Surface 共用的模型中间结果。Blender 侧统一通过 `operators/common/mesh_result.py` 的 `load_image_geometry()` 读取为 `ImageGeometry`,功能模块不分别解释字段:
|
||
|
||
| 字段 | 含义 |
|
||
| --- | --- |
|
||
| `points` | 每个模型像素的相机空间 XYZ |
|
||
| `depth` | 相机深度 |
|
||
| `intrinsics` | 像素坐标下的 3×3 相机内参 |
|
||
| `valid` | 模型与数值检查后的有效区域 |
|
||
| `calibration_valid` | 用于结果定位或深度基准的区域;Cutout 时与 Region 相交 |
|
||
| `image_size` | 深度场宽高 |
|
||
| `reference_depth` | 校准区域中的参考深度 |
|
||
|
||
Server 保留模型空间数据,不提前换算 Blender 单位。Depth Plane 在导入时根据 Image Empty 平面范围和相机内参锚定点场;Cutout 深度形状则计算 `Uniform Scale` 和局部坐标,再把相机点写入 Packed 浮点 Image 供 Geometry Nodes 采样。
|
||
|
||
## Cutout Region 产物
|
||
|
||
Blender 侧先把 `RegionPath` 栅格化为 `RegionMask`,再将 Region 裁切为带有效 Alpha 的临时 RGBA 输入。Server 不接收路径或 Mask 协议,只按需产生 AI 数据:
|
||
|
||
- 启用 Refine 时,`region.png` 保存细化后的局部 RGBA,`region_bounds.json` 保存它在输入裁切图中的范围;
|
||
- Depth Shape 使用 `image_geometry.npz`;
|
||
- Tangent 或 Object Normal 使用 `normal.png`。
|
||
|
||
Blender 将局部范围与原始 `RegionMask.bounds` 合成回源图坐标,并直接从源 Image 创建最终 Color Image。未启用 Refine、Depth 或 Normal 时不提交 Job。
|
||
|
||
## Debug 产物
|
||
|
||
Debug Job 保留模型适配层的直接输出,不执行正式功能的 Blender 导入:
|
||
|
||
| Job | 文件 |
|
||
| --- | --- |
|
||
| `debug-da3` | `prediction.npz` |
|
||
| `debug-moge2` | `prediction*.npz` |
|
||
| `debug-ben2` | `foreground*.png` |
|
||
| `debug-upscale` | `prediction*.png` |
|
||
|
||
这些文件用于验证模型、Device 和适配层。正式 Job 会继续派生 Region、Alpha、深度场或可导入图片,因此两者的文件结构有意不同。
|
||
|
||
## 单图与序列
|
||
|
||
正式颜色序列从 `image.0001.*` 开始,Upscale 使用独立的 `upscale.0001.png` 前缀。Remove Background 与 Upscale 的动画结果继续引用 Job 目录;单图结果通常在 Blender 导入后 Pack 到 `.blend`。不要清理仍被工程引用的序列目录。
|