Navigation▲
I. Aperçu matériel▲
La PlayStation 4 veut se placer comme le périphérique central du living-room. C'est une puissante machine proposant des expériences innovantes et des services en ligne nouvelle génération (applications iOS, Android, gestion du compte et des téléchargements en ligne…)
Pour atteindre ces objectifs, l'architecture choisie est orthodoxe et vise à réduire la complexité du développement. Pour cela, elle intègre un CPU/GPU familier avec une mémoire unifiée permettant d'éviter de nombreuses copies mémoire et embarque un disque dur sur chaque modèle.
Cette machine a été conçue en tenant compte des remarques des services internes de Sony, mais aussi des studios de développement externes. Du côté logiciel, ceux-ci ont apporté des remarques sur le design des bibliothèques et leur implémentation, de même pour les outils. La machine a été développée en gardant à l'esprit l'usage fait des développeurs.
I-A. Descriptif▲
I-A-1. CPU▲
Le CPU est de type Jaguar, avec huit cœurs (séparés en deux sections de quatre cœurs avec leur cache). De plus, un niveau de cache L2 de 2 Mo partagé est intégré. Finalement, un mécanisme « Snoop » a été mis en place.
Les fonctionnalités du CPU sont :
- ISA avancé, supportant les instructions SSE 4.2 et AVX ;
- exécution « out of order » ;
- renommage des registres (réduit la latence avec le PPU pour la PS3) ;
- plusieurs niveaux de cache.
I-A-2. GPU▲
Les cartes graphiques souffrent de plusieurs goulots d'étranglement, dont le plus important est celui de la bande passante mémoire. Plusieurs niveaux dans le pipeline graphique peuvent en souffrir, notamment avec des objets possédant de grandes textures. Sony ne souhaite pas perdre en performance de bits par texel.
La solution proposée pour cela est la mise en place de mémoire GDDR5 à très grande bande passante, permettant un débit de 176 Gb/s, soit plus de deux fois le débit de la DDR3.
I-A-2-a. Débit de remplissage▲
Un second goulot d'étranglement est celui du débit de remplissage. Les ombres et les systèmes de particules nécessitent un haut débit de remplissage. Les performances de la mémoire vive sont gâchées s'il n'y a pas un bon débit.
La solution de Sony est de s'assurer qu'il y a assez d'unités de rendu (« Render back end units »). Le taux de remplissage des pixels de la PlayStation 4 est supérieur à celui de la bande passante mémoire.
I-B. Expérience utilisateur▲
I-B-1. Manette▲
La création d'une nouvelle version de manette permet de proposer un contrôleur connu des joueurs tout en l'améliorant. Maintenant, la manette possède deux sticks analogiques et des « triggers ». De plus, les moteurs pour les vibrations peuvent être mieux contrôlés ainsi que les capteurs de mouvements.
Maintenant, il y a aussi un touchpad dont la densité est similaire à celle de la PlayStation Vita, mais pas la taille, ce qui permet une sensibilité accrue.
Finalement, la manette possède un nouveau bouton de partage possédant deux fonctions :
- un appui rapide permet d'enregistrer les quinze dernières minutes de jeu, qui peuvent être éditées et uploadées ;
- un appui prolongé permet de prendre une capture d'écran.
La manette possède aussi des haut-parleurs et un microphone. La barre lumineuse (led RVB) de la manette permet à la caméra de suivre jusqu'à quatre manettes sur une distance de deux à cinq mètres. Les capteurs de mouvements permettent de donner la rotation et l'inclinaison de la manette.
I-B-2. Camera▲
La PlayStation Camera possède deux caméras à grand-angle dont la résolution maximale est 1280 x 800. Les paramètres de résolution, taux d'images, exposition, gain peuvent être configurés individuellement. Le format de sortie est Raw sur huit ou seize bits, YUV422. Le taux d'images est 60 ou 120 images. La carte de profondeur est calculée de manière logicielle sur le GPU.
I-B-3. Interface utilisateur▲
L'interface utilisateur a été revue pour proposer une nouvelle disposition dans laquelle les jeux peuvent ajouter des données.
I-B-4. Application PlayStation▲
L'application pour iOS et Android de PlayStation permet dans un réseau local Wi-Fi d'utiliser son téléphone comme clavier et manette pour la console.
Elle permet aussi la consultation de profil, d'interagir avec ses amis et d'accéder au magasin. Vous pouvez activer automatiquement la console et télécharger un jeu à partir de l'application.
I-B-5. Application pour les jeux▲
Sony fournit un SDK pour iOS et Android afin de créer des applications compagnons pour les jeux.
I-B-6. Jeu à distance▲
Avec la PlayStation Vita, vous pouvez jouer à distance au jeu de la console. Les boutons sont automatiquement reconfigurés. Seule une connexion avec le Wi-Fi est permise afin de s'assurer la faible latence.
I-B-7. Télécharger et jeu simultané▲
Un joueur peut démarrer un jeu après son achat. Pour cela, la console permettra de jouer tout en effectuant le téléchargement (à condition qu'assez de données aient été récupérées). Le jeu sera découpé en plusieurs morceaux. C'est aux développeurs de trouver une façon de permettre cette fonctionnalité. Une méthode est de proposer aux joueurs un choix multiple, suivant ce qu'il souhaite faire (jeu solo, jeu multi, traductions…).
II. Les graphismes sur la PlayStation 4▲
Sony propose une nouvelle bibliothèque bas niveau : GNM. Elle est proche d'OpenGL ou de DirectX tout en évitant les défauts de ces dernières. Elle permet la réutilisation des structures de données autant que possible et possède des primitives de synchronisation.
II-A. Rendu CPU multithread▲
Le pilote graphique gère le multithread. Il est donc possible d'envoyer des ordres au GPU à partir de différents threads. Chaque ordre rentrera dans une queue (une unique pour les ordres de rendu, plusieurs pour les ordres de calcul), qui sera au fur et à mesure dépilée par le GPU. Vous pouvez avoir jusqu'à 64 queues individuelles, utilisant une priorité par masque d'affinité.
II-B. Pipeline de rendu▲
Tous les niveaux de rendu peuvent être contrôlés. Les geometry shaders et tesselation shaders sont présents et chaque niveau est mieux exposé par rapport à ce que l'on retrouve dans DirectX. De plus, le support des tampons a été étendu pour chacun des niveaux : RW_Textures et Atomics.
Les textures sont maintenant partiellement résidentes. Elles vont être virtuellement présentes en mémoire, mais se charger à la volée. Cela peut être aussi comparé à un système de texture infinie.
La liaison des données se fait au travers de tables de ressources de shaders (« Shader Resource Tables »). Celles-ci permettent aux développeurs de contrôler la disposition des ressources des shaders.
La console supporte les cas spéciaux pour le geometry shader :
- tesselation dans le geometry shader ;
- instanciation ;
- cube mapping ;
- streamout.
Ainsi que la tesselation Hull Shader et Domain Shader :
- conversion de surfaces paramétriques ;
- génération de géométries optimale.
De plus, les compute shaders sont entièrement supportés et peuvent être exécutés en parallèle, où chacun possède sa propre mémoire et un espace global.
Avec les compute shaders, il est possible de retirer les triangles inutiles (triangle culling) avant de les envoyer dans le vertex shader. Cela ne nécessite aucun changement dans le code, il suffit d'avoir un format personnalisé de données d'index en entrée et un code de conversion et vous pouvez ainsi optimiser le rendu en retirant les triangles hors écran et les triangles visibles que par leur face arrière (backface culling). De plus, les indices de ceux-ci ne seront plus du tout utilisés dans le reste du rendu.
Actuellement, les PC ne gèrent pas la possibilité d'exécuter un compute shader en même temps que d'effectuer un rendu. La PlayStation 4 le peut. Grâce à la mémoire unifiée, le CPU et les tâches de calcul pour le GPU peuvent utiliser les mêmes données. Pour cela, le GPU possède des bus mémoire supplémentaires prenant en compte la cohérence des caches. L'avantage d'utiliser les compute shaders est d'avoir un modèle adapté pour le GPU. De plus les threads ne possèdent pas de formats obligatoires d'entrées ou de sorties et chaque groupe partage les données avec les threads le composant.
Un bit supplémentaire a été rajouté pour indiquer si telle ou telle ligne de cache doit être flushée.
La plupart des tâches CPU et GPU ne vont pas partager la mémoire. Chacune a sa propre vitesse de bus et des caches profonds.
Si le CPU et le GPU partagent de la mémoire, c'est qu'il y a un travail avec un compute shader ou que des bus existent pour contourner les caches. Les développeurs doivent garder en tête les problèmes de mise en cache et ne pas coupler fermement les tâches CPU et GPU.
Plusieurs points peuvent affecter les performances :
- occupation du noyau ;
- la taille des groupes de threads en opposition au nombre d'unités de calcul : plus de groupes peut réduire la latence, mais être moins efficace ;
- les effets des bus mémoire sur le GPU ;
- les différences avec la surface ;
- la disposition des données ;
- …
Sur 16 millisecondes, toutes les unités de calculs ne sont pas utilisées : ces temps libres peuvent être utilisés par les tâches de calculs.
III. Environnement de développement▲
III-A. Kit de développement▲
Sony fournit tous les outils pour développer avec sa console : suite d'outils, SDK, exemples. De plus, un support est fourni au travers des forums, de la documentation, la référence du compilateur, un guide de transition, un aperçu de l'ABI et plus.
Le kit de développement s'intègre parfaitement dans Windows :
- mise à jour du firmware ;
- lancement d'exécutable ;
- gestion du glisser/déposer de fichiers ;
- contrôle de l'énergie et redémarrage ;
- paramètres du kit ;
- affichage TTY.
Il est possible de capturer et de rejouer des séquences de jeux pour faciliter le débogage. De plus, le kit intègre des outils en ligne de commande, des bibliothèques pour la réalisation d'outils personnalisés, en C++, C++ managé, C#, VB.
III-B. Débogueur▲
Il est possible de déboguer le code comme vous le feriez pour un programme sur PC, en proposant une fonctionnalité similaire à celle de Visual Studio pour le débogage d'applications multithreads. De plus, les fonctionnalités avancées suivantes sont disponibles :
- débogage de fichier de vidage de cœur ;
- piles d'appels parallèles et espions ;
- points d'arrêt spécifique au thread et points de trace.
III-C. Gestion de projet▲
Sony propose un outil gratuit pour la gestion des compilations de code et de données distribuées pouvant même supporter des outils personnalisés. L'outil permet de tirer des avantages des petits parcs de machines, mais peut aussi gérer plus d'une centaine de machines.
III-D. Analyseurs de performance▲
III-D-1. CPU▲
L'analyseur de performance pour le CPU est capable d'enregistrer les données en cours de jeu. Ces données peuvent être analysées et exportées. Grâce à celles-ci, vous pourrez supprimer les goulots d'étranglement et les conflits.
III-D-2. GPU▲
L'analyseur de performance pour le GPU permet de rejouer des séquences et de les analyser. Il facilite la lecture des textures, des shaders et trouve les points chauds du code. De plus, il incorpore un visualiseur de trace de thread.
III-E. PhyreEngine▲
PhyreEngine est un moteur de jeux gratuit proposé par Sony pour la PlayStation 4, la PlayStation 3 et la PS Vita. Le moteur est aussi compatible avec Windows en utilisant un rendu soit OpenGL, soit DirectX 11.
Le moteur est évidemment optimisé pour les plateformes PlayStation et propose une interface unifiée permettant de toutes les cibler.
Journey, Hotline Miami et d'autres utilisent PhyreEngine.
III-F. Services pour les développeurs▲
Sony propose un portail : PlayStation DevNet pour les développeurs, que ce soit les studios de développement ou les studios indépendants dans lequel vous pouvez retrouver les SDK, les outils, des tutoriels vidéo, des forums… De plus, vous pouvez uploader votre fichier de vidage de cœur sur le site pour le faire analyser.