LifePlay-Revival/Docs/Migration/etat/OPT/BC/BC-R2.md

33 lines
9.7 KiB
Markdown
Raw Permalink Normal View History

# BC-R2 : performance des Blueprints (tick, timers, C++, validateurs, audit, références)
Date 2026-10-15, auteur « sous-agent Sonnet OPT0-R », 14 entrées : 11 établi / 0 estimé / 3 non vérifié.
Toutes les URL ci-dessous ont été ouvertes par WebFetch. Les pages Epic de la documentation affichent « Unreal Engine 5.8 » dans leur titre mais aucune date de mise à jour (« date inconnue »).
| id | affirmation (1-2 phrases, sans copie de texte) | source (URL, date, version UE) | niveau (établi / estimé / non vérifié) | application à LifePlay (système ou fichier) | action proposée | skill de destination |
|---|---|---|---|---|---|---|
| R2-01 | Le Tick sert au travail continu (mouvement temps réel) ; l'employer pour des tâches occasionnelles gaspille du CPU. | https://dev.epicgames.com/documentation/unreal-engine/common-memory-and-cpu-performance-considerations-in-unreal-engine ; date inconnue ; UE 5.8 | établi | Blueprints d'acteurs et de composants avec un Event Tick | Recenser les Blueprints qui ont un Tick actif et classer chaque Tick en « continu » ou « occasionnel » | lp-bp-audit |
| R2-02 | Surveiller une variable à chaque image est un anti-motif ; mieux vaut passer par un setter ou un événement qui déclenche la logique au changement de valeur. | même URL ; date inconnue ; UE 5.8 | établi | Blueprints qui comparent une valeur à chaque Tick | Remplacer le test par image par un événement ou un dispatcher émis au changement | lp-perf |
| R2-03 | Epic prévient que l'approche événementielle peut coûter plus cher qu'un Tick si l'événement part plusieurs fois par image ; un Tick ou un « command pattern » est alors préférable. | même URL ; date inconnue ; UE 5.8 | établi | Événements/dispatchers appelés en rafale | Mesurer avant de convertir un Tick en événement ; ne pas généraliser | lp-perf |
| R2-04 | On peut réduire la fréquence de Tick par objet ou composant (intervalle de Tick), ou limiter une partie du Tick avec un accumulateur de temps maison. | même URL ; date inconnue ; UE 5.8 | établi | Blueprints à Tick actif dont le travail n'a pas besoin de 60 Hz | Fixer un Tick Interval dans les defaults de classe (réglage de classe, lisible par audit) | lp-perf |
| R2-05 | Un Timer (se nettoie en fin de course) ou le nœud Delay conviennent pour exécuter une action différée, à la place d'un Tick qui compte le temps. | même URL ; date inconnue ; UE 5.8 | établi | Blueprints qui comptent un délai dans le Tick | Remplacer les compteurs de Tick par Set Timer by Event / Delay selon le cas | lp-perf |
| R2-06 | La page de référence du nœud « Get All Actors with Component » le qualifie d'opération très lente car il parcourt tous les acteurs du monde ; à éviter dans le code fréquent. | https://dev.epicgames.com/documentation/unreal-engine/BlueprintAPI/PerformanceCapture/Core/GetAllActorswithComponent ; date inconnue ; UE 5.8 | établi | Tout nœud Get All Actors Of Class / With Component / With Interface dans un Tick, une boucle ou un widget | Chercher ces nœuds par audit ; mettre le résultat en cache au BeginPlay ou tenir un registre | lp-bp-audit |
| R2-07 | Les chargements synchrones (LoadObject, StaticLoadObject) provoquent des à-coups de fréquence d'images ; les références dures chargent leurs cibles avec le propriétaire, et beaucoup de chargements simultanés gonflent la mémoire. Une TSoftObjectPtr se charge à la main, avec IsPending() pour savoir si elle est prête. | https://dev.epicgames.com/documentation/unreal-engine/referencing-assets-in-unreal-engine ; date inconnue ; UE 5.8 | établi | Blueprints/classes C++ avec propriétés d'assets (meshes, sons, classes à instancier) | Passer en références souples + chargement asynchrone les assets lourds ou rarement utilisés ; lister les chargements synchrones | lp-bp-audit |
| R2-08 | Le plugin Data Validation vérifie un asset, un asset et ses dépendances, un dossier ou tout le projet (menu du Content Browser, menu Tools) ; il s'exécute aussi à la sauvegarde (actif par défaut) et en ligne de commande par un commandlet DataValidation (C++ seulement par défaut), utilisable en CI. | https://dev.epicgames.com/documentation/unreal-engine/data-validation-in-unreal-engine ; date inconnue ; UE 5.8 | établi | Contrôle automatique des assets, intégration à Tools/RunCommandlet.ps1 | Évaluer un lancement du commandlet DataValidation sur le contenu migré (lecture, hors écriture) | lp-validate |
| R2-09 | Les validateurs Blueprint sont créés en étendant la classe de base de validateur ; ils sont découverts au démarrage de l'éditeur (sauf choix contraire du projet), et les validateurs Python doivent s'enregistrer eux-mêmes auprès du sous-système. | même URL ; date inconnue ; UE 5.8 | établi | Règles de projet (noms, références interdites, Tick actif, dépendances dures) | Prototyper un validateur C++ ou Blueprint de règles simples, puis l'ajouter à la batterie de validation | lp-autotest |
| R2-10 | La classe UEditorValidatorBase expose pour le C++ ValidateLoadedAsset_Implementation, CanValidateAsset_Implementation et CanValidate_Implementation, pour le Blueprint les événements K2_* et les fonctions AssetFails / AssetWarning / AssetPasses ; la page 5.8 ne signale aucune dépréciation. | https://dev.epicgames.com/documentation/unreal-engine/API/Plugins/DataValidation/UEditorValidatorBase ; date inconnue ; UE 5.8 | établi | Écriture d'un validateur dans un module éditeur (Build.cs avec le module DataValidation) | Vérifier dans le source 5.8 la signature exacte (contexte FDataValidationContext) avant écriture | ue-cpp-build |
| R2-11 | Le tableau des canaux de trace d'Unreal Insights n'a aucun canal Blueprint dédié ; seule mention : le canal AssetLoadTime ajoute les noms de Blueprints aux timers de sérialisation (CPU + -statnamedevents). | https://dev.epicgames.com/documentation/unreal-engine/unreal-insights-reference-in-unreal-engine-5 ; date inconnue ; UE 5.x (version de la page non lue) | établi | Mesure du coût des Blueprints ; choix de l'outil | Ne pas supposer un canal « blueprint » ; vérifier avec la fenêtre de trace de l'éditeur 5.8 avant de s'appuyer sur le billet vendeur (R2-13) | lp-perf |
| R2-12 | Un billet vendeur affirme que la nativisation a été dépréciée en 4.27 et supprimée en UE5 (donc absente en 5.7) ; aucun outil de conversion automatique Blueprint vers C++ n'existe plus. | https://www.strayspark.studio/blog/blueprint-nativization-ue57-when-convert-blueprints-cpp ; 2026-03-31 ; UE 5.7 | non vérifié | Décision de migration d'héritage UE4 : la conversion se fait à la main | Ne pas planifier de « nativisation » ; chiffrer la réécriture manuelle des seuls points chauds | lp-perf |
| R2-13 | Même billet : porter en C++ en priorité les Ticks sur beaucoup d'acteurs, les calculs lourds par image, les boucles sur grands tableaux et les spawns fréquents ; événementiel, UI et mise en place unique restent en Blueprint. Méthode : classe de base C++ avec reparentage, fonction BlueprintCallable ou BlueprintNativeEvent. Il conseille de profiler d'abord avec Insights (canal Blueprint) et de viser un VM Blueprint sous ~1 ms par image. | même URL ; 2026-03-31 ; UE 5.7 | non vérifié | Choix des Blueprints à passer en C++ (reparentage) | Établir la liste par mesure, pas par intuition ; le seuil d'1 ms est un ordre de grandeur de vendeur | lp-perf |
| R2-14 | Les erreurs « Accessed None » viennent d'une variable de référence vide (jamais affectée ou détruite) ; correctif cité : affecter la variable puis garder l'accès par un test Is Valid. Un fil de forum de 2018 (auteur non identifié comme employé d'Epic) soutient que Tick et timers coûtent à peu près pareil, le coût venant du travail déclenché (traces répétées). | https://forums.unrealengine.com/t/accessed-none/391339 ; 2017-04-19 ; UE 4.x ; https://forums.unrealengine.com/t/tick-vs-timers/118402/7 ; 2018-12-22 ; UE 4.x | non vérifié | Journaux de jeu (Accessed None) ; Ticks avec traces | Ne pas se contenter de masquer par Is Valid : chercher pourquoi la référence est vide ; mesurer avant de choisir entre Tick et timer | lp-mcp |
## Lacunes et doutes
- Asset Audit : aucune page Epic ouverte ne décrit la fenêtre Asset Audit (ni son chemin de menu exact en 5.8) ni le Size Map. Les résultats de recherche ne donnaient que des pages de vendeurs (non ouvertes). Sujet non couvert : à vérifier directement dans l'éditeur 5.8.
- Blueprint profiler : aucune page Epic officielle ouverte sur un profileur Blueprint en 5.6 à 5.8 ; le tableau des canaux Insights n'a pas de canal Blueprint (R2-11), ce qui contredit le conseil `-trace=default,blueprint` du billet vendeur (R2-13). À trancher par un essai.
- Sortis dans les recherches mais non ouverts, donc exclus du tableau : documentation 4.26/4.27 du nœud Get All Actors Of Class (signalé lent), fils de forum sur le type d'une variable souple vu comme référence dure dans le Reference Viewer, registre d'acteurs par auto-enregistrement, pages API de UEditorValidatorSubsystem (bValidateOnSave, cuisson) et de EDataValidationUsecase.
- Casts et chaînes de références dures : la page Epic « Referencing Assets » ne traite pas des casts ; aucune source ouverte sur ce point.
- La page Epic sur le coût CPU ne cite ni GetAllActorsOfClass ni Delay dans un Tick ; le conseil « pas de Delay dans un Tick » n'est pas couvert par une source ouverte.
- Un billet bugnet.io (2026-06-14) dit seulement d'utiliser le profileur Blueprint, sans détail ; non retenu. Une autre page bugnet censée traiter GetAllActorsOfClass dans le Tick a renvoyé un index sans contenu utile ; non retenue.
- Aucune note de version 5.6 à 5.8 consultée sur ces thèmes ; « UE 5.8 » ne vaut que pour le titre des pages de documentation.