En considérant tout le travail à la charge de l'Emotion Engine, reste-t-il quelque chose ? La dernière étape, en réalité : l'affichage !
Il y a une puce simple mais rapide et spécialisée : le Graphics Synthesizer, ou 'GS', cadencé à ~147.46 MHz. Il embarque 4 MB de DRAM pour réaliser tout le traitement en interne. Et donc, cela réduit le besoin d'accéder à la mémoire principale. La RAM embarquée (eDRAM) est connectée par le biais de différents bus en fonction du type de données.
Le GS offre moins de fonctionnalités que d'autres systèmes graphiques précédemment analysés sur ce site. Néanmoins, il est vraiment rapide dans son travail.
Architecture et design
Ce GPU ne fait que de la rasterisation et c'est tout... Génération de pixels, mappage de textures, application de la lumière et quelques autres effets. Cela signifie qu'il n'y a pas de transformations de points (celles-ci sont réalisées par les VPUs). Aussi, il s'agit d'un pipeline figé, donc pas d'ajustements sophistiqués ni de shaders, vous êtes coincés avec un modèle d'ombrage prédéfini (comme Gouraud).

Design du pipeline du Graphics Synthesizer
Cela semble plutôt simple, non ? Bien, voyons plus en détails comment se déroule chaque étape.
Pré-traitement
L'Emotion Engine démarre le Graphics Synthesize en approvisionnant sa DRAM embarquée avec les materials nécessaires (bitmaps des textures et Colour Lookup tables, ces dernières étant aussi connues sous le nom de 'CLUT'), en assignant des valeurs sur les registres du GS pour le paramétrer, et enfin, en envoyant les commandes de rendu (Display Lists) qui déclenchent le rendu par le GS de primitives (points, lignes, triangles, sprites, etc) à des positions spécifiquent à l'écran.
En complément, le GS pré-traitera certaines valeurs qui seront nécessaires pour les prochains calculs. La plus notable étant le résultat de l'algorithme d'analyse différentielle, qui sera utilisée pour les interpolations durant le rendu.
Rastérisation
En utilisant les résultats des calculs précédents, le renderer génère des pixels à partir des primitives. Cette unité peut générer 8 pixels (avec textures) ou 16 pixels (sans textures) simultanément, avec pour chaque entrée de pixel le calcul des propriétés suivantes :
- RGBA : correspond à la combinaison de Rouge, Vert, Bleu et Alpha (transparence).
- Z-value : utilisée pour le test de profondeur dans les étapes suivantes.
- Brouillard : optionnel, pour simuler le brouillard environnant.
- Propriétés de texture : contient l'adresse de la texture dans la DRAM, et d'autres propriétés (coordonnées, niveau de détail, filtre, etc) qui seront utilisées dans la prochaine étape.
Il effectue également des Scissoring Tests pour éliminer les polygones en dehors de l'image (à partir de leurs coordonnées X/Y). Certaines propriétés des pixels sont transmis à l'étape du 'Pixel testing' pour des tests complémentaires. Le lighting est également fourni en sélectionnant une des deux options disponibles, Gouraud et Flat.
L'ensemble est alors livré au moteur de 'Texture mapping', mais chaque propriété est traitée par une 'sous-moteur' spécialisé, ce qui permet de gérer plusieurs propriétés simultanément.
Texturing
Cette étape est accomplie par une grande unité Pixel qui peut calculer jusqu'à 16 pixels en même temps : ici, les textures seront appliquées aux polygones (à présent des pixels). De plus, les effets de brouillard et d'anticrénelage sont appliqués ici.
Les matrices des textures sont récupérées depuis la DRAM dans une zone définie comme le Texture buffer, bien que cela soit interfacé via une zone séparée intitulée Texture Page Buffer qui semble agir comme un mécanisme de mise en cache des textures. Les CLUTs sont également mappés en utilisant ce système de pages. Les deux sont récupérés au travers d'un bus 512 bits.
L'unité pixel réalise de la correction de perspective pour appliquer les textures sur les primitives (une grande amélioration, par rapport à la précédente approche d'affine mapping). De plus, il permet aussi un filtrage bilinéaire ou trilinéaire, ce dernier étant utilisé en même temps que les textures à mipmapping.
Tests
Ici, certains pixels seront éliminés s'ils ne remplissent pas certains critères. Ceci étant dit, les tests suivants sont réalisés :
- L'Alpha test : compare la valeur d'alpha (transparence) du pixel avec la valeur 'standard'. Ceci parce que dans certains cas, la valeur d'alpha est requise dans un certain intervalle, ou supérieure/inférieure à une valeur arbitraire.
- Le Destination Alpha test : vérifie à nouveau la valeur d'alpha du pixel avant de le dessiner dans le frame-buffer.
- Le Depth Test : compare la valeur de coordonnée Z du pixel avec la valeur correspondante dans le Z-buffer. Cela évite de traiter des pixels qui seraient masqués derrière d'autres pixels.
Post-traitement
La dernière étape peut appliquer des effets sur nos nouveaux pixels, en utilisant le précédent frame-buffer qui réside dans la DRAM locale :
- Alpha Blending : ou simulation de transparence ; mélange les couleurs du frame-buffer actuel avec le précédent en mémoire.
- Dithering : les grandes valeurs RGBA devront être réduites, un dithering peut donc être appliqué pour adoucir la perte de précision.
- Colour Clamping : après application de traitements comme l'Alpha Blending, la nouvelle valeur RGB pourrait dépasser l'intervalle valide (0-255), le clamping ramène donc la valeur dans l'intervalle.
- Formatting : fait la conversion du frame-buffer final, généré via le pipeline, vers un format qui peut être stocké en mémoire.
Enfin, le nouveau frame-buffer, ainsi que le Z-buffer mis à jour, sont écrits en mémoire via un bus 1024 bits.
Encore plus de post-traitement
Il y a à l'intérieur du GS un composant dédié, intitulé Programmable CRT Controller ou 'PCRTC', qui transmet le frame-buffer en mémoire vers la sortie Vidéo, afin que vous puissiez voir l'image sur la TV. Mais ce n'est pas tout : il contient aussi un ensemble spécifique, intitulé Merge Circuit, qui permet d'effectuer un mélange d'alpha entre deux frame-buffers séparés (c'est utile lorsque les jeux souhaitent réutiliser l'image précédente pour constituer la nouvelle). L'image qui en résulte peut être transmise à travers le signal Vidéo et/ou être écrite en mémoire en retour.
Des modèles plus détaillés
Tout ceci étant dit, cela nous a certainement apporté des programmes de conception plus aboutie, pour affiner des personnages déjà célèbres. Jetez un œil à cette comparaison 'Avant/Après' :

Modèle interactif disponible dans l'édition moderne
Crash Bandicoot (1996) pour la PS1.
732 triangles.

Modèle interactif disponible dans l'édition moderne
Crash Bandicoot: The Wrath of Cortex (2001).
2226 triangles.
Voici des personnages de nouveaux opus, ils ont été modélisés de zéro avec un grand niveau de détails :

Modèle interactif disponible dans l'édition moderne
Kingdom Hearts (2002).
2744 triangles.

Modèle interactif disponible dans l'édition moderne
Dragon Quest VIII (2004).
2700 triangles.
Il est important de mentionner que des jeux comme Dragon Quest ont implémenté un modèle de lighting personnalisé, intitulé Cel Shading (un nom que j'ai déjà mentionné) ; toutefois, dans mes précédents articles j'ai expliqué que la GPU en était principalement responsable. Dans le cas de la PS2, les calculs de couleur requis sont vraisemblablement réalisés par l'Emotion Engine, puisque le GS n'est pas aussi flexible que les autres GPUs.
Sortie Vidéo
Comme stipulé précédemment, le PCRTC transmet le frame-buffer à travers le signal Vidéo. L'interface peut émettre le signal vidéo à travers un large choix de formats (pour fonctionner avec les TVs de n'importe quelle région géographique) :
- PAL : envoie jusqu'à 640x512 pixels en 50 Hz, soit en progressif (576p) soit entrelacé (576i).
- Aucun jeu dans le commerce n'utilise le 576p. Bien que certains gèrent le mode progressif, ils le font en 480p.
- NTSC : jusqu'à 640x448 pixels à 60 Hz, soit en progressif (480p) soit en entrelacé (480i).
- VESA : jusqu'à 1280x1024 pixels.
- DTV : jusqu'à la quantité énorme de 720x480 pixels en mode progressif, ou 1920x1080 en mode entrelacé.
- En ajustant les paramètres du PCRTC, un jeu peut également forcer la sortie en 1080p. Cependant, ce mode n'est pas documenté et est donc sujet à un comportement indéfini.
- Est-ce que cela signifie que la PS2 peut 'afficher de la HD' ? Techniquement... oui, mais je ne pense pas, pour la plupart, que les studios aient risqué une perte de performances pour un format qui n'étaient pas encore populaire.

Le côté droit de la console , vu de l'arrière. Montre le port A/C, le port audio digital, et la sortie AV Multi.
Il y a une certaine quantité de modes possibles, mais cela se résume aux formats adoptés durant le début des années 2000, ce qui réduit donc à PAL et NTSC. Aussi, même si le PAL offrait une plus haute définition que le NTSC, certaines versions Européennes de jeux NTSC avaient recours à des bandes noires pour masquer les lignes horizontales non utilisées, et abaissaient la fréquence de rafraîchissement pour rester dans la limite des 50 Hz (je les appelle des 'mauvais portages' !).
Le port de sortie Vidéo (Multi A/V) est vraiment pratique. Il transporte RGB, Component, S-Video et composite. Ainsi, tous les signaux importants sont disponibles, sans nécessiter des adaptateurs propriétaires ni des modifications internes.





