LifePlay-Revival/Docs/Migration/etat/U58/U7b/U7b-T3-CART.md
edujiro5972 8084622450 LifePlay UE 5.8 : état de développement au 2026-10-19
Tickets : REP1-T4

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-19 22:57:42 +02:00

23 KiB
Raw Blame History

Fiche U7b-T3 — Niveau N3 — Modèle prévu lp-cart | utilisé claude-opus-5-5 — Agent lp-cart — Skills sk-protocol, lp-commandlets (chargés aussi : ue-cpp-build, lp-paths)

U7b-T3 — Les 28 avertissements « Ressource de la pose … n'est pas à jour » (UE 5.8) : cartographie

Lecture seule. Rien n'a été lancé (ni éditeur ni commandlet), rien n'a été modifié, rien n'a été commis. Seul ce fichier a été écrit. Moteur 5.8 lu : D:\Game\Launcher\Engine\UE_5.8 (5.8.3, CL 58210709, Engine/Build/Build.version). Moteur 5.5 lu : UE_5.5 (5.5.4).

1. Synthèse

  1. Ce n'est pas une régression 5.8 (établi). Les 28 mêmes avertissements existent sous UE 5.5.4, avec le même GUID stocké et le même GUID calculé. La phrase « 0 en 5.5 » de U5-T2-AVANT.md:9 repose sur la référence L7i du 2026-10-01. Or le pack FreeAnimationsPack n'a été ajouté que le 2026-10-05. La comparaison n'était donc pas valable (§ 4).
  2. Cause (établie par le code moteur). UPoseAsset::PostLoad compare le GUID stocké dans la pose (SourceAnimationRawDataGUID) au GUID recalculé à partir de son animation source. Ce contrôle n'est compilé que dans l'éditeur (#if WITH_EDITORONLY_DATA). Pour les 28 poses de démo Manny / Quinn, le GUID stocké ne correspond plus depuis la livraison du pack (paquets enregistrés en 5.3). Un resave ne recalcule pas ce GUID. Seul « Update Source » (UpdatePoseFromAnimation) le régénère (§ 3).
  3. Effet sur le jeu : nul (établi). Le pack est exclu de la cuisson (DirectoriesToNeverCook). Le journal de cuisson U5 n'en contient aucune mention, et aucun asset hors du pack ne référence les poses. Le contrôle n'existe pas dans un binaire cuit. Le journal du jeu en U6 en contient 0, en 5.5 comme en 5.8 (U6-T3-AB.md:50).
  4. Recommandation. Option A (« Update Source » par script Python éditeur sur les 28 poses de la copie 5.8, après instantané), précédée d'un essai décisif sur une seule pose. Repli : option D (ignorer, avec filtre des avertissements attendus). B est sans effet (déjà prouvé en U5). C est sans effet (déjà en place pour la cuisson) ou trop invasive (retrait du contenu). La décision appartient à l'utilisateur.

2. Les 28 avertissements (établi)

Sources :

  • Journal après resave : D:\Game\LifePlay-master 5.8\Saved\Logs\portage\U5_CompileAllBlueprints_20261008-203108.log.
    • Manny : lignes 2718–2731, émises au chargement de ABP_Manny_PostProcess (ligne 2717 « Loading and Compiling »).
    • Quinn : lignes 2736–2749, émises au chargement de ABP_Quinn_PostProcess (ligne 2735).
    • Récapitulatif LogInit : lignes 3029–3056. Bilan Success - 0 error(s), 28 warning(s) à la ligne 3058 : ce sont les seuls avertissements du passage.
  • Journaux avant resave : U5_CompileAllBlueprints_20261008-200207.log et …-201219.log, 28 lignes chacun.

Comptes :

  • grep -c "^\[[^]]*\]\[[^]]*\]LogAnimation: Warning: Ressource de la pose" <log> donne 28 pour chacun des 3 journaux U5.
  • Recomptage par chemin unique (grep -o "Ressource de la pose [^ ]*" | sort -u | wc -l) : 28 également, soit 14 Manny et 14 Quinn.

Texte moteur d'origine (anglais), Engine/Source/Runtime/Engine/Private/Animation/PoseAsset.cpp:1083 (5.8) : "PoseAsset {AssetName} is out-of-date with its source animation {SourceAsset} {Stored} vs {Found}". Ce texte est émis par UE_LOGF(LogAnimation, Warning, …) (ligne 1084). La version française est la traduction de la clé PoseAssetSourceOutOfDate.

Exemple de ligne complète (journal 203108, ligne 2718) : LogAnimation: Warning: Ressource de la pose /Game/FreeAnimationsPack/Demo/Characters/Mannequins/Rigs/Poses/Manny/Manny_calf_l_pose.Manny_calf_l_pose n'est pas à jour avec son animation source /Game/FreeAnimationsPack/Demo/Characters/Mannequins/Rigs/Poses/Manny/Manny_calf_l_anim.Manny_calf_l_anim 8E2B50DD07CBD0EC07FCDD7DE6C03CCF vs 1D634D8727C63225C22E9D7F4FA6C1E2

Toutes les poses et animations sont sous /Game/FreeAnimationsPack/Demo/Characters/Mannequins/Rigs/Poses/<Perso>/. Le Blueprint « émetteur » est celui dont le chargement déclenche le PostLoad de la pose : ABP_Manny_PostProcess pour Manny, ABP_Quinn_PostProcess pour Quinn. Chacun contient un nœud AnimGraphNode_PoseDriver et référence 14 poses (grep -ao sur les .uasset).

Le tableau a été produit par script à partir des journaux, sans recopie manuelle :

  • GUID stocké : 1er hash ;
  • GUID trouvé avant resave : 2e hash dans U1_LPAuditBlueprintCalls_20261008-145335.log (5.5.4) et dans U5_…-200207.log (5.8). Ces deux journaux sont identiques sur les 28 lignes (diff vide) ;
  • GUID trouvé après resave : 2e hash dans U5_…-203108.log.
# Perso Pose (…/Rigs/Poses/<Perso>/) Animation source GUID stocké GUID trouvé 5.5.4 et 5.8 avant resave GUID trouvé 5.8 après resave
1 Manny Manny_calf_l_pose Manny_calf_l_anim 8E2B50DD07CBD0EC07FCDD7DE6C03CCF CC78212CC2D05F60DB49B336943F61D9 1D634D8727C63225C22E9D7F4FA6C1E2
2 Manny Manny_calf_r_pose Manny_calf_r_anim 7894484DF77F696ECE86F5E48B21970F 8FE1687880D683625E543FF1464725DB E0B2D01A3946223C131E09195B080C5F
3 Manny Manny_clavicle_l_pose Manny_clavicle_l_anim 6CEA229F225BD38F08A7E79F1708B2C3 85F8EF1345C47A8C9C76736EC7A3FE90 14E8D54C13944109415935F4256A2C4D
4 Manny Manny_clavicle_r_pose Manny_clavicle_r_anim 5011953F65839BC59E3AB711A254A94E ADA1E6650A76F8713148B97EF6AF9A89 A5B15C429C01316F463D09E0D6693820
5 Manny Manny_foot_l_pose Manny_foot_l_anim E1CD278520DDF4FB187D1CBC17C34C12 27DE3409653F529F13DE46FBC2B19C83 448C04B7FACFD0356FEB53BAB78E3663
6 Manny Manny_foot_r_pose Manny_foot_r_anim 9B48B63BBAECCB8F6D4567982FCD3450 73E77D69CA585135BF157B81788D5D86 B4615E0AEE2C238A3D6E440F2090E5EB
7 Manny Manny_hand_l_pose Manny_hand_l_anim 9B42FC91272EF6C74D20196D6DFE60F4 AB6FD63C9D139264C0008EDBECC735F0 EC8E9E7236153A9769E75A67F8F5C4E9
8 Manny Manny_hand_r_pose Manny_hand_r_anim 23D2F7543DE7F7C42CEDA5C43C0F6FB1 93329CC316356DE7E397D2DEB2E3AFD1 56207E6B9D90A70472B8FDF3C596E99C
9 Manny Manny_lowerarm_l_pose Manny_lowerarm_l_anim C5886899902BFF210DE43F818588A597 011865FD95B823CF80CFFC7D480E61C6 580060AF49122B44A85554A39457F698
10 Manny Manny_lowerarm_r_pose Manny_lowerarm_r_anim 875F291D3A6E3ECDAF9BE4BCE6F094DD 1BB05015D9BFA1ECD7E35B013381E1BD CF1A5F5A4915261ED4BF3837AAC9C99E
11 Manny Manny_thigh_l_pose Manny_thigh_l_anim 44456FC574BD040D2281CA549C0C8191 4CB65F0128C1D0D989355D4955DCE16F 2C9E16368BC5337AA26408355D3F02C0
12 Manny Manny_thigh_r_pose Manny_thigh_r_anim 364BC1D823C760EAFC55654DBF9144FE E90CD50BD93DFBC0B3D7B8B240DA9861 401F21146275AD58FCE72FEA97F3C5F2
13 Manny Manny_upperarm_l_pose Manny_upperarm_l_anim E74586CE1E5E44B3F8048DBFC7950641 664563D92C58772CAB9EEAD42C191D1A F7D9E3082FD0C227554316675CAB98DE
14 Manny Manny_upperarm_r_pose Manny_upperarm_r_anim 63B9CCF17675B52E40416075E3A9DDE3 9AAB8175306B1E429602738D99BAB05C 8615091CAA1F7B42FC841A0F705E8894
15 Quinn Quinn_calf_l_pose Quinn_calf_l_anim BF93398AAD6D62DF112655B8ED3CF20E 5A55CD7B35467F4ADD5A6CC1B13D289D E93DCCE9D988EF7272F279839E33D057
16 Quinn Quinn_calf_r_pose Quinn_calf_r_anim D11B0FF3E4621425787FFC399F21396D 5468A5BB128F04D48B018D8E17FCBDC7 E75C10E44FD1FDC914810B0760E00274
17 Quinn Quinn_clavicle_l_pose Quinn_clavicle_l_anim 90AAB2AD3EA4047FBE7D2A7CE3811DF5 0437958046206607984E793A4BAB7891 D23181AE1DF1FA00F21F1E35BB97D138
18 Quinn Quinn_clavicle_r_pose Quinn_clavicle_r_anim DB3BE353909BB74F14506F1FB1BAB9A7 F280BF597FEBF701CAC3D3ACE24A4D61 1D22F04FBB0AE44F66E58D351BBD0EF3
19 Quinn Quinn_foot_l_pose Quinn_foot_l_anim 360E98B0F3906A082B5BA3BBA45E6C28 3ADAF7669471D3A979FEF2C51472E452 83D2730DEFBFD6DDAEEF78977E8F0F5D
20 Quinn Quinn_foot_r_pose Quinn_foot_r_anim 89448E65AE039761CBFCDEEC88DB6C82 3852C8B628D1BB773F0D538C598631A8 776F95E4E46CF3322E953E6A63C822EF
21 Quinn Quinn_hand_l_pose Quinn_hand_l_anim 2A557BC6687C70264FEDCEEDAF3D74BB E6F07F6D3BD0BE6E891C648D2A318C30 58D208DB13C68CB060DF5CEB574DC234
22 Quinn Quinn_hand_r_pose Quinn_hand_r_anim 2B22506D82674CF44564930E27D311D6 D5991895CD282302D41EF7F9F364FBAC 3FCEB9448C190BA93169A21C5CD414F2
23 Quinn Quinn_lowerarm_l_pose Quinn_lowerarm_l_anim 985499B159549072FA9713240591A554 427F2443D721BD92A5A93071F651FCEB 85E00A57FD4459ECCF93BD6F37987917
24 Quinn Quinn_lowerarm_r_pose Quinn_lowerarm_r_anim D1FE6DF936268DDC00C0C17E7F8BC69F 34A548CA4E486B5139BF249993DFCA51 750D21AD38A9FBC18E0682C45B730DF2
25 Quinn Quinn_thigh_l_pose Quinn_thigh_l_anim 8FD955B082A11940A2C9F05A42AAC255 6C031DEF5FE15B1E967C0D4F8A148FA8 1A137639E5FDCFA8D434FF7D49C6E07D
26 Quinn Quinn_thigh_r_pose Quinn_thigh_r_anim 402E6140D127A78E8862B816DFCBBE8B 632D5907227D4F63143AED122D634459 77EA10A74DE8CE458A0564D8030DE2FA
27 Quinn Quinn_upperarm_l_pose Quinn_upperarm_l_anim A497D2F503AC58C6B107EFCED5062AA7 C8F1E2335EFB744131777D8605D42BC5 D78B797C7850A25F651A1E87F61BA531
28 Quinn Quinn_upperarm_r_pose Quinn_upperarm_r_anim 799E453D1F53700BCBF31ADE6FE99CE5 45C9349E90CE819467A6664D9F8772D6 241B9C8C77E17A4F1599C7EEB108AD47

Contrôles sur les 28 lignes (script sur les extractions ; les fichiers intermédiaires sont dans le scratchpad, pas dans le dépôt) :

  • GUID stocké identique avant et après le resave : 28/28.
  • GUID trouvé différent avant et après le resave : 28/28.
  • GUID stocké différent du GUID trouvé après le resave : 28/28.

3. Mécanisme (sources 5.8, établi sauf mention)

Point Source Statut
Le contrôle est dans UPoseAsset::PostLoad (1013), à l'intérieur de #if WITH_EDITORONLY_DATA (1017 → #endif 1119). Il est actif seulement si le paquet a la version PoseAssetRawDataGUIDUpdate (1065) et si SourceAnimation n'est pas nul (1067). Il charge l'animation source (1070-1071) puis compare SourceAnimationRawDataGUID à GetSourceAnimationGuid() (1073-1074). PoseAsset.cpp:1013-1087, :1119 établi
Conséquence : aucun message dans un jeu cuit (WITH_EDITORONLY_DATA = 0). SourceAnimation lui-même n'existe qu'en éditeur. PoseAsset.h:347-354 (#if WITH_EDITORONLY_DATA, UPROPERTY(Category=Source, EditAnywhere) SourceAnimation, UPROPERTY() SourceAnimationRawDataGUID) établi
GetSourceAnimationGuid() met bIncludeTimingData = false quand la pose a été enregistrée avant la version AnimModelGuidGenerationSettings (= 54). Cette version est absente de 5.5 : grep = 0 dans UE_5.5/…/UE5ReleaseStreamObjectVersion.h. PoseAsset.cpp:2097-2117 ; Core/Public/UObject/UE5ReleaseStreamObjectVersions.inl:172 ; valeurs par défaut à 1 : IAnimationDataModel.h:355 établi
Explication du changement du 2e hash au resave U5. Avant le resave, les paquets venaient de 5.3 (chaîne ++UE5+Release-5.3 dans Manny_calf_l_pose.uasset de la copie 5.5) : calcul sans le timing, d'où le même hash qu'en 5.5. Après le resave (++UE5+Release-5.8, 2026-10-08 20:28), la version est ≥ 54 : calcul avec le timing, d'où un autre hash. Le hash stocké, lui, ne bouge pas. code ci-dessus + grep -ao "++UE5+Release-5\.[0-9]*" sur les .uasset des deux copies établi
Le resave ne peut pas corriger : PreSave n'appelle que UpdateRetargetSourceAssetData(), et rien dans Serialize ne touche le GUID. PoseAsset.cpp:1125-1144 ; constat U5 U5-T3-RESAVE.md:95-97 (28 avant, 28 après) établi
Seul CreatePoseFromAnimation réécrit le GUID stocké (1676) et marque la pose comme régénérée (1674, GRegeneratedPoseAssets, ce qui force le calcul avec le timing, 2107-2111). Il est appelé par UpdatePoseFromAnimation (1681-1710), qui est UFUNCTION(BlueprintCallable). PoseAsset.cpp:1582-1710 ; PoseAsset.h:446-448 établi
Le bouton éditeur « Update Source » (panneau Détails de la pose) appelle PoseAsset->Modify() puis UpdatePoseFromAnimation(SourceAnimation). Editor/DetailCustomizations/Private/PoseAssetDetails.cpp:315-316, :646-658, libellé :719 établi
BreakAnimationSequenceGUIDComparison() (qui invalide le GUID) n'est pas une UFUNCTION et n'est donc pas accessible depuis Python. PoseAsset.h:535, PoseAsset.cpp:1353-1356 établi
Pourquoi le GUID stocké était déjà faux dans le pack livré : soit Epic a généré les poses avec un ancien calcul de GUID, soit les _anim ont été réenregistrées après coup. On ne peut pas trancher. Le défaut est connu sur le contenu mannequin et MetaHuman d'Epic (voir § 6). — estimé / incertain (sans incidence sur le correctif)

4. Le défaut existait-il en 5.5 ? Oui (établi)

  • La référence L7i (etat/portage55/L7i/L7i_CompileAllBlueprints_20261001-191653.txt, journal complet D:\Game\LifePlay-master 5.5\Saved\Logs\portage\L7i_CompileAllBlueprints_20261001-191653.log:1741 : 0 warning(s)) ne contient aucune mention de FreeAnimationsPack (grep -c = 0) : 269 BP compilés contre 410 en U5.
  • Date du dossier Content\FreeAnimationsPack dans la copie 5.5 : 2026-10-05 15:59 (ls --time-style=full-iso). Le pack est donc postérieur à L7i (2026-10-01). Aucun CompileAllBlueprints 5.5 n'a été lancé après cette date (12 journaux, le dernier est L7i).
  • Preuve directe en 5.5 : D:\Game\LifePlay-master 5.5\Saved\Logs\portage\U1_LPAuditBlueprintCalls_20261008-145335.log, moteur 5.5.4-40574608 (ligne 290). On y trouve 28 lignes « Ressource de la pose », 28 uniques, avec des hashes identiques à ceux de 5.8 avant resave (diff vide sur les 28). Bilan : Success - 0 error(s), 29 warning(s) (ligne 1288).
  • À corriger dans la documentation (je n'y ai pas touché) : U5-T2-AVANT.md:9 (« Nouveauté vs 5.5 … 0 en 5.5 ») et la mention « nouveauté » qui en dépend.

5. Les assets, la cuisson et les références (établi)

  • 28 *_pose.uasset et 28 *_anim.uasset sous Content\FreeAnimationsPack\Demo\Characters\Mannequins\Rigs\Poses\{Manny,Quinn} (find … | wc -l = 28 / 28). Ce sont des assets de démo Epic (pack Fab « FreeAnimationsPack »), ignorés par git (U5-T1-CART.md:22,80).

  • Chaîne de références :

    De Vers Preuve
    SKM_Manny ABP_Manny_PostProcess (anim BP de post-traitement) grep -ao
    SKM_Quinn ABP_Quinn_PostProcess grep -ao
    ABP_*_PostProcess 14 poses chacun (PoseDriver) grep -ao
    chaque pose son _anim SourceAnimation
  • Références depuis l'extérieur du pack (grep -rla "FreeAnimationsPack/Demo/Characters/Mannequins" sur tout Content en 5.8, hors pack) : 3 paquets seulement, Retarget_ue5/IK_Source_ue5, RTG_Bridget_ue5, RTG_Michael_ue5, tous vers Meshes/SKM_Manny.

    • Aucun paquet hors Retarget_ue5 ne référence /Game/Retarget_ue5. Résultat nul, mais la méthode est validée par un contrôle positif : 5 auto-références dans le dossier.
    • Rien hors du pack ne référence SKM_Quinn.
  • Cuisson : Config/DefaultGame.ini:55 +DirectoriesToNeverCook=(Path="/Game/FreeAnimationsPack") et :57 …/Game/Retarget_ue5 (copie 5.5 : lignes 52 et 54).

    • U5_Cook_20261008-211802.log : 0 occurrence de FreeAnimationsPack et 0 « Ressource de la pose ».
    • Saved\Cooked\Windows\LifePlay\Content ne contient ni FreeAnimationsPack ni Retarget_ue5.
  • Chaîne d'animation de l'atelier : RetargetPack.py (addon) produit les RTG_*_ue5 avec SKM_Manny comme maillage source.

    • L'export par lot (duplicate_and_retarget, donc IKRetargetBatchOperation) évalue la source avec UAnimPoseExtensions::GetAnimPoseAtFrame et OptionalSkeletalMesh : un simple FBoneContainer, sans composant ni anim instance. L'ABP de post-traitement (et donc les poses) n'intervient pas dans les clips produits.
    • Sources : Plugins/Animation/IKRig/Source/IKRigEditor/Private/RetargetEditor/IKRetargetBatchOperation.cpp:456-477 ; Editor/AnimationBlueprintLibrary/Private/AnimPose.cpp:627-680 (aucun Component ; les seuls composants du fichier sont aux lignes 493-523, dans EvaluateAnimationBlueprintWithInputPose).
    • Statut : établi pour le chemin du lot. L'aperçu dans le viewport de l'éditeur de reciblage peut, lui, exécuter le post-traitement : incertain, sans effet sur les clips.

6. Recherche web (sources tierces = données)

  • https://forums.unrealengine.com/t/594063 (« Warning: PoseAsset XXX is out-of-date with its source animation ») :
    • correctif = bouton « Update Source » de la pose (post 4, 2022) ;
    • traitement en lot par UpdatePoseFromAnimation (AssetActionUtility, post 5 ; script Python MIT, post 16, 2025) ;
    • autre contournement : vider Source Animation (post 4) ;
    • plantages signalés de « Update Source » en éditeur (posts 4 et 18) ;
    • action de menu contextuel « update source animation » signalée en 5.5 (post 17) : non retrouvée dans les sources 5.8 lues (incertain).
  • https://forums.unrealengine.com/t/768165 (post 2, UE 5.1) : même avertissement sur …/Mannequins/Rigs/Poses/Manny/Manny_upperarm_r_pose dans un contenu tiers qui reprend le rig mannequin d'Epic. Indice que le contenu mannequin d'Epic est livré dans cet état (estimé).
  • Recherche faite par curl sur l'API Discourse du forum (search.json, t/<id>.json), car aucun outil de recherche web n'était disponible.

7. Options

Réversibilité commune : Content est hors git pour ce pack. Retour arrière par Tools\Snapshot.ps1 / Restore.ps1 de la copie 5.8, avant toute écriture. L'instantané U5 D:\Game\LifePlay_Backup_5.5\U5\manifest.csv contient déjà 155 entrées FreeAnimationsPack, à l'état d'avant le resave.

A — Régénérer les 28 poses depuis leur animation (« Update Source »), par script Python éditeur (recommandée)

  • Principe.
    • Lancer -run=pythonscript (avec -FullStdOutLogOutput) sur la copie 5.8, éditeur fermé.
    • Pour chaque *_pose du dossier : anim = pose.get_editor_property("source_animation"), puis pose.modify(), puis pose.update_pose_from_animation(anim), puis unreal.EditorAssetLibrary.save_loaded_asset(pose, False).
    • Mode -DryRun d'abord : liste des 28, animation source non nulle, même squelette. Le compte trouvé doit être égal à 28.
    • Les noms Python sont estimés à partir de la UFUNCTION et de la UPROPERTY (pas de stub Intermediate/PythonStub/unreal.py). Le DryRun les confirme.
  • Effet attendu. Le GUID stocké devient le GUID calculé avec le timing (PoseAsset.cpp:1674-1676). Après enregistrement en 5.8, le paquet a la version ≥ 54, donc le calcul au rechargement inclut aussi le timing. Les deux GUID devraient correspondre : 28 → 0 avertissement (estimé, à confirmer par l'essai).
  • Effort. Environ 1 h : script d'environ 40 lignes, instantané, DryRun, exécution, CompileAllBlueprints de contrôle.
  • Risques.
    1. Les données des poses sont recalculées depuis les _anim. Si celles-ci diffèrent des poses enregistrées, les correctifs PoseDriver des démos Manny / Quinn changent. Impact limité à la démo et à l'aperçu éditeur, aucun sur le jeu ni sur les clips (§ 5).
    2. Plantage possible signalé sur le forum. En commandlet, un plantage ne laisse aucun paquet partiellement écrit (estimé) : retour par l'instantané.
    3. Une réimportation du pack depuis Fab ramènerait les avertissements.
  • Effet sur la cuisson et le jeu : aucun (pack non cuit, contrôle réservé à l'éditeur).
  • Variante A-bis. Vider source_animation sur les 28 poses : le contrôle est ignoré (PoseAsset.cpp:1067) et les données des poses restent intactes. On perd en revanche le lien vers la source, et donc toute régénération future. Effort et risque plus faibles que A, mais cela masque le défaut sans le corriger.

B — Resave ciblé : à écarter (établi sans effet)

Le resave U5 a déjà touché ces 28 paquets : le GUID stocké est inchangé (28/28) et il reste 28 avertissements (U5-T3-RESAVE.md:95-97). Le code de PreSave / Serialize ne touche pas le GUID (PoseAsset.cpp:1125-1144).

C — Retirer les assets de démo de la cuisson : déjà fait, sans effet sur l'avertissement

  • La cuisson exclut déjà le pack (DefaultGame.ini:55), et l'avertissement est émis par l'éditeur, pas par la cuisson.
  • Variante « retirer du contenu » (déplacer vers Backup_5.5\U7b) : elle casse Retarget_ue5 → SKM_Manny → ABP_Manny_PostProcess → poses Manny. Il faudrait aussi modifier le PostProcessAnimBlueprint de SKM_Manny.
  • Seule la branche Quinn (SKM_Quinn, ABP_Quinn_PostProcess, poses Quinn) n'est pas référencée hors du pack. Mais ABP_Quinn, SK_Mannequin, CR_Mannequin_Procedural et les MF_* du pack la référencent.
  • Effort moyen, risque moyen, gain de 14 avertissements seulement. Non recommandée.

D — Ignorer, avec justification (repli)

  • Justification. Le défaut existe en 5.5.4 depuis l'ajout du pack. Il est réservé à l'éditeur, le pack n'est pas cuit, et le journal du jeu U6 en contient 0. Il s'agit d'un défaut connu du contenu d'Epic.
  • Effort. Documentation seulement, plus un filtre « avertissements attendus = ces 28 chemins » dans la ligne de base VAL de CompileAllBlueprints. Sans ce filtre, 28 avertissements de bruit masquent les nouveaux.
  • Risque. Nul pour le jeu. Le bruit reste au journal.

8. Recommandation et essai décisif

  • Recommandation. Option A sur la copie 5.8 seulement. Le pack n'est pas cuit : la copie 5.5 n'a pas besoin du correctif, mais elle garde le défaut. Ordre : instantané → DryRun → essai sur une pose → généralisation. Si l'essai plante ou modifie fortement les données, passer à D (ou A-bis si l'utilisateur veut un journal propre sans toucher aux données).
  • Essai décisif (à lancer par un agent d'exécution, après accord) :
    1. Snapshot.ps1 sur Content\FreeAnimationsPack\Demo\Characters\Mannequins\Rigs\Poses.
    2. LPDumpAssets (-List= réduit à Manny_calf_l_pose) : photo « avant ».
    3. Script Python A en -DryRun : 28 trouvées, 28 avec une animation source valide.
    4. Script A réel sur Manny_calf_l_pose uniquement.
    5. CompileAllBlueprints : PASS si 27 avertissements et aucune ligne Manny_calf_l_pose.
    6. LPDumpAssets « après » et diff (GUID filtrés) : mesure de la variation des données de pose (PoseContainer).
    • Le critère qui tranche est le résultat de l'étape 5 (27 au lieu de 28), et l'étape 6 donne le risque réel sur les données. Si l'étape 4 plante, Restore.ps1, puis option D.
  • Points d'appel à casser (pour l'agent d'exécution) : UPoseAsset::SourceAnimationRawDataGUID (réécrit uniquement par CreatePoseFromAnimation, PoseAsset.cpp:1676) ; entrée publique UpdatePoseFromAnimation (PoseAsset.h:446-448) ; déclencheur UPoseAsset::PostLoad (PoseAsset.cpp:1065-1087).