From d0fc9f70690e94f6f9ce18931c0a404742725e9b Mon Sep 17 00:00:00 2001 From: edujiro5972 <336072401+edujiro5972@users.noreply.github.com> Date: Fri, 2 Oct 2026 14:37:11 +0200 Subject: [PATCH] O7e : etude de l'integration d'une coiffure Fab (lecture seule) Co-Authored-By: Claude Opus 5.5 --- Docs/Migration/11_Audit_Optimisation.md | 33 +++++++++++++++++++++++++ Docs/Migration/Journal_Modifications.md | 1 + 2 files changed, 34 insertions(+) diff --git a/Docs/Migration/11_Audit_Optimisation.md b/Docs/Migration/11_Audit_Optimisation.md index 7b54be0..0ae324f 100644 --- a/Docs/Migration/11_Audit_Optimisation.md +++ b/Docs/Migration/11_Audit_Optimisation.md @@ -501,6 +501,39 @@ fichiers ont été déplacés vers `D:\Game\LifePlay_Backup_5.5\O7d\Content_Coll identiques à l'octet près. Contrôles : relecture des 13 fichiers, 13 545 chemins, 0 inconnu du registre ; l'éditeur les charge (`LogCollectionManager: Loaded 13 collections`). +### 16.6 O7e : intégrer une coiffure de Fab — étude (2026-10-02, lecture seule) + +Test d'intégration proposé par l'utilisateur : ajouter une coiffure de sa bibliothèque Fab. Relevés : `LPDumpFunction` +(`GI`, `Person`, `UI/Hairstyle`, tous graphes) et `LPDumpCDO` (`GI_C`). + +**Contrat d'une coiffure LifePlay** + +| Point | Constat | +|---|---| +| Liste des coiffures | `GI.HairstyleTable` : **valeur par défaut** du Blueprint (126 entrées), jamais construite par le jeu. Chaque entrée (`SMBool`) : chemin complet du maillage, `Bool` = coiffure masculine, `Daz` = coiffure Daz, `Strings` (zones de pilosité faciale). 88 entrées existent ; 35 coiffures d'avant Daz pointent vers des assets absents, déjà en 4.27, et ne sont jamais chargées (`LegacyPercentage` = 0). | +| Choix d'une coiffure | `GenerateAndApplyStrings`, catégorie `Hairstyle` : parcourt `HairstyleTable` et compare le **nom de l'objet** à la valeur lue (`HAIR Hairstyle: ToulouseHR`) ; tirage aléatoire parmi les entrées du bon sexe. Un maillage absent de la table n'est donc jamais utilisé, même désigné par nom. | +| Chargement | `GI.LoadHairMeshIfNeeded` : chargement à la demande depuis le chemin de la table. | +| Animation | `Person.HairSM.SetLeaderPoseComponent(corps)` : la coiffure suit le corps **par noms d'os**. Les coiffures existantes sont des `SkeletalMesh` à squelette propre de 20 à 27 os Genesis 8 (`hip`, `pelvis`, `abdomenLower`… `neckUpper`, `head`). | +| Forme | `Person.FitMorphableHair` (table `GI.MorphableHairs`) reporte les morphs du corps et du visage sur la coiffure (146 à 362 morphs par coiffure, ex. `ToulouseHR__CTRLFitness`). Sans ces morphs, la coiffure garde sa forme d'origine (risque de traverser une tête modifiée). | +| Couleur | paramètres de matériau `HairColor` et `HairThickness` (menu `UI/Hairstyle`, `GI.GetHairThicknessAndColor`). | +| Sauvegarde | les personnages (`.lpcharacter`) stockent la coiffure **par nom** : ajouter une entrée en fin de table ne change rien aux parties existantes. | + +**Bibliothèque Fab** : 34 coiffures. Les « grooms » MetaHuman (≈ 18) sont exclus : liés à la tête MetaHuman, et le +plugin `HairStrands` n'est plus actif dans le jeu depuis O1. Restent ≈ 12 maillages FBX/OBJ (Pocolov Hair 05, 06, 16, +17 ; Laflian ; NoEdge ; Carlos-H). Pocolov publie des coiffures Daz ; le rig Genesis du FBX reste à constater. + +**Intégration proposée (O7e)** + +1. Télécharger un produit (accord utilisateur), importer dans `/Game/Heavy/New5/Hairs/` (hors chemins fixes). +2. Si le FBX n'est pas riggé Genesis 8 : le rattacher à une chaîne d'os Genesis (poids entier sur `head`), squelette + propre comme les coiffures existantes ; matériau enfant d'un matériau de cheveux existant (`HairColor`, + `HairThickness`). +3. Ajouter une entrée en fin de `GI.HairstyleTable` par une commandlet dédiée (même méthode que + `LPSetComponentCollision` : essai à blanc, contrôle, diff `LPDumpCDO` avant/après = 1 entrée). +4. `BuildCollections.py` : la coiffure apparaît dans `LifePlay_Cheveux`. +5. Test en jeu : personnage `.lpcharacter` avec `HAIR Hairstyle: `, menu de création, suivi des animations. + Morphs de forme : hors périmètre du premier essai. + ## 17. Couche de données : stratégie (2026-10-02) Proposition utilisateur : convertir les fichiers texte de `Modules` en fichiers JSON groupés par type, avec un calque de diff --git a/Docs/Migration/Journal_Modifications.md b/Docs/Migration/Journal_Modifications.md index 60b9d3f..6b800fd 100644 --- a/Docs/Migration/Journal_Modifications.md +++ b/Docs/Migration/Journal_Modifications.md @@ -927,3 +927,4 @@ Validation L7c/L7d (2026-10-02, parc, même cadrage) : la nuit reste claire (sol | CHG-080 | 2026-10-02 | V1.3 | `README.md` : V1.3 en téléchargement principal (lien Mega), V1.2 et V1.1 en versions précédentes ; lien de la V1 retiré (archive supprimée de Mega faute d'espace, état git conservé par le tag `v1.0`) | lien V1.3 reçu | — | | CHG-081 | 2026-10-02 | O7d | nouveau `Tools/BuildCollections.py` ; 13 collections statiques `Content/Collections/LifePlay*.collection` (hors dépôt, régénérables) ; `11_Audit_Optimisation.md` §16.5, `08_Guide_Developpeur.md` §2.1, `09_Commandes_Utiles.md` §3 | suite d'O7 (choix utilisateur) : regrouper les 8 561 assets par thème dans l'éditeur sans renommer de dossier ; collection transversale `LifePlay_Chemins_Fixes` (4 984 assets à ne pas déplacer) ; 13 545 chemins, 0 inconnu, chargées par l'éditeur ; aucun asset modifié, pas de build | supprimer `Content/Collections/LifePlay*.collection` (`git checkout O7d-avant` pour le reste) | | CHG-082 | 2026-10-02 | O7d | `Tools/BuildCollections.py` : collections écrites dans `Saved/Collections` (locales) au lieu de `Content/Collections` (partagées) ; 13 fichiers déplacés vers `D:\Game\LifePlay_Backup_5.5\O7d\Content_Collections` puis régénérés (identiques) ; `11_Audit_Optimisation.md` §16.5, `08_Guide_Developpeur.md` §2.1 | avertissement à l'ouverture de l'éditeur (utilisateur) : une collection partagée exige un fournisseur de contrôle de révision, désactivé dans ce projet ; une collection locale n'en utilise pas ; validé par l'utilisateur le 2026-10-02 (plus d'avertissement) | `git checkout O7d-apres -- Tools/BuildCollections.py` et remettre les fichiers sauvegardés | +| CHG-083 | 2026-10-02 | O7e | `11_Audit_Optimisation.md` §16.6 | étude en lecture seule de l'intégration d'une coiffure Fab (demande utilisateur) : liste des coiffures = valeur par défaut `GI.HairstyleTable` (126 entrées, 35 absentes déjà en 4.27), suivi par noms d'os Genesis 8, morphs de forme facultatifs, sauvegardes par nom ; 34 coiffures Fab, ≈ 12 maillages utilisables | — (documentation) |