12 KiB
Fiche CAM-AUDIT — Niveau N2 — Modèle prévu opus | utilisé claude-opus-5-5 — Agent orchestrateur (session « Camera ») — Skills lp-lot, sk-orchestrate, sk-recount
CAM-AUDIT : inventaire chiffré des caméras de LifePlay (2026-10-11)
Hors gabarit : synthèse de l'orchestrateur demandée par la fiche du lot (phase 1), à partir de CAM-T1-INV, CAM-T2-CART
et CAM-T3-CART, contre-vérifiés (§ 5). Copie D:\Game\LifePlay-master 5.8, branche ue5.8, HEAD 4283c13.
Lecture seule : aucun éditeur, MCP, commandlet ni build ; rien écrit hors de Docs\Migration\etat\CAM\.
Sources détaillées (preuves fichier:ligne) : CAM-T1-INV.md (comptes), CAM-T2-CART.md (graphes BP),
CAM-T3-CART.md (C++ et .ini). Journaux bruts de T1 : CAM-T1_union.txt, CAM-T1_matrice.txt,
CAM-T1_camera-insensible.txt, CAM-T1_tokens.txt (ignorés par git).
1. Inventaire : toutes les caméras trouvées
| Id | Caméra | Où | Type | Qui l'active, quand | Suit le MC | État | Rôle |
|---|---|---|---|---|---|---|---|
| K1 | Birdview (GI.Birdview, classe Birdview_C) |
acteur placé dans Content/Scenes/CentralLondon.umap ; BP Content/BPs/Birdview.uasset (fils de CameraActor) |
CameraActor | PC BeginAutoLoad au chargement ; GI ShowRender (sortie de pièce, de contacts, du constructeur) |
non (déplacée par flèches, souris, molette, PanToBuilding) |
vivante | vue de dessus de la ville (carte) ; projection orthographique probable (chaînes OrthoWidth, CamOrthoZoom) |
| K2 | CameraScene = GI.ChargenCameras[0] = Room.SceneCamera |
acteur placé dans CentralLondon.umap (attribution des noms aux index : estimée) |
CameraActor | HideRender(0) : entrée dans une pièce (OpenSpace), constructeur, édition de personnage, scène scriptée ; fin de sexe ; ResetCamera |
partiellement : Room.AutoCamera la tourne vers la tête du MC et la recale près de lui, sinon position fixe CameraSceneTransformDefault |
vivante | caméra de pièce, de scène, de sexe et de CharGen (4 rôles) |
| K3 | CameraFullBody ou CameraPortrait = ChargenCameras[1] |
acteur placé dans CentralLondon.umap |
CameraActor | OpenContacts → HideRender(1) ; ZoomCharGen |
non (fixe) | vivante | contacts, CharGen |
| K4 | l'autre des deux = ChargenCameras[2] |
acteur placé dans CentralLondon.umap |
CameraActor | ZoomCharGen seulement (cycle 0 → 1 → 2 → 0) |
non (fixe) | vivante | CharGen (zoom) |
| K5 | FirstPersonSM (classe FirstPerson_C) |
composant de Content/BPs/Person.uasset : un par Person instanciée (MC et chaque PNJ) ; BP Content/BPs/FirstPerson.uasset (fils de CameraComponent) |
CameraComponent | PC SwitchCamera (touche C, bouton « Switch camera ») pendant le sexe seulement : attache à la tête de SexPersons[i], puis cible de vue |
oui pendant le sexe (tête du MC ou du partenaire, selon l'index) | vivante (sexe) | 1re personne (POV) |
| K6 | FollowView | C++ Source/LifePlay/LPDirectControlSubsystem.cpp:897-941 (créée par SpawnActor, transitoire) |
CameraActor dynamique | personne : FollowCamera n'est jamais appelée (.h:12 « La camera suiveuse n'est pas branchee ») |
oui si elle tournait (derrière le MC, 340 cm, FOV 70) | morte | 3e personne (code préparé, non branché) |
| K7 | SecondScreen | acteur SceneCapture2D de CentralLondon (dossier Poser/Cameras) ; déplacé par LPSecondScreenSubsystem.cpp:59-112 |
SceneCapture2D (rendu vers texture) | GI secondScreen() à l'entrée en sexe ; C++ à chaque image |
non : suit le contact de l'appel (80 cm, FOV 30) | vivante | encadré d'appel |
| K8 | FaceCapture | acteur SceneCapture2D de CentralLondon |
SceneCapture2D | GI secondScreen() (estimé) |
non établi | vivante (estimé) | capture de visage |
Hors caméra de vue (classés à part) : CameraShake_C (effet de secousse, PlayWorldCameraShake à l'événement Cum) ;
action d'animation camera de Person (accessoire tenu en main) ; Pawn par défaut Pawn_C (aucune caméra, vue implicite
avant le premier SetViewTarget, estimé) ; jeton SceneCaptureComponent2D dans UI/TopRight (référence de widget,
non cartographiée) ; addon LifePlay-Sandbox-5.8 : LPSandboxCamera (SpringArm + caméra du pion de bac à sable,
hors jeu, signalé seulement).
2. Comptes par catégorie
| Catégorie | Nombre | Détail |
|---|---|---|
| Caméras de vue placées dans le niveau de jeu (CameraActor) | 4 | Birdview, CameraScene, CameraFullBody, CameraPortrait (CentralLondon.umap, chaînes CameraActor ×6) |
| Caméras de vue portées par un BP (CameraComponent) | 1 classe, N instances | FirstPersonSM sur chaque Person (MC + PNJ présents) |
| Caméras de vue créées par le C++ | 1 (morte) | FollowView |
| Rendus vers texture (SceneCapture2D) | 2 | SecondScreen, FaceCapture |
| SpringArm, CineCamera, PlayerCameraManager propre | 0 | 0 fichier sur 9 070 .uasset/.umap, 0 ligne en C++ |
Caméras dans les niveaux gabarits (__ExternalActors__, 190 acteurs) et Overview.umap |
0 | aucun CameraActor/CameraComponent ; niveaux non utilisés par le jeu |
| Caméras de rue | 0 | aucune en BP, en C++ ni dans le niveau |
| Caméra de plafond | 0 | — |
| Caméra de 3e personne qui suit le MC (active) | 0 | seule FollowView le ferait, elle est morte |
Commandes de caméra dans les scripts de modules (Content/Modules) |
0 | 84 lignes « camera » : animation, noms de scène, dialogues ; aucun cameraMove / cameraFocus |
Activations de vue (SetViewTargetWithBlend) |
7 nœuds BP + 1 C++ (mort) | PC 3, GI 4, Room 0 ; fondu 0 partout ; C++ 0,35 s |
Total des caméras de vue du jeu : 6 sortes (4 placées, 1 composant multiplié par le nombre de Person, 1 C++ morte), plus 2 rendus vers texture.
3. Comment elles sont réglées (ce qui est établi)
- Aucun réglage de FOV dans les graphes : 0
SetFieldOfView, 0FieldOfViewdans les dumps GI, PC, Room. Seuls FOV écrits : FollowView 70 (C++, mort), SecondScreen 30 (C++). FOV par défaut du moteur : 90. - Profondeur de champ :
Room.UpdateDOFécritDepthOfFieldFocalDistancedeSceneCamera; MainMenuSpinBox_0et GI écriventDepthOfFieldFarBlurSizedeChargenCameras[0]. - Vitesse de caméra : seul réglage du joueur, entier 1-7, défaut 3 (
GameUserSettings.ini,[/Script/LifePlay.LPUserSettings]), lu par Room pour la molette et les déplacements deSceneCamera. - Entrées (
Config/DefaultInput.ini) :RotateCamera(bouton du milieu, Alt),SwitchCamera(C), axesLeftRight/DownUp(flèches),ScrollDownUp(molette),CursorX/Y(souris) ; sensibilité 0,07 × FOV (bEnableFOVScaling). Classes PC, pawn et gestionnaire de caméra : portées parGM_C(rien dansConfig/). - Placement :
CameraScenerevient àGI.CameraSceneTransformDefault(ResetSceneCamera) ;AutoCamerala place à des coordonnées monde codées en dur(-3131543, -14967213, 75)+ décalage du MC par rapport àGI.ActorTransforms[3]; Birdview revient àBirdviewOriginal. - Non établi (CDO non dumpé) : FOV, transformation et post-traitement de K1-K4, projection de Birdview, transformation
relative et
bAutoActivatedeFirstPersonSM, valeurs deCameraSceneTransformDefault,DefaultPawnClassdeGM_C. → fiche CAM-T4 (phase 1b, commandlets en lecture seule, copie UE à demander à Big Boss).
3b. Réglages relevés par CAM-T4 (phase 1b, commandlets en lecture seule, 2026-10-11 ; détail CAM-T4-BUILD.md)
| Caméra | Position (monde) / rotation | FOV | Notes |
|---|---|---|---|
| K2 CameraScene | (-3131132, -14967241, 50) / lacet -180 | 90 (défaut) | AutoActivateForPlayer = Player0 ; post-traitement : gamma 0,85, DOF, AO ; = GI.CameraSceneTransformDefault (même translation) |
| CameraPortrait | (-3131226,75, -14967197, 67) / lacet 175 | 90 | DOF near 4 / far 12 |
| CameraFullBody | (-3131054, -14967290, 6) / lacet 180 | 90 | DOF near 4 / far 24 |
| K1 Birdview (acteur de la carte) | (0, 0, 20000) / tangage -45 | 90 | bAutoActivate = False ; projection non affichée par le dump (perspective probable, FOV 90 ; OrthoWidth 512 = valeur commune à toutes) |
| K5 FirstPersonSM | relatif à CharacterMesh0 : (0, 0, 0) / tangage 90, lacet 90 |
90 | composant SCS de Person (8 composants SCS relevés) ; BP FirstPerson sans propriété propre |
Classes : GM_C.DefaultPawnClass = None (aucun pion par défaut : la vue initiale est celle du PC, ce qui corrige l'estimation |
|||
« Pawn_C » de CAM-T2) ; PlayerControllerClass = PC_C ; PC_C.PlayerCameraManagerClass = None (gestionnaire du moteur). |
|||
CamOrthoZoom n'est pas un acteur (variable ou nom du script de niveau). Les 3 caméras du studio sont à quelques mètres l'une |
|||
de l'autre, au point (-3131xxx, -14967xxx) qui est aussi la base du recalage codé en dur de Room.AutoCamera. |
|||
| Graphes dumpés pour la SPEC : Birdview 4 graphes / 366 nœuds ; ContactMenu 34 graphes / 1 430 nœuds ; Person.EventGraph à | |||
HEAD 3 684 nœuds (fichiers CAM-T4_LPDumpFunction_*.txt, ignorés par git). |
4. Surnuméraires, mortes, mal placées (constats, sans décision)
- Morte : K6 FollowView (code C++ jamais appelé). Nœuds morts liés aux caméras : minuterie
Room.AutoCamera(ROOM:3643-3653),TestAutoCamera, poursuite du MC parSceneCameradans Person (PERS:34520-34580), PCSetRelativeRotation(FirstPersonSM)(PC:2055-2062), etc. (liste : CAM-T2 § 3.4). - Surnuméraires probables :
FirstPersonSMprésent sur chaque Person alors que la vue 1re personne ne sert qu'en sexe (une instance par PNJ) ; CameraFullBody et CameraPortrait (deux caméras fixes pour le seul CharGen et les contacts, qu'un zoom pourrait remplacer). - Surchargée : CameraScene (
ChargenCameras[0]) sert à la fois de caméra de pièce, de scène, de sexe et de CharGen. - Mal placées ou fragiles : position de
AutoCameraen coordonnées monde codées en dur ;Room.CameraFocusfait pivoter l'acteur Room au lieu de la caméra (ROOM:4435-4439, effet en jeu non vérifié) ; la caméra de pièce ne suit pas les déplacements du MC (recalage ponctuel parAutoCamera, amont non remonté). - Rien ne correspond aux cibles C2 (3e personne qui suit), C3 (plafond) et rues en enfilade.
5. Contre-vérification (sk-recount)
| Point recompté par l'orchestrateur | Commande | Résultat |
|---|---|---|
fichiers par motif dans Content/BPs, Scenes, UI, FreeAnimationsPack/Map |
grep -rla --include=*.uasset --include=*.umap <motif> … |
CameraComponent 6, CameraActor 9, SpringArmComponent 0, SetViewTargetWithBlend 3, SceneCaptureComponent2D 2 : = CAM-T1 |
FollowCamera jamais appelée |
grep -rn FollowCamera Source |
2 lignes (déclaration .h:43, définition .cpp:897) : = CAM-T3 |
| lignes caméra du C++ (motif de T3) | grep -rn -i "camera|ViewTarget|SpringArm|FieldOfView|FOV|PlayerCameraManager|SceneCapture|Possess" Source/LifePlay Source/LifePlayEditorTools --include=*.cpp --include=*.h | wc -l |
88 : = CAM-T3 (T1 : 81 avec un motif plus court, écart expliqué) |
ApplyCameraSpeedAtStartup appelée par GI |
grep -n ApplyCameraSpeedAtStartup …/GI__EventGraph*.txt |
GI__EventGraph.txt:30143, _V5.txt:30024 : = CAM-T3 |
SetViewTargetWithBlend dans les dumps de HEAD |
grep -c SetViewTargetWithBlend PC__EventGraph.txt GI__EventGraph_V5.txt Room__EventGraph_V5.txt |
3 / 4 / 0 : = CAM-T2 |
| caméras nommées dans le niveau | grep -ao "Cam[A-Za-z_0-9]*|Birdview[A-Za-z_0-9]*" Content/Scenes/CentralLondon.umap | sort | uniq -c |
Birdview, CameraScene, CameraFullBody, CameraPortrait (chacune avec _ExecuteUbergraph_CentralLondon_RefProperty), CamOrthoZoom, CameraActor ×6 : = CAM-T2 |
| Réserves des livrables : CAM-T1 § 2 A écrit « 11 sur 21 » motifs nuls, la liste et § 3 E2 donnent 12 (la liste fait foi) ; | ||
| dump de Person antérieur à HEAD (L6f, 2026-09-30 ; Person commité le 2026-10-09) ; attribution CameraScene / | ||
FullBody / Portrait aux index 0-2 de ChargenCameras estimée. |
6. Fiches
| Fiche | Agent | Verdict de réception | Tours déclarés |
|---|---|---|---|
| CAM-T1-INV | lp-inventory (claude-sonnet-5-5) | acceptée (réserve d'écriture « 11 sur 21 ») | 21 / 40 |
| CAM-T2-CART | lp-cart (claude-opus-5-5) | acceptée | 48 / 60 |
| CAM-T3-CART | lp-cart (claude-opus-5-5) | acceptée | 27 / 60 |
Fichiers à commiter (dépôt du jeu, branche ue5.8, au ticket de clôture du lot) : A Docs/Migration/etat/CAM/CAM-TACHES.md,
A CAM-T1-INV.md, A CAM-T2-CART.md, A CAM-T3-CART.md, A CAM-AUDIT.md, A CAM-CIBLE.md (les .txt sont ignorés).