LifePlay-Revival/Docs/Migration/etat/VQ/VQ5/VQ5-VAL.md
edujiro5972 0f1a61c9fe VQ : qualite video (sous-systeme LPVideoQuality, onglet Reglages, DefaultScalability), lots VQ0 a VQ5 et correctifs (CHG-237 a 242)
LifePlay.uproject : SupportedTargetPlatforms Win64 sur LPAnimCore, origine non revendiquee, range ici.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-08 01:40:47 +02:00

6 KiB
Raw Blame History

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 : seuls LPSettingsSubsystem.cpp, LifePlay.Build.cs et 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 : -ExecCmds ne peut pas les atteindre. En -nullrhi, RHIGetTextureMemoryStats ne 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 Warning ni Error LogLifePlay. Seules lignes contenant Error : 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), puis ApplyToScalability sort 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)