30 KiB
Fiche CAM-B1e-CART — Niveau N3 — Modèle prévu opus | utilisé Sonnet 5.5 (claude-sonnet-5-5) — Agent lp-cart — Skills sk-protocol, lp-paths, lp-ue-compat
CAM-B1e-CART : rendu première personne natif UE 5.8, tête de Person, trois options (2026-10-13)
Lecture seule : aucun éditeur, aucun MCP, aucun commandlet, aucun build, aucun git en écriture ; seul ce livrable est écrit.
Moteur lu : D:\Game\Launcher\Engine\UE_5.8\Engine\Build\Build.version = 5.8.3, changelist 58210709, branche ++UE5+Release-5.8
(sources Engine\Source\Runtime\{Engine,Renderer,RenderCore} présentes : environnement complet pour la lecture).
Faits relus le 2026-10-13. Fiche scindée par le barème (S = 4) : cartographie et options ici, pas de SPEC d'implantation.
1. Objet et périmètre
Un domaine : comment obtenir, dans LifePlay sous UE 5.8, une vue à la première personne propre (ni dents, ni langue, ni mèches) pour la vue C1 de Room (CAM-B1-IMPL.md:22, § 6, § 7) et pour la POV de sexe de PC (CAM-T2-CART.md:137-141). Questions (a) à (e) de la fiche. Hors périmètre : écrire la SPEC, toucher Config / Content / Source, trancher à la place de l'utilisateur.
Capture de l'utilisateur (...\ebc15012-...\images\2.webp, horodatée 2026-10-13 15:32:11, 315 178 o ; relue avec Read) : vue plongeante
sur un buste en vêtement vert ; un disque rouge et rose portant des dents blanches et une langue flotte au centre haut ; un anneau violet
(encolure estimée) sous lui ; des mèches noires plates dans les quatre coins ; des lambeaux de peau rose à gauche et à droite ; l'IHM du jeu
(« What should I do? », Translate, Timeout, Skip). Le build qui a produit la capture n'est pas identifié (elle date de 15 h 32, après les builds
B1d 09 h 51 et B2 13 h 36, avant la VAL B2b de 16 h 14) : incertain.
2. Commandes et lectures (exactes, avec compte brut)
| # | Commande ou lecture | Compte / sortie brute |
|---|---|---|
| 1 | Grep \[(SCS|CDO|INH)[^\]]*\]|=== /Game sur CAM-T4_LPDumpComponents_20261011-004910.txt |
13 lignes : === 121 et 2600, [CDO] 122 et 2601, [SCS] 123, 415, 707, 906, 986, 1185, 1384, 1583 et 2602 (le journal contient le dump deux fois) = 8 composants SCS distincts, tous parent=CharacterMesh0 |
| 2 | Read de ce dump, l. 906-985 | FirstPersonSM (FirstPerson_C) : propriétés de UCameraComponent (l. 907-936) |
| 3 | Grep HairSM|FirstPersonSM|HideBone|ObtenirMesh|GetMesh sur ST/STE/dumps/PC__EventGraph.txt |
28 lignes ; seuls 3 nœuds variable 'HairSM' (l. 2281, 2290, 2299), HideBoneByName l. 2318, UnHideBoneByName l. 2327 et 2335 |
| 4 | Grep LeaderPose|MasterPose|AddComponent|SetSkeletalMesh|SetSkinnedAsset|OwnerNoSee|OnlyOwnerSee|MorphTarget sur ST/STE/dumps |
0 fichier (aucun SetOwnerNoSee dans les dumps STE) |
| 5 | Grep des mêmes motifs (sans MorphTarget) sur Docs/Migration/etat (**/*.{md,txt}) |
856 occurrences dans 71 fichiers (liste limitée à 40 ; dumps L6f, STG, PawnDyn, AP5, CAM) |
| 6a | Grep FirstPerson|bOwnerNoSee|OwnerNoSee|OnlyOwnerSee sur Source |
0 résultat : aucun code C++ du jeu ne touche au rendu première personne |
| 6b | Grep (?i)teeth|tongue|dents|langue|eyelash|cils|eyebrow|sourcil sur Source |
0 résultat |
| 7 | Grep PROJECT_CVAR sur Source |
0 résultat |
| 8 | ls -l "D:/Game/LifePlay-master 5.8/Content/Scenes/" |
437067 CentralLondon.umap ; 43149 CentralLondon_BuiltData.uasset |
| 9 | git -C ... ls-files Content/Scenes ; git -C ... cat-file -s HEAD:Content/Scenes/CentralLondon_BuiltData.uasset |
2 fichiers suivis ; 43149 |
| 10 | Glob Content/**/*_BuiltData* ; Glob Content/**/*.umap |
1 fichier (CentralLondon_BuiltData.uasset) ; 2 cartes (CentralLondon.umap, FreeAnimationsPack/Map/Overview.umap) |
| 11 | Grep -o (Lightmap|LightMap|ShadowMap|...)[A-Za-z0-9_]* sur CentralLondon_BuiltData.uasset |
ShadowMapFlags, Lightmap0, Lightmap1, LightMapTexture2D, Lightmap_0, Lightmap_1, ShadowMapTexture2D (« binary file matches ») |
| 12 | Grep -o noms de lumières sur CentralLondon.umap |
DirectionalLight, SkyLight (SkyLight_3), PointLight, PointLight2, SkyAtmosphere, PostProcessVolume |
| 13 | Grep -o B_(Mouth|Eyelashes|...)\b|Cornea sur Content/Heavy/Daz/Bridget/bridget_gp.uasset |
l. 31 : B_Arms, B_Eyelashes, B_Face, B_Legs, B_Mouth, B_Pupils, B_Sclera, B_Torso (deux fois chacun) ; l. 5 Cornea ; l. 6 EyeMoisture ; l. 31 Transparent |
| 14 | Glob Content/Heavy/Daz/Bridget/* ; .../Michael/* |
Bridget : 49 fichiers dont B_Mouth, B_Eyelashes, B_EyeMoisture, B_Pupils, B_Sclera, Cornea, Transparent, DazSkinHide ; Michael : M_Arms, M_Eyelashes, M_Face, M_Genital, M_Legs, M_Torso, FacialHair_Skeleton, aucun matériau de bouche ni d'yeux |
| 15 | Grep DazSkinHide sur Content |
0 fichier (aucun actif ne le référence) |
| 16 | WebSearch puis WebFetch https://dev.epicgames.com/documentation/en-us/unreal-engine/first-person-rendering |
page lue (résumé par WebFetch), recoupée avec les sources du moteur (§ 3.c) ; 1 recherche + 1 page : moins de la moitié du budget |
| 17 | Lectures du moteur 5.8 | fichiers et lignes cités en § 3.b, 3.c, 3.d |
3. Constats fichier:ligne
3.a Composition de la tête de Person
- Composants de Person (SCS), 8 :
PenisSM(SkeletalMeshComponent, CAM-T4_LPDumpComponents_20261011-004910.txt:123),HairSM(:415),DirtyTalkSM(WidgetComponent, :707),FirstPersonSM(FirstPerson_C, :906),CensoreSM(:986),CensoreBoobsSM(:1185),ButtonSM(WidgetComponent, :1384),ParticleSM(ParticleSystemComponent, :1583). Aucun composant de dents, langue, yeux, cils, sourcils. Établi. - Maillage de base :
Mesh=CharacterMesh0(hérité, parent de tous les SCS ci-dessus). Pour la femme,bridget_gpporte dans ses chaînes les emplacements de matériauB_Mouth,B_Eyelashes,B_Pupils,B_Sclera,Cornea,EyeMoisture(Content/Heavy/Daz/Bridget/bridget_gp.uasset l. 5, 6, 31) : estimé que dents, langue, cils et yeux sont des sections du même SkeletalMesh que le corps (le découpage en sections n'a pas été lu dans l'éditeur). Pour l'homme,Content/Heavy/Daz/Michaeln'a aucun matériau de bouche ou d'yeux (Glob, ligne 14 du § 2) : incertain. - Suivi de pose :
Person::UserConstructionScriptposeSetLeaderPoseComponent(Mesh)surPenisSMetHairSM(portage55/L6f/L6f_dump_Person.txt:1-19 ; dump du 2026-09-30, non relu sur HEAD).HairSMreçoit le mesh de coiffure parSetSkinnedAssetAndUpdate(HairSM, PickedHair)(ST/STG/dumps/Person__EventGraph.txt:1956-1961). - Composants dynamiques (vêtements et accessoires) :
Person::NewProxycrée unSkeletalMeshComponent(AddComponent, L6f_dump_Person.txt:1857-1866), l'attache àMesh(K2_AttachToComponent, Parent = Mesh, KeepRelative, :1867-1877), lui donneMeshpour leader (SetLeaderPoseComponent, :1927-1933),SetCastShadow(false)(:1945-1949),SetRenderCustomDepth(true)(:1940-1944),bUseAttachParentBound(:1934-1938),SetBoundsScale(3)(:1950-1954).Person::ClearSMCsdétruit les descendants deMeshdont le nom ne finit pas parSM(ST/STE/dumps/Person__ClearSMCs_D4.txt:97-137) : les proxys sont donc des enfants deMeshnommés sans suffixeSM. Le mesh de chaque proxy vient d'une structure de la table de tenues (STG Person__EventGraph.txt:2166-2171, lien avec NewProxy estimé). - Ce que masquent les vues actuelles : C1 (Room) :
HairSM.SetVisibility(false)puisHideBoneByName(PlayerCharacter.Mesh, 'neckLower', PBO_None)(CAM-B1-IMPL.md:22, § 6 l. 87-88), caméra au milieu delEyeetrEye(§ 7 l. 106-109). POV de sexe (PC) :HairSM(CurrentActor).SetVisibility(false)(ST/STE/dumps/PC__EventGraph.txt:2290-2298,CurrentActoren :2278-2280) puisHideBoneByName(CurrentActor.Mesh, 'neckLower', PBO_None)(:2315-2323), rétablis en :2281-2289 et :2324-2339. Rien d'autre n'est traité : pas de proxy, pas deSetOwnerNoSee(ligne 4 du § 2), pas de matériau. - Ce que
HideBoneByNamecouvre vraiment (écart à la fiche : « un os masqué n'affecte que le maillage qui le porte » est inexact pour les suiveurs) :HideBoneByName→HideBonen'agit que siShouldUpdateBoneVisibility(), c'est-à-dire si le composant n'a pas de leader (SkinnedMeshComponent.cpp:4482-4490, 4424-4433, 2121-2123) ; les enfants de l'os passent enBVS_HiddenByParent(:2145-2161).- Un suiveur lit les états de son leader (SkinnedMeshSceneProxyDesc.cpp:438) et masque l'os de même nom (
LeaderBoneMappar nom, SkinnedMeshComponent.cpp:3470-3500 ; SkeletalRender.cpp:477-487). DoncHairSM,PenisSMet les proxys suiveurs deMeshsont masqués pour les os qu'ils partagent. - Non couverts (établi dans le code, application au jeu estimée) : (1) un os absent du squelette du leader n'est pas masqué (SkeletalRender.cpp:494-505, pose de référence) ; (2) un composant sans leader ; (3) un composant non skinné (widgets, particules, static mesh) ; (4) un os masqué n'est pas supprimé : sa matrice devient celle du parent mise à l'échelle 0 (SkeletalRender.cpp:484-487), donc un sommet pondéré à la fois sur un os masqué et sur un os visible reste étiré (lambeaux roses : estimé).
- Pourquoi des dents et de la langue restent visibles malgré
neckLowermasqué n'est pas établi : si elles sont des sections deMeshpondérées sur des os descendants dehead, elles devraient disparaître (os deheadsousneckLower:lEyeetrEyesont soushead, CAM-B1-IMPL.md:110-113). Hypothèses : H1 un composant dynamique à squelette différent ou sans leader ; H2 des sommets à pondération mixte ; H3 un autre acteur proche que celui dont la tête est masquée. Essai qui trancherait : § 5, point 1.
3.b FirstPersonSM et la caméra réellement utilisée
FirstPersonSMest un composant caméra : classeFirstPerson_C(Blueprint, Content/BPs/FirstPerson.uasset, 6 348 o, CAM-T2-CART.md:47 ; la chaîneCameraComponenty figure) ; le dump liste les propriétés deUCameraComponent:FieldOfView = 90(CAM-T4_LPDumpComponents_20261011-004910.txt:907),OrthoWidth(:910),AspectRatio(:917),bUsePawnControlRotationvide = faux (:929),PostProcessSettings(bloom 0, SSR qualité 100, occlusion ambiante 1 : :935),RelativeRotation = (90,90,0)(:943),bAutoActivate = True(:977). Ni StaticMesh ni SceneComponent porteur : établi.- Premier-personne natif désactivé :
FirstPersonFieldOfView = 90,FirstPersonScale = 1(:908-909) ;bEnableFirstPersonFieldOfViewetbEnableFirstPersonScalevides = faux (:930-931) ;FirstPersonPrimitiveTypeduPenisSMà la valeur par défaut =None(:335). Aucun code du jeu n'y touche (lignes 6a du § 2). - Caméra de C1 :
SetViewTargetWithBlend(GI.PC, GI.PlayerCharacter)(CAM-B1-IMPL.md:22) : le moteur prendPlayerController->GetViewTarget()comme acteur de vue (LocalPlayer.cpp:874), puisAActor::CalcCamerautilise la première caméra active de l'acteur (Actor.cpp:3688-3703 ;bFindCameraComponentWhenViewTarget = truepar défaut, Actor.cpp:320). Person n'a qu'une seule caméra (liste SCS, § 3.a) etFirstPersonSMest active (bAutoActivate) : la caméra de C1 est doncFirstPersonSMdePlayerCharacter. Établi, sauf la valeur debFindCameraComponentWhenViewTargetsur Person (non lue ; défaut moteur). - Caméra de la POV de sexe :
SetViewTargetWithBlend(GI.PC, CurrentActor),CurrentActor = SexPersons[SexCameraIndex](CAM-T2-CART.md:137-140, PC:1788-1796 ; dump PC__EventGraph.txt) : même composant, celui de l'acteur filmé. Le regard souris faitAddWorldRotation(FirstPersonSM)(PC__EventGraph.txt:1896-1903).FirstPersonSMest partagé entre C1 et la POV (CAM-SPEC.md:150, R9). Conséquence : un réglage « première personne » côté caméra se pose à un seul endroit (le composant ou ses valeurs par défaut dansFirstPerson.uasset).
3.c Rendu première personne natif d'UE 5.8 (sources installées)
- Caméra (
Engine\Classes\Camera\CameraComponent.h) :FirstPersonFieldOfView(float,BlueprintReadWrite, :51-52) etSetFirstPersonFieldOfView(BlueprintCallable, :53-54) ;FirstPersonScale(float 0,001 à 1,0,BlueprintReadWrite, :59-60) etSetFirstPersonScale(BlueprintCallable, :61-62) ;bEnableFirstPersonFieldOfView(:207-211) etbEnableFirstPersonScale(:213-217), settersSetEnableFirstPersonFieldOfViewetSetEnableFirstPersonScale(BlueprintCallable). Défauts : 90, 1, faux, faux (Private\Camera\CameraComponent.cpp:79-80, 97-98) ;GetCameraViewrecopie dans la vue (:475-477) :bUseFirstPersonParameters = bEnableFirstPersonFieldOfView || bEnableFirstPersonScale. Le moteur en fait une matrice de vue (SceneView.cpp:742-757 : échelle(FOVCorrectionFactor, FOVCorrectionFactor, 1) × Scalevers la caméra) viaFFirstPersonParameters(LocalPlayer.cpp:914). - Primitive (
Engine\Classes\Components\PrimitiveComponent.h) :enum class EFirstPersonPrimitiveType { None, FirstPerson, WorldSpaceRepresentation }(:151-162) ; propriétéFirstPersonPrimitiveType(EditAnywhere, AdvancedDisplay, BlueprintReadOnly, :728-730) ; setter d'exécutionSetFirstPersonPrimitiveType(EFirstPersonPrimitiveType),UFUNCTION(BlueprintCallable, Category="Rendering")(:2118-2120).SetOwnerNoSee(bool)aussiBlueprintCallable(:1951-1953) ;bOwnerNoSee: « n'est pas visible quand l'acteur de vue est le propriétaire du composant, directement ou indirectement » (:495-496) ; le test estbOwnerNoSee && bOwnersContain(PrimitiveSceneProxy.cpp:1588, 1672). - Ce que fait chaque type :
FirstPersonutilise le champ de vision et l'échelle de la caméra et désactivebCastDynamicShadow,bCastStaticShadow,bCastVolumetricTranslucentShadow,bCastFarShadow(PrimitiveSceneProxy.cpp:631-641) ;WorldSpaceRepresentationforcebOwnerNoSee = trueetbCastHiddenShadow = false: « ignoré par le rendu d'ombres ordinaire, repris par le chemin spécial des ombres virtuelles » (PrimitiveSceneProxy.cpp:642-649 ; PrimitiveComponent.h:159-160). Le mode natif ne retire donc aucune partie du corps : il change la projection et le routage des ombres. La seule mécanique native qui cache un composant à la vue de son propriétaire estbOwnerNoSee, valable au niveau du composant, jamais d'un os ni d'une section. - Matériaux : nœud
First Person Output(UMaterialExpressionFirstPersonOutput, entréeFirstPersonInterpolationAlpha, sortie « FirstPersonOutput » par sommet, Private\Materials\MaterialExpressionsToMIR.cpp:5160-5163) ;Transform PositionavecTRANSFORMPOSSOURCE_FirstPersonTranslatedWorldetFirstPersonInterpolationAlphaoptionnel (MaterialExpressions.cpp:11280-11282) ; nœudIs First Person(MaterialExpressionIsFirstPerson.h, inclus MaterialExpressions.cpp:310), évalué sur le drapeau de primitive (PRIMITIVE_SCENE_DATA_FLAG_IS_FIRST_PERSON, Engine\Shaders\Private\MaterialTemplate.ush:3932-3938), donc indépendant du bit GBuffer ; la lecture de scèneIsFirstPerson(MaterialTemplate.ush:3417) passe, elle, par le GBuffer (DeferredShadingCommon.ush:456). - CVars (Renderer\Private\Shadows\FirstPersonSelfShadow.cpp) :
r.FirstPerson.SelfShadow(défaut 0, :13-17),r.FirstPerson.SelfShadow.LightTypes(0 directionnelles, 1 locales, 2 toutes ; défaut 0, :19-23),.DownsampleCheckerboardMode(:25-29),.MaxTraceDistance(100, :31-35), puis.MaxHZBTraceIterations,.RelativeDepthThickness,.MinimumHZBTraceOccupancy,.BilateralFilterDepthThreshold,.RawFullResolution(:37-62) ;r.FirstPerson.Shadow.Virtual.Clipmap(défaut vrai, ShadowScene.cpp:28-33),r.FirstPerson.Shadow.Virtual.Clipmap.FirstLevel/.LastLevel(ShadowSceneRenderer.cpp:77, 84),.Clipmap.PixelRequestBias/.RequestMinLevelClamp(VirtualShadowMapArray.cpp:378, 386). - Doc Epic (page lue via WebFetch le 2026-10-13, résumé automatique ; recoupée par les sources ci-dessus sauf mention) : étapes = caméra propriétaire de ses primitives,
First Person Primitive Type=First Person,Enable First Person Field Of ViewetEnable First Person Scalesur la caméra ;World Space Representation= copie en espace monde, invisible pour la caméra propriétaire, qui porte ombres au sol et reflets tracés ; « sans ombres virtuelles ni ombres tracées, pas d'ombre de première personne sur le sol » ; fonctions de base (champ de vision, échelle, interpolation par sommet, la plupart des nœuds) « fonctionnent sur toutes les plateformes et configurations » (recoupé : SceneView.cpp:742-757 ne dépend pas du bit GBuffer) ; cheveux de type groom non pris en charge (non recoupé ; le jeu utilise des cartes de cheveux en SkeletalMesh, § 3.a). Le modèle de la doc est « une caméra + deux maillages » (bras enFirst Person, corps complet enWorld Space Representation) : Person n'a qu'unMeshet des suiveurs. Fil de forum signalant, en 5.8, que l'auto-ombre ne se rend pas avec MegaLights (rapport d'utilisateur, non confirmé) : https://forums.unrealengine.com/t/unreal-5-8-first-person-self-shadowing-does-not-render-with-megalights/2732976 ; sans objet ici (MegaLights absent de Config, § 3.d). - Un composant dupliqué pour masquer autrement est coûteux : un suiveur reprend les états d'os de son leader (SkinnedMeshSceneProxyDesc.cpp:438). Une copie « corps première personne » avec d'autres os masqués doit donc
être sans leader et recevoir sa pose autrement (estimé), avec ses propres vêtements : la copie touche toute la chaîne de
NewProxy.
3.d Contraintes du projet
Config/DefaultEngine.ini:r.AllowStaticLighting=Truel. 28 ;r.Shadow.Virtual.Enable=0l. 24 ;r.DynamicGlobalIlluminationMethod=0(pas de Lumen) l. 22 ;r.ReflectionMethod=2(reflets d'écran) l. 23 ;NearClipPlane=1.000000l. 50 ;DefaultGraphicsRHI_DX12l. 129. Le commentaire l. 18-21 fige le rendu 5.5 « pas de changement de rendu sans décision ». AucunForwardShadingniMegaLightsdansConfig(Grep ;DefaultEditor.ini:4-5: deux lignes longues qui correspondent au motif, réglages d'éditeur non lus, hors rendu du jeu : estimé). AucunPROJECT_CVAR_*dansSource(ligne 7 du § 2).- Exigence du natif complet :
HasFirstPersonGBufferBit=!IsMobilePlatform && !IsForwardShadingEnabled && !IsStaticLightingAllowed()(RenderCore\Private\RenderUtils.cpp:2589-2593 ; « le bit libre si l'éclairage statique est désactivé », :2591).IsStaticLightingAllowed()litr.AllowStaticLighting(RenderUtils.h:636-638 ; ReadOnlyCVARCache.cpp:107-122) ; la macro de compilationPROJECT_CVAR_ALLOW_STATIC_LIGHTINGn'est définie ni dansSourcedu jeu ni dans UnrealBuildTool (0 résultat) : estimé qu'aucune recompilation C++ n'est requise, seulement un redémarrage et des shaders (la définitionHAS_FIRST_PERSON_GBUFFER_BITentre dans la compilation des shaders, ShaderCompiler.cpp:4084-4085). Sans le bit : pas d'extension de scène première personne (FirstPersonSceneExtension.cpp:10-15), pas de clipmap d'ombres virtuelles première personne (ShadowScene.cpp:35-40), pas d'auto-ombre (FirstPersonSelfShadow.cpp:91, 130, 159, 191, 207). Avec la configuration actuelle (éclairage statique autorisé, ombres virtuelles coupées) : auto-ombre absente, ombre au sol d'unWorldSpaceRepresentationabsente (ignoré par les ombres ordinaires, PrimitiveSceneProxy.cpp:642-645), reflets de ce type absents ; champ de vision, échelle, interpolation par sommet et nœudIs First Personfonctionnent. - Lumières cuites dans les cartes :
Content/Scenes/CentralLondon_BuiltData.uassetexiste (43 149 o, identique en HEAD) et contient les nomsLightmap_0,Lightmap_1,LightMapTexture2D,ShadowMapTexture2D,ShadowMapFlags(§ 2, ligne 11) : des lightmaps et des ombres cuites existent pourCentralLondon(nombre d'entrées non lisible par les chaînes : incertain).Overview.umap(FreeAnimationsPack) n'a pas de_BuiltData. La carte contientDirectionalLight,SkyLight,PointLight,PointLight2,SkyAtmosphere,PostProcessVolume(noms) ; leur mobilité n'a pas été lue : incertain. Impact estimé d'un passage àr.AllowStaticLighting=False: la carte perd son éclairage indirect cuit, puisque Lumen est coupé (l. 22) ; les lumières statiques ou stationnaires peuvent changer d'aspect (comportement non lu dans le code : incertain) ; tous les shaders se recompilent (durée non mesurée). - Autres points : C1 et POV de sexe emploient le même
FirstPersonSM(§ 3.b), donc un réglage caméra sert aux deux ; la POV de sexe reste le code d'origine de PC jusqu'à B5 (CAM-SPEC.md:412-413).
3.e Options chiffrées et recommandation
Mesures de durée connues : Build.ps1 4 s (0 unité), UAT BuildDebug 148 s, cuisson 163 paquets (CAM-B1-IMPL.md:62) ; le reste (CompileAllBlueprints, essai en jeu) n'est pas mesuré ici.
| Option | Nœuds, assets, config touchés | Effet sur le défaut de la capture | Risque | Réversibilité | Durée de copie UE (estimée) |
|---|---|---|---|---|---|
| a Masquer ce qui se rattache à la tête en C1 et en POV | Room : voie C1 (près de HairSM.SetVisibility, CAM-B1-IMPL.md:22) et RestoreC1 ; PC : POV (PC__EventGraph.txt:2281-2339). Une boucle sur GetChildrenComponents(Mesh) comme ClearSMCs (9 nœuds, Person__ClearSMCs_D4.txt:96-137) + filtre + SetOwnerNoSee ou SetVisibility, et son miroir au retour : ≈ 10 à 14 nœuds par voie, 2 voies. Pour les sections du Mesh (bouche, cils, yeux), SetOwnerNoSee ne sert pas (niveau composant) : il faut SetMaterial par emplacement vers Content/Heavy/Daz/Bridget/Transparent, avec mémorisation et restauration (nœuds en plus, noms d'emplacements à lire) |
Couvre les composants (cheveux, proxys d'accessoires de tête) ; couvre bouche, cils, yeux seulement avec le remplacement de matériau ; ne corrige pas un défaut d'os (H2) | moyen : un oubli de restauration laisse un personnage sans bouche ; les graphes Room et PC sont partagés (réservation) | oui : instantané Snapshot.ps1, nœuds supprimables ; aucun shader, aucune config |
≈ 5 à 8 min par essai (148 s mesurés pour l'UAT, le reste estimé) |
| b Natif : champ de vision et échelle seuls | FirstPersonSM : SetEnableFirstPersonFieldOfView, SetEnableFirstPersonScale, valeurs (CameraComponent.h:51-62, 207-217), au runtime dans Room / PC ou en défauts de FirstPerson.uasset ; SetFirstPersonPrimitiveType(FirstPerson) sur Mesh, HairSM, PenisSM et chaque proxy (boucle, ≈ 8 nœuds par voie). Aucune config |
Aucun : le type FirstPerson ne cache rien (§ 3.c) ; il réduit seulement le recouvrement de la géométrie proche avec la scène |
moyen : les composants FirstPerson perdent leurs ombres dynamiques et statiques (PrimitiveSceneProxy.cpp:631-641), sans copie WorldSpaceRepresentation pour les remplacer (bit absent, ombres virtuelles coupées) : le corps ne projette plus d'ombre en C1 / POV |
oui (BP, aucune config) | ≈ 5 à 8 min par essai (estimé) |
| c Natif complet : copie en espace monde, ombres virtuelles, éclairage statique coupé | DefaultEngine.ini l. 28 (r.AllowStaticLighting=False) et l. 24 (r.Shadow.Virtual.Enable=1) ; CentralLondon_BuiltData et la carte (lumières, mobilité) ; Person : second jeu de composants (corps First Person sans tête + corps World Space Representation), donc NewProxy, ClearProxies, Dress à dupliquer ; matériaux Daz selon besoin |
Seulement si la copie « corps première personne » masque la tête par un autre moyen (os sur une copie sans leader, § 3.c) : le natif ne le fait pas seul | élevé : change l'éclairage de tout le jeu (lightmaps inutilisées, Lumen coupé, rendu 5.5 figé par décision, DefaultEngine.ini:18-21), recompilation de tous les shaders, chaîne de vêtements dupliquée, essai complet du jeu à refaire | oui par instantané de Config et de Content, mais le cuit et le DDC sont à refaire | rechargement des shaders : non mesuré, probablement de dizaines de minutes à plusieurs heures au premier cuit (estimé) ; l'essai qui trancherait : un cuit à froid en copie |
b+ (variante native, hors fiche) : type FirstPerson posé seulement pendant C1 / POV, et nœud Is First Person dans les matériaux des parties de tête |
SetFirstPersonPrimitiveType à l'entrée et à la sortie des vues (Room, PC) ; chaque matériau de tête (B_Mouth, B_Eyelashes, B_EyeMoisture, B_Pupils, B_Sclera, Cornea, équivalents masculins à identifier) : Is First Person → opacité 0 ; bEnableFirst* laissés à faux pour garder la projection (CameraComponent.cpp:477) |
Masque par section sans dépendre des os (le nœud lit le drapeau de primitive, MaterialTemplate.ush:3932-3938) | moyen à élevé : un matériau opaque ne peut pas annuler un pixel : le mode de fusion devrait passer à Masked (modes non lus : incertain) ; ombres du corps coupées pendant la vue (PrimitiveSceneProxy.cpp:631-641) ; effets sur TAA (r.AntiAliasingMethod=2) et profondeur personnalisée non mesurés |
oui (matériaux et nœuds BP ; instantanés) | ≈ recompilation des seuls matériaux modifiés + 5 à 8 min par essai (estimé) |
Recommandation (proposition, la décision revient à l'utilisateur).
- Diagnostic d'abord, sans changer le rendu : on ne sait pas encore quels composants ou sections restent dessinés (§ 3.a, hypothèses H1 à H3). Un relevé à l'exécution (§ 5, point 1) départage a, b+ et un défaut d'os en une passe.
- Option a comme première correction : elle repose sur des appels déjà utilisés par le jeu (
SetVisibility,HideBoneByName) et surSetOwnerNoSee, qui est précisément la mécanique native de moteur pour cacher des primitives à la vue de leur propriétaire (§ 3.c) ; elle ne touche ni la configuration ni les shaders. - Option b seule : écartée pour ce défaut (ne cache rien, coupe les ombres du corps). Option c : non recommandée ici : c'est un chantier d'éclairage de tout le jeu (lightmaps de
CentralLondon, Lumen, VSM, shaders), qui ne règle pas la tête sans duplication des vêtements ; à ouvrir, si l'utilisateur le veut pour les ombres, les reflets et l'auto-ombre du corps, comme un lot de rendu séparé, après décision sur l'éclairage statique. - Option b+ : la plus proche de « l'innovation 5.8 » demandée par l'utilisateur pour cacher une section sans os ; à essayer sur un seul matériau (la bouche) dans une copie si a ne suffit pas pour bouche, cils et yeux.
4. Établi / estimé / incertain
Établi (source lue) : les 8 composants SCS de Person et l'absence de composant dents / langue / yeux (§ 3.a) ; ce que masquent C1 et PC ; la sémantique de HideBone et des suiveurs dans le moteur 5.8.3 ; FirstPersonSM = UCameraComponent actif, seule caméra de Person, choisi par CalcCamera ; noms exacts, setters et valeurs par défaut des propriétés de caméra et de FirstPersonPrimitiveType ; le fait que FirstPerson coupe les ombres et que WorldSpaceRepresentation force bOwnerNoSee ; l'exigence !IsStaticLightingAllowed() du bit GBuffer ; les lignes 24 et 28 de DefaultEngine.ini ; l'existence de CentralLondon_BuiltData (43 149 o) avec noms de lightmaps.
Estimé : dents, langue, cils et yeux = sections de bridget_gp (matériaux nommés dans l'actif, sections non lues) ; lambeaux roses = sommets à pondération mixte ; l'anneau violet = encolure ; absence de recompilation C++ pour r.AllowStaticLighting ; durées de cuisson et de shaders ; liaison NewProxy ↔ proxys de tenues.
Incertain : cause exacte des dents et de la langue visibles (§ 3.a) ; composition de la bouche et des yeux de l'homme (Michael) ; build de la capture ; mobilité des lumières et nombre de lightmaps de CentralLondon ; modes de fusion des matériaux Daz ; comportement TAA / profondeur personnalisée avec le type FirstPerson ; valeur de bFindCameraComponentWhenViewTarget sur Person ; dump L6f de Person (2026-09-30) non relu sur HEAD ; page Epic lue par résumé automatique ; non vérifié en 5.5 (plus de développement 5.5, mémoire du 2026-10-12).
5. Points à confirmer (repris par la fiche suivante)
- Relevé à l'exécution (lecture seule) sur un
Personen C1 et en POV : noms et classes des enfants deMesh,LeaderPoseComponentde chacun, nombre et noms des emplacements de matériau deMesh,IsBoneHiddenByNamedeneckLower,head,lowerJaw,tongue. Moyen : lecture MCP en éditeur sur un personnage placé, ou une exécution du jeu avec journal ; à confier à une fiche avec instantané si une écriture est requise. - Build exact de la capture (B2 ou intermédiaire) et personnage filmé (homme ou femme), à demander à l'utilisateur.
- Squelette et sections de
michael(pas de matériau de bouche dans son dossier). - Mobilité des cinq lumières de
CentralLondonet nombre de lightmaps (carte ouverte dans l'éditeur, lecture seule), seulement si l'option c est envisagée. - Modes de fusion de
B_Mouth,B_Eyelashes,B_EyeMoisture,B_Pupils,B_Sclera,Cornea(b+). - Relire
Person::UserConstructionScriptetNewProxysur HEAD (dump du 2026-09-30).
6. Questions pour la SPEC ou l'utilisateur
- Q1 : en POV et en C1, le joueur doit-il voir son propre corps (torse, bras) ? (la capture le montre ; conditionne la copie de l'option c.)
- Q2 : accepte-t-on que le corps du personnage filmé perde son ombre au sol pendant la vue si l'on utilise le type
FirstPerson(options b, b+) ? - Q3 : l'éclairage statique et les lightmaps de
CentralLondonpeuvent-ils être abandonnés (condition de l'option c) ? Sinon, l'option c est hors de portée sans lot de rendu. - Q4 : périmètre : C1 seul, ou aussi la POV de sexe (code d'origine de PC jusqu'à B5) ?
- Q5 : feu vert pour une fiche de diagnostic d'exécution (§ 5, point 1) avant toute SPEC d'implantation ?
Fichiers écrits : D:\Game\LifePlay-master 5.8\Docs\Migration\etat\CAM\CAM-B1e-CART.md.
Fichiers à commiter (dépôt du jeu, branche ue5.8) : A Docs/Migration/etat/CAM/CAM-B1e-CART.md (suivi en texte : .md de etat/, lp-paths).
À verser : lp-ue-compat (ou skill rendu) — FirstPersonPrimitiveType / SetFirstPersonPrimitiveType et caméra première personne : API 5.8.3 relue (§ 3.c) ; le bit GBuffer exige r.AllowStaticLighting=False ; HideBone ne vaut que sur le leader et se propage aux suiveurs par nom d'os.
Tours : 56 / 60