LifePlay-Revival/Docs/Migration/etat/REL/STM1/STM1-SPEC-04.md
edujiro5972 56dfcfc3d2 LifePlay UE 5.8 : état de développement au 2026-10-20
Tickets : PUB-20261020-T1

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-20 17:35:10 +02:00

8.7 KiB
Raw Blame History

Fiche STM1-SPEC-04 — Niveau N2 — Modèle prévu opus medium | utilisé claude-opus-5-5 — Agent session « Medium · STM1 » (pas de sous-agent) — Skills sk-protocol

STM1-SPEC-04 : bâtiments posés dans l'eau après le pilote (2026-10-20)

Ordre : Big Boss (local_104ff22d). Essai COMMUN-16, utilisateur cité : « la tamise est ok, mais des batiments sont sous l'eau ». Capture …\images\8.webp (dossier temporaire de la session Big Boss) ; journal : « [LPCity] EAU CentralLondon : pose … ; Z eau=-298.0 (plan MapMarkers Z=-300.0 + 2 cm) ; Z carte=0.0 ». Sans copie UE ni IMPL.

Résultat : cause établie, options proposées. Les « bâtiments dans l'eau » ne sont pas un décor indépendant de la carte. MapMarkers pose une maison générique par bâtiment OSM de l'UStreetMap, au centre de son polygone. Ceux qui tombent dans la Tamise sont des bâtiments OSM réels flottants ou sur pilotis : pontons, jetées, bateaux amarrés, restaurants flottants, péniches. Depuis qu'il y a de l'eau, ils se voient comme des maisons posées sur le fleuve. Recommandation : O2, masquer à la pose les maisons génériques dont le centre tombe dans l'eau (échelle 0, indices conservés), en épargnant les grands bâtiments flottants (seuil d'aire réglable). Aucune modification du GI, de MapMarkers ni des données.

1. Ce qui vient de quoi (établi)

Élément visible Origine Preuve
Maisons à toit rouge, immeubles turquoise (dans la ville et dans le fleuve) MapMarkers : une instance par bâtiment de GI.StreetMapStatic.StreetMap ; position = GI.FindCenterOfPolygon(BuildingPoints) ; taille selon GI.calculateArea(BuildingPoints), hauteur bornée à 3-5 ; composant HISM_Home ou HISM_Work selon le type etat/ST/STA/dumps/MapMarkers__EventGraph.txt:156-163 (FindCenterOfPolygon), :643-650 (AddInstance sur HISM_Which), :670-690 (calculateArea, FClamp 3-5)
Composants des maisons créés à l'exécution par AddComponent (NODE_AddHISM-0, NODE_AddHISM-1), rangés dans les tableaux HISM_Home et HISM_Work MapMarkers__EventGraph.txt:651-668
Arbres et jeeps composants SCS Tree et Car (HISM, sans collision), instances le long des routes (StreetMap.Roads) avec des décalages aléatoires :700-735 (Roads, Tree.AddInstance), :972-1012 (RandomInteger, Car.AddInstance) ; STM1_LPDumpComponents_20261020-104435.txt
Ponts gris au-dessus de l'eau carte StreetMap (routes, StreetMapMasked), Z ≥ 0, au-dessus de l'eau à −298 journal COMMUN-16 ; CART-04 § 1
Eau bleue ULPCityWaterSubsystem, maillage Water/CentralLondon à Z = −298 journal [LPCity] EAU
  • Indices non suivis : AddInstance a sa valeur de retour non branchée (ReturnValue = '0', :649, :735). MapMarkers ne garde aucun indice d'instance. Masquer une instance ne casse donc aucun lien du Blueprint (estimé fort).
  • Données de jeu inchangées : les bâtiments OSM restent dans l'UStreetMap, cliquables par la carte (StreetMap_Static), pas par les HISM (collision retirée en O9b, d13a17d).
  • Le grand bâtiment au milieu du fleuve (capture) : un bâtiment OSM de grande surface, rendu comme une maison générique de grande taille (estimé : un bateau-musée, un ponton ou une barge amarrée). Son nom est à lire au DryRun (option O3).
  • Arbres et jeeps dans l'eau : possibles là où des routes passent sur les ponts, puisqu'ils suivent les routes. Ils ne se voient pas sur la capture : à vérifier.

2. Options

Option Principe Pour Contre Coût Risque
O1 masquer toutes les instances (HISM_Home, HISM_Work, Tree, Car) dont le centre tombe dans un polygone d'eau, par échelle 0 (UpdateInstanceTransform, indices conservés) le fleuve est net fait aussi disparaître les vrais bâtiments flottants (bateau-musée, pontons) ≈ 0,5-1 j faible
O2 (recommandée) comme O1, mais épargner les bâtiments dont l'emprise dépasse un seuil d'aire (réglable, par défaut 1 500 m²), qui restent visibles ; arbres et jeeps dans l'eau toujours masqués le fleuve est net, et les grands objets flottants réels restent seuil à régler à l'essai ; un grand objet reste rendu comme une « maison » ≈ 1 j faible
O3 rapport seul : liste des bâtiments OSM dont le centre est dans l'eau (nom, aire, type), produite par le commandlet LPBuildCityWater en DryRun décision éclairée, nom par nom n'enlève rien à l'écran ≈ 0,25 j nul
O4 percer l'eau autour des emprises des bâtiments (trous dans le maillage) les bâtiments semblent sur des îlots aspect « îles de pavé » sur le fleuve, pire visuellement ≈ 1 j moyen
O5 modifier MapMarkers pour ne pas créer ces instances à la source touche un Blueprint partagé ; consigne : ni GI ni MapMarkers — écarté

3. Esquisse d'O2 (à préciser en SPEC exécutable après accord)

  1. Polygones d'eau disponibles en jeu. Le maillage d'eau cuit ne garde pas ses sommets accessibles au CPU. Le commandlet crée donc, en plus du maillage :
    • soit bAllowCPUAccess = true sur Water/<Ville>, pour relire les triangles au CPU ;
    • soit, de préférence, un petit asset de données /Game/Heavy/StreetMap/Water/<Ville>_Mask : grille 2D de booléens (pas de 5 m, ≈ 225 × 162 cases pour Londres, ≈ 36 ko) marquant les cases d'eau. La grille est la plus simple et la plus rapide à tester : une lecture par instance. Elle demande une option -Overwrite contrôlée au commandlet, ou un passage limité au masque, pour ne pas toucher au maillage déjà validé.
  2. Masquage à la pose (ULPCityWaterSubsystem, après la pose de l'eau, puis à chaque hausse du nombre d'instances, MapMarkers pouvant compléter ses HISM après coup) :
    • pour chaque acteur MapMarkers, ses composants HierarchicalInstancedStaticMeshComponent ;
    • pour chaque instance : position (XY dans le repère de la carte) → case de la grille ;
    • si la case est de l'eau et que ce n'est pas un grand bâtiment épargné : UpdateInstanceTransform(Index, Transform avec échelle 0, bWorldSpace=false, bMarkRenderStateDirty) ;
    • un seul MarkRenderStateDirty par composant à la fin. Côté bâtiments, l'aire de l'instance est estimée par son échelle X·Y (la taille vient de calculateArea), ou mieux par l'aire du polygone de l'UStreetMap le plus proche.
  3. Journal [LPCity] EAU <Ville> : n instances masquées (maisons a, arbres b, jeeps c) ; k grands bâtiments épargnés.
  4. Mode classique : hors périmètre (correction après COMMUN-16.24, P4 PASS, capture …\images\10.webp relayée par Big Boss).
    • En mode classique, il n'y a pas de maisons génériques de MapMarkers dans le fleuve : on voit la carte StreetMap (bâtiments OSM extrudés).
    • Les objets allongés posés sur l'eau ont une forme de coque : ce sont des bateaux ou des pontons OSM, ce qui confirme le § 1 (estimé fort, lecture visuelle).
    • Le masquage ne vise donc que le mode par défaut, donc les instances de MapMarkers.
    • En mode classique, les coques OSM sur l'eau sont un rendu juste (les garder).
    • L'hypothèse initiale (« pas les maisons de MapMarkers, même masquage en classique ») est retirée.
  5. Sans GI, sans MapMarkers, sans données modifiées ; Shipping compris.

4. Coût, risques

  • Coût d'O2 (estimé) : commandlet avec masque ≈ 0,25 j ; sous-système ≈ 0,5 j ; BUILD et VAL ≈ 0,25 j ; essai.
  • Risques :
    • MapMarkers peut recréer ou compléter des instances plus tard (changement de ville, rafraîchissement) : il faut un nouveau passage à chaque changement du nombre d'instances ;
    • une grille de 5 m peut masquer une maison de quai dont le centre tombe à moins de 5 m de l'eau : réglable (pas de 2,5 m, ou test au triangle exact) ;
    • les grands bâtiments épargnés restent des « maisons » génériques sur l'eau : c'est un choix de rendu ;
    • performance : environ 50 000 instances testées une fois par changement de ville, quelques millisecondes (estimé).
  • Les données de jeu, les sauvegardes et les clics ne changent pas.

5. Décisions attendues (utilisateur, via Big Boss)

  1. Option : O2 (recommandée), O1, O3 seule ou O4.
  2. Si O2 : seuil d'aire des grands bâtiments épargnés (proposé 1 500 m²). La question du mode classique ne se pose plus : il est hors périmètre (§ 3.4).
  3. Faire d'abord O3 (liste nominative des bâtiments dans l'eau) pour choisir le seuil : proposé, coût faible.

Tours : ≈ 4 / 40 (déclaré ; FicheStats.py fait foi).

Suite : Big Boss doit présenter le § 5 à l'utilisateur ; ensuite, SPEC exécutable et IMPL, sous GO et jeton UE. État : étude close, rien modifié.