Des moments de la journée qui changent dynamiquement, des effets météorologiques variés et de nombreux biomes explorables font du lancer de rayons en temps réel un excellent choix pour The Riftbreaker
Présentation rapide du lancer de rayons
Le monde de The Riftbreaker est complètement dynamique et destructible. Presque tous les objets présents dans l'environnement peuvent être influencés par le joueur. La végétation peut être courbée, brûlée et dissoute. Des milliers de créatures peuvent envahir le joueur et remplir complètement l'écran. Ce type de jeu nécessite une approche spéciale pour rendre les ombres entièrement dynamiques.
Auparavant, pour générer des ombres dans le moteur Schmetterling 2.0, ils utilisaient la méthode de carte d'ombre en temps réel (sans les shadow maps pré-calculées elles-mêmes). Cette solution était la plus optimale en raison de la géométrie entièrement dynamique de la scène. Cependant, il n'a pas été possible d'utiliser des lightmaps précalculés, car ils ne correspondaient pas à cette géométrie même. C'est pourquoi les shadow maps dynamiques ont été la seule vraie solution pendant longtemps. Bien qu'ils soient largement utilisés dans l'industrie, ils présentent un certain nombre de limites.
Fragment de la bataille de boss. Une lumière ponctuelle projetant des ombres est attachée au boss qui ajoute une fidélité visuelle à la scène.
Les dernières générations de GPU sont suffisamment puissantes pour effectuer des calculs de lancer de rayons en temps réel. Et l'avènement de nouvelles cartes graphiques a permis au studio d'introduire enfin des ombres par lancer de rayons qui fournissent des résultats supérieurs aux méthodes traditionnelles de cartographie des ombres.
Le principe de base du traçage des ombres est que nous ne regardons pas la scène du point de vue de la source lumineuse et ne cherchons pas toutes sortes de castes d'ombre, comme cela se fait dans les shadow maps. Le lancer de rayons vous permet de tirer simplement des rayons dans une source lumineuse. Si le faisceau heurte un obstacle, il n'y aura pas d'éclairage direct. S'il atteint la source lumineuse, aucune ombre n'est ajoutée. Cet algorithme est assez simple, mais il donne d'excellents résultats et offre des solutions aux problèmes courants de rendu des ombres. Cependant, les performances du GPU sont très pointilleuses.
Chaque élément de la géométrie dynamique de la scène peut projeter une ombre. Le défi était de rendre ces ombres aussi précises que possible tout en maintenant les performances.
Ajouter une toute nouvelle technologie de rendu à votre propre moteur de jeu n'est pas une tâche facile. Dans le cas de The Riftbreaker, la collaboration du studio avec AMD a beaucoup aidé. Ils ont fourni une bibliothèque propriétaire GPUOpen RT Shadows contenant à la fois des solutions de traçage de rayons et de réduction du bruit pour nettoyer les résultats des passes de traçage de rayons. Cependant, avant d'utiliser cette bibliothèque, j'ai dû développer un moteur de rendu DirectX 12 pour le moteur de jeu. La raison en était l'API DirectX Raytracing (aka DXR) introduite dans la norme DirectX 12 Ultimate. Cette API active les nouveaux shaders et les capacités de traçage de rayons matériels des GPU modernes.
The Riftbreaker . .
Un autre avantage de travailler avec AMD est le code open source de leurs solutions. Cela permet des technologies compatibles avec les dernières plates-formes de jeu sur le marché, y compris les consoles de nouvelle génération. Il convient également de noter que la compatibilité de la plate-forme a influencé la sélection et le rendu de l'API. Deux options ont été envisagées: Vulkan et DirectX 12. Bien que Vulkan inclut le traçage de rayons, cette API n'est pas disponible sur Xbox ou PlayStation, et à ce jour, seul Nvidia le prend en charge sur PC. Le passage à DirectX 12 apporte une prise en charge native du traçage de rayons aux PC Xbox et Windows, vous permettant d'utiliser du matériel de n'importe quel fabricant.
À mesure que les conditions météorologiques changent, l'ombre partielle change également. Dans cet exemple, vous pouvez voir comment les ombres deviennent plus douces quand il pleut et plus nettes lorsque le soleil brille.
Les avantages de la mise en œuvre des ombres par lancer de rayons peuvent varier en fonction du scénario de mise en œuvre. Dans le cas de The Riftbreaker, les caractéristiques les plus importantes sont:
- Résolution d'ombre "infinie": la qualité de l'ombre ne dépend pas de la distance du sujet à la caméra, contrairement aux méthodes traditionnelles de cartographie des ombres. Chaque pixel de l'écran a un ombrage calculé individuellement, ce qui donne des ombres plus précises et plus stables sans artefacts scintillants.
- pénombre changeante: les ombres par lancer de rayons simulent dynamiquement des situations telles que la transition d'un ciel couvert sous la pluie à un midi clair.
- faible coût de calcul des sources de lumière supplémentaires qui projettent des ombres. Avec la mise en œuvre actuelle des ombres par lancer de rayons dans The Riftbreaker, vous pouvez calculer jusqu'à 4 lumières de projection d'ombre en même temps sans affecter de manière significative les performances. Le coût de l'ajout de lumières supplémentaires dans le cas des shadow maps est beaucoup plus élevé.
Tous ces avantages se font aux dépens d'une perte de performance significative. Même avec les derniers GPU prenant en charge le lancer de rayons accéléré par le matériel, les valeurs FPS avec tous les effets de lancer de rayons activés peuvent être jusqu'à la moitié moins élevées en comparant la même scène sans lancer de rayons.
Implémentation d'ombres par lancer de rayons
L'ajout d'ombres par lancer de rayons à une scène est un processus complexe qui se traduit par une carte extrêmement détaillée des pixels éclairés et non éclairés. Lors du premier passage du lancer de rayons, il est nécessaire de restaurer la position de tous les pixels dans la zone visible de l'écran et de diriger les rayons de ces pixels vers toutes les sources lumineuses qui les affectent. Ces coordonnées sont extraites du tampon de profondeur. Si le faisceau atteint la source lumineuse, la surface est directement éclairée. Si le faisceau rencontre un obstacle sur sa trajectoire, la surface sera ombrée. De plus, pour optimiser le processus, tous les rayons de surface sont projetés avec des cartes normales opposées à la source lumineuse. La passe suivante définit le type de shader qui sera appliqué à l'intersection du rayon et de la surface. L'API DXR utilise un shader pour le traitement,basé sur le résultat du lancer de rayons et le compare à la table d'ombrage existante.
Exemple de scène de jeu avec
lancer de rayons - Ombres douces et occlusion ambiante activées Les cartes graphiques de la série Radeon RX 6000 utilisées pour développer le lancer de rayons dans The Riftbreaker sont puissantes et capables de lancer des millions de rayons par seconde. Cependant, encore plus d'informations sont nécessaires pour avoir une idée précise du comportement de la lumière dans le monde du jeu. Dans le cas du rendu hors ligne, cela signifie généralement projeter des milliers de rayons dans toutes les directions pour chaque pixel. Aucun matériel moderne n'est capable d'effectuer ces calculs en temps réel, et encore moins de le faire 60 fois par seconde. Vous devez donc créer une carte d'ombre précise en utilisant des données incomplètes.
. , .
Le manque de données précises crée de nombreux problèmes et peut entraîner une dégradation de la qualité visuelle de la scène. Bien que nous disposions de la plupart des informations nécessaires au rendu des objets, les détails tels que les tracés, les bords et les ombres douces seront flous et se fondront les uns dans les autres. Un nombre limité de faisceaux par image produit des ombres bruyantes. Ensuite, une autre bibliothèque GPU open source entre en jeu - FidelityFX Denoiser d'AMD. La suppression du bruit est un processus complexe qui est devenu possible grâce à l'utilisation généralisée de méthodes temporelles qui analysent les images passées et les combinent en une nouvelle. AMD Noise Reduction vous permet de déterminer rapidement la moyenne des données disponibles et les propriétés à appliquer à un pixel donné pour obtenir une image nette sans aucun compromis visible.
La même scène après avoir supprimé le bruit
, . ​​ .
Bien sûr, la mise en œuvre des ombres par lancer de rayons s'est avérée être une tâche difficile au point de se limiter à l'utilisation de quelques bibliothèques prêtes à l'emploi. Le Riftbreaker présente ses propres défis uniques nécessitant des solutions spécifiques.
Le premier de ces problèmes était le grand nombre d'objets dynamiques présents dans le monde du jeu. Dans The Riftbreaker, vous jouez le rôle d'un scientifique explorant une exoplanète habitée par de nombreuses espèces exotiques de flore et de faune. Le joueur est de temps en temps attaqué par des hordes de milliers de créatures extraterrestres. Chacun d'eux doit projeter sa propre ombre. Combiné à un système de végétation dynamique qui réagit au vent, aux ondes de choc et aux forces de flexion appliquées par d'autres objets, cela est devenu un problème d'optimisation majeur.
Des milliers d'entités interagissent les unes avec les autres en temps réel
Le problème principal était causé par la manière dont le cadre d'accélération supérieur pour le lancer de rayons traite les données. Cette structure stocke des informations sur les objets de la scène qui sont utilisées lors de la passe de lancer de rayons. Ces données ne peuvent être stockées que sous la forme d'une structure d'accélération de niveau inférieur prédéfinie contenant des informations sur les sommets de l'objet. Ce n'est pas un problème quand il s'agit de roches ou de bâtiments, mais toutes les unités avec des animations squelettiques, mélangées dynamiquement, et une végétation dynamique sont complètement hors de question pour les données "pré-cuites".
«» . , . : , .
Pour fournir au cadre d'accélération toutes les données nécessaires, des mesures sérieuses ont dû être prises. Chaque objet dynamique de la scène est individuellement cuit dans un tout nouveau modèle statique qui peut être traité pendant la passe de lancer de rayons. Pour maintenir la précision, ce processus doit être répété à chaque image. La complexité de cette tâche est ajoutée par le fait que The Riftbreaker dispose d'un système météorologique dynamique. Pour cette raison, il est possible que la source de lumière soit à un angle, grâce auquel l'objet projette une ombre dans le cadre, sans être directement visible. Cela signifie que pendant le processus de cuisson, vous devez prendre en compte non seulement les objets dans la partie visible de l'écran, mais également à l'extérieur.
L'ensemble du cadre d'accélération est rendu dans un seul cadre de rendu
Le processus de préparation des structures d'accélération est très fastidieux en termes de calculs du processeur et peut facilement devenir un goulot d'étranglement pour l'ensemble du moteur de rendu. Le Schmetterling Engine 2.0 réduit la charge sur l'unité centrale en parallélisant intensivement tous les processus nécessaires à la préparation d'une scène pour le lancer de rayons. En répartissant les opérations entre le CPU et le GPU, il était possible de trouver la puissance de calcul nécessaire pour effectuer toutes ces opérations dans chaque trame. Dans le cas d'un scénario de test comprenant environ 6000 créatures attaquant la base du joueur, il était possible de réduire le temps de rendu de 60 ms à 17 ms en parallélisant les tâches dépendantes du processeur (en utilisant un processeur AMD Ryzen 9 3900X et une version préliminaire de la Radeon 6800XT).
The Riftbreaker. , , , .
-
Un autre défi unique que les ingénieurs ont dû résoudre lors de la mise en œuvre des techniques de traçage de rayons dans The Riftbreaker s'est avéré être lié au système de végétation, bien que d'une manière légèrement différente. Les textures utilisées par le feuillage sont généralement testées alpha et ont souvent des zones transparentes. Cependant, pour le raikast, cela n'a pas d'importance. Dès que le rayon atteint un pixel transparent sur la texture, il renvoie le "hit" normal. Cela ne signifie pas nécessairement que le pixel à partir duquel nous produisons les rayons doit être recouvert d'ombre, car si le texel que nous frappons est transparent, le rayon doit continuer à se déplacer vers la source lumineuse. Il existe de nombreuses textures de ce type dans le jeu, il était donc nécessaire de trouver une solution à ce problème et d'ajouter la prise en charge des tests alpha au shader AnyHit.
- . , .
L'approche du studio a été d'utiliser une solution utilisée dans les techniques de rendu traditionnelles. En frappant la surface, nous obtenons les coordonnées barycentriques du triangle au point d'intersection. Ces coordonnées ne sont pas suffisantes pour déterminer quel pixel de la texture le rayon a atteint, et vous ne pouvez trouver que la position du point d'intersection dans le triangle. Cependant, à ce stade, nous pouvons déterminer les pics à considérer. Chaque sommet du triangle a un ensemble de coordonnées UVW qui lui est attribué par le graphiste lors de la texturation. Sachant dans quel triangle nous sommes tombés, les coordonnées de l'intersection à l'intérieur de ce triangle et quelle partie de la texture doit le recouvrir, nous pouvons effectuer un test alpha.
Les polygones sous les textures de végétation sont opaques aux rayons. J'ai dû introduire une méthode supplémentaire pour vérifier si elles tombent à la place sur la texture qui était vraiment opaque.
Cependant, avant que tout ce qui précède ne se produise, la structure d'accélération doit transmettre des informations sur les textures et leurs positions. Pour cela, nous avons besoin d'une table de shader, qui est essentiellement une banque de données pour le GPU. Il répertorie les textures utilisées dans la scène et les valeurs qui leur sont attribuées dans les tampons d'index et de vertex. Avec la table d'ombrage, vous pouvez obtenir rapidement toutes les données de modèle et de texture dont vous avez besoin pour terminer les étapes d'ombrage suivantes.
Alors que The Riftbreaker se déroule dans un monde extraterrestre inhabité, de nombreux animaux sauvages se trouvent ici
Si le résultat est «opaque», les données d'ombrage sont appliquées et le processus pour ce rayon particulier se termine. En cas de résultats opaques, un test alpha est effectué. Comme déjà mentionné, lorsqu'un rayon croise une surface, à partir de là , vous pouvez obtenir les coordonnées barycentriques du point dans le triangle avec lequel il est entré en collision. En connaissant ces coordonnées et en vous référant au tampon d'index, vous pouvez obtenir les indices des sommets du triangle spécifié. Cela récupère les coordonnées UVW. Avec les données fournies par le tampon d'index, vous pouvez maintenant trouver des informations dans le tampon de vertex sur l'emplacement de ces sommets sur la texture. Ce n'est qu'après toutes ces actions que nous obtenons une réponse à la question de savoir si le rayon est entré en collision avec une surface opaque ou transparente. Si la valeur alpha au point d'intersection est inférieure au seuil de transparence, le rayon continue de croiser la scène.
De cette façon, nous obtenons le résultat exact dans chaque image. Cliquez sur l'image pour l'agrandir.
Les tests alpha ajoutent des coûts de matériaux en termes de calculs d'ombre par lancer de rayons par rapport aux méthodes traditionnelles, il est donc préférable de les éviter lorsque cela est possible. Dans un scénario de jungle, le coût d'envoi d'un tel faisceau est environ 20% plus élevé que celui d'un faisceau frappant un objet opaque. Pour réduire le nombre de rayons frappant les surfaces transparentes, des optimisations sont nécessaires en limitant la surface de tous les objets transparents. La vue de la caméra dans The Riftbreaker est isométrique, donc le nombre de polygones visibles en même temps est naturellement limité, et nous pouvons facilement augmenter le temps de rendu des polygones de la plupart des objets sans affecter les performances du GPU.
Conclusion
L'utilisation du lancer de rayons par le Riftbreaker n'en a que profité. Le monde du jeu est devenu plus crédible, ce qui contribue à une meilleure immersion en lui. Les petits détails ajoutés avec le lancer de rayons aident définitivement à améliorer la perception. Voir une comète brillante dans le ciel projetant des ombres sur des objets dynamiques sur Terre est un spectacle vraiment magnifique. Les jours nuageux, à leur tour, accueillent le joueur avec des ombres douces et une palette de couleurs plus sourdes. Le Riftbreaker prendra sûrement sa place bien méritée dans la gamme des jeux de prochaine génération.
Le Riftbreaker arrive sur PC et consoles en 2021.