<!-- 本文件为机器翻译（简体中文），原文路径：Docs/PIPELINE_LESSONS.md -->

> 浓缩自所有者早期项目（Overlord 及若干代理基准测试运行）的经验教训。
> 括号中的源路径指所有者的主仓库，不属于本项目；
> 其中最重要的若干文档已拷贝到本项目的 `knowledge/` 和 `processes/` 目录。

# 流水线简报：24 小时自主 WoW（魔兽世界）风格 Unity MMO 切片（card 442）

编纂于 2026-09-24。"Verified"（已验证）指实际使用并产出了结果；"catalog"（仅目录）指已列出但未测试。

## 1. 工具清单

### MCP 服务器（Claude：`.mcp.json` + `~/.claude.json` 项目条目）

| 名称 | 擅长 | 不擅长 / 注意事项 |
|---|---|---|
| `unity` | AnkleBreaker unity-mcp-server（插件 2.39.5），桥接端口 7890。`unity_execute_code`（C# 方法体）、`unity_get_compilation_errors`（不依赖控制台）、`unity_graphics_game_capture`（内联 PNG）、`unity_play_mode`、`unity_editor_state`。通过 `unity_list_advanced_tools` / `unity_advanced_tool` 可访问 321 个高级工具：terrain（32 个）、animation（25 个）、navmesh、probuilder、shadergraph、input、ui、lighting、profiler、testing，以及 uma（15 个，需要 UMA 包）。 | 桥接超时 60 秒，队列轮询 120 秒。长时间编译会表现为假超时。**Overlord 编辑器当前正在 7890 上运行**，而第二个编辑器会使 MCP 变为多实例，因此必须用 `unity_select_instance` 并传入 `port`。唯一安装的编辑器是 6000.5.9f1（`E:\Unity\Editors`）。许可证要求非个人产品在产品中标注 "Made with AnkleBreaker MCP"。（`C:\GIT\unity-mcp-server\README.md`、`src/config.js`） |
| `blender` | `execute_blender_code`、`get_screenshot_of_window_as_image`、`render_viewport_to_path`、捆绑的 API 文档。随 Blender 自动启动。 | Python 全局变量在调用之间不持久。长调用会超时，而 Blender 仍在继续运行。（`knowledge/blender-game-animation-lessons.md`） |
| `higgsfield` | `bl_image_to_3d`、`bl_generate_3d`、`bl_generation_status`、`bl_import_model`、`bl_list_models`、`bl_import_motion`（27 根骨骼、以 Mixamo 命名、20 fps，仅目录）。需要 Higgsfield Blender 插件处于连接状态（当前已连接）；**任何修改操作之前必须先加载 `bl_get_skill('blender-scene')`**。 | `ae_*`/`pr_*` 与本任务无关。积分延迟计费且没有美元换算。 |
| `customuse` | 付费节点图：`tripoV31Mesh3d`，然后 `meshDecimation`，然后 `uvUnwrap`（xatlas），然后 `textureBaking` 2K（`knowledge/3d-gen-preferences.md`）。Tripo P2（约 1 万面，分部件）。 | 积分。Meshy-7 重贴图方案被否决。 |
| `cascadeur`、`godot`、`notion`、`figma`、`vidiq` | 不适用于本次构建。Cascadeur 今天离线，且此前被评为"限制太多"。 | |

**Claude 没有 fal MCP。** 改用 Python：`.claude/skills/fal-ai-generation/scripts/fal_job.py --env .env {upload|submit --endpoint E --input in.json --out dir [--dry-run]|status|result}`。它为每个任务写一份回执并拒绝重复提交。或者使用 `scripts/image-gen/generate.py prompts.json --model gpt-image-2.5 --run-id X --workers 5 --skip-existing`：始终传 `--model`，并把它在 `scripts/image-gen/data/` 下的输出移到工作区里。（`knowledge/mcp-organization.md`、skill）

### fal / 生成端点

| 需求 | 已验证端点（成本） | 备注 |
|---|---|---|
| (a) 概念/参考图 | `openai/gpt-image-2.5/flare/text-to-image`；`fal-ai/nano-banana-pro`（2K）；`fal-ai/imageutils/rembg` | 使用纯中灰背景，并加上风格锚定语 "stylized 3D ... non-photoreal, not cartoon"，配色按 60/30/10 比例（`processes/3d-ai/prompting.md`）。Grok 需要 `/text-to-image` 后缀。 |
| (b) 编辑/一致性 | `openai/gpt-image-2.5/sunburst/edit`（约 $0.04–0.06，Overlord 默认）；`fal-ai/nano-banana-pro/edit`（`image_urls` 数组、`resolution:"2K"`、`safety_tolerance:"6"` 必须是字符串） | Nano Pro 最精细（未触碰的像素保持完全一致）。GPT 会重绘整个画面。每次编辑都把一张已批准的图作为风格锚点喂进去。品牌词会触发 422（`knowledge/image-gen-lessons.md`）。 |
| (c) 图生 3D | **Higgsfield `tripo_h3_1_image_to_3d` / `tripo_h3_1_multiview_to_3d`**（18 积分；`geometry_quality/texture_quality:"detailed"`、`face_limit`、`texture_alignment:"original_image"`）。输出 GLB，含 4K 基础色 + ORM + 法线。在英雄级生物和建筑上胜出（Tortoise Inn 28.2 万面、Aurora Drake 9.5 万面）。fal 的 `tripo3d/h3.1/image-to-3d`（约 $0.50）和 `tripo3d/p1/image-to-3d`（`texture:true, face_limit:8000`，约 $0.50；Overlord 有 11 个道具用它；网格在 `r["model_mesh"]["url"]`）。 | Hunyuan 3.1 Pro 产出约 150 万三角面 / 60 MB 的 GLB，不是游戏网格。Meshy 7 的贴图被否决。TRELLIS-2 已被取代。道具需要纯色暗背景、无地面雾、3/4 略俯视角；角色需要严格正立的 A-pose 设定图。（`workspace/2026-09-06_tortoise-inn/`、`2026-09-08_aurora-drake-blender/provenance.json`、`projects/overlord/locations/terrain-kit/build_props_p1tex.py`） |
| (d) 贴图 | **`fal-ai/patina/material`**（约 $0.06–0.10/套；`maps:[basecolor,normal,roughness,metalness,height]`、`tiling_mode:"both"`、`enable_prompt_expansion:false`，可选 `image_url`+`strength:0.5`）；`fal-ai/patina/material/extract` | 材质必须用 Patina（所有者定的规矩）。fal 上没有 Tripo 纯贴图端点。Meshy 重贴图被否决。 |
| (e) 绑定 | **没有任何服务经过验证。** 所有绑定都是在 Blender 里由代理手工完成的。Higgsfield 的 `3d_rigging`（`model_url`、`height_meters`）仅是目录。 | Mesh2Motion、Cascadeur 和 Animate Anything 全都"差点能用，然后就崩了"（`projects/overlord/devlog/posts.json`）。 |
| (f) 动画 | **通过公开 HF 存档获取 Mixamo**：`python scripts/animation/download_mixamo.py --motion-id <UUID> [--motion-id ...] --output <dir>`。无需登录。在 `Linzhan/Mixamo-Animations-Characters` 的 `metadata.csv` 中查找准确的 UUID。输出为 30 fps、带 `mixamorig:` 骨骼的二进制 FBX，许可遵循 Adobe Mixamo 条款。 | 视频参考（每个动作 `seedance_2_5` ×2 + `minimax_h3_max`）只服务于手工制作，不是动作捕捉。QuickMagic 是手动的。不存在代理可用的视频转动作路径。（`knowledge/mixamo-animation-acquisition.md`、`processes/3d-ai/animation-reference-selection.md`） |
| (g) 音频 | 音乐：`google/lyria-3.5`、`sonilo/v1.1/text-to-music`；Mureka（直连 API）。语音：`fal-ai/gemini-3.1-flash-tts`（$0.05/千字符；战斗台词约 50% 返回 422）。 | **所有者否决了生成式音效（SFX）。** 改用 CC0 Foley（OpenGameArt 的 "Fantasy Weapons and Apparel SFX"、"RPG Sound Pack"、Freesound）。`fal-ai/elevenlabs/sound-effects/v2` 技术上可用（0.5–22 秒，`loop:true`）。音乐循环用 ffmpeg 的 `loudnorm` + `acrossfade`。（`knowledge/overlord-music-direction.md`、`projects/overlord/audio/unit-sfx/u3/COST_AND_REVIEW.md`） |
| (h) 天空/地形 | 地形：Patina 纯文字生成，提示词为 "PERFECTLY UNIFORM… NO large objects… seamless tileable filler"；或者用半径 r=28 高斯模糊的概念图裁片，`strength 0.5`。URP 遮罩打包为 R 金属度、G AO、B 高度、A 光滑度。 | **没有验证过的天空盒/HDRI 路径。**（`projects/overlord/locations/terrain-kit/build_patina_v3.py`） |

**Higgsfield CLI：** 使用二进制 `higgsfield`（1.1.24）。**不要使用别名 `hf`**：在某些机器上它会解析成 HuggingFace CLI。认证用 `higgsfield auth login`（账号登录，不是 `.env`）。只读命令：`model list --json`、`model get <job_type> --json`、`generate cost ...`、`generate list/get/wait <id>`。提交用 `higgsfield generate create <job_type> --<param> v --image-references ./f.png --wait --wait-timeout 20m`。保留任务 ID，超时后恢复等待而不是重新提交（`processes/3d-ai/higgsfield-cli.md`）。

**密钥：** `.env` 中的 `FAL_KEY`；Higgsfield 用 CLI 登录。绝不打印密钥值。

## 2. 生产路线

**玩家人形生物（2 种族 × 2 性别，一套骨骼，一套动作片段）**
1. 概念图：GPT-Image-2.5，锚定 `workspace/2026-09-24_card442-opus55-24h-mmo/refs/`（36 张 Elwynn/Goldshire/Northshire/Stormwind 截图）。性别变体通过编辑同一张锚定图生成。
2. 严格正立 A-pose 设定图：Nano Banana Pro 2K，头发单独拆出（`.claude/skills/character-sheet-pipeline/SKILL.md`）。
3. 网格：Tripo H3.1 多视图，detailed。在 Blender 中减面到约 1–2 万三角面，拆成逻辑部件。Overlord 单位是分部件的约 1 万面，干净的分部件正是让代理绑定可行的关键（`projects/overlord/devlog/posts.json`）。
4. 绑定：从存档捐赠 FBX 中取一套 `mixamorig:` 骨骼，以相同的命名和层级适配到全部 4 个身体。使用热力权重，然后修复对侧肢体串扰。裁剪到 4 影响骨骼并归一化（`knowledge/blender-game-animation-lessons.md`）。
5. 动作片段：Mixamo 精确 UUID 捐赠源（idle、walk、run、backpedal/strafe、jump、1H attack ×2、cast、hit、death、sit）。在每个 Action 中键入中性的默认值，使不完整的 Action 不会继承变换。
6. Unity：Overlord **只用 Generic rig；即使对 Mixamo 人物也从没用过 Humanoid Avatar**，并用 PlayableGraph 取代 AnimatorController（`projects/overlord/AGENTS.md`、`HUMAN_SWORDSMAN.md`）。要在不同种族比例间共享片段，确实需要 Humanoid 重定向，而这**在这里未经验证**。大约在第 3 小时用一具身体测试它。退路是所有身体共用完全相同的基础骨骼，或者在 Blender 里逐身体烘焙。
7. 自定义化：一个肤色染色材质属性、头部骨骼上挂 2–3 个带发色染色的头发网格、外加面部贴图替换。不用 blendshape。

**生物**
- 小型人形（狗头人、鱼人）：复用 Mixamo 骨骼和动作片段。这是最便宜的路线。
- 四足动物（狼、野猪）需要代理在 Blender 里自建绑定。Wolf 用了双骨 IK 加一个飞节辅助骨，GPT-6 每套动作大约花 2 小时。
- 已批准的四足动作为 9 个片段；24 小时内砍到 Idle/Walk/Run/Attack/Death（`knowledge/blender-game-animation-lessons.md`）。
- 保持 root motion 关闭：位移和偏航由代码掌控，动画相位由行进距离驱动。

**建筑**
- 对 3–5 个独特的英雄建筑（旅店、铁匠铺、小教堂、2 栋民居）使用整栋 Tripo H3.1，门关闭且无内部。GPT-6 做出来的窗户打开后是一堵实墙（`workspace/2026-09-13_card436-gpt6-marathon/video-summary.html`）。
- 模块化套件用 `tripo3d/p1`（face_limit 8000）：栅栏、墙、路灯、板车、木桶。
- Overlord 的城堡是分批生成、拼装改造的，缩放到占地填满一个网格单元，并对照地形重新调色（`projects/overlord/MAPMAKING.md`、`notes/color-correction.md`）。
- 把轴心移到底面中心：`blender --background --python scripts/3d/center_glb_bottom.py -- in out`。
- 用无头 Blender 把 GLB 转成逐对象 FBX，并膨胀 UV 岛。

**地形与植被**
- 通过 MCP terrain 工具使用 Unity Terrain。URP 地形最多 8 层，而 Overlord 的 MicroSplat 是**付费的，因此在新建项目中不存在**。
- 保持世界贴图尺寸恒定（近处 7 米、远处 28 米）。此前在不同尺寸的地形上使用相同的重复次数破坏过这一点。
- 树预制体**不加碰撞体**：它们会在 navmesh 上打洞。
- 每次地形或静态物体变更后重新烘焙 NavMesh。坡度 30°。大型道具需要 `NavMeshModifierVolume`。
- 绘画风树木使用无高光的 wrapped-lambert 着色器、高度遮罩摆动和逐实例染色。
- 在 `.gitattributes` 中把 TerrainData 标记为二进制。（`projects/overlord/AGENTS.md`、DevLog 09-11）

**URP 材质**（AGENTS.md 注意事项 1、11–17）
- 从着色器全新构建材质；`new Material(existing)` 会携带隐藏状态（曾浪费一整天）。多子网格克隆体上只用一个材质时只会绘制子网格 0。多通道着色器需要 `SRPDefaultUnlit` + `UniversalForward` 标签。
- glTF 导入时强制 metallic 为 0（经常是垃圾值 255）。断言法线是真正的 PNG：命名为 `.png` 的 WebP 会被静默拒绝。对 4K Tripo 贴图做降采样。
- 依据真实的 Game View 截图，对每个资产对照地形做调色校正。

**UI**（`projects/overlord/UI_IMPLEMENTATION.md`、`ui/build_icons.py`）
- 在真实 1600×900 截图之上用 `fal-ai/nano-banana-2/edit` 画出约 10 个 HUD 方向。先用 HTML 做原型，再通过一个幂等的菜单安装器构建常驻的 **uGUI**（参考分辨率 1280×720），该安装器绝不重建场景。
- 图标：带风格锚点的 GPT-2.5 sunburst edit，再做 alpha 抠图，全部收进一个 SpriteAtlas。HUD 和小地图以 10 Hz 更新，使用 256 px 渲染目标。

## 3. Unity 与 Blender 注意事项

**Unity**
- **编译竞态：** 先停止 Play，Refresh，轮询直到 `isCompiling==false`，然后再 Play。Kimi 的运行中约 34 次"超时"其实是已经成功的编译，所以要轮询 `unity_editor_state` / `unity_get_compilation_errors` 而不是盲目重试（`workspace/2026-08-03_card410-kimi-k3-unity/the-rig.html`）。
- 在 Play 期间带着待处理的 `.cs` 变更做 Refresh 会强制域重载：静态字段重置、Awake 不会重跑、运行时 List 变空（这类状态要标 `[NonSerialized]`）、雾和单例重置（注意事项 4、15；`logs/2026-09-15.json`）。做预制体手术前先停止 Play；在 OnDisable 里清理 shader 全局变量。
- **只用 Input System：** `UnityEngine.Input` 会抛异常。合成的按下和释放必须落在不同的帧上。在 `finally` 中恢复输入设备并用 SessionState 兜底，每次测试后确认真实设备是当前设备（`knowledge/overlord-unity-test-input.md`）。
- **IMGUI 从不出现在相机截图里**，`camera.Render()` 也会跳过 overlay 画布。HUD 要用 uGUI 构建，并用 Game View 帧末截图验证。
- 未聚焦的编辑器会被限流并返回过期截图（启用 Run In Background）。一个**隐藏的模式对话框**曾冻结两个编辑器 15 分钟。只按 PID 杀进程：一次无差别 kill 曾带走一个无关的编辑器。（card410）
- 把测试驱动**构建在游戏内部**（一个 VerificationDriver，负责驱动、定格、截图并退出 Play）；30 秒的工具往返让人工驱动测试不可行。
- `execute_code` 无法引用测试程序集。用反射加一个静态 `Run()`，并轮询 `Stage`/`Finished`（`Assets/_Game/Tests/README.md`）。
- **导入设置：** scale 1、root motion 关、不压缩动画、关闭均匀重采样（它曾截断过带小数的最后一帧关键帧）、30 fps。检查 FBX 变换缩放（Wolf 曾以 100 倍导入）。
- **录制：** 一个隐藏的相机副本以 `Time.captureDeltaTime=1/30` 加 20 帧预热喂给 FFmpeg。检查 `LastResult==Complete`（`projects/overlord/COMPARISON_RECORDING.md`）。
- **性能：** 在 Overlord 中从未测量过。VFX 要池化（逐次生成的材质克隆存在泄漏）。启用 Terrain 的 `drawInstanced`。
- 崩溃后 Unity 会写出 `Assets/_Recovery/0.unity`。做 diff 之前先备份并计算哈希。

**Blender**
- 使用简短的存档脚本，重试前先检查进程，并在 `blender --background --factory-startup` 中执行重型烘焙、渲染和导出检查。
- 角色 FBX 导出：
  `add_leaf_bones=False, bake_anim_use_all_actions=True, bake_anim_use_nla_strips=False, bake_anim_force_startend_keying=True, bake_anim_simplify_factor=0, axis_forward='-Z', axis_up='Y', apply_scale_options='FBX_SCALE_UNITS', path_mode='RELATIVE'`
- 道具 FBX 导出：`FBX_SCALE_ALL, bake_space_transform=True`。Blender 的 −Y 对应 Unity 的 +Z。
- 每次导出都要通过**复制出来的文件夹**重新导入来验证：否则贴图会从旧目录解析。
- 计算时间区间而不是采样数：30 fps 下 0–51 帧是 1.7 秒。
- 如果 Higgsfield 桥接掉线，改用普通的 `blender` MCP，并确认打开的是正确文件。

## 4. 长时运行的代理框架经验

- **预算：** Opus 5.5 约 $15–30/小时（API 等价），40–80M token/小时，大部分是缓存读取，单次请求最高达 56.3 万 token。预期会**发生很多次压缩**，所以所有状态都放磁盘上（`workspace/2026-09-23_opus55-tests/data/tests.json`）。
- **配额：** "一个提示可能吃掉整个 5 小时限额"；一个周限额 2 天用完；World of ClaudeCraft 两天用掉了 $200 套餐的约 93%（`workspace/2026-09-08_gpt6-best-setup/comments/report.html`、`2026-09-21_opus55-test-brainstorm/report.html`）。
- **GPT-6 马拉松：** 46 个活跃小时、12.9 亿 token，但 302 次生成只花了约 $40–85。Token 才是成本；美术很便宜（`card436 video-summary.html`）。
- **有效做法：** 先用原始灰盒搭出骨架（45 分钟出一个可玩 FPS），再做包装；带里程碑检查点并配通俗语言的缺陷清单；用生成器而不是抓来的资产；在冻结输入的单次连续回合中带上 **"WHAT GETS CHECKED"**（要检查什么）一节；传输失败后从磁盘恢复（`workspace/2026-08-22_card421-3d-bench-tests/data/tests.json`）。长检查以 Play 模式夹具运行并写出 `checks.json`，绝不做成单个超长 MCP 调用。
- **卡死：** 静默推理回合会让流超时；524、TLS 错误、限流和积分耗尽，10 次启动只有 3 次干净收尾。一个监督器重启了一条已经完成的工作线，因为它的脚本在运行途中被改过。**绝不在运行途中修改框架；成功标记要原子写入**（card421）。
- **验证：** 只看截图漏掉了 78 帧里 4 个 UE 级 bug。只看数字漏掉了一艘离水 2 米的船（检查量的是本地空间）。干净的控制台掩盖了从未命中的炮塔。同时要求世界空间结果探针和真正的肉眼查看（card410、card421）。
- **绝不自我评分。** 由全新上下文的评审代理对照参考图打分（Gauntlet Loop，`workspace/2026-08-18_card418-tesana2-loops/data/loops_findings.md`）。
- **来源记录：** GPT-6 曾悄悄抓了一个 OpenGameArt 僵尸，并把 Blender 动画错标成 "Higgsfield"。为每个资产记录来源。
- **状态分级：** proposed（提议）/ implemented-not-verified（已实现未验证）/ agent-verified（代理已验证）/ owner-confirmed（所有者已确认）。绝不自宣所有者验收（`projects/overlord/AGENTS.md`）。
- **Token 核算：**
  - 来源：`~/.claude/projects/<cwd-slug>/<session>.jsonl`。每个 `message.id` 只统计一次 usage。
  - 类别：input、cache_read、cache_creation（1h 与 5m）、output。
  - 每 100 万 token 单价：输入 $4、缓存读 $0.20、1h 写入 $8、5m 写入 $5、输出 $20。保存 `evidence/pricing.json`。
  - 活跃时间取区间的并集；"Not recorded"（未记录）绝不编造为 0。
- **推荐框架：** 从第一轮起就有 PLAN.md 加只追加的 PROGRESS.md（UTC）和 REPORT.md。每个里程碑一个 git 检查点。工具或 MCP 超时/"busy" 触发检查点，而不是重试循环。配额或传输中断后，从 PROGRESS.md 和最后一次提交恢复。一个外部循环（Ralph 式）把同一个提示再喂回去，可以熬过限额窗口。

## 5. 上镜好看

- **Overlord 已批准的画面分级**（RTS 俯视；第三人称距离需调整雾；`projects/overlord/MAPMAKING.md`）：ACES +1.05 EV、对比度 6、饱和度 12；冷色阴影、暖色高光；bloom 关闭；暗角 0.22（0.28 太重）；SSAO 取自 Depth（绝不用 DepthNormals）；太阳光 1.5 加漂移云影 cookie；三光源环境光（0.55,0.59,0.66 / 0.40,0.43,0.44 / 0.25,0.28,0.26）；Exp² 雾 0.0028，颜色 (0.40,0.48,0.58)。所有场景共用同一个配置文件。
- **所有者否决过：** 水泥灰或发黄的地形；过白/过蓝的城堡；过大的剑；色彩调整过猛（强调色再向灰靠近 30%）；发光帷幕；僵硬、机械或鬼鬼祟祟的动作；转弯过于含蓄；录制画面里出现调试 HUD；占位观感（棋盘格、黑虚空、平光、无雾、主体在画面里只是一个点）。（DevLog 09-12…19；card410；card421）
- 单看没问题的资产放进场景可能互相冲突。永远在玩法相机位置的 Game View 里评判，绝不用 Scene 视图或 Blender 渲染图。
- 动作是最难的部分：生成的视频"好看但最不可用"。动作库片段胜过生成视频（card436）。
- 观众会批评游戏手感（"是个原型，不是游戏"）、粗制滥造和未优化的产出。代码胜过拼接线（`workspace.json` card269）。
- WoW 观感要点：温暖、饱和但不刺眼的霓虹感、粗壮可读的剪影、大手大肩、无高光的绘画风 albedo、强烈的雾分层和风格化天空。

## 6. 提示词要点 15 条

1. 使用你自己的 Unity 项目。每次会话开始前先 `unity_select_instance`，绝不碰另一个已打开的项目。
2. 先搭建灰盒 MMO 循环：登录、选角、创角、区域、怪物、任务、道路、城镇和 HUD，全部用原始几何体。循环能玩了之后再做资产。
3. 状态放磁盘：PLAN.md、只追加的 PROGRESS.md（UTC）、REPORT.md，外加每个里程碑一个 git 检查点。从这些文件恢复，绝不依赖记忆。
4. 每个检查点都要有固定姿势的 Game View 截图加一份世界空间探针 JSON：HP/XP 变化、任务状态、背包里的战利品、目标 ID、fps、控制台错误。另外跑一次脚本化的"新玩家"端到端流程。
5. 绝不自我评分。由全新上下文的评审子代理把截图与 `Docs/refs/` 对比，所有者验收状态保持 "pending the owner"（待所有者确认）。
6. HUD 只用 uGUI（不用 IMGUI）。用 Game View 截图验证。
7. 轮询编译状态（`isCompiling`、`unity_get_compilation_errors`），绝不盲目重试。Refresh 或编辑预制体前先停止 Play。调用挂起时检查是否有模式对话框。
8. 输入测试：只用 Input System，按下和释放分帧，在 `finally` 中恢复设备，事后核真实设备。
9. 动画：通过 `download_mixamo.py` 使用 Mixamo 精确 UUID 存档，4 个身体共用一套 `mixamorig:` 骨骼，root motion 关闭。尽早测试 Humanoid 重定向，失败则退回 Generic。
10. 网格：英雄用 Tripo H3.1（Higgsfield），道具用 `tripo3d/p1` face_limit 8000，然后减面、轴心移到底面中心，并从复制出来的文件夹验证重新导入。所有可平铺材质用 Patina。
11. 保留生成回执：在 `assets.json` 中为每个资产记录端点、请求 ID、提示词、成本和本地路径。轮询超时不是失败，绝不构成重新提交的理由。不许悄悄从素材市场抓取或使用占位物。
12. 音效用 CC0 Foley 并附许可证记录；不用生成式音效。音乐用 Lyria 3.5 或 Sonilo。
13. 共用一个 URP volume profile。只在玩法相机位置的 Game View 里评判观感，并对照地形给资产调色。
14. 重活（烘焙、渲染、导出、构建）放到后台或批处理进程里跑。只按 PID 杀进程。绝不在运行途中修改框架脚本。
15. 如实汇报：区分已实现、代理已验证和所有者已确认。未完成的检查要列出，不能宣称完成。Token 用量取自会话 JSONL，按 `message.id` 去重。

## 7. 已知未知与风险

- **Humanoid 重定向跨种族比例在仓库中未经验证**：Overlord 只用 Generic。4 个身体共用一套动作片段是最有风险的美术任务。
- **自动绑定：** 没有任何代理可用的服务经过验证（Higgsfield `3d_rigging` 和 `bl_import_motion` 仅是目录）。Blender 手工绑定每个生物要 1–2 小时，这限制了生物种类数。
- **配额：** 以 40–80M token/小时运行的 24 小时 Opus 任务可能撞上 5 小时或周度 Max 限额。需要一个恢复循环，进度可能停滞数小时。
- **编辑器挂起与超时：** 假编译超时、模式对话框、未聚焦时的限流，以及 60 秒桥接超时。另外还有 MCP 误连到正在运行的 Overlord 编辑器的风险。
- **观感差距：** 没有天空盒路径、没有 MicroSplat、地形 8 层上限，且 Tripo 贴图偏 PBR 而非手绘风。需要绘画风着色器和调色，否则读起来像"AI 粗制滥造"。
- **假玩家：** 避免在游戏内做实时 LLM 聊天（成本和延迟）。使用离线生成的聊天库和状态机机器人，并做池化。
- **知识产权：** WoW 参考只取氛围。交付切片中不得出现暴雪的名称、logo 或 UI 复制。若构建公开发布，必须标注 AnkleBreaker 署名。
- **性能**在 Overlord 中从未做过分帧：大量蒙皮机器人、姓名板和地形细节，没有帧率预算。
