Malgré ces améliorations techniques, le rendu en lui-même des jeux n’a pas beaucoup changé depuis le début de la 3D sur ordinateur : il se base toujours sur le principe de la matricialisation de l’image (rasterisation). Les objets en 3D sont projetés sur un plan, celui de la caméra, ce qui forme l’image à afficher. Cette opération s’effectue par un produit matriciel, pour lequel les cartes graphiques fournissent une excellente performance. Avec les années et la puissance de calcul, divers effets ont pu être implémentés par-dessus à l’aide de diverses sortes de nuanceurs (shaders) : appliqués par pixel (pixel ou fragment shader), par polygone (geometry shader) ou par sommet (vertex shader), ils peuvent influencer considérablement le rendu et l’amener à un très haut niveau de photoréalisme.
Depuis le début, une autre technique de rendu est annoncée : le lancer de rayons (ray tracing). Le principe en est totalement différent : il s’agit de simuler l’entièreté du trajet des rayons de lumière (d’où le nom), entre le moment où ils sont émis par une lumière jusqu’à l’instant où ils franchissent le plan de la caméra, en étant notamment réfléchis sur tout objet se trouvant sur le chemin. Évidemment, le réalisme d’un tel rendu est bien meilleur que par matricialisation, mais demande une puissance de calcul phénoménale — pour afficher ne fût-ce qu’une image, il peut falloir plusieurs heures. C’est la raison pour laquelle les films 3D utilisent le lancer de rayons, sur une batterie d’ordinateurs puissants, depuis plus d’une dizaine d’années (par exemple, Renderman, le moteur de rendu utilisé par le célèbre studio d’animation Pixar, est passé d’un rendu par matricialisation dans les années 1980 à un rendu uniquement par lancer de rayons en 2016).
Au niveau matériel, Imagination Technologies avait déjà proposé des cartes graphiques avec une accélération particulière du lancer de rayons, mais avec un succès assez mitigé à l’époque (c’était en 2016).
DirectX Raytracing
Avec des cartes graphiques de plus en plus puissantes, le rêve d’utiliser le lancer de rayons pour l’entièreté de scènes interactives (où les images doivent être prêtes en une fraction de seconde, car l’utilisateur interagit sans cesse avec l’application — déplacer la caméra, un objet, etc.) persiste depuis des décennies… et pourrait très bientôt devenir réalité ! En effet, la nouveauté principale annoncée cette année par Microsoft lors de la Game developer conference est DXR, l’acronyme de DirectX Raytracing. Il s’agit d’une interface pour réaliser un rendu en temps réel par lancer de rayons. Celle-ci a déjà permis de réaliser un certain nombre de démonstrations technologiques.
L’effet sur le rendu est bluffant, surtout quand on le compare à un rendu plus traditionnel. Le lancer de rayons permet ainsi d’afficher des réflexions très précises d’objets qui n’existent pas dans la vue de la caméra.
Les réflexions montrées sont entièrement correctes d’un point de vue physique, peu importe la surface considérée.
De manière générale, toute la scène profite de ce regain de réalisme.
Techniquement, toute la scène n’est pas encore affichée par lancer de rayons — la puissance de calcul n’est pas encore disponible. DirectX Raytracing fonctionne en spécifiant une certaine zone qui doit être affichée par lancer de rayons (souvent bien plus petite que l’écran au complet), par exemple les objets dont la surface est réfléchissante. Le rendu est configuré par un nouveau type de nuanceurs, appliqués pour chaque objet dans la scène, pour indiquer les cas d’intersection entre un rayon et une surface (sans oublier les cas où le rayon rebondit sur plusieurs surfaces).
Par ailleurs, Microsoft est déjà prêt au niveau de l’outillage : son débogueur PIX gère nativement l’intégralité des nouvelles fonctionnalités apportées par DirectX Raytracing, bien que de manière expérimentale. Il suffit de mettre à jour sa version de Windows 10 (pour bénéficier de la mise à jour de DirectX, uniquement disponible à ceux en mode fast ring pour le moment), puis d’installer la dernière version de PIX.
Côté implémentation
Comme pour le reste de DirectX, Microsoft fournit surtout une interface à respecter, une bonne partie du travail doit être faite par les fabricants des cartes graphiques à travers leurs pilotes. La performance dépendra donc fortement de ces implémentations et du matériel disponible. Néanmoins, une implémentation utilisant DirectCompute sera disponible et utilisée chaque fois qu’une implémentation plus spécifique n’est pas disponible — de telle sorte que toute carte graphique compatible DirectX 12 pourra utiliser ce module. Ce mode de fonctionnement pourrait se répéter à l’avenir : selon Microsoft, le futur des cartes graphiques ne se situe pas au niveau d’un matériel spécifique pour des fonctions fixes, mais bien d’opérations flexibles et généralistes.
D'un côté, AMD ne se mouille pas trop : un pilote sera disponible dans le futur, mais la compagnie semble se focaliser sur ses solutions pour le lancer de rayons. Ainsi, le moteur de rendu maison Radeon ProRender pourra utiliser ce lancer de rayons en temps réel ; il n'est pas vraiment prévu pour du jeu vidéo, mais plutôt des applications professionnelles. AMD travaille également depuis des mois sur Radeon Rays, une bibliothèque de lancer de rayons pouvant exploiter OpenCL, Vulkan ou encore Embree pour l'accélération matérielle (GPU pour OpenCL et Vulkan, CPU pour OpenCL et Embree), aussi prévu pour des jeux vidéo.
NVIDIA semble avoir une longueur d’avance
D’un autre côté, NVIDIA travaille depuis très longtemps sur le sujet du lancer de rayons, avec par exemple son moteur OptiX dès 2009 ; la société a également racheté Mental Ray en 2007, devenu depuis lors Iray, un moteur de rendu utilisé dans des applications professionnelles comme la conception par ordinateur (AutoCAD, CATIA, SolidWorks, etc.) ou l’animation (3D Studio Max, Cinema 4D, Maya, Houdini…).
Spécifiquement pour DirectX Raytracing, NVIDIA ne parle que de son implémentation RTX : une API spécifique sera disponible, mais RTX sera aussi utilisé derrière DirectX Raytracing. Élément intéressant : RTX fonctionnera particulièrement bien sur les GPU de génération Volta ou plus récente ; pour les joueurs, cela signifie uniquement la Titan V (ou les prochains GPU dont on attend l’annonce depuis longtemps). On peut s’attendre à ce que les nouveaux cœurs tensoriels soient mis à l’épreuve pour ce lancer de rayons.
Dernier détail : RTX sera disponible dès la prochaine version des pilotes NVIDIA, la 396. Elle arrivera début avril pour le grand public.
Et les jeux, donc ?
Plusieurs studios de développement de jeux étaient associés à l’annonce de DirectX Raytracing. Notamment, Unreal Engine intègre déjà cette technologie dans certaines versions de développement, tout comme Unity. Des développeurs comme Epic Games, DICE et Electronic Arts ont déjà annoncé qu’ils intégreront DirectX Raytracing dans leurs moteurs et leurs jeux. On pourrait déjà voir des effets utilisant ces nouvelles possibilités dans des jeux cette année.
En manque de détails techniques ?
Téléchargement : SDK DXR, PIX.
Sources et images : Futuremark Demonstrates Raytracing Demo with DirectX 12, Random Thoughts on Raytracing, AMD Announces Real-time Ray Tracing Support for ProRender and Radeon GPU Profiler 1.2, Expanding DirectX 12: Microsoft Announces DirectX Raytracing, Announcing Microsoft DirectX Raytracing!, NVIDIA Announces RTX Technology: Real Time Ray Tracing Acceleration for Volta GPUs and Later, Nvidia talks ray tracing and Volta hardware.