Comment rendre le cadre de la Terre du Milieu: L'Ombre du Mordor


Middle Earth: Shadow of Mordor a été lancé en 2014. Le jeu lui-même a été une grande surprise, et le fait qu'il s'agissait d'un spin-off de l'histoire de l'univers du Seigneur de l'Anneau était assez inattendu. Le jeu a remporté un grand succès, et au moment de la rédaction, Monolith a déjà publié une suite - Shadow of War. Les graphismes du jeu sont très beaux, d'autant plus qu'il est sorti pour différentes générations de consoles, dont la Xbox 360 et la PS3. La version PC est assez bien polie, contient des options graphiques supplémentaires et des packs de textures haute résolution qui révèlent pleinement le potentiel du jeu.

Le jeu utilise le rendu différé DX11 relativement nouveau. J'ai utilisé Renderdoc pour apprendre en profondeur les techniques de rendu du jeu. Lors du travail, le maximum de paramètres graphiques possibles (ultra) a été utilisé et toutes les «lotions» possibles ont été incluses, telles que la transparence indépendante de l'ordre, la mosaïque, l'occlusion dans l'espace de l'écran et divers flous de mouvement.

Cadre


Voici un cadre que nous analyserons. Le joueur est situé sur une plateforme en bois dans la région d'Udun. Shadow of Mordor utilise des mécanismes similaires à ceux de jeux comme Assassin's Creed, où vous pouvez escalader des bâtiments et des tours, puis profiter du paysage numérique environnant depuis les toits.

image

Passage en profondeur


Les quelque 140 premiers appels de rendu font une passe préliminaire rapide pour rendre les éléments d'élévation et les bâtiments les plus grands au tampon de profondeur. La plupart des objets ne tombent pas dans cette passe préliminaire, mais cela aide lorsque le jeu a un très grand nombre d'appels de tirage et que vous pouvez regarder loin. Fait intéressant, un personnage qui est toujours au centre de l'écran et occupe une fraction décente de l'espace d'écran ne tombe pas dans ce passage. Comme dans de nombreux autres jeux en monde ouvert, le moteur utilise les valeurs z inverses. Cette technique lie le plan proche à 1,0 et le plan lointain à 0,0 pour augmenter la précision à de grandes distances et éviter les conflits z. En savoir plus sur la précision du tampon z ici .

image

G-buffer


Immédiatement après cela, la passe du tampon G commence, qui est effectuée dans environ 2700 appels de tirage. Si vous avez lu mon analyse précédente de Castlevania: Lords of Shadow 2 ou étudié d'autres articles similaires, ce passage devrait vous être familier. La propriété des surfaces est enregistrée dans un ensemble de tampons, qui sont ensuite lus dans les passes du calcul d'éclairage pour calculer les réactions des surfaces à la lumière. Shadow of Mordor utilise un rendu différé classique, mais un nombre relativement faible de cibles de rendu du G-buffer est utilisé pour atteindre cet objectif (3). A titre de comparaison: Unreal Engine dans ce passage utilise 5-6 tampons. G-buffer a le schéma suivant:

Tampon normal

RGBUn
Normal.xNormal.yNormal.zIdentifiant

Le tampon des normales stocke les normales dans l'espace mondial au format «8 bits par canal». Cela suffit à peine, et parfois pas du tout, pour décrire des surfaces plates variant en douceur. Si vous regardez attentivement, cela peut être vu dans certaines flaques d'eau dans le jeu. Le canal alpha est utilisé comme identifiant qui marque différents types d'objets. Par exemple, j'ai découvert que 255 fait référence au personnage, 128 à la partie animée du drapeau, et le ciel est marqué avec ID 1, car plus tard ces identifiants sont utilisés pour le filtrer au stade de l'ajout (le ciel obtient sa propre floraison radiale).



Dans l'article d'origine, ces images et bien d'autres sont animées pour plus de clarté, donc je vous recommande d'y regarder.

Albedo tampon

RGBUn
Albedo.rAlbedo.gAlbedo.bOcclusion de la cavité

Le tampon d'albédo stocke les trois composants de l'albédo et une occlusion à petite échelle (parfois appelée occlusion de cavité), qui est utilisée pour ombrer de petits détails qui ne peuvent pas être obtenus avec une carte d'ombre ou un post-traitement dans l'espace de l'écran. Il est principalement utilisé à des fins décoratives, par exemple, des trous et des plis sur les vêtements, de petites fissures dans un arbre, de petits motifs sur les vêtements de Talion, etc.



Lors du traitement des ennemis dans le shader, l'albédo prend en compte la texture du sang (il est intéressant de noter que Talion n'a jamais de blessures visibles). La texture du sang est l'entrée pour la phase de rendu des vêtements et du corps des ennemis, mais elle ne spécifie pas la couleur du sang, qui est l'entrée dans le tampon constant, mais détermine les facteurs / niveaux de sang pour contrôler la quantité de sang affichée. De plus, l'orientation normale est utilisée pour mettre à l'échelle l'effet, vous permettant de contrôler la direction des éclaboussures de sang. Ensuite, l'albédo s'obscurcit essentiellement avec la luminosité des blessures reçues par l'ennemi, prises à l'endroit correspondant sur la carte du sang, et modifie également d'autres propriétés, telles que spéculaires, pour obtenir un effet sanguin convaincant. Je n'ai pas pu trouver la partie du cadre dans laquelle la carte est rendue, mais je suppose qu'elles sont enregistrées dès le début du cadre lorsque l'épée est exposée, puis utilisées ici.





Tampon spéculaire

RGBUn
RugositéIntensité spéculaireFresnelFacteur de diffusion souterraine

Le tampon spéculaire contient d'autres propriétés de surface que l'on peut s'attendre à voir dans les jeux, telles que la rugosité (ce n'est pas tout à fait de la rugosité, mais un degré spéculaire à l'échelle, mais il peut être interprété de cette façon), l'intensité spéculaire (la luminosité de la réflexion spéculaire) qui évolue l'albédo pour obtenir le facteur de réflexion spéculaire de couleur correct (communément appelé F0 dans la littérature, car il s'agit de l'entrée de la réponse du miroir de Fresnel) et du composant de diffusion souterraine (diffusion souterraine). Ce dernier composant est utilisé pour éclairer les matériaux translucides tels que les tissus fins, les plantes et la peau. Si plus tard nous plongons dans l'étude du shader d'éclairage, nous constatons que nous utilisons ici la variation du modèle spéculaire normalisé selon Blinn-Fong .





Autocollants différés

Comme nous l'avons vu ci-dessus, Shadow of Mordor affiche des traces de sang assez détaillées sur les personnages blessés. Lorsque Talion agite son épée, l'environnement reçoit également sa part de sang d'orque noir. Cependant, une autre technique est utilisée pour les environnements - décalcomanies différées . Cette technique consiste à projeter un ensemble de textures plates sur la surface de ce qui a été précédemment rendu. De cette façon, le contenu du G-buffer est remplacé par ce nouveau contenu avant d'effectuer la passe d'éclairage. Dans le cas du sang, une simple pulvérisation sanglante suffit, et lors du rendu de nombreux décalques à tour de rôle, un paysage plutôt sombre est rapidement créé.












La dernière chose qui est rendue dans le passage du tampon G est le ciel, la texture du ciel est en très haute résolution (8192 × 2048) au format HDR BC6H. J'ai dû faire une petite correction de tonalité, car en HDR toutes les couleurs sont trop sombres.

image

Tessellation


Une «fonctionnalité» très intéressante du jeu (si elle est activée) est la tessellation. Il est utilisé pour de nombreuses choses différentes, du terrain au rendu des personnages (ainsi que des accessoires et des objets de personnages). Ici, la tessellation ne subdivise pas le maillage low poly, mais crée des polygones à partir d'un nuage de points, en utilisant le degré de subdivision nécessaire, en fonction des critères du niveau de détail, par exemple, de la distance à la caméra. Un exemple intéressant est la cape Talion, qui est transmise au GPU sous forme de nuage de points (après simulation physique), et le shader de pavage recrée les polygones.



Transparence indépendante des commandes



L'une des premières choses qui m'a frappé par son étrangeté est le traitement capillaire, car il effectue un shader spécial très complexe. Dans les options graphiques, l'option OIT (Order-Independent Transparency) pour les cheveux est mentionnée, c'est-à-dire qu'elle devrait l'être. Premièrement, il effectue la sortie vers un tampon séparé et calcule le nombre total de pixels transparents superposés les uns aux autres, tout en sauvegardant les propriétés dans une structure "profonde" similaire à un tampon G. Plus tard, un autre shader trie les fragments individuels selon leur profondeur. Il semble que les flèches rendent également de cette façon (probablement, leur plumage nécessite un tri approprié). C'est un effet très subtil qui n'ajoute aucune différence graphique particulière, mais c'est quand même un détail intéressant. Voici un exemple simple: l'image ci-dessus montre le nombre de fragments qui se chevauchent (le plus rouge, le plus de fragments). La transparence régulière est toujours triée par le processeur et rendue en alpha traditionnel. Seules les entités individuelles tombent dans la passe OIT.

Ombres du Mordor


SoM a de nombreuses sources d'ombre. En plus des cartes d'ombre traditionnelles des sources de lumière dynamiques, SoM utilise une occlusion ambiante à deux canaux dans l'espace de l'écran, une occlusion à micro-échelle créée pour presque tous les objets du jeu et une texture d'occlusion similaire à une carte de hauteur avec une vue de dessus.

Occlusion dans l'espace écran


Le premier passage est rendu en utilisant le tampon G ambiant et l'occlusion spéculaire dans l'espace d'écran. Le shader lui-même est un énorme cycle déplié qui échantillonne à la fois la carte de profondeur en taille réelle et la carte de profondeur moyenne précédemment réduite, à la recherche d'échantillons voisins dans un modèle donné. Il utilise une texture carrée 4x4 pour sélectionner des vecteurs pseudo-aléatoires à la recherche de sources d'occlusion. Il rend un tampon d'occlusion bruyant, qui est ensuite lissé par un simple flou en deux passes. La caractéristique la plus intéressante ici est qu'il existe deux canaux d'occlusion différents: l'un d'eux est utilisé comme occlusion spéculaire et l'autre comme occlusion diffuse. Dans les implémentations SSAO standard, un canal est calculé qui s'applique à tout l'éclairage cuit. Ici, la carte SSAO est également lue pour être transmise au passage d'éclairage directionnel, le cas échéant.



Cartes fantômes

L'événement suivant est le rendu de la carte d'ombre. Étant donné que l'action du jeu se déroule principalement dans des espaces ouverts, la plupart de la lumière et des ombres proviennent de la lumière directionnelle principale. Nous utilisons ici la technique des cartes d'ombres en cascade (dont une variante est des cartes d'ombres divisées parallèles ), une technique assez standard pour appliquer des ombres sur de longues distances, qui consiste à rendre la même scène d'un point de vue de la source lumineuse pour différentes zones de l'espace. Habituellement, les cartes ombrées éloignées de la zone de couverture de la caméra sont à de grandes distances ou ont une résolution inférieure aux précédentes, ce qui réduit essentiellement la résolution dans les zones où les détails ne sont toujours pas nécessaires en raison du fait que la géométrie est trop éloignée. Dans cette scène, le jeu affiche trois cascades d'ombres 4096 × 4096 (en fait, le jeu a une place pour quatre). La cascade supérieure est très proche de Talion, et celle du bas comprend des montagnes et des objets très loin de la caméra. Lorsque vous travaillez avec des ombres, le jeu utilise la même astuce avec la coordonnée z inverse que dans la carte de profondeur. \


Tampon d'ombre

L'étape suivante consiste à créer un tampon caché. Il s'agit d'une texture monocanal, basée sur les informations d'occlusion des cartes d'ombre précédentes, elle code un facteur d'ombre dans l'intervalle [0, 1]. Pour créer un lissage autour des bords, la carte d'ombre est échantillonnée 4 fois en utilisant l'état d'un échantillonneur bilinéaire spécial, qui reçoit 4 échantillons et les compare avec une valeur donnée (c'est ce qu'on appelle le filtrage de fermeture en pourcentage ). L'obtention de plusieurs échantillons et la moyenne de leurs résultats sont souvent appelées ombres douces plus proches en pourcentage . En plus de lire la carte des ombres, la dernière composante du tampon spéculaire (c'est-à-dire le coefficient de diffusion souterraine) est également échantillonnée, qui est multipliée par le «facteur de saignement léger». Il semble que cela soit nécessaire pour éliminer l'ombrage de ces objets, afin qu'un peu plus de lumière les traverse.


Texture de projection directionnelle

Une autre source de lumière et d'ombre est une texture vue de dessus échantillonnée par une source de lumière directionnelle. Il s'agit de la dominante de couleur ajoutée à la couleur de la source de lumière directionnelle, plus l'effet de l'ombrage global qui s'applique à l'éclairage directionnel. Il semble que certains d'entre eux ont été créés manuellement au-dessus d'une carte d'éclairage de niveau générée automatiquement avec une vue de dessus. Il semble que les bords des ombres pour la géométrie statique soient ajustés manuellement (peut-être pour éviter les conflits avec la vraie carte des ombres), et certaines parties semblent également être légèrement teintées à la main. La tâche de cette texture est probablement l'ajout à faible coût d'occlusion ambiante à grande échelle et de simulations d'éclairage global légères en plus de l'éclairage directionnel. Les images ci-dessous montrent la teinte, l'occlusion et le produit des deux facteurs, ce qui nous donne une idée de ce à quoi ressemble le masque de couleur final.




Le résultat de toutes les passes d'éclairage est enregistré dans la cible de rendu du format R11G11B10F. Voici à quoi ressemble le résultat. J'ai effectué une correction tonale des résultats pour rendre plus visible l'effet de l'éclairage directionnel au niveau.


Toutes les montagnes éloignées (non représentées dans l'image ci-dessus) sont également éclairées par la lumière directionnelle, mais elles sont mises en évidence comme un boîtier séparé afin que l'éclairage puisse être mieux contrôlé. Certains sont à l'échelle, mais ceux plus loin sont en fait des imposteurs avec des cartes normales et albédo intelligemment créées. Ils ont des sources spéciales d'éclairage directionnel qui n'affectent que les montagnes.

Éclairage statique


Shadow of Mordor utilise une implémentation d'éclairage statique très gourmande en mémoire, qui utilise des textures de très grand volume. L'image ci-dessous montre trois textures statiques pour la quantité d'éclairage utilisée pour éclairer de manière diffuse une partie de cette zone. Chacun d'eux est une énorme texture compressée 512x512x128 BC6H, c'est-à-dire qu'ils occupent 32 Mo par texture ou 96 Mo en général (nous jouons avec des paramètres de qualité maximale). La texture de la couleur indique l'intensité entrant dans le voxel. Les deux autres indiquent la force ou l'amplitude de cette intensité dans les six directions xyz et -xyz, et la normale est utilisée pour sélectionner trois composantes (xyz positive ou négative, celles qui sont les plus cohérentes avec la normale). Après avoir construit ce vecteur, nous prenons son produit vectoriel par le carré de la normale, et cela devient le facteur d'échelle pour l'intensité. La formule est la suivante:



Les volumes de lumière statique rendent également une carte cubique pour l'éclairage spéculaire, qui est probablement capturé au centre du SLV. Chose intéressante, les textures de volume stockent des valeurs HDR compressées au BC6H et les cartes cubiques sont stockées au format BC3 (DXT5), qui ne peut pas stocker de valeurs à virgule flottante. Pour compenser cette limitation, le canal alpha conserve la luminosité, qui passe ensuite de 1 à 10. C'est une décision un peu bizarre, et pour moi, cela ressemble plus à une implémentation Legacy. N'oubliez pas que le jeu a été publié pour les consoles de génération précédente, qui ne prennent pas en charge les nouveaux formats de texture HDR.


Les cadres ci-dessous montrent les résultats «avant et après» en tenant compte de l'impact de l'image moyenne. Pour la visualisation, j'ai effectué une correction tonale.




Brouillard atmosphérique



Shadow of Mordor a un système météo et horaire, grâce auquel le soleil brille ou la pluie se déverse à travers le jeu dans Mordor. Ce système est contrôlé par la somme des composants, et l'un des plus importants est le brouillard. Shadow of Mordor utilise un modèle de brouillard atmosphérique assez simple mais physiquement solide, y compris la diffusion de Rayleigh unique, ainsi que la diffusion par une particule sphérique (diffusion Mie).

Il commence par calculer la position de la caméra par rapport au centre de la terre . Plusieurs formules trigonométriques permettent de déterminer où se trouve la caméra dans l'atmosphère, où se trouve le pixel, et quelle distance le faisceau parcourt dans l'atmosphère à une hauteur maximale donnée de l'atmosphère. Dans notre cas, l'atmosphère est située à une hauteur de 65 000 mètres au-dessus de la surface de la planète. Compte tenu de ces informations, Rayleigh et les coefficients de particules sphériques sont utilisés pour calculer à la fois les types de densités des particules de brouillard et leurs couleurs. Ces densités obscurcissent les pixels déjà ombrés, diffusant la lumière entrant dans la caméra depuis la surface ombragée et contribuant au brouillard. Lors de la simulation d'une telle diffusion, la luminosité et la direction du soleil sont prises en compte.



Vitesse d'obturation et correction de tonalité


Lors du calcul de la vitesse d'obturation, une approche assez standard est utilisée: la réduction séquentielle de la résolution du tampon de luminosité, calculée à partir du tampon de couleur HDR principal, en une chaîne de textures, chacune ayant la moitié de la taille de la texture précédente, en commençant par une texture 1/3 du tampon de cadre principal. Avec cette diminution de résolution, 4 échantillons sont prélevés, faisant la moyenne des valeurs des pixels voisins, c'est-à-dire qu'après avoir converti toutes les valeurs moyennes en un seul texel, le résultat final devient une luminosité moyenne. Une fois que la texture atteint la taille de 16 × 9 texels, un shader de calcul est lancé, résumant tous les texels restants. Cette valeur est immédiatement lue dans la passe de correction de tonalité pour modifier les valeurs de luminosité.







Pour la correction de tonalité, l'opérateur Reinhardt est utilisé, dont une formule optimisée peut être trouvée ici et ici . En code hlsl, cela ressemblera à ceci:

float3 hdrColor = tex2D(HDRTexture, uv.xy); hdrColor *= exposureValue; // This was calculated by the compute shader in the luminance downsampling pass float3 x = max(0.0, hdrColor - 0.004); float3 finalColor = (x * (6.2 * x + 0.5)) / (x * (6.2 * x + 1.7) + 0.06); 

Si nous traçons cette courbe, nous verrons que cet opérateur rejette 10% des valeurs blanches même avec une valeur d'entrée de 2,0, tout en laissant de force une petite partie de l'intervalle inférieur complètement noire. Cela crée une image sombre et désaturée.

image

Stade Alpha


L'étape alpha est un peu inhabituelle car elle rend les objets directement dans le tampon LDR. D'autres jeux les rendent également dans le tampon HDR afin qu'ils puissent participer au passage d'obturateur. Quoi qu'il en soit, la texture de luminosité précédemment calculée est limitée à tous les objets illuminés par alpha (dans certains cas, par exemple, pour les objets électroluminescents, la vitesse d'obturation est calculée en utilisant les constantes de shader, pas la recherche de texture), et donc la vitesse d'obturation est appliquée automatiquement lors du rendu, et non effectuée en post-traitement. Un cas très spécifique d'utilisation de l'alpha dans un jeu est une transition vers le mode fantôme (le fantôme de Celebrimbor y est rendu au-dessus du personnage du joueur, forgé dans les anneaux souverains de l'univers LOTR; ainsi, le jeu montre qu'il est toujours à proximité, bien qu'invisible). Le jeu transmet plusieurs paramètres aux mailles des deux personnages, qui contrôlent l'opacité et permettent au jeu d'obscurcir partiellement Talion et de montrer progressivement Celebrimore. D'autres objets du jeu en mode fantôme rendent également des versions fantômes au-dessus d'objets opaques, tels que des ennemis et des tours. Voici une autre scène avec la transition vers le monde fantomatique.





La pluie


Dans le cadre principal que nous avons examiné, il n'y a pas de pluie, mais la météo est une partie tellement importante du jeu que je voudrais le mentionner ici. Il est généré et simulé dans le GPU, et rendu juste à la fin de la phase alpha. Un shader de calcul est exécuté qui exécute la simulation et écrit les positions dans le tampon. Ces positions sont prises par un autre shader qui, à l'aide d'un appel indirect instancié, rend autant d'instances de quads que les positions ont été calculées lors de la passe précédente. Le vertex shader a un simple quad qui, si nécessaire, est déformé et tourne vers la caméra. Pour empêcher la pluie de pénétrer dans les surfaces, le vertex shader lit également les cartes de hauteur à partir d'une vue de dessus, ce qui vous permet de rejeter toutes les gouttes sous la surface qui se chevauchent. Cette carte de hauteur est rendue juste au début du cadre. Le même vertex shader indique au pixel shader où obtenir l'échantillon de la texture de goutte; si la goutte est proche de la surface, elle sélectionne une zone de texture contenant une animation de démarrage. De plus, les gouttes de pluie effectuent des calculs de brouillard dans le pixel shader pour se fondre parfaitement avec le reste de la scène. Voici une capture d'écran du même point de vue un jour de pluie.



Lorsque l'effet de pluie est activé, le tampon spéculaire est globalement modifié pour créer des surfaces humides et les vagues de pluie sont restituées dans le tampon normal. L'animation est chronométrée, donc une seule image de l'animation en boucle est utilisée. Le tampon normal illustré ci-dessous est modifié pour afficher les ondes rendues dans le tampon.





Fusées éclairantes et Bloom


Une fois le rendu alpha terminé, les reflets de l'objectif sont rendus par-dessus. Une série de quads décalés est rendue à partir du point d'où vient la lumière directionnelle (dans notre cas, le soleil). Immédiatement après cela, une passe de floraison est effectuée. Il s'agit d'une technique assez standard, qui consiste en une série de textures de taille réduite et floues contenant des pixels dont la luminosité dépasse un certain seuil. Deux passes de floraison sont utilisées, communes avec le flou gaussien pour toute la scène et un flou radial spécial qui ne s'applique qu'au ciel. Le flou radial est l'une des opérations qui utilise un identifiant spécial du tampon G des cartes normales, car seuls les pixels du ciel sont pris en compte. En prime, ce flou échantillonnera la carte de profondeur et peut créer des rayons crépusculaires à faible coût. Puisque nous travaillons avec un tampon LDR à ce stade, la valeur du seuil de floraison est différente de la valeur du tapis HDR (les valeurs supérieures au seuil, généralement 1,0, conduisent au calcul), ce qui signifie que la valeur de la floraison obtenue à partir de celui-ci est légèrement limitée. En tout cas, c'est bon pour le jeu et voici les résultats. Dans les images ci-dessous, les couleurs de la texture du mip de floraison semblent un peu étranges car chaque pixel est mis à l'échelle par la luminosité contenue dans le canal alpha. Cette luminosité a été calculée plus tôt, au stade de la correction tonale. Dans la composition finale, la floraison est calculée comme bloom.rgb · bloom.a · bloomScale .
















Anticrénelage + profondeur de champ


Il n'y a pas grand-chose à dire sur ces deux opérations; des approches standard de l'industrie sont utilisées. Un simple passage à travers l'anticrénelage FXAA est effectué immédiatement après la composition de la floraison avec l'image LDR, et la profondeur de champ est effectuée immédiatement après. Pour la profondeur de champ, le jeu rend deux versions floues diminuées du tampon final. Ensuite, la profondeur de pixel est utilisée pour mélanger des images floues et normales, ce qui donne un effet de défocalisation. Pour plus de clarté, dans cette capture, j'ai exagéré l'effet de la profondeur de champ. Le jeu dispose d'un mode capture d'écran intégré, vous permettant de configurer facilement ces conditions.








Flou de mouvement


Le flou de mouvement se compose de deux passes. Tout d'abord, les données des orientations précédente et actuelle de la caméra sont transférées vers le tampon de vitesse plein écran. Dans ce cas, deux canaux de la texture sont remplis de vitesse dans l'espace d'écran. Maintenant, le canal r contient l'amplitude du changement de pixel dans la direction horizontale de l'écran, et le canal g contient l'amplitude dans la direction verticale. C'est ainsi que les rayures radiales sont obtenues lors du déplacement de la caméra. Le personnage est à nouveau rendu, remplissant cette fois le canal bleu en fonction de ses poses actuelles et précédentes, comme c'est le cas avec la caméra. Le canal bleu est utilisé pour marquer si le rendu doit être rendu ou non. Le canal alpha est également rempli d'une valeur constante (0,0598), mais je n'ai pas étudié sa valeur ou ses objectifs. La résolution du tampon de vitesse est réduite à une très petite texture en faisant la moyenne sur une plage de vitesses relativement large dans la texture d'origine. Dans la dernière passe, cela donne à chaque pixel une idée approximative de ce que sera le rayon de flou dans une vraie passe de flou.

Ensuite, la passe de flou lit les textures de vitesse, une carte de profondeur, le tampon de couleurs d'origine et la texture de bruit. Cette dernière sert à masquer l'effet d'une image miroir, ce qui peut se produire avec ce type de flou à grand rayon. Ensuite, le tampon d'image est échantillonné plusieurs fois dans la direction indiquée par le tampon de vitesse, les couleurs sont moyennées, ce qui conduit à un flou de l'image dans la direction des vecteurs de mouvement. En outre, cet effet est mis à l'échelle en fonction de la fréquence d'images avec laquelle le jeu fonctionne. Pour cette capture, j'ai dû limiter le jeu à 30fps, car à 60fps et plus, c'est à peine perceptible.





Correction des couleurs


La dernière passe de correction des couleurs est effectuée à l'aide des «cubes de couleur». Un cube de couleur est une texture 3D dont les composants RVB s'accrochent aux coordonnées xyz de la texture. Ces coordonnées xyz contiennent la couleur dont nous avons besoin pour remplacer la couleur d'origine. Dans notre cas, la table de recherche (LUT) est neutre (c'est-à-dire que les coordonnées et la couleur contiennent la même valeur), j'ai donc modifié la même scène en utilisant les préréglages fournis par le jeu dans l'éditeur de caméra.





Cadre final


Après la création du cadre principal dans un tampon séparé, l'interface utilisateur est rendue. Cela garantit que, quelle que soit la taille sélectionnée pour le tampon arrière, l'interface utilisateur restera toujours claire et belle dans la taille de la fenêtre native, tandis que le jeu peut modifier la résolution si nécessaire pour garantir la vitesse. Au final, les deux textures sont mélangées ensemble sur la base des données du canal alpha de l'interface utilisateur, puis rendues dans le tampon de trame final, qui est prêt à être affiché à l'écran.



J'espère que vous avez apprécié mon analyse. Je tiens à remercier Adrian Correge pour le travail incroyable qui m'a inspiré à étudier les graphismes, ainsi que le personnel du studio Monolith pour ce jeu vraiment inoubliable.

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


All Articles