Q2VKPT, un jeu en lancer de rayons

par | 14 Fév 2019

Q2VKPT est l’un des premiers jeux jouables utilisant la technologie de Raytracing Temps-réel, c’est à dire en faisant du lancer de rayons et en simulant efficacement un éclairage entièrement dynamique en temps réel, avec les mêmes techniques modernes que celles utilisées dans l’industrie du cinéma (voir le guide pratique de Disney sur le traçage des chemins).  Nous avions déjà abordé le sujet dans cet article et dans celui-ci. Enfin, les auteurs préfèrent parler de Path Tracing, ils s’en expliquent en fin d’article dans la FAQ. On sera moins rigoriste ici. On va probablement être amené à en parlant souvent sur ce blog, car il s’agit d’une petite révolution, pas tant sur le plan technique, car nous maitrisons le lancer de rayons depuis des lustres, mais surtout parce que les cartes graphiques actuelles (le RTX d’Nvidia par exemple) commencent à le permettre. Q2VKPT, c’est pour Quake 2 Realtime Path Tracing au fait…. ben oui, c’est une adaptation du célèbre jeu  développé par id Software et publié par Activision fin 1997… Il y a + de 20 ans quoi  ! 🙂

Alors que certains jeux ont commencé à explorer les améliorations du rendu des ombres et des réflexions, c’est à dire remplacer une partie du pipeline par du lancer de rayon, mais pas la totalité, Q2VKPT est le premier projet à notre connaissance à mettre en œuvre une solution pour toutes les lumières: lumière directe, diffuse et réfléchie.

Outre l’utilisation du traçage de rayons utilisant l’accélération matérielle, Q2VKPT tire principalement son efficacité d’une technique de filtrage d’images qui permet de suivre les modifications de l’éclairage de la scène pour réutiliser autant d’informations que possible à partir de calculs antérieurs.

Le projet est publié en open source sur GitHub, intégrant un traceur de chemins Vulkan VKPT dans le client Q2PRO. Le projet avait pour origine le besoin d’un contenu de tests rapides pour la recherche en infographie et était motivé par les premiers résultats intrigants d’un moteur de rendu de traçage de chemin expérimental en 2016.

L’histoire

VKPT et Q2VKPT ont été créés par Christoph Schied comme projet de « loisir » pour valider des résultats de recherche en infographie. Le projet comprend 12 000 lignes de code et remplace complètement le code graphique d’origine de Quake II. Initialement, il a été prototypé sous OpenGL avec des contributions de Johannes Hanika (tracer de rayons expérimental, Shaders, solutions GL / Vulkan), Addis Dittebrandt (hiérarchie légère, visualisation de débogage), Tobias Zirr (Échantillonnage léger, supervision et instigation de piratage, site Web, textes d’information) et Florian Reibold (hiérarchie initiale légère). Une aide supplémentaire a été fournie par Stephan Bergmann, Emanuel Schrade, Alisa Jung et Christoph Peters.

Download

Détails techniques

Q2VKPT est implémenté dans l’API Vulkan pour pouvoir utiliser les nouvelles fonctionnalités de traçage de rayons à accélération matérielle. Cela permet au jeu d’approcher 60 FPS (2560×1440, RTX2080Ti), tout en étant entièrement rayonné et dynamiquement ombré avec des modèles d’éclairage globaux réalistes en temps réel. Utiliser le traçage de trajectoire pour un éclairage totalement dynamique permet d’obtenir beaucoup plus de détails dans la mise en ombres des scènes de jeu, en produisant naturellement une interaction complexe d’ombres sombres et douces, d’apparences brillantes et des réflexions parfaites et sans fake ! (ou presque). De plus, la lumière peut circuler partout comme dans le monde réel.

Je fais un petit aparté pour dire qu’un jeu qui a été conçu avec des modèles prévus pour la rastérisation (c’est à dire conçu en triangles ou quads) ne peut profiter pleinement du lancer de rayon. Par exemple, une sphère va être plus ou moins « ronde » et belle à l’affichage si vous utilisez un grand nombre de « faces ». Mais en Raytracing, vous n’avez besoin de connaitre que le centre et le rayon de la sphère, et l’affichage sera parfait ! Autre point important, il me semble que les cartes RTX actuelles ne supportent qu’une partie de l’accélération du Raytracing, c’est à dire une seule partie du pipeline. Les prochaines cartes devraient ainsi réserver aussi leur lot de surprises. Il faudra bien entendu que les moteurs s’y mettent également.

Q2VKPT utilise diverses techniques pour adapter aux jeux des méthodes de calcul coûteuses qui n’étaient utilisées auparavant que  dans l’industrie du film. Au centre, se trouve un filtre temporel adaptatif qui réutilise les résultats des images précédentes (ancien projet de recherche de Christoph). En plus de l’antialiasing temporel, ce filtre étend le suivi des modifications dans le temps, du simple espace « image » au nouvel espace « lancer de rayons ». Le suivi de changement de chemin est nécessaire car le traçage de chemin est un algorithme aléatoire: s’il peut gérer de manière générique tous les types de transport de lumière, les résultats peuvent nécessiter beaucoup de temps pour devenir fiables, trop longtemps pour un jeu en temps réel. Une simple approche d’image-espace telle que l’anti-aliasing temporel ne peut pas traiter cette incertitude.

En plus du filtrage temporel, plusieurs techniques pour trouver les lumières qui influencent chaque surface du jeu ont été explorées. Choisir la bonne lumière est crucial pour la qualité d’image, car une mauvaise lumière produit une sortie de traceur extrêmement peu fiable, ce qui oblige ensuite le filtre temporel à supprimer tous les beaux détails que nous voulions que le traceur produise. Un premier prototype utilisait une hiérarchie complète de la lumière comme dans la production de films: en regroupant les lumières de manière hiérarchique, permettant d’estimer l’influence de nombreuses lumières à la fois, excluant rapidement les lumières lointaines et faibles et les lumières dirigées dans le mauvais sens.

Cependant, ces estimations s’avèrent difficiles à avoir avec précision et le coût en ressources difficile à maîtriser. Étant donné que Quake II était initialement livré avec un PVS (Potention Visible Set, technique d’occlusion culling) pour éliminer les parties masquées de la scène, des listes de lumières potentiellement visibles ont été extraites à partir des ensembles pour chaque partie de la scène.

Dans la version actuelle, une estimation semi-précise de l’influence de chaque lumière de la liste est implémentée en sélectionnant au hasard un sous-ensemble représentatif de ces listes dans chaque trame. Ainsi, le moteur de rendu atteint rapidement toutes les sources de lumière au fil du temps et il est possible d’influer sur l’estimation dans un budget-temps contrôlé et constant.

FAQ DES DEVELOPPEURS pour les Joueurs

Pourquoi le jeu plante-t-il chez moi?

Il s’agit d’un projet « temps libre », les tests d’assurance qualité complets n’ont pas été possibles. Vous pouvez déposer un rapport de bogue dans le suivi des problèmes du référentiel GitHub.

Pourquoi n’y a-t-il pas de particules « mouches » et « étincelles »?

Il n’y a pas eu assez de temps pour ajouter des lumières au canon. En ce qui concerne les autres particules, la décision de lancer entièrement le traçage dans tout le jeu rendait le rendu des particules un peu moins trivial. Si nous trouvons le temps, nous pourrions le réparer à l’avenir!

Les jeux ont déjà l’air très réalistes! Pourquoi le traçage de chemin?

Les jeux actuels ont poussé très loin les capacités des graphismes traditionnels basés sur la rastérisation. Cependant, ces progrès ont un prix: les moteurs de rendu des jeux modernes sont devenus des amas de techniques spéciales. L’éclairage, les ombres et les réflexions doivent être calculés à différentes résolutions et échelles pour garantir une expérience visuelle acceptable sans artefact. Le tracer de trajectoire et d’autres techniques de rendu « Monte Carlo » pourraient permettre de sortir de cette complexité sans cesse croissante. En fait, il a déjà atteint cet objectif pour l’industrie du film. Ce prototype est un premier pas vers la réponse à quelques-unes des questions en suspens sur la manière d’obtenir la même chose dans l’industrie du jeu vidéo.

En quoi le traçage de chemin est-il différent du traçage de rayon?

Le traçage de chemin est un algorithme élégant qui peut simuler de nombreuses manières complexes dont la lumière se déplace et se diffuse dans des scènes virtuelles. Sa simulation physique de la lumière permet un rendu très réaliste. Le traçage de chemin utilise le Raytracing afin de déterminer la visibilité entre les événements de diffusion. Cependant, le Raytracing est une simple opération  qui peut être utilisée pour beaucoup de choses. Par conséquent, le lancer de rayons ne produit pas automatiquement des images réalistes. Des algorithmes de transport de lumière tels que le traçage de chemin peuvent être utilisés pour cela. Cependant, bien que élégant et très puissant, le traçage de chemin naïf est très coûteux et prend beaucoup de temps pour produire des images stables. Ce projet utilise un filtre adaptatif intelligent qui réutilise autant d’informations que possible sur de nombreux cadres et pixels afin de produire des images robustes et stables.

Conclusion

La techno de Raytracing Temps-réel (on engloble le path tracing au passage) nous promet des environnements encore plus réalistes, et de pouvoir travailler à terme directement avec des Voxels… ce qui sera vraiment cool.

La versions 4.22 d’Unreal Engine et qui propose le support DXR (Microsoft) et Probablement aussi son pendant RT pour Vulkan… vient de paraitre en bêta. Cela peut être testé sur une carte non RTX il semblerait (grâce à l’émulation des fonctions DXR de direct X12 par exemple). Mais ce sera bien plus lent sur les matériels non adaptés. Mais ça peut donner une idée ! 😉

Sources:

Découvrez nos derniers numéros !

0 commentaires

Laisser un commentaire

Ces articles pourraient aussi vous intéresser …