Add formal enemies, remaining formal partners and synthesized UI SFX

- UI SFX v3: procedurally synthesized one-shots (Tools/synth_ui_sfx.py) wired to
  buttons, rewards, errors and red dots via UiSfx, gated by the SFX setting.
- Five formal enemies (Hornlet, Dashlet, Shellhorn, HornCaptain, GreatHorn):
  Hunyuan 50k -> 2000-tri XPbr, DGXA TokenRig, Idle/Walk/Attack, nested per type
  in PrototypeArena; PrototypeBattle.Enemy gains presentation-only Moving/Strikes.
- Formal partners for all ten pets in the arena and portraits, including new
  VineSprite, ThunderLeopard and TideWhale.
- Pipeline fixes: reject local TokenRig fallback, drop loose mesh islands,
  configurable Unity run_script timeout, companion static stage.
- Also includes concurrent work from another tool in this working tree
  (FlameLion, enemy combat FX, challenge mode, home explorer, server updates).
- Resources registered in Doc/ResDesc_*.md; verified on isolated :18081.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
udx
2026-10-21 12:23:55 +08:00
co-authored by Claude Opus 5.5
parent 6c64210331
commit 89e0fa246f
780 changed files with 7117051 additions and 15906 deletions
@@ -30,9 +30,9 @@
## 3. 解剖类型与动作生成
已实现并验证的适配器为 `biped_short`:短腿双足、两侧短臂,岩团团12骨。配方显式记录root/chest/左右臂/脚根/脚尖/正面参考骨;12骨和bone_8等名称只属于样例。
已实现并验证 `biped_short`(短腿双足、两侧短臂,岩团团12骨)、`avian_grounded`(地面鸟型,闪闪雀28骨)、`quadruped_turtle`(四足龟,泡泡龟26骨)及 `quadruped_heavy`(重型四足,岩甲犀29骨)。各自配方记录自身身体/前肢或四脚/脚尖/头颈与正面参考骨;骨数与bone编号只属于各自样例,不能跨角色套用。
其它短腿双足敌人需换成自己的骨名、尺寸和节奏并完整验收。四足、长腿人形、飞行或无脚敌人需要对应解剖适配器,当前入口拒绝未知profile;不能直接套双足步幅。标准人形可沿用Mixamo/Kimodo动作来源,仍需同源绑定和三动作验收。
其它短腿双足敌人需换成自己的骨名、尺寸和节奏并完整验收。其它四足、长腿人形、飞行或无脚敌人需要对应解剖适配器,当前入口拒绝未知profile;不能直接套双足步幅。标准人形可沿用Mixamo/Kimodo动作来源,仍需同源绑定和三动作验收。
非人动作在同一TokenRig上用UniMate生成。英文提示词写清体型与单一动作,Walk不混jump,Attack不只写move;显式指定左右正面骨,保留实际提交文本、任务号和哈希。三个动作顺序生成。
@@ -116,3 +116,76 @@ DGXA显存不足时,可对指定动作加 `--generation-device cpu`(统一
对新角色先完成单Walk数值门禁(`VerifyEnemyMotions.Walk(recipePath)`)及多个相位目视,再交付完整三动作。数值门禁不能代替动作语义检查:施法必须能看出双爪前推,Idle不能大幅摇摆。最终配方支持 `idleSourceWeight` / `attackSourceWeight` 调整源运动幅度。
## 地面鸟型伙伴适配(2026-10-20)
闪闪雀配方 `Config/Art/Companions/SparkBird.json` 与制作记录 `SparkBird/ProductionBrief.md` 为 `avian_grounded` 已验收样例。它有自身28骨,不能复用短臂生物的骨名或把飞行作为Walk。该适配仅覆盖双足地面行走及挥翼施法;持续飞行、悬停与飞行切换需另建适配器。
`attackStyle=wing_cast` 与avian_grounded必须成对使用。通用rightArm/leftArm字段表示各自翼根,额外提供rightWingTip/leftWingTip;检查左右骨独立、翼根分居身体两侧。离线负X旋转把初始向外/向上的鸟翼向局部-Z扫出,两侧相反的Z旋转按wingSpreadDegrees展翼,attackReach可加小幅前伸。抬翼不能用身体前倾冒充;VerifyEnemyMotions扣除根骨转动后检查每侧翼尖相对身体前挥>1cm,并仍通过完整蒙皮/脚底/高度/循环/恢复/事件/控制器及Play门禁。
闪闪雀先完成单Walk再生成Idle/Attack,均同rig且CUDA成功;0.9秒Walk,1.4秒Idle,1.0秒Attack,0.45秒OnCompanionAttackImpact。双翼实际相对前挥约3.4/3.7cm,尾羽/冠羽无独立次级骨但峰值形状目视通过。伙伴Prefab、X=80独立场景、Edit/Play均已交付;5项流程保护测试和2个C#脚本编译通过。参数只属于该角色,复制到其它鸟型时须重查自身解剖和重新验收。
## 四足龟伙伴适配(2026-10-21)
泡泡龟 `Config/Art/Companions/BubbleTurtle.json` 为已验收quadruped_turtle/turtle_bubble样例,最终26骨、0.35m/2000tris;详情见BubbleTurtle/ProductionBrief.md。该适配覆盖水平四足龟和缩颈探头施法,其它四足仍需检查解剖与动作类型,不能直接套用。
前右/前左/后右/后左踝及脚尖全部独立映射,FinalizeAnimalWalk.RunQuadruped将源变化校准到绑定姿态,四拍20%摆动窗口保证每次一脚抬起,固定脚部朝向并烘焙实际蒙皮贴地。VerifyQuadrupedMotions每段121帧计算四只脚各自的实际网格步幅/抬脚/支撑,Walk至少三脚支撑,Idle/Attack四脚撑地。骨点移动不能代替实际网格移动;泡泡龟后左脚原步幅不足,经离线paw权重区域修正后四脚均达约3.4~3.5cm,门槛未放宽。
shellRegionMin/Max在Unity归一化空间选取壳区,扣除shellBone刚性变换后检查≤1mm形变;可见身体倾角使用壳体相对绑定姿态的世界up,不能用固定根骨掩盖身体倾斜。skinRegions在原静态FBX顶点/高度空间控制权重,两者Z方向转换必须明确;每个区域保留影响数和范围,保持几何/UV不变。
静态三分之四设计图可能生成斜向躯干。先离线统一高模和后续绑定源,再在Unity前/侧/背面确认;glTF相机约定不能代替游戏朝向检查,须计入FBX左右手转换。新增绑定门禁要求头及前脚位于后脚的-Z方向,泡泡龟最终采用原高模Blender Z +45°;17骨斜向/11骨反向均留诊断,正式动作只用26骨同一rig哈希。
标准入口自动选择四足Walk与专用验证器,Idle/Attack使用离线turtle_bubble收尾:四脚固定、缩颈→探头→恢复,0.6秒OnCompanionAttackImpact。三动作/壳刚性/接缝/控制器/实际Play均通过,6项Python保护测试和4个C#脚本编译通过;真实泡泡投射物/缓速/音效仍由技能系统接入。
## 重型四足伙伴适配(2026-10-21)
岩甲犀 `Config/Art/Companions/RockRhino.json` 为quadruped_heavy/braced_bash已验收样例:0.55m/2000tris/自身29骨。先离线统一高模朝向,再静态Unity三视图确认-Z;检查本角色胸背、头颈及四蹄映射,禁止套用龟的探头施法或其它角色bone编号。
重型四足复用RunQuadruped四拍步态;Attack独立编辑胸背前送、头颈短促推进和低头,四蹄撑地,逻辑根固定。配方必须给出armorRegion与hornRegion及各自≤2mm刚性预算(样例均1mm),对应chestBone/headBone;QA扣除各自刚性变换后检查实际顶点,另检查肩部前送和角区相对头枢轴降低,不能用根骨运动或纯转向冒充冲撞。区域坐标与蒙皮源空间的Z转换沿用明确登记原则。
岩甲犀先通过单Walk,再生成Idle/Attack。Attack源变化8%时后蹄离地4.08mm失败,调整为4%后降至1.77mm,通过原3mm门槛;头前送4.15cm、肩前送2.51cm、可见头转约11.21°,岩甲/头角区域刚性通过。四脚步幅约5.96~5.98cm、抬脚约1.47~1.60cm,至少三脚支撑;三段首尾与根XZ误差0,Edit/控制器/实际Play通过,0.6秒伙伴事件。详情见RockRhino/ProductionBrief.md。
入口run_script显式使用服务器timeout_ms=90000、CLI --timeout 120,覆盖现场Editor刷新后的调度延迟;不自动重试结果未知的写入。四足验证失败另存last_failure.txt后仍抛错,不能以旧失败文件或CLI外层成功替代当前verification与validated状态。7项Python流程保护测试覆盖重型分支错误配对、缺失刚性区域、共享头胸和四蹄映射;泡泡龟只读回归验收通过。
## P0 五类正式敌人(2026-10-21)
5 类敌人都按短腿双足 `biped_short`/`body_slam` 制作,共用一个已验证的解剖适配器,不需要新的四足或飞行适配器。设计、来源与验收结果见 `Doc/ResDesc_Model.md`「P0 五类正式敌人」;配方在 `Config/Art/EnemyCharacters/`。
| type | 敌人 | 配方 | 高度 | 骨数 | Walk/Idle/Attack |
| --- | --- | --- | --- | --- | --- |
| 0 | 小角怪 | Hornlet.json | 0.50m | 22 | 1.0/1.6/1.0s |
| 1 | 疾跑怪 | Dashlet.json | 0.50m | 22 | 0.8/1.4/0.9s |
| 2 | 硬壳怪 | Shellhorn.json | 0.50m | 28 | 1.2/1.8/1.0s |
| 3 | 角怪队长 | HornCaptain.json | 0.60m | 22 | 1.1/1.8/1.0s |
| 4 | 大角首领 | GreatHorn.json | 0.80m | 22 | 1.3/2.0/1.2s |
流程:设计草图(内网本地 Turbo)→ 用户选定 → 混元官网 50k → Blender 八向渲染确认正面 → `Tools/enemy_static_pipeline.py {Name} {height}`(烘焙、安装、静态 Prefab、四向检查)→ `Tools/rig_character_source.py --generate`(DGXA)→ 检查骨架填写配方 → `Tools/generate_enemy_motions.py`(DGXA)→ `character_animation_pipeline.py --build-review --play-check`。
本批次新增的注意事项:
- **DGXA 调用必须从 PowerShell 启动。** NVIDIA Sync 的 SSH 别名 `DGXA` 写在 `~/.ssh/config` 的 Windows 路径 Include 里,只有 Windows OpenSSH 能解析。Git Bash 下 ssh 解析失败,TokenRig 会静默回退本机 SkinTokens,得到单链退化骨架。`rig_character_source.py` 现在遇到回退会直接报错。DGXA 未连接时先运行 `Tools/dgx_ensure_ready.py`。
- **生图后释放显存。** 本地 Turbo 生图模型会占用 DGXA 约 43GB,导致 TokenRig 显存不足;3D 前调用 `POST /api/local-images/prepare-3d`。
- **DGXA 任务串行。** TokenRig 与 UniMate 并发时出现过 `No module named 'Animation'`,重试即可,应避免同时提交。
- **检查游离网格岛。** 混元高模可能把细尾尖等做成悬浮的独立网格,TokenRig 会丢弃,导致 `bl_transfer_skin` 报 bind geometry mismatch。先焊接 UV 接缝统计网格岛;有游离岛时用 `Tools/model_tools/bl_keep_main_island.py` 生成 `_main.glb`,烘焙和绑骨都用它。
- **验收后关闭验收场景。** 验收场景以 Additive 方式留在编辑器中,其相机 depth 很高,会盖住游戏 Play 画面。
战场接入:`BuildPrototype.ApplyFormalEnemies` 在 `PrototypeArena` 每个 `Enemies/EnemyN` 下嵌套 `Type0~4`,统一 1.2 单位高。`PrototypeFlow` 按 type 显示对应模型;`PrototypeBattle.Enemy` 新增仅供表现的 `Moving`/`Strikes`,移动时 Motion=1,每次出手触发一次 Attack,受击只做轻微缩放。`VerifyFormalEnemies.Assets`/`PlaySeeded`/`Cleanup` 为验收入口。
## 双足火焰施法伙伴适配(2026-10-21)
烈焰狮 `Config/Art/Companions/FlameLion.json` 为biped_short/flame_roar已验收样例:0.60m/2000tris/自身远程28骨。profile仍为双足;新attackStyle要求自身头颈/胸背/双臂与爪尖/双脚、鬃毛区域与≤2mm刚性预算,禁止套用火喵编号或按大头外观改成四足。
离线施法固定双脚与逻辑根,编辑头部前送/抬头、双爪前送/展开,开始与结束为Idle参考。QA对头鬃区实际网格扣除头骨刚性变换检查,对头部和双爪扣除胸背转动检查释放行为,并对两脚实际顶点测步幅/抬脚/支撑。不能只看脚骨或用身体前倾冒充施法。烈焰狮没有独立下颌或尾骨,本版无张嘴口型与独立尾摆;尾部58个源顶点跟随髋骨。
头鬃宽空间区域与尾部相邻时,bl_transfer_skin先执行skinRegions,再由精细skinOverrides测地距离覆盖,防止尾簇被头部或前臂带动。两种规则必须按自身网格检查,不能盲抄;此前已有伙伴未同时启用两种覆盖,其原单类行为不变。
烈焰狮先通过单Walk再补同rig Idle/Attack。25%Walk源变化导致左脚实际抬脚6.71mm失败,降至12%后11.91mm通过,未放宽门槛;两脚实际步幅48.66/67.37mm。Attack头前送16.24mm/抬头6.654°、双爪前送约6cm/外展约2cm,双脚支撑、鬃毛刚性及Edit/实际Play通过,0.6秒伙伴事件。详情见FlameLion/ProductionBrief.md。
本机TokenRig回退曾产出异常33骨长链,不可按生成回执直接当可用骨架。`rig_character_source.py --backend remote`要求远程回执且拒绝隐式本机回退;显存错误需保留诊断、验证GPU状态后重试,不停止其它服务。最终烈焰狮只接受DGXA28骨哈希。8项流程保护测试与火喵只读回归通过。
并排截图使用BuildEnemyReview.Capture隔离Prefab实例,在PreviewScene采样指定相位并异步等待渲染更新,避免已有Animator状态让Attack列显示旧Idle姿势;不改写或暂停真实验收场景。该方法已实际编译执行、峰值截图核对通过。
## 敌人攻击/受击表现衔接(2026-10-21)
五类正式敌人已接入8套攻击/命中特效与8条TangoFlux短音效,受击不再只有缩放。资产放在 `Assets/Bundles/Effects/EnemyCombat/` 和 `Assets/Bundles/Sound/SFX/EnemyCombat/`;完整方案见 [../Combat/EnemyCombatFx/Production.md](../Combat/EnemyCombatFx/Production.md)。继续制作敌人时需检查类型映射、攻击与目标命中位置、硬甲分类、音效开关及池回收;不能让动画事件扣血或把减速Pulse当成实际命中。现有规则即时结算与动画前摇的对齐属于下一阶段技能时序改造。