LifePlay-Revival/Docs/Migration/etat/REL/QPERS/QPERS-PRE.md
2026-10-21 09:36:04 +02:00

27 KiB
Raw Blame History

Fiche QPERS-PRE — Niveau N2 — Modèle prévu non précisé par la fiche | utilisé Sonnet 5.5 (claude-sonnet-5-5) — Agent lp-cart — Skills sk-protocol, ue-cpp-build, lp-commandlets, lp-paths

QPERS-PRE : quick win sur la qualité des personnages, réglages de rendu à essayer en console (2026-10-20)

Hors gabarit : les sections 7 (protocole d'essai console) et 8 (recommandation et diff d'ini) sont demandées par la fiche et s'ajoutent aux six sections CART. Lecture seule : rien n'a été lancé (ni jeu, ni éditeur, ni MCP) ; aucun effet visuel ni coût GPU n'a été mesuré par l'auteur de cette fiche.

1. Objet et périmètre

Demande de l'utilisateur, citée mot pour mot : « un quick win sur la qualité des personnages ».

Domaine : le rendu des personnages (peau, visage, cheveux, yeux) dans le build Development D:\Game\LifePlay_Build_5.8_Development_COM23\Windows\LifePlay.exe (présent, 301 568 octets), moteur 5.8.3 (D:\Game\Launcher\Engine\UE_5.8\Engine\Build\Build.version : "PatchVersion": 3, "Changelist": 58210709). Réglages visés : essayables par la console (touche ², Config/DefaultInput.ini:166-168), sans compilation, à graver ensuite dans Config/DefaultScalability.ini ou Config/DefaultEngine.ini. Machine de la session relevée dans le journal du build COM23 : processeur Ryzen 7 5800H, carte AMD Radeon RX 6600M (Saved/Logs/LifePlay.log:295), mémoire vidéo dédiée détectée 8,0 Go (LifePlay.log:1503).

Hors périmètre : toute modification d'asset ou de code (décrite en section 6 comme piste, non traitée).

2. Commandes et lectures (exactes) avec compte brut

Raccourcis : LOG = D:\Game\LifePlay_Build_5.8_Development_COM23\Windows\LifePlay\Saved\Logs\LifePlay.log ; MOT = D:\Game\Launcher\Engine\UE_5.8\Engine\Source\Runtime.

# Commande ou lecture Compte brut
1 Read Config/DefaultScalability.ini ; Read Config/DefaultEngine.ini l.1-60 ; Grep `r. sg.
2 Grep `r.… sg.…dansSource/LifePlay/LPVideoQualitySubsystem.cpp` ; Read l.225-285
3 rg -a -o ".{0,70}(SubsurfaceProfile|MSM_Subsurface|SSP_Girl).{0,70}" DazSkin.uasset DazSkin_Face.uasset DazSkinHide.uasset (dossier Content/Heavy/Daz/Bridget) les trois : ShadingModel…MSM_Subsurface…ShadingModels…(ShadingModelField=4) ; DazSkin et DazSkinHide : en plus SubsurfaceProfile, /Game/Heavy/New3/Characters/SSP_Girl_Head
4 rg -a -o --with-filename -g "*.uasset" "ShadingModel.{1,6}MSM_[A-Za-z]+|MSM_(Subsurface|…)\b" Bridget Michael -d 1 21 lignes : 9 matériaux de corps B_* / M_* + DazSkin, DazSkin_Face, DazSkinHide en MSM_Subsurface ; Cornea, EyeMoisture, Eyelashes, Transparent, DazBump, DazRough en MSM_DefaultLit
5 Dans Content : rg --no-ignore -a -l -g "*.uasset" -g "*.umap" -g "!**/Anims/**" "MSM_(SubsurfaceProfile|Eye|Hair|PreintegratedSkin|Cloth)" . sortie vide, code 1 (aucun fichier) ; témoin : même commande avec MSM_Subsurface = 227 fichiers ; rg --files -g "*.uasset" = 8525 (filtre git) et 9074 (--no-ignore)
6 rg -a -o --with-filename "ShadingModel.{1,8}MSM_…|BLEND_…" Bridget/Hairs -d 1 26 lignes : cartes de cheveux en BLEND_Masked ; DazHair : BLEND_Masked ×2 + MSM_Subsurface ; DazAcessory : BLEND_Opaque + MSM_DefaultLit
7 rg -a -o ".{0,100}(r\.SSS\.Scale|r\.Streaming\.PoolSize|r\.ScreenPercentage|r\.DynamicRes…).{0,60}" Content/BPs/GI.uasset r.SSS.Scale 0 et r.SSS.Scale 1, r.Streaming.PoolSize 1500, r.ScreenPercentage , r.DynamicRes.MinScreenPercentage 50, …Max… 100, …FrameTimeBudget 33.3, sg.PostProcessQuality , r.MorphTarget.Mode
8 Grep sur LOG (motifs r\.DynamicRes|r\.ScreenPercentage|r\.SSS\.Scale|r\.Streaming\.PoolSize|Video :…, puis OperationMode|r\.TemporalAA…) 30 lignes (limite de sortie) puis 14 lignes : voir constats
9 rg -a -l "ContactShadowLength" . dans Content (*.uasset, *.umap, filtre git actif : 8525 .uasset) 0 fichier
10 Lectures de sources moteur (MOT et Engine/Shaders, Engine/Config) fichiers et lignes cités en section 3
11 rg -a -l "SkeletalMeshLODInfo|LODInfo" Heavy/Daz/Bridget Heavy/Daz/Michael -d 1 2 fichiers : Michael/michael.uasset, Bridget/bridget_gp.uasset
12 ls -l des textures de peau (Bridget8TorsoD_1002, Bridget8Face01D_1001, Bridget8_Torso_NM_1002) 7 368 606 / 10 834 981 / 1 616 354 octets
13 Grep LifePlay.uproject (HairStrands|Groom|SkinCache|Nanite) 1 ligne : LifePlay.uproject:135 "Name": "HairStrands"

3. Constats fichier:ligne

3.1 Ce qui est déjà réglé

  • AA : Config/DefaultEngine.ini:17 r.AntiAliasingMethod=2 (TAA, commentaire l.14-16, ERR-032). Le journal confirme LOG:389 Set CVar [[r.AntiAliasingMethod:2]].
  • Rendu figé : DefaultEngine.ini:22-24 pas de GI dynamique, reflets SSR, pas d'ombres virtuelles ; :26 streaming de textures actif ; :28 éclairage statique autorisé.
  • Ombres : DefaultScalability.ini:34-50 : r.Shadow.MaxResolution et r.Shadow.MaxCSMResolution valent 2048 à la fois au niveau 2 (High) et au niveau 3 (Epic) ; seuls le nombre de cascades (3 / 4), RadiusThreshold (0.04 / 0.03) et PreShadowResolutionFactor (0.75 / 1.0) diffèrent. Journal niveau 3 : LOG:455-456.
  • Textures : DefaultScalability.ini:67-77 : r.Streaming.MipBias=0 aux niveaux 2 et 3, r.MaxAnisotropy 4 / 8, r.Streaming.PoolSize 700 / 1000, r.Streaming.MaxEffectiveScreenSize=0. Journal : anisotropie 8 au niveau 3 (LOG:584), 4 au niveau 2 (LOG:1520).
  • SSS : DefaultScalability.ini:85-86, 94-95, 101-102, 109-110 : r.SSS.Scale 0.25 / 0.5 / 0.75 / 1.0 et r.SSS.SampleSet 0 / 1 / 2 / 2.
  • Qualité d'AA : DefaultScalability.ini:117-128 ne pose que r.PostProcessAAQuality (0 / 2 / 4 / 4). Cette variable n'existe pas en 5.8 : LOG:1805 Command not recognized: r.PostProcessAAQuality 3 ; LOG:450, LOG:1546 CVar [[r.PostProcessAAQuality:4]] deferred - dummy variable created ; aucun résultat dans Engine/Config ni dans MOT. Ce qui varie réellement avec le niveau d'AA vient de Engine/Config/BaseScalability.ini:52-94 : r.TemporalAA.Quality = 0 / 1 / 1 / 2 (journal : 2 au niveau 3 LOG:442, 1 au niveau 2 LOG:1542).
  • Panneau Video : Source/LifePlay/LPVideoQualitySubsystem.cpp:258-269 n'écrit que sg.ShadowQuality, sg.TextureQuality, sg.EffectsQuality, sg.AntiAliasingQuality en SetByConsole (commentaire l.255-257). Session COM23 : niveaux lus depuis Scalability = 3 (LOG:902), puis « Recommended = High (niveau 2), VRAM dediee detectee 8.0 Go » (LOG:1503), puis niveaux 2 appliqués (LOG:1547).
  • Réglages posés par le Blueprint GI (SetByConsole, plus prioritaires que le Scalability) : LOG:1683 r.Streaming.PoolSize = "1500", LOG:1688-1690 r.DynamicRes.MinScreenPercentage = "50", …Max… = "100", …FrameTimeBudget = "33.3", LOG:1786-1787 r.SSS.Scale = "1", r.ScreenPercentage = "100", LOG:1804 sg.PostProcessQuality = "2", LOG:1822 Error: r.MorphTarget.Mode is read only!. Preuve de priorité : LOG:4250, 4252 « SetByScalability was ignored as it is lower priority than the previous SetByConsole ». Conséquence : graver en ini r.ScreenPercentage, r.Streaming.PoolSize ou r.SSS.Scale ne changerait rien tant que le Blueprint les repose.
  • Résolution dynamique : r.DynamicRes.OperationMode vaut 0 (désactivée) par défaut (MOT/Engine/Private/UnrealEngine.cpp:538-545) ; absent de Config/ (Grep « OperationMode|DynamicRes » : aucun résultat) et du journal COM23. Les valeurs 50 / 100 / 33.3 du Blueprint sont donc, selon ces sources, sans effet (voir section 4, estimé).

3.2 Comment les personnages sont rendus

  • Peau : Content/Heavy/Daz/Bridget/DazSkin.uasset, DazSkin_Face.uasset, DazSkinHide.uasset portent ShadingModel = MSM_Subsurface et ShadingModelField=4 (4 = 1<<2, indice de MSM_Subsurface : MOT/Engine/Classes/Engine/EngineTypes.h:707-714). DazSkin et DazSkinHide référencent un asset de profil de diffusion (/Game/Heavy/New3/Characters/SSP_Girl_Head, le fichier existe) ; DazSkin_Face n'en référence aucun. Les 9 matériaux de corps B_* et M_* sont aussi en MSM_Subsurface (tableau 2, ligne 4).
  • Aucun matériau n'utilise un modèle à diffusion écran : 0 fichier avec MSM_SubsurfaceProfile, MSM_Eye, MSM_Hair, MSM_PreintegratedSkin ou MSM_Cloth sur 9074 .uasset et les .umap (tableau 2, ligne 5) ; 227 fichiers en MSM_Subsurface.
  • Pourquoi c'est décisif : la passe de diffusion écran ne s'exécute que si la vue contient un modèle à profil : MOT/Engine/Public/MaterialShared.h:131-139 (UseSubsurfaceProfile = Subsurface Profile ou Eye ; masque = Subsurface Profile | Eye | Preintegrated Skin seulement si Substrate) et MOT/Renderer/Private/PostProcess/PostProcessSubsurface.cpp:338-344 (IsSubsurfaceRequiredForView exige ce masque). Substrate est désactivé (MOT/RenderCore/Private/RenderUtils.cpp:2069-2072 : défaut 0, lecture seule, non posé dans DefaultEngine.ini). Les descriptions des variables le disent : r.SSS.Scale « use shadingmodel SubsurfaceProfile » (PostProcessSubsurface.cpp:36-46), r.SSS.Quality « when using the SubsurfaceScatteringProfile shading model » (:62-69). Donc r.SSS.Quality, r.SSS.HalfRes, r.SSS.Checkerboard, r.SSS.Burley.*, r.SSS.SampleSet, r.SSS.Scale n'ont, par lecture du code, aucun effet sur la peau actuelle, y compris les lignes r.SSS.* de DefaultScalability.ini et les r.SSS.Scale du Blueprint GI. Le modèle MSM_Subsurface est éclairé par SubsurfaceBxDF (Engine/Shaders/Private/ShadingModels.ush:1145-1146) ; aucune variable de console de qualité n'a été trouvée pour lui.
  • Yeux : Cornea, EyeMoisture, Eyelashes en MSM_DefaultLit (tableau 2, ligne 4) ; pas de modèle Eye.
  • Cheveux : cartes en BLEND_Masked (≈ 25 matériaux, tableau 2, ligne 6). Le plugin HairStrands est déclaré (LifePlay.uproject:135), mais aucun asset de mèches n'a été établi : les occurrences de « Strands » dans les fichiers trouvés sont des noms de textures et de matériaux de cartes.
  • Maillages squelettiques : Michael/michael.uasset et Bridget/bridget_gp.uasset contiennent le nom LODInfo ; le nombre de LOD n'est pas lu. r.SkeletalMeshLODBias : défaut 0, ajouté au LOD souhaité (MOT/Engine/Private/Components/SkinnedMeshComponent.cpp:87-93, 4626-4633). r.SkeletalMeshLODRadiusScale : défaut 1.0, borné à 0.25-1.0 (MOT/Core/Private/HAL/ConsoleManager.cpp:4585-4588 ; MOT/Engine/Private/SkeletalRender.cpp:144-147) : déjà au maximum. r.ForceLOD : défaut -1 (MOT/RenderCore/Private/RenderCore.cpp:223-226).
  • Textures de peau : fichiers .uasset de 7,4 Mo (corps, diffuse), 10,8 Mo (visage, diffuse), 1,6 Mo (normale) ; la diffuse du corps porte TEXTUREGROUP_World, TMGS_FromTextureGroup et le nom de propriété NeverStream (valeur non lue). Dimensions non lues.
  • Ombres de contact : r.ContactShadows vaut 1 par défaut (MOT/Core/Private/HAL/ConsoleManager.cpp:4222-4227) mais la longueur vient de la lumière (MOT/Renderer/Private/LightRendering.cpp:669-688) ; ContactShadowLength vaut 0 par défaut (MOT/Engine/Private/Components/LightComponent.cpp:470, propriété LightComponent.h:129-131 « Zero is disabled ») et aucun fichier du contenu ne pose cette propriété (tableau 2, ligne 9). La variable de console n'a donc rien à activer : le levier est la propriété de chaque lumière (modification d'asset).
  • Cache de peau (skin cache) : r.SkinCache.CompileShaders vaut 0 par défaut et est en lecture seule (MOT/Engine/Private/GPUSkinCache.cpp:92-100) ; r.SkinCache.Mode exige CompileShaders != 0 (:104-115) ; r.SkinCache.RecomputeTangents vaut 2 (:128-139). Le projet ne pose rien de tel (DefaultEngine.ini). Non essayable en console : réglage de projet + recompilation des shaders.
  • Netteté : r.TemporalAACurrentFrameWeight 0.04 (« Low values cause blurriness and ghosting, high values fail to hide jittering », MOT/Renderer/Private/PostProcess/TemporalAA.cpp:40-44) ; r.TemporalAA.Quality 2 (:46-53) ; r.TemporalAASamples 8 (MOT/Renderer/Private/SceneVisibility.cpp:100-103) ; r.TemporalAA.Upsampling 1, ne joue qu'en mise à l'échelle (MOT/Engine/Private/SceneView.cpp:336-342) ; r.Tonemapper.Sharpen -1 = hérite du volume de post-traitement (MOT/Renderer/Private/PostProcess/PostProcessTonemap.cpp:34-42) ; r.ScreenPercentage accepte > 100 (« supersampling », MOT/Engine/Private/LegacyScreenPercentageDriver.cpp:38-42) ; sg.ResolutionQuality=0 est sans action (MOT/Engine/Private/Scalability.cpp:532-538).
  • Ombres des personnages : r.Shadow.MaxResolution et r.Shadow.MaxCSMResolution valent 2048 par défaut (ConsoleManager.cpp:4366-4376) ; r.Shadow.TexelsPerPixel vaut 1.27324 « for per-object shadows », sans drapeau Scalability (MOT/Renderer/Private/ShadowSetup.cpp:277-280) ; le plafond lu est r.Shadow.MaxResolution (ShadowSetup.cpp:707-724) ; sur D3D11 et D3D12 la taille maximale de carte d'ombre suit GMaxTextureDimensions (MOT/Windows/D3D11RHI/Private/D3D11Device.cpp:200, MOT/D3D12RHI/Private/D3D12RHI.cpp:231), donc 4096 n'est pas bloqué par le RHI (valeur de GMaxTextureDimensions non relue).
  • Streaming : r.Streaming.Boost 1.0, r.Streaming.MipBias 0, r.Streaming.PoolSize -1, r.Streaming.FullyLoadUsedTextures 0 (MOT/Engine/Private/Streaming/TextureStreamingHelpers.cpp:79-86, 119-123, 191-199, 208-212). Dans le jeu, PoolSize vaut 1500 (Blueprint GI, LOG:1683).
  • Capture : HighResShot (MOT/Engine/Private/GameViewportClient.cpp:3577), Shot / Screenshot (:3585) ; dossier : FPaths::ScreenShotDir (MOT/Core/Private/Misc/Paths.cpp:553).

4. Établi / estimé / incertain

Établi (lu à la source) :

  • La peau (3 matériaux principaux + 9 matériaux de corps) est en MSM_Subsurface ; aucun matériau du contenu n'est en Subsurface Profile / Eye / Hair (0 fichier sur 9074).
  • La passe SSS écran est conditionnée à ces modèles (MaterialShared.h:131-139, PostProcessSubsurface.cpp:338-344) ; Substrate est désactivé.
  • Aucune lumière du contenu ne pose ContactShadowLength (0 fichier sur 8525 .uasset filtrés) et le défaut moteur est 0.
  • r.PostProcessAAQuality n'existe pas en 5.8 (journal l.1805) : les quatre sections AntiAliasingQuality de DefaultScalability.ini ne règlent rien ; l'AA varie par r.TemporalAA.Quality de BaseScalability.ini.
  • r.SkinCache.CompileShaders = 0 en lecture seule, non posé par le projet.
  • Le Blueprint GI repose en SetByConsole r.ScreenPercentage, r.Streaming.PoolSize, r.SSS.Scale : l'ini ne peut pas gagner contre lui (LOG:1683, 1786-1787, 4250-4252).
  • Sur la machine d'essai, le jeu recommande et applique le niveau High (2) (LOG:1503, 1547), pas Epic.
  • Noms et valeurs par défaut des variables du tableau de la section 7 : lus dans les sources 5.8.3 (section 3).

Estimé (déduit) :

  • Résolution dynamique inactive : OperationMode à 0 par défaut, jamais posé dans Config/ ni dans le journal COM23 → les valeurs 50 / 100 du Blueprint n'agissent pas (à vérifier par r.DynamicRes.OperationMode, section 7).
  • Cheveux = cartes à masque, pas des mèches (aucun asset de mèches établi).
  • Les lumières des pièces n'ont donc pas d'ombres de contact ; la diffusion de la peau n'est pas floutée en espace écran, d'où un aspect plus « mat » qu'avec un profil (jugement visuel non vérifié).
  • Coûts : supersampling 125 % ≈ 1,56 fois plus de pixels → temps GPU des passes liées aux pixels ≈ +30 à +55 % ; netteté de l'étalonnage, poids TAA : < 0,1 ms ; ombres : +0,2 à +1,5 ms selon le nombre de lumières à ombre ; anisotropie 16 : < 0,3 ms ; chargement complet des textures : mémoire vidéo, pas de GPU. Raisonnement : proportionnalité aux pixels et aux texels d'ombre, passes plein écran déjà présentes ; aucune mesure.
  • Les textures de peau ont peut-être NeverStream actif (nom de propriété présent, donc probablement non défaut) : dans ce cas MipBias et PoolSize ne changent rien pour elles.

Incertain (essai qui trancherait) :

  • Nombre de LOD des deux maillages de personnages (essai : r.ForceLOD 0 / -1 à 5 m, section 7 ; ou lecture éditeur).
  • Valeur de NeverStream et dimensions des textures de peau (lecture éditeur ou commandlet).
  • Conditions et ordre des commandes du Blueprint GI (lecture par MCP, lot dédié).
  • Effet visuel réel de chaque réglage et coût en millisecondes sur la RX 6600M (protocole section 7).
  • Contenu hors Content/ : Plugins/*/Content et Mods/ non parcourus ; le filtre git a écarté 549 .uasset pour la ligne 9 du tableau 2 (ombres de contact).
  • Une capture par Shot contient-elle la console fermée ? (à constater à la première capture).

5. Points à confirmer (repris par la fiche suivante)

  1. Contrôle négatif : r.SSS.Scale 0 ne change rien à la peau (section 7, étape 6). Un changement visible invaliderait la section 3.2.
  2. r.DynamicRes.OperationMode relevé = 0 en jeu.
  3. Valeurs relevées avant essai (étape 2) : r.ScreenPercentage, r.TemporalAA.Quality, r.MaxAnisotropy, niveaux sg.* ; elles servent de commandes de retour.
  4. GPU en ms avant / après (stat unit) pour chaque réglage retenu.
  5. Verdict de l'utilisateur par réglage : graver / non (grille de la section 7).

6. Questions pour la SPEC ou l'utilisateur

  1. Piste hors console, à plus fort potentiel (non essayable ici) : faire passer la peau de MSM_Subsurface à Subsurface Profile (le profil SSP_Girl_Head est déjà référencé par DazSkin et DazSkinHide, pas par DazSkin_Face). Ce changement rend r.SSS.* utile et coûte du GPU. Il touche des assets (227 fichiers contiennent MSM_Subsurface, dont des matériaux autres que la peau) : à ouvrir comme lot avec instantané, essai éditeur sur un matériau, puis décision. Voulez-vous ce lot ?
  2. Même nature : ContactShadowLength des lumières des pièces (propriété de lumière, ex. 0.02 d'après la plage UIMax 0.1 de LightComponent.h:130) pour obtenir des ombres de contact (visage, mains, objets). Voulez-vous l'essayer dans l'éditeur ?
  3. Niveau cible : la machine d'essai joue en High (niveau 2) ; graver les réglages gratuits aux niveaux 2 et 3, les coûteux au niveau 3 seul ?
  4. Corriger la clé morte r.PostProcessAAQuality (les quatre sections AA ne règlent rien) : la remplacer par r.TemporalAA.Quality ou la retirer ? Hors périmètre de cette fiche.
  5. Le Blueprint GI repose résolution, pool de textures et r.SSS.Scale : un éventuel supersampling doit passer par ce Blueprint ou par une option du panneau Video, pas par l'ini.

7. Protocole d'essai console (≈ 15 minutes)

Préparation (3 min)

  1. Lancer D:\Game\LifePlay_Build_5.8_Development_COM23\Windows\LifePlay.exe, entrer dans une pièce éclairée avec un personnage immobile. Fixer la caméra : gros plan du visage et des cheveux (≈ 1 m). Ne pas ouvrir le panneau Video pendant l'essai : il réapplique les quatre sg.* (LPVideoQualitySubsystem.cpp:258-269) ; les valeurs posées en console restent prioritaires sur le Scalability (LOG:4250).
  2. Ouvrir la console (²). Relever en tapant chaque nom seul (la console répond nom = "valeur", format vu en LOG:1683) et noter : r.ScreenPercentage, r.DynamicRes.OperationMode, r.TemporalAA.Quality, r.TemporalAACurrentFrameWeight, r.Tonemapper.Sharpen, r.MaxAnisotropy, r.Shadow.MaxResolution, r.Shadow.MaxCSMResolution, r.Shadow.TexelsPerPixel, r.Streaming.FullyLoadUsedTextures, sg.ShadowQuality.
  3. Taper stat unit et laisser affiché (temps image / jeu / dessin / GPU en ms). Capture : taper Shot (la console se ferme à la validation) ; les fichiers sont dans le dossier Saved\Screenshots du build (Paths.cpp:553). Une « capture » = un Shot, dans l'ordre : avant, après.

Pour chaque réglage : (a) Shot « avant » (état de départ), (b) taper la commande, attendre 3 s (5 s pour les textures), (c) Shot « après », noter le GPU en ms, (d) taper la commande de retour.

Étape Réglage Commande à taper Ce qu'il faut regarder Coût attendu (estimé) Commande de retour
3 R1 Netteté de l'image par suréchantillonnage r.ScreenPercentage 125 bords des cartes de cheveux, cils, contour du visage, scintillement ; netteté de près GPU ≈ +30 à +55 % sur les passes liées aux pixels ; si le GPU dépasse 16 ms, ne pas pousser r.ScreenPercentage 100 (valeur relevée)
4 R2 Accentuation à l'étalonnage r.Tonemapper.Sharpen 0.5 détail de la peau et des yeux en gros plan, halos aux contours des cheveux, grain < 0,1 ms r.Tonemapper.Sharpen -1
4 R3 Poids de l'image courante du TAA r.TemporalAACurrentFrameWeight 0.08 tourner lentement la caméra : texture de la peau et mèches plus nettes en mouvement, mais scintillement des cheveux et du visage (voir ERR-032) ≈ 0 r.TemporalAACurrentFrameWeight 0.04
5 R4 Ombres des personnages r.Shadow.TexelsPerPixel 2.5, puis r.Shadow.MaxResolution 4096, puis r.Shadow.MaxCSMResolution 4096 ombre du personnage sur le sol et le mur : contour net ou crénelé, ombre sous le nez et le menton, ombre sur les vêtements +0,2 à +1,5 ms selon les lumières à ombre ; relever le GPU après la troisième commande r.Shadow.TexelsPerPixel 1.27324, r.Shadow.MaxResolution 2048, r.Shadow.MaxCSMResolution 2048
6 R5 Textures (diagnostic) r.Streaming.FullyLoadUsedTextures 1, puis r.MaxAnisotropy 16 peau de très près, vêtements, sol en oblique ; si « après » = « avant », les textures sont déjà au maximum : rien à graver pas de GPU notable ; mémoire vidéo en hausse (8 Go) : au moindre à-coup, retour r.Streaming.FullyLoadUsedTextures 0, r.MaxAnisotropy <valeur relevée>
6bis Contrôle négatif (1 min) r.SSS.Scale 0 la peau ne doit pas changer (section 5, point 1) 0 r.SSS.Scale 1
7 Diagnostic LOD (optionnel, 1 min) à 5 m du personnage : r.ForceLOD 0 aucun changement = un seul LOD ou LOD 0 déjà choisi ; changement = des LOD existent et basculent tôt ≈ 0 r.ForceLOD -1

Grille à remplir

Réglage Capture avant Capture après GPU avant (ms) GPU après (ms) Visible ? (oui / non / dégrade) Graver ?
R1
R2
R3
R4
R5

Fin : taper les commandes de retour restantes, ou quitter le jeu (les valeurs de console ne sont pas conservées entre deux lancements).

8. Recommandation et diff d'ini proposé (non appliqué)

Ce qu'il faut savoir avant de choisir. Sur cinq candidats de la fiche, trois ne s'appliquent pas à la peau actuelle : r.SSS.* (aucun matériau à profil), r.ContactShadows (aucune lumière à longueur non nulle), r.SkinCache.* (non compilé, lecture seule) ; r.SkeletalMeshLODBias et r.SkeletalMeshLODRadiusScale sont soit déjà au maximum, soit sans objet si un seul LOD. Les réglages réellement essayables sont R1 à R5. Aucun effet visuel n'a été vu : la recommandation est conditionnelle aux captures de l'utilisateur.

Ordre proposé (rapport effet estimé / coût)

  1. R2 et R3 (netteté, coût nul) : à graver aux niveaux High (2) et Epic (3) si les captures « après » sont meilleures sans scintillement gênant. Valeurs d'essai : r.Tonemapper.Sharpen 0.5, r.TemporalAACurrentFrameWeight 0.08 ; si le scintillement apparaît, redescendre à 0.06.
  2. R4 (ombres) : à graver au niveau Epic seulement. Aujourd'hui High et Epic ont les mêmes tailles d'ombre (2048) ; 4096 différencie enfin Epic. À essayer d'abord sur la machine d'essai en GPU ms (budget suggéré : ≤ +1 ms).
  3. R5 (textures) : à graver (r.MaxAnisotropy=16 au niveau 3) seulement si « après » diffère de « avant ». FullyLoadUsedTextures n'est pas à graver (mémoire).
  4. R1 (suréchantillonnage) : ne pas graver en ini (le Blueprint GI repose la résolution en SetByConsole, LOG:1787) ; coût élevé sur une carte de 8 Go. À traiter, si l'essai plaît, comme option du panneau Video (lot de code, hors quick win).
  5. Pistes à plus fort potentiel mais hors console : voir section 6, questions 1 et 2 (profil de diffusion pour la peau, longueur d'ombre de contact des lumières).

Diff proposé (texte, non appliqué ; numéros de lignes de la version actuelle de Config/DefaultScalability.ini). Avant d'appliquer : Tools/Snapshot.ps1 et entrée CHG. Les valeurs 0.5 et 0.08 sont celles de l'essai ; les remplacer par celles que l'utilisateur aura retenues.

--- a/Config/DefaultScalability.ini
+++ b/Config/DefaultScalability.ini
@@ [ShadowQuality@3]  (l.43-50)
-r.Shadow.MaxResolution=2048
-r.Shadow.MaxCSMResolution=2048
+r.Shadow.MaxResolution=4096
+r.Shadow.MaxCSMResolution=4096
@@ [TextureQuality@3]  (l.73-77)   ; seulement si R5 est visible
-r.MaxAnisotropy=8
+r.MaxAnisotropy=16
@@ [AntiAliasingQuality@2]  (l.123-124)
 r.PostProcessAAQuality=4
+r.TemporalAACurrentFrameWeight=0.08
+r.Tonemapper.Sharpen=0.5
@@ [AntiAliasingQuality@3]  (l.126-127)
 r.PostProcessAAQuality=4
+r.TemporalAACurrentFrameWeight=0.08
+r.Tonemapper.Sharpen=0.5

Notes sur le diff :

  • r.Shadow.TexelsPerPixel n'a pas de drapeau Scalability (ShadowSetup.cpp:277-280) : si R4 plaît avec 2.5, la poser dans Config/DefaultEngine.ini section [SystemSettings] (r.Shadow.TexelsPerPixel=2.5), valable pour tous les niveaux, ou l'ajouter à [ShadowQuality@3] (une variable sans drapeau Scalability posée par une section Scalability est, par estimation, acceptée ; à vérifier dans le journal par une ligne Set CVar [[r.Shadow.TexelsPerPixel:…]]).
  • La ligne r.PostProcessAAQuality=4 est inchangée dans le diff : elle est inerte (section 3.1) ; son sort relève de la question 4 de la section 6.
  • Les clés ajoutées à AntiAliasingQuality restent dans le périmètre de l'en-tête du fichier (pas de méthode d'AA, pas de GI, pas de VSM, pas de reflets : DefaultScalability.ini:7-8).
  • Vérification après application : relancer le build, lire LifePlay.log pour Set CVar [[r.Tonemapper.Sharpen:0.5]] aux niveaux 2 et 3 (même méthode que LOG:442).

Tours : 24 / 25

Constats

  • Anomalie hors périmètre, à signaler : le Blueprint GI exécute r.MorphTarget.Mode alors que la variable est en lecture seule (LOG:1822 Error: r.MorphTarget.Mode is read only!) et r.PostProcessAAQuality 3 (LOG:1805, commande non reconnue). Deux erreurs de console à chaque démarrage.
  • Fichiers écrits : D:\Game\LifePlay-master 5.8\Docs\Migration\etat\REL\QPERS\QPERS-PRE.md.
  • Fichiers à commiter : A Docs/Migration/etat/REL/QPERS/QPERS-PRE.md (dépôt du jeu, .md suivi sous etat/).
  • À verser : lp-perf ou lp-build — le journal d'un build Development (Saved/Logs/LifePlay.log) donne les valeurs de console réellement appliquées (Set CVar, priorité SetByConsole vs SetByScalability) : le lire avant de graver un réglage en ini.