Retour au Blog

L'exploit de l'Algorithme de Discovery d'UEFN : Comment architecturer des Sophistication Scores anti-spam

Publié le 7 avril 2026
L'exploit de l'Algorithme de Discovery d'UEFN : Comment architecturer des Sophistication Scores anti-spam

Chaque créateur d'UGC connaît cette frustration viscérale : passer des semaines sur une mise à jour massive, pour ensuite voir sa map enterrée dans l'onglet discovery par un clone "Red vs Blue" sans effort qui a simplement spammé 500 appareils vides. Les forums Unreal Engine bouillent actuellement au sujet du "Sophistication Score" d'UEFN (Unreal Editor for Fortnite) — une métrique censée mettre en avant des expériences complexes et de haute qualité. Au lieu de cela, elle récompense activement le spam de maps. Lorsqu'une plateforme s'appuie sur un comptage naïf de métriques plutôt que sur l'exécution d'une logique vérifiable, l'écosystème s'effondre inévitablement dans une course vers le bas.

Les développeurs rapportent que leurs mises à jour méticuleusement conçues et hautement logiques sont ignorées par le moteur de visibilité de la plateforme. Pendant ce temps, des acteurs malveillants ont réalisé qu'ils pouvaient simplement glisser-déposer des centaines d'appareils non fonctionnels dans une scène pour gonfler artificiellement leur indice de complexité Backend. C'est exactement le même cycle d'exploit que nous avons vu au début des années 2000 avec le keyword stuffing en SEO, appliqué ici au spatial computing et aux métadonnées des moteurs de jeu.

Mais comment corriger cela concrètement ? Si vous êtes un développeur indépendant construisant votre propre plateforme de User Generated Content (UGC), ou un architecte de plateforme chargé de faire émerger des jeux de qualité, comment prouver mathématiquement qu'une map est "sophisticated" ? La réponse réside dans l'abandon du comptage statique d'assets au profit de l'analyse de la profondeur d'exécution et de la validation par Telemetry.

L'anatomie d'une métrique de Discovery défaillante

Pour comprendre pourquoi l'actuel algorithme de discovery d'UEFN échoue, nous devons examiner comment les plateformes évaluent traditionnellement le contenu téléchargé. Lorsqu'un utilisateur publie une map, le serveur effectue une passe d'analyse statique pour générer des métadonnées. Ces métadonnées déterminent la position de la map dans la file d'attente de discovery.

Un Backend naïf pourrait calculer un "Sophistication Score" à l'aide d'une formule ressemblant à ceci : Score = (StaticMeshCount * 0.01) + (DeviceCount * 0.5) + (VerseLineCount * 0.1)

Pourquoi le comptage statique échoue toujours

Le défaut fondamental de cette architecture est qu'elle mesure la présence d'objets, et non l'utilisation de ces objets. Un développeur peut placer 1 000 appareils de déclenchement dans une map qui sont complètement déconnectés de tout Event Graph. Pour l'analyseur statique, cela ressemble à un environnement interactif hautement complexe. Pour le joueur, c'est une pièce vide.

Cela crée une structure d'incitation perverse. Les créateurs sont pénalisés lorsqu'ils écrivent une logique propre, efficace et optimisée. Si vous trouvez comment piloter l'intégralité de votre mode de jeu avec un seul script Verse hautement optimisé et trois appareils, votre map est jugée "peu sophistiquée" par le Backend.

Alors que les développeurs luttent déjà contre les limitations de la plateforme — comme trouver des solutions de contournement dans notre tutoriel Cracking The 32 Character Uefn Analytics Device Event Name Limit Verse Tutorial — il est incroyablement démoralisant de réaliser que le moteur de discovery de la plateforme les note sur une courbe biaisée.

Architecturer une métrique de sophistication vérifiable

Si nous voulons construire un algorithme de discovery équitable, nous devons mesurer la profondeur logique et la densité d'événements, et non le nombre brut d'actors. Nous devons analyser le graphe d'exécution réel.

Au lieu de compter le nombre d'appareils existants, l'outil d'analyse Backend devrait tracer les connexions entre eux. Un déclencheur qui active une séquence d'événements localisée modifiant l'état du joueur a un poids logique élevé. Un déclencheur placé dans le monde mais lié à rien a un poids logique exactement égal à zéro.

Deep Dive technique : Calculer la véritable profondeur logique

Si nous devions architecturer cette étape de validation dans un Backend Unreal Engine personnalisé, nous écririons un commandlet ou un script d'automatisation qui analyse le ULevel et évalue les liaisons de délégués réelles.

Voici un exemple simplifié en C++ de la façon dont un outil de validation Backend pourrait évaluer la véritable "sophistication" d'une map en analysant les liaisons d'événements plutôt qu'en comptant simplement les actors :

// [Code block unchanged]

Cette approche neutralise immédiatement l'exploit consistant à "glisser 500 appareils vides dans la map". L'algorithme vérifie si ces appareils sont réellement liés à un multicast delegate ou si une logique de tick personnalisée est activée. Si ce n'est pas le cas, ils ne contribuent en rien au Sophistication Score. En fait, en suivant le LogicRatio, nous pouvons activement pénaliser les acteurs malveillants qui tentent de gonfler artificiellement leurs niveaux.

Le passage au Discovery piloté par Telemetry

Bien que la validation par analyse statique soit une amélioration massive, ce n'est que la moitié de la bataille. Toute métrique statique peut finir par être contournée. La source ultime de vérité pour les algorithmes de discovery doit être la Telemetry des joueurs en temps réel.

Une map peut sembler incroyablement sophistiquée sur le Backend, possédant des milliers de scripts Verse complexes et interconnectés. Mais si la session moyenne d'un joueur dure exactement 14 secondes avant que le client ne se déconnecte, la map est soit cassée, soit terriblement mal optimisée, soit simplement pas amusante.

Aller au-delà des nombres de sessions naïfs

Tout comme nous devons cesser de compter les appareils bruts, nous devons cesser de classer les maps uniquement en fonction du "Total des parties" ou des "Utilisateurs simultanés (CCU)". Ces métriques favorisent lourdement les maps établies et empêchent les nouvelles mises à jour sophistiquées de percer dans l'onglet discovery.

Au lieu de cela, l'algorithme de discovery d'UEFN (et tout Backend que vous construisez pour vos propres jeux) doit calculer une Moyenne Bayésienne d'Engagement.

Lors de l'évaluation d'une map, vous devez suivre l'écart entre la durée de session attendue pour un genre spécifique (par exemple, une map Tycoon attend une session de 45 minutes) et la durée de session réelle. Si une map dépasse systématiquement le taux de rétention de base du genre, son Sophistication Score devrait se multiplier dynamiquement en temps réel.

Construire cela soi-même nécessite la mise en place de Load Balancers distribués, du Database Sharding pour des millions d'insertions de lignes, et la gestion des certificats SSL — soit facilement 4 à 6 semaines de travail d'infrastructure dédié. Avec horizOn, ces pipelines de données serverless et ces points d'accès analytics sont préconfigurés, vous permettant de livrer votre jeu plutôt que votre infrastructure.

Protéger votre Backend contre le spoofing de Telemetry

Dès que vous passez à un algorithme de discovery basé sur la Telemetry, les acteurs malveillants vont pivoter. Au lieu de spammer des appareils dans l'éditeur, ils tenteront de simuler des événements de Telemetry depuis le client pour gonfler artificiellement leurs métriques de rétention.

Ne faites jamais confiance au client. Si votre client envoie un événement indiquant SessionLength = 3600_seconds, votre Backend doit valider cette affirmation par rapport aux journaux de connexion réels du serveur.

Concevoir la vérification côté serveur

L'architecture de votre jeu doit imposer des vérifications autoritaires. Lorsqu'un joueur se connecte, le Backend enregistre l'horodatage UTC exact. Lorsque le joueur se déconnecte, le Backend calcule le delta. Le client ne doit être responsable que de l'envoi d'événements comportementaux granulaires (ex: "Le joueur a atteint l'objectif X"), qui sont ensuite recoupés avec les données de session immuables du serveur.

Ce niveau de validation stricte est lié à la gestion globale de la charge serveur. Prévenir les fausses sessions est crucial pour l'efficacité, à l'instar des techniques requises pour Architecting Zero Waste Servers The Fortnite Server Optimization Hibernation Proposal Analyzed. Si votre Backend traite des millions de faux événements provenant d'un client usurpé, vous payez des coûts d'infrastructure pour aider un acteur malveillant à ruiner votre onglet discovery.

Bonnes pratiques pour l'architecture des systèmes de Discovery

Si vous construisez un hub multijoueur personnalisé ou un portail de modding, vous devez architecturer vos algorithmes de discovery pour qu'ils soient résilients face aux comportements abusifs.

Voici les principes fondamentaux pour construire un système qui récompense le véritable effort des développeurs :

  1. Privilégier la logique active aux assets passifs : Comme démontré dans le snippet C++, votre Backend doit analyser les relations entre les objets. Cent static meshes combinés dans un seul blueprint avec une logique d'interaction complexe sont infiniment plus "sophistiqués" que mille boîtes de déclenchement indépendantes. Récompensez la densité, pas l'étalement.
  2. Implémenter un Decay du score statique : Un Sophistication Score calculé lors de la publication ne doit pas être permanent. Le score statique initial doit servir de "graine" pour accorder à la map sa visibilité initiale. Au cours des 48 heures suivantes, ce score statique doit décroître, laissant la place à la Telemetry réelle des joueurs.
  3. Utiliser la validation de la durée de session comme multiplicateur : Suivez les durées de session P50 et P90 sur l'ensemble de votre plateforme. Si une map récemment mise à jour retient les joueurs 20 % plus longtemps que la moyenne de la plateforme, son classement doit augmenter de façon exponentielle.
  4. Pénaliser lourdement la duplication : Si votre Backend détecte qu'un développeur télécharge 14 variantes du même graphe logique avec des miniatures différentes, mettez l'ID du créateur en quarantaine.
  5. Tester vos cohortes de Discovery par A/B Test : Ne déployez pas de changements algorithmiques globalement. Lancez vos nouveaux calculs de sophistication sur 5 % des joueurs.

Réclamer l'onglet Discovery

La frustration qui s'exprime sur les forums de développeurs est tout à fait justifiée. Passer des semaines à équilibrer soigneusement les mécaniques, à optimiser le Netcode et à affiner le level design, pour être battu par un algorithme qui compte le placement brut d'appareils, est un échec architectural majeur.

La réalité est que toute métrique statique peut et sera détournée par des développeurs cherchant un raccourci. La seule voie durable pour les plateformes d'UGC est de combiner une analyse statique approfondie de la logique avec une Telemetry autoritaire et impitoyable. Tant que l'algorithme de discovery d'UEFN comptera les briques au lieu d'analyser l'architecture, le spam continuera de gagner.

Pour les studios indépendants qui construisent leurs propres écosystèmes, vous avez l'avantage de l'agilité. Vous pouvez concevoir vos pipelines de données correctement dès le premier jour. Prêt à faire évoluer un Backend multijugador équitable et piloté par Telemetry sans combattre l'infrastructure vous-même ? Essayez horizOn gratuitement et concentrez-vous sur la création de grands jeux.