DirectX passe à l'ère du lancer de rayons
Et offre une boîte à outils pour améliorer le rendu des jeux

Le , par dourouc05, Responsable Qt & Livres
Presque tous les jeux sous Windows utilisent DirectX pour leur rendu. Cette technologie de Microsoft fournit une certaine couche d’abstraction des cartes graphiques et facilite l’utilisation de leurs fonctionnalités avancées. Après la version 11, sortie en 2009 avec Windows Vista, DirectX semblait quelque peu stagner : peu d’évolutions, alors que les cartes graphiques ont continué à se perfectionner. Six ans plus tard, avec Windows 10, Microsoft a annoncé DirectX 12, une toute nouvelle génération : l’API cherche plus à exposer directement le matériel qu’à fournir une couche d’abstraction (la différence entre ces deux versions est très similaire à celle entre OpenGL et Vulkan).

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.


Vous avez aimé cette actualité ? Alors partagez-la avec vos amis en cliquant sur les boutons ci-dessous :


 Poster une réponse Signaler un problème

Avatar de RyzenOC RyzenOC - Inactif https://www.developpez.com
le 22/03/2018 à 16:23
je trouve dommage depuis ces 10 dernière années de s’intéresser surtout aux graphismes mais au reste...

Dans les années 2008 on avait eu des moteurs physiques vraiement géniaux ou toute la map était 100% destructible dans red Faction
Ou alors des IA assez bluffante dans FEAR de 2005

En 2018 c'est juste des jeux multi avec des beau graphismes à gogo mais avec des IA nuls et une physique pire que les jeux de l'an 2000.
Le pire c'est que les jeux multi sont tellement mal fait que tu est plus avantagé en jouant en low qu'en ultra, car moins de feuillage...etc.

Pourtant des puces dédié à l'ia dans les gpu se serait possible, optimisé pour y faire tourner des réseaux de neurones par exemple bien plus intéressant que les IA classique basé sur les arbres de décisions.

et sinon concernant le ray tracing j'utilise une technique de "environment mapping" qui offre un rendu assez similaire mais qui est beaucoup moins gourmand.
je sais pas si on verra réellement une différence dans les jeux.
Avatar de onilink_ onilink_ - Membre éprouvé https://www.developpez.com
le 22/03/2018 à 16:47
Comme tu peux le voir dans les captures c'est vraiment "blingbling", totalement facultatif a mon sens, enfin dans ces exemples la en tout cas.
On a poussé la rasterisation assez loin pour reproduire de manière assez fidèle pas mal d'effets, sans que l'humain n'y voit une nette différence (quand bien appliqué).

Mais au delà de ces bêtes effets visuels j'imagine que le raytracing pourra être utilisé pour d'autres choses plus intéressantes. Donc bon pourquoi pas, ça mange pas de pain.

Pour les réseaux de neurones aucun intérêt d'utiliser des puces externes pour tout ce qui touche au jeu vidéo. On est très loin des réseaux de neurones profonds utilisé en reconnaissance d'image qui demandent de gros calculs pour l'apprentissage.
D'autant que la on parle pas de la phase d'apprentissage, mais d'utiliser un réseau pré-entraîné. Ce qui est déjà très rapide et actuellement utilisable sans problèmes (même sur des PC avec des performances pas forcement folles).
C'est utilisé dans certains domaines comme l'animation procédurale, y a pas mal dé démo plutôt classes.

De toute façon il faut pas se leurrer, même quand on aura des technologies assez folles (ce qui est déjà plus ou moins le cas en fait), dès qu'il faudra apporter un tant soit peu de boulot par dessus on restera toujours au même niveau, c-a-d des jeux relativement génériques, pour en produire plus et gagner plus d'argent. Donc ça changera pas grand chose, malheureusement.

Mais il y aura toujours quelques perles pour exploiter les dernières technologies et nous époustoufler (je pense a INSIDE par exemple, le système d'animation procédural a la fin est assez fou )
Avatar de Theta Theta - Membre éclairé https://www.developpez.com
le 22/03/2018 à 17:15
Si l'IA est débile dans les jeu, je ne pense pas que ce soit un problème technologique.

Je me souviens d'une conférence (ou article je ne sais plus) où Sid Meier parlait de l'IA dans Civilisation. En gros il avait essayé une IA assez complexe mais lors des tests il s'était rendu compte que les joueurs ne l'aimait pas du tout car il la trouvait trop imprévisible (genre quand elle déclarait la guerre). Du coup il a du revenir à une IA bébète.

Et je pense que ce genre de réflexion est généralisable à beaucoup de jeux. Par ex dans WoW les monstres ont une "IA" ridiculement basique, mais qui est à la base de tout le gameplay PvE (roles tank/healer/dps, placement, stratégies pour engager le combat, stratégie contre chaque boss etc.). Je ne dis pas qu'une IA plus poussée ne serait pas intéressante (au contraire), mais du coup ça ne serrait plus du tout le même jeu.

Enfin bref tout ça pour dire qu'une IA débile peut tout à fait être justifiée du point de vue gamedesign et que ça doit expliquer les IA de pas mal de jeux.
Avatar de onilink_ onilink_ - Membre éprouvé https://www.developpez.com
le 22/03/2018 à 17:30
Oui, j'imagine qu'il parlait plus des FPS par exemple, c'est toujours mieux d'avoir des ennemis plus "humains".
Mais a ce niveau y a pas mal de jeux qui poussent pas mal les choses, je me souviens par exemple que Left 4 Dead 2 avait été très bien critiqué au niveau des IA.

En tout cas, bossant dans le domaine, j'ai remarqué que beaucoup de jeux même 2d ne se prennent vraiment pas la tête a ce niveau.
Je dev un sandbox et je suis en ce moment même a galérer a intégrer un "bête" pathfinding (bon en fait avec la gravité c'est vite casse tête) + quelques systèmes de réactions des monstres, ben cette chose que l'on pourrait voir comme ultra "basique" (en terme de design tout du moins) n'est présente que sur très peu de jeux du genre.
Par exemple Terraria ou encore Starbound qui sont des sandbox qui ont fait des millions de ventes n'intègrent même pas cela... et la on ne peut pas dire que ce n'est pas utile au gameplay.

J'ai l'impression qu'on est vraiment dans un mode de production ou on accoutume les joueurs au strict minimum, car de toute façon les gens sont habitués et ça fait faire de grosses économies (niveau temps de dev et donc argent).
Et au final dans les jeux 3d on essaye souvent de se démarquer beaucoup plus sur les graphismes que sur le reste. Et c'est dommage.
Avatar de RyzenOC RyzenOC - Inactif https://www.developpez.com
le 22/03/2018 à 19:41
avec le environment mapping voila ce que j'ai en temps réel chez moi :




donc je pose la question en toute légitimité, verra ton réellement des changements dans le jeu ?
d’ailleurs l'exemple avec le miroir est complètement faux, cela fait au moins 20ans que l'on sait faire des miroir réaliste dans les jeux vidéos.
Avatar de Kannagi Kannagi - Expert éminent https://www.developpez.com
le 22/03/2018 à 20:48
@RyzenOC ton rendu est très basique , limite j'ai l'impression qu'il y a juste un effet de bloom sur ton rendu ^^'

Sinon pour moi c'est un truc assez mercantile la CG fait entre 13-14k euros !
Ils ont augmenté la puissance du GPU et puis ils ont dit "voila ce qu'on peut faire maintenant" , avec des techniques connu depuis belle lurette !
Pour info les AMD Vega sont assez proche niveau puissance entre 10-13 TFLOPS pour 800-2000 Euros
Je note que les Vega peuvent faire des calcul de float 16bits donc ont une puissance en Half-precision floating-point de 20 TFLOPS ^^

Quoi qui parle d'attrape-couillon ici ?
Avatar de dragonjoker59 dragonjoker59 - Expert éminent https://www.developpez.com
le 22/03/2018 à 21:01
Mouais... L'environment mapping, c'est mignon, mais ça veut dire que tu rends tes objets autant de fois qu'il y a de faces dans le cube qui contient ton env map.
Alors, tu me diras, tu peux utiliser le frustum culling, pour diminuer ce nombre, mais ça veut tout de même dire que tu dois rendre les objets non visibles par la caméra principale, pour le dessin de ton env map.
Si en plus de ça tu gères les objets dynamiques, tu as le choix : soit tu génères une env map par objet recevant des réflexions (yeehaa...) soit tu places dans ta scène des noeuds qui vont recevoir une env map, et tu mets en place des algos d'interpolation pour calculer la réflexion que tes objets reçoivent. Ce qui implique de multiples rendus de toute ta scène pour ces noeuds (yeehaa...).
Et une fois que tu as ça, ben c'est quand même dégueulasse avec les effets de parallaxe que tu vas avoir parce qu'il n'y a pas d'algo d'interpolation infaillible, pour les passages d'une env map à l'autre.
Sans compter que si tu veux vraiment faire ça bien, il te faut encore, sur le même objet faire les interpolations pour que les réflections soient "correctes".

Là, avec le ray casting, tu ne dessines pas toute ta scène pour chaque env map.
Tu dessines ta scène normalement avec ton frustum/occlusion culling pour la caméra principale, puis tu ne calcules les réflexions que pour les objets en ayant besoin, et là encore, pas en redessinant toute ta scène, mais en fournissant que les informations nécessaires au rebond de ton rayon.
Et tu te retrouves avec des réflexions vraiment correctes cette fois.

Au final, ça t'apporte une économie dramatique au niveau des ressources, des réflexions plus correctes et donc beaucoup plus jolies et probablement une économie de temps de rendu, pour peu que tu ne fasses pas trop de rebonds avec tes rayons, si tu as de nombreux objets recevant des réflexions.
Cependant ce n'est possible en temps réel qu'avec nos gros GPU actuels parce que ce sont des calculs lourds,

Au passage, tes captures ne font absolument pas honneur à l'env mapping.
Voilà ce que moi j'obtiens :



Et encore, sur cette capture on ne voit pas les réflexions/réfractions entre les objets.
Et ça tourne à la vitesse faramineuse de ... 60 FPS... (ben oui, 3 envmaps)
Avatar de RyzenOC RyzenOC - Inactif https://www.developpez.com
le 22/03/2018 à 22:20
mon but n'était pas d'en mettre plein la vue juste pour faire une démo.
Mais je peut avoir mieux, suffit de demander et moi sa tourne à 193.3fps et meme si cela n'a aucun rapport, mon code est parfaitement multithreadé sur 16coeurs na (je génère un terrain de manière procédurale avec le bruit de Perlin)
je ne dévoilerais pas le nom de mon gpu parce que c'est indécent mais je peut vous dire que mon code tourne que sur 1 seul GPU, j'ai pas besoin de 3GPU à 3000$ comme sur les démo de la news.



j'en profite pour faire un peu de pub pour un CPU à la puissance inégalable, parce que je le vaux bien, un bon jeu commence par un bon CPU
edit : 193fps en fenêtré, en plein écran sa redescend à 95fps... mais en plein écran je pourrais montrer mon cpu
Avatar de dragonjoker59 dragonjoker59 - Expert éminent https://www.developpez.com
le 22/03/2018 à 22:34
Ah ben voilà! Tu aurais montré ça dès le début...
Avatar de RyzenOC RyzenOC - Inactif https://www.developpez.com
le 22/03/2018 à 22:56
Citation Envoyé par dragonjoker59 Voir le message
Ah ben voilà! Tu aurais montré ça dès le début...
le probleme c'est que c'est pas réaliste
Les reflets dans les murs et dans les sols, les carrosseries luisantes sur astiqué c'est jolie à l’œil mais c'est pas réaliste.
Responsable bénévole de la rubrique 2D - 3D - Jeux : LittleWhite -