# Job 产物 Server 把结果写入 Job 目录,返回以相对文件名为值的字典。Blender 主线程通过 JobResult 读取文件,再创建或更新 Image、Mesh、Material 和 Object。 | Job | 文件 | 消费方 | | --- | --- | --- | | `remove-background` | `image.0001.png` 起 | Image Empty 替换 | | `upscale-image` | `upscale.0001.png` 起 | 2× Image Empty 替换 | | `generate-depth-plane-geometry` | `image.0001.*`、`depth.exr`、`depth.json`、`tangent-normal.png` | Plane 对象与材质 | | `generate-cutout-artifacts` | 按请求提供深度、元数据和法线 | Cutout 对象与材质 | ## 深度与法线协议 | 返回字段 | 文件 | 内容 | | --- | --- | --- | | `depth` | `depth.exr` | float32 RGB 保存相机空间 XYZ,Alpha 保存 Validity | | `depth_metadata` | `depth.json` | `image_size`、3×3 `intrinsics`、`reference_depth` | | `tangent_normal` | `tangent-normal.png` | 切线空间法线 | | `object_normal` | `object-normal.png` | Cutout 原生 XY / Z 坐标的对象空间法线 | ```mermaid flowchart TD A[矩形源 RGBA] --> B[限尺寸并合成黑底模型输入] B --> C[MoGe-2 GeometryFrame] C --> D[原预测生成 Normal] C --> E{Cutout 深度?} E -- 是 --> F[按源 Alpha 延展轮廓深度] E -- 否 --> G[完整相机 Points] F --> G G --> H[depth.exr 与 depth.json] D --> I[Blender 加载并 Pack] H --> I ``` `depth_texture.py` 保存完整有限 Points;模型 Mask 转为 `0/1` Validity。参考深度取有效、有限、正深度且满足源 Alpha 条件的样本中位数:整图使用 Alpha ≥ 0.1,Cutout 使用所选 Alpha Threshold 并要求 Alpha > 0。非法字段和空参考区域抛出错误。 `common/depth.py` 加载深度并配置 Non-Color、CHANNEL_PACKED 与 Pack。Relief 和 Depth Balloon 读取 B/Z,Camera 与 Depth Solid 读取 XYZ,共用同一 EXR。 ## Selection 与颜色 Cutout 提交几何 bounds 内的原始 RGBA。Blender 在创建网格时组合源 Alpha 和 `SelectionMask`;颜色图保留矩形源 RGBA,法线可见区域取源 Alpha。AI 分析尺寸与颜色分辨率分别处理。 Remove Background、Upscale、Frame、Mask、Rectify 通过 `common/image.py` 的编辑结果入口保留源 Image 名称和共享引用语义。Plane 与 Cutout 的材质贴图使用 Color、Depth、Normal 命名函数。