- Lorsqu’un jeu est lancé en plein écran sur un MacBook, la plupart des jeux effectuent un rendu flou à cause du problème de l’encoche de l’écran
- Le mécanisme de sélection de la résolution du système ne tient pas compte de la zone de l’encoche, ce qui entraîne le choix d’une zone de sortie incorrecte
- Le choix d’une résolution 16:10 sert de solution de contournement temporaire, mais la cause profonde réside dans la conception des API d’Apple et dans le manque de directives
- Le problème est reproductible dans des jeux représentatifs (Shadow of the Tomb Raider, No Man’s Sky, etc.) ; certains jeux récents (Cyberpunk 2077) le gèrent correctement
- Apple doit améliorer les recommandations aux développeurs et la prise en charge via des mises à jour du HIG et des API
Problème : pourquoi le rendu est flou dans les jeux Mac en plein écran
- Ce problème a été signalé à Apple depuis septembre 2023 sous l’identifiant FB13375033
- Lorsqu’un jeu est lancé en plein écran sur l’écran d’un MacBook, la plupart des jeux ne prennent pas correctement en compte l’encoche (notch), ce qui provoque des erreurs de rendu
- De nombreux jeux récupèrent la liste des résolutions prises en charge par le système et choisissent la première d’entre elles (la résolution de toute la zone de l’écran), alors que la véritable zone plein écran utilisable dans AppKit est limitée à la zone située sous l’encoche
- Si le jeu affiche en résolution de l’écran complet, la zone réellement drawable étant plus petite, l’image est compressée verticalement, ce qui entraîne un effet de flou
Structure des zones d’affichage sur les écrans Mac
- Un écran Mac avec encoche comporte trois zones principales
- Les limites complètes de l’écran (encoche et menu compris)
- La safe area (sous l’encoche)
- La zone plein écran exploitable par AppKit (sous la barre de menu)
- La liste des résolutions renvoyée par la fonction
CGDisplayCopyAllDisplayModes mélange la résolution complète de l’écran et la résolution sous la barre de menu (généralement au format 16:10)
- La plupart des jeux utilisent le premier élément de cette liste (la zone plein écran), ce qui produit une sortie incorrecte
- Exemple : Shadow of the Tomb Raider démarre par défaut avec la résolution complète de l’écran (3456x2234), mais la zone réellement drawable est de 3456x2160 (74 pixels d’écart, ce qui comprime l’image et la rend floue)
Solution : choisir la bonne résolution et solutions de contournement temporaires
- Utilisateurs : lors de l’exécution d’un jeu en plein écran sur un écran Mac avec encoche, il est important de sélectionner manuellement une résolution 16:10 (le jeu ne l’ajuste pas automatiquement)
- Développeurs : il faut filtrer plus finement la liste des résolutions en utilisant la propriété
safeAreaInsets de NSScreen
- Un algorithme est proposé en code pour ne conserver que les résolutions conformes au critère de la safe area (avec comme effet secondaire de filtrer excessivement certaines résolutions, comme le 4:3)
- Fondamentalement, une amélioration du côté d’Apple est nécessaire
Affected Games : principaux jeux touchés et état de la prise en charge
- Shadow of the Tomb Raider, Control Ultimate Edition, No Man’s Sky, Riven, Stray, entre autres, présentent pour la plupart des phénomènes de compression et de rendu flou à cause d’une résolution par défaut incorrecte
- Control : fixe sa propre résolution de manière arbitraire, sans correspondre à la véritable résolution du Mac
- No Man’s Sky : propose à la fois des résolutions avec un ratio incorrect, ainsi que des résolutions safe area et hors safe area
- Riven, Stray : appliquent par défaut un rendu dans une résolution compressée
- Cyberpunk 2077 choisit correctement une résolution 16:10 (sa méthode de filtrage interne n’est pas connue)
- World of Warcraft : grâce à une API legacy, peut dessiner jusque dans l’encoche, donc l’utilisation de la résolution complète fonctionne normalement
Ce qu’Apple pourrait faire : nécessité d’une réaction d’Apple
- Ajouter dans la documentation du HIG (Human Interface Guidelines) des explications et recommandations sur la gestion des résolutions pour les écrans avec encoche
- Demander une mise à jour de
CGDisplayMode afin de faciliter le filtrage des résolutions dans AppKit/Cocoa
- Concevoir une nouvelle API dédiée à l’optimisation des jeux (liste de résolutions et suppression du boilerplate)
- Pour les développeurs, envisager de recommander le calcul d’une liste de résolutions propre plutôt qu’une simple interrogation des résolutions, ou l’usage d’un système de « render scale »
- Si ces améliorations sont appliquées, Apple devra également mettre à jour sa documentation officielle et ses exemples de code
Aucun commentaire pour le moment.