LifePlay.uproject : SupportedTargetPlatforms Win64 sur LPAnimCore, origine non revendiquee, range ici. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
6 KiB
VQ5-VAL — Annexe : chemins de code Overall / Custom / Recommended
Fiche : VQ5-T2
Rôle : A-VAL (annexe de Docs/Migration/24_Eval_Agents_VideoQuality.md)
Date : 07 octobre 2026
Entrée : VQ2-VAL.md, VQ3-VAL.md, VQ4-VAL.md, Source/LifePlay/LPVideoQualitySubsystem.cpp
Modèle
| Modèle | |
|---|---|
| Attendu | claude-opus-5-5-medium (M4) |
| Réel | claude-opus-5-5-medium (Claude Opus 5.5) |
Verdict : PASS (code) — BLOCKED-UI inchangé pour l'exécution des clics
1. Choix : note annexe plutôt que nouveau smoke -nullrhi
Un nouveau démarrage -nullrhi n'apporterait rien de plus que VQ4VAL.log :
- aucun code n'a changé depuis VQ4 (
git diff --stat: seulsLPSettingsSubsystem.cpp,LifePlay.Build.cset le journal ; DLL 23:29:07 postérieure aux sources, cf. VQ4-VAL §3) ; - les trois chemins Overall / Custom / Recommended ne s'exécutent que sur un événement du menu Settings (curseur ou bouton). Le sous-système n'expose aucune commande console :
-ExecCmdsne peut pas les atteindre. En-nullrhi,RHIGetTextureMemoryStatsne renvoie de toute façon pas de VRAM réelle.
Le smoke VQ4 est donc réutilisé comme preuve de démarrage, et cette annexe relie chaque chemin à son code.
2. Preuve de démarrage réutilisée (Saved/Logs/VQ4VAL.log, relu)
l.1121 LogLifePlay: Display: Couleur : relu Brightness 0.00, Saturation 1.00, Contrast 1.00, White Balance 6500, Tint 0.00 depuis .../LPColorGrade.ini
l.1153 LogLifePlay: Display: Video : pas de .../LPVideoQuality.ini, niveaux lus depuis Scalability (Overall 3, Shadows 3, Textures 3, Effects 3, AA 3)
- Aucun
WarningniErrorLogLifePlay. Seules lignes contenantError: l.12 (Trace Server, accès refusé, sans lien) et l.1468 (InputMode:UIOnly ... Non-Focusable widget, déjà vue en VQ2/VQ3). - Chemin couvert :
Initialize→Load→ReadFromScalability→Normalize(Overall = 3 car les 4 groupes sont égaux), puisApplyToScalabilitysort sans rien écrire (bConfigured == false).
3. Chemins de code (LPVideoQualitySubsystem.cpp)
| Chemin | Appel | Code | Résultat attendu | Statut |
|---|---|---|---|---|
| Overall | curseur LPVideoOverall → OnOverallChanged (l.331) |
SetLevels(FromOverall(RoundToInt(V)), true) ; FromOverall (l.116) borne 0..3 et met les 5 champs au même niveau ; SetLevels (l.289) prend la branche bFromOverall && Overall >= 0 |
4 groupes = N, readout Low/Med/High/Epic, Save, ApplyToScalability |
PASS (code) |
| Custom | curseur individuel → OnShadows/Textures/Effects/AAChanged (l.340-382) |
copie de Levels, un champ modifié, SetLevels(L, false) → Normalize (l.128) : Overall = (4 égaux) ? niveau : -1 |
LevelLabel(-1) = Custom (l.150) ; curseur Overall placé sur la moyenne arrondie (l.314) |
PASS (code) |
| Retour depuis Custom | ramener les 4 curseurs au même niveau | même Normalize |
Overall réaffiche ce niveau | PASS (code) |
| Recommended | bouton LPVideoRecommended → OnRecommendedClicked (l.384, lié l.465) |
QueryDedicatedVideoMemoryBytes (l.36 : garde GDynamicRHI, max(.., 0)) → LevelFromVramGB (l.48 : ≤ 0 → 2 ; < 4 → 0 ; < 6 → 1 ; < 10 → 2 ; sinon 3) → SetLevels(FromOverall(Level), true) |
même chemin que Overall ; journal Recommended = ... VRAM dediee ... |
PASS (code) |
| Anti-boucle | RefreshWidgets (l.306) |
garde bRefreshing ; chaque handler sort si elle est levée |
SetValue ne relance pas SetLevels |
PASS (code) |
| Ré-application | Tick (l.168) nouveau monde de jeu ; fin d'EnsureControls (l.621) |
ApplyToScalability |
le Blueprint ne réécrase pas les niveaux au chargement / à l'ouverture du menu | PASS (code) |
| Exécution réelle des clics | menu Settings ouvert, vrai RHI | — | journaux controles ajoutes, enregistres dans, Recommended = ... |
BLOCKED-UI |
4. Constat hors des trois chemins (relevé pendant VQ5)
Le point 1 de VQ1-IMPL.md §4 (« confronter chaque valeur à Engine/Config/BaseScalability.ini ») n'a été repris par aucune fiche VAL. Comparaison faite ici (D:\Game\Launcher\Engine\UE_5.5\Engine\Config\BaseScalability.ini), écarts réels au niveau 3 (Epic), celui que le moteur applique au démarrage (Overall 3 ci-dessus) :
| cvar | Moteur 5.5 | Projet | Effet |
|---|---|---|---|
r.Shadow.CSM.MaxCascades |
10 | 4 | moins de cascades au loin |
r.Shadow.RadiusThreshold |
0.01 | 0.03 | les petits objets perdent leur ombre plus tôt |
r.DetailMode |
3 | 2 | composants « detail mode » Epic masqués |
r.RefractionQuality |
2 | 3 | au-dessus du palier Epic moteur (contraire à VQ1-SPEC §3) |
r.PostProcessAAQuality |
(non fixé par AntiAliasingQuality@3) |
4 | valeur imposée |
Aux niveaux 0–2, d'autres écarts existent (r.Streaming.PoolSize 200/400/700 contre 400/600/800, r.Streaming.MipBias@0 2.5 contre 16, r.Shadow.MaxResolution@2 2048 contre 1024, etc.).
Conséquence : DefaultScalability.ini modifie le rendu Epic pour tous les joueurs, même sans ouvrir l'onglet Video. L'affirmation « sans INI, aucun changement par rapport à l'état actuel » (VQ2-SPEC §6.2, doc 23 §2.1) n'est vraie que pour les niveaux sg.*, pas pour les cvars qu'ils appliquent. Aucun verrou L7c n'est touché (GI, VSM, méthode d'AA, reflets), donc les verdicts VQ1 et VQ4 tiennent sur leur contrat. En revanche, la baseline visuelle de L7c n'est plus garantie au niveau Epic. Suite proposée : voir la recommandation 1 du doc 24.
5. Synthèse
| Critère | Statut |
|---|---|
Overall → FromOverall → 4 groupes |
PASS (code) |
Individuel → Normalize → Custom / retour niveau |
PASS (code) |
Recommended → VRAM → FromOverall |
PASS (code) |
Démarrage -nullrhi (preuve VQ4 relue) |
PASS |
| Clics réels dans Settings | BLOCKED-UI |
Valeurs DefaultScalability.ini vs moteur |
Réserve (écarts Epic, §4) |