PS_AI_Agent/.claude/CLAUDE.md
j.foucher eeb0b1172b Rename plugin ElevenLabs → PS_AI_ConvAgent for multi-backend support
Separates generic systems (lip sync, posture, facial expression, mic)
from ElevenLabs-specific ones (conv agent, websocket, settings).
Generic classes now use PS_AI_Agent_ prefix; ElevenLabs-specific keep
_ElevenLabs suffix. CoreRedirects in DefaultEngine.ini ensure existing
.uasset references load correctly. Binaries/Intermediate deleted for
full rebuild.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-26 17:19:35 +01:00

1.9 KiB

PS_AI_Agent — Notes pour Claude

Plugin Rename (completed)

  • Plugin: PS_AI_Agent_ElevenLabsPS_AI_ConvAgent
  • Generic classes: ElevenLabs*PS_AI_Agent_* (e.g. UPS_AI_Agent_PostureComponent)
  • ElevenLabs-specific classes keep _ElevenLabs suffix (e.g. UPS_AI_Agent_Conv_ElevenLabsComponent)
  • CoreRedirects in DefaultEngine.ini handle .uasset references

Posture System — Diagonal Tilt Bug (à corriger)

Problème

Le tilt diagonal (ear-to-shoulder) est PLUS VISIBLE avec la neck bone chain qu'avec le mono-bone. Le swing-twist decomposition ne suffit pas.

Cause probable

Le swing-twist est fait une seule fois sur le tip bone (head), puis le CleanOffset est extrait via Swing * Inverse(TipBoneRot). Ce CleanOffset est ensuite distribué via Slerp à chaque bone de la chaîne. Mais chaque bone a une orientation locale différente — appliquer le même offset "world-space-like" à des bones avec des axes locaux différents peut réintroduire du tilt.

Piste de fix

Faire le swing-twist PER-BONE : pour chaque bone de la chaîne, composer le FractionalRot avec le bone's own rotation, swing-twist autour du bone's own tilt axis, puis appliquer le swing seulement.

Fichiers concernés

  • AnimNode_PS_AI_Agent_Posture.cpp — Evaluate_AnyThread, section multi-bone chain
  • Commit actuel: 8df6967 sur main

Config actuelle neck chain (BP_Taro)

neck_01=0.25, neck_02=0.35, head=0.40

Architecture Posture

  • PS_AI_Agent_PostureComponent (game thread) : cascade Eyes→Head→Body, produit FQuat + eye curves
  • AnimNode_PS_AI_Agent_Posture (anim thread) : applique rotation sur bone(s) + injecte curves
  • Pipeline 100% FQuat (pas de round-trip FRotator)
  • Thread safety via FCriticalSection
  • ARKit eye curves normalisées par range fixe (40°/35°), pas par MaxEye threshold
  • Body drift compensation: applied ONLY on first chain bone, AFTER swing-twist
  • Debug gaze: per-eye lines from Face mesh using Z-axis (GetAxisZ())