17 KiB
Fiche STM1-CART-01 — Niveau N2 — Modèle prévu opus medium | utilisé claude-opus-5-5 — Agent session « Medium · STM1 » (pas de sous-agent) — Skills sk-protocol (chargé), lp-ue-compat (SKILL.md et ruptures.md § 3 lus) ; lp-lot, lp-paths non chargés (écart, § 7)
STM1-CART-01 : StreetMap 5.5 contre 5.8 (F3), cartographie sans copie UE (2026-10-19)
Source de l'ordre : Big Boss, message à « Medium · STM1 » ; Docs/37_Feuille_De_Route_Alpha2.md § 1.1 F3 et § 3.1 (lot STM1).
Lecture seule des deux copies (D:\Game\LifePlay-master 5.5, D:\Game\LifePlay-master 5.8) et des moteurs
D:/Game/Launcher/Engine/UE_5.5 et UE_5.8. Aucun éditeur, aucun MCP, aucune écriture hors ce dossier, aucune commande git qui écrit.
Aucune recherche web (sources du moteur installées suffisantes).
Résultat : partiel. La cause n'est pas tranchée sans essai en éditeur, et le symptôme exact de F3 n'est décrit nulle part (feuille de route l. 22 : « ne s'affiche plus normalement »). En revanche :
- Le plugin StreetMap n'est pas ce qui dessine la carte en jeu : la carte est un
StaticMeshComponent(acteurStreetMap_Static), avec le matériau masquéStreetMapMaskedou opaqueStreetMapClassic. Le C++ du plugin, ses correctifs C4996 et son activation sont donc hors cause pour l'affichage en jeu. - Tous les fichiers propres au projet qui touchent la carte sont identiques entre les deux copies (plugin hors gardes C4996, matériaux, données, maillage, rendu de
DefaultEngine.ini). - Le seul écart de rendu établi qui touche la carte est un changement de valeur par défaut du moteur :
r.EarlyZPassOnlyMaterialMaskingpasse de 0 (5.5) à 1 (5.8). Il s'applique aux matériaux masqués, donc àStreetMapMasked, le matériau par défaut du maillage de la ville. C'est l'hypothèse H1.
1. Comment la carte est affichée (établi)
| Constat | Preuve |
|---|---|
La carte du niveau est l'acteur StreetMap_Static (BP /Game/BPs/StreetMap_Static), avec un StaticMeshComponent |
grep -a -o sur Content/Scenes/CentralLondon.umap : StreetMap_Static_C, StaticMeshComponent0, événements OnClicked/BeginCursorOver du StaticMeshComponent ; aucune chaîne StreetMapComponent ni StreetMapActor dans le niveau |
Le maillage affiché est /Game/Heavy/StreetMap/Static/CentralLondon (280 maillages Static, un par ville), préchargé par le C++ |
Source/LifePlay/LPDataCompat.cpp:274-275 (PreloadCityPackages, identique en 5.5, commit 81f75d4) ; ls Content/Heavy/StreetMap/Static | wc -l = 280 |
Matériau propre au maillage : StreetMapMasked |
grep -a -o "/Game/..." sur Content/Heavy/StreetMap/Static/CentralLondon.uasset : 1 référence, /Game/Heavy/New2/Buildings/Mats/StreetMapMasked |
StreetMapMasked : BLEND_Masked, MSM_DefaultLit, nœuds VertexColor, If, TextureSample (texture road), Constant ×2 |
grep -a -o sur Content/Heavy/New2/Buildings/Mats/StreetMapMasked.uasset |
StreetMapClassic : BLEND_Opaque, MSM_DefaultLit, VertexColor, Constant |
idem sur StreetMapClassic.uasset |
Choix du matériau à l'exécution : événement HideBuildings, branche sur GI.ClassicMap → SetMaterial(0, …) (vrai : K2Node_CallFunction_131, faux : K2Node_CallFunction_111) |
etat/ST/STB/dumps/StreetMap_Static__EventGraph.txt:5653-5690. Le dump affiche Material (vide) : le dumpeur n'imprime pas les objets par défaut des broches (estimé). Les deux matériaux sont importés par le BP (voir ci-dessous) |
| Le BP importe bien les deux matériaux, en 5.5, en 5.8 et dans la cuisson 5.8 | grep -a -o : /Game/Heavy/New2/Buildings/Mats/StreetMapClassic et .../StreetMapMasked, 1 fois chacun dans les trois fichiers et dans git show 1122e17:Content/BPs/StreetMap_Static.uasset |
Caméra de la carte Birdview : perspective, FOV 90, bAutoCalculateOrthoPlanes = False (sans effet en perspective) |
etat/CAM/CAM-T4_LPDumpComponents_20261011-004910.txt:282-307 (ProjectionMode par défaut = perspective) ; etat/CAM/CAM-AUDIT.md:72 (position (0, 0, 20000), tangage -45) |
| Monde loin de l'origine : composants du niveau vers X ≈ -3,13e6, Y ≈ -1,50e7 (≈ 150 km) | CAM-T4_LPDumpComponents_20261011-004910.txt:237, 476, 715 |
Conséquence (estimé) : le proxy C++ du plugin (StreetMapSceneProxy.cpp) ne sert qu'aux composants UStreetMapComponent
(éditeur, acteurs importés), pas à la carte du jeu. En jeu, StreetMap ne sert que de données (UStreetMap : routes, bâtiments, aménités ; structs StreetMapBuilding, StreetMapRoad dans StreetMap_Static, Birdview, CityExpansion).
2. Comparaison 5.5 / 5.8
| Élément | 5.5 | 5.8 | Verdict | Preuve |
|---|---|---|---|---|
Plugin : fichiers hors Binaries/Intermediate |
— | — | 2 fichiers diffèrent, seulement par les gardes C4996 | diff -rq des deux Plugins/StreetMap |
StreetMapSceneProxy.cpp |
GetMaterialRelevance(FeatureLevel) |
même appel sous #if UE_VERSION_OLDER_THAN(5, 8, 0), sinon GetMaterialRelevance(GetScene().GetShaderPlatform()) |
équivalent (commentaire l. 25-27) ; proxy hors jeu (§ 1) | Plugins/StreetMap/Source/StreetMapRuntime/StreetMapSceneProxy.cpp:22-28 |
StreetMapComponentDetails.cpp |
API 5.5 | W2, W3, W4 sous garde | éditeur seulement (panneau de détails, police, ImportVersion) |
diff, ruptures.md § 3 W2-W4 |
StreetMap.uplugin |
identique | diff -rq (aucune ligne) |
||
StreetMapDefaultMaterial.uasset |
e21255aa… |
e21255aa… |
identique | md5sum |
Activation dans LifePlay.uproject |
"StreetMap", "Enabled": true |
idem, l. 45-46 | identique | diff des deux .uproject (aucune ligne StreetMap) |
Addon LPSandbox.uproject |
— | "StreetMap", "Enabled": false l. 31-32 |
sans effet sur le jeu (estimé) : seul le .uproject du jeu est lu ; l'addon est monté par AdditionalPluginDirectories ../LifePlay-Sandbox-5.8/Plugins (LifePlay.uproject:333), pas par son .uproject |
grep -n ; à confirmer dans le journal (StreetMap monté, ci-dessous) |
| Journal 5.8 | — | LogPluginManager: Mounting Project plugin StreetMap ; InternalLoadLibrary: 'StreetMapRuntime' ; aucune ligne StreetMap en Warning/Error |
plugin chargé | Saved/Logs/LifePlay.log, LifePlay-backup-2026.10.19-09.27.31.log |
Matériaux StreetMapMasked, StreetMapClassic |
a5a08453, 2a650161 |
idem | identiques (non réenregistrés en 5.8 : U5 « hors Heavy ») | md5sum |
Maillage Heavy/StreetMap/Static/CentralLondon |
fba15a84cc46 |
idem | identique (format 5.5, données de rendu reconstruites par le moteur 5.8) | md5sum |
Données Heavy/StreetMap/CentralLondon (UStreetMap) |
a6c4d9b6 |
idem | identiques ; 280/280 villes contrôlées en 5.8 | md5sum ; etat/U58/U8/U8-T7b-VAL.md § 3.3 |
BP StreetMap_Static |
diffère : resave U5 (809102a) et IsValid STB-SMS (281207f, CHG-288) ; références de matériaux inchangées |
git log -- Content/BPs/StreetMap_Static.uasset |
||
DefaultEngine.ini [/Script/Engine.RendererSettings] |
identique (seuls commentaires et CompilerVersion diffèrent) : TAA, pas de Lumen, SSR, VSM off |
diff des deux fichiers ; Config/DefaultEngine.ini:13-27 |
||
DefaultScalability.ini |
r.TranslucencyLightingVolumeDim |
r.TranslucencyLightingVolume.Dim |
renommage voulu (U3) ; les 18 variables de la 5.8 existent dans le moteur sauf fx.Niagara.QualityLevel (plugin Niagara, hors périmètre de la recherche) et r.PostProcessAAQuality (absente aussi en 5.5 : aucun écart) |
boucle grep -rqF sur UE_5.8/Engine/Source/Runtime/{Renderer,Engine,RenderCore,Landscape,RHI} |
| Nanite, Lumen, VSM, ordre de tri, translucidité | aucune clé StreetMap ; projet sans Nanite/Lumen/VSM ; carte non translucide (Masked / Opaque) | § 1 |
3. Valeurs par défaut du moteur qui changent (non fixées par le projet)
| Variable | 5.5 | 5.8 | Touche la carte ? | Preuve |
|---|---|---|---|---|
r.EarlyZPassOnlyMaterialMasking (lecture seule, redémarrage requis) |
0 | 1 | oui : matériaux masqués, dont StreetMapMasked |
UE_5.5/.../Renderer/Private/RendererScene.cpp:111-112 ; UE_5.8/.../Renderer/Private/RendererScene.cpp:138-139 ; utilisé par MaskedInEarlyPass() UE_5.8/.../RenderCore/Private/RenderUtils.cpp:534-545 |
r.EarlyZPass |
3 | 3 | — | RendererScene.cpp 5.5 l. 119-120, 5.8 l. 146-147 |
r.Material.Translator.EnableNew (nouveau traducteur MIR) |
— | false |
non | UE_5.8/.../Engine/Private/Materials/MaterialShared.cpp:109-110 |
Nœud If : Compile() |
code identique | MaterialExpressions.cpp des deux moteurs (fonction UMaterialExpressionIf::Compile) ; en-tête : seuls initialiseurs et GetInputValueType changent |
||
r.Substrate, r.VertexFoggingForOpaque, r.SkyAtmosphere, r.LocalFogVolume, r.Shadow.CSM.MaxCascades, r.GPUScene.UploadEveryFrame |
mêmes défauts | relevé grep -A2 dans les deux moteurs |
||
BaseScalability.ini : blocs r.MegaLights.*, r.Shadow.Virtual.* (biais LOD, rayons) |
ajoutés ou changés | peu probable : VSM désactivé par le projet ; MegaLights non activé par le projet (aucune clé) | diff des deux BaseScalability.ini |
|
MaterialAO (visualisation) |
EnableOnMobile=true |
non | diff des BaseEngine.ini |
4. Hypothèses classées
| # | Hypothèse | Niveau | Pour | Contre / manque | Essai qui tranche (J2) |
|---|---|---|---|---|---|
| H1 | r.EarlyZPassOnlyMaterialMasking=1 (défaut 5.8) change le rendu de StreetMapMasked : masque calculé dans la prépasse de profondeur, passe de base en test de profondeur « égal ». Sur un maillage plat, immense, aux couches coplanaires (sol, routes, emprises de bâtiments) et à ≈ 150 km de l'origine, un écart de profondeur entre prépasse et passe de base donnerait trous, scintillement ou couches qui se mangent |
estimé (seul écart établi qui touche la carte) | écart de défaut établi (§ 3) ; matériau masqué établi (§ 1) ; aucun autre écart dans les fichiers du projet | mécanisme d'artefact non prouvé ; symptôme F3 non décrit | E1, E2 |
| H2 | Données de rendu du maillage Static/CentralLondon reconstruites par le moteur 5.8 (paquet de format 5.5 non réenregistré) avec d'autres réglages de construction (couleurs de sommets, tangentes, précision des UV) : le matériau lit VertexColor |
incertain | paquet non réenregistré (U5 « hors Heavy ») ; matériaux pilotés par la couleur de sommet | ERR-018 et U8-T7b montrent des données sources identiques ; aucune preuve de perte | E3 |
| H3 | Éclairage global du niveau changé par d'autres défauts 5.8 (exposition, ciel, brouillard) : la carte « paraît » différente sans défaut propre | incertain, faible | STA-T3-DOC.md (STA-D07) : rendu 5.5 / 5.8 jamais comparé au même cadrage, « StreetMap non plus » |
aucun défaut de variable changé trouvé dans ce périmètre (§ 3) | E1 (captures au même cadrage) |
| H4 | Plugin StreetMap (C4996, MaterialRelevance par plateforme de shader) |
écarté pour le jeu (estimé fort) | — | la carte en jeu n'utilise pas UStreetMapComponent (§ 1) ; changement W1 équivalent |
E4 si l'écart concerne l'éditeur |
| H5 | Activation : plugin désactivé dans l'addon | écarté | — | LifePlay.uproject:45-46 active le plugin ; journal 5.8 : plugin monté, DLL chargée |
— |
| H6 | Matériaux, données, BP, config de rendu du projet | écarté | — | identiques (§ 2) ; BP : seules les modifications U5 et CHG-288, références de matériaux présentes | — |
Défaut latent hors F3 (même code en 5.5 et 5.8) : FStreetMapSceneProxy::MakeMeshBatch dessine toujours
StreetMapComp->GetDefaultMaterial() en passe statique et ignore MaterialInterface (matériau posé sur le composant)
(StreetMapSceneProxy.cpp:52-64 et :128). Sans effet sur la carte du jeu (§ 1) ; à noter si un essai porte sur un StreetMapActor en éditeur.
5. BUILD-DEMANDE pour le J2 (proposition, sous le jeton UE de Big Boss)
Préalable sans copie UE : l'utilisateur décrit le symptôme (ce qui est « anormal » : couleurs, trous, scintillement, couches manquantes, bâtiments, routes, vue Birdview ou carte au sol) et, si possible, une capture 5.5 et 5.8 au même cadrage. Sans cela, E1 sert aussi de constat.
| Essai | Action | Écriture | Attendu qui tranche |
|---|---|---|---|
| E1 | Jeu 5.8 (PIE ou Development), carte ouverte : captures avec ClassicMap vrai (opaque) puis faux (masqué), même cadrage ; mêmes captures en 5.5 |
aucune | Classic normal et Masked anormal en 5.8 seulement → H1 très probable ; les deux anormaux → H2 ou H3 |
| E2 | Ajouter r.EarlyZPassOnlyMaterialMasking=0 dans Config/DefaultEngine.ini [/Script/Engine.RendererSettings] (variable lecture seule : relancer l'éditeur, recompilation des shaders de passe de base), refaire E1 |
1 ligne d'ini, sous instantané Tools/Snapshot.ps1, retour arrière par Restore.ps1 |
rendu 5.8 redevenu égal à la 5.5 → H1 établie ; correctif = cette ligne (même principe que L7c : rendre explicite la valeur jouée en 5.5) |
| E3 | Éditeur 5.8, ouvrir Heavy/StreetMap/Static/CentralLondon (lecture) : sommets, triangles, sections, affichage des couleurs de sommets ; comparer aux valeurs d'ERR-018 / U8-T7b_streetmap_58.csv |
aucune | couleurs de sommets absentes ou comptes différents → H2 |
| E4 | (si l'écart est en éditeur) placer un StreetMapActor de Heavy/StreetMap/CentralLondon dans un niveau vide non enregistré |
aucune sauvegarde | écart visible seulement là → piste plugin, hors jeu |
| E5 | stat / console en jeu : r.EarlyZPassOnlyMaterialMasking, r.EarlyZPass (valeurs effectives) |
aucune | confirme les valeurs du § 3 en exécution |
Ordre conseillé : E5 + E1 (sans écriture, ≈ 10 min), puis E2 seulement si E1 désigne le matériau masqué. E2 touche tous les matériaux masqués du jeu (feuillage, grilles, cheveux) : à valider aussi sur une scène d'intérieur avec personnages.
6. Mesuré (commandes et sorties brutes, extraits)
$ diff -rq "/d/Game/LifePlay-master 5.5/Plugins/StreetMap" Plugins/StreetMap | grep -v -E "Binaries|Intermediate"
Files '.../5.5/Plugins/StreetMap/Source/StreetMapImporting/StreetMapComponentDetails.cpp' and Plugins/StreetMap/Source/StreetMapImporting/StreetMapComponentDetails.cpp differ
Files '.../5.5/Plugins/StreetMap/Source/StreetMapRuntime/StreetMapSceneProxy.cpp' and Plugins/StreetMap/Source/StreetMapRuntime/StreetMapSceneProxy.cpp differ
$ md5sum (5.5 puis 5.8)
e21255aaa643d2485f476fa04e3dcce3 Plugins/StreetMap/Content/StreetMapDefaultMaterial.uasset (les deux)
2a650161 2a650161 Content/Heavy/New2/Buildings/Mats/StreetMapClassic.uasset
a5a08453 a5a08453 Content/Heavy/New2/Buildings/Mats/StreetMapMasked.uasset
a6c4d9b6 a6c4d9b6 Content/Heavy/StreetMap/CentralLondon.uasset
fba15a84cc46 fba15a84cc46 Content/Heavy/StreetMap/Static/CentralLondon.uasset
$ sed -n 108,118p UE_5.5/.../RendererScene.cpp ; sed -n 134,150p UE_5.8/.../RendererScene.cpp
TEXT("r.EarlyZPassOnlyMaterialMasking"),
0, (5.5)
TEXT("r.EarlyZPassOnlyMaterialMasking"),
1, (5.8)
$ grep -a -o ... Content/Heavy/New2/Buildings/Mats/StreetMapMasked.uasset | sort | uniq -c
2 BLEND_Masked
1 MSM_DefaultLit
1 MaterialExpressionVertexColor
1 MaterialExpressionIf
1 MaterialExpressionTextureSample
1 /Game/Heavy/New2/Buildings/Mats/road
7. Incertitudes, non mesuré, écarts
- Non mesuré : tout rendu (aucun éditeur ni jeu lancé, par consigne) ; le symptôme de F3 lui-même ; valeurs effectives des variables en exécution.
- Non relevé : journaux d'un jeu empaqueté 5.8 (Shipping) ; liste complète des défauts de variables changés entre 5.5 et 5.8 (seules celles du § 3 sont vérifiées) ; plugins de rendu activés dans le seul
.uproject5.8 (listediffdu § 2 : outils MCP éditeur et HyperAIStudio, sans rôle de rendu en jeu, estimé). - Écarts à la fiche :
lp-lotetlp-pathsnon chargés (chemins et format repris de la fiche et deQG1-TACHES.md) ;grep/seden Bash utilisés pour lire (sk-protocol § 7 recommande Read/Grep). - Fichiers écrits :
D:\Game\LifePlay-master 5.8\Docs\Migration\etat\REL\STM1\STM1-CART-01.md(A),D:\Game\LifePlay-master 5.8\Docs\Migration\etat\REL\STM1\STM1-TACHES.md(A). Fichiers à commiter : ces deux (A), par le gardien.
Tours : ≈ 33 / 40 (déclaré ; FicheStats.py fait foi).
À verser :
lp-ue-compat§ 4 (points surveillés) — défaut moteurr.EarlyZPassOnlyMaterialMasking0 → 1 en 5.8 (RendererScene.cpp5.5:111, 5.8:138), non fixé par le projet ; touche tous les matériaux masqués.lp-pathsou doc de la carte — la carte du jeu estStreetMap_Static(StaticMeshComponent, maillagesHeavy/StreetMap/Static, matériauxStreetMapMasked/StreetMapClassicselonGI.ClassicMap) ; le plugin StreetMap n'y sert que de données.lp-commandlets(LPDump) — les broches objet par défaut (SetMaterial.Material) s'affichent « (vide) » : ne pas en conclure une référence nulle.
Suite : Big Boss doit faire décrire le symptôme à l'utilisateur puis ouvrir le J2 STM1 (E5 + E1 sans écriture, E2 sous instantané si E1 désigne le matériau masqué), état : CART close, H1 en tête, aucun fichier du projet modifié.