Q2VKPT: Quake II entièrement réécrit avec un éclairage réaliste


Q2VKPT est le premier jeu jouable avec un traçage de rayons complet, simulant efficacement un éclairage entièrement dynamique en temps réel en utilisant les mêmes technologies modernes utilisées dans l'industrie cinématographique (voir le guide pratique de Disney pour le traçage de chemin ).

La récente publication de modèles GPU avec des fonctionnalités de raytracing a ouvert de nouvelles possibilités pour l'avenir des graphismes de jeu, cependant, la bonne utilisation du raytracing n'est pas une tâche triviale. Alors que certains développeurs de jeux ont commencé à explorer les possibilités de rendu des ombres et des réflexions, Q2VKPT a été le premier projet à implémenter une solution générale efficace pour tous les types de transfert de lumière: éclairage direct, diffus et réfléchi (voir la section "Médias"). Dans l'industrie cinématographique, une telle unification a conduit à une amélioration significative de la flexibilité et de la productivité . Il est possible qu'un tel développement de la technologie dans les jeux promette une amélioration similaire de la précision visuelle et du réalisme graphique au cours des prochaines années. Ce projet devrait servir de confirmation du concept pour le domaine de la recherche en infographie et l'industrie du jeu; en outre, il permet aux fans de jeux de jeter un œil à l'avenir potentiel des graphismes de jeux. En plus d'utiliser le lancer de rayons accéléré par matériel, Q2VKPT offre principalement son efficacité grâce à la technique de filtrage adaptatif des images , qui suit intelligemment les changements dans l'éclairage de la scène afin de réutiliser autant d'informations que possible des calculs précédents.

À propos du projet


Le projet a été publié en open source sur GitHub . Il intègre notre traceur de rayons Vulkan dans le client Q2PRO . Le projet est né de la nécessité d'une recherche en infographie sur le contenu des tests à exécution rapide. Il est motivé par les premiers résultats intrigants d'un rendu de trace de chemin écrit en 2016 .

L'histoire


VKPT et Q2VKPT ont été créés comme un projet de passe-temps par Christoph Schied pour tester les résultats de la recherche en infographie dans ce jeu. À l'heure actuelle, le projet comprend 12 000 lignes de code et remplace complètement le code graphique original de Quake II. Initialement, son prototype a été écrit en OpenGL avec la participation de Johannes Hanika ( ray tracing expérimental, shaders, corrections GL / Vulkan), Addis Diettebrand (hiérarchie d'éclairage, visualisation de débogage), Tobias Zirr (échantillonnage d'éclairage, site Internet, textes informatifs) et Florian Rybold (hiérarchie initiale de couverture). Une assistance supplémentaire a été fournie par Stefan Bergmann, Emanuel Schrade, Alice Jung et Christoph Peters (un peu de bruit ).

Documents téléchargeables



Vidéo




Photos infructueuses en cours de développement: vidéo avec pépins 1 , vidéo avec pépins 2 .

Captures d'écran


Nous vous conseillons de regarder la vidéo ou de jouer au jeu vous-même, car un éclairage entièrement dynamique est beaucoup mieux ressenti en mouvement.

Éclairage global entièrement dynamique créé à l'aide du lancer de rayons. Ombres créées par le lancer de rayons, des réflexions brillantes et une étape de réflexion d'éclairage indirect ajoutée










La sortie du traceur de trajectoire (à gauche) et le filtre de réduction du bruit appliqué (à droite)

Comparaison de captures d'écran


La technologie


Q2VKPT est implémenté sur l'API Vulkan pour pouvoir utiliser les nouvelles fonctionnalités matérielles de lancer de rayons qui sont apparues l'année dernière. Grâce à eux, le jeu peut s'approcher de 60 FPS (2560x1440, RTX2080Ti) avec un traçage complet des rayons et un ombrage dynamique avec des modèles réalistes d'éclairage global calculés en temps réel. L'utilisation du tracé de chemin pour un éclairage entièrement dynamique vous permet d'augmenter considérablement le détail de l'ombrage des scènes de jeu, créant naturellement une interaction complexe d'ombres nettes et lisses, de matériaux brillants et de réflexions prospectivement correctes. De plus, la lumière peut naturellement se propager partout, reliant des scènes comme elles le font dans le monde réel. Les solutions traditionnelles avec un éclairage pré-calculé ou des approximations de trames grossières en temps réel ne pourront jamais obtenir de tels détails avec une résolution comparable, car la quantité totale d'informations sur l'éclairage dépassera les limites de la mémoire.

Détails techniques


Q2VKPT utilise de nombreuses techniques pour adapter des méthodes coûteuses en calcul à des jeux qui n'étaient auparavant utilisés que dans l'industrie cinématographique. Leur noyau est un filtre temporel adaptatif, qui réutilise intelligemment les résultats des calculs des trames précédentes (c'est le précédent projet de recherche de Christoph ). Ce filtre est utilisé en plus de l'anti-crénelage temporel déjà répandu et étend le processus de suivi des changements temporaires d'un simple espace d'image à un espace de grande dimension de chemins de propagation de la lumière. Le suivi des modifications des trajets est nécessaire car le traçage des trajets est un algorithme aléatoire, qui est à la fois ses forces et ses faiblesses: il peut gérer toutes les formes de propagation de la lumière de manière généralisée, mais il peut prendre un certain temps pour que les résultats deviennent fiables, trop longs pour un seul. cadre dans le jeu en temps réel. Une solution simple dans l'espace image (par exemple, l'anticrénelage temporel) ne peut pas gérer ce niveau d'incertitude.

Au fil du temps, nous avons exploré plusieurs techniques pour trouver des sources de lumière qui affectent toutes les surfaces du jeu. Le choix des bonnes sources de lumière est crucial pour la qualité d'image, car si vous faites le mauvais choix, nous obtiendrons une sortie très peu fiable du traceur de chemin, ce qui fera que le filtre temporel supprimera tous les beaux détails que le traceur de chemin aurait dû créer. Dans le prototype original, la hiérarchie complète des sources lumineuses utilisées dans l'industrie cinématographique a été utilisée: en divisant les sources lumineuses selon la hiérarchie, nous pouvons calculer simultanément l'influence de plusieurs sources, ce qui nous permet d'exclure rapidement les sources distantes et faibles du calcul, ainsi que les sources qui sont dans la mauvaise direction. Cependant, il s'est avéré que de tels calculs sont difficiles à rendre précis, et le coût de calcul de la traversée de la hiérarchie est difficile à contrôler. Étant donné que le Quake II original utilisait beaucoup d'espaces potentiellement visibles (ensemble potentiellement visible) pour couper les parties invisibles de la scène, nous avons décidé de l'obtenir en extrayant de ces ensembles de listes de sources potentiellement visibles pour chaque partie de la scène. Dans la version actuelle, nous avons implémenté un calcul partiellement précis de l'influence de chaque source dans la liste, en choisissant aléatoirement le sous-ensemble approprié de ces listes dans chaque trame. Par conséquent, le moteur de rendu trouve rapidement toutes les sources de lumière et nous pouvons effectuer tous les calculs de l'effet de l'éclairage pendant des périodes de temps contrôlées et constantes.

Q & A


Pourquoi mon jeu «plante»?


Nous faisons ce projet pendant notre temps libre, nous n'avons donc pas assez de force pour un contrôle de qualité minutieux. Veuillez envoyer un rapport de bogue au traqueur de problèmes de notre référentiel GitHub!

Pourquoi n'y a-t-il pas de particules? J'ai besoin de mouches et d'étincelles de railgun!


Malheureusement, nous n'avons pas eu assez de temps pour ajouter des sources d'éclairage au railgun. Quant aux autres particules, la décision que nous avons prise d'effectuer le lancer de rayons n'a que légèrement compliqué le processus de rendu des particules. Si nous trouvons le temps, nous le fixerons à l'avenir!

De nos jours, les jeux semblent si réalistes! Pourquoi utiliser le traçage de chemin?


Les jeux modernes ont considérablement élargi les capacités des jeux traditionnels, basés sur des graphiques tramés. Cependant, ces améliorations ont un prix: les moteurs de rendu des jeux modernes sont devenus des ensembles extrêmement complexes de techniques hautement ciblées. Pour obtenir une image acceptable sans artefacts, l'éclairage, les ombres et les reflets doivent être calculés individuellement dans de nombreuses résolutions et échelles. Les tracés et autres techniques de rendu Monte Carlo vous permettent de trouver un moyen de sortir de ce système toujours plus compliqué. En fait, ils ont déjà résolu ce problème dans l'industrie cinématographique . Notre prototype est la première réponse à la question de savoir comment y parvenir dans l'industrie du jeu vidéo.

Quake II est un jeu ancien! Si ces technologies avaient un avenir, elles fonctionneraient aujourd'hui avec une fréquence de 6000 FPS!


Oui, Quake II est un jeu assez ancien avec une complexité géométrique plutôt faible, mais le principal facteur limitant pour le traçage de chemin n'est pas le lancer de rayons ou la complexité géométrique. En fait, le prototype actuel peut tracer beaucoup plus de rayons sans une réduction notable de la fréquence d'images. Le coût de calcul des techniques utilisées dans le prototype Q2VKPT dépend principalement de la quantité de calcul de la diffusion (indirecte) de la lumière et du nombre de sources lumineuses. Quake II avait initialement beaucoup de sources lumineuses, et à cet égard, c'est toujours un jeu assez moderne. De plus, le nombre d'événements de diffusion de la lumière ne dépend pas de la complexité de la scène. Par conséquent, nous pouvons supposer que les techniques que nous utilisons sont bien adaptées aux jeux plus modernes.

Pourquoi Quake II?


Parce que les sources de Quake II sont publiées dans le domaine public, et le jeu lui-même a une longue histoire de modding. Il s'agit d'un excellent bac à sable pour tester la recherche scientifique dans le monde réel. En particulier, le jeu a un gameplay actif et compétitif, qui impose des exigences élevées sur les performances et la fiabilité des techniques rendues. Et enfin, Quake II dans un sens reste un jeu assez moderne, car il a été initialement publié avec un design d'éclairage complexe et artistique.

Comment puis-je utiliser Q2VKPT comme référence?


Ouvrez la console en appuyant sur la touche "~". Dans la version de démonstration de Quake 2, vous pouvez utiliser la commande «timedemo 1; demo q2demo1 ", dans la version complète - la commande" timedemo 1; demo demo1 ". Le profileur intégré est lancé avec la commande vkpt_profiler 1. Il fournit des détails sur les temporisations GPU pour les étapes de rendu individuelles.

En quoi le tracé de tracé est-il différent du tracé de rayons?


Le traçage de chemin est un algorithme élégant qui peut simuler les nombreuses façons complexes dont la lumière se propage et se disperse dans les scènes virtuelles. Sa simulation d'éclairage basée sur la physique offre un rendu de haute qualité. Le traçage de chemin utilise le ray tracing pour déterminer la visibilité entre les événements de diffusion. Cependant, le lancer de rayons n'est qu'une opération primitive qui peut être utilisée à de nombreuses fins. Par conséquent, le lancer de rayons seul n'est pas capable de créer des images réalistes. Pour ce faire, vous pouvez utiliser des algorithmes de propagation de la lumière tels que le traçage de chemin. Cependant, malgré le fait qu'il soit élégant et très puissant, le traçage de chemin naïf est très coûteux et prend du temps pour créer des images stables. Notre projet utilise un filtre adaptatif intelligent qui réutilise le maximum d'informations possible en quelques images et pixels pour créer des images fiables et stables.

Traçage de trajectoire et lancer de rayons - l'avenir des graphiques de jeu?


La récente introduction du GPU avec des fonctionnalités de lancer de rayons a ouvert des possibilités complètement nouvelles pour l'avenir des graphismes de jeu, mais une approche non triviale est nécessaire pour utiliser correctement le lancer de rayons. Le but de notre projet est de découvrir ce qui manque pour créer un chemin direct vers le futur des graphes ray-tracing. Bien que certains problèmes aient déjà été résolus dans la recherche scientifique, de nombreux problèmes réels restent invisibles jusqu'à ce que vous commenciez à implémenter le rendu complet du jeu. À l'avenir, nous prévoyons d'étudier certains de ces problèmes, par exemple, un meilleur échantillonnage de l'éclairage, un filtrage amélioré et une structure de rendu logiciel plus cohérente. Pour que ces changements se généralisent, de bonnes solutions sont nécessaires pour de nouvelles tâches de rendu inhabituelles basées sur le tracé de rayons et les chemins.

Le traçage du chemin résoudra-t-il enfin tous les problèmes graphiques?


Le traçage de chemin et des méthodes similaires résolvent avec élégance de nombreuses tâches complexes de graphisme de jeu. Cependant, leur nature probabiliste ajoute une multitude de nouvelles tâches, dont la solution est nécessaire pour créer des images claires (sans bruit) de haute qualité. La méthode de filtrage dans le prototype Q2VKPT est la première étape vers des méthodes unifiées fiables qui vous permettent d'implémenter une approche de recherche approximative entièrement unifiée dans le rendu à l'aide du suivi de chemin. Dans les mois et les années à venir, nous attendons et espérons voir d'autres études dans ce sens!

Q2VKPT utilise-t-il des cartes d'éclairage du jeu original?


Le moteur Quake 2 d'origine utilise des cartes lumineuses précalculées contenant des ombres douces et un éclairage indirect diffus. Q2VKPT remplace complètement l'éclairage statique par une simulation entièrement dynamique qui unifie les sources d'éclairage statiques et dynamiques.

Combien de rayons Q2VKPT émet-il par pixel?


Le nombre de rayons émis dépend de la première surface visible. Sur les surfaces opaques, Q2VKPT utilise un faisceau pour chaque pixel pour trouver une surface visible directe et indirecte. De plus, pour les deux surfaces, Q2VKPT émet un faisceau vers des sources lumineuses sélectionnées au hasard. Par conséquent, Q2VKPT émet au moins 4 rayons pour chaque pixel.

Q2VKPT utilise-t-il la rastérisation?


Traditionnellement, un rasterizer est utilisé pour trouver des surfaces visibles depuis la caméra dans les jeux. Dans Q2VKPT, le rendu est entièrement effectué par lancer de rayons, de sorte que le rasterizer n'est pas utilisé (à l'exception des éléments d'interface utilisateur bidimensionnels).

Source: https://habr.com/ru/post/fr436754/


All Articles