Problèmes de traçage de rayons dans les jeux de nouvelle génération: analyse de traçage de rayons dans le remaster de Spider-Man de Marvel
À l'approche du lancement de la prochaine génération de consoles, Insomniac Games a commencé à publier plus de matériel révélant des détails sur Spider-Man de Marvel et Spider-Man de Marvel: Miles Morales. Les deux projets utilisent la technologie du lancer de rayons. De l'avis d'Alex Battaglia de Digital Foundry, cela a l'air très digne, voire excellent. Pas mal pour un début.
Cependant, en lisant des commentaires sur Internet, il a rencontré un nombre considérable de critiques concernant la mise en œuvre de la technologie, ainsi que la fréquence d'images et la résolution. Dans une nouvelle vidéo de Digital Foundry, il a donc décidé de présenter une sorte de tutoriel sur le traçage de rayons sur les consoles de nouvelle génération et d'expliquer pourquoi cela ressemble à cela dans Spider-Man de Marvel.
Alors, tout d'abord. Discutons exactement à quoi sert le traçage de rayons dans Spider-Man de Marvel sur PS5.
À 30 images par seconde en résolution 4K, le lancer de rayons est superbe. Dans le même temps, comme il est d'usage dans les jeux Insomniac, la résolution dynamique peut ou non être utilisée. C'est là que le lancer de rayons est appliqué aux reflets du jeu comme ceux que l'on voit sur les portes de voiture.
Ou dans cette capture d'écran, où le héros et la ville au loin se reflètent dans la fenêtre du bâtiment.
Le lancer de rayons est également utilisé pour l'ombrage de l'arrière-plan (Occlusion ambiante, AO), selon le communiqué de presse. Il est plus difficile de l'identifier sur les captures d'écran ou les vidéos. En règle générale, AO simule les ombres de l'éclairage indirect dans les zones où la lumière réfléchie autour de la scène est plus difficile à atteindre.
En ce qui concerne les commentaires sur les médias sociaux et les forums, la qualité des réflexions par lancer de rayons est décevante, qui à première vue ne représentent qu'un quart de la résolution de base. Mais ils ont évidemment des filtres sur eux, donc c'est difficile à dire avec certitude.
Les reflets sont affichés en 1080p, tandis que le reste de l'image est affiché en 4K. Les commentateurs se plaignent, par exemple, que les feuilles du reflet sont plus rares voire absentes que celles que l'on peut voir sur le "vrai" arbre. Ou que certains objets du jeu, tels que les voitures ou les piétons, peuvent ne pas apparaître dans les reflets. Ou le manque d'ombres. Ou en négligeant les petits détails, comme sur un costume Spider-Man.
En fait, tout cela n'est pas surprenant et renvoie à des mesures obligatoires, semble-t-il, prises pour acquises. Cela est dû au fait que le lancer de rayons est effectué en plusieurs étapes, dont chacune affecte la performance globale, qui a un budget très limité.
Prétendons que nous sommes les développeurs mêmes qui ont besoin de créer les réflexions les plus réalistes dans un budget donné.
Divisons le processus de lancer de rayons en quatre étapes. Disons que nous devons atteindre 8 ms pour créer des réflexions pour un jeu à 30 FPS en résolution 4K.
Passons à la première étape. Pour la modélisation des rayons, le GPU doit avoir une compréhension de la scène et des objets géométriques sur et en dehors de l'écran. Dans un premier temps, nous créons une version facile à lire de la scène du jeu. Plus il contient d'objets et plus ils sont dynamiques, plus cette étape prendra du temps.
Dans la deuxième étape, nous lançons des rayons dans la structure créée dans la première.
Pour voir si le faisceau frappe n'importe où, entourez tous les objets avec des hitbox invisibles. Ainsi, un rayon qui frappe la scène la traverse jusqu'à ce qu'il enregistre un coup dans la géométrie. Plus nous tirons de rayons, plus ils vont loin, ou plus nous frappons de hitbox, plus il faudra de temps pour cette étape. Cette partie du pipeline de lancer de rayons peut être accélérée matériellement sur les consoles et les PC.
L'étape suivante est l'ombrage ou la sélection de la couleur des pixels.
Plus les hits sont ombrés ou plus l'ombrage est difficile, plus cette étape prendra du temps.
La troisième étape nous donne les couleurs et les nuances que nous voulons, mais elles peuvent avoir de mauvaises transitions ou être bruyantes. Ce problème est résolu à la quatrième étape. En règle générale, plus le résultat de la troisième étape est effacé avec précision dans la quatrième, plus le processus prend du temps.
L'ensemble du pipeline doit être posé en huit millisecondes au total, et au début, nous sommes loin de cet objectif. Nous devons peaufiner les étapes pour que cela prenne beaucoup de temps et aussi pour nous assurer que nos réflexions sont toujours bonnes et correspondent à la conception du jeu. Cela peut entraîner une diminution de la qualité des réflexions dans certaines zones et une augmentation dans d'autres.
L'une des premières optimisations que nous utiliserons est de réduire la résolution du lancer de rayons. Cela limitera le nombre de rayons sortant et réduira le temps requis pour les deuxième et troisième étapes.
Comme vous pouvez le voir sur la capture d'écran ci-dessous, le reflet ressemble à près d'un quart de la résolution d'origine. Cette optimisation est effectuée non seulement pour les GPU de console, mais pour tous les GPU en général, car le lancer de rayons est incroyablement gourmand en ressources.
Jetons un coup d'œil à une capture d'écran de la démo de The Ghost Runner avec le traçage de rayons 4K activé sur une carte graphique RTX2060 Super. Ici, nous voyons quelques différences par rapport à Spider-Man. Unreal Engine 4, sur lequel le jeu est créé, utilise une méthode de lancer de rayons légèrement plus coûteuse en temps, mais physiquement plus précise que dans Spider-Man.
Le RTX 2060 Super fonctionne de la même manière que le RTX 2070, a la même bande passante de bus mémoire que la PS5 et le même stockage de 8 Go. Le RTX 2060 Super est susceptible d'être un excellent point de départ pour la comparaison avec le GPU PlayStation 5.
Lorsque la scène est rendue en 4K avec des reflets et que la quantité de réflexions à l'écran est aussi petite que dans le cas de la flaque statique ci-dessus, le GPU s'adapte à peine 30 FPS. S'il y avait plus de dynamique dans la scène, la fréquence d'images serait certainement inférieure. La réduction de la résolution axiale du lancer de rayons de 50% et donc de la résolution totale à 1080p augmente les performances d'environ 27%, laissant des ressources libres dans le GPU pour augmenter la fréquence d'images jusqu'à 30 FPS.
Des résultats plus impressionnants peuvent être vus dans d'autres scènes. Comme ici. La surface en verre réfléchissant occupe presque tout l'écran. Dans ce cas, les réflexions avec une résolution 4K native se traduisent par une fréquence d'images de 21 FPS. Dans le même temps, abaisser la résolution des réflexions à 1080p augmente la fréquence d'images de 58% à 33 FPS avec les 30 FPS requis.
Ainsi, sur un GPU avec les mêmes performances que la PS5, vous devez utiliser des réflexions de lancer de rayons de résolution inférieure pour pouvoir maintenir une fréquence d'images cohérente de 30 FPS à une résolution globale de 4K. Ensuite, il devient clair pourquoi Spider-Man n'utilisera que des réflexions à 1080p pour réduire le coût du lancer de rayons.
Revenons à notre exemple de calcul. Nous avons réduit la résolution des réflexions afin que les deuxième et troisième étapes prennent désormais moins de temps. Mais nous ne rentrons toujours pas dans le budget donné pour la durée de la trame.
Essayons de raccourcir le temps de la première étape en diminuant le dynamisme ou le nombre d'objets par rapport auxquels le lancer de rayons sera effectué. Ainsi, dans les captures d'écran présentées précédemment, certains objets dynamiques peuvent manquer dans les réflexions. Ou ici, dans la vidéo de gameplay de Miles Morales, dans les scènes de foule, vous pouvez parfois remarquer que certains des PNJ ne se reflètent pas sur les surfaces.
Nous savons par expérience d'autres développeurs que dessiner de nombreux personnages à l'écran peut être très gourmand en ressources. Par exemple, certaines scènes de Metro Exodus avec beaucoup de personnages sur le RTX 2080 Ti prennent plus de 4 ms pour être rendues. Dans notre cas, ce sera la moitié du budget alloué.
Ainsi, réduire le nombre d'objets dynamiques dans la première étape du lancer de rayons conduit à une accélération du processus, puis nous nous adaptons aux 8 ms alloués.
Cependant, le résultat n'est peut-être pas aussi impressionnant que nous le souhaiterions.
Par exemple, jetez un œil à ces captures d'écran de Battlefield V.
Comme on le voit plus haut, des bâtiments en reflets apparaissent et disparaissent. Ce n'est pas l'effet le plus souhaitable, nous allons donc augmenter la distance que les rayons peuvent parcourir à la deuxième étape, ainsi que la distance à laquelle les objets sont inclus dans la structure lors de la première.
Revenant à notre cadre de Spider-Man, nous pouvons voir que les reflets montrent des objets très éloignés. Il serait probablement très désagréable que les objets à l'horizon soient absents des reflets ou clignotent, apparaissent et disparaissent constamment.
Par conséquent, en tenant compte des bâtiments situés loin de la source de réflexion dans les reflets, et en augmentant la distance parcourue par les rayons, nous devrons sacrifier autre chose pour payer.
Revenons à notre calcul. Décidant de prendre en compte des objets distants dans les réflexions, nous nous sommes à nouveau retrouvés hors des limites de notre budget. Par conséquent, nous examinerons à nouveau le pipeline pour d'éventuelles simplifications. Peut-être que la deuxième étape nous ramènera aux 8ms souhaités.
Regardons à nouveau notre capture d'écran de la ville. Dans la réflexion sur la fenêtre, vous pouvez voir des feuilles plus rares ou manquantes par rapport à leur apparence sur le modèle d'arbre d'origine. Les feuilles sont classées ici comme transparentes, et pour les objets transparents, la deuxième étape du pipeline prend plus de temps. Nous le savons par expérience avec Battlefield V, où les particules et les reflets rendent certaines scènes extrêmement coûteuses.
Pour Spider-Man, on peut réduire le nombre de feuilles sur les arbres dans les reflets avant la deuxième étape. Nous allons également faire en sorte que les effets de particules ne soient pas traités par lancer de rayons, comme ici, où le brouillard dans la réflexion n'est pas affiché.
Maintenant, nous rentrons presque dans le budget du cadre, mais le dépassons encore légèrement.
La dernière optimisation peut être effectuée dans la troisième étape, où nous utilisons l'ombrage.
Revenons à notre capture d'écran. Avez-vous remarqué le manque de petits détails dans le reflet du costume Spider-Man? Lesquelles sont visibles sur son vrai costume? Si nous simplifions le matériau en réflexion, il faudra moins de temps pour le dessiner.
Il n'y a rien de mal à cela, car de nombreux jeux qui utilisent le lancer de rayons, tels que Wolfenstein: Youngblood, utilisent la même technique.
En conséquence, nous rentrons dans les 8 ms alloués. Ainsi, nous avons amélioré la qualité des réflexions dans certains aspects, par exemple en ajoutant des réflexions d'objets distants, mais en même temps recouru à certaines simplifications, telles que l'abaissement de la résolution des réflexions.
Espérons que cet exemple nous a aidé à comprendre les dilemmes auxquels les développeurs de jeux sont confrontés lorsqu'ils traitent avec des budgets de performances limités et des technologies coûteuses telles que le lancer de rayons.