Test

PlayStation La technologie d’effets spéciaux derrière Saros : de NGP à Graphite

CrossPlatform

Well-known member
GameActu
Il y a cinq ans de cela, nous vous expliquions dans un article comment les graphismes de Returnal ont pris vie, y compris le voxeliseur qui dissout Phrike en un brouillard volumétrique. Si vous ne l’avez pas encore lu, cet article va de pair avec celui que vous êtes en train de lire en ce moment.

Et c’est ainsi que l’histoire continue.

Avec Saros, nous ne nous sommes pas contentés de nous reposer sur les bases posées par Returnal. Nous avons analysé trente ans de développement de moteurs graphiques et assemblé le tout dans un framework : Graphite.

Ce que nous avions, et pourquoi nous avons changé​


Notre moteur de particules propriétaire, NGP (Next-Gen Particles), a commencé en tant que prototype pour Resogun en 2013 et a continué de grandir avec chaque jeu que nous avons développé depuis, jusqu’à Returnal. À l’arrivée de Saros, NGP était mature, mais c’était également le produit de douze ans de décisions incrémentales, chacune prise dans le contexte d’un jeu spécifique et isolé.

Puis quelque chose d’autre a changé : nous. Rejoindre PlayStation Studios signifiait proposer des expériences auxquelles nos joueurs s’attendent, et nos outils, ainsi que les noms que nous leur avons donnés, ne correspondaient plus au studio que nous étions en train de devenir.

C’est ici que Graphite entre en jeu. Ce framework réunit la simulation par GPU, le rendu, le tooling et l’intégration du DCC sous une seule architecture, conçue directement pour les plateformes PlayStation. NGP n’a pas disparu : il est devenu une partie de Graphite, a évolué, et est plus puissant que jamais.

Chaque jeu Housemarque a une identité visuelle que les joueurs reconnaissent immédiatement. Graphite est ce qui rend cela possible.

Et il n’y a pas de meilleures personnes pour expliquer comment cela fonctionne que celles qui l’ont conçu :

Sharman Jagadeesan (Graphics Architect) et Konsta Toivanen (Senior Graphics Programmer) vous guideront à travers le brouillard volumétrique de Saros : comment il a évolué depuis Returnal, et les deux systèmes que nous avons conçus pour rendre l’atmosphère de Carcosa vivante.

Risto Jankkila (VFX Architect) vous expliquera ensuite comment nous avons pu améliorer Graphite à partir de données tirées de Houdini, en plus d’une analyse complète de la séquence d’apparition du joueur.

Brouillard volumétrique​


Le brouillard dans les jeux n’est souvent qu’une idée après coup, quelque chose ne servant qu’à remplir les espaces vides et à cacher les distances de rendu. Dans Saros, nous voulions que celui-ci soit un élément vivant du monde, réagissant à tout ce qui se passe à l’intérieur de lui.

Dans Returnal, notre brouillard volumétrique était déjà réactif, mais à trop basse fréquence, et le filtrage temporel nous empêchait de montrer les détails les plus fins. Pour Saros, nous avons conçu deux solutions complémentaires : un brouillard ambiant basse fréquence pour l’atmosphère ambiante, et un brouillard haute fréquence pour les effets de personnages vus dans les salles narratives de Carcosa.

Brouillard basse fréquence

Nous avons pris le brouillard de froxels d’Unreal Engine, une grille de voxels alignée sur la pyramide de vue (frustum), comme point de départ et nous avons reconstruit de nombreux éléments afin de pouvoir créer notre vision.

La première difficulté que nous avons rencontrée était la stabilité temporelle. L’hystérésis contrôle la quantité de données de l’image précédente conservée par le brouillard : le paramètre par défaut d’Unreal de 90 % maintient l’image stable, mais ralentit le brouillard lorsque vous avez une caméra ou des lumières qui se déplacent rapidement. Nous l’avons réduit à 50 %, utilisant une gigue de bruit bleu et du depth clamping pour garder l’aliasing sous contrôle.

Saros avait également besoin d’un brouillard pouvant tout aussi bien représenter une brume de basse densité qu’un brouillard de haute densité. Afin de les représenter fidèlement, nous avons utilisé :

  • Une double fonction de phase de Henyey-Greenstein, modélisant la façon dont la lumière s’éparpille vers l’avant et l’arrière à travers le brouillard en fonction de l’angle de vue.
  • Un coefficient d’absorption coloré, déterminant la quantité de lumière absorbée lorsque celle-ci traverse un milieu, offrant une palette de couleurs beaucoup plus diverse que les solutions monochromatiques traditionnelles.
  • Un système d’auto-ombrage qui réunit les différentes sources de lumière vers une seule direction dominante, et effectue un ray-marching dans cette direction.
  • Une intégrale basée sur la physique de la lumière du ciel, afin d’obtenir un éclairage distant précis sans sacrifier les performances.

Ensemble, ces éléments ont permis de donner à l’atmosphère de Carcosa une qualité physique et ancrée dans le réel.

Pour finir, notre brouillard de basse fréquence est entièrement interactif. L’advection de notre simulation de fluides est reliée au joueur grâce à l’hypersthèse, rendant chaque mouvement du joueur, des projectiles, des explosions et des ennemis lisible dans le brouillard en temps réel.

Brouillard haute fréquence

Nous avons conçu un ray-marcher personnalisé pour gérer le brouillard haute fréquence. Afin de conserver de bonnes performances tout en préservant la fidélité, nous regroupons les données éparpillées dans des groupes de voxels en 8x8x8 avant le marching, n’affichant que les groupes contenant des données et gardant leur nombre sous un seuil défini par l’utilisateur. Durant le marching, les régions vides sont sautées, permettant au marcher de faire de plus grands pas là où il le peut.


Pour l’éclairage, nous évaluons un volume de lumière par rapport à un volume de dispersion contenant l’irradiance de toutes les sources de lumière, avec l’auto-ombrage pré-marché pour chaque voxel de lumière. Nous exposons les paramètres pour l’albédo, l’absorbance, la densité et les ombres, permettant aux artistes de trouver un équilibre entre graphisme et performance pour chaque volume.

Les deux systèmes de brouillard sont ensuite réunis : nous échantillonnons les données de dispersion du brouillard à basse fréquence durant la marche à haute fréquence, et lui renvoyons les résultats afin que les deux restent cohérents l’un avec l’autre.

Cas d’utilisation

Nous utilisons des brouillards volumétriques de haute fréquence dans quelques scénarios. L’un d’entre eux se trouve dans le prologue sous la forme d’un crâne enfumé rattaché à des câbles. Une autre utilisation est ce que nous appelons les Mirages. Des salles narratives spécifiques se trouvent dans quatre de nos biomes, où Arjun devra faire face à des créatures de fumée.



1/2
Now showing slide 1 of 2Show all
c2c0dc4a3ec30e1fc906adcece76574ff3e1c6b3.png

View and download image

Download the image​



Fermer

Download this image


Crâne de fumée vu durant le prologue

a987c4c618a7917c3e1c68a935ee9693efb1d876.png

View and download image

Download the image​



Fermer

Download this image


Quatre salles narratives avec des mirages.


La réactivité est centrale à tous les effets spéciaux que nous créons, et ces effets ne dérogent pas à la règle. Étant donné que les données sur les impacts n’ont pas besoin d’une résolution élevée, nous les stockons dans un volume basse résolution séparé ; celui pour le crâne contient également son champ de vitesse basse fréquence.



1/2
Now showing slide 1 of 2Show all

Et voici l’effet final du crâne sans les câbles et autres éléments secondaires, dans un environnement différent.


L’effet des mirages est similaire à l’effet du crâne. La différence est qu’il y a des « scènes » de mirages qui tournent. Nous avons également utilisé notre voxéliseur de maillages de squelettes en temps réel pour ajouter nos maillages existants aux scènes. La vidéo montre un balayage entre le résultat voxélisé et le résultat final avec les données d’advection de l’image précédente.


Voici la scène finale avec deux scènes de mirages tournant dans un environnement de test. Pour des raisons de réactivité, nous avons utilisé la même méthode que celle décrite pour l’effet du crâne.

Alimenter Graphite à l’aide de données venant de Houdini​


En plus d’améliorer la qualité de rendu de nos effets volumétriques, nous voulions apporter à nos artistes de nouvelles façons de les modifier.

Précédemment, les effets volumétriques étaient créés en écrivant des expressions par voxel pour l’émission de densité, combinées aux simulations de fluides derrière l’advection (le mouvement directionnel) du champ de densité. Étant donné que cette approche par grille et voxels est le standard pour les effets spéciaux de films, ce fut également notre première étape.


Tiré de Returnal : voxélisation de Phrike en une grille pour les émissions de densité.

Durant le développement de Returnal, nous avons réalisé que nous avions besoin d’un meilleur contrôle sur la façon dont la densité est générée. Une logique par voxels nous permet d’émettre des densités sur des surfaces alentour ou sur des maillages voxélisés, mais tout ce qui était plus complexe s’avérait trop coûteux en ressources. Émettre des densités depuis uniquement le bras du personnage, plutôt que depuis son corps voxélisé complet, était très difficile à faire efficacement en temps réel.


Également tiré de Returnal : émission de densité d’un corps entier depuis un maillage voxélisé.

Afin de résoudre ce problème, nous nous sommes tournés vers les particules pour conduire les émissions de densités volumétriques. Le système de particules entièrement programmable de Graphite nous a offert des fondations solides pour des contrôles plus étroits, résultant en deux nouveaux outils :

  • Une pipeline de données Houdini hors-ligne : elle permet aux artistes de précalculer des données de haute fidélité dans Houdini si celles-ci s’avéraient trop intenses à calculer en temps réel.
  • Un rastériseur de nuages de points en environnement d’exécution : un composant haute performance qui prend des points simulés et les rastérise directement dans un volume en temps réel.

Ensemble, ces outils nous ont libérés d’expressions par voxels sans état et d’animations de fluides rigides. Les particules peuvent maintenant suivre précisément le maillage animé d’un personnage, offrant à l’artiste un contrôle complet du comportement et du cycle de vie d’un effet.

Sur le papier, un artiste importe un personnage animé de Saros dans Houdini et utilise ses outils pour calculer les positions de départ et les attributs d’un effet. Les données calculées sont ensuite transférées au moteur graphique où la simulation en temps réel prend le dessus. Dans la vidéo ci-dessous, les points générés par Houdini sont étroitement associés au personnage en jeu, et une logique personnalisée les détache des ennemis lors de l’impact d’une balle ; leur position initiale vient donc de Houdini, mais leur comportement réagit dynamiquement au joueur en temps réel.



1/2
Now showing slide 1 of 2Show all

Créer des données de points dans Houdini


Utiliser des données de points dans Houdini



Étant donné que les artistes peuvent exporter n’importe quel type de données depuis Houdini vers Graphite, il est facile d’aller au-delà des simples particules statiques attachées aux personnages. Ci-dessous, des particules glissent sur la surface d’un maillage animé : la surface a été dépliée dans Houdini dans un espace de simulation 2D, puis exportée et assignée au maillage animé en temps réel.


Vous pouvez voir le flux des particules sur le corps d’Arjun à gauche. Au milieu, nous extrayons une surface ISO depuis les particules. À droite, nous avons le brouillard volumétrique émis par le flux de particules.

L’exemple parfait de l’utilisation de cette technologie en action est la séquence d’apparition du joueur dans Saros. Cet effet complexe est conçu à l’aide de plusieurs couches, commençant hors-ligne dans Houdini, où nous générons des splines directement sur le maillage du squelette du joueur. Lorsque nous exportons ces splines vers Graphite, nous traitons chaque point de contrôle associé à une spline en tant que particule individuelle.


Ceci est une simulation de la position des particules dans Houdini. Celles-ci sont utilisées uniquement en tant que positions cibles dans le moteur graphique, et le mouvement de croissance sera resimulé dynamiquement lors de l’exécution.

Dans un environnement d’exécution, notre système de particules programmables contrôle la façon dont ces éléments se comportent avec le temps. Au début, les splines se déplacent librement dans l’espace, puis sont progressivement guidées vers leurs positions cibles sur le maillage du personnage.

Nous voulions que les joueurs aient l’impression d’être physiquement reformés à partir d’une cuve de gelée. Le marching cubes nous a donné cette apparence de surface solide et visqueuse, et la contrôler à l’aide de particules nous a permis de créer une séquence où le joueur se forme en un personnage à partir de différents brins.


Marching cubes conçus à partir de splines de particules.

Tout comme les splines qui ont généré la surface gélatineuse, nous pouvons également émettre de la densité volumétrique. Dans la séquence d’apparition, nous avons placé un certain nombre de splines de particules proches de l’emplacement du joueur et nous faisons apparaître du brouillard volumétrique afin de simuler de la vapeur ou de la fumée qui monte.


Brouillard volumétrique émis depuis des splines de particules.

Et pour la touche finale, nous avons ajouté des particules d’étincelles qui entrent en collision avec le personnage du joueur à l’aide d’un champ de distance signé généré depuis les capsules de collision du joueur. Le système de particules programmables nous a également permis de faire preuve de flexibilité dans ce cas précis : le joueur attire les particules, mais une fois que celles-ci se sont trop rapprochées, le maillage du joueur les repousse, donnant l’impression que celui-ci émerge d’un liquide semblable à de la lave.


Particules entrant en collision avec les champs de distance signés des capsules du joueur.

Et voici le tout combiné. Chaque élément est simulé dans un environnement d’exécution, à 60 IPS sur une PS5 de base et sans précalcul. Cela nous permet de proposer plusieurs animations d’apparitions, chacune avec un léger effet d’aléatoire pour qu’elle semble un petit peu différente à chaque fois que le joueur se réveille.


Séquence finale de l’apparition du joueur.

Ce que l’avenir nous réserve​


Comme vous avez pu le lire à travers ce que Risto, Sharman et Konsta ont pu expliquer dans cet article, notre objectif et celui de nos technologies ont toujours été les mêmes : chaque simulation, chaque effet, chaque décision de rendu n’existent que pour vous faire ressentir quelque chose lorsque vous jouez.

Créer des jeux signifie croire en quelque chose que vous ne pouvez pas encore prouver, et les seules personnes qui peuvent le confirmer sont les joueurs eux-mêmes. Les joueurs de Saros nous ont dit, avec leurs propres mots, que ce que nous avons créé comptait pour eux. Et cela compte beaucoup pour nous.

Nos jeux continueront de mettre en avant les technologies que nous développons pour Graphite, mettant toujours en avant les capacités de la plateforme PlayStation. Nous avons hâte de partager ce futur avec vous.

Lire la suite ...
 
Retour
Haut