116 lines
12 KiB
Markdown
116 lines
12 KiB
Markdown
|
|
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`, 0 `FieldOfView` dans 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` écrit `DepthOfFieldFocalDistance` de `SceneCamera` ; MainMenu `SpinBox_0`
|
|||
|
|
et GI écrivent `DepthOfFieldFarBlurSize` de `ChargenCameras[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 de `SceneCamera`.
|
|||
|
|
- **Entrées** (`Config/DefaultInput.ini`) : `RotateCamera` (bouton du milieu, Alt), `SwitchCamera` (C), axes
|
|||
|
|
`LeftRight` / `DownUp` (flèches), `ScrollDownUp` (molette), `CursorX/Y` (souris) ; sensibilité 0,07 × FOV
|
|||
|
|
(`bEnableFOVScaling`). Classes PC, pawn et gestionnaire de caméra : portées par `GM_C` (rien dans `Config/`).
|
|||
|
|
- **Placement** : `CameraScene` revient à `GI.CameraSceneTransformDefault` (`ResetSceneCamera`) ; `AutoCamera` la 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 `bAutoActivate` de `FirstPersonSM`, valeurs de `CameraSceneTransformDefault`, `DefaultPawnClass` de `GM_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 par `SceneCamera` dans Person (PERS:34520-34580), PC
|
|||
|
|
`SetRelativeRotation(FirstPersonSM)` (PC:2055-2062), etc. (liste : CAM-T2 § 3.4).
|
|||
|
|
- **Surnuméraires probables** : `FirstPersonSM` pré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 `AutoCamera` en coordonnées monde codées en dur ; `Room.CameraFocus` fait
|
|||
|
|
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 par `AutoCamera`, 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).
|