Lors du keynote de présentation de l’iPhone 15, Apple a mis en avant une nouveauté de la puce A17 Pro : la prise en charge matérielle du ray tracing. Si vous ne connaissez pas bien le domaine de la 3D dans les jeux vidéo, ce segment a pu sembler un peu obscur. Nous allons donc tenter de vous expliquer ce que ça implique pour les jeux, pour les iPhone et pour tous les autres appareils ornés d'une pomme.
Mais c'est quoi exactement le ray tracing ?
Le ray tracing, ou lancer de rayons en français, est une méthode assez ancienne employée pour construire une image en 3D. L'idée de base est très simple : elle consiste à lancer un rayon à partir du point de vue de l'utilisateur dans un univers en 3D et de suivre sa trajectoire. Il peut arriver sur une surface mate qui réfléchit peu la lumière, comme un mur, ou une surface plus réfléchissante comme un miroir ou une flaque. Le système va calculer les réflexions possibles et faire repartir éventuellement le rayon dans une direction définie par les propriétés physiques de l'obstacle, jusqu'à ce qu'il rencontre une autre surface dans le modèle 3D, et les mêmes calculs recommenceront.
Cette solution est employée depuis des années dans les films d'animation, car elle permet un rendu extrêmement réaliste des reflets, ce qui n'est pas le cas des méthodes classiques qui se basent sur des approximations. Les ombres, les reflets dans les miroirs, dans les vitres ou sur l'eau sont très impressionnants visuellement et c'est depuis quelques années l'obsession des fabricants de cartes graphiques et d'une partie des développeurs. Le ray tracing n'est utilisé dans les jeux vidéo que depuis 2018, et seulement de façon hybride, car les ressources nécessaires sont extraordinairement élevées.
Reprenons avec un rendu classique. La rasterisation consiste à découper la scène en triangles (les polygones) placés dans un environnement en 3D, et ensuite projeter le tout sur un plan en 2D (l'image affichée sur votre écran). Les différentes étapes du rendu sont complexes, mais si vous devez ne retenir qu’une chose, c’est que la scène est construite triangle par triangle, sans interaction entre ces derniers. Une grande partie du travail consiste en réalité à corriger les « erreurs » de cette méthode, pour simuler les interactions, justement.
Un exemple schématique va être le reflet d'une lampe : il est souvent calculé par une simple approximation qui consiste à définir une texture de « reflet de lampe » qui va être placée sur le mur en face de cette dernière. C'est basique et finalement assez efficace, mais avec quelques défauts. Ce choix n'est fonctionnel que si vous êtes dans la bonne position et ne prend pas en compte le fait que votre personnage peut se trouver entre la lampe et le mur. C'est le problème vu au paragraphe précédent : les triangles du personnage et ceux du murs sont rendus de façon indépendante. Qui plus est, cette méthode ne prend pas en compte les reflets qui interviennent « dans la vraie vie ». Une lampe qui se reflète sur un mur un peu brillant peut aussi amener des reflets plus légers sur les autres murs, ce qui devient compliqué de gérer avec un rendu classique mais est très simple à faire avec le ray tracing d'un point de vue purement technique.
Maintenant, comprenons nous bien : c'est un exemple très schématique pour bien appréhender les bases et les développeurs qui ont une trentaines d'années de jeux en 3D derrière eux ont des solutions pour cacher tout ceci, mais le ray tracing règle le problème plus facilement, ce qui explique en partie son succès.
La rasterisation a d'autres défauts, liés à son fonctionnement intrinsèque. Prenons un autre exemple : le rétroviseur d'un véhicule. Dans un rendu classique, il n'y a pas de méthode simple pour afficher son contenu et il faut généralement en réalité animer une seconde scène 3D, ce qui réduit évidemment les performances et peut induire un décalage. Le ray tracing, en théorie, règle le souci : il s'agit d'une réflexion de la scène principale, ce qui ne demande pas d'étapes supplémentaires. Mais c'est ici que le problème des performances se pose : afficher le contenu du rétroviseur est simple en théorie mais nécessite beaucoup de calculs.
La première société à ajouter une prise en charge du ray tracing dans les jeux vidéo a été Nvidia, avec les GeForce RTX de la famille 2000 en 2018. La compagnie a ensuite amélioré le tout (au niveau des performances) avec les versions RTX 3000 et RTX 4000 (2020 et 2022) et d'autres ont suivi. AMD a intégré le ray tracing dans les Radeon RX 60001 en 2020 et Intel dans ses Arc en 2022. Dans les appareils mobiles, Qualcomm propose le ray tracing dans le Snapdragon 8 Gen 2 et Samsung dans l'Exynos 2200, basé sur une technologie AMD. Enfin, les consoles modernes — PlayStation 5, Xbox Series X et Xbos Series S — sont compatibles avec le ray tracing grâce à leurs cartes graphiques AMD.