# 「SAM 3D Body + Blender + MiniMax H3 Ref2V」三大工具串联链路解读

> 解读时间：2026-09-27 ｜ 执行者：DSH（本机）
> 触发：用户要求了解「SAM 3D Body（ComfyUI 提取 3D 动作）→ Blender（穿透式等高难摄像机动画）→ MiniMax H3 Ref2V（3D 白模转高清成片）」这条链路
> 方法：官方文档 + 一手仓库 README 交叉核对 + **对 GPU 机本机 ComfyUI 0.37.0 做只读实测**（未安装、未跑任务）
> 配套：`57-H3白模红模素材参考调研/`（白模/红模素材能力核查、外部项目盘点）

---

## 一、一句话结论

**这条链路的分工是"白模负责确定性，H3 负责想象力"**：SAM 3D Body 把真人视频里的动作变成**可编辑的 3D 骨架/蒙皮动画**（GLB/BVH），Blender 负责把**文字描述不清的空间关系与摄像机运动**（穿透、遮挡、穿缝、精确节拍）变成看得见的时序，H3 Ref2V 再给这个粗模**换上材质、光照、氛围和同步声音**。

它解决的是 H3 最弱的一环——**摄像机与空间关系的可控性**；代价是 H3 不提供动作捕捉级保真，白模信息量不足时"写实"和"完全一致"会互相冲突。

---

## 二、三个环节各自是什么（含一手证据）

### 环节 1｜SAM 3D Body：把视频里的人变成 3D 资产

| 项 | 事实 |
|---|---|
| 出品 | Meta Superintelligence Labs，模型名 **SAM 3D Body（3DB）**，参数化表示 **MHR（Momentum Human Rig）**——**把骨架结构与表面形状解耦** |
| 能力 | 单张图 / 视频帧 → 全身 3D 人体网格（含**身体、脚、手**）；支持 2D 关键点、mask 等提示式引导 |
| ComfyUI 原生支持 | **2026-08-23** 由 Kijai 的 PR（Comfy-Org/ComfyUI **#14370**）合入**内核**，不需要自定义节点包 |
| 原生节点 | `SAM3DBody_Loader` / `SAM3DBody_Predict` / `SAM3DBody_Render` / `SAM3DBody_Smooth` / `SAM3DBody_FaceExpression`；配套 `SAM3_VideoTrack`（多人跟踪）、`RTDETR_detect`（人体检测）、`LoadMoGeModel` + `MoGeGeometryToFOV`（用 MoGe 估相机 FOV，让重建与源视频对齐更准） |
| 跨帧稳定 | 内置**时序平滑**（`SAM3DBody_Smooth`，gaussian，可调窗口） |
| 面部 | 基础模型**不检测表情**，靠 `SAM3DBody_FaceExpression` 用 **MediaPipe blendshapes** 补 |
| **导出（关键）** | `BuildPoseFile` 节点：输出 **glb** 或 **bvh**，再交给 `Save3DAdvanced` / `SaveGLB` 落盘 |

`BuildPoseFile` 的导出档位（官方节点文档逐项抄录）：

- `format = glb`，`mesh_style` 四选一：
  - **`body_mesh`**＝**真骨架**：**127 根骨骼 + 蒙皮 + TRS 关键帧 + 72 个面部 morph**（需要模型）
  - `bones_only`＝关节处的骨骼形状图元（预览用）
  - `openpose`＝OpenPose-18 的 3D 骨架（可选手部 21+21 点）
  - `scail`＝SCAIL 3D 胶囊 rig（开口圆柱 + 关节球封顶）
- `format = bvh`，=`BVH 动作捕捉片段（单骨架，需要模型）`；官方文档明确写了 **BVH export tested with Blender import**
- 相机相关：`camera_translation`（`off` 绑定位置 / `centered` 相对第 0 帧 / `absolute` 原始，**Z 是相机深度，通常以米计**）
- `fps`：默认 **24.0**
- 平滑：`bone_smooth_window`（高斯平滑骨骼旋转关键帧 / 关键点轨迹，0=关，7–15 用于压掉上游没滤掉的抖动与翻转）

> 也就是：**这一步直接产出"带 127 骨骼、带蒙皮、带表情 morph 的动画角色"**，进 Blender 即可用，不需要你自己绑骨。

**模型权重（Comfy-Org 重打包，实测体积）**

| 文件 | 目标目录 | 体积 |
|---|---|---|
| `sam_3d_body_dinov3_bf16.safetensors` | `models/detection/` | 2699.6 MiB |
| `sam_3d_body_dinov3_int8_convrot.safetensors`（轻量替代） | `models/detection/` | 1901.7 MiB |
| `sam3.1_multiplex_fp16.safetensors` | `models/checkpoints/` | 1664.7 MiB |
| `rt_detr_v4-x-hgnet_fp32.safetensors` | `models/diffusion_models/` | 236.3 MiB |
| `moge_2_vitl_normal_fp16.safetensors`（**可选**，只为对齐 FOV） | `models/geometry_estimation/` | 631.2 MiB |

- 仓库：[`Comfy-Org/sam-3d-body`](https://huggingface.co/Comfy-Org/sam-3d-body)（**非 gated**）、`Comfy-Org/sam3.1`、`Comfy-Org/RT-DETR`、`Comfy-Org/MoGe`
- ⚠️ Meta 原版 [`facebook/sam-3d-body-dinov3`](https://huggingface.co/facebook/sam-3d-body-dinov3) 是 **gated（人工审批）**，走 Comfy-Org 重打包版最省事
- 显存：权重约 **3.4 GB 常驻**，推理激活 <100 MB，**峰值约 3.5 GB**（RTX A6000 实测；首次 3.06s / 预热后 1.13s，`body` 档 0.27s）

### 环节 2｜Blender：把"说不清的空间关系"变成看得见的时序

第三方实务指南（Seedance《MiniMax H3：将 Blender 动画转为逼真视频的实用工作流》）把 Blender 的定位讲得最清楚：

> **"Blender 控制事物的位置；视频模型则负责呈现世界的观感与质感。"**
> 三维场景**无需达到最终渲染质量**——把它当成**一份动态规格说明书**：只布摄像机路径、粗略主体模型、地面平面、主要障碍物，就能在付费生成前消除歧义。

为什么非要用 Blender 而不是纯文字提示词？文档给的原话场景就是"**穿透式**"这类需求：

> 载具必须沿特定曲线行驶；**角色必须从前景物体后方穿过**；摄像机必须在**准确节拍**抵达关键揭示画面。Blender 能把上述意图转成**可视的时间节奏、画面方向、比例尺度与遮挡关系**。

**Blender 侧的可操作要点**

1. **导入**：`BuildPoseFile` 导出的 **GLB**（127 骨骼 + 蒙皮 + 72 表情 morph）直接 File → Import → glTF；或导 **BVH** 做纯骨架动作。
2. **只建单镜头**：一个连续摄像机、一次连续动作；不要在一条 playblast 里塞多机位剪辑。
3. **剪影可读性优先**：保留能识别主体的关键特征（载具＝轮数/轴距/驾驶舱轮廓；人物＝身体比例/服装体积/手持物；建筑＝开口/楼梯/立柱）。
4. **接触阴影与地面平面**：悬浮的轮子、手掌、脚会直接导致生成结果"不确定"，而**写实化提示词救不回来**。
5. **先定帧率与画幅再动画**：**H3 参考管线按 24 fps**，务必记录 playblast 的真实帧率，避免静默的时间错配。
6. **导出两份**：一个干净的 H.264 审阅文件用于上传；同时保留**带编号的图像序列 + `.blend` 源文件**作为生产源（便于改颜色 ID、换参考帧、局部重渲）。
7. **穿透式镜头为什么必须在 3D 里做**：相机穿过物体/缝隙、前后景遮挡切换、以及"相机何时穿过哪一层"，在 2D 提示词里几乎不可控；在 Blender 里就是一条曲线 + 一个遮挡物。

> ⚠️ 渲染方式的现实约束（本机向）：`blender --background` 下 **Cycles（CPU 或 CUDA/OptiX）最稳**；Workbench / EEVEE 的后台渲染需要可用的 GPU/EGL 显示上下文，无显示器时容易失败——白模只需轮廓与遮挡，**Cycles + 极低采样 + 纯色/漫反射材质**完全够用。

### 环节 3｜MiniMax H3 Ref2V：把白模"换皮"成成片

同一份指南的核心结论（可直接当操作规范用）：

| 问题 | 结论 |
|---|---|
| 选 Ref2VA 还是 FL2VA？ | **整段 playblast 要指导时间节奏与摄像机运动 → Ref2VA**；只需要锁定首尾构图 → FL2VA |
| 白模要不要做完材质？ | **不需要**。清晰的剪影、景深关系、接触点、可辨识动作 >> 精细 shader；**用颜色编码区分不同对象**有助于说明各自的参考角色 |
| 会 100% 保留动作吗？ | **不会**。把 playblast 当**强引导信号，而非动作捕捉级保证**；验收必须复核运动轨迹、接触关系、摄像机节奏、主体身份、物体数量 |
| 核心冲突 | "写实"与"与 playblast 完全一致"在粗模信息不足时**互相冲突**——模型会自行加关节细节、背景活动、更电影化的运镜 |

**多参考的分工铁律**（与官方 Ref2VA 一致）：**每个参考资产只给它一个角色**——playblast 管运动/镜头；一张干净静帧管身份/外观；一段音频管节奏；**不要上传多个相似资产却不说明谁管身份、谁管动作**。

**官方提示词模板（照抄即可）**

> 以视频 1 作为运动与摄像机参考。严格保留主体运动路径、摄像机高度、转向时机、前景遮挡关系及最终停驻位置。将灰色占位模型替换为 [主体身份与结构描述]。环境设定为 [地点]，包含 [时间、天气及实用光源]。材质必须呈现 [三种具体纹理]。仅添加自然发生的次级运动：[布料、尘埃、水、头发、植被]。同步生成 [环境音与关键音效事件]。保持 [物体数量、几何形态、服装、画面方向及镜头时长] 不变。单镜连续拍摄；无剪辑、无添加文字、无 Logo、无额外主体。

**双栏验收表**（推荐直接落地）

| 从 Blender 中「必须保留」 | 由生成「负责提升」 |
|---|---|
| 摄像机起始点、路径与终点 | 写实曝光与镜头响应 |
| 主体数量与画面方向 | 材质、磨损、反射 |
| 接触时机与关键姿态 | 布料、雨滴、尘埃、头发、植被 |
| 前景/背景遮挡关系 | 环境音、拟音、对白 |
| 镜头时长与剪辑预留点 | 细微纹理与氛围细节 |

每项标 **通过 / 可修复后使用 / 未通过**。**只要转向错误或摄像机丢了揭示时机，画面再惊艳也判失败**；反之运动准确时，轻微材质瑕疵可归为"可修复"。

**审片顺序（很重要）**：先**静音**看摄像机与轨迹 → 再看接触与遮挡 → 再看身份与材质 → 最后核对声音与画面事件同步。**精修过的单帧会掩盖转换失败**。

---

## 三、完整数据流（每步的产物与规格）

```
真人舞蹈/动作视频
   │  ① ComfyUI：SAM3_VideoTrack → RTDETR_detect → SAM3DBody_Predict
   │            → SAM3DBody_Smooth → SAM3DBody_FaceExpression
   ▼
MHR_POSE_DATA（3D 骨架 + 形状 + 表情 + 相机平移）
   │  ② BuildPoseFile(format=glb, mesh_style=body_mesh)
   ▼
角色.glb  ← 127 骨骼 + 蒙皮 + TRS 关键帧 + 72 面部 morph
   │  ③ Blender：导入 glb → 摆粗模/地面/遮挡物 → 画摄像机（可穿透）→ 渲染 playblast
   ▼
白模.mp4（24fps，H.264，YUV420P，边长为 32 的倍数）
   │  ④ ComfyUI：H3 Director-rv2v / Ref2VA
   │      <Video 1> = 白模.mp4（动作+镜头）  <Picture N> = 角色图（身份）  <Audio 1> = 可选节奏
   ▼
成片.mp4（同步音频，主体换皮、镜头与动作被保留）
```

**④ 的硬约束（H3 参考视频规格，务必先合规再喂）**

| 约束 | 值 | 说明 |
|---|---|---|
| 单段参考视频时长 | **2–15 s** | 每段 |
| 全部参考视频合计 | **≤15 s** | 单条就吃满预算时别再叠第二条 |
| 参考视频条数 | ≤3 段 | 与图/音频跨类型合计 ≤12 个 |
| 帧率 | **24 fps** | H3 输出也是 24 fps，对齐可省一次真补帧 |
| 编码 | **H.264 + YUV420P** | 竖屏降到 480×864 可省显存（sm120 + SageAttention 长序列有灰屏风险） |
| 边长 | **32 的倍数** | 短边 480 / 768 / 1088 档 |
| 单段生成上限 | **15.083 s（362 帧）** | 更长必须分段 + Motion Context 续接 |

> 本地已有更详细的 H3 侧记录：`10-视频生成流水线/H3长视频分段合成方法-20260914.md`、`06-ComfyUI-H3运维记录/ComfyUI-H3运维记录.md`。

---

## 四、四个最容易踩的坑

1. **把 playblast 当"最终渲染"去做**。它只需要**轮廓、遮挡、接触、节拍**。反过来，**白模信息不足时 H3 会自己加戏**（加关节结构、加背景活动、换成更电影化的运镜）——这是"写实 vs 完全一致"的固有冲突，不是提示词能修掉的。
2. **多参考不指定角色**。上传两个相似视频/图却不说明谁管身份谁管动作，是 Ref2VA 最常见的失败模式。
3. **悬浮接触点**。playblast 里悬空的脚/轮子/手，写实化提示词**稳定救不回来**。
4. **帧率静默错配**。Blender 习惯 30/60 fps，H3 参考管线是 24 fps；不统一会出现"动作对但节奏全错"。

---

## 五、本机现状实测（GPU 机 192.168.31.31，只读核查）

> 核查方式：`curl http://127.0.0.1:8189/object_info` 全节点扫描 + 模板目录 + 模型目录 `ls`。**未安装、未运行。**

| 项 | 状态 |
|---|---|
| ComfyUI 版本 | **0.37.0** |
| SAM3D-Body 原生节点 | ✅ `SAM3DBody_Loader` / `_Predict` / `_Render` / `_Smooth` / `_FaceExpression` 全在 |
| SAM3.1 跟踪节点 | ✅ `SAM3_Detect` / `SAM3_VideoTrack` / `SAM3_TrackToMask` / `SAM3_TrackPreview` |
| 3D 导出/预览节点 | ✅ `BuildPoseFile`、`SaveGLB`、`Save3DAdvanced`、`Preview3D`、`Preview3DAdvanced`、`Get3DComponents`、`MeshToFile3D`、`CreateCameraInfo`、`Load3D`、`Load3DAdvanced`、`RenderMesh`、`MoGeRender`、`VoxelToMesh` |
| 缺的节点 | ❌ `Load3DAnimation`、`Preview3DAnimation`（0.37.0 尚未包含；不影响导出链路，只影响"把动画 GLB 导回 ComfyUI 预览"） |
| 官方工作流模板 | ✅ `utility_sam3d_body.json` 已在模板库（本地共 580 个模板），节点参数实测：`BuildPoseFile:[glb, scail, ..., 24, off, -1]`、`SAM3DBody_Loader:[sam_3d_body_dinov3_bf16.safetensors]`、`LoadMoGeModel:[moge_2_vitl_normal_fp16.safetensors]`、`UNETLoader:[rt_detr_v4-x-hgnet_fp32.safetensors]`、`CheckpointLoaderSimple:[sam3.1_multiplex_fp16.safetensors]` |
| **模型权重** | ❌ **4 个全缺**：`models/detection/`、`models/geometry_estimation/` 目录里只有占位文件；`checkpoints/` 只剩空的 sd1.5 / sdxl 目录 |
| **Blender** | ❌ **未安装**（`which blender` 空；apt 候选仅 **4.0.2**，而第三方 FBX/BVH 导出节点要求 ≥4.1） |
| 磁盘 | 982G 已用 / **106G 可用（91%）** —— 装 Blender（~400MB）+ 模型（~5.2GB）没问题 |
| 显存 | 16 GB；SAM3D Body 峰值 ~3.5 GB，**H3 Ref2VA 本机实测峰值 ~14.5 GB** → **两者不能同时常驻，必须错开** |

---

## 六、三条落地路线（按代价从小到大）

### 路线 A（最省事，不装 Blender）：ComfyUI 内出"白模/骨架"视频 → 直接喂 H3

`utility_sam3d_body.json` 模板本身就能渲染网格叠加视频；把 `BuildPoseFile` 改成 `openpose`/`scail` 或直接用 `SAM3DBody_Render` 渲染 mesh，即可得到"无身份的骨骼/白模视频"，正好当 `<Video 1>`。
**适合**：只想要"动作驱动 + 换皮"，不追求特定运镜。
**已有先例**：本机 `57-H3白模红模素材参考调研/` 里已有用现成白模/红模素材换人的成功记录。

### 路线 B（用户问的完整链路）：SAM 3D Body → GLB/BVH → Blender → playblast → H3 Ref2V

**需要补装**：① 上面 4 个模型（约 5.2 GB，MoGe 可选）；② Blender（建议 **4.5.9 LTS** 或 **5.x** 便携版，别用 apt 的 4.0.2）。
**适合**：需要**穿透式运镜、精确遮挡、精确节拍揭示**的镜头；也是"白模 + 渲染"理念的完整形态。

### 路线 C（要摄像机但不想开 Blender）：ComfyUI 内做相机环绕

自定义节点 [`Burgstall-labs/ComfyUI-SAM3D-BodyMod`](https://github.com/Burgstall-labs/ComfyUI-SAM3D-BodyMod)（Apache-2.0）提供 **`Drive SAM3D Body Camera`**：围绕 `MHR_POSE_DATA` 的**每一帧**做相机轨道，再重投影网格/关键点/关节，内置**关键帧编辑器**（左键拖相机标记改 azimuth/elevation、滚轮 dolly、右键加/删关键帧、`linear` 直线段 / `smooth` Catmull-Rom 插值、azimuth 走最短路径跨 ±180°）。节点顺序：`Detect Shape → Body Type Preset → Apply Shape → Drive Camera → Render 3D Body Pose`；**要导出原始身体动作（而非烘焙视角）时，从"相机之前"的分支取 GLB/BVH**。
**注意**：这是**轨道相机**（绕主体转），**做不到"相机穿模/穿缝"**——真正的穿透式运镜还是得 Blender。
**适合**：环绕、推拉、Dolly 这类"看得清主体"的运镜，且不想装 Blender。

**附加选项（没有驱动视频时）**：动作可以由 **NVIDIA Kimodo** 文生动作生成（`ComfyUI-Kimodo-Bridge`：文生动作 → Mixamo FBX / Unity Humanoid / BVH 导出），即"文字描述动作 → 3D 角色 → Blender 相机 → H3 渲染"。

---

## 七、安装清单（尚未执行，等确认）

```bash
# ① SAM 3D Body 权重（GPU 机，走 hf-mirror）
export HF_ENDPOINT=https://hf-mirror.com
# detection/
#   sam_3d_body_dinov3_bf16.safetensors          2699.6 MiB
#   （或 int8_convrot 版 1901.7 MiB）
# checkpoints/        sam3.1_multiplex_fp16.safetensors   1664.7 MiB
# diffusion_models/   rt_detr_v4-x-hgnet_fp32.safetensors  236.3 MiB
# geometry_estimation/moge_2_vitl_normal_fp16.safetensors  631.2 MiB（可选）

# ② Blender（本机经代理下载 → scp 到 GPU 机；GPU 机直连 blender.org 返回 403）
#    blender-4.5.9-linux-x64.tar.xz（LTS 稳）或 blender-5.2.2-linux-x64.tar.xz（最新）
#    解包到 /home/zyw/blender-4.5.9-linux-x64/，用 ./blender -b 跑后台渲染
```

**建议的验证顺序**：先跑官方 `utility_sam3d_body.json` 模板确认模型链路通（输出 `output/video/SAM3D_body/`）→ 再导一次 `format=bvh` 和 `mesh_style=body_mesh` 的 GLB，确认 Blender 能导入且骨架/表情正常 → 再搭一个 5 秒单镜头、带一个穿透遮挡的白模 → 最后才喂 H3 Ref2V。

---

## 八、需要你确认的三件事

1. **这次要"了解"到什么程度**——只要这份链路解读，还是要我**实际把这条链路搭起来**（下载模型 + 装 Blender + 跑一条 demo）？
2. **有没有源视频/素材**？如果这条链路来自某个视频（我猜可能是抖音那位 @有趣的80后程序员 的"上一个视频"），**给我链接我可以像上次一样把原片下载 + 逐句转写**，把作者的真实参数和踩坑补进来。
3. **GPU 机现在有别的服务在占显存**（ComfyUI 常驻约 10.4 GB）；跑 SAM3D Body + H3 需要先协调停哪些服务。

---

## 九、参考链接

- ComfyUI 官方文档 · SAM 3D Body 教程（中文）：https://docs.comfy.org/zh/tutorials/utility/sam3d-body
- ComfyUI 官方文档 · `BuildPoseFile` 节点：https://docs.comfy.org/built-in-nodes/BuildPoseFile
- ComfyUI Wiki · SAM 3D Body 进入内核（2026-08-23）：https://comfyui-wiki.com/en/news/2026-08-23-sam-3d-body-native-comfyui
- Meta 原版权重（gated）：https://huggingface.co/facebook/sam-3d-body-dinov3 ｜ Comfy-Org 重打包（非 gated）：https://huggingface.co/Comfy-Org/sam-3d-body
- Seedance · MiniMax H3：将 Blender 动画转为逼真视频的实用工作流（2026-09-12）：https://www.seedance.tv/zh/blog/minimax-h3-blender-animation-to-realistic-video
- ComfyUI-SAM3D-BodyMod（相机轨道 + 体形迁移）：https://github.com/Burgstall-labs/ComfyUI-SAM3D-BodyMod
- ComfyUI-SAM3DBody_utills（FBX/BVH 导出，**需 Blender ≥4.1**）：https://github.com/tori29umai0123/ComfyUI-SAM3DBody_utills
- ComfyUI-Kimodo-Bridge（文生动作 → Mixamo/Unity/BVH）：https://github.com/GuardSkill/ComfyUI-Kimodo-Bridge
- 微博「德理克文」· AI 视频可控性工作流：白模 + 渲染（2026-09-14）：「**白模负责确定性，H3 负责想象力。把随机抽卡，变成可控生成。**」https://sina.cn/news/detail/5342973987392688.html

## 十、本地相关文件

- 白模/红模素材能力核查：`../57-H3白模红模素材参考调研/H3白模红模素材参考能力核查-20260927.md`
- 外部项目盘点（ReShot / SCAIL-2 / Wan-Animate / H3 Director 等）：`../57-H3白模红模素材参考调研/H3素材驱动-开源项目盘点-20260927.md`
- 素材：`../56-抖音视频下载/02_L_去年夏天-白膜素材_1080x1920.mp4`、`03_L_复仇摇-ai素材_720x1280.mp4`
- H3 实操记录：`../10-视频生成流水线/H3换人视频-部署与实测报告-20260914.md`、`H3长视频分段合成方法-20260914.md`
- 官方 H3 工作流（本机已就位）：`ComfyUI/user/default/workflows/H3官方工作流/Director-rv2v.json`
