De ce point de vue, Doom est un bien meilleur Overwatch
- Gallaxys, expert en FPS
Dojodirect
Des jeux de merde joués par des connards en direct !
La Parenthèse Technique − Mise à l’échelle par nombre entier
À l’origine, je comptais parler directement du XRGB-Mini Framemeister. Mais au fur et à mesure de la rédaction, je me suis rendu compte de l’importance fondamentale de comprendre comment fonctionne l’upscaling (mise à l’échelle) notamment pour les contenus faible définition (typiquement du 240p ou du 288p que produisait nos bonnes vieilles consoles).
Histoire de ne pas faire un pavé imbuvable, l’article d’origine a donc été découpé en petits morceaux pour pouvoir apprécier au mieux les subtilités de configuration d’un upscaler et surtout comprendre pourquoi, dans certains cas, le fait de toucher un tout petit peu à un paramètre de zoom, rend l’image totalement dégueulasse.
Avant de commencer, il y a deux ou trois petites choses à savoir :
Il est donc impossible d’afficher véritablement des « pixels » sur un vieil écran. Il dessine simplement des lignes. Et il se trouve que certaines consoles (NES et Super NES en tête) se servaient de cette particularité pour leur rendu. Vous avez pu voir que la NES Mini propose un mode « square pixel » (pixel carré) qui correspond en fait à la résolution interne de la machine en 8/7 et non en 4/3. Si cela fait des jolis pixels bien carrés que nos télévisions modernes n’auront aucun mal à afficher, cela ne correspond pas au rendu réel sur une télé CRT qui a tendance à étirer l’image sur toute la résolution horizontale, du fait qu’elle n’affiche finalement que des lignes.
Maintenant, vient se poser le problème des scanlines. Comment obtenir de belles scanlines sur un écran à résolution de pixels fixe à partir d’un signal analogique qui n’est pas fait pour ça ? Sur une télé CRT pas de problème : le balayage des lignes n’éclaire qu’en ligne sur 2, donc on a forcément de belles lignes bien noires dessinées sur l’écran quand on balance un signal Low-Res.
Sur écran LCD/Plasma/OLED, c’est une autre paire de manches : les lignes noires doivent être dessinées par l’upscaler sur l’image d’origine, qui sera ensuite affichée… et probablement déformée par la mise à l’échelle nécessaire ! Voici un exemple ce qui peut arriver :
Le résultat est bien pire que si on avait choisi de ne pas dessiner les scanlines tout court ! Et ce pour une raison très simple : les scanlines ne sont pas parfaitement alignées avec la « grille » (de pixels) que représente une télé moderne. L’upscaler (externe ou celui de la télé) essaie donc de compenser et va dessiner des lignes noires plus larges ou moins larges d’un pixel (ou deux ou trois) à certains endroits.
Le seul moyen pour se prémunir de ces désagréments est de s’arranger pour aligner soi-même les lignes noires avec les pixels des moniteurs à résolution de pixels fixe : on va essayer de multiplier systématiquement la résolution d’origine par un nombre entier.
Il va donc falloir avoir des taux d’upscale qui s’expriment en nombre entier de la résolution d’origine d’où le x1, x2, x3, x4, x5 Scaling : on multiplie par 1, 2, 3, 4 ou 5 l’image d’origine.
Il est alors très facile de dessiner des scanlines : il suffit de dessiner des lignes noires une ligne sur deux ou deux lignes sur quatre ou trois lignes sur six, etc… en fonction de la multiplication d’origine.
Illustrons avec cette image de Super Mario 64 version NTSC, résolution d’origine 320×240 :
Si je l’applique bêtement sur un écran Full HD (1920×1080 donc), ça donne un upscale 1x sans possibilité de faire des scanlines (et ça a l’air un peu con parce que ça fait une image toute petite) :
En x2, on multiplie les lignes verticales et horizontales par 2. Chaque pixel d’origine va donc être transformé en 4 pixels sur l’image. C’est toujours un nombre entier donc l’écran ne devrait pas se prendre les pieds dans le tapis. Et c’est à partir de là qu’on peut faire des jolies scanlines en intercalant des lignes noires au lieu de bêtement multiplier. Pour notre illustration, on sort donc une image en 640×480. Ça n’occupe toujours pas tout l’écran :
Même principe pour le x3. On obtient alors une image en 1280×720 :
Mais, le plus intéressant, c’est le x4 et le x5. Si l’on multiplie l’image d’origine par 4, elle ne rentre pas tout à fait dans du FullHD (ce n’est pas un multiple), on obtient du 960p et il y a donc des bandes noires en haut et en bas de l’écran.
C’est la meilleure/plus grande image qu’on peut obtenir sur un moniteur Full HD. Sans commencer à jouer avec l’overscan… en passant en x5 ! L’image ne tient alors plus complètement sur l’écran, une partie est effacée (en dehors des bords de l’image). Néanmoins, c’était aussi le cas nativement sur les téléviseurs CRT. La plupart des jeux tournant en Lo-Res (240p) ont été prévu pour que les bords soient un peu « mangés » par l’écran.
Ici, Super Mario 64 fait 1600×1200 donc 60 pixels sont perdus en haut et en bas de l’écran. C’est l’équivalent (divisé par 5) de 12 pixels (ou 12 lignes) en haut et en bas par rapport à la résolution native. Et vous remarquerez que vous pouvez toujours tout lire sur l’écran (Start, Super Mario 64 en fond, etc…). Ce n’est donc pas forcément déconnant de passer en x5 dans certains cas.
Ça, ça marche très bien pour des résolutions NTSC (240p). Dès que l’on passe en PAL, c’est beaucoup plus compliqué : la résolution native étant alors à 288 lignes de haut, on ne peut obtenir de scanlines correctement qu’en faisant du x2 (et donc en perdant une bonne partie de l’écran) ou en réglant son upscaler sur 576p50 (résolution supportée par tous les moniteurs Full HD).
Le principe général est donc le suivant : si vous n’en avez rien à foutre des scanlines, essayez systématiquement de transmettre à votre moniteur sa résolution native en faisant juste attention au rafraîchissement (1080p50 pour une source 50Hz, 1080p60 pour du 60Hz) et laissez-le faire son boulot. C’est le meilleur moyen (et souvent le seul) pour obtenir un résultat correct sur un écran LCD.
Si vous voulez les scanlines, il va falloir faire quelques sacrifices : soit vous devrez faire de l’overscan et couper une partie de l’écran, soit vous devrez faire avec une résolution qui ne remplit pas tout l’écran.
À noter que les écrans 4K vont encore apporter un facteur supplémentaire : leur résolution native en 2160p est un multiple parfait pour les sources 1080p (x2), 720p (x3), 240p (x9), mais pas 480p. Quant aux résolutions PAL, elles vont, comme d’habitude, nous faire chier :
Pour la mise à l’échelle en nombre entier, on a pas fini de rigoler…
Bref, j’espère que ça vous aura aider à comprendre pourquoi il est très important de multiplier systématiquement les résolutions par des nombres entiers si l’on veut obtenir une qualité d’image optimum.
La prochaine fois, je vous jure, je m’atèle au Framemeister.
Par Mortal
Le 17 novembre 2016 | Catégories : Editos
Je le couperai au montage…Voir les articles de Mortal
A voir également
Les trucs qu'on a rédigés avec nos petits doigts potelés
Dojodirect
Des jeux de merde joués par des connards en direct !