135 lines
9.7 KiB
Markdown
135 lines
9.7 KiB
Markdown
|
|
# 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).
|