Appearance
手部独立控制模块(左手/右手)
系统概览
左手/右手独立控制模块。每侧提供手腕旋转(pitch/yaw/roll)、手臂位置偏移(handPosX/Y/Z)、手指预设(fingerPreset + fingerIntensity)三组参数。
核心职责
hand-modules.ts— 工厂模式,createHandModuleFactory(cfg)生成左右手模块。- 手腕旋转:静态
setBoneOverride写入手首骨骼。 - 手臂位置:帧钩子
registerBoneOverrideFrameHook每帧驱动,FK 父根骨平移 + IK 重解增强。 - 手指姿势:5 指 × 3 节静态 bake,预设 × 强度控制卷曲程度。
对外 API(节选)
LEFT_HAND_DEF: ModuleDef— 左手模块定义(priority=1)。RIGHT_HAND_DEF: ModuleDef— 右手模块定义(priority=1)。
与其他子系统关系
- 注册表:
./registry.ts(通过getBuiltinModuleDefs()注册)。 - 骨骼覆盖:
../bone-override.ts(setBoneOverride+setBoneOverridePosition+registerBoneOverrideFrameHook)。 - 帧钩子管理器:
createFrameHookManager()(./module-base.ts)。 - 模块基类:
createModuleBase+createModuleShell+prepareBake。 - 骨骼候选:
@/motion-algos/proc-motion-shared(BONE_ARM_IK_L/R_CANDIDATES、BONE_SHOULDER_L/R_CANDIDATES)。
管理骨骼
- 手腕:
左手首/右手首 - 肩根骨:
左肩/右肩 - 手指:
左/右+ 5 指名 + 6 节后缀 = 30 候选骨骼
不变量
- 左右手各自持独立
_handFrameHooksMap(按 modelId 键控,每侧只注册一次)——避免共享同一 Map 时createEnsureActive的has(modelId)幂等检查误判,导致后启用一侧的手臂位置偏移帧钩子永不注册(round-12 P1 修复)。 - 手臂 IK 缓存
_armIkCacheper-model 惰性查找。 - disable 时注销帧钩子 + clearBoneOverride 仅清 owned 骨骼。