Q2VKPT, un jeu en lancer de rayons

Q2VKPT est l’un des pre­miers jeux jouables util­isant la tech­nolo­gie de Ray­trac­ing Temps-réel, c’est à dire en faisant du lancer de rayons et en sim­u­lant effi­cace­ment un éclairage entière­ment dynamique en temps réel, avec les mêmes tech­niques mod­ernes que celles util­isées dans l’industrie du ciné­ma (voir le guide pra­tique de Dis­ney sur le traçage des chemins).  Nous avions déjà abor­dé le sujet dans cet arti­cle et dans celui-ci. Enfin, les auteurs préfèrent par­ler de Path Trac­ing, ils s’en expliquent en fin d’article dans la FAQ. On sera moins rig­oriste ici. On va prob­a­ble­ment être amené à en par­lant sou­vent sur ce blog, car il s’agit d’une petite révo­lu­tion, pas tant sur le plan tech­nique, car nous maitrisons le lancer de rayons depuis des lus­tres, mais surtout parce que les cartes graphiques actuelles (le RTX d’Nvidia par exem­ple) com­men­cent à le per­me­t­tre. Q2VKPT, c’est pour Quake 2 Real­time Path Trac­ing au fait.… ben oui, c’est une adap­ta­tion du célèbre jeu  dévelop­pé par id Soft­ware et pub­lié par Activi­sion fin 1997… Il y a + de 20 ans quoi  ! 🙂

Alors que cer­tains jeux ont com­mencé à explor­er les amélio­ra­tions du ren­du des ombres et des réflex­ions, c’est à dire rem­plac­er une par­tie du pipeline par du lancer de ray­on, mais pas la total­ité, Q2VKPT est le pre­mier pro­jet à notre con­nais­sance à met­tre en œuvre une solu­tion pour toutes les lumières: lumière directe, dif­fuse et réfléchie.

Out­re l’utilisation du traçage de rayons util­isant l’accélération matérielle, Q2VKPT tire prin­ci­pale­ment son effi­cac­ité d’une tech­nique de fil­trage d’images qui per­met de suiv­re les mod­i­fi­ca­tions de l’éclairage de la scène pour réu­tilis­er autant d’informations que pos­si­ble à par­tir de cal­culs antérieurs.

Le pro­jet est pub­lié en open source sur GitHub, inté­grant un traceur de chemins Vulkan VKPT dans le client Q2PRO. Le pro­jet avait pour orig­ine le besoin d’un con­tenu de tests rapi­des pour la recherche en info­gra­phie et était motivé par les pre­miers résul­tats intri­g­ants d’un moteur de ren­du de traçage de chemin expéri­men­tal en 2016.

L’histoire

VKPT et Q2VKPT ont été créés par Christoph Schied comme pro­jet de “loisir” pour valid­er des résul­tats de recherche en info­gra­phie. Le pro­jet com­prend 12 000 lignes de code et rem­place com­plète­ment le code graphique d’origine de Quake II. Ini­tiale­ment, il a été pro­to­typé sous OpenGL avec des con­tri­bu­tions de Johannes Hani­ka (trac­er de rayons expéri­men­tal, Shaders, solu­tions GL / Vulkan), Addis Dit­te­brandt (hiérar­chie légère, visu­al­i­sa­tion de débo­gage), Tobias Zirr (Échan­til­lon­nage léger, super­vi­sion et insti­ga­tion de piratage, site Web, textes d’information) et Flo­ri­an Rei­bold (hiérar­chie ini­tiale légère). Une aide sup­plé­men­taire a été fournie par Stephan Bergmann, Emanuel Schrade, Alisa Jung et Christoph Peters.

Download

Détails techniques

Q2VKPT est implé­men­té dans l’API Vulkan pour pou­voir utilis­er les nou­velles fonc­tion­nal­ités de traçage de rayons à accéléra­tion matérielle. Cela per­met au jeu d’approcher 60 FPS (2560x1440, RTX2080Ti), tout en étant entière­ment ray­on­né et dynamique­ment ombré avec des mod­èles d’éclairage globaux réal­istes en temps réel. Utilis­er le traçage de tra­jec­toire pour un éclairage totale­ment dynamique per­met d’obtenir beau­coup plus de détails dans la mise en ombres des scènes de jeu, en pro­duisant naturelle­ment une inter­ac­tion com­plexe d’ombres som­bres et douces, d’apparences bril­lantes et des réflex­ions par­faites et sans fake ! (ou presque). De plus, la lumière peut cir­culer 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éri­sa­tion (c’est à dire conçu en tri­an­gles ou quads) ne peut prof­iter pleine­ment du lancer de ray­on. Par exem­ple, une sphère va être plus ou moins “ronde” et belle à l’affichage si vous utilisez un grand nom­bre de “faces”. Mais en Ray­trac­ing, vous n’avez besoin de con­naitre que le cen­tre et le ray­on de la sphère, et l’affichage sera par­fait ! Autre point impor­tant, il me sem­ble que les cartes RTX actuelles ne sup­por­t­ent qu’une par­tie de l’accélération du Ray­trac­ing, c’est à dire une seule par­tie du pipeline. Les prochaines cartes devraient ain­si réserv­er aus­si leur lot de sur­pris­es. Il fau­dra bien enten­du que les moteurs s’y met­tent égale­ment.

Q2VKPT utilise divers­es tech­niques pour adapter aux jeux des méth­odes de cal­cul coû­teuses qui n’étaient util­isées aupar­a­vant que  dans l’industrie du film. Au cen­tre, se trou­ve un fil­tre tem­porel adap­tatif qui réu­tilise les résul­tats des images précé­dentes (ancien pro­jet de recherche de Christoph). En plus de l’antialiasing tem­porel, ce fil­tre étend le suivi des mod­i­fi­ca­tions dans le temps, du sim­ple espace “image” au nou­v­el espace “lancer de rayons”. Le suivi de change­ment de chemin est néces­saire car le traçage de chemin est un algo­rithme aléa­toire: s’il peut gér­er de manière générique tous les types de trans­port de lumière, les résul­tats peu­vent néces­siter beau­coup de temps pour devenir fiables, trop longtemps pour un jeu en temps réel. Une sim­ple approche d’image-espace telle que l’anti-aliasing tem­porel ne peut pas traiter cette incer­ti­tude.

En plus du fil­trage tem­porel, plusieurs tech­niques pour trou­ver les lumières qui influ­en­cent chaque sur­face du jeu ont été explorées. Choisir la bonne lumière est cru­cial pour la qual­ité d’image, car une mau­vaise lumière pro­duit une sor­tie de traceur extrême­ment peu fiable, ce qui oblige ensuite le fil­tre tem­porel à sup­primer tous les beaux détails que nous voulions que le traceur pro­duise. Un pre­mier pro­to­type util­i­sait une hiérar­chie com­plète de la lumière comme dans la pro­duc­tion de films: en regroupant les lumières de manière hiérar­chique, per­me­t­tant d’estimer l’influence de nom­breuses lumières à la fois, exclu­ant rapi­de­ment les lumières loin­taines et faibles et les lumières dirigées dans le mau­vais sens.

Cepen­dant, ces esti­ma­tions s’avèrent dif­fi­ciles à avoir avec pré­ci­sion et le coût en ressources dif­fi­cile à maîtris­er. Étant don­né que Quake II était ini­tiale­ment livré avec un PVS (Poten­tion Vis­i­ble Set, tech­nique d’occlusion culling) pour élim­in­er les par­ties masquées de la scène, des listes de lumières poten­tielle­ment vis­i­bles ont été extraites à par­tir des ensem­bles pour chaque par­tie de la scène.

Dans la ver­sion actuelle, une esti­ma­tion semi-pré­cise de l’influence de chaque lumière de la liste est implé­men­tée en sélec­tion­nant au hasard un sous-ensem­ble représen­tatif de ces listes dans chaque trame. Ain­si, le moteur de ren­du atteint rapi­de­ment toutes les sources de lumière au fil du temps et il est pos­si­ble d’influer sur l’estimation dans un bud­get-temps con­trôlé et con­stant.

FAQ DES DEVELOPPEURS pour les Joueurs

Pourquoi le jeu plante-t-il chez moi?

Il s’agit d’un pro­jet “temps libre”, les tests d’assurance qual­ité com­plets n’ont pas été pos­si­bles. Vous pou­vez dépos­er un rap­port de bogue dans le suivi des prob­lèmes du référen­tiel 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 con­cerne les autres par­tic­ules, la déci­sion de lancer entière­ment le traçage dans tout le jeu rendait le ren­du des par­tic­ules un peu moins triv­ial. Si nous trou­vons le temps, nous pour­rions le répar­er à 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 capac­ités des graphismes tra­di­tion­nels basés sur la rastéri­sa­tion. Cepen­dant, ces pro­grès ont un prix: les moteurs de ren­du des jeux mod­ernes sont devenus des amas de tech­niques spé­ciales. L’éclairage, les ombres et les réflex­ions doivent être cal­culés à dif­férentes réso­lu­tions et échelles pour garan­tir une expéri­ence visuelle accept­able sans arte­fact. Le trac­er de tra­jec­toire et d’autres tech­niques de ren­du “Monte Car­lo” pour­raient per­me­t­tre de sor­tir de cette com­plex­ité sans cesse crois­sante. En fait, il a déjà atteint cet objec­tif pour l’industrie du film. Ce pro­to­type est un pre­mier pas vers la réponse à quelques-unes des ques­tions en sus­pens 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 algo­rithme élé­gant qui peut simuler de nom­breuses manières com­plex­es dont la lumière se déplace et se dif­fuse dans des scènes virtuelles. Sa sim­u­la­tion physique de la lumière per­met un ren­du très réal­iste. Le traçage de chemin utilise le Ray­trac­ing afin de déter­min­er la vis­i­bil­ité entre les événe­ments de dif­fu­sion. Cepen­dant, le Ray­trac­ing est une sim­ple opéra­tion  qui peut être util­isée pour beau­coup de choses. Par con­séquent, le lancer de rayons ne pro­duit pas automa­tique­ment des images réal­istes. Des algo­rithmes de trans­port de lumière tels que le traçage de chemin peu­vent être util­isés pour cela. Cepen­dant, bien que élé­gant et très puis­sant, le traçage de chemin naïf est très coû­teux et prend beau­coup de temps pour pro­duire des images sta­bles. Ce pro­jet utilise un fil­tre adap­tatif intel­li­gent qui réu­tilise autant d’informations que pos­si­ble sur de nom­breux cadres et pix­els afin de pro­duire des images robustes et sta­bles.

Conclusion

La tech­no de Ray­trac­ing Temps-réel (on engloble le path trac­ing au pas­sage) nous promet des envi­ron­nements encore plus réal­istes, et de pou­voir tra­vailler à terme directe­ment avec des Vox­els… ce qui sera vrai­ment cool.

La ver­sions 4.22 d’Unreal Engine et qui pro­pose le sup­port DXR (Microsoft) et Prob­a­ble­ment aus­si son pen­dant RT pour Vulkan… vient de paraitre en bêta. Cela peut être testé sur une carte non RTX il sem­blerait (grâce à l’émulation des fonc­tions DXR de direct X12 par exem­ple). Mais ce sera bien plus lent sur les matériels non adap­tés. Mais ça peut don­ner une idée ! 😉

Sources:

Laisser un commentaire

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.