LifePlay-Revival/Docs/Migration/etat/VQ/VQ1/VQ1-SPEC.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

134 lines
9.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# VQ1-SPEC — Spécification `DefaultScalability.ini` (Low → Epic)
**Fiche :** VQ1-T1
**Rôle :** A-ARCH
**Modèle attendu :** claude-sonnet-5-5-high (M2)
**Date :** 07 octobre 2026
**Workspace :** `d:\Game\LifePlay-master 5.5`
**Statut :** Spécification — prête pour implémentation (VQ1-T2)
**Dépend de :** `VQ0-CART.md` (cartographie des réglages Video), lot L7c (`Config/DefaultEngine.ini`)
---
## 1. Objectif
Définir, pour le projet, un fichier `Config/DefaultScalability.ini` qui précise explicitement les cvars appliqués par les niveaux de qualité **0 (Low) → 3 (Epic)** pour **quatre groupes seulement** :
| Groupe | cvar de niveau | Section INI (par niveau) |
|---|---|---|
| Ombres | `sg.ShadowQuality` | `[ShadowQuality@0]` … `[ShadowQuality@3]` |
| Textures | `sg.TextureQuality` | `[TextureQuality@0]` … `[TextureQuality@3]` |
| Effets | `sg.EffectsQuality` | `[EffectsQuality@0]` … `[EffectsQuality@3]` |
| Anti-aliasing (qualité) | `sg.AntiAliasingQuality` | `[AntiAliasingQuality@0]` … `[AntiAliasingQuality@3]` |
Ces quatre groupes préparent le futur bloc `LPVideo*` (VQ0-CART §7) et remplacent la dépendance implicite aux valeurs par défaut du moteur par des valeurs **lisibles, versionnées et revues**.
## 2. Périmètre et interdits
### 2.1 Dans le périmètre
- Niveaux **0, 1, 2, 3** des 4 groupes ci-dessus.
- Cvars de qualité « classiques » UE5 (résolution d'ombres, cascades, pool de textures, anisotropie, qualité de réfraction, qualité du post-AA).
### 2.2 Interdits (hors périmètre — ne doit jamais apparaître dans `DefaultScalability.ini`)
| Interdit | Raison |
|---|---|
| Illumination globale dynamique (`r.DynamicGlobalIlluminationMethod`, `r.Lumen.*`, groupe `GlobalIlluminationQuality`) | Verrouillée à `0` par le lot L7c (rendu 4.27 conservé). |
| Ombres virtuelles / VSM (`r.Shadow.Virtual.*`, y compris `r.Shadow.Virtual.Enable`) | Verrouillées à `0` par L7c. Aucune cvar `r.Shadow.Virtual.*` ne doit être ajoutée, même « inoffensive ». |
| Méthode d'anti-aliasing (`r.AntiAliasingMethod`) | Verrouillée à `2` (TAA) par le lot L6a / L7c : TSR fait scintiller les maillages à morphs. Le groupe `AntiAliasingQuality` ne règle **que** la qualité, pas la méthode. |
| Méthode de reflets (`r.ReflectionMethod`, `r.SSR.*`, groupe `ReflectionQuality`) | Verrouillée à `2` (SSR) par L7c. |
| Groupes `ViewDistanceQuality`, `PostProcessQuality`, `ShadingQuality`, `FoliageQuality`, `LandscapeQuality`, `ResolutionQuality`, `GlobalIlluminationQuality`, `ReflectionQuality`, `SkeletalMeshQuality`, `HeightFieldShadowQuality`… | Non demandés ; les valeurs moteur (`BaseScalability.ini`) restent inchangées. |
| Niveau Cinematic (`@Cine`, niveau 4) | Non exposé au joueur ; valeurs moteur conservées. |
| Toute modification de `Config/DefaultEngine.ini` | Les contraintes L7c/L6a y restent la source de vérité. |
> **Garde-fou L7c (rappel) :** `r.DynamicGlobalIlluminationMethod=0`, `r.ReflectionMethod=2`, `r.Shadow.Virtual.Enable=0`, `r.AntiAliasingMethod=2` dans `[/Script/Engine.RendererSettings]` de `DefaultEngine.ini`. Ces valeurs sont au niveau de priorité *ProjectSetting*, supérieur à *Scalability* : elles ne peuvent pas être écrasées par un niveau de scalabilité, mais la règle ci-dessus évite néanmoins toute tentative.
## 3. Correspondance des niveaux
| Niveau | Nom | Usage |
|---|---|---|
| 0 | Low | Machines faibles / GPU intégrés |
| 1 | Medium | Machines modestes |
| 2 | High | Cible standard |
| 3 | Epic | Qualité maximale proposée ; reste **conservatrice** (pas de valeur au-delà du palier Epic moteur) |
Principe « conservateur » : chaque valeur est choisie **au plus égale** à l'équivalent Epic du moteur UE 5.5 et sans activer de fonctionnalité nouvelle par rapport au rendu 4.27 validé. Aucune cvar susceptible de changer le *look* (volumetric fog, distance-field shadows, capsule shadows, SSS profile, bloom…) n'est incluse : elles restent aux valeurs moteur.
## 4. Tableau niveau → cvars
### 4.1 ShadowQuality (`sg.ShadowQuality`)
| cvar | 0 Low | 1 Medium | 2 High | 3 Epic | Commentaire |
|---|---|---|---|---|---|
| `r.Shadow.CSM.MaxCascades` | 1 | 2 | 3 | 4 | Cascades du soleil |
| `r.Shadow.MaxResolution` | 512 | 1024 | 2048 | 2048 | Résolution max ombre dynamique (plafonnée à 2048) |
| `r.Shadow.MaxCSMResolution` | 512 | 1024 | 2048 | 2048 | Résolution max par cascade |
| `r.Shadow.RadiusThreshold` | 0.06 | 0.05 | 0.04 | 0.03 | Rayon écran min. pour projeter une ombre |
| `r.Shadow.DistanceScale` | 0.6 | 0.7 | 0.85 | 1.0 | Distance de rendu des ombres |
| `r.Shadow.CSM.TransitionScale` | 0.0 | 0.25 | 0.6 | 1.0 | Fondu entre cascades |
| `r.Shadow.PreShadowResolutionFactor` | 0.5 | 0.5 | 0.75 | 1.0 | Résolution des pré-ombres |
Non inclus volontairement : `r.Shadow.Virtual.*` (interdit), `r.DistanceFieldShadowing`, `r.CapsuleShadows`, `r.VolumetricFog*`, `r.LightMaxDrawDistanceScale`, `r.LightFunctionQuality`.
Cohérence : `r.MinScreenRadiusForCSMDepth=0.010000` reste fixé dans `DefaultEngine.ini` (non touché).
### 4.2 TextureQuality (`sg.TextureQuality`)
| cvar | 0 Low | 1 Medium | 2 High | 3 Epic | Commentaire |
|---|---|---|---|---|---|
| `r.Streaming.MipBias` | 2.5 | 1 | 0 | 0 | Mips abaissés (0 = pleine résolution) |
| `r.MaxAnisotropy` | 0 | 2 | 4 | 8 | Filtrage anisotrope |
| `r.Streaming.PoolSize` | 200 | 400 | 700 | 1000 | Budget pool de streaming (Mo) |
| `r.Streaming.MaxEffectiveScreenSize` | 0 | 0 | 0 | 0 | 0 = comportement moteur |
`r.TextureStreaming=True` reste imposé par `DefaultEngine.ini`.
### 4.3 EffectsQuality (`sg.EffectsQuality`)
| cvar | 0 Low | 1 Medium | 2 High | 3 Epic | Commentaire |
|---|---|---|---|---|---|
| `r.TranslucencyLightingVolumeDim` | 24 | 32 | 48 | 64 | Volume d'éclairage des translucides |
| `r.RefractionQuality` | 0 | 2 | 2 | 3 | Qualité de réfraction |
| `r.SSS.Scale` | 0.25 | 0.5 | 0.75 | 1.0 | Échelle subsurface scattering |
| `r.SSS.SampleSet` | 0 | 1 | 2 | 2 | Jeu d'échantillons SSS |
| `r.DetailMode` | 0 | 1 | 2 | 2 | Seuil des composants « detail mode » |
| `fx.Niagara.QualityLevel` | 0 | 1 | 2 | 3 | Niveau de qualité Niagara |
Non inclus : `r.SSR.Quality`, `r.Lumen.*` (interdits), `r.BloomQuality`, `r.SceneColorFormat`, `r.EmitterSpawnRateScale`.
### 4.4 AntiAliasingQuality (`sg.AntiAliasingQuality`)
| cvar | 0 Low | 1 Medium | 2 High | 3 Epic | Commentaire |
|---|---|---|---|---|---|
| `r.PostProcessAAQuality` | 0 | 2 | 4 | 4 | Qualité du post-AA (échelle moteur 0–6) |
Non inclus : `r.AntiAliasingMethod` (interdit, fixé à 2/TAA), `r.TSR.*` (TSR non utilisé), `r.TemporalAA*`.
`r.PostProcessAAQuality=4` pour Epic = palier moteur ; la valeur 6 est réservée à Cinematic et n'est pas utilisée.
## 5. Note « Overall »
`sg.OverallQuality` (« Overall ») n'a **pas** de section propre dans `DefaultScalability.ini` : l'application d'un niveau Overall `N` consiste à **appliquer le même niveau `N` aux quatre groupes** (`sg.ShadowQuality`, `sg.TextureQuality`, `sg.EffectsQuality`, `sg.AntiAliasingQuality` = `N`). Les autres groupes de scalabilité restent à leur valeur courante.
Conséquence pour le futur sous-système `LPVideo*` : un sélecteur « Overall » doit écrire `N` sur ces 4 groupes uniquement (via `Scalability::SetQualityLevels` en préservant les autres champs de `FQualityLevels`), et ne pas déclencher d'effet de bord sur GI, reflets, VSM ou méthode d'AA.
## 6. Règles de fusion et de priorité
1. `Config/DefaultScalability.ini` est lu après `Engine/Config/BaseScalability.ini` ; les sections portant le même nom (`[ShadowQuality@2]`…) sont **fusionnées clé par clé** : les clés non listées conservent la valeur moteur.
2. Les cvars appliquées par scalabilité ont la priorité `SetByScalability`, **inférieure** à `SetByProjectSetting` (`DefaultEngine.ini`). Les verrous L7c ne peuvent donc pas être contournés.
3. Les valeurs `sg.*` choisies par le joueur sont persistées dans `GameUserSettings.ini` (`Saved/Config/Windows`) ; elles choisissent le niveau, pas le contenu des sections.
4. Aucun `DeviceProfile` n'est défini dans `Config/` (pas de `DefaultDeviceProfiles.ini`) : pas de surcharge supplémentaire à prévoir.
5. Le fichier ne contient que des sections `@0`–`@3` des 4 groupes, rien d'autre.
## 7. Points d'attention (VQ0-CART §6)
- **Redondance BP :** les curseurs BP `ShadowQuality`, `PostProcessAAQuality` (qui pilote `r.PostProcessAAQuality` directement), `PostProcessQuality` restent actifs. Un curseur BP `AA Quality` qui fixe directement `r.PostProcessAAQuality` aura priorité de dernière écriture sur le niveau `sg.AntiAliasingQuality` ; le futur `LPVideo*` devra les masquer/synchroniser (hors périmètre VQ1).
- **Aucun changement C++/Blueprint** dans VQ1 : uniquement configuration.
- **Vérification des valeurs moteur :** les valeurs de §4 sont fondées sur les paliers usuels de `BaseScalability.ini` UE 5.x ; elles doivent être confrontées au fichier de l'installation 5.5 lors de la validation (VQ1-VAL).
## 8. Critères d'acceptation (pour VQ1-T2 et validation)
- [ ] `Config/DefaultScalability.ini` existe et ne contient que `[ShadowQuality@0..3]`, `[TextureQuality@0..3]`, `[EffectsQuality@0..3]`, `[AntiAliasingQuality@0..3]`.
- [ ] Aucune occurrence de `Virtual`, `Lumen`, `GlobalIllumination`, `AntiAliasingMethod`, `ReflectionMethod`, `SSR` dans le fichier.
- [ ] `Config/DefaultEngine.ini` inchangé (L7c intact).
- [ ] En jeu, `sg.ShadowQuality 0..3` (etc.) modifie `r.Shadow.MaxResolution`, `r.Streaming.PoolSize`, etc. conformément au §4 (`Scalability` console / `stat`/`r.X` en lecture).
- [ ] Rendu à niveau 3 : GI dynamique, VSM et méthode d'AA inchangés (Lumen/VSM off, TAA).