Le développeur VFX Matt Wilde renverse la bière
Nous avons tous pris des passe-temps cette année. Et même si je suis sûr que ma vie a été enrichie par le marathon de The Crown et la projection astrale hors de mon corps le week-end, Matthew Wilde avait un projet de verrouillage un peu plus substantiel: il a fait des shaders de bouteilles alcoolisées pour Half-Life: Alyx.
Les shaders ont été ajoutés au jeu dans un patch de mai, et ils ont immédiatement commencé à avoir de l’amour sur Internet. Il est facile de comprendre pourquoi: ils ont l’air vraiment très bien. Le shader rend les bouteilles transparentes, avec un liquide qui réagit lorsque vous secouez la bouteille. Avant le patch, les bouteilles émettaient un bruit de clapotis lorsqu’elles étaient secouées, mais sinon elles semblaient opaques.
Je voulais savoir comment le shader fonctionnait, et il n’y avait pas de meilleure personne à demander que Wilde lui-même.
J’ai passé une bonne partie du verrouillage à faire ce travail important. Shader liquide Boozy, maintenant disponible dans la dernière mise à jour pour Half-Life: Alyx pic.twitter.com/Iw9h98pmEg
– Matthew Wilde (@skilful) 28 mai 2020
Wilde est un développeur VFX, et il travaillait chez Valve quand Alyx était en développement – mais sur Dota Underlords. Il a fait un shader de verre à vin pour le personnage de Dota Jull, qui a attiré l’attention de Scott Dalton de l’équipe Half-Life: Alyx. Il y a beaucoup de bouteilles dispersées dans Alyx, mais un niveau particulier se déroule dans une distillerie et oblige le joueur à interagir beaucoup avec les bouteilles.
Développer un shader qui rendrait les bouteilles pleines de liquide rendrait le niveau encore plus impressionnant. Et Wilde ne partirait pas non plus de rien: le jeu était essentiellement terminé, avec des actifs détaillés et un système d’éclairage puissant en place.
«Toutes les bouteilles existaient en tant que modèles, et elles étaient toutes magnifiquement texturées et elles étaient superbes», a déclaré Wilde. «Et si immédiatement, nous avons pu voir que c’était vraiment prometteur.»
Mais avec la date de sortie d’Alyx imminente, il n’était tout simplement pas temps d’implémenter le nouveau shader sans causer de problèmes de performances.
«S’il y avait juste une bouteille occasionnelle autour … cela n’aurait probablement pas été un problème», m’a dit Wilde. «Mais encore une fois, c’était ce niveau de distillerie qui avait des milliers d’accessoires et des milliers de bouteilles.
Le shader a été mis sur les tablettes pour être publié, et bien que Wilde ait été déçu, il l’a pris dans la foulée. Half-Life: Alyx est sorti le 23 mars 2020. Le même jour, Jay Inslee, le gouverneur de l’État de Washington, a émis un ordre de rester à la maison qui fermerait les bureaux de Valve à Bellevue.
«Et donc nous avons eu le temps soudainement», a déclaré Wilde. «Lockdown nous a donné l’opportunité de revenir sur des choses que nous n’avions pas réussi à faire auparavant.»
Faire le shader
Les shaders sont des programmes qui indiquent aux objets 3D comment se présenter. Ce shader spécifique est un pixel shader, qui indique à chaque pixel de quelle couleur il doit être, en fonction de la façon dont il est éclairé. Tout ce qui est rendu dans un jeu a un shader.
«C’est juste que certains shaders sont un peu plus impliqués que d’autres», m’a dit Wilde.
Les shaders finissent par représenter une grande partie des détails que nous voyons. En fait, rendre quelque chose en 3D – toutes les rainures et tous les nœuds dans l’écorce des arbres, par exemple – prendrait beaucoup de temps et de performances. Mais un shader peut créer l’illusion d’écorce d’arbre, d’armure, de peau ou de bière moussant dans une bouteille, même si l’objet sur lequel il est appliqué est simplement constitué de polygones lisses et lisses.
Maintenant installé chez lui, Wilde est retourné au shader. Alyx avait déjà un système d’éclairage, donc ce que le shader devait faire était de déterminer quelles valeurs utiliser lors du calcul de l’éclairage. Le shader prend en compte les entrées telles que les couleurs de base, les textures et les reflets pour le liquide et la bouteille elle-même, puis les combine tous ensemble.
«Et puis ce que vous sortez est une autre couleur», a déclaré Wilde. “Vous le faites pour chaque pixel et vous obtenez un résultat à la fin.”
Combiner un liquide et une bouteille de bière dans Half-Life: Alyx GIF: Matthew Wilde / Valve
Le shader est avant tout le résultat d’une observation obsessionnelle. Wilde était littéralement assis dans son sous-sol, ramassant et jouant avec des bouteilles pour voir comment le liquide se comportait.
“Vous regardez un shader et vous voyez tout le travail qui y est consacré, et ce sont des pages et des pages de trucs, mais cela n’est jamais sorti de l’esprit de quelqu’un, vous savez, directement dans le fichier”, m’a dit Wilde . «Il a toujours été question de le construire lentement … puis de trouver des idées au fur et à mesure, en quelque sorte de les esquisser.»
Wilde faisait des observations sur la bouteille de la vie réelle – la mousse qui se développe sur la bière, ou la façon dont le liquide attrape la lumière – puis ajuste ces entrées dans le shader afin que sa création reflète la réalité. C’était comme créer une peinture pointilliste, pixel par pixel. Notamment, il n’y a pas de simulation liquide ici.
“Il est vraiment fait pour se comporter comme j’ai déterminé qu’il devrait se comporter, rien de plus réaliste que cela”, a déclaré Wilde. «Il n’y a pas de simulation, c’est juste observé.»
C’est pourquoi le libellé des notes de mise à jour d’Alyx est très intentionnel: “Les bouteilles semblent maintenant contenir du liquide qui se déplace lorsque vous les secouez.”
Réflexion et réfraction
La cartographie de cube est depuis longtemps la façon dont les jeux gèrent les reflets, et même avec le lancer de rayons imminent dans notre avenir, cela ne changera pas du jour au lendemain. Une carte de cube est composée de six vues intégrées dans un cube. Selon l’endroit où la caméra du joueur pointe, le jeu tirera une vue approximative du cube pour créer une réflexion. C’est pourquoi les miroirs ne fonctionnent pas vraiment dans les jeux – les cartes cubiques ne créent pas de réflexions parfaites et elles n’en ont vraiment pas besoin.
Il y a un bon exemple de cela dans Spider-Man de Marvel sur PS4, où les réflexions sur les bâtiments peuvent montrer quelque chose de proche, mais pas nécessairement la chose la plus précise. Nous sommes généralement tout à fait capables de suspendre l’incrédulité, car le reflet semble assez bon.
Ce shader d’alcool utilise une carte cubique pour créer des reflets, mais aussi pour créer l’illusion de la réfraction – qui est la lumière passant à travers un objet, plutôt que de rebondir dessus.
Les bouteilles ne sont pas transparentes. Mais ils ont l’air transparent, car Alyx tire la carte du cube pour vos coordonnées approximatives et projette cette image précuite sur le côté de la bouteille que vous regardez. Cela vous montre une vue déformée de l’espace, mais c’est une illusion sauvage qui fonctionne absolument.
“Les utiliser pour une bouteille où les choses sont déjà un peu déformées, où tout est un peu sale … c’est en fait une très bonne façon de le faire”, a déclaré Wilde. «Je pense que cela aide aussi que lorsque vous regardez du verre et du liquide, personne ne sait à quoi cela devrait ressembler, tout comme une chose instinctive. Vous acceptez simplement lorsque vous commencez à regarder à travers le verre et que les choses tournent un peu bizarrement.
Si vous vous collez une bouteille de vin au visage, vous verrez qu’elle est en fait vide. Gif: Polygone via Valve
L’image de la carte du cube est doublement déformée là où le shader indique qu’il y a du liquide. Wilde combine des reflets sur les reflets pour donner l’impression qu’il y a deux surfaces: la bouteille en verre et le liquide «à l’intérieur».
Et c’est ainsi que vous obtenez l’illusion de liquide à l’intérieur d’une bouteille en verre transparent – alors qu’en fait, la bouteille est vide et opaque.
Fausse physique
Ce que j’aime le plus dans ce shader, c’est qu’il est suffisamment détaillé pour passer notre seuil mental de réalisme – même si, encore une fois, il n’y a pas de simulation.
«Tout est truqué, tout est trompé. Tout est juste en quelque sorte observé et ajusté, et les valeurs modifiées jusqu’à ce que cela se sente à peu près correct », a déclaré Wilde. «Quand je secoue une bouteille, [the liquid] sorte de vacille un peu. Nous le faisons donc vaciller un peu, dans la mesure où le vacillement semble correct.
C’est cette oscillation qui a initialement retardé le shader, car il n’y avait pas de moyen efficace d’obtenir les informations dans le jeu. En fin de compte, le coût des performances était négligeable, car les collègues de Wilde chez Valve ont réalisé qu’ils pouvaient stocker des données dans la couleur des sommets du shader.
La couleur des sommets est “une relique d’une époque antérieure avant un éclairage et des textures réalistes”, m’a dit Wilde dans un e-mail. «Dans ce cas, c’était juste une couleur qui était appliquée sur l’ensemble. Et nous n’avons utilisé cette couleur pour rien. »
Une bouteille de vodka dans Half-Life: Alyx Gif: JeuxServer via Valve
Ainsi, l’agitation (ou, professionnellement, la mollesse) du liquide, la direction de la gravité et la mousse ou les bulles, sont toutes stockées dans ces canaux RVB inutilisés. Quand j’agite sauvagement une bouteille, la vitesse de la bouteille est utilisée pour conduire l’agitation, ce qui donne l’impression que le liquide claque. Les bulles ou la mousse sont également liées à la vitesse et se dégradent progressivement lorsque le mouvement s’arrête. Mais tous les calculs les plus intensifs – éclairage, reflets, ombres – sont déjà en cours pour chaque objet du jeu, que le joueur devienne fou de bouteilles ou non.
Pourquoi ça réussit
Bien que travailler sur un projet de verrouillage impliquant de grandes quantités d’alcool puisse sembler isolant, lorsqu’il s’agissait d’implémenter le shader et de résoudre le problème de performances, Wilde n’était pas seul – les effets visuels d’Alyx sont un effort d’équipe.
«Le succès de celui-ci vient, tout d’abord, du fait que les actifs eux-mêmes sont tellement bons pour commencer», a déclaré Wilde. «Lorsque vous écrivez un shader, certainement ce genre de shader … vous vous superposez à un pipeline existant et à des configurations d’éclairage existantes. Il s’agit donc simplement d’essayer d’exploiter au mieux ce qui est là. »
Agiter une bouteille peut être simple à faire dans la vraie vie, mais ce n’est pas si simple de faire réagir une bouteille virtuelle en nature. Avec le temps et des pouvoirs d’observation franchement impressionnants, Half-Life: Les bouteilles d’alcool d’Alyx sont devenues si justes que nous n’avons pas besoin de suspendre l’incrédulité lorsque nous les voyons. C’est le genre de pensée créative et intelligente dont le développement de jeux bénéficiera toujours, quelle que soit la technologie avancée.