27 KiB
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:17r.AntiAliasingMethod=2(TAA, commentaire l.14-16, ERR-032). Le journal confirmeLOG:389Set CVar [[r.AntiAliasingMethod:2]]. - Rendu figé :
DefaultEngine.ini:22-24pas de GI dynamique, reflets SSR, pas d'ombres virtuelles ;:26streaming de textures actif ;:28éclairage statique autorisé. - Ombres :
DefaultScalability.ini:34-50:r.Shadow.MaxResolutionetr.Shadow.MaxCSMResolutionvalent 2048 à la fois au niveau 2 (High) et au niveau 3 (Epic) ; seuls le nombre de cascades (3 / 4),RadiusThreshold(0.04 / 0.03) etPreShadowResolutionFactor(0.75 / 1.0) diffèrent. Journal niveau 3 :LOG:455-456. - Textures :
DefaultScalability.ini:67-77:r.Streaming.MipBias=0aux niveaux 2 et 3,r.MaxAnisotropy4 / 8,r.Streaming.PoolSize700 / 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.Scale0.25 / 0.5 / 0.75 / 1.0 etr.SSS.SampleSet0 / 1 / 2 / 2. - Qualité d'AA :
DefaultScalability.ini:117-128ne pose quer.PostProcessAAQuality(0 / 2 / 4 / 4). Cette variable n'existe pas en 5.8 :LOG:1805Command not recognized: r.PostProcessAAQuality 3;LOG:450,LOG:1546CVar [[r.PostProcessAAQuality:4]] deferred - dummy variable created; aucun résultat dansEngine/Configni dansMOT. Ce qui varie réellement avec le niveau d'AA vient deEngine/Config/BaseScalability.ini:52-94:r.TemporalAA.Quality= 0 / 1 / 1 / 2 (journal : 2 au niveau 3LOG:442, 1 au niveau 2LOG:1542). - Panneau Video :
Source/LifePlay/LPVideoQualitySubsystem.cpp:258-269n'écrit quesg.ShadowQuality,sg.TextureQuality,sg.EffectsQuality,sg.AntiAliasingQualityen 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:1683r.Streaming.PoolSize = "1500",LOG:1688-1690r.DynamicRes.MinScreenPercentage = "50",…Max… = "100",…FrameTimeBudget = "33.3",LOG:1786-1787r.SSS.Scale = "1",r.ScreenPercentage = "100",LOG:1804sg.PostProcessQuality = "2",LOG:1822Error: r.MorphTarget.Mode is read only!. Preuve de priorité :LOG:4250, 4252«SetByScalabilitywas ignored as it is lower priority than the previousSetByConsole». Conséquence : graver en inir.ScreenPercentage,r.Streaming.PoolSizeour.SSS.Scalene changerait rien tant que le Blueprint les repose. - Résolution dynamique :
r.DynamicRes.OperationModevaut 0 (désactivée) par défaut (MOT/Engine/Private/UnrealEngine.cpp:538-545) ; absent deConfig/(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.uassetportentShadingModel = MSM_SubsurfaceetShadingModelField=4(4 = 1<<2, indice deMSM_Subsurface:MOT/Engine/Classes/Engine/EngineTypes.h:707-714).DazSkinetDazSkinHideréférencent un asset de profil de diffusion (/Game/Heavy/New3/Characters/SSP_Girl_Head, le fichier existe) ;DazSkin_Facen'en référence aucun. Les 9 matériaux de corpsB_*etM_*sont aussi enMSM_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_PreintegratedSkinouMSM_Clothsur 9074.uassetet les.umap(tableau 2, ligne 5) ; 227 fichiers enMSM_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) etMOT/Renderer/Private/PostProcess/PostProcessSubsurface.cpp:338-344(IsSubsurfaceRequiredForViewexige ce masque). Substrate est désactivé (MOT/RenderCore/Private/RenderUtils.cpp:2069-2072: défaut 0, lecture seule, non posé dansDefaultEngine.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). Doncr.SSS.Quality,r.SSS.HalfRes,r.SSS.Checkerboard,r.SSS.Burley.*,r.SSS.SampleSet,r.SSS.Scalen'ont, par lecture du code, aucun effet sur la peau actuelle, y compris les lignesr.SSS.*deDefaultScalability.iniet lesr.SSS.Scaledu BlueprintGI. Le modèleMSM_Subsurfaceest éclairé parSubsurfaceBxDF(Engine/Shaders/Private/ShadingModels.ush:1145-1146) ; aucune variable de console de qualité n'a été trouvée pour lui. - Yeux :
Cornea,EyeMoisture,EyelashesenMSM_DefaultLit(tableau 2, ligne 4) ; pas de modèleEye. - Cheveux : cartes en
BLEND_Masked(≈ 25 matériaux, tableau 2, ligne 6). Le pluginHairStrandsest 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.uassetetBridget/bridget_gp.uassetcontiennent le nomLODInfo; 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
.uassetde 7,4 Mo (corps, diffuse), 10,8 Mo (visage, diffuse), 1,6 Mo (normale) ; la diffuse du corps porteTEXTUREGROUP_World,TMGS_FromTextureGroupet le nom de propriétéNeverStream(valeur non lue). Dimensions non lues. - Ombres de contact :
r.ContactShadowsvaut 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) ;ContactShadowLengthvaut 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.CompileShadersvaut 0 par défaut et est en lecture seule (MOT/Engine/Private/GPUSkinCache.cpp:92-100) ;r.SkinCache.ModeexigeCompileShaders != 0(:104-115) ;r.SkinCache.RecomputeTangentsvaut 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.TemporalAACurrentFrameWeight0.04 (« Low values cause blurriness and ghosting, high values fail to hide jittering »,MOT/Renderer/Private/PostProcess/TemporalAA.cpp:40-44) ;r.TemporalAA.Quality2 (:46-53) ;r.TemporalAASamples8 (MOT/Renderer/Private/SceneVisibility.cpp:100-103) ;r.TemporalAA.Upsampling1, 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.ScreenPercentageaccepte > 100 (« supersampling »,MOT/Engine/Private/LegacyScreenPercentageDriver.cpp:38-42) ;sg.ResolutionQuality=0est sans action (MOT/Engine/Private/Scalability.cpp:532-538). - Ombres des personnages :
r.Shadow.MaxResolutionetr.Shadow.MaxCSMResolutionvalent 2048 par défaut (ConsoleManager.cpp:4366-4376) ;r.Shadow.TexelsPerPixelvaut 1.27324 « for per-object shadows », sans drapeau Scalability (MOT/Renderer/Private/ShadowSetup.cpp:277-280) ; le plafond lu estr.Shadow.MaxResolution(ShadowSetup.cpp:707-724) ; sur D3D11 et D3D12 la taille maximale de carte d'ombre suitGMaxTextureDimensions(MOT/Windows/D3D11RHI/Private/D3D11Device.cpp:200,MOT/D3D12RHI/Private/D3D12RHI.cpp:231), donc 4096 n'est pas bloqué par le RHI (valeur deGMaxTextureDimensionsnon relue). - Streaming :
r.Streaming.Boost1.0,r.Streaming.MipBias0,r.Streaming.PoolSize-1,r.Streaming.FullyLoadUsedTextures0 (MOT/Engine/Private/Streaming/TextureStreamingHelpers.cpp:79-86, 119-123, 191-199, 208-212). Dans le jeu,PoolSizevaut 1500 (BlueprintGI,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.uassetfiltrés) et le défaut moteur est 0. r.PostProcessAAQualityn'existe pas en 5.8 (journal l.1805) : les quatre sectionsAntiAliasingQualitydeDefaultScalability.inine règlent rien ; l'AA varie parr.TemporalAA.QualitydeBaseScalability.ini.r.SkinCache.CompileShaders= 0 en lecture seule, non posé par le projet.- Le Blueprint
GIrepose en SetByConsoler.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é dansConfig/ni dans le journal COM23 → les valeurs 50 / 100 du Blueprint n'agissent pas (à vérifier parr.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
NeverStreamactif (nom de propriété présent, donc probablement non défaut) : dans ce casMipBiasetPoolSizene 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
NeverStreamet 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/*/ContentetMods/non parcourus ; le filtre git a écarté 549.uassetpour la ligne 9 du tableau 2 (ombres de contact). - Une capture par
Shotcontient-elle la console fermée ? (à constater à la première capture).
5. Points à confirmer (repris par la fiche suivante)
- Contrôle négatif :
r.SSS.Scale 0ne change rien à la peau (section 7, étape 6). Un changement visible invaliderait la section 3.2. r.DynamicRes.OperationModerelevé = 0 en jeu.- Valeurs relevées avant essai (étape 2) :
r.ScreenPercentage,r.TemporalAA.Quality,r.MaxAnisotropy, niveauxsg.*; elles servent de commandes de retour. - GPU en ms avant / après (
stat unit) pour chaque réglage retenu. - Verdict de l'utilisateur par réglage : graver / non (grille de la section 7).
6. Questions pour la SPEC ou l'utilisateur
- Piste hors console, à plus fort potentiel (non essayable ici) : faire passer la peau de
MSM_Subsurfaceà Subsurface Profile (le profilSSP_Girl_Headest déjà référencé parDazSkinetDazSkinHide, pas parDazSkin_Face). Ce changement rendr.SSS.*utile et coûte du GPU. Il touche des assets (227 fichiers contiennentMSM_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 ? - Même nature :
ContactShadowLengthdes lumières des pièces (propriété de lumière, ex. 0.02 d'après la plageUIMax 0.1deLightComponent.h:130) pour obtenir des ombres de contact (visage, mains, objets). Voulez-vous l'essayer dans l'éditeur ? - 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 ?
- Corriger la clé morte
r.PostProcessAAQuality(les quatre sections AA ne règlent rien) : la remplacer parr.TemporalAA.Qualityou la retirer ? Hors périmètre de cette fiche. - Le Blueprint
GIrepose résolution, pool de textures etr.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)
- 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 quatresg.*(LPVideoQualitySubsystem.cpp:258-269) ; les valeurs posées en console restent prioritaires sur le Scalability (LOG:4250). - Ouvrir la console (
²). Relever en tapant chaque nom seul (la console répondnom = "valeur", format vu enLOG: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. - Taper
stat unitet laisser affiché (temps image / jeu / dessin / GPU en ms). Capture : taperShot(la console se ferme à la validation) ; les fichiers sont dans le dossierSaved\Screenshotsdu build (Paths.cpp:553). Une « capture » = unShot, 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)
- 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. - 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).
- R5 (textures) : à graver (
r.MaxAnisotropy=16au niveau 3) seulement si « après » diffère de « avant ».FullyLoadUsedTexturesn'est pas à graver (mémoire). - R1 (suréchantillonnage) : ne pas graver en ini (le Blueprint
GIrepose 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). - 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.TexelsPerPixeln'a pas de drapeau Scalability (ShadowSetup.cpp:277-280) : si R4 plaît avec2.5, la poser dansConfig/DefaultEngine.inisection[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 ligneSet CVar [[r.Shadow.TexelsPerPixel:…]]).- La ligne
r.PostProcessAAQuality=4est 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 à
AntiAliasingQualityrestent 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.logpourSet CVar [[r.Tonemapper.Sharpen:0.5]]aux niveaux 2 et 3 (même méthode queLOG:442).
Tours : 24 / 25
Constats
- Anomalie hors périmètre, à signaler : le Blueprint
GIexécuter.MorphTarget.Modealors que la variable est en lecture seule (LOG:1822Error: r.MorphTarget.Mode is read only!) etr.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,.mdsuivi sousetat/). - À verser :
lp-perfoulp-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.